diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..2b46936f2e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,12 @@ +--- +name: Bug report +about: Create a report to help fix an issue. +--- + +[Platform]: # (Android/iOS/Mac/Windows/Linux/Web) + +[Build]: # (The build number under the title in the main menu. Required.) + +[Issue]: # (Explain your issue in detail, possibly including the steps to reproduce it.) + +[Notes]: # (Other notes.) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..9185b77882 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,7 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +Do not make a new issue for feature requests. Instead, post it in #545. diff --git a/.gitignore b/.gitignore index c6c812b18e..8e8a4c2689 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ logs/ /core/assets/bundles/output/ /core/assets/.gifimages/ /deploy/ +/out/ /desktop/packr-out/ /desktop/packr-export/ /desktop/mindustry-saves/ diff --git a/TRANSLATING.md b/TRANSLATING.md index 69065a91ba..0514018541 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -31,6 +31,10 @@ There are two ways to test the translation bundle: 1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.* 2) For advanced users: simply download your fork of mindustry and compile/run the game. +#### Translating for stores (Steam, Google Play) + +If you would like to translate the descriptions for Google Play or Steam, see the [Fastlane Metadata folder](https://github.com/Anuken/Mindustry/tree/master/fastlane/metadata) and submit a pull request for files there. On Google Play, you would create or edit the folder with the correct local code; for Steam, I have to update the translations manually, so just name the folder with the language name, and include the same files as the English folder does. + **And that's it.** *(...of course, that's never really it. Bother me on Discord when something inevitably goes wrong.)* diff --git a/android/build.gradle b/android/build.gradle index 032d268053..8dfa8665c5 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -80,7 +80,9 @@ android{ versionName versionNameResult versionCode vcode - props['androidBuildCode'] = (vcode + 1).toString() + if(project.hasProperty("release")){ + props['androidBuildCode'] = (vcode + 1).toString() + } props.store(file('../core/assets/version.properties').newWriter(), null) } diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 97443f0d3b..2cc928d322 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -1,5 +1,6 @@ package io.anuke.mindustry; +import android.*; import android.app.*; import android.content.*; import android.content.pm.*; @@ -21,6 +22,7 @@ import io.anuke.mindustry.ui.dialogs.*; import java.io.*; import java.lang.System; +import java.util.*; import static io.anuke.mindustry.Vars.*; @@ -68,14 +70,16 @@ public class AndroidLauncher extends AndroidApplication{ @Override public void showFileChooser(boolean open, String extension, Consumer cons){ - if(VERSION.SDK_INT >= 19){ + if(VERSION.SDK_INT >= VERSION_CODES.Q){ Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("*/*"); + intent.setType(extension.equals("zip") ? "application/zip" : "*/*"); addResultListener(i -> startActivityForResult(intent, i), (code, in) -> { if(code == Activity.RESULT_OK && in != null && in.getData() != null){ Uri uri = in.getData(); + if(uri.getPath().contains("(invalid)")) return; + Core.app.post(() -> Core.app.post(() -> cons.accept(new FileHandle(uri.getPath()){ @Override public InputStream read(){ @@ -97,6 +101,24 @@ public class AndroidLauncher extends AndroidApplication{ }))); } }); + }else if(VERSION.SDK_INT >= VERSION_CODES.M && !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && + checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){ + chooser = new FileChooser(open ? "$open" : "$save", file -> file.extension().equalsIgnoreCase(extension), open, file -> { + if(!open){ + cons.accept(file.parent().child(file.nameWithoutExtension() + "." + extension)); + }else{ + cons.accept(file); + } + }); + + ArrayList perms = new ArrayList<>(); + if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ + perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + } + if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ + perms.add(Manifest.permission.READ_EXTERNAL_STORAGE); + } + requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE); }else{ super.showFileChooser(open, extension, cons); } diff --git a/build.gradle b/build.gradle index 7bc56367ea..9411b3544d 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ allprojects{ arcHash = null debugged = { - return new File(projectDir.parent, '../debug').exists() && !project.hasProperty("release") && project.hasProperty("args") + return new File(projectDir.parent, '../Mindustry-Debug').exists() && !project.hasProperty("release") && project.hasProperty("args") } localArc = { @@ -38,7 +38,7 @@ allprojects{ } getArcHash = { - return new Properties().with{ p -> p.load(new File((File)projectDir, 'gradle.properties').newReader()); return p }["archash"] + return new Properties().with{ p -> p.load(file('gradle.properties').newReader()); return p }["archash"] } arcModule = { String name -> @@ -270,7 +270,6 @@ project(":tools"){ dependencies{ compile project(":core") - //for render tests compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-0.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-0.png new file mode 100644 index 0000000000..449fd8edd2 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-0.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-1.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-1.png new file mode 100644 index 0000000000..533197c129 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-1.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-2.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-2.png new file mode 100644 index 0000000000..fc35589fc5 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-2.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-3.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-3.png new file mode 100644 index 0000000000..d82a979b56 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-0-3.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-0.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-0.png new file mode 100644 index 0000000000..55b158a772 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-0.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-1.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-1.png new file mode 100644 index 0000000000..ec888dd9c3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-1.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-2.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-2.png new file mode 100644 index 0000000000..2dc64d4657 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-2.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-3.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-3.png new file mode 100644 index 0000000000..086915a1f1 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-1-3.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-0.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-0.png new file mode 100644 index 0000000000..12a7f74198 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-0.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-1.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-1.png new file mode 100644 index 0000000000..fc232cd074 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-1.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-2.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-2.png new file mode 100644 index 0000000000..5c5c031884 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-2.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-3.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-3.png new file mode 100644 index 0000000000..4caa3d231a Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-2-3.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-0.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-0.png new file mode 100644 index 0000000000..847ac502d4 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-0.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-1.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-1.png new file mode 100644 index 0000000000..06755ed438 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-1.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-2.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-2.png new file mode 100644 index 0000000000..818d0dc61e Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-2.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-3.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-3.png new file mode 100644 index 0000000000..5cfd971499 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-3-3.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-0.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-0.png new file mode 100644 index 0000000000..226ea15100 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-0.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-1.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-1.png new file mode 100644 index 0000000000..9c03796c18 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-1.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-2.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-2.png new file mode 100644 index 0000000000..cad7f9e213 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-2.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-3.png b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-3.png new file mode 100644 index 0000000000..6842c71975 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/conveyors/armored-conveyor-4-3.png differ diff --git a/core/assets-raw/sprites/blocks/extra/message.png b/core/assets-raw/sprites/blocks/extra/message.png new file mode 100644 index 0000000000..f18960812c Binary files /dev/null and b/core/assets-raw/sprites/blocks/extra/message.png differ diff --git a/core/assets-raw/sprites/blocks/units/rally-point.png b/core/assets-raw/sprites/blocks/units/rally-point.png new file mode 100644 index 0000000000..1d0921ec06 Binary files /dev/null and b/core/assets-raw/sprites/blocks/units/rally-point.png differ diff --git a/core/assets-raw/sprites/ui/icons/icon-command-idle.png b/core/assets-raw/sprites/ui/icons/icon-command-rally.png similarity index 100% rename from core/assets-raw/sprites/ui/icons/icon-command-idle.png rename to core/assets-raw/sprites/ui/icons/icon-command-rally.png diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index d0ef17bcad..ef4bfb08e5 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -51,6 +51,7 @@ minimap = Minimap close = Close website = Website quit = Quit +save.quit = Save & Quit maps = Maps maps.browse = Browse Maps continue = Continue @@ -125,6 +126,7 @@ server.version = [gray]v{0} {1} server.custombuild = [accent]Custom Build confirmban = Are you sure you want to ban this player? confirmkick = Are you sure you want to kick this player? +confirmvotekick = Are you sure you want to vote-kick this player? confirmunban = Are you sure you want to unban this player? confirmadmin = Are you sure you want to make this player an admin? confirmunadmin = Are you sure you want to remove admin status from this player? @@ -161,6 +163,7 @@ save.rename = Rename save.rename.text = New name: selectslot = Select a save. slot = [accent]Slot {0} +editmessage = Edit Message 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. empty = on = On @@ -174,6 +177,7 @@ save.playtime = Playtime: {0} warning = Warning. confirm = Confirm delete = Delete +view.workshop = View In Workshop ok = OK open = Open customize = Customize Rules @@ -202,7 +206,7 @@ wave.enemy = [lightgray]{0} Enemy Remaining loadimage = Load Image saveimage = Save Image unknown = Unknown -custom = Custom +custom = Custom builtin = Built-In map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! map.random = [accent]Random Map @@ -222,6 +226,7 @@ editor.oregen.info = Ore Generation: editor.mapinfo = Map Info editor.author = Author: editor.description = Description: +editor.nodescription = A map must have a description of at least 4 characters before being published. editor.waves = Waves: editor.rules = Rules: editor.generation = Generation: @@ -288,6 +293,7 @@ editor.resizemap = Resize Map editor.mapname = Map Name: editor.overwrite = [accent]Warning!\nThis overwrites an existing map. editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? +editor.exists = A map with this name already exists. editor.selectmap = Select a map to load: toolmode.replace = Replace @@ -482,6 +488,7 @@ bar.drilltierreq = Better Drill Required bar.drillspeed = Drill Speed: {0}/s bar.efficiency = Efficiency: {0}% bar.powerbalance = Power: {0}/s +bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} bar.items = Items: {0} @@ -532,6 +539,7 @@ setting.antialias.name = Antialias[lightgray] (requires restart)[] setting.indicators.name = Enemy/Ally Indicators setting.autotarget.name = Auto-Target setting.keyboard.name = Mouse+Keyboard Controls +setting.touchscreen.name = Touchscreen Controls setting.fpscap.name = Max FPS setting.fpscap.none = None setting.fpscap.text = {0} FPS @@ -574,8 +582,8 @@ category.general.name = General category.view.name = View category.multiplayer.name = Multiplayer command.attack = Attack +command.rally = Rally command.retreat = Retreat -command.patrol = Patrol keybind.gridMode.name = Block Select keybind.gridModeShift.name = Category Select keybind.press = Press a key... @@ -794,10 +802,13 @@ block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Conveyor block.titanium-conveyor.name = Titanium Conveyor +block.armored-conveyor.name = Armored Conveyor +block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors. block.junction.name = Junction block.router.name = Router block.distributor.name = Distributor block.sorter.name = Sorter +block.message.name = Message block.overflow-gate.name = Overflow Gate block.silicon-smelter.name = Silicon Smelter block.phase-weaver.name = Phase Weaver @@ -973,6 +984,7 @@ unit.eruptor.description = A heavy mech designed to take down structures. Fires unit.wraith.description = A fast, hit-and-run interceptor unit. Targets power generators. unit.ghoul.description = A heavy carpet bomber. Rips through enemy structures, targeting critical infrastructure. unit.revenant.description = A heavy, hovering missile array. +block.message.description = Stores a message. Used for communication between allies. block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite. block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently. block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 8a005b0e13..683532f684 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -4,7 +4,7 @@ contributors = Překladatelé a Sponzoři discord = Připoj se k Mindustry na Discordu! link.discord.description = Oficiální Mindustry chatroom na Discordu! link.github.description = Zdrojový kód hry -link.changelog.description = List of update changes +link.changelog.description = Seznam úprav link.dev-builds.description = Nestabilní verze vývoje hry link.trello.description = Oficiální Trello board pro plánované funkce link.itch.io.description = itch.io stránka pro stažení PC nebo webové verze @@ -12,55 +12,55 @@ link.google-play.description = Google Play store link.wiki.description = Oficiální Mindustry wiki linkfail = Nepodařilo se otevřít odkaz!\nURL byla zkopírována do schránky. screenshot = Snímek obrazovky uložen {0} -screenshot.invalid = Map too large, potentially not enough memory for screenshot. +screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro snímek obrazovky. gameover = Konec hry gameover.pvp = [accent] {0}[] Tým Vyhrál! -highscore = [accent]Nový Rekord! -load.sound = Sounds -load.map = Maps -load.image = Images -load.content = Content +highscore = [accent]Nový rekord! +load.sound = Zvuky +load.map = Mapy +load.image = Obrázky +load.content = Obsah load.system = System -stat.wave = Waves Defeated:[accent] {0} -stat.enemiesDestroyed = Enemies Destroyed:[accent] {0} -stat.built = Buildings Built:[accent] {0} -stat.destroyed = Buildings Destroyed:[accent] {0} -stat.deconstructed = Buildings Deconstructed:[accent] {0} -stat.delivered = Resources Launched: -stat.rank = Final Rank: [accent]{0} -launcheditems = [accent]Launched Items +stat.wave = Vln poraženo:[accent] {0} +stat.enemiesDestroyed = Nepřátel zničeno:[accent] {0} +stat.built = Budov postaveno:[accent] {0} +stat.destroyed = Budov zničeno:[accent] {0} +stat.deconstructed = Budov rozebráno:[accent] {0} +stat.delivered = Materiálu odesláno: +stat.rank = Závěrečné hodnocení: [accent]{0} +launcheditems = [accent]Odeslané předměty map.delete = Jsi si jistý že chceš smazat mapu "[accent]{0}[]"? level.highscore = Nejvyšší skóre: [accent]{0} level.select = Výběr levelu level.mode = Herní mód: showagain = Znovu neukazovat ! coreattack = < Jádro je pod útokem! > -nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent -database = Core Database +nearpoint = [[ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKŮ[] ]\nNebezpečí okamžité smrti +database = Databáze objektů savegame = Uložit hru loadgame = Načíst hru joingame = Připojit se ke hře addplayers = Přidat/Odebrat hráče customgame = Vlastní hra -newgame = New Game -none = -minimap = Minimap +newgame = Nová hra +none = <žádný> +minimap = Minimapa close = Zavřít -website = Website +website = Web. stránky quit = Ukončit maps = Mapy continue = Pokračovat maps.none = [LIGHT_GRAY]Žádné mapy nebyly nalezeny! about.button = O hře -name = Name: +name = Jméno: noname = Nejdřív si vyber[accent] herní jméno[]. filename = Jméno složky: unlocked = Nový blok odemknut! -completed = [accent]Completed -techtree = Tech Tree -research.list = [LIGHT_GRAY]Research: -research = Research -researched = [LIGHT_GRAY]{0} researched. +completed = [accent]Dokončeno +techtree = Technologie +research.list = [LIGHT_GRAY]Výzkum: +research = Zkoumej +researched = [LIGHT_GRAY]{0} vyzkoumán(o). players = {0} hráčů online players.single = {0} hráč online server.closing = [accent]Zavírám server... @@ -76,8 +76,8 @@ server.kicked.nameInUse = Někdo se stejným jménem\nje aktuálně na serveru. server.kicked.nameEmpty = Tvé jméno je neplatné. server.kicked.idInUse = Již jsi na tomhle serveru připojen! Připojování se dvěma účty není povoleno. server.kicked.customClient = Tento server nepodporuje vlastní verze hry. Stáhni si oficiální verzi. -server.kicked.gameover = Game over! -server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[] +server.kicked.gameover = Konec hry! +server.versions = Verze klienta:[accent] {0}[]\nVerze serveru:[accent] {1}[] host.info = [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]wifi nebo místní síti[] by měl vidět server ve svém listu serverů.\n\nJestli chcete aby se uživatelé připojovali odkudkoliv pomocí IP, [accent]přesměrování portů[] je nutné.\n\n[LIGHT_GRAY]Poznámka: Jestli někdo má problém s připojením ke své LAN hře, ujistěte se že má Mindustry povolený přístup k místní síti v nastavení Firewallu. join.info = Tady můžeš vložit [accent]IP serveru[] ke kterému se chceš připojit, nebo objevit [accent]Servery Místní sítě[] ke kterým se chceš připojit.\nLAN i Multiplayer jsou podporovány.\n\n[LIGHT_GRAY]Poznámka: Není žádný globální seznam serverů; Pokud se budeš chtít připojit k někomu pomocí IP, budeš jí muset znát od hostitele. hostserver = Hostovat hru @@ -151,30 +151,30 @@ save.wave = Vlna {0} save.difficulty = Obtížnost: {0} save.date = Naposledy uloženo: {0} save.playtime = Herní čas: {0} -warning = Warning. +warning = Varování. confirm = Potvrdit delete = Smazat ok = OK open = Otevřít -customize = Customize +customize = Přizpůsobit cancel = Zrušit openlink = Otevřít Odkaz copylink = Zkopírovat Odkaz back = Zpět -data.export = Export Data -data.import = Import Data -data.exported = Data exported. -data.invalid = This isn't valid game data. -data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. -classic.export = Export Classic Data +data.export = Exportuj Data +data.import = Importuj Data +data.exported = Data exportována. +data.invalid = Neplatná herní data. +data.import.confirm = Import externích dat smaže[scarlet] všechna[] vaše současná herní data.\n[accent]To nelze vrátit zpět![]\n\nPo importu data se hra ukončí. +classic.export = Exportovat klasická data classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? quit.confirm = Jsi si jistý že chceš ukončit ? -quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] +quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[] loading = [accent]Načítám... saving = [accent]Ukládám... wave = [accent]Vlna {0} wave.waiting = [LIGHT_GRAY]Vlna za {0} -wave.waveInProgress = [LIGHT_GRAY]Wave in progress +wave.waveInProgress = [LIGHT_GRAY]Vlna v pohybu waiting = [LIGHT_GRAY]Čekám... waiting.players = Čekání na hráče... wave.enemies = [LIGHT_GRAY]{0} Nepřátel zbývá @@ -186,9 +186,9 @@ custom = Vlastní builtin = Zabudovaný map.delete.confirm = Jsi si jistý žechceš tuto mapu smazat? tato akce je nevratná! map.random = [accent]Náhodná mapa -map.nospawn = Tato mapa nemá žádná jádra pro hráče ke spawnutí! přidej[ROYAL] blue[] jádro na tuto mapu v editoru. -map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádra pro hráče ke spawnutí! přidej[SCARLET] red[] jádro na tuto mapu v editoru. -map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. +map.nospawn = Tato mapa nemá žádné jádro pro hráče ke spawnutí! Přidej v editoru do této mapy[ROYAL] modré[] jádro. +map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádro pro druhého hráče! Přidej v editoru do této mapy[SCARLET] červené[] jádro. +map.nospawn.attack = Tato mapa nemá žádná nepřátelská jádra ke zničení! Přidej v editoru do této mapy [SCARLET] červené[] jádro. map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy. editor.brush = Štětec editor.openin = Otevřít v editoru. @@ -197,11 +197,11 @@ editor.oregen.info = Generování nerostných zdrojů: editor.mapinfo = Informace o mapě editor.author = Autor: editor.description = Popis: -editor.waves = Waves: -editor.rules = Rules: +editor.waves = Vln: +editor.rules = Pravidla: editor.generation = Generation: editor.ingame = Edit In-Game -editor.newmap = New Map +editor.newmap = Nová mapa waves.title = Waves waves.remove = Remove waves.never = @@ -868,7 +868,7 @@ unit.lich.name = Lich unit.reaper.name = Reaper tutorial.next = [lightgray] tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.drill = Manuální zěžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\npolož jeden na měděnou rudu. +tutorial.drill = Manuální těžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\npolož jeden na měděnou rudu. tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[] tutorial.conveyor = [accent]Dopravníky[] jsou zapotřebí k dopravě materiálu k jádru.\nVytvoř řadu dopravníku od vrtu až k jádru. @@ -959,7 +959,7 @@ block.surge-wall-large.description = Nejsilnější defenzivní blok.\nMá malou block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz. block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.\nZabírá více polí. block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency. -block.mend-projector.description = Kontinuálně léčí bloky ve poli svého působení. +block.mend-projector.description = Kontinuálně léčí bloky v poli svého působení. block.overdrive-projector.description = Zrychluje funkce blízkých struktůr jako jsou vrty a dopravníky. block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, chrání jednotky a budovy uvnitř sebe vůči střelám. block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Skoro neviditelné nepřáteli. @@ -973,7 +973,7 @@ block.router.description = Příijmá předměty z jednoho směru a posílá je block.distributor.description = Pokročilý směrovač, který z libovolného počtu vstupů vytvoří libovolný počet výstupu a rozdělí přísun předmětů rovnoměrně do každého z nich, obdoba Multiplexeru a Demultiplexeru. block.overflow-gate.description = Kombinace distributoru a děličky která má výstup do leva nebo do prava jen pokud je přední strana zablokovaná. block.mass-driver.description = Ultimátní blok přepravy předmětů. Sbírá několik druhů předmětů a vystřelí je k dalšímu hromadnému distributoru přes veliké vzdálenosti. -block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje nergii k provozu. +block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje energii k provozu. block.rotary-pump.description = Pokročilá pumpa která, zdvojnásobuje přísun tekutin za použití energie. block.thermal-pump.description = Ultimátní pumpa. Trojnásobně rychlejší než mechanická pumpa a jediná pumpa která dokáže pracovat s lávou. block.conduit.description = Základní blok přepravy tekutin. Funguje jako dopravník, ale na tekutiny, chápeš ne ? Užívá se s extraktory, pumpami nebo jiným potrubím. @@ -998,7 +998,7 @@ block.solar-panel-large.description = Poskytuje mnohem lepší zdroj energie ne block.thorium-reactor.description = Generuje obrovské množství energie z radioaktivního thoria. Vyžaduje konstantní chlazení. Způsobí velikou explozi je-li zásobován nedostatečným množstvím chlazení. Výstup energie závisí na plnosti obsahu generátoru, základní generování energie se aktivuje při poloviční kapacitě. block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole, natrvalo a pomalu produkuje materiál na který byl položen. -block.pneumatic-drill.description = Vylepšený vrt, který je rychlejší a je schopen zpracovat trdší materiály za pomocí tlaku. +block.pneumatic-drill.description = Vylepšený vrt, který je rychlejší a je schopen zpracovat tvrdší materiály za pomocí tlaku. block.laser-drill.description = Dovoluje vrtat ještě rychleji díky laserové technologii, požaduje energii k provozu. Dodatečně, dokáže vrtat žíly radioaktivního thoria. block.blast-drill.description = Ultimátní vrt, vyžaduje velké množství energie k provozu. block.water-extractor.description = Extrahuje vodu ze země. Vhodný k použití když se v oblasti nenachází zdroj vody. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index c7f56aea76..e9eea26b68 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -866,26 +866,26 @@ unit.chaos-array.name = Chaos Array unit.eradicator.name = Eradicator unit.lich.name = Lich unit.reaper.name = Reaper -tutorial.next = [lightgray] -tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.drill = Manuelles Abbauen von Ressourcen ist ineffizient.\n[accent]Bohrer[] können automatisch abbauen.\n Platziere einen auf einem Kupfer Vorkommen. -tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. -tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[] -tutorial.conveyor = [accent]Transportbänder[] werden dazu benutzt Materialien zum Kern zu transportieren.\n Erstelle eine Reihe von Transportbändern zum Kern. -tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered +tutorial.next = [lightgray] +tutorial.intro = Du befindest dich im[scarlet] Mindustry-Tutorial.[]\nBeginne, indem du[accent] Kupfer abbaust[]. Tippe dazu auf ein Kupfervorkommen in der Nähe deiner Basis.\n\n[accent]{0}/{1} Kupfer +tutorial.drill = Manuelles Abbauen ist ineffizient.\n[accent]Bohrer []können automatisch abbauen.\nTippe auf den Bohrer Tab unten rechts.\nWähle den[accent] Mechanischen Bohrer[].\nPlatziere ihn durch Tippen auf ein Kupfervorkommen.\nMit einem [accent]Rechtsklick[] brichst du den Bau ab. +tutorial.drill.mobile = Manuelles Abbauen ist ineffizient.\n[accent]Bohrer []können automatisch abbauen.\nTippe auf den Bohrer Tab unten rechts.\nWähle den[accent] Mechanischen Bohrer[].\nPlatziere ihn durch Tippen auf ein Kupfervorkommen, dann klicke auf das[accent] Häkchen[] unten um deine Auswahl zu bestätigen.\nKlicke auf den[accent] X-Button[] um den Bau abzubrechen. +tutorial.blockinfo = Jeder Block hat unterschiedliche Eigenschaften. Jeder Bohrer kann immer nur ein bestimmtes Material abbauen.\nFür Infos und Stats eines Blocks wähle einen Block im Baumenü aus und [accent] klicke auf den "?"-Button.[]\n\n[accent]Schau dir jetzt die Stats des Mechanischen Bohrers an.[] +tutorial.conveyor = Mit [accent]Förderbändern[] werden Materialien zum Kern transportiert.\nReihe mehrere Förderbänder aneinander bis zum Kern. +tutorial.conveyor.mobile = Mit [accent]Förderbändern[] werden Materialien zum Kern transportiert.\nReihe mehrere Förderbänder aneinander bis zum Kern.\n[accent] Zum Bau in einer Reihe lasse deinen Finger für einige Sekunden gedrückt[] und ziehe ihn in eine beliebige Richtung.\n\n[accent]{0}/{1} Förderbänder in Reihe erstellt\n[accent]0/1 Ressourcen transportiert. tutorial.turret = Verteidigungsgebäude müssen gebaut werden um[LIGHT_GRAY] Gegner[] abzuwehren.\nBaue einen Duo Geschützturm in die Nähe deiner Basis. tutorial.drillturret = Duo Geschütztürme benötigen[accent] Kupfermunition, []um schießen zu können.\nPlatziere neben das Geschütz einen Bohrer, um ihn mit Kupfer zu versorgen. -tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause. -tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause. -tutorial.unpause = Now press space again to unpause. -tutorial.unpause.mobile = Now press it again to unpause. -tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. -tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. -tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[] -tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[] -tutorial.waves = Der [LIGHT_GRAY] Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Bau mehr Türme. -tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper. -tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button. +tutorial.pause = Du kannst das Spiel jederzeit [accent]pausieren.[]\nIn einer Pause kannst du den Bau weiterer Gebäude in Auftrag geben.\n\n[accent]Drücke die Leertaste um zu pausieren. +tutorial.pause.mobile = Du kannst das Spiel jederzeit [accent]pausieren.[]\nIn einer Pause kannst du den Bau weiterer Gebäude in Auftrag geben.\n\n[accent]Drücke diesen Button oben links um zu pausieren. +tutorial.unpause = Drücke die Leertaste erneut um das Spiel fortzusetzen. +tutorial.unpause.mobile = Drücke ihn erneut um das Spiel fortzusetzen. +tutorial.breaking = Oft kommt es vor, dass Blöcke zerstört werden müssen.\n[accent]Halte die rechte Maustaste gedrückt[] während du eine Fläche auswählst. Dadurch werden alle Blöcke darin zerstört.[]\n\n[accent]Zerstöre alle Schrott-Blöcke links neben deinem Kern mithilfe der Flächenauswahl. +tutorial.breaking.mobile = Oft kommt es vor, dass Blöcke zerstört werden müssen.\n[accent]Wähle den Abbau-Modus[], dann wähle einen Block um ihn zu zerstören.\nZerstöre eine Fläche indem du deinen Finger einige Sekunden gedrückt hältst[] und in eine beliebige Richtung ziehst.\nTippe auf das Häkchen um den Rückbau zu bestätigen.\n\n[accent]Zerstöre all Schrott-Blöcke links des Kerns mithilfe der Flächenauswahl. +tutorial.withdraw = Einige Situationen erfordern, dass Materialien direkt aus den Blöcken aufgenommen werden.\nUm dies zu tun, [accent]tippe auf einen Block[] mit Materialien dann [accent]tippe auf das Material[] in diesem Block.\nUm mehrere Materialien zu entnehmen [accent]tippe darauf und halte die Maustaste gedrückt[].\n\n[accent]Entnimm etwas Kupfer vom Kern.[] +tutorial.deposit = Materialien können in Blöcke abgelegt werden, indem du sie dorthin ziehst.\n\n[accent]Lege das Kupfer zurück in den Kern.[] +tutorial.waves = Der [LIGHT_GRAY]Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Baue mehr Türme. +tutorial.waves.mobile = Der[lightgray] Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Dein Schiff feuert automatisch auf Gegner.\nBaue mehr Geschütztürme und Bohrer. Baue mehr Kupfer ab. +tutorial.launch = Sobald du eine bestimmte Welle erreicht hast, kannst du die [accent]Mission abschließen[]. Dadurch lässt du deine Basis zurück[accent] und überträgst alle Ressourcen in deinen Kern.[]\nDiese Ressourcen können zur Erforschung neuer Technologien eingesetzt werden.\n\n[accent]Drücke nun den Abschluss-Button. item.copper.description = Ein nützliches Material. Wird in allen Arten von Blöcken verwendet. item.lead.description = Ein grundlegendes Material. Häufig in Elektronik und Flüssigkeits-Transport-Blöcken verwendet. item.metaglass.description = Eine extrem harte Glasmischung. Wird zur Verteilung und Lagerung von Flüssigkeiten benutzt. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 75f6d2b672..c3b1c82219 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -95,6 +95,7 @@ server.versions = Votre version:[accent] {0}[]\nLa version du serveur:[accent] { host.info = Le bouton [accent]Héberger[] héberge un serveur sur le port [scarlet]6567[]. \nN'importe qui sur le même [lightgray]wifi ou réseau local []devrait voir votre serveur sur leur liste des serveurs.\n\nSi vous voulez que les gens puissent s'y connecter de partout à l'aide de votre IP, [accent]le transfert de port (port forwarding)[] est requis.\n\n[lightgray]Note: Si quelqu'un a des problèmes de connexion à votre partie LAN, vérifiez que vous avez autorisé l'accès à Mindustry sur votre réseau local dans les paramètres de votre pare-feu. join.info = Ici vous pouvez entrez [accent]l'adresse IP d'un serveur []pour s'y connecter, ou découvrir un serveur en [accent]réseau local[].\nLe multijoueur en LAN ainsi qu'en WAN est supporté.\n\n[lightgray]Note: Il n'y a pas de liste de serveurs globaux automatiques; Si vous voulez vous connectez à quelqu'un par IP, il faudra d'abord demander à l'hébergeur leur IP. hostserver = Héberger une partie +invitefriends = Inviter des Amis hostserver.mobile = Héberger\nune partie host = Héberger hosting = [accent]Préparation du serveur... @@ -124,6 +125,7 @@ server.version = [lightgray]Version: {0} {1} server.custombuild = [yellow]Version personnalisée confirmban = Souhaitez vous vraiment bannir ce joueur? confirmkick = Souhaitez vous vraiment expulser ce joueur? +confirmvotekick = Voulez vous vraiment voter l'expulsion de ce joueur? confirmunban = Souhaitez vous vraiment réintégrer ce joueur ? confirmadmin = Souhaitez vous vraiment rendre ce joueur administrateur? confirmunadmin = Souhaitez vous vraiment enlever le statut d'administrateur à ce joueur? @@ -134,6 +136,7 @@ disconnect.error = Erreur de connexion. disconnect.closed = Connexion fermée. disconnect.timeout = Délai de connexion expiré. disconnect.data = Les données du monde n'ont pas pu être chargées! +cantconnect = Impossible de rejoindre ([accent]{0}[]). connecting = [accent]Connexion... connecting.data = [accent]Chargement de la partie... server.port = Port: @@ -159,6 +162,7 @@ save.rename = Renommer save.rename.text = Nouveau nom: selectslot = Choisissez une sauvegarde. slot = [accent]Emplacement {0} +editmessage = Modifier le Message save.corrupted = [accent]Sauvegarde corrompue ou invalide!\nSi vous venez de mettre à jour votre jeu, c'est probablement dû à un changement du format de sauvegarde et [scarlet]pas[] à un bug. empty = on = Activé @@ -172,6 +176,7 @@ save.playtime = Temps de jeu: {0} warning = Avertissement. confirm = Confirmer delete = Supprimer +view.workshop = Voir dans le Workshop ok = OK open = Ouverture customize = Personaliser @@ -209,6 +214,8 @@ map.nospawn.pvp = Cette carte n'a pas de base ennemies pour qu'un joueur ennemi map.nospawn.attack = Cette carte n'a aucune base ennemie à attaquer! Veuillez ajouter une base[SCARLET] rouge[] sur cette carte dans l'éditeur. map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide. map.publish.error = Erreur de Publication de la Carte: {0} +map.publish.confirm = Êtes-vous sûr de vouloir publier cette carte?\n\n[lightgray]Assurez-vous d’accepter d’abord les CGU du Workshop, sinon vos cartes ne seront pas affichées! +eula = CGU de Steam map.publish = Carte publiée. map.publishing = [accent]Publication de la carte... editor.brush = Pinceau @@ -218,6 +225,7 @@ editor.oregen.info = Génération de minerais: editor.mapinfo = Infos Carte editor.author = Auteur: editor.description = Description: +editor.nodescription = Une carte doit avoir une description d'au moins 4 caractères pour pouvoir être publiée. editor.waves = Vagues: editor.rules = Règles: editor.generation = Génération: @@ -284,6 +292,7 @@ editor.resizemap = Redimensionner\nla carte editor.mapname = Nom de la carte: editor.overwrite = [accent]Attention!\nCeci écrase une carte existante. editor.overwrite.confirm = [scarlet]Attention![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir l'écraser? +editor.exists = Une carte avec ce nom existe déjà. editor.selectmap = Sélectionnez une carte: toolmode.replace = Remplacer @@ -478,9 +487,11 @@ bar.drilltierreq = Foreuse Ameliorée Requise bar.drillspeed = Vitesse de forage: {0}/s bar.efficiency = Efficacité: {0}% bar.powerbalance = Énergie: {0}/s +bar.powerstored = Stocké: {0}/{1} bar.poweramount = Énergie: {0} bar.poweroutput = Énergie Produite: {0} bar.items = Objets: {0} +bar.capacity = Capacité: {0} bar.liquid = Liquide bar.heat = Chaleur bar.power = Énergie @@ -527,6 +538,7 @@ setting.antialias.name = Antialias[lightgray] (redémarrage du jeu nécéssaire) setting.indicators.name = Indicateurs Alliés/Ennemis setting.autotarget.name = Visée automatique setting.keyboard.name = Controles Sourie+Clavier +setting.touchscreen.name = Commandes d'Écran Tactile setting.fpscap.name = FPS Max setting.fpscap.none = Aucun setting.fpscap.text = {0} FPS @@ -569,8 +581,8 @@ category.general.name = Général category.view.name = Voir category.multiplayer.name = Multijoueur command.attack = Attaque +command.rally = Rassembler command.retreat = Retraite -command.patrol = Patrouille keybind.gridMode.name = Sélection des blocs keybind.gridModeShift.name = Sélection des catégories keybind.press = Appuyer sur une touche... @@ -789,10 +801,13 @@ block.hail.name = Grêle block.lancer.name = Lancier block.conveyor.name = Convoyeur block.titanium-conveyor.name = Convoyeur en Titane +block.armored-conveyor.name = Convoyeur Cuirassé +block.armored-conveyor.description = Déplace les objets à la même vitesse que les convoyeurs en titane, mais est plus résistant. Seulement d'autres convoyeurs peuvent faire rentrer des ressources par ses cotés. block.junction.name = Jonction block.router.name = Routeur block.distributor.name = Distributeur block.sorter.name = Trieur +block.message.name = Message block.overflow-gate.name = Barrière de Débordement block.silicon-smelter.name = Fonderie de Silicone block.phase-weaver.name = Tisseur à Phase @@ -846,6 +861,8 @@ block.solar-panel.name = Panneau Solaire block.solar-panel-large.name = Grand Panneau Solaire block.oil-extractor.name = Extracteur de Pétrole block.command-center.name = Centre de Commandement +block.rally-point.name = Point de Raliement +block.rally-point.description = Un marqueur pour que les unitées s'y regroupent autour. Nécessite l'émission de la commande 'Rassembler' depuis le centre de commande pour pouvoir l'utiliser. block.draug-factory.name = Usine de Drones Draug Mineurs block.spirit-factory.name = Usine de Drones Spirituels Réparateurs block.phantom-factory.name = Usine de Drones Fantômes Constructeurs @@ -876,7 +893,7 @@ block.surge-wall.name = Mur Superchargé block.surge-wall-large.name = Grand mur Superchargé block.cyclone.name = Cyclone block.fuse.name = Fusible -block.shock-mine.name = Mine Terreur +block.shock-mine.name = Mine à Chocs block.overdrive-projector.name = Projecteur Surmultiplicateur block.force-projector.name = Champ de Force block.arc.name = Arc @@ -887,10 +904,10 @@ block.container.name = Conteneur block.launch-pad.name = Plateforme de Lancement block.launch-pad-large.name = Grande Plateforme de Lancement team.blue.name = bleu -team.crux.name = red -team.sharded.name = orange +team.crux.name = rouge +team.sharded.name = éclaté team.orange.name = orange -team.derelict.name = derelict +team.derelict.name = abandonné team.green.name = vert team.purple.name = violet unit.spirit.name = Drone Spirituel Réparateur @@ -929,7 +946,6 @@ tutorial.waves = L'[lightgray] ennemi[] approche.\n\nDefend le noyau pendant 2 v tutorial.waves.mobile = L'[lightgray] ennemi[] approche.\n\nDefend le noyau pendant 2 vagues. Votre vaisseau tirera automatiquement sur les ennemis.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre. tutorial.launch = Une fois que vous aurez atteind une vague spécifique, vous aurez la possibilité de[accent] faire décoler le noyau[], abandonant vos défenses mais en [accent]sécurisant toutes les ressources de votre noyau.[]\nCes ressources peuvent ensuite être utilisées pour rechercher de nouvelles technologies.\n\n[accent]Appuyez sur le bouton de lancement. - item.copper.description = Le matériau structurel de base. Utilisé intensivement dans tout les blocs. item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et dans les blocs de trasports de liquides. item.metaglass.description = Un composé de vitre super-résistant. Utilisé largement pour le transport et le stockage de liquides. @@ -969,6 +985,7 @@ unit.eruptor.description = Une unité lourde conçue pour détruire les structur unit.wraith.description = Une unité d'interception rapide et de frappe. Cible les générateurs d'énergie. unit.ghoul.description = Un bombardier lourd de saturation. Déchire a travert les structures ennemies, ciblant les infrastructures critiques. unit.revenant.description = Un arsenal de missiles lourd et planant. +block.message.description = Enregistre un message. Utilisé pour la communication entre alliés. block.graphite-press.description = Compresse des morceaux de charbon en feuilles de graphite pur. block.multi-press.description = Une version améliorée de la presse à graphite. Utilise de l'eau et de l'électricité pour traiter le charbon rapidement et efficacement. block.silicon-smelter.description = Réduit le sable avec du charbon pur. Produit du silicone. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index fd3ab9bb33..9539c0961b 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -32,7 +32,7 @@ level.select = Selezione del livello level.mode = Modalità di gioco: showagain = non mostrare più coreattack = < Il nucleo è sotto attacco! > -nearpoint = [[ [scarlet]LACIA LA ZONA NEMICA IMMEDIATAMENTE[] ]\nautodistruzione imminente +nearpoint = [[ [scarlet]LASCIA LA ZONA NEMICA IMMEDIATAMENTE[] ]\nautodistruzione imminente database = Database nucleo savegame = Salva loadgame = Carica @@ -41,7 +41,7 @@ addplayers = Aggiungi/rimuovi giocatori customgame = Gioco personalizzato newgame = Nuova partita none = -minimap = Minimapa +minimap = Minimappa close = Chiuso website = Website quit = Esci @@ -103,7 +103,7 @@ server.outdated.client = [crimson]Client obsoleto![] server.version = [lightgray]Versione: {0} server.custombuild = [yellow] Costruzione personalizzata confirmban = Sei sicuro di voler bandire questo giocatore? -confirmkick = Are you sure you want to kick this player? +confirmkick = Sei sicuro di voler espellere questo giocatore? confirmunban = Sei sicuro di voler riammettere questo giocatore? confirmadmin = Sei sicuro di voler rendere questo giocatore un amministratore? confirmunadmin = Sei sicuro di voler rimuovere lo stato di amministratore da questo giocatore? @@ -123,13 +123,16 @@ save.overwrite = Sei sicuro di voler sovrascrivere questo salvataggio? overwrite = Sovrascrivi save.none = Nessun salvataggio trovato! saveload = [Accent]Salvataggio ... -savefail = Salvataggio del gioco non riuscito! +savefail = [crimson]Salvataggio del gioco NON riuscito! save.delete.confirm = Sei sicuro di voler eliminare questo salvataggio? save.delete = Elimina save.export = Esporta Salvataggio save.import.invalid = [accent]Questo salvataggio non è valido! save.import.fail = [crimson]Impossibile importare salvataggio: [accent]{0} save.export.fail = [crimson]Impossibile esportare il salvataggio: [accent]{0} +settings.data = Importa/Esporta salvataggio +data.export = Esporta Salvataggio +data.import = Importa Salvataggio save.import = Importa Salvataggio save.newslot = Salva nome: save.rename = Rinomina @@ -146,12 +149,12 @@ save.wave = Ondata: {0} save.difficulty = Difficoltà: {0} save.date = Ultimo salvataggio: {0} save.playtime = Tempo di gioco: {0} -warning = Warning. +warning = Attenzione confirm = Conferma delete = Elimina ok = OK open = Apri -customize = Customize +customize = Personalizza cancel = Annulla openlink = Apri Link copylink = Copia link @@ -161,9 +164,9 @@ classic.export.text = [accent]Mindustry[] ha appena rilasciato un aggiornamento quit.confirm = Sei sicuro di voler uscire? quit.confirm.tutorial = Sei sicuro di sapere cosa stai facendo? Il tutorial può essere ripetuto in[accent] Impostazioni->Gioco->Ripeti il tutorial.[] loading = [accent]Caricamento in corso ... -saving = [accent]Salvando . . . +saving = [accent]Salvando ... wave = [accent]Ondata {0} -wave.waiting = Ondata in {0} +wave.waiting = Ondata tra {0} wave.waveInProgress = [LIGHT_GRAY]Ondata in corso... waiting = In attesa... waiting.players = Aspettando giocatori... @@ -174,9 +177,9 @@ saveimage = Salva Immagine unknown = Sconosciuto custom = Personalizzato builtin = Incluso -map.delete.confirm = Sei sicuro di voler eliminare questa mappa? Non potrai tornare indietro! +map.delete.confirm = Sei sicuro di voler eliminare questa mappa? L'operazione è irreversibile! map.random = [accent]Mappa casuale -map.nospawn = Questa mappa non possiede un nucleo dove spawnare! Aggiungine uno nell'editor. +map.nospawn = Questa mappa non possiede un nucleo in cui spawnare! Aggiungine uno nell'editor. map.nospawn.pvp = Questa mappa non ha un nucleo nemico! Aggiungi un [SCARLET]nucleo rosso[] nell'editor per poter giocare. map.nospawn.attack = Questa mappa non ha un nucleo nemico! Aggiungi un [SCARLET]nucleo rosso[] nell'editor per poter giocare. map.invalid = Errore nel caricamento della mappa: file mappa corrotto o non valido. @@ -194,7 +197,7 @@ editor.ingame = Modifica in gioco editor.newmap = Nuova mappa waves.title = Ondate waves.remove = Rimuovi -waves.never = +waves.never = mai waves.every = sempre waves.waves = ondata/e waves.perspawn = per spawn @@ -216,7 +219,7 @@ editor.teams = Squadre editor.errorload = Errore nel caricamento di:\n[accent]{0} editor.errorsave = Errore nel salvataggio di:\n[accent]{0} editor.errorimage = Quella è un'immagine, non una mappa. Non cambiare estensioni sperando che funzioni.\n\n Se vuoi importare una mappa vecchia clicca su "importa una mappa vecchia" nell'editor. -editor.errorlegacy = La mappa è troppo vecchia e usa un formato che non è più supportato. +editor.errorlegacy = La mappa è troppo vecchia ed usa un formato che non è più supportato. editor.errorheader = Questo file della mappa è invalido o corrotto. editor.errorname = Questa mappa è senza nome. editor.update = Aggiorna @@ -229,7 +232,7 @@ editor.savemap = Salva\nla mappa editor.saved = Salvato! editor.save.noname = La tua mappa non ha un nome! Impostane uno nelle informazioni della mappa. editor.save.overwrite = La tua mappa sovrascrive quelle incluse! Imposta un nome diverso nelle informazioni della mappa. -editor.import.exists = [scarlet]Impossibile importare:[] esiste già una mappa chiamata '{0}' che non può essere svrascritta! +editor.import.exists = [scarlet]Impossibile importare:[] esiste già una mappa chiamata '{0}' che non può essere sovrascritta! editor.import = Importando... editor.importmap = Importa mappa editor.importmap.description = Importa mappa preesistente @@ -264,7 +267,7 @@ toolmode.fillteams = Riempi squadre toolmode.fillteams.description = Riempe squadre al posto di blocchi toolmode.drawteams = Disegna squadre toolmode.drawteams.description = Disegna squadre al posto di blocchi -filters.empty = [LIGHT_GRAY]Nessun filtro! Aggiungi uno cliccando il tasto sotto. +filters.empty = [LIGHT_GRAY]Nessun filtro! Aggiungine uno cliccando il tasto sotto. filter.distort = Modifica filter.noise = Interferenza filter.median = Mediana @@ -273,7 +276,7 @@ filter.blend = Miscela filter.defaultores = Minerali predefiniti filter.ore = Minerali filter.rivernoise = Interferenze a fiume -filter.mirror = Specchia +filter.mirror = Rifletti filter.clear = Resetta il filtro filter.option.ignore = Ignora filter.scatter = Dispersione @@ -322,15 +325,15 @@ bestwave = [LIGHT_GRAY]Migliore: {0} launch = Decollare launch.title = Decollo riuscito! launch.next = [LIGHT_GRAY]Nuova opportunità all'ondata {0} -launch.unable2 = [scarlet]Decollo FALLITO![] +launch.unable2 = [scarlet]IMPOSSIBILE DECOLLARE![] launch.confirm = Questo trasporterà tutte le risorse nel tuo nucleo.\nNon riuscirai a ritornare in questa base. -launch.skip.confirm = Se salti adesso non riuscirai a decollare fino alle onde sucessive -uncover = Svlare -configure = Configura l'equipaggio +launch.skip.confirm = Se salti adesso non riuscirai a decollare fino alle ondate successive +uncover = Svelare +configure = Configura l'equipaggiamento configure.locked = [LIGHT_GRAY]Arriva all'ondata {0}\nper configurare l'equipaggiamento. zone.unlocked = [LIGHT_GRAY]{0} sbloccata. zone.requirement.complete = Ondata {0} raggiunta:\n{1} requisiti di zona soddisfatti. -zone.config.complete = Ondata {0} reached:\nLoadout config unlocked. +zone.config.complete = Ondata {0} raggiunta:\nEquipaggiamento personalizzato sbloccato. zone.resources = Risorse trovate: zone.objective = [lightgray]Obiettivo: [accent]{0} zone.objective.survival = Sopravvivere @@ -346,7 +349,7 @@ error.alreadyconnected = Già connesso. error.mapnotfound = Mappa non trovata error.io = Errore I/O di rete. error.any = Errore di rete sconosciuto. -error.bloom = Failed to initialize bloom.\nYour device may not support it. +error.bloom = Errore dell'avvio del bloom.\nIl tuo dispositivo potrebbe non supportarlo. zone.groundZero.name = Terreno Zero zone.desertWastes.name = Rifiuti Desertici zone.craters.name = Crateri @@ -362,16 +365,16 @@ zone.impact0078.name = Impatto 0078 zone.crags.name = Dirupi zone.fungalPass.name = Passaggio Fungoso zone.groundZero.description = La posizione ottimale per cominciare. Bassa minaccia nemica. Poche risorse.\nRaccogli quanto più piombo e rame possibile.\nProcedi. -zone.frozenForest.description = Anche qui, più vicino alle montagne, le spore si sono diffuse. Le temperature rigide non possono contenerle per sempre.\n Inizia la scoperta dell'energia. Costruisci generatori di combustione. Impara a usare i riparatori. -zone.desertWastes.description = Questi rifiuti sono vasti, imprevedibili e attraversati da strutture settoriali abbandonate.\n\nIl carbone è presente nella regione. Bruciatelo per ottenere energia o sintetizzate la grafite.\n\n[lightgray]Questa posizione di atterraggio non può essere garantita. +zone.frozenForest.description = Anche qui, più vicino alle montagne, le spore si sono diffuse. Le temperature rigide non possono contenerle per sempre.\n Inizia la scoperta dell'energia. Costruisci generatori a combustione. Impara a usare i riparatori. +zone.desertWastes.description = Questi rifiuti sono vasti, imprevedibili ed attraversati da strutture settoriali abbandonate.\n\nIl carbone è presente nella regione. Bruciatelo per ottenere energia o sintetizzate la grafite.\n\n[lightgray]Questa posizione di atterraggio non può essere garantita. zone.saltFlats.description = Alle periferie del deserto si trovano le saline. Poche risorse possono essere trovate in questa posizione.\n\nIl nemico ha eretto un complesso di archiviazione delle risorse qui. Sradicare il loro nucleo. Non lasciare nulla in piedi. -zone.craters.description = L'acqua si è accumulata in questo cratere, reliquia delle vecchie guerre. Recupera l'area. Raccogli la sabbia. Fondi il vetro metallico. Pompa l'acqua per raffreddare torrette e trapani. +zone.craters.description = L'acqua si è accumulata in questo cratere, reliquia delle vecchie guerre. Recupera l'area. Raccogli la sabbia. Fondi il vetro metallico. Pompa l'acqua per raffreddare torrette e trivelle. zone.ruinousShores.description = Oltre i rifiuti, c'è il litorale. Una volta, questa posizione ospitava una schiera di difesa costiera. Non rimane molto. Solo le strutture di difesa più elementari sono rimaste incolume, tutto il resto ridotto a rottami.\nContinua l'espansione verso l'esterno. Riscopri la tecnologia. zone.stainedMountains.description = Più nell'entroterra si trovano le montagne, non ancora contaminate da spore.\nEstrai l'abbondante titanio in questa zona. Scopri come usarlo.\n\nLa presenza del nemico è maggiore qui. Non dare loro il tempo di inviare le loro unità più forti. zone.overgrowth.description = Quest'area è invasa, più vicina alla fonte delle spore.\nIl nemico ha stabilito qui un avamposto. Costruisci unità col pugnale. Distruggilo. Riprenditi ciò che è stato perso. -zone.tarFields.description = La periferia di una zona di produzione di petrolio, tra le montagne e il deserto. Una delle poche aree con riserve di catrame utilizzabili.\nAnche se abbandonata, questa zona ha alcune pericolose forze nemiche nelle vicinanze. Non sottovalutarlo.\n\n[lightgray]Ricerca la tecnologia di lavorazione dell'olio, se possibile. +zone.tarFields.description = La periferia di una zona di produzione di petrolio, tra le montagne e il deserto. Una delle poche aree con riserve di catrame utilizzabili.\nAnche se abbandonata, questa zona ha alcune pericolose forze nemiche nelle vicinanze. Non sottovalutarlo.\n\n[lightgray]Ricerca la tecnologia di lavorazione del petrolio, se possibile. zone.desolateRift.description = Una zona estremamente pericolosa. Risorse abbondanti, ma poco spazio. Alto rischio di distruzione. Lascia il prima possibile. Non lasciarti ingannare dalla lunga distanza tra gli attacchi nemici. -zone.nuclearComplex.description = Un ex impianto per la produzione e la lavorazione del torio, ridotto in rovina.\n[lightgray] Ricerca il torio e i suoi numerosi usi.\n\nIl nemico è presente qui in gran numero, alla costante ricerca di aggressori. +zone.nuclearComplex.description = Un ex impianto per la produzione e la lavorazione del torio, ridotto in rovina.\n[lightgray] Ricerca il torio ed i suoi numerosi usi.\n\nIl nemico è presente qui in gran numero, alla costante ricerca di aggressori. zone.fungalPass.description = Un'area di transizione tra alte montagne e terre più basse, piene di spore. Qui si trova una piccola base di ricognizione nemica.\nDistruggila.\nUsa le unità Pugnale e Strisciatore. Elimina i due nuclei. zone.impact0078.description = zone.crags.description = @@ -394,6 +397,7 @@ info.title = [accent] Info error.title = [crimson]Si è verificato un errore error.crashtitle = Si è verificato un errore attackpvponly = [scarlet]Solo possible nelle modalità Attacco/PvP +blocks.buildcost = Costo di Costruzione blocks.input = Ingresso blocks.output = Uscita blocks.booster = Booster @@ -413,21 +417,21 @@ blocks.poweruse = Utilizzo energia blocks.powerdamage = Energia/Danno blocks.itemcapacity = Capacità blocks.basepowergeneration = Generazione energia di base -blocks.productiontime = Tempo produzione -blocks.repairtime = Tempo di riparo completo +blocks.productiontime = Tempo di produzione +blocks.repairtime = Tempo di riparazione completa blocks.speedincrease = Aumento Velocità blocks.range = Raggio blocks.drilltier = Scavabili -blocks.drillspeed = Velocità scavo stbile +blocks.drillspeed = Velocità di scavo stabile blocks.boosteffect = Effetto boost blocks.maxunits = Unità attive max blocks.health = Salute -blocks.buildtime = Tempo costruzione +blocks.buildtime = Tempo di costruzione blocks.inaccuracy = Inaccuratezza blocks.shots = Colpi blocks.reload = Ricarica blocks.ammo = Munizioni -bar.drilltierreq = Migliore trapano richiesto +bar.drilltierreq = Miglior trivella richiesta bar.drillspeed = Velocità scavo: {0}/s bar.efficiency = Efficienza: {0}% bar.powerbalance = Energia: {0} @@ -443,7 +447,7 @@ bullet.damage = [stat]{0}[lightgray] danno bullet.splashdamage = [stat]{0}[lightgray] danno ad area ~[stat] {1}[lightgray] blocchi bullet.incendiary = [stat]incendiario bullet.homing = [stat]autoguidato -bullet.shock = [stat]shock +bullet.shock = [stat]stordente bullet.frag = [stat]frammentazione bullet.knockback = [stat]{0}[lightgray] contraccolpo bullet.freezing = [stat]congelamento @@ -510,7 +514,7 @@ setting.crashreport.name = Invia rapporti sugli arresti anomali anonimamente setting.chatopacity.name = Opacità chat setting.playerchat.name = Mostra Chat in-game uiscale.reset = La scala dell'interfaccia utente è stata modificata.\nPremere "OK" per confermare questa scala.\n[scarlet] Ripristina ed esci dalle impostazioni [accent] {0}[] impostazioni... -uiscale.cancel = Annulla e esci +uiscale.cancel = Annulla ed esci setting.bloom.name = Shaders keybind.title = Configurazione Tasti keybinds.mobile = [scarlet]La maggior parte dei keybind qui non sono funzionali sui dispositivi mobili. È supportato solo il movimento di base. @@ -518,7 +522,7 @@ category.general.name = Generale category.view.name = Visualizzazione category.multiplayer.name = Multigiocatore command.attack = Attacca -command.retreat = Ritorna indietro +command.retreat = Torna indietro command.patrol = Guardia keybind.gridMode.name = Seleziona blocco keybind.gridModeShift.name = Seleziona categoria @@ -533,8 +537,8 @@ keybind.pick.name = Scegli Blocco keybind.break_block.name = Rompi blocco keybind.deselect.name = Deseleziona keybind.shoot.name = spara -keybind.zoom_hold.name = zoomma -keybind.zoom.name = zoom +keybind.zoom_hold.name = attiva zoom +keybind.zoom.name = esegui zoom keybind.menu.name = menu keybind.pause.name = pausa keybind.minimap.name = Minimappa @@ -547,18 +551,18 @@ keybind.toggle_menus.name = Abilita menù keybind.chat_history_prev.name = Scorri chat vero l'alto keybind.chat_history_next.name = Scorri chatt verso il basso keybind.chat_scroll.name = Scorri chat -keybind.drop_unit.name = droppa materiali -keybind.zoom_minimap.name = Zomma minimappa +keybind.drop_unit.name = Lascia materiali +keybind.zoom_minimap.name = Esegui Zoom minimappa mode.help.title = Descrizione delle modalità mode.survival.name = Sopravvivenza -mode.survival.description = La modalità normale. Risorse limitate e ondate in entrata automatiche. -mode.sandbox.name = Sandbox -mode.sandbox.description = risorse infinite e nessun timer per le ondate. +mode.survival.description = La modalità normale. Risorse limitate ed ondate in entrata automatiche. +mode.sandbox.name = Creativa +mode.sandbox.description = Risorse infinite e nessun timer per le ondate. mode.pvp.name = PvP -mode.pvp.description = Lotta contro altri giocatori +mode.pvp.description = Lotta contro altri giocatori. mode.attack.name = Attacco mode.attack.description = Obiettivo: Distruggere la base nemica, non ci sono ondate -mode.custom = Regole customizzabili +mode.custom = Regole personalizzate rules.infiniteresources = Risorse infinite rules.wavetimer = Timer ondate rules.waves = Ondate @@ -600,14 +604,14 @@ item.silicon.name = Silicio item.plastanium.name = Plastanio item.phase-fabric.name = Tessuto di Fase item.surge-alloy.name = Lega di Sovratensione -item.spore-pod.name = Piattaforma di Spore +item.spore-pod.name = Baccello di Spore item.sand.name = Sabbia -item.blast-compound.name = Polvere esplosiva +item.blast-compound.name = Composto Esplosivo item.pyratite.name = Pirite item.metaglass.name = Vetro Metallico item.scrap.name = Rottame liquid.water.name = Acqua -liquid.slag.name = Scorie +liquid.slag.name = Scoria liquid.oil.name = Petrolio liquid.cryofluid.name = Criofluido mech.alpha-mech.name = Alpha @@ -618,11 +622,11 @@ mech.delta-mech.weapon = Generatore di fulmini mech.delta-mech.ability = Scarica mech.tau-mech.name = Tau mech.tau-mech.weapon = Laser ricostruttore -mech.tau-mech.ability = Ripara esplosioni +mech.tau-mech.ability = Impulso riparatore mech.omega-mech.name = Omega mech.omega-mech.weapon = Sciame di missili mech.omega-mech.ability = Configurazione armata -mech.dart-ship.name = Dart +mech.dart-ship.name = Dardo mech.dart-ship.weapon = Ripetitore mech.javelin-ship.name = Giavellotto mech.javelin-ship.weapon = Missili esplosivi @@ -634,10 +638,10 @@ mech.glaive-ship.weapon = Ripetitore di fiamma item.explosiveness = [LIGHT_GRAY]Esplosività: {0} item.flammability = [LIGHT_GRAY]Infiammabilità: {0} item.radioactivity = [LIGHT_GRAY]Radioattività: {0} -unit.health = [LIGHT_GRAY]Vita: {0} +unit.health = [LIGHT_GRAY]Salute: {0} unit.speed = [LIGHT_GRAY]Velocità: {0} mech.weapon = [LIGHT_GRAY]Armi: {0} -mech.health = [LIGHT_GRAY]Vita: {0} +mech.health = [LIGHT_GRAY]Salute: {0} mech.itemcapacity = [LIGHT_GRAY]Capacità oggetti: {0} mech.minespeed = [LIGHT_GRAY]Velocità di scavo: {0} mech.minepower = [LIGHT_GRAY]Potenza di scavo: {0} @@ -662,18 +666,18 @@ block.shale.name = Scisto block.shale-boulder.name = Masso di scisto block.moss.name = Muschio block.shrubs.name = Arbusti -block.spore-moss.name = Spore di Muschio -block.shalerocks.name = Roccie di scisto +block.spore-moss.name = Muschio di spore +block.shalerocks.name = Rocce di scisto block.scrap-wall.name = Muro di Rottami -block.scrap-wall-large.name = Muro di rottami grande -block.scrap-wall-huge.name = Muro di rottami enorme -block.scrap-wall-gigantic.name = Muro di Rottami Gigante +block.scrap-wall-large.name = Muro di Rottami grande +block.scrap-wall-huge.name = Muro di Rottami enorme +block.scrap-wall-gigantic.name = Muro di Rottami gigante block.thruster.name = Propulsore block.kiln.name = Forno block.graphite-press.name = Pressa per grafite block.multi-press.name = Multi Pressa block.constructing = {0}\n[LIGHT_GRAY](In costruzione) -block.spawn.name = Spawning nemico +block.spawn.name = Spawn nemico block.core-shard.name = Nucleo: Frammento block.core-foundation.name = Nucleo: Fondamento block.core-nucleus.name = Nucleo: Kernel @@ -688,12 +692,12 @@ block.darksand.name = Sabbia Scura block.ice.name = Ghiaccio block.snow.name = Neve block.craters.name = Crateri -block.sand-water.name = Acqua Sabbiosa +block.sand-water.name = Acqua sabbiosa block.darksand-water.name = Acqua sabbiosa scura block.char.name = Carbone -block.holostone.name = Pietra di holo +block.holostone.name = Pietra Holo block.ice-snow.name = Neve ghiacciata -block.rocks.name = Roccie +block.rocks.name = Rocce block.icerocks.name = Rocce ghiacciate block.snowrocks.name = Rocce innevate block.dunerocks.name = Rocce delle dune @@ -725,92 +729,92 @@ block.phase-wall.name = Muro di fase block.phase-wall-large.name = Muro grande di fase block.thorium-wall.name = Muro di torio block.thorium-wall-large.name = Muro grande di torio -block.door.name = porta +block.door.name = Porta block.door-large.name = Porta grande -block.duo.name = Torretta a due +block.duo.name = Torretta Duo block.scorch.name = Bruciatore -block.scatter.name = Spargimento +block.scatter.name = Cannone a dispersione block.hail.name = Bombardiere -block.lancer.name = Idrogetto -block.conveyor.name = trasportatore -block.titanium-conveyor.name = Nastro trasportatore potenziato +block.lancer.name = Lanciere +block.conveyor.name = Nastro trasportatore +block.titanium-conveyor.name = Nastro trasportatore avanzato block.junction.name = Incrocio block.router.name = Distributore -block.distributor.name = Mega Separatore +block.distributor.name = Distributore Grande block.sorter.name = Filtro block.overflow-gate.name = Separatore per eccesso -block.silicon-smelter.name = Fonderia per silicio +block.silicon-smelter.name = Fonderia block.phase-weaver.name = Tessitore di fase block.pulverizer.name = Polverizzatore -block.cryofluidmixer.name = Miscelatore liquidi +block.cryofluidmixer.name = Miscelatore di liquidi block.melter.name = Fonditore block.incinerator.name = Inceneritore block.spore-press.name = Pressa di Spore block.separator.name = Separatore block.coal-centrifuge.name = Centrifuga di Carbone -block.power-node.name = Snodo energetico -block.power-node-large.name = Snodo energetico grande +block.power-node.name = Nodo energetico +block.power-node-large.name = Nodo energetico grande block.surge-tower.name = Torre di Sovratensione block.battery.name = Batteria -block.battery-large.name = Batteria grossa -block.combustion-generator.name = Generatore a carbone -block.turbine-generator.name = Turbina +block.battery-large.name = Batteria grande +block.combustion-generator.name = Generatore a combustibile +block.turbine-generator.name = Turbina a vapore block.differential-generator.name = Generatore differenziale block.impact-reactor.name = Reattore ad Impatto -block.mechanical-drill.name = Trapano meccanico -block.pneumatic-drill.name = Trapano pneumatico -block.laser-drill.name = Estrattore laser +block.mechanical-drill.name = Trivella meccanica +block.pneumatic-drill.name = Trivella pneumatica +block.laser-drill.name = Trivella laser block.water-extractor.name = Estrattore d'acqua block.cultivator.name = Coltivatore -block.dart-mech-pad.name = Blocco del Mech Dardo -block.delta-mech-pad.name = Blocco del Mech Delta -block.javelin-ship-pad.name = Blocco della Nave Giavellotto -block.trident-ship-pad.name = Blocco della Nave Tridente -block.glaive-ship-pad.name = Blocco della Nave Glaive -block.omega-mech-pad.name = Blocco della Nave Omega -block.tau-mech-pad.name = Blocco della Nave Tau -block.conduit.name = Condotto +block.dart-mech-pad.name = Piattaforma del Mech Dardo +block.delta-mech-pad.name = Piattaforma del Mech Delta +block.javelin-ship-pad.name = Piattaforma della Nave Giavellotto +block.trident-ship-pad.name = Piattaforma della Nave Tridente +block.glaive-ship-pad.name = Piattaforma della Nave Glaive +block.omega-mech-pad.name = Piattaforma della Nave Omega +block.tau-mech-pad.name = Piattaforma della Nave Tau +block.conduit.name = Condotta block.mechanical-pump.name = Pompa meccanica -block.item-source.name = Sorgente oggetti -block.item-void.name = Vuoto oggetti -block.liquid-source.name = Sorgente liquida -block.power-void.name = Nullità Energetica -block.power-source.name = Energia infinita +block.item-source.name = Fonte infinita (oggetti) +block.item-void.name = Cestino (oggetti) +block.liquid-source.name = Fonte infinita (liquidi) +block.power-void.name = Cestino (energia) +block.power-source.name = Fonte infinita (energia) block.unloader.name = Scaricatore block.vault.name = Deposito block.wave.name = Idrogetto block.swarmer.name = Sciamatore -block.salvo.name = Cannoncino -block.ripple.name = Cannone -block.phase-conveyor.name = Nastro trasportatore ad alta velocità +block.salvo.name = Cannone Leggero +block.ripple.name = Cannone Pesante +block.phase-conveyor.name = Nastro di fase block.bridge-conveyor.name = Nastro trasportatore sopraelevato block.plastanium-compressor.name = Compressore al plastanio block.pyratite-mixer.name = Miscelatore di pirite -block.blast-mixer.name = Miscelatore poleri +block.blast-mixer.name = Miscelatore di esplosivi block.solar-panel.name = Pannello solare -block.solar-panel-large.name = Pannrllo solare 3x3 -block.oil-extractor.name = Estrattore petrolio +block.solar-panel-large.name = Pannello solare 3x3 +block.oil-extractor.name = Estrattore di petrolio block.draug-factory.name = Fabbrica Droni Minatori block.spirit-factory.name = Fabbrica Droni Riparatori block.phantom-factory.name = Fabbrica Droni Fantasma block.wraith-factory.name = Fabbrica Combattenti Spettro block.ghoul-factory.name = Fabbrica Bombardieri Demoniaci -block.dagger-factory.name = Fabbrica Mech col Pugnale +block.dagger-factory.name = Fabbrica Droni Pugnalatori block.crawler-factory.name = Fabbrica Mech Strisciatore block.titan-factory.name = Fabbrica Mech Titano block.fortress-factory.name = Fabbrica Mech Fortezza block.revenant-factory.name = Fabbrica Combattenti Superstiti block.repair-point.name = Punto di riparazione block.pulse-conduit.name = Condotta attiva -block.phase-conduit.name = Condotto ad alta velocità +block.phase-conduit.name = Condotta di fase block.liquid-router.name = Distributore di liquidi -block.liquid-tank.name = Tanica d'acqua +block.liquid-tank.name = Serbatoio block.liquid-junction.name = Giunzione liquida block.bridge-conduit.name = Condotta sopraelevata block.rotary-pump.name = Pompa a turbina block.thorium-reactor.name = Reattore al torio block.mass-driver.name = Lancia Materiali -block.blast-drill.name = Trapano Esplosivo +block.blast-drill.name = Trivella ad impulsi block.thermal-pump.name = Pompa termica block.thermal-generator.name = Generatore termico block.alloy-smelter.name = Altoforno @@ -819,17 +823,18 @@ block.mend-projector.name = Riparatore Grande block.surge-wall.name = Muro di Sovratensione block.surge-wall-large.name = Muro di Sovratensione Grande block.cyclone.name = Ciclone -block.fuse.name = Fusibile -block.shock-mine.name = Mina Scioccante -block.overdrive-projector.name = Proiettore ad Attività Frenetica -block.force-projector.name = Proiettore della Forza -block.arc.name = Arco +block.fuse.name = Frantume +block.shock-mine.name = Mina Stordente +block.overdrive-projector.name = Generatore di Campo di Overclock +block.force-projector.name = Generatore di Campo di Forza +block.arc.name = Arco Elettrico block.rtg-generator.name = Generatore Termico ai Radioisotopi block.spectre.name = Spettro block.meltdown.name = Fusione block.container.name = Contenitore -block.launch-pad.name = Trampolino di Lancio -block.launch-pad-large.name = Trampolino di Lancio Grande +block.launch-pad.name = Ascensore Spaziale +block.launch-pad-large.name = Ascensore Spaziale Avanzato +block.command-center.name = Centro di Comando team.blue.name = blu team.crux.name = rosso team.sharded.name = arancione @@ -847,22 +852,22 @@ unit.ghoul.name = Bombardiere Demoniaco unit.wraith.name = Combattente Spettro unit.fortress.name = Fortezza unit.revenant.name = Superstite -unit.eruptor.name = Eruttore -unit.chaos-array.name = Schieramento di Chaos -unit.eradicator.name = Eradicatore +unit.eruptor.name = Incandescente +unit.chaos-array.name = Matrice del Caos +unit.eradicator.name = Estirpatore unit.lich.name = Lich unit.reaper.name = Mietitore tutorial.next = [lightgray] tutorial.intro = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nInizia [accent] scavando rame[]. Clicca un minerale di rame vicino al tuo nucleo per farlo.\n\n[accent]{0}/{1} rame -tutorial.drill = Minare manualmente.\n[accent]Trapani []possono scavare automaticamente\nPiazzane uno su un minerale di rame -tutorial.drill.mobile = L'estrazione manuale è inefficiente. \n[accent] I trapani [] possono estrarre automaticamente. \n Toccare la scheda del trapano in basso a destra. \n Selezionare il trapano meccanico [accent] []. \n Posizionarlo su una vena di rame toccando, quindi premere il segno di spunta [accent] [] in basso per confermare la selezione. \n Premere il tasto X [accent] [] per annullare il posizionamento. -tutorial.blockinfo = Ogni blocco ha statistiche diverse. Ogni trapano può estrarre solo determinati minerali. \n Per controllare le informazioni e le statistiche di un blocco, [accent] tocca "?" mentre lo selezioni nel menu di creazione. []\n\n[accent] Accedi ora alle statistiche del trapano meccanico. [] -tutorial.conveyor = [accent] I nastri trasportatori [] sono usati per trasportare oggetti al nocciolo. \n Crea una linea di nastri dal trapano al nocciolo. -tutorial.conveyor.mobile = [accent] I nastri trasportatori [] sono usati per trasportare oggetti nel nocciolo. \nFai una linea di nastri trasportatori dal trapano al nocciolo. \n[accent] Posizionati in una linea tenendo premuto il dito per alcuni secondi [] e trascinando in una direzione. \n\n [accent] {0} / {1} nastri trasportatori disposti in linea \n [accent] 0/1 oggetti consegnati +tutorial.drill = Minare manualmente.\n[accent]Le trivelle []possono scavare automaticamente\nPiazzane una su un minerale di rame. +tutorial.drill.mobile = L'estrazione manuale è inefficiente. \n[accent] Le trivelle [] possono estrarre automaticamente. \n Toccare la scheda della trivella in basso a destra. \n Selezionare la trivella meccanica [accent] []. \n Posizionarlo su una vena di rame toccando, quindi premere il segno di spunta [accent] [] in basso per confermare la selezione. \n Premere il tasto X [accent] [] per annullare il posizionamento. +tutorial.blockinfo = Ogni blocco ha statistiche diverse. Ogni trivella può estrarre solo determinati minerali. \n Per controllare le informazioni e le statistiche di un blocco, [accent] tocca "?" mentre lo selezioni nel menu di creazione. []\n\n[accent] Accedi ora alle statistiche della trivella meccanica. [] +tutorial.conveyor = [accent] I nastri trasportatori [] sono usati per trasportare oggetti al nocciolo. \n Crea una linea di nastri dalla trivella al nocciolo. +tutorial.conveyor.mobile = [accent] I nastri trasportatori [] sono usati per trasportare oggetti nel nocciolo. \nCrea una linea di nastri trasportatori dalla trivella al nocciolo. \n[accent] Posizionati in una linea tenendo premuto il dito per alcuni secondi [] e trascinando in una direzione. \n\n [accent] {0} / {1} nastri trasportatori disposti in linea \n [accent] 0/1 oggetti consegnati tutorial.turret = Strutture difensive devono essere costruite per respingere il nemico [LIGHT_GRAY] []. \nCostruisci una torretta a due vicino alla tua base. -tutorial.drillturret = Torrette a due richiedono[accent] munizioni di rame[] per sparare.\n Duo turrets require[accent] copper ammo []to shoot.\nPosiziona un trapano vicino alla torretta per rifornirlo di rame estratto. -tutorial.pause = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi mettere in fila gli edifici mentre sei in pausa. \n\n[accent] Premi spazio per mettere in pausa. -tutorial.pause.mobile = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi mettere in fila gli edifici mentre sei in pausa. \n\n[accent] Premi questo pulsante in alto a sinistra per mettere in pausa. +tutorial.drillturret = Torrette a due richiedono[accent] munizioni di rame[] per sparare.\n Duo turrets require[accent] copper ammo []to shoot.\nPosiziona una trivella vicino alla torretta per rifornirlo di rame estratto. +tutorial.pause = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi disporre gli edifici mentre sei in pausa. \n\n[accent] Premi spazio per mettere in pausa. +tutorial.pause.mobile = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi disporre gli edifici mentre sei in pausa. \n\n[accent] Premi questo pulsante in alto a sinistra per mettere in pausa. tutorial.unpause = Ora premi di nuovo spazio per annullare la pausa. tutorial.unpause.mobile = Ora premilo di nuovo per annullare la pausa. tutorial.breaking = I blocchi spesso devono essere distrutti. \n [accent] Tieni premuto il tasto destro del mouse [] per distruggere tutti i blocchi in una selezione. []\n\n[accent] Distruggi tutti i blocchi di scarto a sinistra del tuo core usando la selezione dell'area . @@ -870,33 +875,33 @@ tutorial.breaking.mobile = I blocchi spesso devono essere distrutti. \n [accent] tutorial.withdraw = In alcune situazioni, è necessario prendere gli oggetti direttamente dai blocchi. \n Per fare ciò, [accent] tocca un blocco [] con oggetti al suo interno, quindi [accent] tocca l'oggetto [] nell'inventario. \nPosti multipli possono essere ritirati da [accent] toccando e tenendo premuto []. \n\n[accent] Prelevare un po' di rame dal nucleo. [] tutorial.deposit = Deposita gli oggetti in blocchi trascinandoli dalla tua nave al blocco di destinazione. \n\n[accent] Riporta il rame nel nucleo. [] tutorial.waves = Il nemico [LIGHT_GRAY] si avvicina. \n\n Difendi il tuo nucleo per 2 ondate. Costruisci più torrette. -tutorial.waves.mobile = Il [lightgray] nemico si avvicina.\n\n Difendi il nucleo per due ondate. La tua nave sparerà automaticamente contro i nemici.\nCostruisci più torrette e trapani. Scava più rame -tutorial.launch = Una volta raggiunta un'onda specifica, sei in grado di [accent] decollare con il nucleo [], lasciando indietro le tue difese e [accent] ottenendo tutte le risorse nel tuo nucleo. [] \n Queste risorse possono quindi essere utilizzate per ricercare nuove tecnologie.\n\n [accent] Premi il pulsante di avvio. +tutorial.waves.mobile = Il [lightgray] nemico si avvicina.\n\n Difendi il nucleo per due ondate. La tua nave sparerà automaticamente contro i nemici.\nCostruisci più torrette e trivelle. Scava più rame +tutorial.launch = Una volta raggiunta un'onda specifica, sei in grado di [accent] decollare con il nucleo [], lasciando indietro le tue difese ed [accent] ottenendo tutte le risorse nel tuo nucleo. [] \n Queste risorse possono quindi essere utilizzate per ricercare nuove tecnologie.\n\n [accent] Premi il pulsante di avvio. item.copper.description = Un utile materiale, usato dappertutto item.lead.description = Un materiale di base, molto usato nei blocchi di trasporto. -item.metaglass.description = Un durissimo composto di vetro. Estensivamente usato per trasporto di liquidi e immagazzinamento. -item.graphite.description = Carbone mineralizzato, utilizzato per munizioni e insulazione elettrica. -item.sand.description = Un materiale di base che viene usato molto nei processi di fusione, sia come lega che come lubrificante. -item.coal.description = Un carburante comune e facilmente ottenibile. -item.titanium.description = Un raro metallo super leggero usato ampiamente nel trasporto di liquidi, trapani e navi. +item.metaglass.description = Un durissimo composto di vetro. Estensivamente usato per trasporto di liquidi ed immagazzinamento. +item.graphite.description = Carbone mineralizzato, utilizzato per munizioni ed isolamento elettrico. +item.sand.description = Un materiale di base che viene usato molto nei processi di fusione, sia come lega che come reagente. +item.coal.description = Un combustibile comune facilmente ottenibile. +item.titanium.description = Un raro metallo incredibilmente leggero usato ampiamente nella costruzione di trasporti, trivelle e navi. item.thorium.description = Un materiale denso e radioattivo, utilizzato nella costruzione di strutture e come carburante del reattore nucleare. -item.scrap.description = Resti rimanenti di vecchie strutture e unità. Contiene tracce di molti metalli diversi. +item.scrap.description = Resti rimanenti di vecchie strutture ed unità. Contiene tracce di molti metalli diversi. item.silicon.description = Un semiconduttore molto utile che viene utilizzato nei pannelli solari e nei macchinari elettronici. item.plastanium.description = Un materiale leggero e duttile, utilizzato nelle navi avanzate e come munizione. item.phase-fabric.description = Una sostanza quasi senza peso utilizzata nell'elettronica avanzata e nella tecnologia autoriparante. item.surge-alloy.description = Una lega avanzata con proprietà elettriche uniche. item.spore-pod.description = Utilizzato per la conversione in petrolio, esplosivi e carburante. -item.blast-compound.description = Un composto altamente volatile, utilizzato nella produzione di bombe ed esplosivi. Può essere utilizzato come combustibile anche se non è consigliato. -item.pyratite.description = Una sostanza molto infiammabile che viene utilizzata nelle armi a fuoco. -liquid.water.description = comunemente usato per macchine di raffreddamento e trattamento dei rifiuti. -liquid.slag.description = Vari tipi diversi di metallo fuso mescolati insieme. Può essere separato nei suoi minerali costituenti o spruzzato sulle unità nemiche come un'arma. -liquid.oil.description = Può essere bruciato, esploso o usato come refrigerante. -liquid.cryofluid.description = Il liquido più efficiente per il raffreddamento. +item.blast-compound.description = Un composto altamente volatile, utilizzato nella produzione di bombe ed esplosivi. Può essere utilizzato come combustibile anche se non è consigliabile. +item.pyratite.description = Una sostanza molto infiammabile che viene utilizzata nelle armi da fuoco. +liquid.water.description = Il liquido più utile. Comunemente usato per il raffreddamento di macchinari ed il trattamento dei rifiuti. +liquid.slag.description = Diversi tipi di metalli fusi, mescolati insieme. Può essere separato nei suoi minerali costituenti o spruzzato sulle unità nemiche come un'arma. +liquid.oil.description = Un liquido usato nella produzione avanzata.\nPuò essere convertito in carbone per uso combustibile o spruzzato ed incendiato come arma. +liquid.cryofluid.description = Un liquido inerte e non corrosivo creato da acqua e titanio.\nIl liquido più efficiente per il raffreddamento. mech.alpha-mech.description = Il mech standard. È abbastanza veloce e produce abbastanza danni, può anche generare 3 droni per aumentare il suo danno complessivo. mech.delta-mech.description = Un mech veloce, poco armato fatto per giocare a tocca e fuga con il nemico. Fa poco danno alle strutture, ma può uccidere un gran nummero di nemici grazie alle sue armi ad alto voltaggio. mech.tau-mech.description = Un mech di supporto. Cura i blocchi danneggiati sparandogli contro. Può spegnere fuochi e curare i compagni di squadra. mech.omega-mech.description = Un mech ingombrante e ben armato, fatto per stare in prima linea. La sue difese possono bloccare fino al 90% dei danni. -mech.dart-ship.description = Una navicella standard. Molto veloce e leggera, ma può minare pochi blocchi e ha scarse potenzialità nella difesa. +mech.dart-ship.description = Una navicella standard. Molto veloce e leggera, ma può minare pochi blocchi ed ha scarse potenzialità nella difesa. mech.javelin-ship.description = Una navetta da tocca e fuga. Anche se inizialmente lenta, può accelerare ad alte velocità e volare sopra gli avamposti dei nemici, e provocare molti danni ai nemici tramite l'utilizzo di fulmini o missili. mech.trident-ship.description = Un bombardiere pesante. Molto ben protetto. mech.glaive-ship.description = Una grande e ben armata macchina da guerra. Equipaggiata con lanciafamme e con accelerazione veloce. @@ -904,129 +909,134 @@ unit.draug.description = Un drone minerario primitivo. Economico da produrre. Sa unit.spirit.description = L'unità drone di partenza. Si genera nel nucleo per impostazione predefinita. Scava automaticamente, raccoglie oggetti e ripara blocchi. unit.phantom.description = Un'unità drone avanzata. Scava automaticamente, raccoglie oggetti e ripara blocchi. Significativamente più efficace del drone di partenza. unit.dagger.description = Un unità terrena base, molto più efficiente se in branco. -unit.crawler.description = Un'unità di terra costituita da un telaio abbattuto con alti esplosivi legati sulla parte superiore. Non particolarmente resistente. Esplode a contatto con i nemici. -unit.titan.description = Un'unità di terra corazzata avanzata. Utilizza carburo come munizione. Attacca sia bersagli terrestri che aerei. +unit.crawler.description = Un'unità di terra costituita da un telaio essenziale con potenti esplosivi legati sulla parte superiore. Non particolarmente resistente. Esplode a contatto con i nemici. +unit.titan.description = Un'unità di terra corazzata avanzata equipaggiata con due piccoli lanciafiamme. Attacca sia bersagli terrestri che aerei. unit.fortress.description = Un'unità di terra di artiglieria pesante. -unit.eruptor.description = Un mech pesante progettato per abbattere le strutture. Spara un flusso di scorie contro le fortificazioni nemiche, sciogliendole e dando fuoco ai gas. +unit.eruptor.description = Un mech pesante progettato per abbattere le strutture. Spara un flusso di scoria contro le fortificazioni nemiche, sciogliendole e dando fuoco a tutto. unit.wraith.description = Un'unità d'intercezione rapida ed efficiente. -unit.ghoul.description = Un bombardiere pesante. Utilizza composti esplosivi o piratite come munizioni. -unit.revenant.description = Una serie di missili pesante volante. +unit.ghoul.description = Un bombardiere pesante. Utilizza composti esplosivi o pirite come munizioni. +unit.revenant.description = Un pesante lanciamissili volante. +unit.chaos-array.description = Ignoto +unit.eradicator.description = Ignoto +unit.lich.description = Ignoto +unit.reaper.description = Ignoto +block.command-center.description = Da istruzioni alle unità alleate nella mappa. Comanda la ricongizione, l'attacco del nucleo nemico o la ritirata verso il proprio nucleo o fabbrica.\nQuando non è presente un nucleo nemico, le unità pattuglieranno anche se viene ordinato un attacco. block.graphite-press.description = Comprime pezzi di carbone in fogli di grafite puri. -block.multi-press.description = Una versione aggiornata della pressa per grafite. Impiega acqua e energia per elaborare il carbone in modo rapido ed efficiente. -block.silicon-smelter.description = Mescola sabbia con carbone riscaldato in assenza d'aria. -block.kiln.description = Fonde la sabbia e il piombo in vetro metallico. Richiede piccole quantità di energia. -block.plastanium-compressor.description = Produce plastanio da olio e titanio. -block.phase-weaver.description = Produce tessuto di fase da torio radioattivo e elevate quantità di sabbia. +block.multi-press.description = Una versione aggiornata della pressa per grafite. Impiega acqua ed energia per elaborare il carbone in modo rapido ed efficiente. +block.silicon-smelter.description = Fonde sabbia e carbone riscaldati per ottenere silicio. +block.kiln.description = Fonde la sabbia ed il piombo in vetro metallico. Richiede piccole quantità di energia. +block.plastanium-compressor.description = Produce plastanio da petrolio e titanio. +block.phase-weaver.description = Produce tessuto di fase da torio radioattivo ed elevate quantità di sabbia. block.alloy-smelter.description = Produce leghe di sovratensione da titanio, piombo, silicio e rame. block.cryofluidmixer.description = Combina acqua e titanio in criofluido che è molto più efficiente per il raffreddamento. -block.blast-mixer.description = Utilizza olio per trasformare la piratite nel composto esplosivo, meno infiammabile ma più esplosivo. -block.pyratite-mixer.description = Mescola carbone, piombo e sabbia in piratite altamente infiammabile. -block.melter.description = Riscalda la pietra a temperature molto elevate per ottenere lava. -block.separator.description = Espone la pietra alla pressione dell'acqua per ottenere vari minerali contenuti nella pietra. -block.spore-press.description = Comprime baccelli di spore in olio. -block.pulverizer.description = Schiaccia la pietra nella sabbia. Utile quando manca la sabbia naturale. -block.coal-centrifuge.description = Solidifica l'olio in pezzi di carbone. -block.incinerator.description = Elimina qualsiasi oggetto in eccesso o liquido. -block.power-void.description = Elimina tutta l'energia messa al suo interno, esiste solo nella sabbiera. -block.power-source.description = Produce energia infinita, esiste solo nella sabbiera. -block.item-source.description = Produce oggetti infiniti, esiste solo nella sabbiera. -block.item-void.description = Elimina gli oggetti che ci entrano dentro senza energia, esiste solo nella sabbiera. -block.liquid-source.description = Emette continuamente liquidi. Esiste solo nella sabbiera. -block.copper-wall.description = Un blocco difensivo economico. \n Utile per proteggere il nucleo e le torrette nelle prime ondate. -block.copper-wall-large.description = Un blocco difensivo economico. \n Utile per proteggere il nucleo e le torrette nelle prime ondate. \nOccupa più blocchi +block.blast-mixer.description = Frantuma e mescola le spore con la pirite per produrre Composto Esplosivo. +block.pyratite-mixer.description = Mescola carbone, piombo e sabbia in pirite altamente infiammabile. +block.melter.description = Riscalda la pietra a temperature molto elevate per ottenere scoria liquida. +block.separator.description = Sottopone le scoria a centrifugazione per ottenere i vari minerali contenuti. +block.spore-press.description = Comprime le spore in petrolio. +block.pulverizer.description = Polverizza la pietra.\nUtile quando manca la sabbia naturale. +block.coal-centrifuge.description = Solidifica il petrolio in pezzi di carbone. +block.incinerator.description = Elimina qualsiasi oggetto o liquido in eccesso. +block.power-void.description = Elimina tutta l'energia che riceve, esiste solo nella modalità creativa. +block.power-source.description = Produce energia infinita, esiste solo nella modalità creativa. +block.item-source.description = Produce oggetti infiniti, esiste solo nella modalità creativa. +block.item-void.description = Elimina gli oggetti che vi entrano senza bisogno di energia, esiste solo nella modalità creativa. +block.liquid-source.description = Emette continuamente liquidi. Esiste solo nella modalità creativa. +block.copper-wall.description = Un blocco difensivo economico.\nUtile per proteggere il nucleo e le torrette nelle prime ondate. +block.copper-wall-large.description = Un blocco difensivo economico.\nUtile per proteggere il nucleo e le torrette nelle prime ondate. \nOccupa più blocchi block.titanium-wall.description =Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici. -block.titanium-wall-large.description = Un blocco difensivo moderatamente forte. \n Fornisce una protezione moderata dai nemici. \nOccupa più blocchi +block.titanium-wall-large.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici. \nOccupa più blocchi block.thorium-wall.description = Un forte blocco difensivo.\nBuona protezione dai nemici. block.thorium-wall-large.description = Un forte blocco difensivo.\nBuona protezione dai nemici.\nOccupa più blocchi block.phase-wall.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti. block.phase-wall-large.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.\nOccupa più blocchi block.surge-wall.description = Il blocco difensivo più forte. \nHa una piccola possibilità di innescare un fulmine verso l'attaccante. block.surge-wall-large.description = Il blocco difensivo più forte. \n Ha una piccola possibilità di innescare un fulmine verso l'attaccante.\nOccupa più blocchi -block.door.description = Una piccola porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare e attraversare. -block.door-large.description = Una grande porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare e attraversare. \nOccupa più blocchi -block.mender.description = Ripara periodicamente blocchi nelle vicinanze. Mantiene le difese riparate tra le ondate.\nPuò usare del silicio per aumentare la portata e l'efficienza. -block.mend-projector.description = Cura periodicamente gli edifici nelle vicinanze. -block.overdrive-projector.description = Aumenta la velocità di edifici vicini come trapani e nastri trasportatori. +block.door.description = Una piccola porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare ed attraversare. +block.door-large.description = Una grande porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare ed attraversare. \nOccupa più blocchi +block.mender.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del silicio per aumentarne portata ed efficienza. +block.mend-projector.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del tessuto di fase per aumentarne portata ed efficienza. +block.overdrive-projector.description = Aumenta la velocità di edifici vicini come trivelle e nastri trasportatori. block.force-projector.description = Crea un campo di forza esagonale attorno a sé, proteggendo gli edifici e le unità all'interno da danni causati da proiettili block.shock-mine.description = Danneggia i nemici che la calpestano. Quasi invisibile al nemico. -block.conveyor.description = Blocco di trasporto oggetti di base. Sposta gli oggetti in avanti e li deposita automaticamente in altri blocchi. Ruotabile. -block.titanium-conveyor.description = Blocco trasporto oggetti avanzato. Sposta gli oggetti più velocemente dei trasportatori standard. -block.junction.description = Funziona come un ponte per due nastri trasportatori incrociati. Utile in situazioni con due diversi nastri trasportatori che trasportano materiali diversi in posizioni diverse. -block.bridge-conveyor.description = Blocco trasporto oggetti avanzato. Consente il trasporto di oggetti fino a 3 tessere di qualsiasi terreno o edificio. -block.phase-conveyor.description = Blocco trasporto oggetti avanzato. Utilizza la potenza per teletrasportare gli oggetti su un trasportatore di fase collegato su più piastrelle. +block.conveyor.description = Nastro di base. Sposta gli oggetti in avanti e li deposita automaticamente in altri blocchi. Ruotabile. +block.titanium-conveyor.description = Nastro avanzato. Sposta gli oggetti più velocemente dei nastri standard. +block.junction.description = Permette di incrociare nastri che trasportano materiali diversi in posizioni diverse. +block.bridge-conveyor.description = Consente il trasporto di oggetti fino a 3 tessere ad un altro nastro sopraelevato.\nPuò passare sopra ad altri blocchi od edifici. +block.phase-conveyor.description = Nastro avanzato. Consuma energia per teletrasportare gli oggetti su un altro nastro di fase collegato. block.sorter.description = Divide gli oggetti. Se l'oggetto corrisponde a quello selezionato, Può passare. Altrimenti viene espulso sui lati. block.router.description = Accetta gli elementi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Utile per suddividere i materiali da una fonte a più destinazioni. block.distributor.description = Un distributore avanzato che divide gli oggetti in altre 7 direzioni allo stesso modo. -block.overflow-gate.description = Una combinazione di un divisore e di un router , che distribuisce sui suoi lati se la via centrale è bloccata. +block.overflow-gate.description = Una combinazione di un incrocio e di un distributore , che distribuisce sui suoi lati se in nastro difronte si satura. block.mass-driver.description = Ultimo blocco di trasporto di oggetti. Raccoglie diversi oggetti e poi li spara su un'altra Lancia Materiali a lungo raggio. block.mechanical-pump.description = Una pompa economica con potenza lenta, ma nessun consumo di energia. -block.rotary-pump.description = Una pompa avanzata che raddoppia la velocità sfruttando la potenza. +block.rotary-pump.description = Una pompa avanzata che raddoppia la velocità consumando energia. block.thermal-pump.description = La pompa migliore. Tre volte più veloce di una pompa meccanica e l'unica pompa in grado di recuperare la lava. -block.conduit.description = Blocco di trasporto del liquido di base. Funziona come un nastro trasportatore, ma con liquidi. Ideale per estrattori, pompe o altri condotti. -block.pulse-conduit.description = Blocco trasporto liquidi avanzato. Trasporta i liquidi più velocemente e immagazzina più dei condotti standard. -block.liquid-router.description = Accetta i liquidi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Può anche immagazzinare una certa quantità di liquido. Utile per suddividere i liquidi da una fonte a più bersagli. +block.conduit.description = Condotta di base. Funziona come un nastro trasportatore, ma per i liquidi. Ideale per estrattori, pompe o altre condotte. +block.pulse-conduit.description = Condotta avanzata. Trasporta più liquido e più velocemente delle condotte standard. +block.liquid-router.description = Accetta i liquidi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Può anche immagazzinare una certa quantità di liquido. Utile per suddividere i liquidi da una fonte verso più destinazioni. block.liquid-tank.description = Conserva una grande quantità di liquidi. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali o come protezione per il raffreddamento di blocchi vitali. -block.liquid-junction.description = Funziona come un ponte per due condotti di attraversamento. Utile in situazioni con due condotti diversi che trasportano liquidi diversi in luoghi diversi. -block.bridge-conduit.description = Blocco trasporto liquidi avanzato. Consente il trasporto di liquidi fino a 3 piastrelle di qualsiasi terreno o edificio. -block.phase-conduit.description = Blocco trasporto liquidi avanzato. Utilizza la potenza per teletrasportare i liquidi in un condotto di fase collegato su più piastrelle. -block.power-node.description = Trasmette energia ai nodi collegati. È possibile collegare fino a quattro fonti di alimentazione, eliminatori di energia o nodi. Il nodo riceverà energia o fornirà energia a tutti i blocchi adiacenti. -block.power-node-large.description = Ha un raggio maggiore rispetto al nodo di alimentazione e si collega a un massimo di sei fonti di alimentazione, eliminatori di energia o nodi. -block.surge-tower.description = Un nodo di alimentazione a lungo raggio con meno connessioni disponibili. -block.battery.description = Accumula energia ogni volta che c'è abbondanza e fornisce energia ogni volta che c'è carenza, purché rimanga capacità. +block.liquid-junction.description = Permette di incrociare condotte che trasportano liquidi diversi in posizioni diverse. +block.bridge-conduit.description = Consente il trasporto di liquidi fino a 3 tessere da un altra condotta sopraelevata.\nPuò passare sopra ad altri blocchi od edifici. +block.phase-conduit.description = Condotta avanzata. Consuma energia per teletrasportare i liquidi in un altra condotta di fase collegata. +block.power-node.description = Trasmette energia tra i nodi collegati. È possibile creare fino a quattro collegamenti.\nClicca sul nodo per configurare i collegamenti. +block.power-node-large.description = Ha un raggio maggiore rispetto al nodo energetico e si possono creare un massimo di sei collegamenti.\nClicca sul nodo per configurare i collegamenti. +block.surge-tower.description = Un nodo di alimentazione a lungo raggio solo due connessioni disponibili.\nClicca sul nodo per configurare i collegamenti. +block.battery.description = Accumula energia ogni volta che c'è abbondanza e fornisce energia ogni volta che c'è carenza, purché rimanga carica. block.battery-large.description = Immagazzina molta più energia di una normale batteria. -block.combustion-generator.description = Genera energia bruciando olio o materiali infiammabili. +block.combustion-generator.description = Genera energia bruciando combustibile. block.thermal-generator.description = Genera una grande quantità di energia dalla lava. -block.turbine-generator.description = Più efficiente di un generatore di combustione, ma richiede acqua aggiuntiva. -block.differential-generator.description = Genera grandi quantità di energia. Utilizza la differenza di temperatura tra criofluido e piratite in fiamme. -block.rtg-generator.description = Un generatore termoelettrico radioisotopico che non richiede raffreddamento ma fornisce meno energia di un reattore al torio. +block.turbine-generator.description = Più efficiente di un generatore a combustione, ma richiede l'aggiunta di acqua. +block.differential-generator.description = Genera grandi quantità di energia. Utilizza la differenza di temperatura tra criofluido e pirite in combustione. +block.rtg-generator.description = Un generatore che sfrutta il calore del decadimento di materiale radioattivo per produrre energia.\nNon richiede raffreddamento ma fornisce meno energia di un reattore al torio. block.solar-panel.description = Fornisce una piccola quantità di energia dal sole. block.solar-panel-large.description = Fornisce un'alimentazione molto migliore rispetto a un pannello solare standard, ma è anche molto più costoso da costruire. block.thorium-reactor.description = Genera enormi quantità di energia dal torio altamente radioattivo. Richiede un raffreddamento costante. Esploderà violentemente se vengono fornite quantità insufficienti di refrigerante. block.impact-reactor.description = Un generatore avanzato, in grado di creare enormi quantità di energia alla massima efficienza. Richiede un significativo apporto di energia per avviare il processo. -block.mechanical-drill.description = Un trapano economico. Se posizionato su riquadri appropriati, genera gli oggetti a un ritmo lento indefinitamente. -block.pneumatic-drill.description = Un trapano migliorato che è più veloce e in grado di elaborare materiali più duri sfruttando la pressione dell'aria. -block.laser-drill.description = Consente di perforare ancora più velocemente attraverso la tecnologia laser, ma richiede potenza. Inoltre, con questo trapano è possibile recuperare il torio radioattivo. -block.blast-drill.description = Il trapano migliore. Richiede grandi quantità di energia. +block.mechanical-drill.description = Una trivella economica. Se posizionato su riquadri appropriati, estrae minerali a un ritmo lento e costante. +block.pneumatic-drill.description = Una trivella migliorata più veloce ed in grado di elaborare materiali più duri sfruttando la pressione dell'aria. +block.laser-drill.description = Consente di perforare ancora più velocemente attraverso la tecnologia laser, ma richiede energia. Inoltre, con questa trivella è possibile recuperare il torio radioattivo. +block.blast-drill.description = La trivella migliore. Richiede grandi quantità di energia. block.water-extractor.description = Estrae l'acqua dal terreno. Usalo quando non c'è nessun lago nelle vicinanze. block.cultivator.description = Coltiva il terreno con acqua per ottenere materia organica. -block.oil-extractor.description = Utilizza grandi quantità di energia per estrarre olio dalla sabbia. Usalo quando non c'è una fonte diretta di petrolio nelle vicinanze. +block.oil-extractor.description = Utilizza grandi quantità di energia per estrarre petrolio dalla sabbia. Usalo quando non c'è una fonte diretta di petrolio nelle vicinanze. block.core-shard.description = La prima iterazione del nucleo. Una volta distrutto, tutti i contatti con la regione vengono persi. Non lasciare che questo accada. block.core-foundation.description = La seconda versione del nucleo. Meglio corazzato. Immagazzina più risorse. -block.core-nucleus.description = La terza e ultima versione del nucleo. Estremamente ben corazzato. Immagazzina enormi quantità di risorse. +block.core-nucleus.description = La terza ed ultima versione del nucleo. Estremamente ben corazzato. Immagazzina enormi quantità di risorse. block.vault.description = Immagazzina una grande quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal deposito. -block.container.description = Memorizza una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore. -block.unloader.description = Scarica gli oggetti da un contenitore, caveau o nucleo su un trasportatore o direttamente in un blocco adiacente. Il tipo di articolo da scaricare può essere modificato toccando lo scaricatore. -block.launch-pad.description = Lancia oggetti senza necessità di un lancio di base. Incompiuto. -block.launch-pad-large.description = Una versione migliore della piattaforma di lancio, immagazzina più oggetti. Lancia oggetti più frequentemente. +block.container.description = Immagazzina una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore. +block.unloader.description = Scarica gli oggetti da un contenitore, caveau o nucleo su un trasportatore o direttamente in un blocco adiacente. L'oggetto da scaricare può essere scelto toccando lo scaricatore. +block.launch-pad.description = Lancia oggetti nel tuo nucleo senza necessità di un lasciare la zona. +block.launch-pad-large.description = Una versione migliore dell'Ascensore Spaziale, immagazzina più oggetti. Lancia oggetti più frequentemente. block.duo.description = Una torretta piccola ed economica. -block.scatter.description = Una torretta anti-aria di medie dimensioni. Spruzza grumi di piombo o frammenti di scorie sulle unità nemiche. +block.scatter.description = Una torretta antiaerea di medie dimensioni. Spara schegge di piombo o frammenti di rottami sulle unità nemiche. block.scorch.description = Brucia qualsiasi nemico di terra vicino ad esso. Molto efficace a distanza ravvicinata. block.hail.description = Una piccola torretta di artiglieria. -block.wave.description = Una torretta a fuoco rapido di medie dimensioni che spara bolle liquide. -block.lancer.description = Una torretta di medie dimensioni che spara fasci di elettricità caricati. +block.wave.description = Una torretta a fuoco rapido di medie dimensioni che spara liquidi. +block.lancer.description = Una torretta di medie dimensioni che dopo un breve caricamento spara potenti fasci elettrici. block.arc.description = Una piccola torretta che spara elettricità in un arco casuale verso il nemico. block.swarmer.description = Una torretta di medie dimensioni che spara missili esplosivi. block.salvo.description = Una torretta di medie dimensioni che spara colpi in salve. -block.fuse.description = Una grande torretta che spara potenti raggi a corto raggio. +block.fuse.description = Una grande torretta a corto raggio che spara tre potenti schegge perforanti. block.ripple.description = Una grande torretta di artiglieria che spara più colpi contemporaneamente. block.cyclone.description = Una grande torretta a fuoco rapido. block.spectre.description = Una grande torretta che spara due potenti proiettili contemporaneamente. -block.meltdown.description = Una grande torretta che spara potenti raggi a lungo raggio. -block.draug-factory.description = Produce droni minerari +block.meltdown.description = Una grande torretta che spara un potente laser a lungo raggio. +block.draug-factory.description = Produce droni per la raccolta mineraria. block.spirit-factory.description = Produce droni che riparano blocchi. -block.phantom-factory.description = Produce unità drone avanzate che sono significativamente più efficaci di un drone riparatore. -block.wraith-factory.description = Produce unità intercettatrici veloci e veloci. +block.phantom-factory.description = Produce droni avanzati che seguono il giocatore e lo assistono nella costruzione. +block.wraith-factory.description = Produce unità intercettatrici veloci. block.ghoul-factory.description = Produce bombardieri pesanti. block.revenant-factory.description = Produce unità laser di terra pesanti. -block.dagger-factory.description = Produce unità di base di terra. -block.crawler-factory.description = Produce unità di sciame veloci autodistruggenti. +block.dagger-factory.description = Produce unità di base corpo a corpo di terra. +block.crawler-factory.description = Produce unità di sciame veloci ed autodistruggenti. block.titan-factory.description = Produce unità terrestri avanzate e corazzate. block.fortress-factory.description = Produce unità di terra di artiglieria pesante. -block.repair-point.description = Cura continuamente l'unità danneggiata più vicina -block.dart-mech-pad.description = Fornisce la trasformazione in un mech di attacco di base. \nUtilizzare toccando stando in piedi su di esso. -block.delta-mech-pad.description = Lascia la tua attuale nave e trasformala in un mech veloce e leggermente corazzato fatto per gli attacchi di tipo "colpisci e scappa". \nUsa il blocco toccando due volte mentre ti ci trovi sopra. -block.tau-mech-pad.description = Lascia la tua attuale nave e trasformala in un mech di supporto in grado di curare edifici e unità amichevoli. \n Usa il blocco toccando due volte mentre sei in piedi su di esso. -block.omega-mech-pad.description = Lascia la tua attuale nave e trasformala in un mech voluminoso e ben corazzato, creato per gli assalti in prima linea. \nUsa il blocco toccando due volte mentre sei in piedi su di esso. -block.javelin-ship-pad.description = Lascia la tua attuale nave e trasformala in un intercettore forte e veloce con armi elettriche.\nUsa il blocco toccando due volte mentre ti trovi su di esso. -block.trident-ship-pad.description = Lascia la tua attuale nave e trasformala in un bombardiere pesantemente ben corazzato. \nUsa il blocco toccando due volte mentre ti trovi su di esso. -block.glaive-ship-pad.description = Lascia la tua attuale nave e trasformati in una grande nave ben corazzata. \n Usa il blocco toccando due volte mentre ti trovi su di esso. +block.repair-point.description = Cura continuamente l'unità danneggiata più vicina. +block.dart-mech-pad.description = Trasforma la tua nave in un mech di attacco di base. \nUsa il blocco toccando due volte mentre ti trovi su di esso. +block.delta-mech-pad.description = Trasforma la tua nave in un mech veloce e leggermente corazzato, ideale per colpire e scappare. \nUsa il blocco toccando due volte mentre ti ci trovi sopra. +block.tau-mech-pad.description = Trasforma la tua nave in un mech di supporto in grado di curare edifici ed unità alleate. \n Usa il blocco toccando due volte mentre sei in piedi su di esso. +block.omega-mech-pad.description = Trasforma la tua nave in un mech voluminoso e ben corazzato, creato per gli assalti in prima linea. \nUsa il blocco toccando due volte mentre sei in piedi su di esso. +block.javelin-ship-pad.description = Trasforma la tua nave in un intercettore forte e veloce con armi elettriche.\nUsa il blocco toccando due volte mentre ti trovi su di esso. +block.trident-ship-pad.description = Trasforma la tua nave in un bombardiere pesante e ben corazzato. \nUsa il blocco toccando due volte mentre ti trovi su di esso. +block.glaive-ship-pad.description = Trasforma la tua nave in una nave grande e ben corazzata. \nUsa il blocco toccando due volte mentre ti trovi su di esso. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 4d44c9da24..3576d14913 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -1,26 +1,28 @@ -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!) +credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] credits = クレジット -contributors = 翻訳や協力してくださった方々 -discord = DiscordのMindustryに参加! +contributors = 翻訳や開発に協力してくださった方々 +discord = MindustryのDiscordに参加! link.discord.description = Mindustryの公式Discordグループ link.github.description = このゲームのソースコード -link.changelog.description = List of update changes +link.changelog.description = 変更履歴 link.dev-builds.description = 不安定な開発版 link.trello.description = 公式 Trelloボード で実装予定の機能をチェック -link.itch.io.description = itch.io でPC版のダウンロードやweb版で遊ぼう -link.google-play.description = Google Playのストア +link.itch.io.description = itch.io でゲームをダウンロード +link.google-play.description = Google Play ストアを開く link.wiki.description = 公式 Mindustry Wiki linkfail = リンクを開けませんでした!\nURLをクリップボードにコピーしました。 screenshot = スクリーンショットを {0} に保存しました。 screenshot.invalid = マップが広すぎます。スクリーンショットに必要なメモリが足りない可能性があります。 gameover = ゲームオーバー gameover.pvp = [accent] {0}[] チームの勝利! -highscore = [accent]ハイスコアを記録! -load.sound = Sounds -load.map = Maps -load.image = Images -load.content = Content -load.system = System +highscore = [accent]ハイスコアを更新! + +load.sound = サウンド +load.map = マップ +load.image = 画像 +load.content = コンテンツ +load.system = システム + stat.wave = 防衛したウェーブ:[accent] {0} stat.enemiesDestroyed = 敵による破壊数:[accent] {0} stat.built = 建設した建造物数:[accent] {0} @@ -28,6 +30,7 @@ stat.destroyed = 破壊した建造物数:[accent] {0} stat.deconstructed = 解体した建造物数:[accent] {0} stat.delivered = 獲得した資源: stat.rank = 最終ランク: [accent]{0} + launcheditems = [accent]回収したアイテム map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか? level.highscore = ハイスコア: [accent]{0} @@ -39,53 +42,66 @@ nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲 database = コアデーターベース savegame = 保存 loadgame = 読み込む -joingame = 参加 +joingame = マルチプレイ addplayers = プレイヤーを追加/削除 customgame = カスタムプレイ newgame = 新しく始める none = <なし> minimap = ミニマップ close = 閉じる -website = Website +website = ウェブサイト quit = 終了 maps = マップ +maps.browse = マップを閲覧する continue = 続ける -maps.none = [LIGHT_GRAY]マップが見つかりませんでした! +maps.none = [lightgray]マップが見つかりませんでした! +invalid = 無効 +preparingconfig = 設定ファイルを準備中 +preparingcontent = コンテンツを準備中 +uploadingcontent = コンテンツをアップロードしています +uploadingpreviewfile = プレビューファイルをアップロードしています +committingchanges = 変更を適応中 +done = 完了 + about.button = 情報 -name = プレイヤー名: +name = 名前: noname = [accent]プレイヤー名[]を入力してください。 filename = ファイル名: unlocked = 新しい要素をアンロック! completed = [accent]完了 techtree = テックツリー -research.list = [LIGHT_GRAY]調査: -research = 調査 -researched = [LIGHT_GRAY]{0} の調査が完了しました +research.list = [lightgray]研究: +research = 研究 +researched = [lightgray]{0} の研究が完了しました players = {0} 人がオンライン players.single = {0} 人がオンライン server.closing = [accent]サーバーを閉じています... -server.kicked.kick = サーバからキックされました! +server.kicked.kick = あなたはサーバからキックされました! +server.kicked.whitelist = あなたはホワイトリストに追加されていません。 server.kicked.serverClose = サーバーが閉じられました。 -server.kicked.vote = You have been vote-kicked. Goodbye. +server.kicked.vote = あなたはプレイヤーの投票によりサーバーからキックされました。 server.kicked.clientOutdated = 古いクライアントです! ゲームをアップデートしてください! -server.kicked.serverOutdated = 古いサーバーです! ホストに更新してもらってください! -server.kicked.banned = サーバーからブロックされています。 -server.kicked.typeMismatch = This server is not compatible with your build type. -server.kicked.recentKick = 直前にキックされています。\nもう一度接続できるまでお待ちください。 +server.kicked.serverOutdated = 古いサーバーです! サーバーをアップデートしてください! +server.kicked.banned = サーバーからBanされています。 +server.kicked.typeMismatch = このサーバーはあなたのゲームと互換性がありません。 +server.kicked.playerLimit = このサーバーは満員です。 +server.kicked.recentKick = あなたはこのサーバーからキックされたため、\n一定時間接続できません。 server.kicked.nameInUse = このサーバーでは、\nすでに同じ名前が使用されています。 server.kicked.nameEmpty = 無効な名前です。 server.kicked.idInUse = すでにサーバーに参加しています! 二つのアカウントでの同時接続は許可されていません。 server.kicked.customClient = このサーバーはカスタムビルドをサポートしていません。公式版をダウンロードしてください。 server.kicked.gameover = ゲームオーバー! -server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[] -host.info = [accent]ホスト[]をすると、ポート[scarlet]6567[]でサーバーが開かれまます。\n同じ[LIGHT_GRAY]WiFiやローカル上のネットワークなど[]ではサーバーリストに表示されるようになります。\n\nIPアドレスで他のところからも接続できるようにするには、[accent]ポート開放[]が必要です。\n\n注意: もしLAN上のゲームに参加できない場合、Mindustryがファイアーウォールの設定でローカルネットワークへの接続が許可されているかを確認してください。 -join.info = ここでは、[accent]サーバーのIPアドレス[]から接続したり、[accent]ローカル上[]のサーバーを探したりすることができます。\nLANやWAN上の両方のマルチプレイに対応しています。\n\n[LIGHT_GRAY]注意: 世界中のサーバーの一覧ではありません。他人のサーバーにIPアドレスで接続したい場合は、あらかじめホスト側にIPアドレスをお尋ねください。 +server.versions = あなたのバージョン:[accent] {0}[]\nサーバーのバージョン:[accent] {1}[] +host.info = [accent]ホスト[]をすると、ポート[scarlet]6567[]でサーバーが開かれまます。\n同じ[lightgray]WiFiやローカル上のネットワークなど[]ではサーバーリストに表示されるようになります。\n\nIPアドレスで他のところからも接続できるようにするには、[accent]ポート開放[]が必要です。\n\n注意: もしLAN上のゲームに参加できない場合、Mindustryがファイアーウォールの設定でローカルネットワークへの接続が許可されているかを確認してください。 +join.info = ここでは、[accent]サーバーのIPアドレス[]から接続したり、[accent]ローカル上[]のサーバーを探したりすることができます。\nLANやWAN上の両方のマルチプレイに対応しています。\n\n[lightgray]注意: 世界中のサーバーの一覧ではありません。他人のサーバーにIPアドレスで接続したい場合は、あらかじめホスト側にIPアドレスをお尋ねください。 hostserver = ホスト +invitefriends = 友達を招待する hostserver.mobile = ホスト host = ホスト hosting = [accent]サーバーを開いています... hosts.refresh = 更新 hosts.discovering = LAN上のサーバーを探索中 +hosts.discovering.any = サーバーを検索中 server.refreshing = サーバーを更新中 hosts.none = [lightgray]ローカル上のサーバーが見つかりませんでした! host.invalid = [scarlet]ホストに接続できません。 @@ -93,11 +109,11 @@ trace = プレイヤーの記録 trace.playername = プレイヤー名: [accent]{0} trace.ip = IP: [accent]{0} trace.id = ユニークID: [accent]{0} -trace.mobile = Mobile Client: [accent]{0} +trace.mobile = モバイルクライアント: [accent]{0} trace.modclient = カスタムクライアント: [accent]{0} invalidid = 無効なクライアントIDです! バグ報告してください。 -server.bans = ブロック -server.bans.none = ブロックされたプレイヤーは見つかりませんでした! +server.bans = Ban +server.bans.none = Banされたプレイヤーは見つかりませんでした! server.admins = 管理者 server.admins.none = 管理者はいません! server.add = サーバーを追加 @@ -107,27 +123,31 @@ server.outdated = [crimson]古いサーバーです![] server.outdated.client = [crimson]古いクライアントです![] server.version = [lightgray]バージョン: {0} {1} server.custombuild = [yellow]カスタムビルド -confirmban = このプレイヤーをブロックしてもよろしいですか? +confirmban = このプレイヤーをBanしてもよろしいですか? confirmkick = このプレイヤーをキックしてもよろしいですか? -confirmunban = このプレイヤーのブロックを解除してもよろしいですか? +confirmunban = このプレイヤーのBanを解除してもよろしいですか? confirmadmin = このプレイヤーを管理者にしてもよろしいですか? confirmunadmin = このプレイヤーを管理者から削除してもよろしいですか? joingame.title = サーバーに参加 joingame.ip = アドレス: disconnect = 接続が切断されました。 +disconnect.error = 接続にエラーが発生しました。 +disconnect.closed = 接続が切断されました。 +disconnect.timeout = タイムアウトしました。 disconnect.data = ワールドデータの読み込みに失敗しました! +cantconnect = ゲームに参加できませんでした。 ([accent]{0}[]) connecting = [accent]接続中... connecting.data = [accent]ワールドデータを読み込み中... server.port = ポート: server.addressinuse = アドレスがすでに使用されています! server.invalidport = 無効なポート番号です! server.error = [crimson]サーバーのホストエラー: [accent]{0} -save.old = この古いバージョンのセーブデータは使用することができません。\n\n[LIGHT_GRAY]セーブデータの下位互換性の実装は正式版4.0で行われます。 +save.old = このセーブデータは古いバージョン向けで、今後使用されません。\n\n[lightgray]セーブデータの下位互換性の実装は正式版4.0で行われます。 save.new = 新規保存 save.overwrite = このスロットに上書きしてもよろしいですか? overwrite = 上書き -save.none = セーブデータがに見つかりませんでした! -saveload = [accent]セーブ中... +save.none = セーブデータが見つかりませんでした! +saveload = 保存中... savefail = ゲームの保存に失敗しました! save.delete.confirm = このセーブデータを削除してよろしいですか? save.delete = 削除 @@ -135,11 +155,11 @@ save.export = エクスポート save.import.invalid = [accent]無効なセーブデータです! save.import.fail = [crimson]セーブデータのインポートに失敗しました: [accent]{0} save.export.fail = [crimson]セーブデータのエクスポートに失敗しました: [accent]{0} -save.import = セーブデータを読み込む +save.import = インポート save.newslot = セーブ名: save.rename = 名前を変更 save.rename.text = 新しい名前: -selectslot = セーブデータを選択 +selectslot = セーブデータを選択してください。 slot = [accent]スロット {0} save.corrupted = [accent]セーブファイルが無効、または破損しました!\nゲームのアップデート直後の場合、恐らくセーブデータのフォーマットの変更によるもので、バグではありません。 empty = <空> @@ -148,7 +168,7 @@ off = オフ save.autosave = 自動保存: {0} save.map = マップ: {0} save.wave = ウェーブ {0} -save.difficulty = 難易度: {0} +save.mode = ゲームモード: {0} save.date = 最終保存日時: {0} save.playtime = プレイ時間: {0} warning = 警告 @@ -161,35 +181,40 @@ cancel = キャンセル openlink = リンクを開く copylink = リンクをコピー back = 戻る -data.export = Export Data -data.import = Import Data -data.exported = Data exported. -data.invalid = This isn't valid game data. -data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. -classic.export = Export Classic Data -classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? +data.export = エクスポート +data.import = インポート +data.exported = ゲームデータをエクスポートしました。 +data.invalid = これは有効なゲームデータではありません。 +data.import.confirm = ゲームデータをインポートすると、現在のすべてのデータが削除されます。\n[accent]これは元に戻せません![]\n\nインポートが完了すると、ゲームは終了します。 +classic.export = エクスポート +classic.export.text = [accent]Mindustry[]のメジャーアップデートがあります。\nClassic (v3.5 build 40)のセーブデータ、マップが検出されました。 Mindustry Classic アプリを使って、ホームフォルダーにセーブデータをエクスポートしますか? quit.confirm = 終了してもよろしいですか? -quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] +quit.confirm.tutorial = チュートリアルを終了しますか?\nチュートリアルは [accent]設定->ゲーム->チュートリアル[] から再度受けることができます。 loading = [accent]読み込み中... saving = [accent]保存中... wave = [accent]ウェーブ {0} -wave.waiting = [LIGHT_GRAY]次のウェーブまで {0} 秒 -wave.waveInProgress = [LIGHT_GRAY]ウェーブ進行中 -waiting = [LIGHT_GRAY]待機中... +wave.waiting = [lightgray]次のウェーブまで {0} 秒 +wave.waveInProgress = [lightgray]ウェーブ進行中 +waiting = [lightgray]待機中... waiting.players = プレイヤーを待っています... -wave.enemies = [LIGHT_GRAY]敵は残り {0} 体 -wave.enemy = [LIGHT_GRAY]敵は残り {0} 体 -loadimage = 画像を読み込む -saveimage = 画像を保存 +wave.enemies = [lightgray]敵は残り {0} 体 +wave.enemy = [lightgray]敵は残り {0} 体 +loadimage = イメージを読み込む +saveimage = イメージを保存 unknown = 不明 custom = カスタム builtin = 組み込み map.delete.confirm = マップを削除してもよろしいですか? これは元に戻すことができません! map.random = [accent]ランダムマップ -map.nospawn = このマップにはプレイヤーの出現するコアがありません! エディターで[ROYAL]青い[]コアをマップに追加してください。 -map.nospawn.pvp = このマップにはプレイヤーの敵が出現するコアがありません! エディターで[SCARLET]青以外[]のコアをマップに追加してください。 -map.nospawn.attack = このマップにはプレイヤーを攻撃する敵のコアがありません! エディターから[SCARLET]赤い[]コアを追加してください。 +map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[accent]オレンジ色[]のコアをマップに追加してください。 +map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[SCARLET]オレンジ色ではない[]コアをマップに追加してください。 +map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[SCARLET]赤色[]のコアをマップに追加してください。 map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。 +map.publish.error = マップの公開中にエラーが発生しました: {0} +map.publish.confirm = 本当にこのマップを公開しますか?\n\n[lightgray]公開するためには、ワークショップ利用規約に同意する必要があります。 +eula = Steam EULA +map.publish = マップを公開しました。 +map.publishing = [accent]マップを公開中... editor.brush = ブラシ editor.openin = エディターで開く editor.oregen = 鉱石の生成 @@ -198,10 +223,12 @@ editor.mapinfo = マップ情報 editor.author = 作者: editor.description = 説明: editor.waves = ウェーブ: -editor.rules = Rules: -editor.generation = Generation: -editor.ingame = Edit In-Game -editor.newmap = New Map +editor.rules = ルール: +editor.generation = 生成: +editor.ingame = ゲーム内で編集する +editor.publish.workshop = ワークショップで公開 +editor.newmap = 新しいマップ +workshop = ワークショップ waves.title = ウェーブ waves.remove = 削除 waves.never = <永久> @@ -216,18 +243,20 @@ waves.copy = クリップボードにコピー waves.load = クリップボードから読み込む waves.invalid = クリップボードのウェーブは無効なウェーブです。 waves.copied = ウェーブをコピーしました。 -waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. -editor.default = [LIGHT_GRAY]<デフォルト> +waves.none = 敵が定義されていません。\n空のウェーブレイアウトはデフォルトのレイアウトに自動的に置き換えられます。 +editor.default = [lightgray]<デフォルト> +details = 詳細... edit = 編集... editor.name = 名前: -editor.spawn = Spawn Unit -editor.removeunit = Remove Unit +editor.spawn = ユニットを出す +editor.removeunit = ユニットを消す editor.teams = チーム editor.errorload = ファイルの読み込みエラー:\n[accent]{0} editor.errorsave = ファイルの保存エラー:\n[accent]{0} -editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. -editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. -editor.errorheader = This map file is either not valid or corrupt. +editor.errorimage = これはマップではなく、イメージです。機能することを期待して拡張機能を変更しないでください。\n\n古いマップをインポートする場合は、エディターの '古いマップをインポート' を使ってください。 +editor.errorlegacy = このマップは古いです。今後、古いマップフォーマットはサポートされません。 +editor.errornot = これはマップファイルではありません。 +editor.errorheader = このマップファイルは無効または破損しています。 editor.errorname = マップに名前が設定されていません。 editor.update = 更新 editor.randomize = ランダム @@ -242,16 +271,16 @@ editor.save.overwrite = 組み込みマップを上書きしようとしてい editor.import.exists = [scarlet]インポートできませんでした:[] '{0}' はすでに組み込みマップの名前として存在します! editor.import = インポート... editor.importmap = マップをインポート -editor.importmap.description = すでに存在しているマップを読み込む +editor.importmap.description = マップをインポートする editor.importfile = ファイルをインポート -editor.importfile.description = 外部マップファイルを読み込む -editor.importimage = 古いイメージをインポート -editor.importimage.description = 外部イメージファイルを読み込む +editor.importfile.description = 外部のマップファイルをインポートする +editor.importimage = 古いマップをインポート +editor.importimage.description = 外部のマップイメージファイルをインポートする editor.export = エクスポート... editor.exportfile = ファイルをエクスポート editor.exportfile.description = マップファイルをエクスポートする editor.exportimage = 地形イメージをエクスポート -editor.exportimage.description = イメージファイルをエクスポートする +editor.exportimage.description = マップイメージファイルをエクスポートする editor.loadimage = 地形をインポート editor.saveimage = 地形をエクスポート editor.unsaved = [scarlet]保存されていない変更があります![]\n終了してもよろしいですか? @@ -260,32 +289,34 @@ editor.mapname = マップ名: editor.overwrite = [accent]警告!\nすでに存在するマップを上書きします。 editor.overwrite.confirm = [scarlet]警告![] すでに同じ名前のマップが存在します。上書きしてもよろしいですか? editor.selectmap = 読み込むマップを選択: -toolmode.replace = Replace -toolmode.replace.description = Draws only on solid blocks. -toolmode.replaceall = Replace All -toolmode.replaceall.description = Replace all blocks in map. -toolmode.orthogonal = Orthogonal -toolmode.orthogonal.description = Draws only orthogonal lines. -toolmode.square = Square -toolmode.square.description = Square brush. -toolmode.eraseores = Erase Ores -toolmode.eraseores.description = Erase only ores. -toolmode.fillteams = Fill Teams -toolmode.fillteams.description = Fill teams instead of blocks. -toolmode.drawteams = Draw Teams -toolmode.drawteams.description = Draw teams instead of blocks. -filters.empty = [LIGHT_GRAY]フィルターが設定されていません! 下のボタンからフィルターを追加してください。 + +toolmode.replace = 置きかえ +toolmode.replace.description = 固体ブロックのみに描きます。 +toolmode.replaceall = 全て置きかえ +toolmode.replaceall.description = このマップにあるすべてのブロックを置き換えます。 +toolmode.orthogonal = 直角 +toolmode.orthogonal.description = 直角の線を描きます。 +toolmode.square = 四角形 +toolmode.square.description = 四角形のブラシです。 +toolmode.eraseores = 鉱石消しゴム +toolmode.eraseores.description = 鉱石のみを消します。 +toolmode.fillteams = チームで埋める +toolmode.fillteams.description = ブロックの代わりにチームで埋めます。 +toolmode.drawteams = チームを描く +toolmode.drawteams.description = ブロックの代わりにチームを描きます。 + +filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。 filter.distort = ゆがみ filter.noise = ノイズ -filter.median = Median -filter.oremedian = Ore Median -filter.blend = Blend -filter.defaultores = Default Ores +filter.median = メディアン +filter.oremedian = メディアン (鉱石) +filter.blend = ブレンド +filter.defaultores = デフォルトの鉱石 filter.ore = 鉱石 filter.rivernoise = リバーノイズ -filter.mirror = Mirror -filter.clear = Clear -filter.option.ignore = Ignore +filter.mirror = 反転 +filter.clear = クリアー +filter.option.ignore = 無視 filter.scatter = 分散 filter.terrain = 地形 filter.option.scale = スケール @@ -295,21 +326,22 @@ filter.option.threshold = スレッシュホールド filter.option.circle-scale = サークルスケール filter.option.octaves = オクターブ filter.option.falloff = フォールオフ -filter.option.angle = Angle +filter.option.angle = 角度 filter.option.block = ブロック filter.option.floor = 地面 -filter.option.flooronto = Target Floor +filter.option.flooronto = 対象の地面 filter.option.wall = 壁 filter.option.ore = 鉱石 filter.option.floor2 = 2番目の地面 filter.option.threshold2 = 2番目のスレッシュホールド -filter.option.radius = Radius -filter.option.percentile = Percentile +filter.option.radius = 半径 +filter.option.percentile = パーセンタイル + width = 幅: height = 高さ: menu = メニュー play = プレイ -campaign = Campaign +campaign = 遠征 load = 読み込む save = 保存 fps = FPS: {0} @@ -318,45 +350,49 @@ ping = Ping: {0}ms language.restart = ゲームを再起動後、言語設定が有効になります。 settings = 設定 tutorial = チュートリアル -tutorial.retake = Re-Take Tutorial +tutorial.retake = チュートリアル editor = エディター mapeditor = マップエディター -donate = 寄附 +donate = 寄付 + abandon = 撤退 abandon.text = このゾーンとすべての資源が敵に奪われます。 locked = ロック -complete = [LIGHT_GRAY]達成済み: +complete = [lightgray]達成済み: zone.requirement = ゾーン {1} でウェーブ {0} を達成 -resume = 再開ゾーン:\n[LIGHT_GRAY]{0} -bestwave = [LIGHT_GRAY]最高ウェーブ: {0} -launch = 発射 -launch.title = 発射成功 -launch.next = [LIGHT_GRAY]次の発射は ウェーブ {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = すべての資源がコアに搬入されます。\nもうこの基地には戻ってくることはできません。 -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +resume = 再開ゾーン:\n[lightgray]{0} +bestwave = [lightgray]最高ウェーブ: {0} +launch = < 離脱 > +launch.title = 離脱成功 +launch.next = [lightgray]次は ウェーブ {0} で離脱可能です。 +launch.unable2 = [scarlet]離脱できません。[] +launch.confirm = すべての資源をコアに搬入し、離脱します。\nもうこの基地には戻ってくることはできません。 +launch.skip.confirm = スキップすると、次の離脱可能なウェーブまで離脱できません。 uncover = 開放 -configure = 積荷の設定 -configure.locked = [LIGHT_GRAY]ウェーブ {0} を達成すると積荷を設定できるようになります。 -zone.unlocked = [LIGHT_GRAY]{0} がアンロックされました. +configure = 積み荷の設定 +configure.locked = [lightgray]ウェーブ {0} を達成すると積み荷を設定できるようになります。 +configure.invalid = 値は 0 から {0} の間でなければなりません。 +zone.unlocked = [lightgray]{0} がアンロックされました. zone.requirement.complete = ウェーブ {0} を達成:\n{1} の開放条件を達成しました。 -zone.config.complete = ウェーブ {0} を達成:\n積荷の設定が解除されました。 +zone.config.complete = ウェーブ {0} を達成:\n積み荷の設定が解除されました。 zone.resources = 発見した資源: -zone.objective = [lightgray]Objective: [accent]{0} -zone.objective.survival = Survive -zone.objective.attack = Destroy Enemy Core +zone.objective = [lightgray]目標: [accent]{0} +zone.objective.survival = 生き残る +zone.objective.attack = 敵のコアを破壊する add = 追加... boss.health = ボスのHP -connectfail = [crimson]サーバーへの接続できませんでした:\n\n[accent]{0} + +connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0} error.unreachable = サーバーに到達できません。\nアドレスは正しいですか? error.invalidaddress = 無効なアドレスです。 error.timedout = タイムアウトしました!\nホストがポート開放されているかを確認してください。また、このアドレスは無効なアドレスではありません! -error.mismatch = パケットエラー:\n恐らくクライアント/サーバーのバージョンが一致していません。\nゲームとホストが最新版のMindustryかどうかを確認してください! +error.mismatch = パケットエラー:\n恐らくクライアント/サーバーのバージョンが一致していません。\nゲームとサーバーが最新版のMindustryかどうかを確認してください! error.alreadyconnected = すでに接続されています。 error.mapnotfound = マップファイルが見つかりません! error.io = ネットワークエラーです。 error.any = 不明なネットワークエラーです。 -error.bloom = Failed to initialize bloom.\nYour device may not support it. +error.bloom = Bloomの初期化に失敗しました。\n恐らくあなたのデバイスではBloomがサポートされていません。 + zone.groundZero.name = グラウンド · ゼロ zone.desertWastes.name = デザート · ウェーツ zone.craters.name = ザ · クレーター @@ -367,15 +403,16 @@ zone.desolateRift.name = ディサレット · リフト zone.nuclearComplex.name = ニュークリア · プロダクション · コンプレックス zone.overgrowth.name = オーバーグロウス zone.tarFields.name = ター · フィールズ -zone.saltFlats.name = Salt Flats -zone.impact0078.name = Impact 0078 -zone.crags.name = Crags -zone.fungalPass.name = Fungal Pass -zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.name = ソルト · フラッツ +zone.impact0078.name = インパクト 0078 +zone.crags.name = クラーグス +zone.fungalPass.name = ファングル ・ パス + +zone.groundZero.description = Mindustryに慣れていない初心者向けのマップです。敵は強くなく、資源も多すぎません。\n出来るだけ多くの銅と鉛を集めるのがポイントです。 +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\n電力を使用してみましょう。火力発電機を建設し、修復機の使い方を学びましょう。 +zone.desertWastes.description = 大量の廃棄物が散乱し、放棄された建造物が存在します。\nこのマップには石炭が存在します。石炭を燃やして発電したり、グラファイトを生成しましょう。\n\n[lightgray]この着陸位置は保証できません。 zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.craters.description = このクレーターには、古い戦争の遺物である水が溜まっています。マップを開拓し、砂を集めましょう。メタガラスを生成して、水をポンプで吸い上げ、タレットやドリルを冷却しましょう。 zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. @@ -385,8 +422,9 @@ zone.nuclearComplex.description = A former facility for the production and proce zone.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. zone.impact0078.description = zone.crags.description = + settings.language = 言語 -settings.data = Game Data +settings.data = ゲームデータ settings.reset = デフォルトにリセット settings.rebind = 再設定 settings.controls = コントロール @@ -404,14 +442,14 @@ no = いいえ info.title = 情報 error.title = [crimson]エラーが発生しました error.crashtitle = エラーが発生しました -attackpvponly = [scarlet]Only available in Attack/PvP modes +attackpvponly = [scarlet]アタックあるいはPvPモードでのみ有効 blocks.input = 搬入 blocks.output = 搬出 blocks.booster = ブースト -block.unknown = [LIGHT_GRAY]??? +block.unknown = [lightgray]??? blocks.powercapacity = 電力容量 blocks.powershot = 電力/ショット -blocks.damage = Damage +blocks.damage = ダメージ blocks.targetsair = 対空攻撃 blocks.targetsground = 対地攻撃 blocks.itemsmoved = 輸送速度 @@ -434,26 +472,30 @@ blocks.boosteffect = ブースト効果 blocks.maxunits = 最大ユニット数 blocks.health = 耐久値 blocks.buildtime = 建設時間 +blocks.buildcost = 建設費用 blocks.inaccuracy = 精度のずれ blocks.shots = ショット blocks.reload = ショット/秒 blocks.ammo = 弾薬 -bar.drilltierreq = Better Drill Required + +bar.drilltierreq = より良いドリルが必要です bar.drillspeed = 採掘速度: {0}/秒 bar.efficiency = 効率: {0}% bar.powerbalance = 電力: {0}/秒 bar.poweramount = 電力: {0} bar.poweroutput = 電力発電量: {0} bar.items = アイテム: {0} +bar.capacity = 容量: {0} bar.liquid = 液体 bar.heat = 熱 bar.power = 電力 bar.progress = 建設状況 bar.spawned = ユニット数: {0}/{1} + bullet.damage = [stat]{0}[lightgray] ダメージ bullet.splashdamage = [stat]{0}[lightgray] 範囲ダメージ 約[stat] {1}[lightgray] タイル bullet.incendiary = [stat]焼夷弾 -bullet.homing = [stat]ホーミング +bullet.homing = [stat]ホーミング弾 bullet.shock = [stat]電撃 bullet.frag = [stat]爆発弾 bullet.knockback = [stat]{0}[lightgray] ノックバック @@ -461,6 +503,7 @@ bullet.freezing = [stat]フリーズ bullet.tarred = [stat]タール弾 bullet.multiplier = [stat]弾薬 {0}[lightgray]倍 bullet.reload = [stat]リロード速度 {0}[lightgray]倍 + unit.blocks = ブロック unit.powersecond = 電力/秒 unit.liquidsecond = 液体/秒 @@ -482,17 +525,17 @@ category.shooting = ショット category.optional = 強化オプション setting.landscape.name = 横画面で固定 setting.shadows.name = 影 -setting.linear.name = Linear Filtering +setting.linear.name = リニアフィルター setting.animatedwater.name = 水のアニメーション setting.animatedshields.name = シールドのアニメーション -setting.antialias.name = アンチエイリアス[LIGHT_GRAY] (再起動が必要)[] +setting.antialias.name = アンチエイリアス[lightgray] (再起動が必要)[] setting.indicators.name = 敵/味方の方角表示 setting.autotarget.name = オートターゲット -setting.keyboard.name = Mouse+Keyboard Controls +setting.keyboard.name = マウスとキーボード操作 setting.fpscap.name = 最大FPS setting.fpscap.none = なし setting.fpscap.text = {0} FPS -setting.uiscale.name = UI Scaling[lightgray] (require restart)[] +setting.uiscale.name = UIサイズ[lightgray] (再起動が必要)[] setting.swapdiagonal.name = 常に斜め設置 setting.difficulty.training = トレーニング setting.difficulty.easy = イージー @@ -506,26 +549,27 @@ setting.sensitivity.name = 操作感度 setting.saveinterval.name = 自動保存間隔 setting.seconds = {0} 秒 setting.fullscreen.name = フルスクリーン -setting.borderlesswindow.name = Borderless Window[LIGHT_GRAY] (may require restart) +setting.borderlesswindow.name = 境界の無いウィンドウ[lightgray] (再起動が必要になる場合があります) setting.fps.name = FPSを表示 setting.vsync.name = VSync setting.lasers.name = 電力線を表示 -setting.pixelate.name = ピクセル化 [LIGHT_GRAY](パフォーマンスが低下する可能性があります) +setting.pixelate.name = ピクセル化[lightgray] (アニメーションが無効化されます) setting.minimap.name = ミニマップを表示 setting.musicvol.name = 音楽 音量 -setting.ambientvol.name = Ambient Volume +setting.ambientvol.name = 環境音 音量 setting.mutemusic.name = 音楽をミュート setting.sfxvol.name = 効果音 音量 setting.mutesound.name = 効果音をミュート setting.crashreport.name = 匿名でクラッシュレポートを送信する -setting.savecreate.name = Auto-Create Saves +setting.savecreate.name = 自動保存 +setting.publichost.name = 誰でもゲームに参加できるようにする setting.chatopacity.name = チャットの透明度 setting.playerchat.name = ゲーム内にチャットを表示 -uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... -uiscale.cancel = Cancel & Exit +uiscale.reset = UIサイズが変更されました。\nこのままでよければ「OK」を押してください。\n[scarlet][accent]{0}[] 秒で元の設定に戻ります... +uiscale.cancel = キャンセル & 終了 setting.bloom.name = Bloom keybind.title = キーバインドを再設定 -keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. +keybinds.mobile = [scarlet]モバイルでは多くのキーバインドが機能しません。基本的な動きのみがサポートされています。 category.general.name = 一般 category.view.name = 表示 category.multiplayer.name = マルチプレイ @@ -539,7 +583,7 @@ keybind.press.axis = 軸またはキーを押してください... keybind.screenshot.name = スクリーンショット keybind.move_x.name = 左右移動 keybind.move_y.name = 上下移動 -keybind.fullscreen.name = Toggle Fullscreen +keybind.fullscreen.name = フルスクリーンの切り替え keybind.select.name = 選択/ショット keybind.diagonal_placement.name = 斜め設置 keybind.pick.name = ブロックの選択 @@ -564,32 +608,33 @@ keybind.drop_unit.name = ドロップユニット keybind.zoom_minimap.name = ミニマップのズーム mode.help.title = モード説明 mode.survival.name = サバイバル -mode.survival.description = 通常のモードです。 資源も限られる中、自動的にウェーブが進行していきます。 +mode.survival.description = 通常のモードです。 資源も限られる中、自動的にウェーブが進行していきます。\n[gray]プレイするには、マップに敵が出現する必要があります。 mode.sandbox.name = サンドボックス mode.sandbox.description = 無限の資源があり、ウェーブを自由に進行できます。 mode.pvp.name = PvP -mode.pvp.description = エリア内で他のプレイヤーと戦います。 +mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[gray]プレイするには、マップに少なくとも二つの異なる色のコアが必要です。 mode.attack.name = アタック -mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。 +mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。\n[gray]プレイするには、マップに赤色のコアが必要です。 mode.custom = カスタムルール + rules.infiniteresources = 資源の無限化 rules.wavetimer = ウェーブの自動進行 rules.waves = ウェーブ -rules.attack = Attack Mode -rules.enemyCheat = 敵の資源の無限化 +rules.attack = アタックモード +rules.enemyCheat = 敵(赤チーム)の資源の無限化 rules.unitdrops = ユニットの戦利品 rules.unitbuildspeedmultiplier = ユニットの製造速度倍率 rules.unithealthmultiplier = ユニットの体力倍率 rules.playerhealthmultiplier = プレイヤーの体力倍率 rules.playerdamagemultiplier = プレイヤーのダメージ倍率 rules.unitdamagemultiplier = ユニットのダメージ倍率 -rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径: [LIGHT_GRAY] (タイル) -rules.respawntime = 復活までの待機時間:[LIGHT_GRAY] (秒) -rules.wavespacing = ウェーブ間の待機時間:[LIGHT_GRAY] (秒) +rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル) +rules.respawntime = 復活までの待機時間:[lightgray] (秒) +rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒) rules.buildcostmultiplier = 建設コストの倍率 rules.buildspeedmultiplier = 建設速度の倍率 rules.waitForWaveToEnd = 敵が倒されるまでウェーブの進行を中断 -rules.dropzoneradius = 出現範囲の半径:[LIGHT_GRAY] (タイル) +rules.dropzoneradius = 出現範囲の半径:[lightgray] (タイル) rules.respawns = ウェーブごとの最大復活回数 rules.limitedRespawns = 復活回数の制限 rules.title.waves = ウェーブ @@ -598,6 +643,7 @@ rules.title.resourcesbuilding = 資源 & 建設 rules.title.player = プレイヤー rules.title.enemy = 敵 rules.title.unit = ユニット + content.item.name = アイテム content.liquid.name = 液体 content.unit.name = ユニット @@ -644,22 +690,23 @@ mech.trident-ship.name = トライデント mech.trident-ship.weapon = 爆弾 mech.glaive-ship.name = グライブ mech.glaive-ship.weapon = 焼夷弾 -item.explosiveness = [LIGHT_GRAY]爆発性: {0}% -item.flammability = [LIGHT_GRAY]可燃性: {0}% -item.radioactivity = [LIGHT_GRAY]放射能: {0}% -unit.health = [LIGHT_GRAY]耐久値: {0} -unit.speed = [LIGHT_GRAY]速度: {0} -mech.weapon = [LIGHT_GRAY]武器: {0} -mech.health = [LIGHT_GRAY]体力: {0} -mech.itemcapacity = [LIGHT_GRAY]アイテム容量: {0} -mech.minespeed = [LIGHT_GRAY]採掘速度: {0} -mech.minepower = [LIGHT_GRAY]採掘性能: {0} -mech.ability = [LIGHT_GRAY]能力: {0} -mech.buildspeed = [LIGHT_GRAY]建設速度: {0}% -liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0} -liquid.viscosity = [LIGHT_GRAY]粘度: {0} -liquid.temperature = [LIGHT_GRAY]温度: {0} -block.sand-boulder.name = Sand Boulder +item.explosiveness = [lightgray]爆発性: {0}% +item.flammability = [lightgray]可燃性: {0}% +item.radioactivity = [lightgray]放射能: {0}% +unit.health = [lightgray]耐久値: {0} +unit.speed = [lightgray]速度: {0} +mech.weapon = [lightgray]武器: {0} +mech.health = [lightgray]体力: {0} +mech.itemcapacity = [lightgray]アイテム容量: {0} +mech.minespeed = [lightgray]採掘速度: {0} +mech.minepower = [lightgray]採掘性能: {0} +mech.ability = [lightgray]能力: {0} +mech.buildspeed = [lightgray]建設速度: {0}% +liquid.heatcapacity = [lightgray]熱容量: {0} +liquid.viscosity = [lightgray]粘度: {0} +liquid.temperature = [lightgray]温度: {0} + +block.sand-boulder.name = 巨大な礫 block.grass.name = 草 block.salt.name = 岩塩氷河 block.saltrocks.name = 岩塩 @@ -670,7 +717,7 @@ block.spore-pine.name = 胞子の松の木 block.sporerocks.name = 胞子の岩 block.rock.name = 岩 block.snowrock.name = 雪の積もった岩 -block.snow-pine.name = Snow Pine +block.snow-pine.name = 松の木 block.shale.name = 泥板岩 block.shale-boulder.name = 泥板岩の丸石 block.moss.name = コケ @@ -685,7 +732,7 @@ block.thruster.name = スラスター block.kiln.name = 溶解炉 block.graphite-press.name = 黒鉛圧縮機 block.multi-press.name = マルチ圧縮機 -block.constructing = {0}\n[LIGHT_GRAY](建設中) +block.constructing = {0}\n[lightgray](建設中) block.spawn.name = 敵の出現場所 block.core-shard.name = コア: シャード block.core-foundation.name = コア: ファンデーション @@ -714,7 +761,7 @@ block.pine.name = 松の木 block.white-tree-dead.name = 白い枯れた樹木 block.white-tree.name = 白い樹木 block.spore-cluster.name = 胞子の房 -block.metal-floor.name = 金属製の地面 +block.metal-floor.name = 金属製の地面 1 block.metal-floor-2.name = 金属製の地面 2 block.metal-floor-3.name = 金属製の地面 3 block.metal-floor-5.name = 金属製の地面 5 @@ -728,7 +775,7 @@ block.dark-panel-6.name = ダークパネル 6 block.dark-metal.name = ダークメタル block.ignarock.name = イグナロック block.hotrock.name = ホットロック -block.magmarock.name = マグマロック +block.magmarock.name = マグマの岩 block.cliffs.name = 崖 block.copper-wall.name = 銅の壁 block.copper-wall-large.name = 巨大な銅の壁 @@ -775,13 +822,13 @@ block.pneumatic-drill.name = 空気圧ドリル block.laser-drill.name = レーザードリル block.water-extractor.name = ウォーターポンプ block.cultivator.name = 培養機 -block.dart-mech-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.dart-mech-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.item-source.name = アイテムソース @@ -803,8 +850,8 @@ block.blast-mixer.name = 化合物ミキサー block.solar-panel.name = ソーラーパネル block.solar-panel-large.name = 大型ソーラーパネル block.oil-extractor.name = 石油抽出機 -block.command-center.name = Command Center -block.draug-factory.name = Draug Miner Drone Factory +block.command-center.name = 司令塔 +block.draug-factory.name = マイナードローン製造機 block.spirit-factory.name = スピリットドローン製造機 block.phantom-factory.name = ファントムドローン製造機 block.wraith-factory.name = レースファイター製造機 @@ -830,8 +877,8 @@ block.thermal-generator.name = サーマル発電機 block.alloy-smelter.name = 合金溶鉱炉 block.mender.name = 修復機 block.mend-projector.name = 修復プロジェクター -block.surge-wall.name = サージの壁 -block.surge-wall-large.name = 大きなサージの壁 +block.surge-wall.name = サージ合金の壁 +block.surge-wall-large.name = 大きなサージ合金の壁 block.cyclone.name = サイクロン block.fuse.name = ヒューズ block.shock-mine.name = 地雷 @@ -845,14 +892,14 @@ block.container.name = コンテナー block.launch-pad.name = 発射台 block.launch-pad-large.name = 大型発射台 team.blue.name = ブルー -team.crux.name = red -team.sharded.name = orange +team.crux.name = レッド +team.sharded.name = オレンジ team.orange.name = オレンジ team.derelict.name = derelict team.green.name = グリーン team.purple.name = パープル unit.spirit.name = スピリットドローン -unit.draug.name = Draug Miner Drone +unit.draug.name = マイナードローン unit.phantom.name = ファントムドローン unit.dagger.name = ダガー unit.crawler.name = クローラー @@ -866,30 +913,30 @@ unit.chaos-array.name = ケアスアレー unit.eradicator.name = エラディケーター unit.lich.name = リッチ unit.reaper.name = リーパー -tutorial.next = [lightgray] -tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.drill = 手動で採掘するのは非効率的です。\n[accent]ドリル[]を使えば自動で採掘できます。\n銅鉱石の鉱脈の上に1つ置いてみましょう。 -tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. -tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[] -tutorial.conveyor = [accent]コンベアー[]はコアにアイテムを輸送することができます。\nドリルからコアまでコンベアー作りましょう。 -tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered -tutorial.turret = [LIGHT_GRAY]敵[]を撃退するために防衛体制を作らなければなりません。\n基地の近くにターレットのデュオを設置しましょう。 -tutorial.drillturret = デュオには弾として[accent]銅の弾薬[]が必要です。\nデュオの横にドリルを置き、採掘した銅を供給しましょう。 -tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause. -tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause. -tutorial.unpause = Now press space again to unpause. -tutorial.unpause.mobile = Now press it again to unpause. -tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. -tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. -tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[] -tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[] -tutorial.waves = [LIGHT_GRAY]敵[]が近づいてきます。\n\n2ウェーブの間、コアを守ってください。ターレットをもっと設置しましょう。 -tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper. -tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button. +tutorial.next = [lightgray]<タップして続ける> +tutorial.intro = [scarlet]Mindustry チュートリアル[]へようこそ。\nまずは、コアの近くにある銅鉱石をタップして、[accent]銅を採掘[]してみましょう。\n\n[accent]銅: {0}/{1} +tutorial.drill = 手動で採掘するのは非効率的です。\n[accent]ドリル[]を使えば自動で採掘できます。\n右下にあるドリルのタブをクリックして、\n[accent]機械ドリル[]を選択して、銅鉱脈に設置してみましょう。\n[accent]右クリック[]で建設を止めることができ、[accent]Ctrlキーを押しながらスクロール[]することで、ズームができます。 +tutorial.drill.mobile = 手動で採掘するのは非効率的です。\n[accent]ドリル[]を使えば自動で採掘できます。\n右下にあるドリルのタブをタップして、\n[accent]機械ドリル[]を選択しましょう。\nタップでドリルを銅鉱脈に配置したら、下にある[accent]チェックマーク[]を押すことで、建設が開始されます。\n[accent]X ボタン[]で建設をキャンセルできます。 +tutorial.blockinfo = それぞれのブロックには異なる性質があります。特定のドリルでしか採掘できない鉱石もあります。\nブロックの情報や性質を知りたかったら、[accent]ビルドメニューにある "?" ボタンを押してください。[]\n\n[accent]機械ドリルの性質を見てみましょう。[] +tutorial.conveyor = [accent]コンベアー[]はアイテムをコアに輸送することができます。\nドリルからコアまでコンベアー作りましょう。\n[accent]マウスをクリックしながら動かすことで、線を引くことができます。[]\n[accent]Ctrlキー[]を押しながら線を引くと、斜めに線が引けます。\n\n[accent]ラインツールで2つのコンベアーを設置し、コアまでアイテムを輸送してみましょう。 +tutorial.conveyor.mobile = [accent]コンベアー[]はアイテムをコアに輸送することができます。\nドリルからコアまでコンベアー作りましょう。\n[accent]指を数秒間押したまま[]ドラッグすることで、一直線に配置できます。\n\n[accent]ラインツールで2つのコンベアーを設置し、コアまでアイテムを輸送してみましょう。 +tutorial.turret = コアに搬入されたアイテムは、建物の建設に利用することができます。\n全てのアイテムが建設に利用できるわけではないことに注意してください。\n[accent]石炭[]や[accent]スクラップ[]のような建設に利用できないアイテムは、コアに搬入することはできません。\n[lightgray]敵[]を撃退するためには、防衛体制を整えなければなりません。\nあなたの拠点の近くに[accent]デュオ[]を設置してみましょう。 +tutorial.drillturret = デュオには弾として[accent]銅の弾薬[]が必要です。\nデュオの近くにドリルを設置し、採掘した銅をコンベアーで供給してみましょう。\n\n[accent]弾薬: 0/1 +tutorial.pause = バトル中、[accent]ゲームを一時停止[]することができます。\n一時停止中、建物の建設はキューに追加されます。\n\n[accent]スペースキーで一時停止してみましょう。 +tutorial.pause.mobile = バトル中、[accent]ゲームを一時停止[]することができます。\n一時停止中、建物の建設はキューに追加されます。\n\n[accent]左上のボタンを押して、一時停止をしてみましょう。 +tutorial.unpause = もう一度スペースキーを押して、ゲームを再開しましょう。 +tutorial.unpause.mobile = もう一度ボタンを押して、ゲームを再開しましょう。 +tutorial.breaking = ブロックを破壊したい時があるかもしれません。\n[accent]右クリックを押したまま[]範囲を選択することで、範囲内のすべてのブロックが破壊されます。\n\n[accent]コアの近くにあるスクラップブロックを、右クリックで選択して破壊してみましょう。 +tutorial.breaking.mobile = ブロックを破壊したい時があるかもしれません。\n[accent]破壊モードを選択[]して、破壊したいブロックをタップで選択します。\n[accent]指を数秒間押したまま[]ドラッグすることで、破壊する範囲を選択できます。\nチェックマークのボタンを押して、破壊します。\n\n[accent]コアの左側にあるスクラップブロックを選択して、破壊してみましょう。 +tutorial.withdraw = 状況によっては、ブロックから直接アイテムを取り出す必要があります。\nブロックからアイテムを取り出すには、取り出したいアイテムが入っている[accent]ブロックをタップ[]して、インベントリの中にある[accent]アイテムをタップ[]します。\n[accent]長押しする[]ことで、複数個のアイテムを引き出すことができます。\n\n[accent]コアからいくつかの銅を取り出してみましょう。[] +tutorial.deposit = 機体にあるアイテムをドラッグアンドドロップで、ブロックへ移動させることができます。\n\n[accent]コアから取り出した銅をコアに戻してみましょう。[] +tutorial.waves = [lightgray]敵[]がやってきます。\n\n2ウェーブの間コアを守ってみましょう。[accent]クリック[]で弾を発射することができます。\nさらにドリルやデュオを設置しましょう。さらに銅を採掘しましょう。 +tutorial.waves.mobile = [lightgray]敵[]がやってきます。\n\n2ウェーブの間コアを守ってみましょう。あなたの機体は自動で敵を攻撃してくれます。\nさらにドリルやデュオを設置しましょう。さらに銅を採掘しましょう。 +tutorial.launch = 離脱可能なウェーブに達すると、[accent]コアにある全ての資源を持って[]、マップから[accent]離脱する[]ことができます。\nこれらの資源は、新しい技術の研究に使用することができます。\n\n[accent]離脱ボタンを押しましょう。 item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。 item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。 -item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.graphite.description = 弾薬や絶縁体として利用されています。 item.sand.description = 合金や融剤など広く使用されている一般的な材料です。 item.coal.description = 一般的で有用な燃料です。 item.titanium.description = 希少で非常に軽量な金属です。液体輸送やドリル、航空機などで使われます。 @@ -903,10 +950,10 @@ item.spore-pod.description = 石油や爆薬、燃料への転換として使用 item.blast-compound.description = 爆弾や爆発物に使われる揮発性の化合物です。燃料として燃やすこともできますが、お勧めしません。 item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。 liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。 -liquid.slag.description = Various different types of molten metal mixed together. Can be separated into its constituent minerals, or sprayed at enemy units as a weapon. +liquid.slag.description = 様々な種類の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。 liquid.oil.description = 燃焼させたり、爆発させたり、冷却水としても使用される液体です。 liquid.cryofluid.description = 冷却に特化した液体です。 -mech.alpha-mech.description = 一般的な機体です。十分な速度と攻撃性能です。 +mech.alpha-mech.description = 一般的な機体です。十分な速度と攻撃性能を持っています。 mech.delta-mech.description = 突撃攻撃が可能な素早く軽量化された機体です。建造物にはダメージをほとんど与えられませんが、電撃によって多くの敵に攻撃することができます。 mech.tau-mech.description = 支援型機体です。攻撃を受けた味方のブロックを修復します。修復能力によって周辺の味方を修復します。 mech.omega-mech.description = 最前線での攻撃向けに作られた大型機体です。特殊装甲によってダメージの90%を防ぐことができます。 @@ -914,19 +961,19 @@ mech.dart-ship.description = 一般的な機体です。軽く高速で使いや mech.javelin-ship.description = 突撃攻撃型の機体です。最初の速度は遅いですが、敵基地が近づくと飛行能力が飛躍的に高まり、電撃やミサイルで大きなダメージを与えることができます。 mech.trident-ship.description = 強力な爆撃機です。強固な装甲を有しています。 mech.glaive-ship.description = 重武装された大型攻撃機です。焼夷弾が装備され、機体の中でも優れた加速と最高速度を有しています。 -unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.draug.description = 基本的なマイニングドローンです。生産コストが低く、消耗品です。近くの銅と鉛を自動で採掘して、近くのコアへ輸送します。 unit.spirit.description = 手軽なドローンユニットです。最初からコアに出現します。鉱石の採掘やブロックの修理を自動で行います。 unit.phantom.description = 高度な小型ドローンユニットです。自動で鉱石の採掘やブロックの修理をします。スピリットドローンを遥かに凌ぐ性能を誇ります。 unit.dagger.description = 基本的な地上ユニットです。集団になると便利に使えます。 -unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.crawler.description = 自爆型の地上ユニットです。特に耐久性はなく、敵と接触すると爆発します。 unit.titan.description = 高度な武装地上ユニットです。空と地上の両方の敵に攻撃を行います。 unit.fortress.description = 砲撃型の地上ユニットです。 -unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.eruptor.description = 建造物を破壊することに特化したユニットです。スラグの弾を発射し、建造物を溶かしたり、発火性の高い物質を燃やします。 unit.wraith.description = 高速で突撃攻撃が可能な迎撃ユニットです。 -unit.ghoul.description = 重爆撃機です。 -unit.revenant.description = A heavy, hovering missile array. -block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite. -block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently. +unit.ghoul.description = 重爆撃機です。敵の重要な建造物を優先して破壊します。 +unit.revenant.description = 空中からミサイルを発射する重爆撃機です。 +block.graphite-press.description = 石炭を圧縮し、黒鉛を生成します。 +block.multi-press.description = 黒鉛圧縮機のアップグレード版です。水と電力を使用して、より効率的に石炭を圧縮します。 block.silicon-smelter.description = 石炭と砂からシリコンを製造します。 block.kiln.description = 砂と鉛を溶かしてメタガラスを生成します。少量の電力が必要です。 block.plastanium-compressor.description = オイルとチタンからプラスタニウムを製造します。 @@ -939,17 +986,17 @@ block.melter.description = 石を熱で溶かして溶岩を生成します。 block.separator.description = 石を水圧で砕き、石に含まれる様々な鉱石を回収します。 block.spore-press.description = 胞子ポッドを石油に圧縮します。 block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。 -block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.coal-centrifuge.description = 石油を石炭へ加工します。 block.incinerator.description = 不要なアイテムや液体を焼却します。 -block.power-void.description = 入力されたすべての電力を破棄します。サンドボックスのみ。 -block.power-source.description = 無限に電力を出力します。サンドボックスのみ。 -block.item-source.description = アイテムを無限に搬出します。サンドボックスのみ。 -block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスのみ。 -block.liquid-source.description = 液体を無限に搬出します。サンドボックスのみ。 +block.power-void.description = 入力されたすべての電力を破棄します。サンドボックスモードのみ使用できます。 +block.power-source.description = 無限に電力を出力します。サンドボックスモードのみ使用できます。 +block.item-source.description = アイテムを無限に搬出します。サンドボックスモードのみ使用できます。 +block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスモードのみ使用できます。 +block.liquid-source.description = 液体を無限に搬出します。サンドボックスモードのみ使用できます。 block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 -block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies. -block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles. +block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。 +block.titanium-wall-large.description = 適度に強力な大型防壁ブロックです。\n中程度の攻撃から保護します。 block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。 block.thorium-wall-large.description = 強化された大型防壁ブロックです。\n敵からの保護により強固です。 block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。 @@ -958,8 +1005,8 @@ block.surge-wall.description = 最も硬い防壁ブロックです。\nたま block.surge-wall-large.description = 最も硬い大型防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。 block.door.description = 小さなドアブロックです。タップすることで開閉することができます。\nただし、ドアが開いている場合、弾や敵も通過できます。 block.door-large.description = 大型のドアブロックです。タップすることで開閉することができます。\nただし、ドアが開いている場合、弾や敵も通過できます。 -block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency. -block.mend-projector.description = 定期的に周辺のブロックを修復します。 +block.mender.description = 定期的に周囲のブロックを修復します。ウェーブの間も修復し続けます。\nオプションでシリコンを利用して、さらに効率的に修復が出来ます。 +block.mend-projector.description = 修復期のアップグレード版です。定期的に周辺のブロックを修復します。\nオプションでフェーズファイバーを利用して、さらに効率的に修復が出来ます。 block.overdrive-projector.description = ドリルやコンベアなど、近くの施設の効率を向上させます。 block.force-projector.description = 周囲に六角形の力場を作り出し、内部の建造物やユニットなどを守ります。 block.shock-mine.description = 踏んだ敵にダメージを与えます。敵に見えることはありません。 @@ -985,18 +1032,18 @@ block.bridge-conduit.description = 高度な液体輸送ブロックです。地 block.phase-conduit.description = 高度な液体輸送ブロックです。電力を使用して、液体を他の離れたフェーズパイプに転送することができます。 block.power-node.description = 電力ノード間で電力の送電を行います。最大で4つの電力源やノードなどに接続できます。隣接するブロックから電力の送電や供給を行います。 block.power-node-large.description = 巨大な電力ノードです。最大で6つの電力源やノードに接続できます。 -block.surge-tower.description = An extremely long-range power node with fewer available connections. +block.surge-tower.description = 接続できる量は少ないが、とても長い距離を接続できる電力ノードです。 block.battery.description = 余分な電力の充電して、貯めておくことができます。必要があれば、溜まった電力を供給します。 block.battery-large.description = 通常のバッテリーよりもたくさんの電力を溜めておくことができます。 block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。 block.thermal-generator.description = 溶岩から大量の電力を発電します。 block.turbine-generator.description = 水を使って火力発電機より効率的に発電します。 -block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.differential-generator.description = 体力の電力を生成します。冷却水と燃焼したピラタイトの温度差を利用します。 block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。 block.solar-panel.description = 太陽光から少量の電力を発電します。 block.solar-panel-large.description = 高価な建設費と引き換えに、通常のソーラーパネルより大量の電力を発電することができます。 block.thorium-reactor.description = 高い放射性を持ったトリウムから大量の電力を発電します。これには一定の冷却が必要です。冷却が不十分な場合、大きな爆発が発生します。 -block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. +block.impact-reactor.description = 高度な発電機です。最大効率で大量の電力を発電できます。発電を開始するには、かなりの電力が必要です。 block.mechanical-drill.description = 安価なドリルです。採掘可能な鉱脈に設置すると、アイテムを採掘して搬出します。 block.pneumatic-drill.description = より速く採掘できるように改良されたドリルです。また、より硬い鉱石も採掘することができます。 block.laser-drill.description = 電力を使用したレーザー技術でより速く採掘することができます。また、放射性のトリウムを回収することができます。 @@ -1004,17 +1051,17 @@ block.blast-drill.description = 上位のドリルです。大量の電力が必 block.water-extractor.description = 地面から水を汲み上げます。近くに湖がない場合に有用です。 block.cultivator.description = 胞子の小さな集まりを工業用ポッドに培養します。 block.oil-extractor.description = 大量の電力を使用して、砂から石油を回収します。近くに油田がない場合に有用です。 -block.core-shard.description = The first iteration of the core capsule. Once destroyed, all contact to the region is lost. Do not let this happen. -block.core-foundation.description = The second version of the core. Better armored. Stores more resources. -block.core-nucleus.description = The third and final iteration of the core capsule. Extremely well armored. Stores massive amounts of resources. -block.vault.description = 各種類のアイテムを大量に保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。[LIGHT_GRAY]搬出機[]を使って、ボールトからアイテムを搬出できます。 -block.container.description = 各種類のアイテムを少量ずつ保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。 [LIGHT_GRAY]搬出機[]を使って、コンテナーからアイテムを搬出できます。 +block.core-shard.description = 基本的なコアです。一度破壊されると、その地域との接続が途絶えます。破壊されないようにしましょう。 +block.core-foundation.description = バージョンアップしたコアです。より堅く、より多くの資源を格納できます。 +block.core-nucleus.description = さらにバージョンアップしたコアです。優れた耐久性と大量の資源を格納できます。 +block.vault.description = 各種類のアイテムを大量に保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。[lightgray]搬出機[]を使って、ボールトからアイテムを搬出できます。 +block.container.description = 各種類のアイテムを少量ずつ保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。 [lightgray]搬出機[]を使って、コンテナーからアイテムを搬出できます。 block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。 -block.launch-pad.description = コアを発射することなく、沢山のアイテムを発射します。まだ未完成だよ。 -block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.launch-pad.description = 離脱することなく、アイテムを回収することができます。 +block.launch-pad-large.description = 発射台の改良版です。より多くのアイテムを、より頻繁に回収します。 block.duo.description = 小さく安価なターレットです。 block.scatter.description = 中規模の対空型ターレットです。敵に鉛またはスクラップの塊を分散するように発射させます。 -block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.scorch.description = 近くの地上の敵を燃やします。近距離だと非常に効果的です。 block.hail.description = 小型の砲撃型ターレットです。 block.wave.description = バブルの連射攻撃をする中型のターレットです。 block.lancer.description = チャージビームを放つ中型のターレットです。 @@ -1026,22 +1073,21 @@ block.ripple.description = 同時に複数ショットを発射する大型タ block.cyclone.description = 大型の連射型ターレットです。 block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。 block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。 -block.command-center.description = Issues movement commands to allied units across the map.\nCauses units to patrol, attack an enemy core or retreat to the core/factory. When no enemy core is present, units will default to patrolling under the attack command. -block.draug-factory.description = Produces Draug mining drones. -block.spirit-factory.description = 鉱石の採掘やブロックの修復を行う小型のドローンユニットのスピリットを製造します。 +block.command-center.description = マップ全体のユニットに移動コマンドを発令します。\nユニットを巡回させたり、敵のコアを攻撃したり、自分のコアあるいは工場に撤退させたりします。敵のコアが存在しない場合、ユニットはデフォルトで攻撃状態の下で巡回します。 +block.draug-factory.description = 鉱石の採掘を行うマイニングドローンを製造します。 +block.spirit-factory.description = ブロックの修復を行う小型のドローンユニットのスピリットを製造します。 block.phantom-factory.description = スピリットドローンの性能を遥かに凌ぐ上位のドローンユニットのファントムドローンを製造します。 block.wraith-factory.description = 高速で突撃攻撃が可能な迎撃ユニットのレースファイターを製造します。 block.ghoul-factory.description = 大型爆撃機のグールを製造します。 block.revenant-factory.description = 大型のレーザー航空ユニットのレベナントを製造します。 block.dagger-factory.description = 基本的な地上ユニットのダガーを製造します。 -block.crawler-factory.description = Produces fast self-destructing swarm units. +block.crawler-factory.description = 高速の自爆型ユニットをのスウォーム製造します。 block.titan-factory.description = 高度な武装地上ユニットのタイタンを製造します。 block.fortress-factory.description = 大型の砲撃地上ユニットのフォートレスを製造します。 block.repair-point.description = 近くの負傷したユニットを修復します。 -block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. -block.delta-mech-pad.description = 機体を高速で突撃攻撃に向いた軽装備の機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.tau-mech-pad.description = 機体を味方の建造物やユニットの修復が可能な支援型機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.omega-mech-pad.description = 機体を最前線での戦闘に向いた重装備の機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.javelin-ship-pad.description = 機体を高速で強力な電撃砲を搭載した迎撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.trident-ship-pad.description = 機体を重装備の爆撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.glaive-ship-pad.description = 機体を重装備の大型攻撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +block.dart-mech-pad.description = 機体を基本的な攻撃性能を備えた機体に乗り換えます。\n整備台に乗ってタップすることで使用できます。 +block.delta-mech-pad.description = 機体を高速で突撃攻撃に向いた軽装備の機体に乗り換えます。\n整備台に乗ってタップすることで使用できます。 +block.tau-mech-pad.description = 機体を味方の建造物やユニットの修復が可能な支援型機体に乗り換えます。\n整備台に乗ってタップすることで使用できます。 +block.javelin-ship-pad.description = 機体を高速で強力な電撃砲を搭載した迎撃機に乗り換えます。\n整備台に乗ってタップすることで使用できます。 +block.trident-ship-pad.description = 機体を重装備の爆撃機に乗り換えます。\n整備台に乗ってタップすることで使用できます。 +block.glaive-ship-pad.description = 機体を重装備の大型攻撃機に乗り換えます。\n整備台に乗ってタップすることで使用できます。 diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 3778f52ee0..2afbba9302 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -1,28 +1,28 @@ -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!) -credits = Creditos +credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] +credits = Créditos contributors = Tradutores e contribuidores discord = Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês) link.discord.description = O discord oficial do Mindustry -link.github.description = Codigo fonte do jogo. +link.github.description = Código fonte do jogo. link.changelog.description = List of update changes -link.dev-builds.description = Desenvolvimentos Instaveis +link.dev-builds.description = Desenvolvimentos Instáveis link.trello.description = Trello Oficial para Updates Planejados link.itch.io.description = Pagina da Itch.io com os Downloads link.google-play.description = Listamento do google play store link.wiki.description = Wiki oficial do Mindustry linkfail = Falha ao abrir o link\nO Url foi copiado screenshot = Screenshot salvo para {0} -screenshot.invalid = Mapa grande demais, Potencialmente sem memoria suficiente para captura. +screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura. gameover = O núcleo foi destruído. gameover.pvp = O time[accent] {0}[] É vitorioso! highscore = [YELLOW]Novo recorde! -load.sound = Sounds -load.map = Maps -load.image = Images -load.content = Content -load.system = System +load.sound = Sons +load.map = Mapas +load.image = Imagens +load.content = Conteúdo +load.system = Sistema stat.wave = Hordas derrotadas:[accent] {0} -stat.enemiesDestroyed = Enimigos Destruídos:[accent] {0} +stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0} stat.built = Construções construídas:[accent] {0} stat.destroyed = Construções destruídas:[accent] {0} stat.deconstructed = Construções desconstruídas:[accent] {0} @@ -66,18 +66,18 @@ players.single = {0} Jogador Ativo server.closing = [accent]Fechando servidor... server.kicked.kick = Voce foi expulso do servidor! server.kicked.serverClose = Servidor Fechado. -server.kicked.vote = You have been vote-kicked. Goodbye. +server.kicked.vote = Você foi expulso desse servidor. Tchau. server.kicked.clientOutdated = Cliente desatualizado! Atualize seu jogo! -server.kicked.serverOutdated = Servidor desatualiado! Peca ao dono para atualizar! -server.kicked.banned = Voce foi banido do servidor. -server.kicked.typeMismatch = This server is not compatible with your build type. +server.kicked.serverOutdated = Servidor desatualiado! Peça ao dono para atualizar! +server.kicked.banned = Você foi banido do servidor. +server.kicked.typeMismatch = Este servidor não é compatível com a sua versão. server.kicked.recentKick = Voce foi banido recentemente.\nEspere para conectar de novo. -server.kicked.nameInUse = Este nome ja esta sendo usado\nneste servidor. -server.kicked.nameEmpty = Voce deve ter pelo menos uma letra ou numero. -server.kicked.idInUse = Voce ja esta neste servidor! Conectar com duas contas não é permitido. +server.kicked.nameInUse = Este nome já esta sendo usado\nneste servidor. +server.kicked.nameEmpty = Voce deve ter pelo menos uma letra ou número. +server.kicked.idInUse = Voce ja está neste servidor! Conectar com duas contas não é permitido. server.kicked.customClient = Este servidor não suporta construções customizadas. Baixe a versão original. server.kicked.gameover = Fim de jogo! -server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[] +server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[] host.info = The [accent]Hospedar[]Botão Hopeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguem esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall join.info = Aqui, Você pode entar em um [accent]IP De servidor[] Para conectar, Ou descobrir [accent]Servidores[] Da rede local.\nAmbos os servidores LAN e WAN São suportados.\n\n[LIGHT_GRAY]Note: Não tem uma lista de servidores automaticos; Se você quer conectar ao IP de alguem, Você precisa pedir o IP Ao Rosteador. hostserver = Hospedar servidor @@ -115,12 +115,12 @@ confirmunadmin = Certeza que quer remover o estatus de adminstrador deste jogado joingame.title = Entrar no jogo joingame.ip = IP: disconnect = Desconectado. -disconnect.data = Falha ao abrir a data do mundo! +disconnect.data = Falha ao abrir os dados do mundo! connecting = [accent]Conectando... -connecting.data = [accent]Carregando data do mundo... +connecting.data = [accent]Carregando dados do mundo... server.port = Porte: server.addressinuse = Senha em uso! -server.invalidport = Numero de port invalido! +server.invalidport = Numero de porta invalido! server.error = [crimson]Erro ao hospedar o servidor: [accent]{0} save.old = Este save é para uma versão antiga do jogo, E não pode ser usado.\n\n[LIGHT_GRAY]Salvar Versões antigas vai ser Implementado Na versão 4.0 completa save.new = Novo Save @@ -161,15 +161,15 @@ cancel = Cancelar openlink = Abrir Link copylink = Copiar link back = Voltar -data.export = Export Data -data.import = Import Data -data.exported = Data exported. -data.invalid = This isn't valid game data. -data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. -classic.export = Export Classic Data +data.export = Exportar Data +data.import = Importar Data +data.exported = Data exportada. +data.invalid = Isso não é daa de jogo válida. +data.import.confirm = Importal data externa irá deletar[scarlet] toda[] sua data atual.\n[accent]Isso não pode ser desfeito![]\n\nQuando sua data é importada, seu jogo ira sair imediatamente. +classic.export = Exportar data classica classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? quit.confirm = Você tem certeza que quer sair? -quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] +quit.confirm.tutorial = Você tem certeza você sabe oque Você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[] loading = [accent]Carregando... saving = [accent]Salvando... wave = [accent]Horda {0} @@ -188,7 +188,7 @@ map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser desf map.random = [accent]Mapa aleatório map.nospawn = Esse mapa não contém um [yellow]núcleo[] para o jogador Nascer! [ROYAL]blue[] Coloque um [yellow]núcleo[] no editor de mapa. map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no editor. -map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. +map.nospawn.attack = Esse mapa não tem nenhum núcleos enimigos para o jogador atacar! coloque[SCARLET] Núcleos[] vermelhos no editor. map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto. editor.brush = Pincel editor.openin = Abrir no Editor @@ -200,8 +200,8 @@ editor.description = Descrição: editor.waves = Ondas: editor.rules = Regras: editor.generation = Generation: -editor.ingame = Editar em-jogo -editor.newmap = New Map +editor.ingame = Editar em jogo +editor.newmap = Novo mapa waves.title = Hordas waves.remove = Remover waves.never = @@ -227,7 +227,7 @@ editor.errorload = Erro carregando arquivo:\n[accent]{0} editor.errorsave = Erro salvando arquivo:\n[accent]{0} editor.errorimage = Isso é uma imagem, Não um mapa. Não vá por aí mudando extensões esperando que funcione.\n\nSe você quer importar um mapa legacy, Use o botão 'Importar mapa legacy'no editor. editor.errorlegacy = Esse mapa é velho demais, E usa um formato de mapa legacy que não é mais suportado. -editor.errorheader = Este arquivo de mapa não é mais valido, Ou esta corrompido. +editor.errorheader = Este arquivo de mapa não é mais válido ou está corrompido. editor.errorname = Mapa não tem nome definido. editor.update = atualizar editor.randomize = Randomizar @@ -240,14 +240,14 @@ editor.saved = Salvo! editor.save.noname = Seu mapa não tem um nome! Coloque um no menu de "Informação do mapa" editor.save.overwrite = O seu mapa Substitui um mapa já construído! Coloque um nome diferente no menu "Informação do mapa" editor.import.exists = [scarlet]Não foi possivel importar:[] Um mapa Construído chamado '{0}' Já existe! -editor.import = Importando... +editor.import = Importar... editor.importmap = Importar Mapa editor.importmap.description = Importar um mapa existente editor.importfile = Importar arquivo editor.importfile.description = Importar um arquivo externo editor.importimage = Importar imagem do terreno editor.importimage.description = Importar uma imagem de terreno externa -editor.export = Exportando... +editor.export = Exportar... editor.exportfile = Exportar arquivo editor.exportfile.description = Exportar um arquivo de mapa editor.exportimage = Exportar imagem de terreno @@ -260,16 +260,16 @@ editor.mapname = Nome do Mapa: editor.overwrite = [accent]Aviso!\nIsso Subistitui um mapa existente. editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir? editor.selectmap = Selecione uma mapa para carregar: -toolmode.replace = Replace +toolmode.replace = Substituir toolmode.replace.description = Draws only on solid blocks. -toolmode.replaceall = Replace All -toolmode.replaceall.description = Replace all blocks in map. +toolmode.replaceall = Substituir tudo +toolmode.replaceall.description = Substitui todos os blocos no mapa toolmode.orthogonal = Orthogonal toolmode.orthogonal.description = Draws only orthogonal lines. toolmode.square = Square toolmode.square.description = Square brush. -toolmode.eraseores = Erase Ores -toolmode.eraseores.description = Erase only ores. +toolmode.eraseores = Apagar minérios +toolmode.eraseores.description = Apaga apenas minérios. toolmode.fillteams = Fill Teams toolmode.fillteams.description = Fill teams instead of blocks. toolmode.drawteams = Draw Teams @@ -309,7 +309,7 @@ width = Largura: height = Altura: menu = Menu play = Jogar -campaign = Campaign +campaign = Campanha load = Carregar save = Salvar fps = FPS: {0} @@ -318,14 +318,14 @@ ping = Ping: {0}ms language.restart = Por favor Reinicie seu jogo para a tradução tomar efeito. settings = Configurações tutorial = Tutorial -tutorial.retake = Re-Take Tutorial +tutorial.retake = Refazer Tutorial editor = Editor mapeditor = Editor de mapa donate = Doar abandon = Abandonar -abandon.text = Esta zona e todos os seus recursos serão perdidos para o enimigo. +abandon.text = Esta zona e todos os seus recursos serão perdidos para o inimigo. locked = Trancado -complete = [LIGHT_GRAY]Complete: +complete = [LIGHT_GRAY]Completo: zone.requirement = Onda {0} Na zona {1} resume = Resumir Zona:\n[LIGHT_GRAY]{0} bestwave = [LIGHT_GRAY]Melhor: {0} @@ -334,7 +334,7 @@ launch.title = Lançamento feito com sucesso launch.next = [LIGHT_GRAY]próxima oportunidade na onda {0} launch.unable2 = [scarlet]Unable to LAUNCH.[] launch.confirm = Isto vai lançar todos os seus recursos no seu núcleo.\nVoce não será capaz de retornar para esta base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +launch.skip.confirm = Se você pular a onda agora, você não será capaz de lançar até ondas mais avançadas. uncover = Descobrir configure = Configurar carregamento configure.locked = [LIGHT_GRAY]Alcançe a onda {0}\npara Configurar o Loadout. @@ -342,9 +342,9 @@ zone.unlocked = [LIGHT_GRAY]{0} Desbloqueado. zone.requirement.complete = Onda {0} alcançada:\n{1} Requerimentos da zona alcançada. zone.config.complete = Onda {0} Alcançada:\nLoadout config desbloqueado. zone.resources = Recursos detectados: -zone.objective = [lightgray]Objective: [accent]{0} -zone.objective.survival = Survive -zone.objective.attack = Destroy Enemy Core +zone.objective = [lightgray]Objetivo: [accent]{0} +zone.objective.survival = Sobreviver +zone.objective.attack = Destruir o núcleo inimigo add = Adicionar... boss.health = Saúde do chefe connectfail = [crimson]Falha ao entrar no servidor: [accent]{0} @@ -371,8 +371,8 @@ zone.saltFlats.name = Salt Flats zone.impact0078.name = Impact 0078 zone.crags.name = Crags zone.fungalPass.name = Fungal Pass -zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.groundZero.description = Uma ótima localização para começar de novo. Baixa ameaça inimiga. Poucos recursos.\nColete o máximo de chumbo e cobre possível.\nBora! +zone.frozenForest.description = Até aqui, perto das montanhas, os esporos se espalharam. As baixas temperaturas não podem contê-los para sempre.\n\nComeçe a busca por energia. Construa geradores à combustão. Aprenda a usar os reparadores (menders). zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. @@ -393,8 +393,8 @@ settings.controls = Controles settings.game = Jogo settings.sound = Som settings.graphics = Gráficos -settings.cleardata = Data do jogo limpa... -settings.clear.confirm = Certeza que quer limpar a data?\nOque é feito não pode ser desfeito! +settings.cleardata = Apagar dados... +settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito! settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar toda a data, Incluindo saves, mapas, Keybinds e desbloqueados.\nQuando apertar 'ok' Vai apagar toda a data e sair automaticamente. settings.clearunlocks = Limpar liberados settings.clearall = Limpar tudo @@ -411,7 +411,7 @@ blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacidade de Energia blocks.powershot = Energia/tiro -blocks.damage = Damage +blocks.damage = Dano blocks.targetsair = Mirar no ar blocks.targetsground = Mirar no chão blocks.itemsmoved = Velocidade de movimento @@ -429,7 +429,7 @@ blocks.repairtime = Tempo de reparo total do bloco blocks.speedincrease = Aumento de velocidade blocks.range = Distancia blocks.drilltier = Furaveis -blocks.drillspeed = Velocidade da furadeira base +blocks.drillspeed = Velocidade da broca base blocks.boosteffect = Efeito do Boost blocks.maxunits = Maximo de unidades ativas blocks.health = Saúde @@ -438,8 +438,8 @@ blocks.inaccuracy = Imprecisão blocks.shots = Tiros blocks.reload = Recarregar blocks.ammo = Munição -bar.drilltierreq = Better Drill Required -bar.drillspeed = Velocidade da furadeira: {0}/s +bar.drilltierreq = Broca melhor requerida. +bar.drillspeed = Velocidade da broca: {0}/s bar.efficiency = Eficiencia: {0}% bar.powerbalance = Energia: {0} bar.poweramount = Energia: {0} @@ -513,15 +513,15 @@ setting.lasers.name = Mostrar lasers setting.pixelate.name = Pixelizado [LIGHT_GRAY](Pode diminuir a performace) setting.minimap.name = Mostrar minimapa setting.musicvol.name = Volume da Música -setting.ambientvol.name = Ambient Volume +setting.ambientvol.name = Volume do ambiente setting.mutemusic.name = Desligar Música setting.sfxvol.name = Volume de Efeitos setting.mutesound.name = Desligar Som setting.crashreport.name = Enviar denuncias de crash anonimas setting.savecreate.name = Auto-Create Saves setting.chatopacity.name = Opacidade do chat -setting.playerchat.name = Mostrar chat em-jogo -uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +setting.playerchat.name = Mostrar chat em jogo +uiscale.reset = A escala da interface do usuário foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings... uiscale.cancel = Cancel & Exit setting.bloom.name = Bloom keybind.title = Refazer teclas @@ -687,9 +687,9 @@ block.graphite-press.name = Prensa de grafite block.multi-press.name = Multi-Prensa block.constructing = {0}\n[LIGHT_GRAY](Construindo) block.spawn.name = Spawn dos inimigos -block.core-shard.name = Core: Fragmento -block.core-foundation.name = Core: Fundação -block.core-nucleus.name = Core: Nucleus +block.core-shard.name = Fragmento do núcleo +block.core-foundation.name = Fundação do núcleo +block.core-nucleus.name = Núcleo do núcleo block.deepwater.name = água funda block.water.name = Água block.tainted-water.name = Água contaminada @@ -770,8 +770,8 @@ block.combustion-generator.name = Gerador de combustão block.turbine-generator.name = Gerador de Turbina block.differential-generator.name = Gerador diferencial block.impact-reactor.name = Reator De Impacto -block.mechanical-drill.name = Furadera Mecânica -block.pneumatic-drill.name = Mineradora Pneumatica +block.mechanical-drill.name = Broca Mecânica +block.pneumatic-drill.name = Broca Pneumática block.laser-drill.name = Broca a Laser block.water-extractor.name = Extrator de Agua block.cultivator.name = Cultivador @@ -824,7 +824,7 @@ block.bridge-conduit.name = Conduto-Ponte block.rotary-pump.name = Bomba Rotatoria block.thorium-reactor.name = Reator Torio block.mass-driver.name = Drive de Massa -block.blast-drill.name = Mineradora de Explosão +block.blast-drill.name = Broca de Explosão block.thermal-pump.name = Cano termico block.thermal-generator.name = Gerador Térmico block.alloy-smelter.name = Fundidora de Liga @@ -868,13 +868,13 @@ unit.lich.name = Lich unit.reaper.name = Ceifador tutorial.next = [lightgray] tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Mineradoras []podem minerar automaticamente.\nColoque uma numa veia de cobre. -tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. -tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[] -tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o core.\nFaça uma linha de Esteiras da mineradora até o core. -tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered +tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nColoque uma numa veia de cobre. +tutorial.drill.mobile = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nToque na aba de brocas no canto inferior direito.\nSelecione a[accent] broca mecânica[].\nToque em um veio de cobre para colocá-la, então pressione a[accent] marca de verificação[] abaixo para confirmar sua seleção.\nPressione o[accent] botão "X"[] para cancelar o posicionamento. +tutorial.blockinfo = Cada bloco tem diferentes status. Cada broca pode extrair certos minérios.\nPara checar as informações e os status de um bloco,[accent] toque o botão "?" enquanto o seleciona no menu de construção.[]\n\n[accent]Acesse os status da broca mecânica agora.[] +tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o núcleo.\nFaça uma linha de Esteiras da mineradora até o núcleo. +tutorial.conveyor.mobile = [accent]Esteiras[] são usadas para transportar itens até o núcleo.\nFaça uma linha de esteiras da broca até o núcleo.\n[accent] Coloque uma linha segurando por alguns segundos[] e arrastando em uma direção.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered tutorial.turret = Estruturas defensivas devem ser construidas para repelir[LIGHT_GRAY] O inimigo[].\nConstrua uma torre dupla perto de sua base. -tutorial.drillturret = Torres duplas precisam de[accent] Cobre como munição []Para atirar.\nColoque uma mineradoura Proxima a torre Para carregar ela com cobre minerado. +tutorial.drillturret = Torres duplas precisam de[accent] Cobre como munição []Para atirar.\nColoque uma broca próxima à torre para carregá-la com o cobre minerado. tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause. tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause. tutorial.unpause = Now press space again to unpause. @@ -883,7 +883,7 @@ tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down r tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[] tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[] -tutorial.waves = O[LIGHT_GRAY] Inimigo[] se aproxima.\n\nDefenda seu core por 2 ondas. Construa mais torres. +tutorial.waves = O[LIGHT_GRAY] Inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 ondas. Construa mais torres. tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper. tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button. item.copper.description = Um material de estrutura util. Usado extensivamente em Maioria dos blocos. @@ -915,7 +915,7 @@ mech.javelin-ship.description = Uma nave de espinhos de atacar e correr. Quando mech.trident-ship.description = Um bombardeiro pesado. Consideravelmente bem armadurado. mech.glaive-ship.description = Uma nave armada, bem armadurada. Com um repetidor incendario equipado. Boa aceleração e maxima velocidade. unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. -unit.spirit.description = A unidade de drone inicial. Ele nasce no core por padrão. Minera minérios automaticamente, Coleta itens e repara blocos. +unit.spirit.description = A unidade de drone inicial. Ele nasce no núcleo por padrão. Minera minérios automaticamente, Coleta itens e repara blocos. unit.phantom.description = Uma unidade de drone avançada. Minera minérios automaticamente, Coleta itens e repara blocos automaticamente. Significantemente mais efetiva. unit.dagger.description = Unidade terrestre basica, Forte em grupos. unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. @@ -946,8 +946,8 @@ block.power-source.description = Infinitivamente da energia. Apenas caixa de are block.item-source.description = Infinivamente da itens. Apenas caixa de areia. block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia. block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia. -block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o core e torres no começo. -block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o core e torres no começo.\nOcupa multiplos espaços. +block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torres no começo. +block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torres no começo.\nOcupa multiplos espaços. block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies. block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles. block.thorium-wall.description = A strong defensive block.\nBoa proteção contra inimigos. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 676d60353f..0a7df5572b 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -10,17 +10,19 @@ link.trello.description = Trello board 上的官方计划表 link.itch.io.description = PC版下载和网页版(itch.io) link.google-play.description = 从谷歌商店获取安卓版 link.wiki.description = 官方 Mindustry 维基 -linkfail = 打开链接失败!\nURL 已经复制到剪贴板。 -screenshot = 荧幕截图已放在 {0} +linkfail = 打开链接失败!\n网址已经复制到剪贴板。 +screenshot = 屏幕截图已放在 {0} screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 gameover = 你的核心被摧毁了! -gameover.pvp = [accent] {0}[] 队获胜! +gameover.pvp = [accent] {0}[]队获胜! highscore = [accent]新纪录! + load.sound = 音乐加载中 load.map = 地图加载中 load.image = 图片加载中 load.content = 内容加载中 load.system = 系统加载中 + stat.wave = 战胜的波数:[accent]{0} stat.enemiesDestroyed = 消灭的敌人:[accent]{0} stat.built = 建造的建筑:[accent]{0} @@ -28,6 +30,7 @@ stat.destroyed = 摧毁的建筑:[accent]{0} stat.deconstructed = 拆除的建筑:[accent]{0} stat.delivered = 发射的资源: stat.rank = 最终等级:[accent]{0} + launcheditems = [accent]发射的资源 map.delete = 确定要删除 "[accent]{0}[]" 地图吗? level.highscore = 最高分:[accent]{0} @@ -49,8 +52,17 @@ close = 关闭 website = 官网 quit = 退出 maps = 地图 +maps.browse = 浏览地图 continue = 继续 maps.none = [LIGHT_GRAY]没有找到地图! +invalid = 无效 +preparingconfig = 正在准备配置 +preparingcontent = 正在准备内容 +uploadingcontent = 正在上传内容 +uploadingpreviewfile = 正在上传预览文件 +committingchanges = 提交更改 +done = 已完成 + about.button = 关于 name = 名字: noname = 先取一个[accent]玩家名[]。 @@ -71,32 +83,35 @@ server.kicked.vote = 你被投票踢出了服务器。永别了。 server.kicked.clientOutdated = 客户端过旧,请更新你的游戏。 server.kicked.serverOutdated = 服务器过旧,请联系房主升级服务器。 server.kicked.banned = 你在这个服务器上被拉入黑名单了。 -server.kicked.typeMismatch = 此服务器与您的不稳定测试版不兼容。 +server.kicked.typeMismatch = 此服务器与你的不稳定测试版不兼容。 +server.kicked.playerLimit = 服务器已满,请等待一个空位。 server.kicked.recentKick = 你刚刚被踢出服务器。\n请稍后重新连接! server.kicked.nameInUse = 你的名字与服务器中的一个人重复了。 server.kicked.nameEmpty = 无效的名字! server.kicked.idInUse = 你已在这个服务器上!不允许用两个账号连接。 -server.kicked.customClient = 这个服务器不支持定制版本。下载官方版本。 +server.kicked.customClient = 这个服务器不支持自定义版本。请下载官方版本。 server.kicked.gameover = 游戏结束! server.versions = 客户端版本:[accent] {0}[]\n服务器版本:[accent] {1}[] -host.info = [accent]创建局域网游戏[]按钮会在[scarlet]6567[]端口运行一个服务器。[]\n任何在同一个[LIGHT_GRAY]wifi或本地网络[]下的人都应该可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过IP地址连接,你需要设定[accent]端口转发[]。\n\n[LIGHT_GRAY]注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了Mindustry访问本地网络。 -join.info = 此时,可以输入[accent]服务器的IP地址[]来连接,或寻找[accent]本地网络[]中的服务器来连接。\n局域网或广域网多人游戏都被支持。\n\n[LIGHT_GRAY]注意:没有全球服务器列表;如果你想通过IP地址连接某个服务器,你需要向房主询问IP地址。 +host.info = [accent]创建局域网游戏[]按钮会在[scarlet] 6567 []端口运行一个服务器。[]\n任何在同一个[LIGHT_GRAY] Wi-Fi 或本地网络[]下的人应该都可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过 IP 地址连接,你需要设定[accent]端口转发[]。\n\n[LIGHT_GRAY]注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了 Mindustry 访问本地网络。 +join.info = 此时,可以输入[accent]服务器的 IP 地址[]来连接,或寻找[accent]本地网络[]中的服务器来连接。\n局域网或广域网多人游戏都支持。\n\n[LIGHT_GRAY]注意:没有全球服务器列表;如果你想通过 IP 地址连接某个服务器,你需要向房主询问 IP 地址。 hostserver = 创建服务器 +invitefriends = 邀请朋友 hostserver.mobile = 创建\n服务器 host = 创建 hosting = [accent]正在打开服务器…… hosts.refresh = 刷新 hosts.discovering = 正在搜索局域网服务器 +hosts.discovering.any = 正在搜索服务器 server.refreshing = 正在刷新服务器 hosts.none = [lightgray]未发现局域网游戏! host.invalid = [scarlet]无法连接服务器。 trace = 跟踪玩家 trace.playername = 玩家名称:[accent]{0} -trace.ip = IP地址:[accent]{0} -trace.id = 唯一的ID:[accent]{0} +trace.ip = IP 地址:[accent]{0} +trace.id = 唯一的 ID:[accent]{0} trace.mobile = 移动客户端:[accent]{0} -trace.modclient = 定制版客户端:[accent]{0} -invalidid = 无效的客户端ID!提交一个错误报告。 +trace.modclient = 自定义客户端:[accent]{0} +invalidid = 无效的客户端 ID!提交一个错误报告。 server.bans = 黑名单 server.bans.none = 没有被拉黑的玩家! server.admins = 管理员 @@ -107,16 +122,21 @@ server.edit = 编辑服务器 server.outdated = [crimson]服务器过旧![] server.outdated.client = [crimson]客户端过旧![] server.version = [lightgray]版本:{0} {1} -server.custombuild = [yellow]定制版 +server.custombuild = [yellow]自定义 confirmban = 确认拉黑这名玩家? -confirmkick = 确定踢走这名玩家? +confirmkick = 确定踢出这名玩家? +confirmvotekick = 确定投票踢出这名玩家? confirmunban = 确定取消拉黑这名玩家? confirmadmin = 确定给予这名玩家管理员权限? confirmunadmin = 确定取消这名玩家的管理员权限? joingame.title = 加入游戏 joingame.ip = 地址: disconnect = 已断开 -disconnect.data = 读取世界数据失败! +disconnect.error = 连接错误。 +disconnect.closed = 连接关闭。 +disconnect.timeout = 连接超时。 +disconnect.data = 读取服务器数据失败! +cantconnect = 无法加入([accent]{0}[])。 connecting = [accent]连接中…… connecting.data = [accent]加载中…… server.port = 端口: @@ -142,22 +162,24 @@ save.rename = 重命名 save.rename.text = 新名称: selectslot = 选择一个存档。 slot = [accent]存档位 {0} -save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏,那么这可能是因为存档格式改变了,而[scarlet]不是[]bug 。 -empty = <空> +save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏,那么这可能是因为存档格式改变了,而[scarlet]不是[] bug 。 +empty = < 空 > on = 开 off = 关 save.autosave = 自动保存:{0} save.map = 地图:{0} -save.wave = 波次 {0} +save.wave = 波次:{0} +save.mode = 模式:{0} save.difficulty = 难度:{0} save.date = 最后保存:{0} save.playtime = 游戏时间:{0} warning = 警告! confirm = 确认 delete = 删除 +view.workshop = 浏览创意工坊 ok = 确定 open = 打开 -customize = 定制 +customize = 自定义 cancel = 取消 openlink = 打开链接 copylink = 复制链接 @@ -166,14 +188,14 @@ data.export = 导出数据 data.import = 导入数据 data.exported = 数据已导入。 data.invalid = 非有效游戏数据。 -data.import.confirm = 导入外部游戏数据讲覆盖本地[scarlet]全部[]游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。 +data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。 classic.export = 导出老版本数据 -classic.export.text = [accent]Mindustry []有了一个重要的更新。\n检测到此为老版本(v3.5 build 40)的存档或地图。是否要将这些保存导出到手机的主文件夹中,以便在 Mindustry 老版本应用程序中使用? +classic.export.text = [accent]Mindustry []已经有了一个重要的更新。\n检测到此为老版本(v3.5 build 40)的存档或地图。是否要将这些保存导出到手机的主文件夹中,以便在 Mindustry 老版本应用程序中使用? quit.confirm = 确定退出? -quit.confirm.tutorial = 你确定不玩教程就开始游戏?\n教程可以通过[accent]设置->游戏->重新游玩教程[]来再次游玩。 -loading = [accent]老滑稽祈祷中…… +quit.confirm.tutorial = 你确定要跳过教程?\n教程可以通过[accent]设置->游戏->重新游玩教程[]来再次游玩。 +loading = [accent]加载中…… saving = [accent]保存中…… -wave = [accent]波次 {0} +wave = [accent]波次{0} wave.waiting = [LIGHT_GRAY]下一波将在{0}秒后到来 wave.waveInProgress = [LIGHT_GRAY]波次进行中 waiting = [LIGHT_GRAY]等待中…… @@ -187,10 +209,15 @@ custom = 自定义 builtin = 内建的 map.delete.confirm = 你确定你想要删除这张地图吗?这个操作无法撤销! map.random = [accent]随机地图 -map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。 -map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]红色[]的核心。 -map.nospawn.attack = 这个地图没有敌人的核心!请在编辑中向地图添加一个[SCARLET]红色[]的核心。 +map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]己方[]的核心。 +map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]敌方[]的核心。 +map.nospawn.attack = 这个地图没有敌人的核心!请在编辑中向地图添加一个[SCARLET]敌方[]的核心。 map.invalid = 地图载入错误:地图文件可能已经损坏。 +map.publish.error = 地图上传错误:{0} +map.publish.confirm = 确定上传此地图?\n\n[lightgray]确定你同意 Steam 创意工坊的最终用户许可协议,否则你的地图将不会被展示! +eula = Steam 最终用户许可协议 +map.publish = 地图已上传。 +map.publishing = [accent]地图上传中…… editor.brush = 笔刷 editor.openin = 在编辑器中打开 editor.oregen = 矿石的生成 @@ -198,14 +225,17 @@ editor.oregen.info = 矿石的生成: editor.mapinfo = 地图信息 editor.author = 作者: editor.description = 描述: +editor.nodescription = 地图必须要有不少于4个字符的描述才能上传。 editor.waves = 波数: editor.rules = 规则: editor.generation = 筛选器: editor.ingame = 游戏内编辑 +editor.publish.workshop = 上传到创意工坊 editor.newmap = 新地图 +workshop = 创意工坊 waves.title = 波数 waves.remove = 移除 -waves.never = <永不> +waves.never = < 无限 > waves.every = 每 waves.waves = 波 waves.perspawn = 每次生成 @@ -219,6 +249,7 @@ waves.invalid = 剪贴板中无效的波次信息。 waves.copied = 波次信息已复制。 waves.none = 无自定义敌人。\n请注意,空布局将自动替换为默认布局。 editor.default = [LIGHT_GRAY]<默认> +details = 详情…… edit = 编辑…… editor.name = 名称: editor.spawn = 生成单位 @@ -228,8 +259,9 @@ editor.errorload = 读取文件时出现错误:\n[accent]{0} editor.errorsave = 保存文件时出现错误:\n[accent]{0} editor.errorimage = 这是一幅画,不是地图。不要更改文件的扩展名来让他工作。\n\n如果你想导入地图,请在编辑器中使用“导入地图”这一按钮。 editor.errorlegacy = 此地图太旧,而旧的地图格式不再受支持了。 +editor.errornot = 这不是地图文件。 editor.errorheader = 此地图文件已失效或损坏。 -editor.errorname = 地图没有被定义的名称。 +editor.errorname = 地图没有被定义的名称。你是否在尝试加载存档文件? editor.update = 更新 editor.randomize = 随机化 editor.apply = 应用 @@ -260,7 +292,9 @@ editor.resizemap = 调整地图大小 editor.mapname = 地图名称: editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。 editor.overwrite.confirm = [scarlet]警告![]存在同名地图。你确定你想要覆盖? +editor.exists = 已经存在同名地图。 editor.selectmap = 选择一个地图加载: + toolmode.replace = 替换 toolmode.replace.description = 仅在实心块上绘制。 toolmode.replaceall = 全部替换 @@ -275,37 +309,39 @@ toolmode.fillteams = 填充团队 toolmode.fillteams.description = 填充团队而不是方块。 toolmode.drawteams = 绘制团队 toolmode.drawteams.description = 绘制团队而不是方块。 + filters.empty = [LIGHT_GRAY]没有筛选器!用下方的按钮添加一个。 -filter.distort = Distort -filter.noise = Noise -filter.median = Median -filter.oremedian = Ore Median -filter.blend = Blend -filter.defaultores = Default Ores -filter.ore = Ore -filter.rivernoise = River Noise -filter.mirror = Mirror -filter.clear = Clear -filter.option.ignore = Ignore -filter.scatter = Scatter -filter.terrain = Terrain -filter.option.scale = Scale -filter.option.chance = Chance -filter.option.mag = Magnitude -filter.option.threshold = Threshold -filter.option.circle-scale = Circle Scale -filter.option.octaves = Octaves -filter.option.falloff = Falloff -filter.option.angle = Angle -filter.option.block = Block -filter.option.floor = Floor -filter.option.flooronto = Target Floor -filter.option.wall = Wall -filter.option.ore = Ore -filter.option.floor2 = Secondary Floor -filter.option.threshold2 = Secondary Threshold -filter.option.radius = Radius -filter.option.percentile = Percentile +filter.distort = 扭曲程度 +filter.noise = 波动程度 +filter.median = 平均数 +filter.oremedian = 矿石平均数 +filter.blend = 混合程度 +filter.defaultores = 默认矿石 +filter.ore = 矿石 +filter.rivernoise = 河流波动程度 +filter.mirror = 镜像 +filter.clear = 清理 +filter.option.ignore = 忽略 +filter.scatter = 分散程度 +filter.terrain = 地形 +filter.option.scale = 规模大小 +filter.option.chance = 几率大小 +filter.option.mag = 巨大程度 +filter.option.threshold = 最大阈值 +filter.option.circle-scale = 圆规模 +filter.option.octaves = 递增 +filter.option.falloff = 递减 +filter.option.angle = 角度大小 +filter.option.block = 方块 +filter.option.floor = 地面 +filter.option.flooronto = 地面目标 +filter.option.wall = 墙 +filter.option.ore = 矿石 +filter.option.floor2 = 二重地面 +filter.option.threshold2 = 二重阈值 +filter.option.radius = 半径大小 +filter.option.percentile = 百分比 + width = 宽度: height = 高度: menu = 菜单 @@ -323,9 +359,10 @@ tutorial.retake = 重新游玩教程 editor = 编辑器 mapeditor = 地图编辑器 donate = 打赏 + abandon = 放弃 -abandon.text = 这个区域和它的所有资源会被敌人重置。 -locked = 已被锁定 +abandon.text = 这个区域及其资源会被敌人重置。 +locked = 已锁定 complete = [LIGHT_GRAY]完成: zone.requirement = 在{1}中达到{0}波 resume = 暂停:\n[LIGHT_GRAY]{0} @@ -339,6 +376,7 @@ launch.skip.confirm = 如果你现在跳过,在后来的波次前你将无法 uncover = 解锁 configure = 设定发射资源数量 configure.locked = [LIGHT_GRAY]到达第 {0} 波\n才能设定发射资源。 +configure.invalid = 数量必须是0到{0}之间的数字。 zone.unlocked = [LIGHT_GRAY]{0} 已解锁。 zone.requirement.complete = 已达到第{0}波。\n达到解锁{1}的需求。 zone.config.complete = 已达到第{0}波。\n允许携带发射的资源进入此地区。 @@ -348,6 +386,7 @@ zone.objective.survival = 生存 zone.objective.attack = 摧毁敌方核心 add = 添加…… boss.health = BOSS 生命值 + connectfail = [crimson]服务器连接失败:[accent]{0} error.unreachable = 服务器无法访问。 error.invalidaddress = 地址无效。 @@ -358,6 +397,7 @@ error.mapnotfound = 找不到地图文件! error.io = 网络 I/O 错误。 error.any = 未知网络错误。 error.bloom = 未能初始化特效。\n您的设备可能不支持它。 + zone.groundZero.name = 零号地区 zone.desertWastes.name = 荒芜沙漠 zone.craters.name = 陨石带 @@ -372,20 +412,22 @@ zone.saltFlats.name = 盐碱荒滩 zone.impact0078.name = 0078号冲击 zone.crags.name = 悬崖 zone.fungalPass.name = 真菌通道 -zone.groundZero.description = 重新开始的最佳位置。敌人威胁很小,资源少。\n尽可能收集多的铅和铜。\n行动。 + +zone.groundZero.description = 重新开始的最佳位置。这儿敌人威胁很小,资源少。\n尽可能收集多的铅和铜。\n行动。 zone.frozenForest.description = 即使在这里,靠近山脉的地方,孢子也已经扩散。寒冷的温度不可能永远容纳它们。\n\n此行动须投入电力。建造燃烧发电机并学会使用修理者。 -zone.desertWastes.description = 这些废物是巨大的,不可预测的,并且与废弃的结构交错在一起。燃烧它以获取动力或合成石墨。\n\n[lightgray]无法保证此着陆位置。 -zone.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。根除他们的核心。不要留下任何东西。 -zone.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水冷却炮塔和钻头。 -zone.ruinousShores.description = 穿过荒地,就是海岸线。曾经这个地方安置了一个海岸防御阵列。现在剩下的不多了,只有最基本的防御结构仍然毫发无损,其他一切都被销毁了。\n继续向外扩展。继续研究科技。 -zone.stainedMountains.description = 在更远的内陆地区是山脉,但没有被孢子污染。\n在这一地区分布着丰富的钛。学习如何使用它。\n\n这里敌人的存在更大。不要给他们时间派出最强的部队。 -zone.overgrowth.description = 这个地区靠近孢子的来源,生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。 -zone.tarFields.description = 位于山脉和沙漠之间的产油区的郊区是少数几个有可用焦油储量的地区之一。\n尽管被废弃,但附近仍有一些危险的敌军。不要低估它们。\n\n[lightgray]如果可能,研究石油加工技术。 -zone.desolateRift.description = 非常危险的区域。资源丰富但空间小。破坏风险高。尽快离开,不要被敌人的攻击间隔太长所愚弄。 -zone.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断侦察入侵者。 -zone.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来消灭两个核心。 +zone.desertWastes.description = 这些废料规模巨大,难以预测,并且与废弃的结构交错在一起。\n此地区有煤矿存在,燃烧它以获取动力或合成石墨。\n\n[lightgray]无法保证此着陆位置。 +zone.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。摧毁他们的核心。不要留下任何东西。 +zone.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水来加速炮塔和钻头。 +zone.ruinousShores.description = 穿过荒地,就是海岸线。这个地方曾经建造了一个海岸防御线。但现在所剩无几,只有最基本的防御结构仍然毫发无损,其他一切都被摧毁了。\n继续向外扩展。继续研究科技。 +zone.stainedMountains.description = 在更远的内陆地区是山脉,但这里没有被孢子污染。\n在这一地区分布着丰富的钛,学习如何使用它。\n\n这里敌人的存在更大。不要给他们时间派出最强的部队。 +zone.overgrowth.description = 这个地区靠近孢子的来源,因此生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。 +zone.tarFields.description = 位于山脉和沙漠之间的产油区的郊区是少数几个有可用石油储量的地区之一。\n尽管被废弃,但附近仍有一些危险的敌军。不要低估它们。\n\n[lightgray]如果可能,研究石油加工技术。 +zone.desolateRift.description = 非常危险的区域。这儿资源丰富但空间小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 +zone.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。 +zone.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 zone.impact0078.description = <在此处插入说明> zone.crags.description = <在此处插入说明> + settings.language = 语言 settings.data = 游戏数据 settings.reset = 恢复默认 @@ -435,22 +477,27 @@ blocks.boosteffect = 加成影响 blocks.maxunits = 最大单位数量 blocks.health = 生命值 blocks.buildtime = 建造时间 +blocks.buildcost = 建造花费 blocks.inaccuracy = 误差 blocks.shots = 每秒发射数 blocks.reload = 重新装弹 blocks.ammo = 子弹 + bar.drilltierreq = 需要更好的钻头 bar.drillspeed = 挖掘速度:{0}/s bar.efficiency = 效率:{0}% -bar.powerbalance = 能量:{0} +bar.powerbalance = 能量:{0}/秒 +bar.powerstored = 储能:{0}/{1} bar.poweramount = 能量:{0} bar.poweroutput = 能量输出:{0} bar.items = 物体:{0} +bar.capacity = 容量:{0} bar.liquid = 液体 bar.heat = 热量 bar.power = 电力 bar.progress = 制造进度 bar.spawned = 单位数量:{0}/{1} + bullet.damage = [stat]{0}[lightgray] 伤害 bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格 bullet.incendiary = [stat] 燃烧 @@ -462,6 +509,7 @@ bullet.freezing = [stat] 冰冻 bullet.tarred = [stat] 减速 bullet.multiplier = [stat]{0}[lightgray]x 子弹数量 bullet.reload = [stat]{0}[lightgray]x 装弹 + unit.blocks = 方块 unit.powersecond = 能量单位/秒 unit.liquidsecond = 液体单位/秒 @@ -483,13 +531,14 @@ category.shooting = 发射 category.optional = 可选的增强物品 setting.landscape.name = 锁定横屏 setting.shadows.name = 影子 -setting.linear.name = 光滑贴图 +setting.linear.name = 抗锯齿 setting.animatedwater.name = 流动的水 setting.animatedshields.name = 动态画面 setting.antialias.name = 抗锯齿[LIGHT_GRAY](需要重新启动)[] setting.indicators.name = 队友指示器 setting.autotarget.name = 自动射击 setting.keyboard.name = 鼠标+键盘操控 +setting.touchscreen.name = 触屏操控 setting.fpscap.name = 最大FPS setting.fpscap.none = 无 setting.fpscap.text = {0} FPS @@ -520,6 +569,7 @@ setting.sfxvol.name = 音效音量 setting.mutesound.name = 静音 setting.crashreport.name = 发送匿名崩溃报告 setting.savecreate.name = 自动创建存档 +setting.publichost.name = 公共游戏旁观 setting.chatopacity.name = 聊天界面透明度 setting.playerchat.name = 显示游戏内聊天界面 uiscale.reset = UI缩放比例已经改变。\n按下“确定”来确定缩放比例\n[accent]{0}[]秒后[scarlet]退出并恢复设定。 @@ -573,6 +623,7 @@ mode.pvp.description = 和本地玩家对战。 mode.attack.name = 攻击 mode.attack.description = 没有波数,但是有摧毁敌人基地的任务。 mode.custom = 自定义模式 + rules.infiniteresources = 无限资源 rules.wavetimer = 波次计时器 rules.waves = 波次 @@ -590,7 +641,7 @@ rules.wavespacing = 波次间隔时间:[LIGHT_GRAY](秒) rules.buildcostmultiplier = 建设花费倍数 rules.buildspeedmultiplier = 建设时间倍数 rules.waitForWaveToEnd = 等待敌人时间 -rules.dropzoneradius = 敌人出生点毁灭大小:[LIGHT_GRAY](格) +rules.dropzoneradius = 敌人出生点毁灭大小:[LIGHT_GRAY](格) rules.respawns = 每波最大重生次数 rules.limitedRespawns = 重生限制次数 rules.title.waves = 波次 @@ -599,6 +650,7 @@ rules.title.resourcesbuilding = 资源和建造 rules.title.player = 玩家 rules.title.enemy = 敌人 rules.title.unit = 单位 + content.item.name = 物品 content.liquid.name = 液体 content.unit.name = 部队 @@ -651,7 +703,7 @@ item.radioactivity = [LIGHT_GRAY]放射性:{0} unit.health = [LIGHT_GRAY]生命值:{0} unit.speed = [LIGHT_GRAY]速度:{0} mech.weapon = [LIGHT_GRAY]武器:{0} -mech.health = [LIGHT_GRAY]生命值: {0} +mech.health = [LIGHT_GRAY]生命值:{0} mech.itemcapacity = [LIGHT_GRAY]物品容量:{0} mech.minespeed = [LIGHT_GRAY]采矿速度:{0} mech.minepower = [LIGHT_GRAY]采矿力量:{0} @@ -660,6 +712,7 @@ mech.buildspeed = [LIGHT_GRAY]建造速度:{0}% liquid.heatcapacity = [LIGHT_GRAY]热容量:{0} liquid.viscosity = [LIGHT_GRAY]粘度:{0} liquid.temperature = [LIGHT_GRAY]温度:{0} + block.sand-boulder.name = 沙砂巨石 block.grass.name = 草地 block.salt.name = 盐碱地 @@ -683,9 +736,6 @@ block.scrap-wall-large.name = 大型废墙 block.scrap-wall-huge.name = 巨型废墙 block.scrap-wall-gigantic.name = 超巨型废墙 block.thruster.name = 助力器 -block.kiln.name = 熔炉 -block.graphite-press.name = 石墨压缩机 -block.multi-press.name = 多重压缩机 block.constructing = {0}\n[LIGHT_GRAY](建造中) block.spawn.name = 敌人出生点 block.core-shard.name = 小型核心 @@ -715,10 +765,10 @@ block.pine.name = 松树 block.white-tree-dead.name = 枯萎的白树 block.white-tree.name = 白树 block.spore-cluster.name = 孢子簇 -block.metal-floor.name = 金属地板 +block.metal-floor.name = 金属地板1 block.metal-floor-2.name = 金属地板2 block.metal-floor-3.name = 金属地板3 -block.metal-floor-5.name = 金属地板5 +block.metal-floor-5.name = 金属地板4 block.metal-floor-damaged.name = 损坏的金属地板 block.dark-panel-1.name = 暗面板1 block.dark-panel-2.name = 暗面板2 @@ -731,6 +781,27 @@ block.ignarock.name = 伊格纳石头 block.hotrock.name = 热石头 block.magmarock.name = 岩浆石头 block.cliffs.name = 悬崖 +block.duo.name = 双管炮 +block.scorch.name = 火焰炮 +block.scatter.name = 分裂炮 +block.arc.name = 电弧 +block.hail.name = 冰雹炮 +block.lancer.name = 蓝瑟炮 +block.wave.name = 波浪 +block.swarmer.name = 蜂群 +block.salvo.name = 齐射炮 +block.ripple.name = 浪涌 +block.cyclone.name = 气旋炮 +block.fuse.name = 融合炮 +block.spectre.name = 幽灵 +block.meltdown.name = 熔毁 +block.mechanical-drill.name = 机械钻头 +block.pneumatic-drill.name = 气动钻头 +block.laser-drill.name = 激光钻头 +block.blast-drill.name = 爆破钻头 +block.water-extractor.name = 抽水机 +block.cultivator.name = 培养机 +block.oil-extractor.name = 石油钻井 block.copper-wall.name = 铜墙 block.copper-wall-large.name = 大型铜墙 block.titanium-wall.name = 钛墙 @@ -739,13 +810,10 @@ block.phase-wall.name = 相织布墙 block.phase-wall-large.name = 大型相织布墙 block.thorium-wall.name = 钍墙 block.thorium-wall-large.name = 大型钍墙 +block.surge-wall.name = 波动墙 +block.surge-wall-large.name = 大型波动墙 block.door.name = 门 block.door-large.name = 大门 -block.duo.name = 双管炮 -block.scorch.name = 火焰炮 -block.scatter.name = 分裂炮 -block.hail.name = 冰雹炮 -block.lancer.name = 蓝瑟炮 block.conveyor.name = 传送带 block.titanium-conveyor.name = 钛传送带 block.junction.name = 连接点 @@ -753,15 +821,28 @@ block.router.name = 路由器 block.distributor.name = 分配器 block.sorter.name = 分类器 block.overflow-gate.name = 溢流门 +block.phase-conveyor.name = 相织布传送带桥 +block.bridge-conveyor.name = 传送带桥 +block.armored-conveyor.name = 装甲传送带 +block.armored-conveyor.description = 向钛传送带一样运物品,但有更好的装甲。除其他传送带,不接受任何边的输入。 +block.kiln.name = 熔炉 +block.graphite-press.name = 石墨压缩机 +block.multi-press.name = 多重压缩机 +block.mass-driver.name = 质量驱动器 block.silicon-smelter.name = 硅冶炼厂 block.phase-weaver.name = 相织布编织器 block.pulverizer.name = 粉碎机 block.cryofluidmixer.name = 冷冻液混合器 block.melter.name = 熔炉 block.incinerator.name = 焚化炉 +block.alloy-smelter.name = 合金冶炼厂 block.spore-press.name = 孢子压缩机 block.separator.name = 分离机 block.coal-centrifuge.name = 煤炭离心机 +block.plastanium-compressor.name = 塑钢压缩机 +block.pyratite-mixer.name = 硫混合器 +block.blast-mixer.name = 爆炸混合器 +block.solar-panel.name = 太阳能电池 block.power-node.name = 能量节点 block.power-node-large.name = 大型能量节点 block.surge-tower.name = 巨浪塔 @@ -771,11 +852,10 @@ block.combustion-generator.name = 燃烧发电机 block.turbine-generator.name = 涡轮发电机 block.differential-generator.name = 差动发电机 block.impact-reactor.name = 冲击反应堆 -block.mechanical-drill.name = 机械钻头 -block.pneumatic-drill.name = 气动钻头 -block.laser-drill.name = 激光钻头 -block.water-extractor.name = 抽水机 -block.cultivator.name = 培养机 +block.solar-panel-large.name = 大型太阳能电池 +block.thorium-reactor.name = 钍反应堆 +block.thermal-generator.name = 热能发电机 +block.rtg-generator.name = RTG 发电机 block.dart-mech-pad.name = Dart 机甲平台 block.delta-mech-pad.name = Delta 机甲平台 block.javelin-ship-pad.name = Javelin 机甲平台 @@ -783,28 +863,24 @@ block.trident-ship-pad.name = Trident 机甲平台 block.glaive-ship-pad.name = Glaive 机甲平台 block.omega-mech-pad.name = Omega 机甲平台 block.tau-mech-pad.name = Tau 机甲平台 +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.conduit.name = 导管 block.mechanical-pump.name = 机械泵 +block.rotary-pump.name = 回旋泵 +block.thermal-pump.name = 热能泵 block.item-source.name = 物品源 block.item-void.name = 物品黑洞 block.liquid-source.name = 液体源 block.power-void.name = 能源黑洞 block.power-source.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.solar-panel.name = 太阳能电池 -block.solar-panel-large.name = 大型太阳能电池 -block.oil-extractor.name = 石油钻井 block.command-center.name = 指挥中心 +block.rally-point.name = 集合点 +block.rally-point.description = 用于地面单位集合的标志。需要指挥中心发出“集合”指令才可使用。 block.draug-factory.name = 德鲁格采矿机工厂 block.spirit-factory.name = 幽灵修理机工厂 block.phantom-factory.name = 鬼怪建造机工厂 @@ -816,42 +892,24 @@ 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.mass-driver.name = 质量驱动器 -block.blast-drill.name = 爆破钻头 -block.thermal-pump.name = 热能泵 -block.thermal-generator.name = 热能发电机 -block.alloy-smelter.name = 合金冶炼厂 +block.message.name = 信息 block.mender.name = 修理者 block.mend-projector.name = 修理投影器 -block.surge-wall.name = 波动墙 -block.surge-wall-large.name = 大型波动墙 -block.cyclone.name = 气旋炮 -block.fuse.name = 融合炮 +block.unloader.name = 装卸器 +block.vault.name = 仓库 block.shock-mine.name = 脉冲地雷 block.overdrive-projector.name = 超速投影器 block.force-projector.name = 力墙投影器 -block.arc.name = 电弧 -block.rtg-generator.name = RTG 发电机 -block.spectre.name = 幽灵 -block.meltdown.name = 熔毁 block.container.name = 容器 block.launch-pad.name = 发射台 block.launch-pad-large.name = 大型发射台 -team.blue.name = 蓝 -team.crux.name = red -team.sharded.name = orange -team.orange.name = 橙 -team.derelict.name = derelict -team.green.name = 绿 -team.purple.name = 紫 +team.blue.name = 胖次蓝 +team.crux.name = 姨妈红 +team.sharded.name = 哲学黄 +team.orange.name = 太阳橙 +team.derelict.name = 高冷灰 +team.green.name = 原谅绿 +team.purple.name = 基佬紫 unit.spirit.name = 幽灵修理机 unit.draug.name = 德鲁格采矿机 unit.phantom.name = 鬼怪建造机 @@ -874,7 +932,7 @@ tutorial.drill.mobile = 手动采矿效率低。\n[accent]钻头[]可以自动 tutorial.blockinfo = 每个方块具有不同的数据。每个钻头只能开采某些矿石。\n要检查块的信息和统计信息,[accent]在菜单中点击问号。[]\n\n[accent]现在查看机械钻头的数据吧。[] tutorial.conveyor = [accent]传送带[]可以把物资传送到核心。\n请从钻头到核心间造一条传送带。 tutorial.conveyor.mobile = [accent]传送带[]可以把物资传送到核心。\n请从钻头到核心间造一条传送带。\n[accent]长按数秒[]并向一个方向拖动来直线放置。\n\n[accent]{0}/{1} 条传送带\n[accent]0/1 物品 -tutorial.turret = 必须建造防御建筑来击退[LIGHT_GRAY]敌人[]。\n请在你核心附近造一个双管炮。 +tutorial.turret = 必须建造防御建筑来击退[LIGHT_GRAY]敌人[]。\n请在核心附近造一个双管炮。 tutorial.drillturret = 双管炮需要[accent]铜[]作弹药来射击。\n可以放一个钻头在炮塔附近供应铜。 tutorial.pause = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n按[accent]空格[]暂停。 tutorial.pause.mobile = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n[accent]点击左上角的按钮以暂停。 @@ -887,8 +945,9 @@ tutorial.deposit = 将物品从机甲拖向方块来放下物品。\n\n[accent] tutorial.waves = [lightgray]敌人[]来了。\n\n保护核心,防御2波攻击。造更多的炮塔。[accent]点击[]以射击。\n建造更多的炮塔和钻头,并采更多的矿。 tutorial.waves.mobile = [lightgray]敌人[]来了。\n\n保护核心,防御2波攻击。造更多的炮塔。你的机甲将对敌人自动开火。\n建造更多的炮塔和钻头,并采更多的矿。 tutorial.launch = 特定波次中,你可以[accent]发射核心[],[accent]携带核心中所有资源[]离开所有的建筑。\n资源可用来研究科技。\n\n[accent]点击发射按钮。 + item.copper.description = 一种有用的结构材料。在各种类型的方块中广泛使用。 -item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。 +item.lead.description = 一种基本的起始材料。广泛用于电子设备和液体运输。 item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体。 item.graphite.description = 一种用于弹药和电路绝缘的矿化碳。 item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。 @@ -907,7 +966,7 @@ liquid.water.description = 最有用的液体。常用于冷却和废物处理 liquid.slag.description = 各种不同类型的熔融金属混合在一起的液体。可以被分解成其组成矿物,或作为武器喷向敌方单位。 liquid.oil.description = 用于先进材料生产的液体。可以转换成煤作为燃料,或作为武器喷射和放火。 liquid.cryofluid.description = 一种由水和钛制成的惰性、无腐蚀性的液体。具有极高的热容量。广泛用作冷却剂。 -mech.alpha-mech.description = 标准控制机甲。基于尖刀单位,具有升级的装甲和建筑能力。比Dart有更多的伤害输出。 +mech.alpha-mech.description = 标准控制机甲。基于尖刀单位,具有升级的装甲和建筑能力。比 Dart 有更多的伤害输出。 mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器快速杀死大量敌方单位。 mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。 mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达90%的伤害。 @@ -926,6 +985,7 @@ unit.eruptor.description = 一种用来拆除建筑物的重型机甲。在敌 unit.wraith.description = 一种快速、一击即退的拦截器机甲。目标是发电机。 unit.ghoul.description = 一种地毯式轰炸机。通过敌人的结构进行攻击,并瞄准关键的基础设施。 unit.revenant.description = 一种发射导弹的重型飞行机甲。 +block.message.description = 储存一条信息。用于在盟军之间交流。 block.graphite-press.description = 把大块的煤压缩成纯石墨片。 block.multi-press.description = 石墨压缩机的升级版。利用水和电力快速高效地处理煤炭。 block.silicon-smelter.description = 用高纯度的焦炭来加工沙子以生产硅。 @@ -977,7 +1037,7 @@ block.mass-driver.description = 终极传送带。收集物品后将它们射向 block.mechanical-pump.description = 一种输出速度慢但没有功耗的廉价泵。 block.rotary-pump.description = 先进的水泵。泵送更多液体,但需要动力。 block.thermal-pump.description = 终级水泵。 -block.conduit.description = 基本液体传输块。像传送带一样工作,但用于液体。最适用于提取器,泵或其他导管。 +block.conduit.description = 基本液体传输块。像传送带一样工作,但用于液体。最适用于从泵或其他导管中提取液体。 block.pulse-conduit.description = 高级液体传输块。比标准导管更快地输送液体并储存更多液体。 block.liquid-router.description = 接受来自一个方向的液体并将它们平均输出到最多3个其他方向。也可以储存一定量的液体。用于将液体从一个源分成多个目标。 block.liquid-tank.description = 存储大量液体。当存在对材料的非恒定需求或作为冷却重要块的安全措施时,将其用于创建缓冲区。 diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index 9b00505564..0816c37507 100644 Binary files a/core/assets/sprites/block_colors.png and b/core/assets/sprites/block_colors.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 377a6c22ee..06acf2f5d6 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -48,21 +48,21 @@ mend-projector-top index: -1 mender rotate: false - xy: 1347, 889 + xy: 1443, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-icon-full rotate: false - xy: 1347, 889 + xy: 1443, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-top rotate: false - xy: 1347, 855 + xy: 1443, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -90,343 +90,490 @@ overdrive-projector-top index: -1 shock-mine rotate: false - xy: 1415, 721 + xy: 1425, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-arrow rotate: false - xy: 1361, 1095 + xy: 1103, 886 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 1395, 1197 + xy: 1103, 716 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-full rotate: false - xy: 1395, 1197 + xy: 1103, 716 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 1395, 1163 + xy: 1137, 991 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 1395, 1129 + xy: 1137, 957 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 center rotate: false - xy: 1395, 1095 + xy: 1137, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-0-0 + rotate: false + xy: 1037, 376 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-icon-full + rotate: false + xy: 1037, 376 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-0-1 + rotate: false + xy: 1071, 376 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-0-2 + rotate: false + xy: 1033, 342 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-0-3 + rotate: false + xy: 1033, 308 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-1-0 + rotate: false + xy: 1067, 342 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-1-1 + rotate: false + xy: 1067, 308 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-1-2 + rotate: false + xy: 1033, 274 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-1-3 + rotate: false + xy: 1067, 274 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-2-0 + rotate: false + xy: 1029, 240 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-2-1 + rotate: false + xy: 1029, 206 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-2-2 + rotate: false + xy: 1063, 240 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-2-3 + rotate: false + xy: 1063, 206 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-3-0 + rotate: false + xy: 1037, 172 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-3-1 + rotate: false + xy: 1037, 138 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-3-2 + rotate: false + xy: 1037, 104 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-3-3 + rotate: false + xy: 1037, 70 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-4-0 + rotate: false + xy: 1037, 36 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-4-1 + rotate: false + xy: 1071, 172 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-4-2 + rotate: false + xy: 1071, 138 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-4-3 + rotate: false + xy: 1071, 104 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 1063, 212 + xy: 1239, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-icon-full rotate: false - xy: 1063, 212 + xy: 1239, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 1097, 246 + xy: 1205, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 1097, 212 + xy: 1171, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 1135, 416 + xy: 1341, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 1135, 382 + xy: 1307, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 1135, 348 + xy: 1273, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 1131, 314 + xy: 1239, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 1131, 280 + xy: 1205, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 1131, 246 + xy: 1171, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 1131, 212 + xy: 1375, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 1153, 749 + xy: 1341, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 1155, 584 + xy: 1307, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 1361, 1061 + xy: 1273, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 1395, 1061 + xy: 1239, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 1360, 1027 + xy: 1205, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 1394, 1027 + xy: 1171, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 1433, 1333 + xy: 1409, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 1433, 1299 + xy: 1375, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 1429, 1265 + xy: 1341, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 1429, 1231 + xy: 1307, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 1671, 1363 + xy: 1101, 274 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-icon-full rotate: false - xy: 1671, 1363 + xy: 1101, 274 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 1637, 1329 + xy: 1097, 240 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 1671, 1329 + xy: 1097, 206 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 1497, 1295 + xy: 1105, 172 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 1497, 1261 + xy: 1105, 138 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 1531, 1295 + xy: 1105, 104 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 1497, 1227 + xy: 1105, 70 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 1565, 1295 + xy: 1105, 36 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 1531, 1261 + xy: 1123, 2 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 1497, 1193 + xy: 1135, 360 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 1599, 1295 + xy: 1135, 326 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 1565, 1261 + xy: 1135, 292 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 1531, 1227 + xy: 1169, 360 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 1497, 1159 + xy: 1169, 326 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 1633, 1295 + xy: 1169, 292 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 1599, 1261 + xy: 1203, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 1565, 1227 + xy: 1203, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 1531, 1193 + xy: 1237, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 1497, 1125 + xy: 1203, 293 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 1667, 1295 + xy: 1237, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -447,14 +594,14 @@ distributor-icon-full index: -1 junction rotate: false - xy: 1221, 739 + xy: 1349, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-full rotate: false - xy: 1221, 739 + xy: 1349, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -468,77 +615,77 @@ mass-driver-base index: -1 overflow-gate rotate: false - xy: 1347, 821 + xy: 1187, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overflow-gate-icon-full rotate: false - xy: 1347, 821 + xy: 1187, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 1279, 797 + xy: 1255, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-full rotate: false - xy: 1279, 797 + xy: 1255, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 1347, 787 + xy: 1289, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 1381, 789 + xy: 1323, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 1415, 789 + xy: 1187, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router rotate: false - xy: 1463, 1231 + xy: 1289, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router-icon-full rotate: false - xy: 1463, 1231 + xy: 1289, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter rotate: false - xy: 1467, 1329 + xy: 1459, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter-icon-full rotate: false - xy: 1467, 1329 + xy: 1459, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -685,56 +832,70 @@ pneumatic-drill-top index: -1 water-extractor rotate: false - xy: 979, 889 + xy: 913, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 979, 823 + xy: 913, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 913, 757 + xy: 979, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 979, 757 + xy: 913, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 1361, 1197 + xy: 1103, 988 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 1361, 1163 + xy: 1103, 954 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 1361, 1129 + xy: 1103, 920 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 1029, 280 + xy: 1205, 973 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +message + rotate: false + xy: 1443, 837 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +message-icon-full + rotate: false + xy: 1443, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -748,28 +909,28 @@ place-arrow index: -1 rubble-1-0 rotate: false - xy: 1742, 1459 + xy: 1808, 1459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 1808, 1459 + xy: 1874, 1459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 1874, 1459 + xy: 1940, 1459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 1940, 1459 + xy: 723, 96 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -804,189 +965,189 @@ rubble-4-1 index: -1 bridge-conduit rotate: false - xy: 1399, 1333 + xy: 1103, 852 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-icon-full rotate: false - xy: 1399, 1333 + xy: 1103, 852 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 1399, 1299 + xy: 1103, 818 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 1399, 1299 + xy: 1103, 818 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 1395, 1265 + xy: 1103, 784 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 1395, 1231 + xy: 1103, 750 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 1101, 416 + xy: 1137, 753 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 1101, 382 + xy: 1137, 719 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 1033, 348 + xy: 1171, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 1067, 348 + xy: 1205, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 1067, 348 + xy: 1205, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 1067, 348 + xy: 1205, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 1067, 348 + xy: 1205, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 1101, 348 + xy: 1171, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 1063, 314 + xy: 1171, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 1029, 246 + xy: 1273, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 1063, 280 + xy: 1239, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 1097, 314 + xy: 1205, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 1097, 314 + xy: 1205, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 1029, 212 + xy: 1171, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 1063, 246 + xy: 1307, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 1097, 280 + xy: 1273, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 1379, 959 + xy: 1417, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction-icon-full rotate: false - xy: 1379, 959 + xy: 1417, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 1447, 959 + xy: 1213, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 1279, 899 + xy: 1281, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 1279, 865 + xy: 1315, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1014,105 +1175,105 @@ liquid-tank-top index: -1 mechanical-pump rotate: false - xy: 1313, 839 + xy: 1443, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump-icon-full rotate: false - xy: 1313, 839 + xy: 1443, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 1415, 823 + xy: 1255, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-full rotate: false - xy: 1415, 823 + xy: 1255, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 1449, 823 + xy: 1289, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 1483, 823 + xy: 1187, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 1313, 805 + xy: 1221, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 1449, 755 + xy: 1221, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 1483, 755 + xy: 1255, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 1289, 737 + xy: 1289, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 1165, 314 + xy: 1323, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 1165, 280 + xy: 1357, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 1165, 246 + xy: 1391, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 1610, 1463 + xy: 1676, 1463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rotary-pump-icon-full rotate: false - xy: 1610, 1463 + xy: 1676, 1463 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1203,42 +1364,42 @@ omega-mech-pad-icon-full index: -1 tau-mech-pad rotate: false - xy: 979, 1285 + xy: 913, 1219 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tau-mech-pad-icon-full rotate: false - xy: 979, 1285 + xy: 913, 1219 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 trident-ship-pad rotate: false - xy: 979, 1087 + xy: 913, 1021 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 trident-ship-pad-icon-full rotate: false - xy: 979, 1087 + xy: 913, 1021 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 battery rotate: false - xy: 1361, 1265 + xy: 1071, 70 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-full rotate: false - xy: 1361, 1265 + xy: 1071, 70 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1259,21 +1420,21 @@ battery-large-icon-full index: -1 combustion-generator rotate: false - xy: 1067, 416 + xy: 1137, 821 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-icon-full rotate: false - xy: 1067, 416 + xy: 1137, 821 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 1067, 382 + xy: 1137, 787 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1357,14 +1518,14 @@ impact-reactor-plasma-3 index: -1 power-node rotate: false - xy: 1483, 789 + xy: 1255, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-icon-full rotate: false - xy: 1483, 789 + xy: 1255, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1385,56 +1546,56 @@ power-node-large-icon-full index: -1 power-source rotate: false - xy: 1313, 771 + xy: 1289, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void rotate: false - xy: 1381, 755 + xy: 1357, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-full rotate: false - xy: 1381, 755 + xy: 1357, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 1676, 1463 + xy: 1742, 1459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-icon-full rotate: false - xy: 1676, 1463 + xy: 1742, 1459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 1463, 1197 + xy: 1323, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 1467, 1363 + xy: 1459, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-full rotate: false - xy: 1467, 1363 + xy: 1459, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1455,28 +1616,28 @@ solar-panel-large-icon-full index: -1 surge-tower rotate: false - xy: 903, 1351 + xy: 969, 1351 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-tower-icon-full rotate: false - xy: 903, 1351 + xy: 969, 1351 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 913, 1219 + xy: 979, 1219 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator-icon-full rotate: false - xy: 913, 1219 + xy: 979, 1219 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1511,21 +1672,21 @@ thorium-reactor-lights index: -1 turbine-generator rotate: false - xy: 913, 1021 + xy: 979, 1021 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-icon-full rotate: false - xy: 913, 1021 + xy: 979, 1021 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-top rotate: false - xy: 979, 1021 + xy: 913, 955 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1637,42 +1798,42 @@ graphite-press-icon-full index: -1 incinerator rotate: false - xy: 1447, 993 + xy: 1375, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 incinerator-icon-full rotate: false - xy: 1447, 993 + xy: 1375, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source rotate: false - xy: 2006, 1487 + xy: 1417, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-full rotate: false - xy: 2006, 1487 + xy: 1417, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void rotate: false - xy: 1229, 773 + xy: 1315, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-full rotate: false - xy: 1229, 773 + xy: 1315, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1707,28 +1868,28 @@ silicon-smelter-top index: -1 liquid-source rotate: false - xy: 1255, 739 + xy: 1383, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-full rotate: false - xy: 1255, 739 + xy: 1383, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter rotate: false - xy: 1347, 923 + xy: 1443, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter-icon-full rotate: false - xy: 1347, 923 + xy: 1443, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1791,21 +1952,21 @@ plastanium-compressor-top index: -1 pulverizer rotate: false - xy: 1165, 212 + xy: 1221, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 1173, 144 + xy: 1289, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 1173, 110 + xy: 1323, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1826,77 +1987,77 @@ pyratite-mixer-icon-full index: -1 separator rotate: false - xy: 1405, 1425 + xy: 1471, 1397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-full rotate: false - xy: 1405, 1425 + xy: 1471, 1397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 1471, 1397 + xy: 1537, 1397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 1537, 1397 + xy: 1603, 1397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-icon-full rotate: false - xy: 1537, 1397 + xy: 1603, 1397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press rotate: false - xy: 1735, 1393 + xy: 1801, 1393 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame0 rotate: false - xy: 1801, 1393 + xy: 1867, 1393 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame1 rotate: false - xy: 1867, 1393 + xy: 1933, 1393 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame2 rotate: false - xy: 1933, 1393 + xy: 979, 1417 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-liquid rotate: false - xy: 1045, 1417 + xy: 913, 1417 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-top rotate: false - xy: 913, 1417 + xy: 903, 1351 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1987,14 +2148,14 @@ launch-pad-large-icon-full index: -1 unloader rotate: false - xy: 1565, 1193 + xy: 1271, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-full rotate: false - xy: 1565, 1193 + xy: 1271, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2022,7 +2183,7 @@ arc-heat index: -1 block-1 rotate: false - xy: 1361, 1231 + xy: 1071, 36 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2078,35 +2239,35 @@ ripple-heat index: -1 salvo-heat rotate: false - xy: 789, 96 + xy: 855, 96 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 921, 96 + xy: 723, 30 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 723, 30 + xy: 789, 30 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-heat rotate: false - xy: 1517, 925 + xy: 1425, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 1045, 1285 + xy: 1045, 1219 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2230,9 +2391,16 @@ phantom-factory-top orig: 64, 64 offset: 0, 0 index: -1 +rally-point + rotate: false + xy: 1610, 1463 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 repair-point-base rotate: false - xy: 1173, 42 + xy: 1391, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2253,7 +2421,7 @@ revenant-factory-top index: -1 spirit-factory-top rotate: false - xy: 1669, 1397 + xy: 1735, 1393 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2267,21 +2435,21 @@ titan-factory index: -1 wraith-factory-top rotate: false - xy: 1045, 1153 + xy: 1045, 1087 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 1429, 1197 + xy: 1273, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-full rotate: false - xy: 1429, 1197 + xy: 1273, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2302,14 +2470,14 @@ copper-wall-large-icon-full index: -1 door rotate: false - xy: 1037, 76 + xy: 1341, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-icon-full rotate: false - xy: 1037, 76 + xy: 1341, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2337,21 +2505,21 @@ door-large-open index: -1 door-open rotate: false - xy: 1071, 110 + xy: 1307, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 1449, 789 + xy: 1221, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-full rotate: false - xy: 1449, 789 + xy: 1221, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2414,126 +2582,126 @@ scrap-wall-huge3 index: -1 scrap-wall-large1 rotate: false - xy: 921, 30 + xy: 1141, 1425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 1141, 1425 + xy: 1207, 1425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 1207, 1425 + xy: 1273, 1425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 1273, 1425 + xy: 1339, 1425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall1 rotate: false - xy: 1517, 857 + xy: 1357, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-icon-full rotate: false - xy: 1517, 857 + xy: 1357, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall2 rotate: false - xy: 1517, 823 + xy: 1391, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall3 rotate: false - xy: 1517, 789 + xy: 1425, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall4 rotate: false - xy: 1517, 755 + xy: 1357, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall5 rotate: false - xy: 1517, 755 + xy: 1357, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 1535, 1329 + xy: 1021, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-icon-full rotate: false - xy: 1535, 1329 + xy: 1021, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 969, 1351 + xy: 1035, 1351 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-wall-large-icon-full rotate: false - xy: 969, 1351 + xy: 1035, 1351 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 1603, 1329 + xy: 1101, 308 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-icon-full rotate: false - xy: 1603, 1329 + xy: 1101, 308 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 979, 1219 + xy: 913, 1153 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall-large-icon-full rotate: false - xy: 979, 1219 + xy: 913, 1153 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2554,42 +2722,42 @@ thruster-icon-full index: -1 titanium-wall rotate: false - xy: 1633, 1261 + xy: 1271, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-full rotate: false - xy: 1633, 1261 + xy: 1271, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large rotate: false - xy: 913, 1087 + xy: 979, 1087 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titanium-wall-large-icon-full rotate: false - xy: 913, 1087 + xy: 979, 1087 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 bullet rotate: false - xy: 979, 405 + xy: 979, 347 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 979, 351 + xy: 979, 293 size: 52, 52 orig: 52, 52 offset: 0, 0 @@ -2610,14 +2778,14 @@ circle-shadow index: -1 error rotate: false - xy: 1351, 1375 + xy: 1087, 460 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser rotate: false - xy: 155, 301 + xy: 387, 40 size: 4, 48 orig: 4, 48 offset: 0, 0 @@ -2631,7 +2799,7 @@ laser-end index: -1 minelaser rotate: false - xy: 155, 251 + xy: 1131, 206 size: 4, 48 orig: 4, 48 offset: 0, 0 @@ -2652,7 +2820,7 @@ missile index: -1 missile-back rotate: false - xy: 1361, 1337 + xy: 2006, 1535 size: 36, 36 orig: 36, 36 offset: 0, 0 @@ -2666,70 +2834,70 @@ scale_marker index: -1 scorch1 rotate: false - xy: 1705, 1295 + xy: 1461, 1257 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch2 rotate: false - xy: 1735, 1291 + xy: 1461, 1155 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch3 rotate: false - xy: 1765, 1291 + xy: 1491, 1257 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch4 rotate: false - xy: 1795, 1291 + xy: 1491, 1155 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch5 rotate: false - xy: 1825, 1291 + xy: 1521, 1257 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 shell rotate: false - xy: 1103, 721 + xy: 2006, 1497 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shell-back rotate: false - xy: 1361, 1299 + xy: 2006, 1459 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shot rotate: false - xy: 1483, 721 + xy: 1459, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 transfer rotate: false - xy: 285, 201 + xy: 1137, 206 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 1599, 1227 + xy: 1237, 293 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2771,77 +2939,77 @@ blast-drill-icon-full index: -1 char-icon-full rotate: false - xy: 1033, 416 + xy: 1137, 889 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs-icon-full rotate: false - xy: 1033, 382 + xy: 1137, 855 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-icon-full rotate: false - xy: 1029, 314 + xy: 1239, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-0 rotate: false - xy: 1429, 1163 + xy: 1239, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-1 rotate: false - xy: 1429, 1129 + xy: 1205, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-2 rotate: false - xy: 1429, 1095 + xy: 1171, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-3 rotate: false - xy: 1429, 1061 + xy: 1409, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-4 rotate: false - xy: 1428, 1027 + xy: 1375, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-5 rotate: false - xy: 1163, 550 + xy: 1341, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-6 rotate: false - xy: 1163, 516 + xy: 1307, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-7 rotate: false - xy: 1163, 482 + xy: 1273, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3072,7 +3240,7 @@ cracks-5-7 index: -1 craters-icon-full rotate: false - xy: 1203, 807 + xy: 1239, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3121,77 +3289,77 @@ dagger-factory-icon-full index: -1 dark-metal-icon-full rotate: false - xy: 1195, 773 + xy: 1205, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-full rotate: false - xy: 1187, 739 + xy: 1171, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-full rotate: false - xy: 1345, 991 + xy: 1409, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-full rotate: false - xy: 1379, 993 + xy: 1375, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-full rotate: false - xy: 1413, 993 + xy: 1341, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-full rotate: false - xy: 1037, 178 + xy: 1307, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-full rotate: false - xy: 1037, 144 + xy: 1273, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-full rotate: false - xy: 1071, 178 + xy: 1239, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-full rotate: false - xy: 1037, 110 + xy: 1205, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-full rotate: false - xy: 1071, 144 + xy: 1409, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-full rotate: false - xy: 1105, 178 + xy: 1375, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3205,21 +3373,21 @@ draug-factory-icon-full index: -1 dunerocks-icon-full rotate: false - xy: 1105, 144 + xy: 1273, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo rotate: false - xy: 1071, 76 + xy: 1239, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-full rotate: false - xy: 1105, 110 + xy: 1409, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3254,63 +3422,63 @@ ghoul-factory-icon-full index: -1 grass-icon-full rotate: false - xy: 1105, 76 + xy: 1375, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail rotate: false - xy: 1037, 42 + xy: 1341, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail-icon-full rotate: false - xy: 1071, 42 + xy: 1307, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone-icon-full rotate: false - xy: 1105, 42 + xy: 1273, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-full rotate: false - xy: 1139, 178 + xy: 1409, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-full rotate: false - xy: 1139, 144 + xy: 1375, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-full rotate: false - xy: 1139, 110 + xy: 1341, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-icon-full rotate: false - xy: 1139, 76 + xy: 1307, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock-icon-full rotate: false - xy: 1139, 42 + xy: 1409, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3338,14 +3506,14 @@ item-blast-compound-small index: -1 item-blast-compound-xlarge rotate: false - xy: 1029, 576 + xy: 1161, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-blast-compound-xxlarge rotate: false - xy: 1111, 1159 + xy: 1137, 394 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3366,14 +3534,14 @@ item-coal-small index: -1 item-coal-xlarge rotate: false - xy: 1203, 883 + xy: 1203, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-coal-xxlarge rotate: false - xy: 1161, 1325 + xy: 1101, 1367 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3394,14 +3562,14 @@ item-copper-small index: -1 item-copper-xlarge rotate: false - xy: 1253, 933 + xy: 1245, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-copper-xxlarge rotate: false - xy: 1211, 1325 + xy: 1151, 1375 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3422,14 +3590,14 @@ item-graphite-small index: -1 item-graphite-xlarge rotate: false - xy: 1303, 983 + xy: 1287, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-graphite-xxlarge rotate: false - xy: 1161, 1275 + xy: 1201, 1375 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3450,14 +3618,14 @@ item-lead-small index: -1 item-lead-xlarge rotate: false - xy: 1153, 783 + xy: 1329, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-lead-xxlarge rotate: false - xy: 1261, 1325 + xy: 1251, 1375 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3471,21 +3639,21 @@ item-metaglass-medium index: -1 item-metaglass-small rotate: false - xy: 877, 1441 + xy: 1451, 1407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-metaglass-xlarge rotate: false - xy: 1071, 576 + xy: 1371, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-metaglass-xxlarge rotate: false - xy: 1211, 1275 + xy: 1301, 1375 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3499,273 +3667,273 @@ item-phase-fabric-medium index: -1 item-phase-fabric-small rotate: false - xy: 895, 1441 + xy: 877, 1441 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-phase-fabric-xlarge rotate: false - xy: 1203, 841 + xy: 1413, 1083 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-phase-fabric-xxlarge rotate: false - xy: 1161, 1225 + xy: 1351, 1375 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-plastanium-medium rotate: false - xy: 1111, 1457 + xy: 361, 64 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-plastanium-small rotate: false - xy: 197, 5 + xy: 895, 1441 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-plastanium-xlarge rotate: false - xy: 1113, 576 + xy: 1110, 1025 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-plastanium-xxlarge rotate: false - xy: 1311, 1325 + xy: 1401, 1375 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-pyratite-medium rotate: false - xy: 1163, 456 + xy: 1111, 1457 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-pyratite-small rotate: false - xy: 1323, 753 + xy: 1145, 667 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-pyratite-xlarge rotate: false - xy: 1037, 534 + xy: 1161, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-pyratite-xxlarge rotate: false - xy: 1261, 1275 + xy: 1111, 1317 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-sand-medium rotate: false - xy: 2006, 1461 + xy: 1105, 384 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-sand-small rotate: false - xy: 1451, 1407 + xy: 197, 5 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-sand-xlarge rotate: false - xy: 1037, 492 + xy: 1203, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-sand-xxlarge rotate: false - xy: 1211, 1225 + xy: 1111, 1267 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-scrap-medium rotate: false - xy: 361, 64 + xy: 1271, 301 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-scrap-small rotate: false - xy: 449, 496 + xy: 1135, 274 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-scrap-xlarge rotate: false - xy: 1079, 534 + xy: 1245, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-scrap-xxlarge rotate: false - xy: 1161, 1175 + xy: 1111, 1217 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-silicon-medium rotate: false - xy: 429, 32 + xy: 1305, 335 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-silicon-small rotate: false - xy: 245, 1170 + xy: 1131, 256 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-silicon-xlarge rotate: false - xy: 1079, 492 + xy: 1287, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-silicon-xxlarge rotate: false - xy: 1311, 1275 + xy: 1111, 1167 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-spore-pod-medium rotate: false - xy: 1257, 713 + xy: 1339, 369 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-small rotate: false - xy: 1111, 1439 + xy: 1521, 1213 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-spore-pod-xlarge rotate: false - xy: 1121, 534 + xy: 1329, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-spore-pod-xxlarge rotate: false - xy: 1261, 1225 + xy: 1111, 1117 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-surge-alloy-medium rotate: false - xy: 1467, 1303 + xy: 1461, 1129 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-surge-alloy-small rotate: false - xy: 1497, 1081 + xy: 1986, 1931 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-surge-alloy-xlarge rotate: false - xy: 1121, 492 + xy: 1371, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-surge-alloy-xxlarge rotate: false - xy: 1211, 1175 + xy: 1161, 1325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-thorium-medium rotate: false - xy: 1497, 1099 + xy: 1521, 1231 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-thorium-small rotate: false - xy: 1855, 1349 + xy: 475, 496 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-thorium-xlarge rotate: false - xy: 1037, 450 + xy: 1413, 1041 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-thorium-xxlarge rotate: false - xy: 1311, 1225 + xy: 1211, 1325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-titanium-medium rotate: false - xy: 1633, 1235 + xy: 1960, 1923 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-titanium-small rotate: false - xy: 1881, 1375 + xy: 271, 1170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-titanium-xlarge rotate: false - xy: 1079, 450 + xy: 2006, 1615 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-titanium-xxlarge rotate: false - xy: 1261, 1175 + xy: 1161, 1275 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3793,7 +3961,7 @@ laser-drill-icon-full index: -1 liquid-router-icon-full rotate: false - xy: 1481, 959 + xy: 1247, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3807,7 +3975,7 @@ liquid-tank-icon-full index: -1 magmarock-icon-full rotate: false - xy: 1313, 873 + xy: 1443, 1007 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3828,35 +3996,35 @@ mass-driver-icon-full index: -1 mech-icon-alpha-mech rotate: false - xy: 1261, 1125 + xy: 1311, 1325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 1311, 1125 + xy: 1261, 1275 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 1111, 1109 + xy: 1211, 1225 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-glaive-ship rotate: false - xy: 1045, 892 + xy: 1045, 826 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-icon-javelin-ship rotate: false - xy: 1110, 1059 + xy: 1161, 1175 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3870,14 +4038,14 @@ mech-icon-omega-mech index: -1 mech-icon-tau-mech rotate: false - xy: 1045, 834 + xy: 1045, 768 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-icon-trident-ship rotate: false - xy: 1045, 776 + xy: 1045, 710 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -3905,42 +4073,42 @@ meltdown-icon-full index: -1 metal-floor-2-icon-full rotate: false - xy: 1381, 925 + xy: 1443, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-icon-full rotate: false - xy: 1381, 891 + xy: 1443, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-icon-full rotate: false - xy: 1415, 925 + xy: 1443, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged-icon-full rotate: false - xy: 1381, 857 + xy: 1451, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-icon-full rotate: false - xy: 1415, 891 + xy: 1451, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss-icon-full rotate: false - xy: 1449, 925 + xy: 1451, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3954,175 +4122,175 @@ oil-extractor-icon-full index: -1 ore-coal-icon-full rotate: false - xy: 1415, 857 + xy: 1187, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal-icon-medium rotate: false - xy: 1415, 857 + xy: 1187, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal-icon-large rotate: false - xy: 1103, 1009 + xy: 1361, 1325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-coal-icon-small rotate: false - xy: 1599, 1201 + xy: 449, 488 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-copper-icon-full rotate: false - xy: 1449, 891 + xy: 1187, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper-icon-medium rotate: false - xy: 1449, 891 + xy: 1187, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper-icon-large rotate: false - xy: 1103, 959 + xy: 1311, 1275 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-copper-icon-small rotate: false - xy: 1565, 1167 + xy: 245, 1162 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-lead-icon-full rotate: false - xy: 1449, 857 + xy: 1221, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead-icon-medium rotate: false - xy: 1449, 857 + xy: 1221, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead-icon-large rotate: false - xy: 1103, 909 + xy: 1261, 1225 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-lead-icon-small rotate: false - xy: 1531, 1133 + xy: 361, 38 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-scrap-icon-full rotate: false - xy: 1483, 925 + xy: 1187, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap-icon-medium rotate: false - xy: 1483, 925 + xy: 1187, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap-icon-large rotate: false - xy: 1103, 859 + xy: 1211, 1175 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-scrap-icon-small rotate: false - xy: 1667, 1269 + xy: 1111, 1431 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-thorium-icon-full rotate: false - xy: 1483, 891 + xy: 1221, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium-icon-medium rotate: false - xy: 1483, 891 + xy: 1221, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium-icon-large rotate: false - xy: 1103, 809 + xy: 1161, 1125 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-thorium-icon-small rotate: false - xy: 1855, 1367 + xy: 1365, 369 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-titanium-icon-full rotate: false - xy: 1483, 857 + xy: 1255, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium-icon-medium rotate: false - xy: 1483, 857 + xy: 1255, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium-icon-large rotate: false - xy: 1103, 759 + xy: 1361, 1275 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-titanium-icon-small rotate: false - xy: 1960, 1923 + xy: 1487, 1129 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pebbles-icon-full rotate: false - xy: 1381, 823 + xy: 1221, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4143,7 +4311,7 @@ phase-weaver-icon-full index: -1 pine-icon-full rotate: false - xy: 1161, 1075 + xy: 1311, 1225 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4157,35 +4325,35 @@ pneumatic-drill-icon-full index: -1 power-source-icon-full rotate: false - xy: 1347, 753 + xy: 1323, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-full rotate: false - xy: 1415, 755 + xy: 1187, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-full rotate: false - xy: 1173, 178 + xy: 1255, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point rotate: false - xy: 1173, 76 + xy: 1357, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point-icon-full rotate: false - xy: 1191, 8 + xy: 1425, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4213,175 +4381,175 @@ ripple-icon-full index: -1 rock-icon-full rotate: false - xy: 1311, 1075 + xy: 1361, 1225 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-icon-full rotate: false - xy: 1463, 1265 + xy: 1255, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-full rotate: false - xy: 1463, 1163 + xy: 1357, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks-icon-full rotate: false - xy: 1463, 1129 + xy: 1391, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo rotate: false - xy: 723, 96 + xy: 789, 96 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-icon-full rotate: false - xy: 855, 96 + xy: 921, 96 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sand-boulder-icon-full rotate: false - xy: 1463, 1095 + xy: 1425, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-full rotate: false - xy: 1463, 1061 + xy: 1289, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-full rotate: false - xy: 1496, 1027 + xy: 1323, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-icon-full rotate: false - xy: 1515, 993 + xy: 1357, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter rotate: false - xy: 789, 30 + xy: 855, 30 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter-icon-full rotate: false - xy: 855, 30 + xy: 921, 30 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch rotate: false - xy: 1515, 959 + xy: 1391, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scorch-icon-full rotate: false - xy: 1517, 891 + xy: 1323, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-full rotate: false - xy: 1339, 1425 + xy: 1405, 1425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shale-boulder-icon-full rotate: false - xy: 361, 24 + xy: 1391, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-full rotate: false - xy: 395, 24 + xy: 1425, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-full rotate: false - xy: 1381, 721 + xy: 1391, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-full rotate: false - xy: 1449, 721 + xy: 1425, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-full rotate: false - xy: 1517, 721 + xy: 1459, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-icon-full rotate: false - xy: 1189, 705 + xy: 1459, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-full rotate: false - xy: 1210, 1025 + xy: 1261, 1125 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock-icon-full rotate: false - xy: 1260, 1025 + xy: 1361, 1175 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-icon-full rotate: false - xy: 1223, 705 + xy: 1459, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-full rotate: false - xy: 1501, 1363 + xy: 1459, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4402,84 +4570,84 @@ spectre-icon-full index: -1 spirit-factory-icon-full rotate: false - xy: 1603, 1397 + xy: 1669, 1397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-cluster-icon-full rotate: false - xy: 1121, 450 + xy: 2006, 1573 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-moss-icon-full rotate: false - xy: 1535, 1363 + xy: 1455, 1091 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine-icon-full rotate: false - xy: 1153, 975 + xy: 1361, 1125 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-full rotate: false - xy: 979, 1417 + xy: 1045, 1417 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sporerocks-icon-full rotate: false - xy: 1501, 1329 + xy: 1455, 1057 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-full rotate: false - xy: 1569, 1363 + xy: 987, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer rotate: false - xy: 1035, 1351 + xy: 913, 1285 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-full rotate: false - xy: 913, 1285 + xy: 979, 1285 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tainted-water-icon-full rotate: false - xy: 1603, 1363 + xy: 1055, 2 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-full rotate: false - xy: 1569, 1329 + xy: 1089, 2 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tendrils-icon-full rotate: false - xy: 1637, 1363 + xy: 1101, 342 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4500,14 +4668,14 @@ unit-icon-chaos-array index: -1 unit-icon-crawler rotate: false - xy: 1203, 925 + xy: 1411, 1175 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 1253, 975 + xy: 1411, 1125 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4521,49 +4689,49 @@ unit-icon-eradicator index: -1 unit-icon-eruptor rotate: false - xy: 913, 955 + xy: 979, 955 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-icon-fortress rotate: false - xy: 979, 955 + xy: 913, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-icon-titan rotate: false - xy: 913, 889 + xy: 979, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-icon-full rotate: false - xy: 913, 823 + xy: 979, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-icon-full rotate: false - xy: 1531, 1159 + xy: 1305, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave rotate: false - xy: 913, 691 + xy: 979, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-full rotate: false - xy: 979, 691 + xy: 1045, 1285 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4584,147 +4752,147 @@ white-tree-icon-full index: -1 wraith-factory-icon-full rotate: false - xy: 1045, 1219 + xy: 1045, 1153 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 1462, 1027 + xy: 1341, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal rotate: false - xy: 1481, 993 + xy: 1409, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper rotate: false - xy: 987, 9 + xy: 1375, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite rotate: false - xy: 1021, 8 + xy: 1409, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead rotate: false - xy: 1055, 8 + xy: 1145, 685 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass rotate: false - xy: 1089, 8 + xy: 1179, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 1123, 8 + xy: 1213, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 1157, 8 + xy: 1247, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 2006, 1623 + xy: 1281, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand rotate: false - xy: 2006, 1589 + xy: 1315, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap rotate: false - xy: 2006, 1555 + xy: 1349, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 2006, 1521 + xy: 1383, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod rotate: false - xy: 1245, 891 + xy: 1179, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 1245, 857 + xy: 1213, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 1245, 823 + xy: 1247, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 1295, 941 + xy: 1281, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid rotate: false - xy: 1345, 957 + xy: 1383, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil rotate: false - xy: 1413, 959 + xy: 1179, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag rotate: false - xy: 1279, 831 + xy: 1349, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water rotate: false - xy: 1313, 907 + xy: 1417, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4745,35 +4913,35 @@ alpha-mech-base index: -1 alpha-mech-leg rotate: false - xy: 979, 301 + xy: 979, 243 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech rotate: false - xy: 1151, 1375 + xy: 1087, 560 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-base rotate: false - xy: 1201, 1375 + xy: 1037, 460 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 1251, 1375 + xy: 1087, 510 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 1045, 718 + xy: 913, 633 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -4787,42 +4955,42 @@ omega-mech-armor index: -1 omega-mech-base rotate: false - xy: 913, 633 + xy: 913, 575 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 omega-mech-leg rotate: false - xy: 913, 575 + xy: 971, 633 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 979, 517 + xy: 979, 459 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 1203, 975 + xy: 1411, 1275 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 1153, 875 + xy: 1411, 1225 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 1101, 1367 + xy: 1037, 510 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4836,28 +5004,28 @@ glaive-ship index: -1 javelin-ship rotate: false - xy: 1311, 1175 + xy: 1261, 1325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 1161, 1125 + xy: 1211, 1275 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 979, 459 + xy: 979, 401 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 blank rotate: false - xy: 1029, 348 + xy: 1110, 1022 size: 1, 1 orig: 1, 1 offset: 0, 0 @@ -4871,7 +5039,7 @@ circle index: -1 shape-3 rotate: false - xy: 1045, 1088 + xy: 1045, 1022 size: 63, 63 orig: 63, 63 offset: 0, 0 @@ -4899,49 +5067,49 @@ chaos-array-leg index: -1 crawler rotate: false - xy: 1079, 618 + xy: 987, 85 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-base rotate: false - xy: 1095, 668 + xy: 987, 35 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-leg rotate: false - xy: 1129, 618 + xy: 1079, 610 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger rotate: false - xy: 987, 143 + xy: 1095, 660 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 987, 93 + xy: 1129, 610 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 987, 43 + xy: 1037, 560 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 draug rotate: false - xy: 1301, 1375 + xy: 1037, 410 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5032,14 +5200,14 @@ lich index: -1 phantom rotate: false - xy: 971, 633 + xy: 971, 575 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 power-cell rotate: false - xy: 971, 575 + xy: 979, 517 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -5060,70 +5228,70 @@ revenant index: -1 spirit rotate: false - xy: 1310, 1025 + xy: 1311, 1125 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan rotate: false - xy: 913, 1153 + xy: 979, 1153 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 979, 1153 + xy: 913, 1087 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith rotate: false - xy: 1153, 825 + xy: 1111, 1067 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 artillery-equip rotate: false - xy: 979, 243 + xy: 979, 185 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 979, 193 + xy: 1045, 660 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bomber-equip rotate: false - xy: 1045, 668 + xy: 1029, 610 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 1045, 668 + xy: 1029, 610 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 chain-blaster-equip rotate: false - xy: 1029, 618 + xy: 987, 135 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 chaos-equip rotate: false - xy: 1045, 950 + xy: 1045, 884 size: 56, 136 orig: 56, 136 offset: 0, 0 @@ -5137,2132 +5305,69 @@ eradication-equip index: -1 eruption-equip rotate: false - xy: 1401, 1367 + xy: 1137, 552 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flakgun-equip rotate: false - xy: 1111, 1317 + xy: 1087, 410 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 1111, 1259 + xy: 1137, 494 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 heal-blaster-equip rotate: false - xy: 1111, 1209 + xy: 1137, 444 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lich-missiles-equip rotate: false - xy: 1211, 1125 + xy: 1161, 1225 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 reaper-gun-equip rotate: false - xy: 1211, 1075 + xy: 1261, 1175 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-missiles-equip rotate: false - xy: 1261, 1075 + xy: 1211, 1125 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 1160, 1025 + xy: 1311, 1175 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 1153, 925 + xy: 1411, 1325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sprites2.png -size: 2048,1024 -format: RGBA8888 -filter: Nearest,Nearest -repeat: none -alloy-smelter-icon-editor - rotate: false - xy: 1, 15 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -arc-icon-editor - rotate: false - xy: 261, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -battery-icon-editor - rotate: false - xy: 427, 87 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -battery-large-icon-editor - rotate: false - xy: 745, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -blast-drill-icon-editor - rotate: false - xy: 1, 243 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -blast-mixer-icon-editor - rotate: false - xy: 745, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -block-border-editor - rotate: false - xy: 477, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -bridge-conduit-icon-editor - rotate: false - xy: 611, 391 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -bridge-conveyor-icon-editor - rotate: false - xy: 427, 53 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -char-icon-editor - rotate: false - xy: 511, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-char1 - rotate: false - xy: 511, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -clear-editor - rotate: false - xy: 261, 370 - size: 1, 1 - orig: 1, 1 - offset: 0, 0 - index: -1 -cliffs-icon-editor - rotate: false - xy: 645, 391 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -coal-centrifuge-icon-editor - rotate: false - xy: 811, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -combustion-generator-icon-editor - rotate: false - xy: 679, 391 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -command-center-icon-editor - rotate: false - xy: 877, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -conduit-icon-editor - rotate: false - xy: 295, 5 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -container-icon-editor - rotate: false - xy: 943, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -conveyor-icon-editor - rotate: false - xy: 329, 5 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -copper-wall-icon-editor - rotate: false - xy: 363, 5 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -copper-wall-large-icon-editor - rotate: false - xy: 1009, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -core-foundation-icon-editor - rotate: false - xy: 323, 725 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -core-nucleus-icon-editor - rotate: false - xy: 323, 855 - size: 160, 160 - orig: 160, 160 - offset: 0, 0 - index: -1 -core-shard-icon-editor - rotate: false - xy: 99, 15 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -craters-icon-editor - rotate: false - xy: 397, 5 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-craters1 - rotate: false - xy: 397, 5 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -crawler-factory-icon-editor - rotate: false - xy: 1075, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -cryofluidmixer-icon-editor - rotate: false - xy: 1141, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -cultivator-icon-editor - rotate: false - xy: 1207, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -cyclone-icon-editor - rotate: false - xy: 843, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -dagger-factory-icon-editor - rotate: false - xy: 1273, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -dark-metal-icon-editor - rotate: false - xy: 461, 87 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dark-panel-1-icon-editor - rotate: false - xy: 461, 53 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-dark-panel-1 - rotate: false - xy: 461, 53 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dark-panel-2-icon-editor - rotate: false - xy: 431, 19 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-dark-panel-2 - rotate: false - xy: 431, 19 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dark-panel-3-icon-editor - rotate: false - xy: 465, 19 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-dark-panel-3 - rotate: false - xy: 465, 19 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dark-panel-4-icon-editor - rotate: false - xy: 495, 103 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-dark-panel-4 - rotate: false - xy: 495, 103 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dark-panel-5-icon-editor - rotate: false - xy: 495, 69 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-dark-panel-5 - rotate: false - xy: 495, 69 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dark-panel-6-icon-editor - rotate: false - xy: 529, 103 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-dark-panel-6 - rotate: false - xy: 529, 103 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -darksand-icon-editor - rotate: false - xy: 529, 69 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand1 - rotate: false - xy: 529, 69 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -darksand-tainted-water-icon-editor - rotate: false - xy: 545, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand-tainted-water - rotate: false - xy: 545, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -darksand-water-icon-editor - rotate: false - xy: 499, 35 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand-water - rotate: false - xy: 499, 35 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dart-mech-pad-icon-editor - rotate: false - xy: 1339, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -deepwater-icon-editor - rotate: false - xy: 533, 35 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-deepwater - rotate: false - xy: 533, 35 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -delta-mech-pad-icon-editor - rotate: false - xy: 1405, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -differential-generator-icon-editor - rotate: false - xy: 941, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -distributor-icon-editor - rotate: false - xy: 1471, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -door-icon-editor - rotate: false - xy: 499, 1 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -door-large-icon-editor - rotate: false - xy: 1537, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -draug-factory-icon-editor - rotate: false - xy: 1603, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -dunerocks-icon-editor - rotate: false - xy: 533, 1 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -duo-icon-editor - rotate: false - xy: 563, 103 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-char2 - rotate: false - xy: 563, 69 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-char3 - rotate: false - xy: 567, 35 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-clear - rotate: false - xy: 733, 875 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -editor-craters2 - rotate: false - xy: 567, 1 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-craters3 - rotate: false - xy: 611, 357 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand2 - rotate: false - xy: 645, 357 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand3 - rotate: false - xy: 679, 357 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-grass1 - rotate: false - xy: 569, 349 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -grass-icon-editor - rotate: false - xy: 569, 349 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-grass2 - rotate: false - xy: 555, 315 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-grass3 - rotate: false - xy: 555, 281 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-holostone1 - rotate: false - xy: 555, 247 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -holostone-icon-editor - rotate: false - xy: 555, 247 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-holostone2 - rotate: false - xy: 555, 213 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-holostone3 - rotate: false - xy: 555, 179 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-hotrock1 - rotate: false - xy: 589, 315 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -hotrock-icon-editor - rotate: false - xy: 589, 315 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-hotrock2 - rotate: false - xy: 589, 281 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-hotrock3 - rotate: false - xy: 589, 247 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice-snow1 - rotate: false - xy: 623, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ice-snow-icon-editor - rotate: false - xy: 623, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice-snow2 - rotate: false - xy: 623, 289 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice-snow3 - rotate: false - xy: 657, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice1 - rotate: false - xy: 589, 213 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ice-icon-editor - rotate: false - xy: 589, 213 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice2 - rotate: false - xy: 589, 179 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice3 - rotate: false - xy: 579, 145 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ignarock1 - rotate: false - xy: 623, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ignarock-icon-editor - rotate: false - xy: 623, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ignarock2 - rotate: false - xy: 657, 289 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ignarock3 - rotate: false - xy: 623, 221 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-magmarock1 - rotate: false - xy: 657, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -magmarock-icon-editor - rotate: false - xy: 657, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-magmarock2 - rotate: false - xy: 623, 187 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-magmarock3 - rotate: false - xy: 657, 221 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor - rotate: false - xy: 657, 187 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-icon-editor - rotate: false - xy: 657, 187 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-2 - rotate: false - xy: 691, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-2-icon-editor - rotate: false - xy: 691, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-3 - rotate: false - xy: 691, 289 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-3-icon-editor - rotate: false - xy: 691, 289 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-5 - rotate: false - xy: 691, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-5-icon-editor - rotate: false - xy: 691, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged1 - rotate: false - xy: 691, 221 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged-icon-editor - rotate: false - xy: 691, 221 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged2 - rotate: false - xy: 691, 187 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged3 - rotate: false - xy: 613, 145 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss1 - rotate: false - xy: 597, 111 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -moss-icon-editor - rotate: false - xy: 597, 111 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss2 - rotate: false - xy: 597, 77 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss3 - rotate: false - xy: 647, 153 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-coal1 - rotate: false - xy: 681, 153 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-coal2 - rotate: false - xy: 601, 43 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-coal3 - rotate: false - xy: 601, 9 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-copper1 - rotate: false - xy: 631, 111 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-copper2 - rotate: false - xy: 631, 77 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-copper3 - rotate: false - xy: 635, 43 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-lead1 - rotate: false - xy: 635, 9 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-lead2 - rotate: false - xy: 665, 119 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-lead3 - rotate: false - xy: 665, 85 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-scrap1 - rotate: false - xy: 669, 51 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-scrap2 - rotate: false - xy: 669, 17 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-scrap3 - rotate: false - xy: 699, 119 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-thorium1 - rotate: false - xy: 699, 85 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-thorium2 - rotate: false - xy: 703, 51 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-thorium3 - rotate: false - xy: 703, 17 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-titanium1 - rotate: false - xy: 715, 153 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-titanium2 - rotate: false - xy: 733, 119 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-titanium3 - rotate: false - xy: 733, 85 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-pebbles1 - rotate: false - xy: 737, 51 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-pebbles2 - rotate: false - xy: 737, 17 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-pebbles3 - rotate: false - xy: 713, 391 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-salt - rotate: false - xy: 713, 357 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -salt-icon-editor - rotate: false - xy: 713, 357 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand-water - rotate: false - xy: 725, 221 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sand-water-icon-editor - rotate: false - xy: 725, 221 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand1 - rotate: false - xy: 725, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sand-icon-editor - rotate: false - xy: 725, 323 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand2 - rotate: false - xy: 725, 289 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand3 - rotate: false - xy: 725, 255 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-shale1 - rotate: false - xy: 725, 187 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shale-icon-editor - rotate: false - xy: 725, 187 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-shale2 - rotate: false - xy: 749, 153 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-shale3 - rotate: false - xy: 767, 119 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-snow1 - rotate: false - xy: 767, 85 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-snow2 - rotate: false - xy: 771, 51 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-snow3 - rotate: false - xy: 771, 17 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spawn - rotate: false - xy: 733, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spore-moss1 - rotate: false - xy: 767, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -spore-moss-icon-editor - rotate: false - xy: 767, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spore-moss2 - rotate: false - xy: 801, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spore-moss3 - rotate: false - xy: 835, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-stone1 - rotate: false - xy: 869, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -stone-icon-editor - rotate: false - xy: 869, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-stone2 - rotate: false - xy: 903, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-stone3 - rotate: false - xy: 937, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tainted-water - rotate: false - xy: 971, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -tainted-water-icon-editor - rotate: false - xy: 971, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tar - rotate: false - xy: 1005, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -tar-icon-editor - rotate: false - xy: 1005, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tendrils1 - rotate: false - xy: 1039, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tendrils2 - rotate: false - xy: 1073, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tendrils3 - rotate: false - xy: 1107, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-water - rotate: false - xy: 1141, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -water-icon-editor - rotate: false - xy: 1141, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -force-projector-icon-editor - rotate: false - xy: 1039, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -fortress-factory-icon-editor - rotate: false - xy: 1137, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -fuse-icon-editor - rotate: false - xy: 1235, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -ghoul-factory-icon-editor - rotate: false - xy: 1333, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -glaive-ship-pad-icon-editor - rotate: false - xy: 1431, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -graphite-press-icon-editor - rotate: false - xy: 1669, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -hail-icon-editor - rotate: false - xy: 1175, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icerocks-icon-editor - rotate: false - xy: 1209, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -impact-reactor-icon-editor - rotate: false - xy: 485, 887 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -incinerator-icon-editor - rotate: false - xy: 1243, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-source-icon-editor - rotate: false - xy: 1277, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-void-icon-editor - rotate: false - xy: 1311, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -javelin-ship-pad-icon-editor - rotate: false - xy: 1735, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -junction-icon-editor - rotate: false - xy: 1345, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -kiln-icon-editor - rotate: false - xy: 1801, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -lancer-icon-editor - rotate: false - xy: 1867, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -laser-drill-icon-editor - rotate: false - xy: 1529, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -launch-pad-icon-editor - rotate: false - xy: 1627, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -launch-pad-large-icon-editor - rotate: false - xy: 1, 113 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -liquid-junction-icon-editor - rotate: false - xy: 1379, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-router-icon-editor - rotate: false - xy: 1413, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-source-icon-editor - rotate: false - xy: 1447, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-tank-icon-editor - rotate: false - xy: 1725, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -mass-driver-icon-editor - rotate: false - xy: 1823, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -mechanical-drill-icon-editor - rotate: false - xy: 1933, 853 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -mechanical-pump-icon-editor - rotate: false - xy: 1481, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -meltdown-icon-editor - rotate: false - xy: 131, 243 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -melter-icon-editor - rotate: false - xy: 1515, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mend-projector-icon-editor - rotate: false - xy: 485, 821 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -mender-icon-editor - rotate: false - xy: 1549, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -multi-press-icon-editor - rotate: false - xy: 1921, 919 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -oil-extractor-icon-editor - rotate: false - xy: 323, 367 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -omega-mech-pad-icon-editor - rotate: false - xy: 197, 15 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -overdrive-projector-icon-editor - rotate: false - xy: 551, 821 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -overflow-gate-icon-editor - rotate: false - xy: 1583, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pebbles-icon-editor - rotate: false - xy: 1617, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phantom-factory-icon-editor - rotate: false - xy: 617, 821 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -phase-conduit-icon-editor - rotate: false - xy: 1651, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conveyor-icon-editor - rotate: false - xy: 1685, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-wall-icon-editor - rotate: false - xy: 1719, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-wall-large-icon-editor - rotate: false - xy: 453, 755 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -phase-weaver-icon-editor - rotate: false - xy: 519, 755 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -pine-icon-editor - rotate: false - xy: 1999, 869 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -plastanium-compressor-icon-editor - rotate: false - xy: 453, 689 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -pneumatic-drill-icon-editor - rotate: false - xy: 519, 689 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -power-node-icon-editor - rotate: false - xy: 1753, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -power-node-large-icon-editor - rotate: false - xy: 585, 755 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -power-source-icon-editor - rotate: false - xy: 1787, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -power-void-icon-editor - rotate: false - xy: 1821, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-icon-editor - rotate: false - xy: 1855, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulverizer-icon-editor - rotate: false - xy: 1889, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pyratite-mixer-icon-editor - rotate: false - xy: 453, 623 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -repair-point-icon-editor - rotate: false - xy: 1923, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -revenant-factory-icon-editor - rotate: false - xy: 323, 595 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -ripple-icon-editor - rotate: false - xy: 261, 269 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -rock-icon-editor - rotate: false - xy: 1999, 819 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -rocks-icon-editor - rotate: false - xy: 1957, 819 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -rotary-pump-icon-editor - rotate: false - xy: 519, 623 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -router-icon-editor - rotate: false - xy: 717, 785 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -rtg-generator-icon-editor - rotate: false - xy: 585, 689 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -saltrocks-icon-editor - rotate: false - xy: 717, 751 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -salvo-icon-editor - rotate: false - xy: 453, 557 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -sand-boulder-icon-editor - rotate: false - xy: 751, 785 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sandrocks-icon-editor - rotate: false - xy: 717, 717 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scatter-icon-editor - rotate: false - xy: 519, 557 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -scorch-icon-editor - rotate: false - xy: 785, 785 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall-gigantic-icon-editor - rotate: false - xy: 615, 887 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -scrap-wall-huge-icon-editor - rotate: false - xy: 261, 171 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -scrap-wall-icon-editor - rotate: false - xy: 751, 751 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall-large-icon-editor - rotate: false - xy: 585, 623 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -separator-icon-editor - rotate: false - xy: 453, 491 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -shale-boulder-icon-editor - rotate: false - xy: 717, 683 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shalerocks-icon-editor - rotate: false - xy: 819, 785 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shock-mine-icon-editor - rotate: false - xy: 785, 751 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shrubs-icon-editor - rotate: false - xy: 751, 717 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -silicon-smelter-icon-editor - rotate: false - xy: 519, 491 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -snow-icon-editor - rotate: false - xy: 717, 649 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -snow-pine-icon-editor - rotate: false - xy: 519, 375 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -snowrock-icon-editor - rotate: false - xy: 683, 837 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -snowrocks-icon-editor - rotate: false - xy: 853, 785 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -solar-panel-icon-editor - rotate: false - xy: 819, 751 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -solar-panel-large-icon-editor - rotate: false - xy: 359, 269 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -sorter-icon-editor - rotate: false - xy: 785, 717 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -spawn-icon-editor - rotate: false - xy: 751, 683 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -spectre-icon-editor - rotate: false - xy: 131, 113 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -spirit-factory-icon-editor - rotate: false - xy: 585, 557 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-cluster-icon-editor - rotate: false - xy: 569, 383 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -spore-pine-icon-editor - rotate: false - xy: 427, 121 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -spore-press-icon-editor - rotate: false - xy: 585, 491 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -sporerocks-icon-editor - rotate: false - xy: 717, 615 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -surge-tower-icon-editor - rotate: false - xy: 519, 425 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -surge-wall-icon-editor - rotate: false - xy: 887, 785 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -surge-wall-large-icon-editor - rotate: false - xy: 585, 425 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -swarmer-icon-editor - rotate: false - xy: 651, 755 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -tau-mech-pad-icon-editor - rotate: false - xy: 651, 689 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -tendrils-icon-editor - rotate: false - xy: 853, 751 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -thermal-generator-icon-editor - rotate: false - xy: 651, 623 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -thermal-pump-icon-editor - rotate: false - xy: 359, 171 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -thorium-reactor-icon-editor - rotate: false - xy: 421, 367 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -thorium-wall-icon-editor - rotate: false - xy: 819, 717 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -thorium-wall-large-icon-editor - rotate: false - xy: 651, 557 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -thruster-icon-editor - rotate: false - xy: 323, 465 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -titan-factory-icon-editor - rotate: false - xy: 457, 269 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -titanium-conveyor-icon-editor - rotate: false - xy: 785, 683 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-wall-icon-editor - rotate: false - xy: 751, 649 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-wall-large-icon-editor - rotate: false - xy: 651, 491 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -trident-ship-pad-icon-editor - rotate: false - xy: 651, 425 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -turbine-generator-icon-editor - rotate: false - xy: 295, 105 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -unloader-icon-editor - rotate: false - xy: 717, 581 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -vault-icon-editor - rotate: false - xy: 457, 171 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -water-extractor-icon-editor - rotate: false - xy: 295, 39 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wave-icon-editor - rotate: false - xy: 361, 105 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -white-tree-dead-icon-editor - rotate: false - xy: 1, 695 - size: 320, 320 - orig: 320, 320 - offset: 0, 0 - index: -1 -white-tree-icon-editor - rotate: false - xy: 1, 373 - size: 320, 320 - orig: 320, 320 - offset: 0, 0 - index: -1 -wraith-factory-icon-editor - rotate: false - xy: 361, 39 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 - -sprites3.png -size: 1024,1024 -format: RGBA8888 -filter: Nearest,Nearest -repeat: none -zone-craters - rotate: false - xy: 605, 767 - size: 256, 256 - orig: 256, 256 - offset: 0, 0 - index: -1 -zone-desertWastes - rotate: false - xy: 303, 461 - size: 260, 260 - orig: 260, 260 - offset: 0, 0 - index: -1 -zone-desolateRift - rotate: false - xy: 817, 163 - size: 100, 350 - orig: 100, 350 - offset: 0, 0 - index: -1 -zone-frozenForest - rotate: false - xy: 303, 1 - size: 200, 200 - orig: 200, 200 - offset: 0, 0 - index: -1 -zone-fungalPass - rotate: false - xy: 863, 773 - size: 150, 250 - orig: 150, 250 - offset: 0, 0 - index: -1 -zone-groundZero - rotate: false - xy: 303, 203 - size: 256, 256 - orig: 256, 256 - offset: 0, 0 - index: -1 -zone-nuclearComplex - rotate: false - xy: 605, 515 - size: 250, 250 - orig: 250, 250 - offset: 0, 0 - index: -1 -zone-overgrowth - rotate: false - xy: 1, 723 - size: 300, 300 - orig: 300, 300 - offset: 0, 0 - index: -1 -zone-ruinousShores - rotate: false - xy: 1, 421 - size: 300, 300 - orig: 300, 300 - offset: 0, 0 - index: -1 -zone-saltFlats - rotate: false - xy: 303, 723 - size: 300, 300 - orig: 300, 300 - offset: 0, 0 - index: -1 -zone-stainedMountains - rotate: false - xy: 1, 119 - size: 300, 300 - orig: 300, 300 - offset: 0, 0 - index: -1 -zone-tarFields - rotate: false - xy: 565, 263 - size: 250, 250 - orig: 250, 250 - offset: 0, 0 - index: -1 - -sprites4.png size: 2048,512 format: RGBA8888 filter: Nearest,Nearest @@ -8640,6 +6745,2083 @@ white-tree-dead offset: 0, 0 index: -1 +sprites3.png +size: 2048,1024 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +alloy-smelter-icon-editor + rotate: false + xy: 1, 15 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +arc-icon-editor + rotate: false + xy: 261, 137 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-icon-editor + rotate: false + xy: 427, 87 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +battery-icon-editor + rotate: false + xy: 477, 137 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +battery-large-icon-editor + rotate: false + xy: 745, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +blast-drill-icon-editor + rotate: false + xy: 1, 243 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +blast-mixer-icon-editor + rotate: false + xy: 745, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +block-border-editor + rotate: false + xy: 611, 391 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +bridge-conduit-icon-editor + rotate: false + xy: 427, 53 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +bridge-conveyor-icon-editor + rotate: false + xy: 511, 137 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +char-icon-editor + rotate: false + xy: 645, 391 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-char1 + rotate: false + xy: 645, 391 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +clear-editor + rotate: false + xy: 261, 370 + size: 1, 1 + orig: 1, 1 + offset: 0, 0 + index: -1 +cliffs-icon-editor + rotate: false + xy: 679, 391 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +coal-centrifuge-icon-editor + rotate: false + xy: 811, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +combustion-generator-icon-editor + rotate: false + xy: 295, 5 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +command-center-icon-editor + rotate: false + xy: 877, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +conduit-icon-editor + rotate: false + xy: 329, 5 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +container-icon-editor + rotate: false + xy: 943, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +conveyor-icon-editor + rotate: false + xy: 363, 5 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +copper-wall-icon-editor + rotate: false + xy: 397, 5 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +copper-wall-large-icon-editor + rotate: false + xy: 1009, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +core-foundation-icon-editor + rotate: false + xy: 323, 725 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +core-nucleus-icon-editor + rotate: false + xy: 323, 855 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +core-shard-icon-editor + rotate: false + xy: 99, 15 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +craters-icon-editor + rotate: false + xy: 461, 87 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-craters1 + rotate: false + xy: 461, 87 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +crawler-factory-icon-editor + rotate: false + xy: 1075, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cryofluidmixer-icon-editor + rotate: false + xy: 1141, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cultivator-icon-editor + rotate: false + xy: 1207, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cyclone-icon-editor + rotate: false + xy: 843, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +dagger-factory-icon-editor + rotate: false + xy: 1273, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +dark-metal-icon-editor + rotate: false + xy: 461, 53 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dark-panel-1-icon-editor + rotate: false + xy: 431, 19 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-dark-panel-1 + rotate: false + xy: 431, 19 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dark-panel-2-icon-editor + rotate: false + xy: 465, 19 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-dark-panel-2 + rotate: false + xy: 465, 19 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dark-panel-3-icon-editor + rotate: false + xy: 495, 103 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-dark-panel-3 + rotate: false + xy: 495, 103 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dark-panel-4-icon-editor + rotate: false + xy: 495, 69 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-dark-panel-4 + rotate: false + xy: 495, 69 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dark-panel-5-icon-editor + rotate: false + xy: 529, 103 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-dark-panel-5 + rotate: false + xy: 529, 103 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dark-panel-6-icon-editor + rotate: false + xy: 529, 69 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-dark-panel-6 + rotate: false + xy: 529, 69 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +darksand-icon-editor + rotate: false + xy: 545, 137 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand1 + rotate: false + xy: 545, 137 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +darksand-tainted-water-icon-editor + rotate: false + xy: 499, 35 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand-tainted-water + rotate: false + xy: 499, 35 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +darksand-water-icon-editor + rotate: false + xy: 533, 35 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand-water + rotate: false + xy: 533, 35 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dart-mech-pad-icon-editor + rotate: false + xy: 1339, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +deepwater-icon-editor + rotate: false + xy: 499, 1 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-deepwater + rotate: false + xy: 499, 1 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +delta-mech-pad-icon-editor + rotate: false + xy: 1405, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +differential-generator-icon-editor + rotate: false + xy: 941, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +distributor-icon-editor + rotate: false + xy: 1471, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +door-icon-editor + rotate: false + xy: 533, 1 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +door-large-icon-editor + rotate: false + xy: 1537, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +draug-factory-icon-editor + rotate: false + xy: 1603, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +dunerocks-icon-editor + rotate: false + xy: 563, 103 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +duo-icon-editor + rotate: false + xy: 563, 69 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-char2 + rotate: false + xy: 567, 35 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-char3 + rotate: false + xy: 567, 1 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-clear + rotate: false + xy: 733, 875 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +editor-craters2 + rotate: false + xy: 611, 357 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-craters3 + rotate: false + xy: 645, 357 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand2 + rotate: false + xy: 679, 357 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand3 + rotate: false + xy: 569, 349 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-grass1 + rotate: false + xy: 555, 315 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +grass-icon-editor + rotate: false + xy: 555, 315 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-grass2 + rotate: false + xy: 555, 281 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-grass3 + rotate: false + xy: 555, 247 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-holostone1 + rotate: false + xy: 555, 213 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +holostone-icon-editor + rotate: false + xy: 555, 213 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-holostone2 + rotate: false + xy: 555, 179 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-holostone3 + rotate: false + xy: 589, 315 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-hotrock1 + rotate: false + xy: 589, 281 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hotrock-icon-editor + rotate: false + xy: 589, 281 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-hotrock2 + rotate: false + xy: 589, 247 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-hotrock3 + rotate: false + xy: 589, 213 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice-snow1 + rotate: false + xy: 623, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ice-snow-icon-editor + rotate: false + xy: 623, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice-snow2 + rotate: false + xy: 657, 323 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice-snow3 + rotate: false + xy: 623, 255 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice1 + rotate: false + xy: 589, 179 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ice-icon-editor + rotate: false + xy: 589, 179 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice2 + rotate: false + xy: 579, 145 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice3 + rotate: false + xy: 623, 323 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ignarock1 + rotate: false + xy: 657, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ignarock-icon-editor + rotate: false + xy: 657, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ignarock2 + rotate: false + xy: 623, 221 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ignarock3 + rotate: false + xy: 657, 255 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-magmarock1 + rotate: false + xy: 623, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +magmarock-icon-editor + rotate: false + xy: 623, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-magmarock2 + rotate: false + xy: 657, 221 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-magmarock3 + rotate: false + xy: 657, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor + rotate: false + xy: 691, 323 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-icon-editor + rotate: false + xy: 691, 323 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-2 + rotate: false + xy: 691, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-2-icon-editor + rotate: false + xy: 691, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-3 + rotate: false + xy: 691, 255 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-3-icon-editor + rotate: false + xy: 691, 255 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-5 + rotate: false + xy: 691, 221 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-5-icon-editor + rotate: false + xy: 691, 221 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-damaged1 + rotate: false + xy: 691, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-damaged-icon-editor + rotate: false + xy: 691, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-damaged2 + rotate: false + xy: 613, 145 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-damaged3 + rotate: false + xy: 597, 111 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-moss1 + rotate: false + xy: 597, 77 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +moss-icon-editor + rotate: false + xy: 597, 77 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-moss2 + rotate: false + xy: 647, 153 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-moss3 + rotate: false + xy: 681, 153 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-coal1 + rotate: false + xy: 601, 43 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-coal2 + rotate: false + xy: 601, 9 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-coal3 + rotate: false + xy: 631, 111 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-copper1 + rotate: false + xy: 631, 77 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-copper2 + rotate: false + xy: 635, 43 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-copper3 + rotate: false + xy: 635, 9 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-lead1 + rotate: false + xy: 665, 119 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-lead2 + rotate: false + xy: 665, 85 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-lead3 + rotate: false + xy: 669, 51 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-scrap1 + rotate: false + xy: 669, 17 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-scrap2 + rotate: false + xy: 699, 119 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-scrap3 + rotate: false + xy: 699, 85 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-thorium1 + rotate: false + xy: 703, 51 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-thorium2 + rotate: false + xy: 703, 17 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-thorium3 + rotate: false + xy: 715, 153 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-titanium1 + rotate: false + xy: 733, 119 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-titanium2 + rotate: false + xy: 733, 85 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-titanium3 + rotate: false + xy: 737, 51 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-pebbles1 + rotate: false + xy: 737, 17 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-pebbles2 + rotate: false + xy: 713, 391 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-pebbles3 + rotate: false + xy: 713, 357 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-salt + rotate: false + xy: 725, 323 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +salt-icon-editor + rotate: false + xy: 725, 323 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand-water + rotate: false + xy: 725, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sand-water-icon-editor + rotate: false + xy: 725, 187 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand1 + rotate: false + xy: 725, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sand-icon-editor + rotate: false + xy: 725, 289 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand2 + rotate: false + xy: 725, 255 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand3 + rotate: false + xy: 725, 221 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-shale1 + rotate: false + xy: 749, 153 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shale-icon-editor + rotate: false + xy: 749, 153 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-shale2 + rotate: false + xy: 767, 119 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-shale3 + rotate: false + xy: 767, 85 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-snow1 + rotate: false + xy: 771, 51 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-snow2 + rotate: false + xy: 771, 17 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-snow3 + rotate: false + xy: 733, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spawn + rotate: false + xy: 767, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spore-moss1 + rotate: false + xy: 801, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spore-moss-icon-editor + rotate: false + xy: 801, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spore-moss2 + rotate: false + xy: 835, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spore-moss3 + rotate: false + xy: 869, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-stone1 + rotate: false + xy: 903, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +stone-icon-editor + rotate: false + xy: 903, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-stone2 + rotate: false + xy: 937, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-stone3 + rotate: false + xy: 971, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tainted-water + rotate: false + xy: 1005, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tainted-water-icon-editor + rotate: false + xy: 1005, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tar + rotate: false + xy: 1039, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tar-icon-editor + rotate: false + xy: 1039, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils1 + rotate: false + xy: 1073, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils2 + rotate: false + xy: 1107, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils3 + rotate: false + xy: 1141, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-water + rotate: false + xy: 1175, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +water-icon-editor + rotate: false + xy: 1175, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +force-projector-icon-editor + rotate: false + xy: 1039, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +fortress-factory-icon-editor + rotate: false + xy: 1137, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +fuse-icon-editor + rotate: false + xy: 1235, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ghoul-factory-icon-editor + rotate: false + xy: 1333, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +glaive-ship-pad-icon-editor + rotate: false + xy: 1431, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +graphite-press-icon-editor + rotate: false + xy: 1669, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +hail-icon-editor + rotate: false + xy: 1209, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icerocks-icon-editor + rotate: false + xy: 1243, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +impact-reactor-icon-editor + rotate: false + xy: 485, 887 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +incinerator-icon-editor + rotate: false + xy: 1277, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-source-icon-editor + rotate: false + xy: 1311, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-void-icon-editor + rotate: false + xy: 1345, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +javelin-ship-pad-icon-editor + rotate: false + xy: 1735, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +junction-icon-editor + rotate: false + xy: 1379, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +kiln-icon-editor + rotate: false + xy: 1801, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +lancer-icon-editor + rotate: false + xy: 1867, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +laser-drill-icon-editor + rotate: false + xy: 1529, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +launch-pad-icon-editor + rotate: false + xy: 1627, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +launch-pad-large-icon-editor + rotate: false + xy: 1, 113 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +liquid-junction-icon-editor + rotate: false + xy: 1413, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-icon-editor + rotate: false + xy: 1447, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-source-icon-editor + rotate: false + xy: 1481, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-tank-icon-editor + rotate: false + xy: 1725, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +mass-driver-icon-editor + rotate: false + xy: 1823, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +mechanical-drill-icon-editor + rotate: false + xy: 1933, 853 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +mechanical-pump-icon-editor + rotate: false + xy: 1515, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +meltdown-icon-editor + rotate: false + xy: 131, 243 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +melter-icon-editor + rotate: false + xy: 1549, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mend-projector-icon-editor + rotate: false + xy: 485, 821 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +mender-icon-editor + rotate: false + xy: 1583, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +message-icon-editor + rotate: false + xy: 1617, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +multi-press-icon-editor + rotate: false + xy: 1921, 919 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +oil-extractor-icon-editor + rotate: false + xy: 323, 367 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +omega-mech-pad-icon-editor + rotate: false + xy: 197, 15 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +overdrive-projector-icon-editor + rotate: false + xy: 551, 821 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +overflow-gate-icon-editor + rotate: false + xy: 1651, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pebbles-icon-editor + rotate: false + xy: 1685, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phantom-factory-icon-editor + rotate: false + xy: 617, 821 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +phase-conduit-icon-editor + rotate: false + xy: 1719, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-icon-editor + rotate: false + xy: 1753, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall-icon-editor + rotate: false + xy: 1787, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall-large-icon-editor + rotate: false + xy: 453, 755 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +phase-weaver-icon-editor + rotate: false + xy: 519, 755 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +pine-icon-editor + rotate: false + xy: 1999, 869 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +plastanium-compressor-icon-editor + rotate: false + xy: 453, 689 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +pneumatic-drill-icon-editor + rotate: false + xy: 519, 689 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +power-node-icon-editor + rotate: false + xy: 1821, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-node-large-icon-editor + rotate: false + xy: 585, 755 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +power-source-icon-editor + rotate: false + xy: 1855, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-void-icon-editor + rotate: false + xy: 1889, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-icon-editor + rotate: false + xy: 1923, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer-icon-editor + rotate: false + xy: 1957, 819 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pyratite-mixer-icon-editor + rotate: false + xy: 453, 623 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +repair-point-icon-editor + rotate: false + xy: 717, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +revenant-factory-icon-editor + rotate: false + xy: 323, 595 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +ripple-icon-editor + rotate: false + xy: 261, 269 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +rock-icon-editor + rotate: false + xy: 1999, 819 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +rocks-icon-editor + rotate: false + xy: 717, 751 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rotary-pump-icon-editor + rotate: false + xy: 519, 623 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +router-icon-editor + rotate: false + xy: 751, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rtg-generator-icon-editor + rotate: false + xy: 585, 689 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +saltrocks-icon-editor + rotate: false + xy: 717, 717 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +salvo-icon-editor + rotate: false + xy: 453, 557 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +sand-boulder-icon-editor + rotate: false + xy: 785, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sandrocks-icon-editor + rotate: false + xy: 751, 751 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scatter-icon-editor + rotate: false + xy: 519, 557 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +scorch-icon-editor + rotate: false + xy: 717, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-gigantic-icon-editor + rotate: false + xy: 615, 887 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +scrap-wall-huge-icon-editor + rotate: false + xy: 261, 171 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +scrap-wall-icon-editor + rotate: false + xy: 819, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-large-icon-editor + rotate: false + xy: 585, 623 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +separator-icon-editor + rotate: false + xy: 453, 491 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +shale-boulder-icon-editor + rotate: false + xy: 785, 751 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shalerocks-icon-editor + rotate: false + xy: 751, 717 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shock-mine-icon-editor + rotate: false + xy: 717, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shrubs-icon-editor + rotate: false + xy: 853, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +silicon-smelter-icon-editor + rotate: false + xy: 519, 491 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +snow-icon-editor + rotate: false + xy: 819, 751 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +snow-pine-icon-editor + rotate: false + xy: 519, 375 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +snowrock-icon-editor + rotate: false + xy: 683, 837 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +snowrocks-icon-editor + rotate: false + xy: 785, 717 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel-icon-editor + rotate: false + xy: 751, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel-large-icon-editor + rotate: false + xy: 359, 269 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +sorter-icon-editor + rotate: false + xy: 717, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spawn-icon-editor + rotate: false + xy: 887, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spectre-icon-editor + rotate: false + xy: 131, 113 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +spirit-factory-icon-editor + rotate: false + xy: 585, 557 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +spore-cluster-icon-editor + rotate: false + xy: 569, 383 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +spore-pine-icon-editor + rotate: false + xy: 427, 121 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +spore-press-icon-editor + rotate: false + xy: 585, 491 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +sporerocks-icon-editor + rotate: false + xy: 853, 751 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-tower-icon-editor + rotate: false + xy: 519, 425 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +surge-wall-icon-editor + rotate: false + xy: 819, 717 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-wall-large-icon-editor + rotate: false + xy: 585, 425 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +swarmer-icon-editor + rotate: false + xy: 651, 755 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +tau-mech-pad-icon-editor + rotate: false + xy: 651, 689 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +tendrils-icon-editor + rotate: false + xy: 785, 683 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thermal-generator-icon-editor + rotate: false + xy: 651, 623 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +thermal-pump-icon-editor + rotate: false + xy: 359, 171 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +thorium-reactor-icon-editor + rotate: false + xy: 421, 367 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +thorium-wall-icon-editor + rotate: false + xy: 751, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-wall-large-icon-editor + rotate: false + xy: 651, 557 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +thruster-icon-editor + rotate: false + xy: 323, 465 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +titan-factory-icon-editor + rotate: false + xy: 457, 269 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +titanium-conveyor-icon-editor + rotate: false + xy: 717, 581 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-wall-icon-editor + rotate: false + xy: 921, 785 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-wall-large-icon-editor + rotate: false + xy: 651, 491 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +trident-ship-pad-icon-editor + rotate: false + xy: 651, 425 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +turbine-generator-icon-editor + rotate: false + xy: 295, 105 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +unloader-icon-editor + rotate: false + xy: 887, 751 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +vault-icon-editor + rotate: false + xy: 457, 171 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +water-extractor-icon-editor + rotate: false + xy: 295, 39 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +wave-icon-editor + rotate: false + xy: 361, 105 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +white-tree-dead-icon-editor + rotate: false + xy: 1, 695 + size: 320, 320 + orig: 320, 320 + offset: 0, 0 + index: -1 +white-tree-icon-editor + rotate: false + xy: 1, 373 + size: 320, 320 + orig: 320, 320 + offset: 0, 0 + index: -1 +wraith-factory-icon-editor + rotate: false + xy: 361, 39 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 + +sprites4.png +size: 1024,1024 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +zone-craters + rotate: false + xy: 605, 767 + size: 256, 256 + orig: 256, 256 + offset: 0, 0 + index: -1 +zone-desertWastes + rotate: false + xy: 303, 461 + size: 260, 260 + orig: 260, 260 + offset: 0, 0 + index: -1 +zone-desolateRift + rotate: false + xy: 817, 163 + size: 100, 350 + orig: 100, 350 + offset: 0, 0 + index: -1 +zone-frozenForest + rotate: false + xy: 303, 1 + size: 200, 200 + orig: 200, 200 + offset: 0, 0 + index: -1 +zone-fungalPass + rotate: false + xy: 863, 773 + size: 150, 250 + orig: 150, 250 + offset: 0, 0 + index: -1 +zone-groundZero + rotate: false + xy: 303, 203 + size: 256, 256 + orig: 256, 256 + offset: 0, 0 + index: -1 +zone-nuclearComplex + rotate: false + xy: 605, 515 + size: 250, 250 + orig: 250, 250 + offset: 0, 0 + index: -1 +zone-overgrowth + rotate: false + xy: 1, 723 + size: 300, 300 + orig: 300, 300 + offset: 0, 0 + index: -1 +zone-ruinousShores + rotate: false + xy: 1, 421 + size: 300, 300 + orig: 300, 300 + offset: 0, 0 + index: -1 +zone-saltFlats + rotate: false + xy: 303, 723 + size: 300, 300 + orig: 300, 300 + offset: 0, 0 + index: -1 +zone-stainedMountains + rotate: false + xy: 1, 119 + size: 300, 300 + orig: 300, 300 + offset: 0, 0 + index: -1 +zone-tarFields + rotate: false + xy: 565, 263 + size: 250, 250 + orig: 250, 250 + offset: 0, 0 + index: -1 + sprites5.png size: 2048,1024 format: RGBA8888 @@ -8654,14 +8836,14 @@ alloy-smelter-icon-large index: -1 alloy-smelter-icon-medium rotate: false - xy: 301, 575 + xy: 301, 517 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 alloy-smelter-icon-small rotate: false - xy: 471, 1 + xy: 1979, 749 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -8675,21 +8857,42 @@ arc-icon-large index: -1 arc-icon-medium rotate: false - xy: 301, 541 + xy: 301, 483 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc-icon-small rotate: false - xy: 497, 1 + xy: 1975, 723 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +armored-conveyor-icon-large + rotate: false + xy: 1, 620 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +armored-conveyor-icon-medium + rotate: false + xy: 301, 449 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-icon-small + rotate: false + xy: 567, 305 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bar rotate: false - xy: 567, 209 + xy: 789, 485 size: 27, 36 split: 9, 9, 9, 9 orig: 27, 36 @@ -8697,7 +8900,7 @@ bar index: -1 bar-top rotate: false - xy: 567, 247 + xy: 535, 221 size: 27, 36 split: 9, 10, 9, 10 orig: 27, 36 @@ -8705,133 +8908,133 @@ bar-top index: -1 battery-icon-large rotate: false - xy: 1, 620 + xy: 259, 878 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 battery-icon-medium rotate: false - xy: 301, 507 + xy: 301, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-small rotate: false - xy: 523, 1 + xy: 599, 337 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 battery-large-icon-large rotate: false - xy: 259, 878 + xy: 1, 570 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 battery-large-icon-medium rotate: false - xy: 301, 473 + xy: 301, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large-icon-small rotate: false - xy: 2023, 712 + xy: 631, 369 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-icon-large rotate: false - xy: 1, 570 + xy: 259, 828 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 blast-drill-icon-medium rotate: false - xy: 301, 439 + xy: 301, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-drill-icon-small rotate: false - xy: 2023, 686 + xy: 663, 401 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-mixer-icon-large rotate: false - xy: 259, 828 + xy: 1, 520 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 blast-mixer-icon-medium rotate: false - xy: 301, 405 + xy: 301, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-mixer-icon-small rotate: false - xy: 567, 120 + xy: 695, 433 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bridge-conduit-icon-large rotate: false - xy: 1, 520 + xy: 259, 778 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conduit-icon-medium rotate: false - xy: 301, 371 + xy: 301, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-icon-small rotate: false - xy: 567, 94 + xy: 818, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bridge-conveyor-icon-large rotate: false - xy: 259, 778 + xy: 1, 470 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conveyor-icon-medium rotate: false - xy: 301, 337 + xy: 301, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-small rotate: false - xy: 567, 68 + xy: 535, 132 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 button rotate: false - xy: 301, 667 + xy: 377, 667 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8887,7 +9090,7 @@ button-edge-4 index: -1 button-edge-over-4 rotate: false - xy: 1879, 746 + xy: 2009, 772 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8895,7 +9098,7 @@ button-edge-over-4 index: -1 button-over rotate: false - xy: 1917, 746 + xy: 1937, 720 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8903,7 +9106,7 @@ button-over index: -1 button-red rotate: false - xy: 1955, 746 + xy: 301, 696 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8911,7 +9114,7 @@ button-red index: -1 button-right rotate: false - xy: 1875, 717 + xy: 301, 638 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8919,7 +9122,7 @@ button-right index: -1 button-right-down rotate: false - xy: 2009, 772 + xy: 301, 667 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8927,7 +9130,7 @@ button-right-down index: -1 button-right-over rotate: false - xy: 1837, 720 + xy: 339, 696 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8935,7 +9138,7 @@ button-right-over index: -1 button-select rotate: false - xy: 567, 42 + xy: 844, 497 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -8943,7 +9146,7 @@ button-select index: -1 button-square rotate: false - xy: 301, 696 + xy: 301, 609 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8951,7 +9154,7 @@ button-square index: -1 button-square-down rotate: false - xy: 1913, 717 + xy: 339, 667 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8959,7 +9162,7 @@ button-square-down index: -1 button-square-over rotate: false - xy: 1951, 717 + xy: 377, 696 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8967,7 +9170,7 @@ button-square-over index: -1 button-trans rotate: false - xy: 339, 696 + xy: 339, 638 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8975,749 +9178,749 @@ button-trans index: -1 char-icon-large rotate: false - xy: 1, 470 + xy: 1, 420 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 char-icon-medium rotate: false - xy: 301, 303 + xy: 301, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char-icon-small rotate: false - xy: 549, 3 + xy: 535, 106 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 check-disabled rotate: false - xy: 301, 269 + xy: 301, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-off rotate: false - xy: 301, 235 + xy: 301, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 301, 201 + xy: 301, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-disabled rotate: false - xy: 301, 167 + xy: 301, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 301, 133 + xy: 301, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 301, 99 + xy: 339, 549 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear rotate: false - xy: 1969, 671 + xy: 387, 14 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 cliffs-icon-large rotate: false - xy: 1, 420 + xy: 1, 370 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cliffs-icon-medium rotate: false - xy: 301, 65 + xy: 335, 515 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs-icon-small rotate: false - xy: 301, 5 + xy: 870, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 coal-centrifuge-icon-large rotate: false - xy: 1, 370 + xy: 1, 320 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 coal-centrifuge-icon-medium rotate: false - xy: 301, 31 + xy: 335, 481 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal-centrifuge-icon-small rotate: false - xy: 575, 16 + xy: 535, 80 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 combustion-generator-icon-large rotate: false - xy: 1, 320 + xy: 1, 270 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 combustion-generator-icon-medium rotate: false - xy: 339, 604 + xy: 335, 447 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-icon-small rotate: false - xy: 635, 301 + xy: 896, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 command-center-icon-large rotate: false - xy: 1, 270 + xy: 1, 220 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 command-center-icon-medium rotate: false - xy: 335, 570 + xy: 335, 413 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 command-center-icon-small rotate: false - xy: 661, 301 + xy: 535, 54 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 conduit-icon-large rotate: false - xy: 1, 220 + xy: 1, 170 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 conduit-icon-medium rotate: false - xy: 335, 536 + xy: 335, 379 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-icon-small rotate: false - xy: 687, 301 + xy: 922, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 container-icon-large rotate: false - xy: 1, 170 + xy: 1, 120 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 container-icon-medium rotate: false - xy: 335, 502 + xy: 335, 345 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 container-icon-small rotate: false - xy: 596, 261 + xy: 535, 28 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 conveyor-icon-large rotate: false - xy: 1, 120 + xy: 1, 70 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 conveyor-icon-medium rotate: false - xy: 335, 468 + xy: 335, 311 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-icon-small rotate: false - xy: 596, 235 + xy: 948, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 copper-wall-icon-large rotate: false - xy: 1, 70 + xy: 1, 20 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 copper-wall-icon-medium rotate: false - xy: 335, 434 + xy: 335, 277 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-small rotate: false - xy: 596, 209 + xy: 974, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 copper-wall-large-icon-large rotate: false - xy: 1, 20 + xy: 87, 717 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 copper-wall-large-icon-medium rotate: false - xy: 335, 400 + xy: 335, 243 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large-icon-small rotate: false - xy: 596, 183 + xy: 1000, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-foundation-icon-large rotate: false - xy: 87, 717 + xy: 137, 717 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-foundation-icon-medium rotate: false - xy: 335, 366 + xy: 335, 209 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-foundation-icon-small rotate: false - xy: 596, 157 + xy: 1026, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-nucleus-icon-large rotate: false - xy: 137, 717 + xy: 187, 717 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-nucleus-icon-medium rotate: false - xy: 335, 332 + xy: 335, 175 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-nucleus-icon-small rotate: false - xy: 596, 131 + xy: 1052, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-shard-icon-large rotate: false - xy: 187, 717 + xy: 345, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-shard-icon-medium rotate: false - xy: 335, 298 + xy: 335, 141 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-shard-icon-small rotate: false - xy: 593, 105 + xy: 1078, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 craters-icon-large rotate: false - xy: 345, 975 + xy: 395, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 craters-icon-medium rotate: false - xy: 335, 264 + xy: 335, 107 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters-icon-small rotate: false - xy: 593, 79 + xy: 1104, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 crawler-factory-icon-large rotate: false - xy: 395, 975 + xy: 445, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-factory-icon-medium rotate: false - xy: 335, 230 + xy: 335, 73 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 crawler-factory-icon-small rotate: false - xy: 593, 53 + xy: 1130, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cryofluidmixer-icon-large rotate: false - xy: 445, 975 + xy: 495, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cryofluidmixer-icon-medium rotate: false - xy: 335, 196 + xy: 335, 39 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cryofluidmixer-icon-small rotate: false - xy: 601, 27 + xy: 1156, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cultivator-icon-large rotate: false - xy: 495, 975 + xy: 545, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cultivator-icon-medium rotate: false - xy: 335, 162 + xy: 377, 604 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cultivator-icon-small rotate: false - xy: 601, 1 + xy: 1182, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cursor rotate: false - xy: 363, 20 + xy: 599, 331 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 cyclone-icon-large rotate: false - xy: 545, 975 + xy: 595, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cyclone-icon-medium rotate: false - xy: 335, 128 + xy: 415, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cyclone-icon-small rotate: false - xy: 619, 105 + xy: 1208, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dagger-factory-icon-large rotate: false - xy: 595, 975 + xy: 645, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-factory-icon-medium rotate: false - xy: 335, 94 + xy: 453, 662 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dagger-factory-icon-small rotate: false - xy: 619, 79 + xy: 1234, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-metal-icon-large rotate: false - xy: 645, 975 + xy: 695, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-metal-icon-medium rotate: false - xy: 335, 60 + xy: 491, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal-icon-small rotate: false - xy: 619, 53 + xy: 1260, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-1-icon-large rotate: false - xy: 695, 975 + xy: 745, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-1-icon-medium rotate: false - xy: 377, 633 + xy: 525, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-small rotate: false - xy: 627, 27 + xy: 1286, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-2-icon-large rotate: false - xy: 745, 975 + xy: 795, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-2-icon-medium rotate: false - xy: 415, 662 + xy: 559, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-small rotate: false - xy: 627, 1 + xy: 1312, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-3-icon-large rotate: false - xy: 795, 975 + xy: 845, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-3-icon-medium rotate: false - xy: 335, 26 + xy: 593, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-small rotate: false - xy: 743, 531 + xy: 1338, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-4-icon-large rotate: false - xy: 845, 975 + xy: 895, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-4-icon-medium rotate: false - xy: 490, 691 + xy: 627, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-small rotate: false - xy: 769, 531 + xy: 1364, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-5-icon-large rotate: false - xy: 895, 975 + xy: 945, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-5-icon-medium rotate: false - xy: 524, 691 + xy: 661, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-small rotate: false - xy: 795, 531 + xy: 1390, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-6-icon-large rotate: false - xy: 945, 975 + xy: 995, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-6-icon-medium rotate: false - xy: 558, 691 + xy: 695, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-small rotate: false - xy: 821, 531 + xy: 1416, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-icon-large rotate: false - xy: 995, 975 + xy: 1045, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-icon-medium rotate: false - xy: 592, 691 + xy: 729, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-small rotate: false - xy: 847, 531 + xy: 1442, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-tainted-water-icon-large rotate: false - xy: 1045, 975 + xy: 1095, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-tainted-water-icon-medium rotate: false - xy: 626, 691 + xy: 763, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-small rotate: false - xy: 873, 531 + xy: 1468, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-water-icon-large rotate: false - xy: 1095, 975 + xy: 1145, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-water-icon-medium rotate: false - xy: 660, 691 + xy: 797, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-small rotate: false - xy: 899, 531 + xy: 1494, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dart-mech-pad-icon-large rotate: false - xy: 1145, 975 + xy: 1195, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dart-mech-pad-icon-medium rotate: false - xy: 694, 691 + xy: 831, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dart-mech-pad-icon-small rotate: false - xy: 925, 531 + xy: 1520, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 deepwater-icon-large rotate: false - xy: 1195, 975 + xy: 1245, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 deepwater-icon-medium rotate: false - xy: 728, 691 + xy: 865, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-small rotate: false - xy: 951, 531 + xy: 1546, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 delta-mech-pad-icon-large rotate: false - xy: 1245, 975 + xy: 1295, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-pad-icon-medium rotate: false - xy: 762, 691 + xy: 899, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 delta-mech-pad-icon-small rotate: false - xy: 977, 531 + xy: 1572, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 differential-generator-icon-large rotate: false - xy: 1295, 975 + xy: 1345, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 differential-generator-icon-medium rotate: false - xy: 796, 691 + xy: 933, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator-icon-small rotate: false - xy: 1003, 531 + xy: 1598, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -9731,133 +9934,133 @@ discord-banner index: -1 distributor-icon-large rotate: false - xy: 1345, 975 + xy: 1395, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 distributor-icon-medium rotate: false - xy: 830, 691 + xy: 967, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor-icon-small rotate: false - xy: 1029, 531 + xy: 1624, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 door-icon-large rotate: false - xy: 1395, 975 + xy: 1445, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 door-icon-medium rotate: false - xy: 864, 691 + xy: 1001, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-icon-small rotate: false - xy: 1055, 531 + xy: 1650, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 door-large-icon-large rotate: false - xy: 1445, 975 + xy: 1495, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 door-large-icon-medium rotate: false - xy: 898, 691 + xy: 1035, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-small rotate: false - xy: 1081, 531 + xy: 1676, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 draug-factory-icon-large rotate: false - xy: 1495, 975 + xy: 1545, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 draug-factory-icon-medium rotate: false - xy: 932, 691 + xy: 1069, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 draug-factory-icon-small rotate: false - xy: 1107, 531 + xy: 1702, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dunerocks-icon-large rotate: false - xy: 1545, 975 + xy: 1595, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dunerocks-icon-medium rotate: false - xy: 966, 691 + xy: 1103, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dunerocks-icon-small rotate: false - xy: 1133, 531 + xy: 1728, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 duo-icon-large rotate: false - xy: 1595, 975 + xy: 1645, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 duo-icon-medium rotate: false - xy: 1000, 691 + xy: 1137, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-small rotate: false - xy: 1159, 531 + xy: 1754, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 flat-down-base rotate: false - xy: 377, 696 + xy: 415, 696 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -9865,812 +10068,784 @@ flat-down-base index: -1 force-projector-icon-large rotate: false - xy: 1645, 975 + xy: 1695, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 force-projector-icon-medium rotate: false - xy: 1034, 691 + xy: 1171, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 force-projector-icon-small rotate: false - xy: 1185, 531 + xy: 1780, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-icon-large rotate: false - xy: 1695, 975 + xy: 1745, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fortress-factory-icon-medium rotate: false - xy: 1068, 691 + xy: 1205, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fortress-factory-icon-small rotate: false - xy: 1211, 531 + xy: 1806, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fuse-icon-large rotate: false - xy: 1745, 975 + xy: 1795, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fuse-icon-medium rotate: false - xy: 1102, 691 + xy: 1239, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fuse-icon-small rotate: false - xy: 1237, 531 + xy: 1832, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-icon-large rotate: false - xy: 1795, 975 + xy: 1845, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ghoul-factory-icon-medium rotate: false - xy: 1136, 691 + xy: 1273, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ghoul-factory-icon-small rotate: false - xy: 1263, 531 + xy: 1858, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 glaive-ship-pad-icon-large rotate: false - xy: 1845, 975 + xy: 1895, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 glaive-ship-pad-icon-medium rotate: false - xy: 1170, 691 + xy: 1307, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 glaive-ship-pad-icon-small rotate: false - xy: 1289, 531 + xy: 1884, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 graphite-press-icon-large rotate: false - xy: 1895, 975 + xy: 1945, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 graphite-press-icon-medium rotate: false - xy: 1204, 691 + xy: 1341, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 graphite-press-icon-small rotate: false - xy: 1315, 531 + xy: 727, 457 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 grass-icon-large rotate: false - xy: 1945, 975 + xy: 1995, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 grass-icon-medium rotate: false - xy: 1238, 691 + xy: 1375, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass-icon-small rotate: false - xy: 1341, 531 + xy: 753, 457 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hail-icon-large rotate: false - xy: 1995, 975 + xy: 237, 717 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 hail-icon-medium rotate: false - xy: 1272, 691 + xy: 1409, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail-icon-small rotate: false - xy: 1367, 531 + xy: 2005, 746 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 holostone-icon-large rotate: false - xy: 237, 717 + xy: 51, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 holostone-icon-medium rotate: false - xy: 1306, 691 + xy: 1443, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone-icon-small rotate: false - xy: 1393, 531 + xy: 535, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hotrock-icon-large rotate: false - xy: 51, 667 + xy: 51, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 hotrock-icon-medium rotate: false - xy: 1340, 691 + xy: 1477, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-small rotate: false - xy: 1419, 531 + xy: 2001, 720 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ice-icon-large rotate: false - xy: 51, 617 + xy: 101, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ice-icon-medium rotate: false - xy: 1374, 691 + xy: 1511, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-small rotate: false - xy: 1445, 531 + xy: 721, 431 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ice-snow-icon-large rotate: false - xy: 101, 667 + xy: 51, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ice-snow-icon-medium rotate: false - xy: 1408, 691 + xy: 1545, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-small rotate: false - xy: 1471, 531 + xy: 747, 431 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icerocks-icon-large rotate: false - xy: 51, 567 + xy: 101, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icerocks-icon-medium rotate: false - xy: 1442, 691 + xy: 1579, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-icon-small rotate: false - xy: 1497, 531 + xy: 818, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icon-about rotate: false - xy: 101, 617 + xy: 151, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-about-small rotate: false - xy: 1476, 691 + xy: 1613, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-about-smaller rotate: false - xy: 641, 455 + xy: 509, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-about-tiny rotate: false - xy: 1, 2 + xy: 561, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-add rotate: false - xy: 151, 667 + xy: 51, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-add-small rotate: false - xy: 1510, 691 + xy: 1647, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-add-smaller rotate: false - xy: 675, 489 + xy: 541, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-add-tiny rotate: false - xy: 2027, 754 + xy: 579, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 51, 517 + xy: 101, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-admin-badge rotate: false - xy: 101, 567 + xy: 151, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-admin-badge-small rotate: false - xy: 1544, 691 + xy: 1681, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-admin-badge-smaller rotate: false - xy: 709, 523 + xy: 573, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-admin-badge-tiny rotate: false - xy: 1210, 435 + xy: 2031, 754 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 1578, 691 + xy: 1715, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-admin-smaller rotate: false - xy: 743, 557 + xy: 605, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-admin-tiny rotate: false - xy: 1236, 461 + xy: 597, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 151, 617 + xy: 201, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 151, 617 + xy: 201, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-16-small rotate: false - xy: 1612, 691 + xy: 1749, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-small rotate: false - xy: 1612, 691 + xy: 1749, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-16-smaller rotate: false - xy: 471, 251 + xy: 637, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-smaller rotate: false - xy: 471, 251 + xy: 637, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-16-tiny rotate: false - xy: 1262, 487 + xy: 2031, 736 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-tiny rotate: false - xy: 1262, 487 + xy: 2031, 736 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 201, 667 + xy: 51, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-down-small rotate: false - xy: 1646, 691 + xy: 1783, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-down-smaller rotate: false - xy: 505, 285 + xy: 669, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-down-tiny rotate: false - xy: 19, 2 + xy: 1, 2 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 51, 467 + xy: 101, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-left-small rotate: false - xy: 1680, 691 + xy: 1817, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-left-smaller rotate: false - xy: 539, 319 + xy: 701, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-left-tiny rotate: false - xy: 1210, 417 + xy: 369, 8 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 101, 517 + xy: 151, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-right-small rotate: false - xy: 1714, 691 + xy: 1851, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-right-smaller rotate: false - xy: 573, 353 + xy: 733, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-right-tiny rotate: false - xy: 1280, 487 + xy: 877, 453 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 151, 567 + xy: 201, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-up-small rotate: false - xy: 1748, 691 + xy: 1885, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-up-smaller rotate: false - xy: 607, 387 + xy: 765, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-up-tiny rotate: false - xy: 1298, 487 + xy: 19, 2 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-back rotate: false - xy: 201, 617 + xy: 51, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-back-small rotate: false - xy: 1782, 691 + xy: 301, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-back-smaller rotate: false - xy: 641, 423 + xy: 797, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-back-tiny rotate: false - xy: 1316, 487 + xy: 895, 453 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 51, 417 + xy: 101, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-ban-small rotate: false - xy: 373, 599 + xy: 335, 5 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-ban-smaller rotate: false - xy: 775, 557 + xy: 829, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-ban-tiny rotate: false - xy: 1334, 487 + xy: 877, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-break rotate: false - xy: 101, 467 + xy: 151, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-break-small rotate: false - xy: 369, 565 + xy: 411, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-break-smaller rotate: false - xy: 471, 219 + xy: 861, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-break-tiny rotate: false - xy: 1352, 487 + xy: 895, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 151, 517 + xy: 201, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-cancel-small rotate: false - xy: 369, 531 + xy: 449, 628 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-cancel-smaller rotate: false - xy: 807, 557 + xy: 893, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-cancel-tiny rotate: false - xy: 1370, 487 + xy: 877, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-quit-tiny rotate: false - xy: 1370, 487 + xy: 877, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-changelog rotate: false - xy: 201, 567 + xy: 51, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-changelog-small rotate: false - xy: 369, 497 + xy: 487, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-changelog-smaller rotate: false - xy: 471, 187 + xy: 925, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-changelog-tiny rotate: false - xy: 1388, 487 + xy: 895, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-chat rotate: false - xy: 51, 367 + xy: 101, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-chat-small rotate: false - xy: 369, 463 + xy: 521, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-chat-smaller rotate: false - xy: 839, 557 + xy: 957, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-chat-tiny rotate: false - xy: 1406, 487 + xy: 825, 401 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-check rotate: false - xy: 101, 417 + xy: 151, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-check-small rotate: false - xy: 369, 429 + xy: 555, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-check-smaller rotate: false - xy: 471, 155 + xy: 989, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-check-tiny rotate: false - xy: 1424, 487 + xy: 843, 401 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-command-attack rotate: false - xy: 151, 467 + xy: 201, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-command-attack-small rotate: false - xy: 369, 395 + xy: 589, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-command-attack-smaller rotate: false - xy: 871, 557 + xy: 1021, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-command-attack-tiny rotate: false - xy: 1442, 487 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-command-idle - rotate: false - xy: 201, 517 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-command-idle-small - rotate: false - xy: 369, 361 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-command-idle-smaller - rotate: false - xy: 471, 123 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-command-idle-tiny - rotate: false - xy: 1460, 487 + xy: 913, 437 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10684,2597 +10859,2625 @@ icon-command-patrol index: -1 icon-command-patrol-small rotate: false - xy: 369, 327 + xy: 623, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-command-patrol-smaller rotate: false - xy: 903, 557 + xy: 1053, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-command-patrol-tiny rotate: false - xy: 1478, 487 + xy: 913, 419 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-command-retreat +icon-command-rally rotate: false xy: 101, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-command-retreat-small +icon-command-rally-small rotate: false - xy: 369, 293 + xy: 657, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-command-retreat-smaller +icon-command-rally-smaller rotate: false - xy: 471, 91 + xy: 1085, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-command-retreat-tiny +icon-command-rally-tiny rotate: false - xy: 1496, 487 + xy: 1983, 676 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-copy +icon-command-retreat rotate: false xy: 151, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-copy-small +icon-command-retreat-small rotate: false - xy: 369, 259 + xy: 691, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-copy-smaller +icon-command-retreat-smaller rotate: false - xy: 935, 557 + xy: 1117, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-copy-tiny +icon-command-retreat-tiny rotate: false - xy: 1514, 487 + xy: 2001, 676 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-crafting +icon-copy rotate: false xy: 201, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-crafting-small +icon-copy-small rotate: false - xy: 369, 225 + xy: 725, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-crafting-smaller +icon-copy-smaller rotate: false - xy: 471, 59 + xy: 1149, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-crafting-tiny +icon-copy-tiny rotate: false - xy: 1532, 487 + xy: 2019, 676 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-cursor +icon-crafting rotate: false xy: 51, 267 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-cursor-small +icon-crafting-small rotate: false - xy: 369, 191 + xy: 759, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-cursor-smaller +icon-crafting-smaller rotate: false - xy: 967, 557 + xy: 1181, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-cursor-tiny +icon-crafting-tiny rotate: false - xy: 1550, 487 + xy: 1979, 658 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-database +icon-cursor rotate: false xy: 101, 317 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-database-small +icon-cursor-small rotate: false - xy: 369, 157 + xy: 793, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-database-smaller +icon-cursor-smaller rotate: false - xy: 471, 27 + xy: 1213, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-database-tiny +icon-cursor-tiny rotate: false - xy: 1568, 487 + xy: 1997, 658 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-defense +icon-database rotate: false xy: 151, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-defense-small +icon-database-small rotate: false - xy: 369, 123 + xy: 827, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-defense-smaller +icon-database-smaller rotate: false - xy: 999, 557 + xy: 1245, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-defense-tiny +icon-database-tiny rotate: false - xy: 1586, 487 + xy: 2015, 658 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-dev-builds +icon-defense rotate: false xy: 201, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-dev-builds-small +icon-defense-small rotate: false - xy: 369, 89 + xy: 861, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-dev-builds-smaller +icon-defense-smaller rotate: false - xy: 1031, 557 + xy: 1277, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-dev-builds-tiny +icon-defense-tiny rotate: false - xy: 1604, 487 + xy: 645, 319 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-diagonal +icon-dev-builds rotate: false xy: 51, 217 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-diagonal-small +icon-dev-builds-small rotate: false - xy: 369, 55 + xy: 895, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-diagonal-smaller +icon-dev-builds-smaller rotate: false - xy: 1063, 557 + xy: 1309, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-diagonal-tiny +icon-dev-builds-tiny rotate: false - xy: 1622, 487 + xy: 645, 301 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-discord +icon-diagonal rotate: false xy: 101, 267 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-discord-small +icon-diagonal-small rotate: false - xy: 369, 21 + xy: 929, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-discord-smaller +icon-diagonal-smaller rotate: false - xy: 1095, 557 + xy: 1341, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-discord-tiny +icon-diagonal-tiny rotate: false - xy: 1640, 487 + xy: 645, 283 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-distribution +icon-discord rotate: false xy: 151, 317 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-distribution-small +icon-discord-small rotate: false - xy: 411, 628 + xy: 963, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-distribution-smaller +icon-discord-smaller rotate: false - xy: 1127, 557 + xy: 1373, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-distribution-tiny +icon-discord-tiny rotate: false - xy: 1658, 487 + xy: 663, 325 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-donate +icon-distribution rotate: false xy: 201, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-donate-small +icon-distribution-small rotate: false - xy: 407, 594 + xy: 997, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-donate-smaller +icon-distribution-smaller rotate: false - xy: 1159, 557 + xy: 1405, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-donate-tiny +icon-distribution-tiny rotate: false - xy: 1676, 487 + xy: 663, 307 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-dots +icon-donate rotate: false xy: 51, 167 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-dots-small +icon-donate-small rotate: false - xy: 403, 560 + xy: 1031, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-dots-smaller +icon-donate-smaller rotate: false - xy: 1191, 557 + xy: 1437, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-dots-tiny +icon-donate-tiny rotate: false - xy: 1694, 487 + xy: 663, 289 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-editor +icon-dots rotate: false xy: 101, 217 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-editor-small +icon-dots-small rotate: false - xy: 403, 526 + xy: 1065, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-editor-smaller +icon-dots-smaller rotate: false - xy: 1223, 557 + xy: 1469, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-editor-tiny +icon-dots-tiny rotate: false - xy: 1712, 487 + xy: 619, 267 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-effect +icon-editor rotate: false xy: 151, 267 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-effect-small +icon-editor-small rotate: false - xy: 403, 492 + xy: 1099, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-effect-smaller +icon-editor-smaller rotate: false - xy: 1255, 557 + xy: 1501, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-effect-tiny +icon-editor-tiny rotate: false - xy: 1730, 487 + xy: 618, 249 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-elevation +icon-effect rotate: false xy: 201, 317 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-elevation-small +icon-effect-small rotate: false - xy: 403, 458 + xy: 1133, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-elevation-smaller +icon-effect-smaller rotate: false - xy: 1287, 557 + xy: 1533, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-elevation-tiny +icon-effect-tiny rotate: false - xy: 1748, 487 + xy: 616, 231 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-eraser +icon-elevation rotate: false xy: 51, 117 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-eraser-small +icon-elevation-small rotate: false - xy: 403, 424 + xy: 1167, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-eraser-smaller +icon-elevation-smaller rotate: false - xy: 1319, 557 + xy: 1565, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-eraser-tiny +icon-elevation-tiny rotate: false - xy: 1766, 487 + xy: 616, 213 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-exit +icon-eraser rotate: false xy: 101, 167 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-exit-small +icon-eraser-small rotate: false - xy: 403, 390 + xy: 1201, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-exit-smaller +icon-eraser-smaller rotate: false - xy: 1351, 557 + xy: 1597, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-exit-tiny +icon-eraser-tiny rotate: false - xy: 1784, 487 + xy: 616, 195 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-fdroid +icon-exit rotate: false xy: 151, 217 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-fdroid-small +icon-exit-small rotate: false - xy: 403, 356 + xy: 1235, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-fdroid-smaller +icon-exit-smaller rotate: false - xy: 1383, 557 + xy: 1629, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-fdroid-tiny +icon-exit-tiny rotate: false - xy: 1809, 540 + xy: 616, 177 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-file +icon-fdroid rotate: false xy: 201, 267 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-file-image +icon-fdroid-small + rotate: false + xy: 1269, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-fdroid-smaller + rotate: false + xy: 1661, 523 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-fdroid-tiny + rotate: false + xy: 616, 159 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-file rotate: false xy: 51, 67 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-file-image-small - rotate: false - xy: 403, 322 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-file-image-smaller - rotate: false - xy: 1415, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-file-image-tiny - rotate: false - xy: 1210, 399 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-file-small - rotate: false - xy: 403, 288 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-file-smaller - rotate: false - xy: 1447, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-file-text +icon-file-image rotate: false xy: 101, 117 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-file-text-small +icon-file-image-small rotate: false - xy: 403, 254 + xy: 1303, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-file-text-smaller +icon-file-image-smaller rotate: false - xy: 1479, 557 + xy: 1693, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-file-text-tiny +icon-file-image-tiny rotate: false - xy: 924, 383 + xy: 616, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-file-tiny +icon-file-small rotate: false - xy: 942, 383 - size: 16, 16 - orig: 16, 16 + xy: 1337, 657 + size: 32, 32 + orig: 32, 32 offset: 0, 0 index: -1 -icon-fill +icon-file-smaller + rotate: false + xy: 1725, 523 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-file-text rotate: false xy: 151, 167 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-fill-small +icon-file-text-small rotate: false - xy: 403, 220 + xy: 1371, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-fill-smaller +icon-file-text-smaller rotate: false - xy: 1511, 557 + xy: 1757, 523 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-fill-tiny +icon-file-text-tiny rotate: false - xy: 960, 383 + xy: 613, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-floppy +icon-file-tiny + rotate: false + xy: 613, 105 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-fill rotate: false xy: 201, 217 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-floppy-16 +icon-fill-small + rotate: false + xy: 1405, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-fill-smaller + rotate: false + xy: 1789, 523 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-fill-tiny + rotate: false + xy: 613, 87 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-floppy rotate: false xy: 101, 67 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-floppy-16-small - rotate: false - xy: 403, 186 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-floppy-16-smaller - rotate: false - xy: 1543, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-floppy-16-tiny - rotate: false - xy: 978, 383 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-floppy-small - rotate: false - xy: 403, 152 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-floppy-smaller - rotate: false - xy: 1575, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-floppy-tiny - rotate: false - xy: 996, 383 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-folder +icon-floppy-16 rotate: false xy: 151, 117 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-folder-parent +icon-floppy-16-small + rotate: false + xy: 1439, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-floppy-16-smaller + rotate: false + xy: 1821, 523 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-floppy-16-tiny + rotate: false + xy: 613, 69 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-floppy-small + rotate: false + xy: 1473, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-floppy-smaller + rotate: false + xy: 1853, 523 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-floppy-tiny + rotate: false + xy: 613, 51 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-folder rotate: false xy: 201, 167 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-folder-parent-small - rotate: false - xy: 403, 118 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-folder-parent-smaller - rotate: false - xy: 1607, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-folder-parent-tiny - rotate: false - xy: 1014, 383 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-folder-small - rotate: false - xy: 403, 84 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-folder-smaller - rotate: false - xy: 1639, 557 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-folder-tiny - rotate: false - xy: 1032, 383 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-github +icon-folder-parent rotate: false xy: 151, 67 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-github-small +icon-folder-parent-small rotate: false - xy: 403, 50 + xy: 1507, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-github-smaller +icon-folder-parent-smaller rotate: false - xy: 1671, 557 + xy: 471, 489 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-github-tiny +icon-folder-parent-tiny rotate: false - xy: 1050, 383 + xy: 613, 33 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-google-play +icon-folder-small + rotate: false + xy: 1541, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-folder-smaller + rotate: false + xy: 471, 457 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-folder-tiny + rotate: false + xy: 637, 265 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-github rotate: false xy: 201, 117 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-google-play-small +icon-github-small rotate: false - xy: 403, 16 + xy: 1575, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-google-play-smaller +icon-github-smaller rotate: false - xy: 1703, 557 + xy: 471, 425 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-google-play-tiny +icon-github-tiny rotate: false - xy: 1068, 383 + xy: 636, 247 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-grid +icon-google-play rotate: false xy: 201, 67 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-grid-small +icon-google-play-small rotate: false - xy: 1993, 738 + xy: 1609, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-grid-smaller +icon-google-play-smaller rotate: false - xy: 1735, 557 + xy: 471, 393 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-grid-tiny +icon-google-play-tiny rotate: false - xy: 1086, 383 + xy: 634, 229 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-home +icon-grid rotate: false xy: 51, 17 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-home-small +icon-grid-small rotate: false - xy: 1989, 704 + xy: 1643, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-home-smaller +icon-grid-smaller rotate: false - xy: 1767, 557 + xy: 471, 361 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-home-tiny +icon-grid-tiny rotate: false - xy: 1104, 383 + xy: 634, 211 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-host +icon-home rotate: false xy: 101, 17 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-host-small +icon-home-small rotate: false - xy: 1816, 686 + xy: 1677, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-host-smaller +icon-home-smaller rotate: false - xy: 1809, 654 + xy: 471, 329 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-host-tiny +icon-home-tiny rotate: false - xy: 1122, 383 + xy: 634, 193 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-info +icon-host rotate: false xy: 151, 17 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-info-small +icon-host-small rotate: false - xy: 1850, 683 + xy: 1711, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-info-smaller +icon-host-smaller rotate: false - xy: 1805, 622 + xy: 471, 297 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-info-tiny +icon-host-tiny rotate: false - xy: 1140, 383 + xy: 634, 175 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-itch.io +icon-info rotate: false xy: 201, 17 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-itch.io-small +icon-info-small rotate: false - xy: 1884, 683 + xy: 1745, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-itch.io-smaller +icon-info-smaller rotate: false - xy: 1801, 590 + xy: 471, 265 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-itch.io-tiny +icon-info-tiny rotate: false - xy: 1158, 383 + xy: 634, 157 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-item +icon-itch.io rotate: false xy: 251, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-item-small +icon-itch.io-small rotate: false - xy: 1918, 683 + xy: 1779, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-item-smaller +icon-itch.io-smaller rotate: false - xy: 1841, 651 + xy: 471, 233 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-item-tiny +icon-itch.io-tiny rotate: false - xy: 1176, 383 + xy: 634, 139 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-line +icon-item rotate: false xy: 251, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-line-small +icon-item-small rotate: false - xy: 1952, 683 + xy: 1813, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-line-smaller +icon-item-smaller rotate: false - xy: 1873, 651 + xy: 471, 201 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-line-tiny +icon-item-tiny rotate: false - xy: 327, 8 + xy: 631, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-link +icon-line rotate: false xy: 251, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-link-small +icon-line-small rotate: false - xy: 1986, 670 + xy: 1847, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-link-smaller +icon-line-smaller rotate: false - xy: 1905, 651 + xy: 471, 169 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-link-tiny +icon-line-tiny rotate: false - xy: 345, 8 + xy: 631, 103 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-liquid +icon-link rotate: false xy: 251, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-liquid-consume +icon-link-small + rotate: false + xy: 1881, 657 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-link-smaller + rotate: false + xy: 471, 137 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-link-tiny + rotate: false + xy: 631, 85 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-liquid rotate: false xy: 251, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-liquid-consume-small - rotate: false - xy: 449, 662 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-liquid-consume-smaller - rotate: false - xy: 1937, 651 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-liquid-consume-tiny - rotate: false - xy: 872, 367 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-liquid-small - rotate: false - xy: 445, 628 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-liquid-smaller - rotate: false - xy: 1837, 619 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-liquid-tiny - rotate: false - xy: 1809, 522 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-load +icon-liquid-consume rotate: false xy: 251, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-load-image +icon-liquid-consume-small + rotate: false + xy: 445, 594 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-liquid-consume-smaller + rotate: false + xy: 471, 105 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-liquid-consume-tiny + rotate: false + xy: 631, 67 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-liquid-small + rotate: false + xy: 483, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-liquid-smaller + rotate: false + xy: 471, 73 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-liquid-tiny + rotate: false + xy: 631, 49 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-load rotate: false xy: 251, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-load-image-small - rotate: false - xy: 441, 594 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-load-image-smaller - rotate: false - xy: 1869, 619 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-load-image-tiny - rotate: false - xy: 1807, 504 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-load-map +icon-load-image rotate: false xy: 251, 317 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-load-map-small +icon-load-image-small rotate: false - xy: 437, 560 + xy: 517, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-load-map-smaller +icon-load-image-smaller rotate: false - xy: 1901, 619 + xy: 471, 41 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-load-map-tiny +icon-load-image-tiny rotate: false - xy: 1827, 537 + xy: 631, 31 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-load-small - rotate: false - xy: 437, 526 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-load-smaller - rotate: false - xy: 1933, 619 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-load-tiny - rotate: false - xy: 1845, 537 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-loading +icon-load-map rotate: false xy: 251, 267 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-loading-small +icon-load-map-small rotate: false - xy: 437, 492 + xy: 551, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-loading-smaller +icon-load-map-smaller rotate: false - xy: 1833, 587 + xy: 471, 9 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-loading-tiny +icon-load-map-tiny rotate: false - xy: 1863, 537 + xy: 655, 265 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-locked +icon-load-small + rotate: false + xy: 585, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-load-smaller + rotate: false + xy: 1885, 523 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-load-tiny + rotate: false + xy: 654, 247 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-loading rotate: false xy: 251, 217 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-locked-small +icon-loading-small rotate: false - xy: 437, 458 + xy: 619, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-locked-smaller +icon-loading-smaller rotate: false - xy: 1865, 587 + xy: 1919, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-locked-tiny +icon-loading-tiny rotate: false - xy: 1881, 537 + xy: 652, 229 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-map +icon-locked rotate: false xy: 251, 167 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-map-small +icon-locked-small rotate: false - xy: 437, 424 + xy: 653, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-map-smaller +icon-locked-smaller rotate: false - xy: 1897, 587 + xy: 1915, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-map-tiny +icon-locked-tiny rotate: false - xy: 1899, 537 + xy: 652, 211 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-menu +icon-map rotate: false xy: 251, 117 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-menu-large +icon-map-small + rotate: false + xy: 687, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-map-smaller + rotate: false + xy: 1911, 624 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-map-tiny + rotate: false + xy: 652, 193 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-menu rotate: false xy: 251, 67 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-menu-large-small - rotate: false - xy: 437, 390 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-menu-large-smaller - rotate: false - xy: 1929, 587 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-menu-large-tiny - rotate: false - xy: 1917, 537 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-menu-small - rotate: false - xy: 437, 356 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-menu-smaller - rotate: false - xy: 641, 391 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-menu-tiny - rotate: false - xy: 1935, 537 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-missing +icon-menu-large rotate: false xy: 251, 17 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-missing-small +icon-menu-large-small rotate: false - xy: 437, 322 + xy: 721, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-missing-smaller +icon-menu-large-smaller rotate: false - xy: 1965, 619 + xy: 1951, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-missing-tiny +icon-menu-large-tiny rotate: false - xy: 1953, 537 + xy: 652, 175 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-mode-attack +icon-menu-small + rotate: false + xy: 755, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-menu-smaller + rotate: false + xy: 1947, 656 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-menu-tiny + rotate: false + xy: 652, 157 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-missing rotate: false xy: 309, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-mode-attack-small +icon-missing-small rotate: false - xy: 437, 288 + xy: 789, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-mode-attack-smaller +icon-missing-smaller rotate: false - xy: 1961, 587 + xy: 1943, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-mode-attack-tiny +icon-missing-tiny rotate: false - xy: 1971, 537 + xy: 652, 139 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-mode-pvp +icon-mode-attack rotate: false xy: 309, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-mode-pvp-small +icon-mode-attack-small rotate: false - xy: 437, 254 + xy: 823, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-mode-pvp-smaller +icon-mode-attack-smaller rotate: false - xy: 1801, 558 + xy: 503, 489 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-mode-pvp-tiny +icon-mode-attack-tiny rotate: false - xy: 1827, 519 + xy: 649, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-mode-survival +icon-mode-pvp rotate: false xy: 359, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-mode-survival-small +icon-mode-pvp-small rotate: false - xy: 437, 220 + xy: 857, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-mode-survival-smaller +icon-mode-pvp-smaller rotate: false - xy: 1833, 555 + xy: 503, 457 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-mode-survival-tiny +icon-mode-pvp-tiny rotate: false - xy: 1845, 519 + xy: 649, 103 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-none +icon-mode-survival rotate: false xy: 309, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-none-small +icon-mode-survival-small rotate: false - xy: 437, 186 + xy: 891, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-none-smaller +icon-mode-survival-smaller rotate: false - xy: 1865, 555 + xy: 503, 425 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-none-tiny +icon-mode-survival-tiny rotate: false - xy: 1863, 519 + xy: 649, 85 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-paste +icon-none rotate: false xy: 359, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-paste-small +icon-none-small rotate: false - xy: 437, 152 + xy: 925, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-paste-smaller +icon-none-smaller rotate: false - xy: 1897, 555 + xy: 503, 393 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-paste-tiny +icon-none-tiny rotate: false - xy: 1881, 519 + xy: 649, 67 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-pause +icon-paste rotate: false xy: 409, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-pause-small +icon-paste-small rotate: false - xy: 437, 118 + xy: 959, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-pause-smaller +icon-paste-smaller rotate: false - xy: 1929, 555 + xy: 503, 361 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-pause-tiny +icon-paste-tiny rotate: false - xy: 1899, 519 + xy: 649, 49 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-pencil +icon-pause rotate: false xy: 359, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-pencil-small +icon-pause-small rotate: false - xy: 437, 84 + xy: 993, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-pencil-smaller +icon-pause-smaller rotate: false - xy: 1961, 555 + xy: 503, 329 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-pencil-tiny +icon-pause-tiny rotate: false - xy: 1917, 519 + xy: 649, 31 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-pick +icon-pencil rotate: false xy: 409, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-pick-small +icon-pencil-small rotate: false - xy: 437, 50 + xy: 1027, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-pick-smaller +icon-pencil-smaller rotate: false - xy: 1997, 638 + xy: 503, 297 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-pick-tiny +icon-pencil-tiny rotate: false - xy: 1935, 519 + xy: 677, 351 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-play +icon-pick rotate: false xy: 459, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-play-2 +icon-pick-small + rotate: false + xy: 1061, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-pick-smaller + rotate: false + xy: 503, 265 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-pick-tiny + rotate: false + xy: 681, 333 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-play rotate: false xy: 409, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-play-2-small - rotate: false - xy: 437, 16 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-play-2-smaller - rotate: false - xy: 1997, 606 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-play-2-tiny - rotate: false - xy: 1953, 519 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-play-tiny - rotate: false - xy: 1953, 519 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-play-custom +icon-play-2 rotate: false xy: 459, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-play-custom-small +icon-play-2-small rotate: false - xy: 483, 657 + xy: 1095, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-play-custom-smaller +icon-play-2-smaller rotate: false - xy: 1993, 574 + xy: 503, 233 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-play-custom-tiny +icon-play-2-tiny rotate: false - xy: 1971, 519 + xy: 681, 315 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-play-small +icon-play-tiny rotate: false - xy: 517, 657 - size: 32, 32 - orig: 32, 32 + xy: 681, 315 + size: 16, 16 + orig: 16, 16 offset: 0, 0 index: -1 -icon-play-smaller - rotate: false - xy: 1993, 542 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-players +icon-play-custom rotate: false xy: 509, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-players-small +icon-play-custom-small rotate: false - xy: 551, 657 + xy: 1129, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-players-smaller +icon-play-custom-smaller rotate: false - xy: 673, 455 + xy: 503, 201 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-players-tiny +icon-play-custom-tiny rotate: false - xy: 1989, 524 + xy: 681, 297 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-power +icon-play-small + rotate: false + xy: 1163, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-play-smaller + rotate: false + xy: 503, 169 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-players rotate: false xy: 459, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-power-small +icon-players-small rotate: false - xy: 585, 657 + xy: 1197, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-power-smaller +icon-players-smaller rotate: false - xy: 673, 423 + xy: 503, 137 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-power-tiny +icon-players-tiny rotate: false - xy: 2007, 524 + xy: 681, 279 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-production +icon-power rotate: false xy: 509, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-production-small +icon-power-small rotate: false - xy: 619, 657 + xy: 1231, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-production-smaller +icon-power-smaller rotate: false - xy: 673, 391 + xy: 503, 105 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-production-tiny +icon-power-tiny rotate: false - xy: 1825, 501 + xy: 673, 261 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-quit +icon-production rotate: false xy: 559, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-quit-small +icon-production-small rotate: false - xy: 653, 657 + xy: 1265, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-quit-smaller +icon-production-smaller rotate: false - xy: 707, 489 + xy: 503, 73 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-redo +icon-production-tiny + rotate: false + xy: 672, 243 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-quit rotate: false xy: 509, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-redo-small +icon-quit-small rotate: false - xy: 687, 657 + xy: 1299, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-redo-smaller +icon-quit-smaller rotate: false - xy: 705, 457 + xy: 503, 41 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-redo-tiny - rotate: false - xy: 1843, 501 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-refresh +icon-redo rotate: false xy: 559, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-refresh-small +icon-redo-small rotate: false - xy: 721, 657 + xy: 1333, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-refresh-smaller +icon-redo-smaller rotate: false - xy: 705, 425 + xy: 503, 9 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-refresh-tiny +icon-redo-tiny rotate: false - xy: 1861, 501 + xy: 670, 225 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-rename +icon-refresh rotate: false xy: 609, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-rename-small +icon-refresh-small rotate: false - xy: 755, 657 + xy: 1367, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-rename-smaller +icon-refresh-smaller rotate: false - xy: 705, 393 + xy: 535, 491 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-rename-tiny +icon-refresh-tiny rotate: false - xy: 1879, 501 + xy: 670, 207 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-resize +icon-rename rotate: false xy: 559, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-resize-small +icon-rename-small rotate: false - xy: 789, 657 + xy: 1401, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-resize-smaller +icon-rename-smaller rotate: false - xy: 503, 251 + xy: 535, 459 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-resize-tiny +icon-rename-tiny rotate: false - xy: 1897, 501 + xy: 670, 189 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-rotate +icon-resize rotate: false xy: 609, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-arrow +icon-resize-small + rotate: false + xy: 1435, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-resize-smaller + rotate: false + xy: 567, 491 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-resize-tiny + rotate: false + xy: 670, 171 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-rotate rotate: false xy: 659, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-arrow-small - rotate: false - xy: 823, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-arrow-smaller - rotate: false - xy: 503, 219 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rotate-arrow-tiny - rotate: false - xy: 1915, 501 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-rotate-left +icon-rotate-arrow rotate: false xy: 609, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-left-small +icon-rotate-arrow-small rotate: false - xy: 857, 657 + xy: 1469, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-rotate-left-smaller +icon-rotate-arrow-smaller rotate: false - xy: 503, 187 + xy: 535, 427 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-rotate-left-tiny +icon-rotate-arrow-tiny rotate: false - xy: 1933, 501 + xy: 670, 153 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-rotate-right +icon-rotate-left rotate: false xy: 659, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-rotate-right-small +icon-rotate-left-small rotate: false - xy: 891, 657 + xy: 1503, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-rotate-right-smaller +icon-rotate-left-smaller rotate: false - xy: 503, 155 + xy: 567, 459 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-rotate-right-tiny +icon-rotate-left-tiny rotate: false - xy: 1951, 501 + xy: 670, 135 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-rotate-small - rotate: false - xy: 925, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-smaller - rotate: false - xy: 503, 123 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rotate-tiny - rotate: false - xy: 1969, 501 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-save +icon-rotate-right rotate: false xy: 709, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-save-image +icon-rotate-right-small + rotate: false + xy: 1537, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-rotate-right-smaller + rotate: false + xy: 599, 491 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-rotate-right-tiny + rotate: false + xy: 667, 117 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-rotate-small + rotate: false + xy: 1571, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-rotate-smaller + rotate: false + xy: 535, 395 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-rotate-tiny + rotate: false + xy: 667, 99 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-save rotate: false xy: 659, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-save-image-small - rotate: false - xy: 959, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-save-image-smaller - rotate: false - xy: 503, 91 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-save-image-tiny - rotate: false - xy: 1802, 486 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-save-map +icon-save-image rotate: false xy: 709, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-save-map-small +icon-save-image-small rotate: false - xy: 993, 657 + xy: 1605, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-save-map-smaller +icon-save-image-smaller rotate: false - xy: 503, 59 + xy: 567, 427 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-save-map-tiny +icon-save-image-tiny rotate: false - xy: 1820, 483 + xy: 667, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-save-small - rotate: false - xy: 1027, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-save-smaller - rotate: false - xy: 503, 27 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-save-tiny - rotate: false - xy: 1838, 483 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-settings +icon-save-map rotate: false xy: 759, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-settings-small +icon-save-map-small rotate: false - xy: 1061, 657 + xy: 1639, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-settings-smaller +icon-save-map-smaller rotate: false - xy: 537, 285 + xy: 599, 459 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-settings-tiny +icon-save-map-tiny rotate: false - xy: 1856, 483 + xy: 667, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-spray +icon-save-small + rotate: false + xy: 1673, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-save-smaller + rotate: false + xy: 631, 491 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-save-tiny + rotate: false + xy: 667, 45 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-settings rotate: false xy: 709, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-spray-small +icon-settings-small rotate: false - xy: 1095, 657 + xy: 1707, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-spray-smaller +icon-settings-smaller rotate: false - xy: 535, 253 + xy: 535, 363 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-spray-tiny +icon-settings-tiny rotate: false - xy: 1874, 483 + xy: 667, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-terrain +icon-spray rotate: false xy: 759, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-terrain-small +icon-spray-small rotate: false - xy: 1129, 657 + xy: 1741, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-terrain-smaller +icon-spray-smaller rotate: false - xy: 535, 221 + xy: 567, 395 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-terrain-tiny +icon-spray-tiny rotate: false - xy: 1892, 483 + xy: 691, 261 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-tools +icon-terrain rotate: false xy: 809, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-tools-small +icon-terrain-small rotate: false - xy: 1163, 657 + xy: 1775, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-tools-smaller +icon-terrain-smaller rotate: false - xy: 535, 189 + xy: 599, 427 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-tools-tiny +icon-terrain-tiny rotate: false - xy: 1910, 483 + xy: 690, 243 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-trash +icon-tools rotate: false xy: 759, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-trash-16 +icon-tools-small + rotate: false + xy: 1809, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-tools-smaller + rotate: false + xy: 631, 459 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-tools-tiny + rotate: false + xy: 688, 225 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-trash rotate: false xy: 809, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-trash-16-small - rotate: false - xy: 1197, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-trash-16-smaller - rotate: false - xy: 535, 157 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-trash-16-tiny - rotate: false - xy: 1928, 483 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-trash-small - rotate: false - xy: 1231, 657 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-trash-smaller - rotate: false - xy: 535, 125 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-trash-tiny - rotate: false - xy: 1946, 483 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-tree +icon-trash-16 rotate: false xy: 859, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-tree-small +icon-trash-16-small rotate: false - xy: 1265, 657 + xy: 1843, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-tree-smaller +icon-trash-16-smaller rotate: false - xy: 535, 93 + xy: 663, 491 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-tree-tiny +icon-trash-16-tiny rotate: false - xy: 1964, 483 + xy: 688, 207 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-trello +icon-trash-small + rotate: false + xy: 1877, 623 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icon-trash-smaller + rotate: false + xy: 535, 331 + size: 30, 30 + orig: 30, 30 + offset: 0, 0 + index: -1 +icon-trash-tiny + rotate: false + xy: 688, 189 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-tree rotate: false xy: 809, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-trello-small +icon-tree-small rotate: false - xy: 1299, 657 + xy: 479, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-trello-smaller +icon-tree-smaller rotate: false - xy: 535, 61 + xy: 567, 363 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-trello-tiny +icon-tree-tiny rotate: false - xy: 1228, 435 + xy: 688, 171 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-turret +icon-trello rotate: false xy: 859, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-turret-small +icon-trello-small rotate: false - xy: 1333, 657 + xy: 513, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-turret-smaller +icon-trello-smaller rotate: false - xy: 535, 29 + xy: 599, 395 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-turret-tiny +icon-trello-tiny rotate: false - xy: 1228, 417 + xy: 688, 153 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-tutorial +icon-turret rotate: false xy: 909, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-tutorial-small +icon-turret-small rotate: false - xy: 1367, 657 + xy: 547, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-tutorial-smaller +icon-turret-smaller rotate: false - xy: 571, 319 + xy: 631, 427 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-tutorial-tiny +icon-turret-tiny rotate: false - xy: 1228, 399 + xy: 688, 135 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-undo +icon-tutorial rotate: false xy: 859, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-undo-small +icon-tutorial-small rotate: false - xy: 1401, 657 + xy: 581, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-undo-smaller +icon-tutorial-smaller rotate: false - xy: 569, 287 + xy: 663, 459 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-undo-tiny +icon-tutorial-tiny rotate: false - xy: 1254, 461 + xy: 685, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-units +icon-undo rotate: false xy: 909, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-units-small +icon-undo-small rotate: false - xy: 1435, 657 + xy: 615, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-units-smaller +icon-undo-smaller rotate: false - xy: 605, 353 + xy: 695, 491 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-units-tiny +icon-undo-tiny rotate: false - xy: 1246, 443 + xy: 685, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-unlocks +icon-units rotate: false xy: 959, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-unlocks-small +icon-units-small rotate: false - xy: 1469, 657 + xy: 649, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-unlocks-smaller +icon-units-smaller rotate: false - xy: 603, 321 + xy: 535, 299 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-unlocks-tiny +icon-units-tiny rotate: false - xy: 1246, 425 + xy: 685, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-upgrade +icon-unlocks rotate: false xy: 909, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-upgrade-small +icon-unlocks-small rotate: false - xy: 1503, 657 + xy: 683, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-upgrade-smaller +icon-unlocks-smaller rotate: false - xy: 639, 359 + xy: 567, 331 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-upgrade-tiny +icon-unlocks-tiny rotate: false - xy: 1246, 407 + xy: 685, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-wiki +icon-upgrade rotate: false xy: 959, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-wiki-small +icon-upgrade-small rotate: false - xy: 1537, 657 + xy: 717, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-wiki-smaller +icon-upgrade-smaller rotate: false - xy: 671, 359 + xy: 599, 363 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-wiki-tiny +icon-upgrade-tiny rotate: false - xy: 1272, 469 + xy: 685, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-workshop +icon-wiki rotate: false xy: 1009, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-workshop-small +icon-wiki-small rotate: false - xy: 1571, 657 + xy: 751, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-workshop-smaller +icon-wiki-smaller rotate: false - xy: 637, 327 + xy: 631, 395 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-workshop-tiny +icon-wiki-tiny rotate: false - xy: 1290, 469 + xy: 685, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-zoom +icon-workshop rotate: false xy: 959, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-zoom-small +icon-workshop-small rotate: false - xy: 1605, 657 + xy: 785, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -icon-zoom-smaller +icon-workshop-smaller rotate: false - xy: 669, 327 + xy: 663, 427 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 -icon-zoom-tiny +icon-workshop-tiny rotate: false - xy: 1308, 469 + xy: 1907, 605 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -ignarock-icon-large +icon-zoom rotate: false xy: 1009, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ignarock-icon-medium +icon-zoom-small rotate: false - xy: 1639, 657 + xy: 819, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -ignarock-icon-small +icon-zoom-smaller rotate: false - xy: 1523, 531 - size: 24, 24 - orig: 24, 24 + xy: 695, 459 + size: 30, 30 + orig: 30, 30 offset: 0, 0 index: -1 -impact-reactor-icon-large +icon-zoom-tiny + rotate: false + xy: 1925, 606 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +ignarock-icon-large rotate: false xy: 1059, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -impact-reactor-icon-medium +ignarock-icon-medium rotate: false - xy: 1673, 657 + xy: 853, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -impact-reactor-icon-small +ignarock-icon-small rotate: false - xy: 1549, 531 + xy: 844, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -incinerator-icon-large +impact-reactor-icon-large rotate: false xy: 1009, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +impact-reactor-icon-medium + rotate: false + xy: 887, 589 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +impact-reactor-icon-small + rotate: false + xy: 870, 471 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +incinerator-icon-large + rotate: false + xy: 1059, 875 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 incinerator-icon-medium rotate: false - xy: 1707, 657 + xy: 921, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 incinerator-icon-small rotate: false - xy: 1575, 531 + xy: 896, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13288,7 +13491,7 @@ info-banner index: -1 inventory rotate: false - xy: 741, 489 + xy: 922, 455 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -13296,588 +13499,609 @@ inventory index: -1 item-source-icon-large rotate: false - xy: 1059, 875 + xy: 1109, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-source-icon-medium rotate: false - xy: 1741, 657 + xy: 955, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-small rotate: false - xy: 1601, 531 + xy: 948, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-void-icon-large rotate: false - xy: 1109, 925 + xy: 1059, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-void-icon-medium rotate: false - xy: 1775, 657 + xy: 989, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-small rotate: false - xy: 767, 505 + xy: 974, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 javelin-ship-pad-icon-large rotate: false - xy: 1059, 825 + xy: 1109, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-pad-icon-medium rotate: false - xy: 479, 623 + xy: 1023, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 javelin-ship-pad-icon-small rotate: false - xy: 1627, 531 + xy: 1000, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 junction-icon-large rotate: false - xy: 1109, 875 + xy: 1159, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 junction-icon-medium rotate: false - xy: 513, 623 + xy: 1057, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-small rotate: false - xy: 793, 505 + xy: 1026, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 kiln-icon-large rotate: false - xy: 1159, 925 + xy: 1109, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 kiln-icon-medium rotate: false - xy: 547, 623 + xy: 1091, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-small rotate: false - xy: 1653, 531 + xy: 1052, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 lancer-icon-large rotate: false - xy: 1109, 825 + xy: 1159, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lancer-icon-medium rotate: false - xy: 581, 623 + xy: 1125, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lancer-icon-small rotate: false - xy: 819, 505 + xy: 1078, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 laser-drill-icon-large rotate: false - xy: 1159, 875 + xy: 1209, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser-drill-icon-medium rotate: false - xy: 615, 623 + xy: 1159, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 laser-drill-icon-small rotate: false - xy: 1679, 531 + xy: 1104, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 launch-pad-icon-large rotate: false - xy: 1209, 925 + xy: 1159, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 launch-pad-icon-medium rotate: false - xy: 649, 623 + xy: 1193, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 launch-pad-icon-small rotate: false - xy: 845, 505 + xy: 1130, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 launch-pad-large-icon-large rotate: false - xy: 1159, 825 + xy: 1209, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 launch-pad-large-icon-medium rotate: false - xy: 683, 623 + xy: 1227, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 launch-pad-large-icon-small rotate: false - xy: 1705, 531 + xy: 1156, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-junction-icon-large rotate: false - xy: 1209, 875 + xy: 1259, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-junction-icon-medium rotate: false - xy: 717, 623 + xy: 1261, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction-icon-small rotate: false - xy: 871, 505 + xy: 1182, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-router-icon-large rotate: false - xy: 1259, 925 + xy: 1209, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-router-icon-medium rotate: false - xy: 751, 623 + xy: 1295, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-small rotate: false - xy: 1731, 531 + xy: 1208, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-source-icon-large rotate: false - xy: 1209, 825 + xy: 1259, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-source-icon-medium rotate: false - xy: 785, 623 + xy: 1329, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-small rotate: false - xy: 897, 505 + xy: 1234, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-icon-large rotate: false - xy: 1259, 875 + xy: 1309, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-tank-icon-medium rotate: false - xy: 819, 623 + xy: 1363, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-icon-small rotate: false - xy: 1757, 531 + xy: 1260, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 magmarock-icon-large rotate: false - xy: 1309, 925 + xy: 1259, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 magmarock-icon-medium rotate: false - xy: 853, 623 + xy: 1397, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock-icon-small rotate: false - xy: 923, 505 + xy: 1286, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mass-driver-icon-large rotate: false - xy: 1259, 825 + xy: 1309, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mass-driver-icon-medium rotate: false - xy: 887, 623 + xy: 1431, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mass-driver-icon-small rotate: false - xy: 949, 505 + xy: 1312, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mechanical-drill-icon-large rotate: false - xy: 1309, 875 + xy: 1359, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mechanical-drill-icon-medium rotate: false - xy: 921, 623 + xy: 1465, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-drill-icon-small rotate: false - xy: 975, 505 + xy: 1338, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mechanical-pump-icon-large rotate: false - xy: 1359, 925 + xy: 1309, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mechanical-pump-icon-medium rotate: false - xy: 955, 623 + xy: 1499, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump-icon-small rotate: false - xy: 1001, 505 + xy: 1364, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 meltdown-icon-large rotate: false - xy: 1309, 825 + xy: 1359, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 meltdown-icon-medium rotate: false - xy: 989, 623 + xy: 1533, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-icon-small rotate: false - xy: 1027, 505 + xy: 1390, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 melter-icon-large rotate: false - xy: 1359, 875 + xy: 1409, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 melter-icon-medium rotate: false - xy: 1023, 623 + xy: 1567, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter-icon-small rotate: false - xy: 1053, 505 + xy: 1416, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mend-projector-icon-large rotate: false - xy: 1409, 925 + xy: 1359, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mend-projector-icon-medium rotate: false - xy: 1057, 623 + xy: 1601, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-small rotate: false - xy: 1079, 505 + xy: 1442, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mender-icon-large rotate: false - xy: 1359, 825 + xy: 1409, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mender-icon-medium rotate: false - xy: 1091, 623 + xy: 1635, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-icon-small rotate: false - xy: 1105, 505 + xy: 1468, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -metal-floor-2-icon-large - rotate: false - xy: 1409, 875 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -metal-floor-2-icon-medium - rotate: false - xy: 1125, 623 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-2-icon-small - rotate: false - xy: 1131, 505 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -metal-floor-3-icon-large +message-icon-large rotate: false xy: 1459, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-3-icon-medium +message-icon-medium rotate: false - xy: 1159, 623 + xy: 1669, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -metal-floor-3-icon-small +message-icon-small rotate: false - xy: 1157, 505 + xy: 1494, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -metal-floor-5-icon-large +metal-floor-2-icon-large rotate: false xy: 1409, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-5-icon-medium +metal-floor-2-icon-medium rotate: false - xy: 1193, 623 + xy: 1703, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -metal-floor-5-icon-small +metal-floor-2-icon-small rotate: false - xy: 1183, 505 + xy: 1520, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -metal-floor-damaged-icon-large +metal-floor-3-icon-large rotate: false xy: 1459, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-damaged-icon-medium +metal-floor-3-icon-medium rotate: false - xy: 1227, 623 + xy: 1737, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -metal-floor-damaged-icon-small +metal-floor-3-icon-small rotate: false - xy: 1209, 505 + xy: 1546, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -metal-floor-icon-large +metal-floor-5-icon-large rotate: false xy: 1509, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-icon-medium +metal-floor-5-icon-medium rotate: false - xy: 1261, 623 + xy: 1771, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -metal-floor-icon-small +metal-floor-5-icon-small rotate: false - xy: 1235, 505 + xy: 1572, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -moss-icon-large +metal-floor-damaged-icon-large rotate: false xy: 1459, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -moss-icon-medium +metal-floor-damaged-icon-medium rotate: false - xy: 1295, 623 + xy: 1805, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -moss-icon-small +metal-floor-damaged-icon-small rotate: false - xy: 1261, 505 + xy: 1598, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -multi-press-icon-large +metal-floor-icon-large rotate: false xy: 1509, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +metal-floor-icon-medium + rotate: false + xy: 1839, 589 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-icon-small + rotate: false + xy: 1624, 471 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +moss-icon-large + rotate: false + xy: 1559, 925 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +moss-icon-medium + rotate: false + xy: 1873, 589 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +moss-icon-small + rotate: false + xy: 1650, 471 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +multi-press-icon-large + rotate: false + xy: 1509, 825 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 multi-press-icon-medium rotate: false - xy: 1329, 623 + xy: 376, 570 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-small rotate: false - xy: 1287, 505 + xy: 1676, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -13891,91 +14115,91 @@ nomap index: -1 oil-extractor-icon-large rotate: false - xy: 1559, 925 + xy: 1559, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 oil-extractor-icon-medium rotate: false - xy: 1363, 623 + xy: 410, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 oil-extractor-icon-small rotate: false - xy: 1313, 505 + xy: 1702, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 omega-mech-pad-icon-large rotate: false - xy: 1509, 825 + xy: 1609, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega-mech-pad-icon-medium rotate: false - xy: 1397, 623 + xy: 444, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 omega-mech-pad-icon-small rotate: false - xy: 1339, 505 + xy: 1728, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 overdrive-projector-icon-large rotate: false - xy: 1559, 875 + xy: 1559, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 overdrive-projector-icon-medium rotate: false - xy: 1431, 623 + xy: 478, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-projector-icon-small rotate: false - xy: 1365, 505 + xy: 1754, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 overflow-gate-icon-large rotate: false - xy: 1609, 925 + xy: 1609, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 overflow-gate-icon-medium rotate: false - xy: 1465, 623 + xy: 512, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overflow-gate-icon-small rotate: false - xy: 1391, 505 + xy: 1780, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pane rotate: false - xy: 339, 667 + xy: 339, 609 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -13983,7 +14207,7 @@ pane index: -1 pane-2 rotate: false - xy: 301, 638 + xy: 301, 580 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -13991,805 +14215,805 @@ pane-2 index: -1 pebbles-icon-large rotate: false - xy: 1559, 825 + xy: 1659, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pebbles-icon-medium rotate: false - xy: 1499, 623 + xy: 546, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles-icon-small rotate: false - xy: 1417, 505 + xy: 1806, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phantom-factory-icon-large rotate: false - xy: 1609, 875 + xy: 1609, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phantom-factory-icon-medium rotate: false - xy: 1533, 623 + xy: 580, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phantom-factory-icon-small rotate: false - xy: 1443, 505 + xy: 1832, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conduit-icon-large rotate: false - xy: 1659, 925 + xy: 1659, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-conduit-icon-medium rotate: false - xy: 1567, 623 + xy: 614, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-small rotate: false - xy: 1469, 505 + xy: 1858, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conveyor-icon-large rotate: false - xy: 1609, 825 + xy: 1709, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-conveyor-icon-medium rotate: false - xy: 1601, 623 + xy: 648, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-small rotate: false - xy: 1495, 505 + xy: 1884, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-wall-icon-large rotate: false - xy: 1659, 875 + xy: 1659, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-wall-icon-medium rotate: false - xy: 1635, 623 + xy: 682, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-small rotate: false - xy: 1521, 505 + xy: 948, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-wall-large-icon-large rotate: false - xy: 1709, 925 + xy: 1709, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-wall-large-icon-medium rotate: false - xy: 1669, 623 + xy: 716, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-small rotate: false - xy: 1547, 505 + xy: 974, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-weaver-icon-large rotate: false - xy: 1659, 825 + xy: 1759, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-weaver-icon-medium rotate: false - xy: 1703, 623 + xy: 750, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-weaver-icon-small rotate: false - xy: 1573, 505 + xy: 1000, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pine-icon-large rotate: false - xy: 1709, 875 + xy: 1709, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pine-icon-medium rotate: false - xy: 1737, 623 + xy: 784, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine-icon-small rotate: false - xy: 1599, 505 + xy: 1026, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 plastanium-compressor-icon-large rotate: false - xy: 1759, 925 + xy: 1759, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 plastanium-compressor-icon-medium rotate: false - xy: 1771, 623 + xy: 818, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-compressor-icon-small rotate: false - xy: 1625, 505 + xy: 1052, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pneumatic-drill-icon-large rotate: false - xy: 1709, 825 + xy: 1809, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pneumatic-drill-icon-medium rotate: false - xy: 475, 589 + xy: 852, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-small rotate: false - xy: 1651, 505 + xy: 1078, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-node-icon-large rotate: false - xy: 1759, 875 + xy: 1759, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-node-icon-medium rotate: false - xy: 509, 589 + xy: 886, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-icon-small rotate: false - xy: 1677, 505 + xy: 1104, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-node-large-icon-large rotate: false - xy: 1809, 925 + xy: 1809, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-node-large-icon-medium rotate: false - xy: 543, 589 + xy: 920, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-small rotate: false - xy: 1703, 505 + xy: 1130, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-source-icon-large rotate: false - xy: 1759, 825 + xy: 1859, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-source-icon-medium rotate: false - xy: 577, 589 + xy: 954, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-source-icon-small rotate: false - xy: 1729, 505 + xy: 1156, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-void-icon-large rotate: false - xy: 1809, 875 + xy: 1809, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-void-icon-medium rotate: false - xy: 611, 589 + xy: 988, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-small rotate: false - xy: 1755, 505 + xy: 1182, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pulse-conduit-icon-large rotate: false - xy: 1859, 925 + xy: 1859, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulse-conduit-icon-medium rotate: false - xy: 645, 589 + xy: 1022, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-small rotate: false - xy: 1783, 531 + xy: 1208, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pulverizer-icon-large rotate: false - xy: 1809, 825 + xy: 1909, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulverizer-icon-medium rotate: false - xy: 679, 589 + xy: 1056, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-small rotate: false - xy: 1781, 505 + xy: 1234, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pyratite-mixer-icon-large rotate: false - xy: 1859, 875 + xy: 1859, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pyratite-mixer-icon-medium rotate: false - xy: 713, 589 + xy: 1090, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-small rotate: false - xy: 768, 479 + xy: 1260, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 repair-point-icon-large rotate: false - xy: 1909, 925 + xy: 1909, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 repair-point-icon-medium rotate: false - xy: 747, 589 + xy: 1124, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point-icon-small rotate: false - xy: 768, 453 + xy: 1286, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 revenant-factory-icon-large rotate: false - xy: 1859, 825 + xy: 1959, 925 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-factory-icon-medium rotate: false - xy: 781, 589 + xy: 1158, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-icon-small rotate: false - xy: 794, 479 + xy: 1312, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ripple-icon-large rotate: false - xy: 1909, 875 + xy: 1909, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ripple-icon-medium rotate: false - xy: 815, 589 + xy: 1192, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple-icon-small rotate: false - xy: 768, 427 + xy: 1338, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rock-icon-large rotate: false - xy: 1959, 925 + xy: 1959, 875 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock-icon-medium rotate: false - xy: 849, 589 + xy: 1226, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rock-icon-small rotate: false - xy: 794, 453 + xy: 1364, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rocks-icon-large rotate: false - xy: 1909, 825 + xy: 1959, 825 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-icon-medium rotate: false - xy: 883, 589 + xy: 1260, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rocks-icon-small rotate: false - xy: 820, 479 + xy: 1390, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rotary-pump-icon-large rotate: false - xy: 1959, 875 + xy: 309, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rotary-pump-icon-medium rotate: false - xy: 917, 589 + xy: 1294, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-icon-small rotate: false - xy: 768, 401 + xy: 1416, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 router-icon-large rotate: false - xy: 1959, 825 + xy: 359, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 router-icon-medium rotate: false - xy: 951, 589 + xy: 1328, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router-icon-small rotate: false - xy: 794, 427 + xy: 1442, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rtg-generator-icon-large rotate: false - xy: 309, 775 + xy: 409, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rtg-generator-icon-medium rotate: false - xy: 985, 589 + xy: 1362, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-small rotate: false - xy: 820, 453 + xy: 1468, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salt-icon-large rotate: false - xy: 359, 775 + xy: 459, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 salt-icon-medium rotate: false - xy: 1019, 589 + xy: 1396, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-small rotate: false - xy: 846, 479 + xy: 1494, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 saltrocks-icon-large rotate: false - xy: 409, 775 + xy: 509, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 saltrocks-icon-medium rotate: false - xy: 1053, 589 + xy: 1430, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks-icon-small rotate: false - xy: 768, 375 + xy: 1520, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salvo-icon-large rotate: false - xy: 459, 775 + xy: 559, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 salvo-icon-medium rotate: false - xy: 1087, 589 + xy: 1464, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-small rotate: false - xy: 794, 401 + xy: 1546, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-boulder-icon-large rotate: false - xy: 509, 775 + xy: 609, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-boulder-icon-medium rotate: false - xy: 1121, 589 + xy: 1498, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-boulder-icon-small rotate: false - xy: 820, 427 + xy: 1572, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-icon-large rotate: false - xy: 559, 775 + xy: 659, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-icon-medium rotate: false - xy: 1155, 589 + xy: 1532, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-small rotate: false - xy: 846, 453 + xy: 1598, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-water-icon-large rotate: false - xy: 609, 775 + xy: 709, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-water-icon-medium rotate: false - xy: 1189, 589 + xy: 1566, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-small rotate: false - xy: 872, 479 + xy: 1624, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sandrocks-icon-large rotate: false - xy: 659, 775 + xy: 759, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sandrocks-icon-medium rotate: false - xy: 1223, 589 + xy: 1600, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-icon-small rotate: false - xy: 794, 375 + xy: 1650, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scatter-icon-large rotate: false - xy: 709, 775 + xy: 809, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scatter-icon-medium rotate: false - xy: 1257, 589 + xy: 1634, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-small rotate: false - xy: 820, 401 + xy: 1676, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scorch-icon-large rotate: false - xy: 759, 775 + xy: 859, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scorch-icon-medium rotate: false - xy: 1291, 589 + xy: 1668, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scorch-icon-small rotate: false - xy: 846, 427 + xy: 1702, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-large rotate: false - xy: 809, 775 + xy: 909, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-medium rotate: false - xy: 1325, 589 + xy: 1702, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-small rotate: false - xy: 872, 453 + xy: 1728, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-huge-icon-large rotate: false - xy: 859, 775 + xy: 959, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-huge-icon-medium rotate: false - xy: 1359, 589 + xy: 1736, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-huge-icon-small rotate: false - xy: 898, 479 + xy: 1754, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-icon-large rotate: false - xy: 909, 775 + xy: 1009, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-icon-medium rotate: false - xy: 1393, 589 + xy: 1770, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-icon-small rotate: false - xy: 820, 375 + xy: 1780, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-large-icon-large rotate: false - xy: 959, 775 + xy: 1059, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-large-icon-medium rotate: false - xy: 1427, 589 + xy: 1804, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-small rotate: false - xy: 846, 401 + xy: 1806, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scroll rotate: false - xy: 898, 442 + xy: 1858, 434 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -14797,7 +15021,7 @@ scroll index: -1 scroll-horizontal rotate: false - xy: 453, 699 + xy: 339, 583 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 @@ -14805,7 +15029,7 @@ scroll-horizontal index: -1 scroll-knob-horizontal-black rotate: false - xy: 1837, 749 + xy: 1937, 749 size: 40, 24 split: 11, 10, 10, 10 orig: 40, 24 @@ -14813,7 +15037,7 @@ scroll-knob-horizontal-black index: -1 scroll-knob-vertical-black rotate: false - xy: 872, 411 + xy: 1832, 429 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -14828,175 +15052,175 @@ selection index: -1 separator-icon-large rotate: false - xy: 1009, 775 + xy: 1109, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 separator-icon-medium rotate: false - xy: 1461, 589 + xy: 1838, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 separator-icon-small rotate: false - xy: 924, 479 + xy: 1884, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shale-boulder-icon-large rotate: false - xy: 1059, 775 + xy: 1159, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shale-boulder-icon-medium rotate: false - xy: 1495, 589 + xy: 1872, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder-icon-small rotate: false - xy: 846, 375 + xy: 1884, 419 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shale-icon-large rotate: false - xy: 1109, 775 + xy: 1209, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shale-icon-medium rotate: false - xy: 1529, 589 + xy: 373, 536 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-small rotate: false - xy: 872, 385 + xy: 1858, 408 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shalerocks-icon-large rotate: false - xy: 1159, 775 + xy: 1259, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shalerocks-icon-medium rotate: false - xy: 1563, 589 + xy: 369, 502 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-small rotate: false - xy: 898, 416 + xy: 1884, 393 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shock-mine-icon-large rotate: false - xy: 1209, 775 + xy: 1309, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shock-mine-icon-medium rotate: false - xy: 1597, 589 + xy: 369, 468 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-small rotate: false - xy: 924, 453 + xy: 779, 457 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shrubs-icon-large rotate: false - xy: 1259, 775 + xy: 1359, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shrubs-icon-medium rotate: false - xy: 1631, 589 + xy: 369, 434 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-small rotate: false - xy: 950, 479 + xy: 773, 431 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 silicon-smelter-icon-large rotate: false - xy: 1309, 775 + xy: 1409, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 silicon-smelter-icon-medium rotate: false - xy: 1665, 589 + xy: 369, 400 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-smelter-icon-small rotate: false - xy: 898, 390 + xy: 1983, 694 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 slider rotate: false - xy: 1986, 707 + xy: 373, 573 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 737, 449 + xy: 727, 483 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 737, 409 + xy: 535, 259 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 737, 369 + xy: 758, 483 size: 29, 38 orig: 29, 38 offset: 0, 0 @@ -15010,763 +15234,763 @@ slider-vertical index: -1 snow-icon-large rotate: false - xy: 1359, 775 + xy: 1459, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-icon-medium rotate: false - xy: 1699, 589 + xy: 369, 366 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-icon-small rotate: false - xy: 924, 427 + xy: 2009, 694 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snow-pine-icon-large rotate: false - xy: 1409, 775 + xy: 1509, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-pine-icon-medium rotate: false - xy: 1733, 589 + xy: 369, 332 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-small rotate: false - xy: 950, 453 + xy: 695, 407 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snowrock-icon-large rotate: false - xy: 1459, 775 + xy: 1559, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock-icon-medium rotate: false - xy: 1767, 589 + xy: 369, 298 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock-icon-small rotate: false - xy: 976, 479 + xy: 721, 405 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snowrocks-icon-large rotate: false - xy: 1509, 775 + xy: 1609, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-icon-medium rotate: false - xy: 471, 555 + xy: 369, 264 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrocks-icon-small rotate: false - xy: 924, 401 + xy: 747, 405 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-icon-large rotate: false - xy: 1559, 775 + xy: 1659, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 solar-panel-icon-medium rotate: false - xy: 471, 521 + xy: 369, 230 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-small rotate: false - xy: 950, 427 + xy: 773, 405 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-large-icon-large rotate: false - xy: 1609, 775 + xy: 1709, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 solar-panel-large-icon-medium rotate: false - xy: 505, 555 + xy: 369, 196 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-small rotate: false - xy: 976, 453 + xy: 1910, 497 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sorter-icon-large rotate: false - xy: 1659, 775 + xy: 1759, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sorter-icon-medium rotate: false - xy: 471, 487 + xy: 369, 162 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter-icon-small rotate: false - xy: 1002, 479 + xy: 1910, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spawn-icon-large rotate: false - xy: 1709, 775 + xy: 1809, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spawn-icon-medium rotate: false - xy: 505, 521 + xy: 369, 128 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-small rotate: false - xy: 950, 401 + xy: 1910, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spectre-icon-large rotate: false - xy: 1759, 775 + xy: 1859, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spectre-icon-medium rotate: false - xy: 539, 555 + xy: 369, 94 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-small rotate: false - xy: 976, 427 + xy: 1910, 419 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spirit-factory-icon-large rotate: false - xy: 1809, 775 + xy: 1909, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spirit-factory-icon-medium rotate: false - xy: 471, 453 + xy: 369, 60 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spirit-factory-icon-small rotate: false - xy: 1002, 453 + xy: 1910, 393 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-cluster-icon-large rotate: false - xy: 1859, 775 + xy: 1959, 775 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-cluster-icon-medium rotate: false - xy: 505, 487 + xy: 369, 26 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-cluster-icon-small rotate: false - xy: 1028, 479 + xy: 567, 279 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-moss-icon-large rotate: false - xy: 1909, 775 + xy: 287, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-moss-icon-medium rotate: false - xy: 539, 521 + xy: 407, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-small rotate: false - xy: 976, 401 + xy: 566, 253 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-pine-icon-large rotate: false - xy: 1959, 775 + xy: 337, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-pine-icon-medium rotate: false - xy: 573, 555 + xy: 403, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine-icon-small rotate: false - xy: 1002, 427 + xy: 564, 227 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-press-icon-large rotate: false - xy: 287, 725 + xy: 387, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-medium rotate: false - xy: 471, 419 + xy: 403, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-press-icon-small rotate: false - xy: 1028, 453 + xy: 564, 201 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sporerocks-icon-large rotate: false - xy: 337, 725 + xy: 437, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sporerocks-icon-medium rotate: false - xy: 505, 453 + xy: 403, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sporerocks-icon-small rotate: false - xy: 1054, 479 + xy: 564, 175 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 stone-icon-large rotate: false - xy: 387, 725 + xy: 487, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 stone-icon-medium rotate: false - xy: 539, 487 + xy: 403, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-small rotate: false - xy: 1002, 401 + xy: 564, 149 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-tower-icon-large rotate: false - xy: 437, 725 + xy: 537, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-tower-icon-medium rotate: false - xy: 573, 521 + xy: 403, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-small rotate: false - xy: 1028, 427 + xy: 561, 123 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-icon-large rotate: false - xy: 487, 725 + xy: 587, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-icon-medium rotate: false - xy: 607, 555 + xy: 403, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-icon-small rotate: false - xy: 1054, 453 + xy: 561, 97 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-large-icon-large rotate: false - xy: 537, 725 + xy: 637, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-large-icon-medium rotate: false - xy: 471, 385 + xy: 403, 293 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-small rotate: false - xy: 1080, 479 + xy: 561, 71 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 swarmer-icon-large rotate: false - xy: 587, 725 + xy: 687, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-icon-medium rotate: false - xy: 505, 419 + xy: 403, 259 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer-icon-small rotate: false - xy: 1028, 401 + xy: 561, 45 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tainted-water-icon-large rotate: false - xy: 637, 725 + xy: 737, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tainted-water-icon-medium rotate: false - xy: 539, 453 + xy: 403, 225 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-small rotate: false - xy: 1054, 427 + xy: 561, 19 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tar-icon-large rotate: false - xy: 687, 725 + xy: 787, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tar-icon-medium rotate: false - xy: 573, 487 + xy: 403, 191 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-small rotate: false - xy: 1080, 453 + xy: 593, 305 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tau-mech-pad-icon-large rotate: false - xy: 737, 725 + xy: 837, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-pad-icon-medium rotate: false - xy: 607, 521 + xy: 403, 157 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tau-mech-pad-icon-small rotate: false - xy: 1106, 479 + xy: 593, 279 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tendrils-icon-large rotate: false - xy: 787, 725 + xy: 887, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tendrils-icon-medium rotate: false - xy: 641, 555 + xy: 403, 123 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tendrils-icon-small rotate: false - xy: 1054, 401 + xy: 592, 253 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thermal-generator-icon-large rotate: false - xy: 837, 725 + xy: 937, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thermal-generator-icon-medium rotate: false - xy: 471, 351 + xy: 403, 89 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-generator-icon-small rotate: false - xy: 1080, 427 + xy: 590, 227 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thermal-pump-icon-large rotate: false - xy: 887, 725 + xy: 987, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thermal-pump-icon-medium rotate: false - xy: 505, 385 + xy: 403, 55 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-icon-small rotate: false - xy: 1106, 453 + xy: 590, 201 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor-icon-large rotate: false - xy: 937, 725 + xy: 1037, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-reactor-icon-medium rotate: false - xy: 539, 419 + xy: 403, 21 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-reactor-icon-small rotate: false - xy: 1132, 479 + xy: 590, 175 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-icon-large rotate: false - xy: 987, 725 + xy: 1087, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-icon-medium rotate: false - xy: 573, 453 + xy: 441, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-icon-small rotate: false - xy: 1080, 401 + xy: 590, 149 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-large-icon-large rotate: false - xy: 1037, 725 + xy: 1137, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-large-icon-medium rotate: false - xy: 607, 487 + xy: 437, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-small rotate: false - xy: 1106, 427 + xy: 587, 123 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thruster-icon-large rotate: false - xy: 1087, 725 + xy: 1187, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thruster-icon-medium rotate: false - xy: 641, 521 + xy: 437, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thruster-icon-small rotate: false - xy: 1132, 453 + xy: 587, 97 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-icon-large rotate: false - xy: 1137, 725 + xy: 1237, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan-factory-icon-medium rotate: false - xy: 675, 555 + xy: 437, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titan-factory-icon-small rotate: false - xy: 1158, 479 + xy: 587, 71 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-conveyor-icon-large rotate: false - xy: 1187, 725 + xy: 1287, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-conveyor-icon-medium rotate: false - xy: 471, 317 + xy: 437, 390 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-icon-small rotate: false - xy: 1106, 401 + xy: 587, 45 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-icon-large rotate: false - xy: 1237, 725 + xy: 1337, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-icon-medium rotate: false - xy: 505, 351 + xy: 437, 356 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-small rotate: false - xy: 1132, 427 + xy: 587, 19 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-large-icon-large rotate: false - xy: 1287, 725 + xy: 1387, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-large-icon-medium rotate: false - xy: 539, 385 + xy: 437, 322 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-small rotate: false - xy: 1158, 453 + xy: 625, 337 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 trident-ship-pad-icon-large rotate: false - xy: 1337, 725 + xy: 1437, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 trident-ship-pad-icon-medium rotate: false - xy: 573, 419 + xy: 437, 288 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 trident-ship-pad-icon-small rotate: false - xy: 1184, 479 + xy: 619, 311 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 turbine-generator-icon-large rotate: false - xy: 1387, 725 + xy: 1487, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 turbine-generator-icon-medium rotate: false - xy: 607, 453 + xy: 437, 254 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 turbine-generator-icon-small rotate: false - xy: 1132, 401 + xy: 619, 285 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 underline rotate: false - xy: 377, 667 + xy: 301, 551 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -15774,7 +15998,7 @@ underline index: -1 underline-2 rotate: false - xy: 415, 696 + xy: 377, 638 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -15782,7 +16006,7 @@ underline-2 index: -1 underline-disabled rotate: false - xy: 301, 609 + xy: 415, 667 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -15790,7 +16014,7 @@ underline-disabled index: -1 underline-red rotate: false - xy: 339, 638 + xy: 453, 696 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -15798,161 +16022,161 @@ underline-red index: -1 unloader-icon-large rotate: false - xy: 1437, 725 + xy: 1537, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unloader-icon-medium rotate: false - xy: 641, 487 + xy: 437, 220 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-small rotate: false - xy: 1158, 427 + xy: 657, 369 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 vault-icon-large rotate: false - xy: 1487, 725 + xy: 1587, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vault-icon-medium rotate: false - xy: 675, 521 + xy: 437, 186 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-small rotate: false - xy: 1184, 453 + xy: 651, 343 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-extractor-icon-large rotate: false - xy: 1537, 725 + xy: 1637, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 water-extractor-icon-medium rotate: false - xy: 709, 555 + xy: 437, 152 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-extractor-icon-small rotate: false - xy: 1210, 479 + xy: 799, 431 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-icon-large rotate: false - xy: 1587, 725 + xy: 1687, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 water-icon-medium rotate: false - xy: 471, 283 + xy: 437, 118 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-small rotate: false - xy: 1158, 401 + xy: 799, 405 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wave-icon-large rotate: false - xy: 1637, 725 + xy: 1737, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wave-icon-medium rotate: false - xy: 505, 317 + xy: 437, 84 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-icon-small rotate: false - xy: 1184, 427 + xy: 825, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 white-tree-dead-icon-large rotate: false - xy: 1687, 725 + xy: 1787, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 white-tree-dead-icon-medium rotate: false - xy: 539, 351 + xy: 437, 50 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-dead-icon-small rotate: false - xy: 1210, 453 + xy: 825, 419 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 white-tree-icon-large rotate: false - xy: 1737, 725 + xy: 1837, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 white-tree-icon-medium rotate: false - xy: 573, 385 + xy: 437, 16 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-icon-small rotate: false - xy: 1236, 479 + xy: 851, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 whiteui rotate: false - xy: 1816, 720 + xy: 1919, 720 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window-empty rotate: false - xy: 567, 146 + xy: 535, 158 size: 27, 61 split: 4, 4, 2, 2 orig: 27, 61 @@ -15960,21 +16184,21 @@ window-empty index: -1 wraith-factory-icon-large rotate: false - xy: 1787, 725 + xy: 1887, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wraith-factory-icon-medium rotate: false - xy: 607, 419 + xy: 475, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wraith-factory-icon-small rotate: false - xy: 1184, 401 + xy: 851, 419 size: 24, 24 orig: 24, 24 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index e5e1823e00..ed2ea1d911 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/assets/sprites/sprites2.png b/core/assets/sprites/sprites2.png index 4c744e487e..1776b09b12 100644 Binary files a/core/assets/sprites/sprites2.png and b/core/assets/sprites/sprites2.png differ diff --git a/core/assets/sprites/sprites3.png b/core/assets/sprites/sprites3.png index 9c08c17bf7..c77a57be15 100644 Binary files a/core/assets/sprites/sprites3.png and b/core/assets/sprites/sprites3.png differ diff --git a/core/assets/sprites/sprites4.png b/core/assets/sprites/sprites4.png index 1776b09b12..9c08c17bf7 100644 Binary files a/core/assets/sprites/sprites4.png and b/core/assets/sprites/sprites4.png differ diff --git a/core/assets/sprites/sprites5.png b/core/assets/sprites/sprites5.png index 669ccc9965..861b83349a 100644 Binary files a/core/assets/sprites/sprites5.png and b/core/assets/sprites/sprites5.png differ diff --git a/core/src/io/anuke/mindustry/ClientLauncher.java b/core/src/io/anuke/mindustry/ClientLauncher.java index e63fc9ac01..fe15d49d88 100644 --- a/core/src/io/anuke/mindustry/ClientLauncher.java +++ b/core/src/io/anuke/mindustry/ClientLauncher.java @@ -40,6 +40,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform batch = new SpriteBatch(); assets = new AssetManager(); assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader()); + assets.load("sprites/error.png", Texture.class); atlas = TextureAtlas.blankAtlas(); Vars.net = new Net(platform.getNet()); diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 720b7d33bf..24807883d1 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -122,8 +122,6 @@ public class Vars implements Loadable{ public static FileHandle saveDirectory; /** data subdirectory used for plugins */ public static FileHandle pluginDirectory; - /** old map file extension, for conversion */ - public static final String oldMapExtension = "mmap"; /** map file extension */ public static final String mapExtension = "msav"; /** save file extension */ @@ -139,7 +137,7 @@ public class Vars implements Loadable{ public static EntityCollisions collisions; public static DefaultWaves defaultWaves; public static LoopControl loops; - public static Platform platform; + public static Platform platform = new Platform(){}; public static Plugins plugins; public static World world; diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java index 9df0c432c8..1361e05e2b 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfinder.java +++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java @@ -1,164 +1,266 @@ package io.anuke.mindustry.ai; -import io.anuke.arc.Events; -import io.anuke.arc.collection.IntArray; -import io.anuke.arc.collection.IntQueue; -import io.anuke.arc.math.geom.Geometry; -import io.anuke.arc.math.geom.Point2; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.game.EventType.TileChangeEvent; -import io.anuke.mindustry.game.EventType.WorldLoadEvent; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.game.Teams.TeamData; -import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.world.Pos; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.meta.BlockFlag; +import io.anuke.arc.util.async.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.*; -public class Pathfinder{ +public class Pathfinder implements Runnable{ private static final long maxUpdate = Time.millisToNanos(4); - private PathData[] paths; - private IntArray blocked = new IntArray(); + private static final int updateFPS = 60; + private static final int updateInterval = 1000 / updateFPS; + private static final int impassable = -1; + + /** tile data, see PathTileStruct */ + private int[][] tiles; + /** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/ + private Array list = new Array<>(); + /** Maps teams + flags to a valid path to get to that flag for that team. */ + private PathData[][] pathMap = new PathData[Team.all.length][PathTarget.all.length]; + /** Grid map of created path data that should not be queued again. */ + private GridBits created = new GridBits(Team.all.length, PathTarget.all.length); + /** handles task scheduling on the update thread. */ + private TaskQueue queue = new TaskQueue(); + /** current pathfinding thread */ + private @Nullable Thread thread; public Pathfinder(){ - Events.on(WorldLoadEvent.class, event -> clear()); - Events.on(TileChangeEvent.class, event -> { - if(net.client()) return; + Events.on(WorldLoadEvent.class, event -> { + stop(); - for(Team team : Team.all){ - TeamData data = state.teams.get(team); - if(state.teams.isActive(team) && data.team != event.tile.getTeam()){ - update(event.tile, data.team); + //reset and update internal tile array + tiles = new int[world.width()][world.height()]; + pathMap = new PathData[Team.all.length][PathTarget.all.length]; + created = new GridBits(Team.all.length, PathTarget.all.length); + list = new Array<>(); + + for(int x = 0; x < world.width(); x++){ + for(int y = 0; y < world.height(); y++){ + tiles[x][y] = packTile(world.rawTile(x, y)); } } - update(event.tile, event.tile.getTeam()); + //special preset which may help speed things up; this is optional + preloadPath(waveTeam, PathTarget.enemyCores); + + start(); + }); + + Events.on(ResetEvent.class, event -> stop()); + + Events.on(TileChangeEvent.class, event -> updateTile(event.tile)); + } + + /** Packs a tile into its internal representation. */ + private int packTile(Tile tile){ + return PathTile.get(tile.cost, tile.getTeamID(), (byte)0, !tile.solid() && tile.floor().drownTime <= 0f); + } + + /** Starts or restarts the pathfinding thread. */ + private void start(){ + stop(); + thread = Threads.daemon(this); + } + + /** Stops the pathfinding thread. */ + private void stop(){ + if(thread != null){ + thread.interrupt(); + thread = null; + } + queue.clear(); + } + + public int debugValue(Team team, int x, int y){ + if(pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()] == null) return 0; + return pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()].weights[x][y]; + } + + /** Update a tile in the internal pathfinding grid. Causes a complete pathfinding reclaculation. */ + public void updateTile(Tile tile){ + if(net.client()) return; + + int x = tile.x, y = tile.y; + + tile.getLinkedTiles(t -> tiles[t.x][t.y] = packTile(t)); + + //can't iterate through array so use the map, which should not lead to problems + for(PathData[] arr : pathMap){ + for(PathData path : arr){ + if(path != null){ + synchronized(path.targets){ + path.targets.clear(); + path.target.getTargets(path.team, path.targets); + } + } + } + } + + queue.post(() -> { + for(PathData data : list){ + updateTargets(data, x, y); + } }); } - public void updateSolid(Tile tile){ - update(tile, tile.getTeam()); - } + /** Thread implementation. */ + @Override + public void run(){ + while(true){ + if(net.client()) return; - public void update(){ - if(net.client() || paths == null) return; + queue.run(); - for(Team team : Team.all){ - if(state.teams.isActive(team)){ - updateFrontier(team, maxUpdate); + //total update time no longer than maxUpdate + for(PathData data : list){ + updateFrontier(data, maxUpdate / list.size); + } + + try{ + Thread.sleep(updateInterval); + }catch(InterruptedException e){ + //stop looping when interrupted externally + return; } } } - public Tile getTargetTile(Team team, Tile tile){ - float[][] values = paths[team.ordinal()].weights; + /** Gets next tile to travel to. Main thread only. */ + public Tile getTargetTile(Tile tile, Team team, PathTarget target){ + if(tile == null) return null; - if(values == null || tile == null) return tile; + PathData data = pathMap[team.ordinal()][target.ordinal()]; - float value = values[tile.x][tile.y]; + if(data == null){ + //if this combination is not found, create it on request + if(!created.get(team.ordinal(), target.ordinal())){ + created.set(team.ordinal(), target.ordinal()); + //grab targets since this is run on main thread + IntArray targets = target.getTargets(team, new IntArray()); + queue.post(() -> createPath(team, target, targets)); + } + return tile; + } - Tile target = null; - float tl = 0f; + int[][] values = data.weights; + int value = values[tile.x][tile.y]; + + Tile current = null; + int tl = 0; for(Point2 point : Geometry.d8){ int dx = tile.x + point.x, dy = tile.y + point.y; Tile other = world.tile(dx, dy); if(other == null) continue; - if(values[dx][dy] < value && (target == null || values[dx][dy] < tl) && - !other.solid() && other.floor().drownTime <= 0 && + if(values[dx][dy] < value && (current == null || values[dx][dy] < tl) && !other.solid() && other.floor().drownTime <= 0 && !(point.x != 0 && point.y != 0 && (world.solid(tile.x + point.x, tile.y) || world.solid(tile.x, tile.y + point.y)))){ //diagonal corner trap - target = other; + current = other; tl = values[dx][dy]; } } - if(target == null || tl == Float.MAX_VALUE) return tile; + if(current == null || tl == impassable) return tile; - return target; + return current; } - public float getValueforTeam(Team team, int x, int y){ - return paths == null || paths[team.ordinal()].weights == null || team.ordinal() >= paths.length ? 0 : Structs.inBounds(x, y, paths[team.ordinal()].weights) ? paths[team.ordinal()].weights[x][y] : 0; - } - - private boolean passable(Tile tile, Team team){ - return ((!tile.solid()) || (tile.breakable() && (tile.getTeam() != team))) && tile.floor().drownTime <= 0f; + /** @return whether a tile can be passed through by this team. Pathfinding thread only.*/ + private boolean passable(int x, int y, Team team){ + int tile = tiles[x][y]; + return PathTile.passable(tile) || (PathTile.team(tile) != team.ordinal() && PathTile.team(tile) != Team.derelict.ordinal()); } /** * Clears the frontier, increments the search and sets up all flow sources. * This only occurs for active teams. */ - private void update(Tile tile, Team team){ - //make sure team exists - if(paths != null && paths[team.ordinal()] != null && paths[team.ordinal()].weights != null && Structs.inBounds(tile.x, tile.y, paths[team.ordinal()].weights)){ - PathData path = paths[team.ordinal()]; + private void updateTargets(PathData path, int x, int y){ + if(!Structs.inBounds(x, y, path.weights)) return; - if(path.weights[tile.x][tile.y] <= 0.1f){ - //this was a previous target - path.frontier.clear(); - }else if(!path.frontier.isEmpty()){ - return; - } - - //impassable tiles have a weight of float.max - if(!passable(tile, team)){ - path.weights[tile.x][tile.y] = Float.MAX_VALUE; - } - - //increment search, clear frontier - path.search++; + if(path.weights[x][y] == 0){ + //this was a previous target path.frontier.clear(); - path.lastSearchTime = Time.millis(); + }else if(!path.frontier.isEmpty()){ + //skip if this path is processing + return; + } - //add all targets to the frontier - for(Tile other : indexer.getEnemy(team, BlockFlag.target)){ - path.weights[other.x][other.y] = 0; - path.searches[other.x][other.y] = (short)path.search; - path.frontier.addFirst(other.pos()); + //assign impassability to the tile + if(!passable(x, y, path.team)){ + path.weights[x][y] = impassable; + } + + //increment search, clear frontier + path.search++; + path.frontier.clear(); + + synchronized(path.targets){ + //add targets + for(int i = 0; i < path.targets.size; i++){ + int pos = path.targets.get(i); + int tx = Pos.x(pos), ty = Pos.y(pos); + + path.weights[tx][ty] = 0; + path.searches[tx][ty] = (short)path.search; + path.frontier.addFirst(pos); } } } - private void createFor(Team team){ - PathData path = new PathData(); - path.weights = new float[world.width()][world.height()]; - path.searches = new short[world.width()][world.height()]; - path.search++; - path.frontier.ensureCapacity((world.width() + world.height()) * 3); + private void preloadPath(Team team, PathTarget target){ + updateFrontier(createPath(team, target, target.getTargets(team, new IntArray())), -1); + } - paths[team.ordinal()] = path; + /** Created a new flowfield that aims to get to a certain target for a certain team. + * Pathfinding thread only. */ + private PathData createPath(Team team, PathTarget target, IntArray targets){ + PathData path = new PathData(team, target, world.width(), world.height()); + list.add(path); + pathMap[team.ordinal()][target.ordinal()] = path; + + //grab targets from passed array + synchronized(path.targets){ + path.targets.clear(); + path.targets.addAll(targets); + } + + //fill with impassables by default for(int x = 0; x < world.width(); x++){ for(int y = 0; y < world.height(); y++){ - Tile tile = world.tile(x, y); - - if(state.teams.areEnemies(tile.getTeam(), team) - && tile.block().flags.contains(BlockFlag.target)){ - path.frontier.addFirst(tile.pos()); - path.weights[x][y] = 0; - path.searches[x][y] = (short)path.search; - }else{ - path.weights[x][y] = Float.MAX_VALUE; - } + path.weights[x][y] = impassable; } } - updateFrontier(team, -1); + //add targets + for(int i = 0; i < path.targets.size; i++){ + int pos = path.targets.get(i); + path.weights[Pos.x(pos)][Pos.y(pos)] = 0; + path.frontier.addFirst(pos); + } + + return path; } - private void updateFrontier(Team team, long nsToRun){ - PathData path = paths[team.ordinal()]; - + /** Update the frontier for a path. Pathfinding thread only. */ + private void updateFrontier(PathData path, long nsToRun){ long start = Time.nanos(); while(path.frontier.size > 0 && (nsToRun < 0 || Time.timeSinceNanos(start) <= nsToRun)){ Tile tile = world.tile(path.frontier.removeLast()); if(tile == null || path.weights == null) return; //something went horribly wrong, bail - float cost = path.weights[tile.x][tile.y]; + int cost = path.weights[tile.x][tile.y]; //pathfinding overflowed for some reason, time to bail. the next block update will handle this, hopefully if(path.frontier.size >= world.width() * world.height()){ @@ -166,14 +268,13 @@ public class Pathfinder{ return; } - if(cost < Float.MAX_VALUE){ + if(cost != impassable){ for(Point2 point : Geometry.d4){ int dx = tile.x + point.x, dy = tile.y + point.y; Tile other = world.tile(dx, dy); - if(other != null && (path.weights[dx][dy] > cost + other.cost || path.searches[dx][dy] < path.search) - && passable(other, team)){ + if(other != null && (path.weights[dx][dy] > cost + other.cost || path.searches[dx][dy] < path.search) && passable(dx, dy, path.team)){ if(other.cost < 0) throw new IllegalArgumentException("Tile cost cannot be negative! " + other); path.frontier.addFirst(Pos.get(dx, dy)); path.weights[dx][dy] = cost + other.cost; @@ -184,27 +285,78 @@ public class Pathfinder{ } } - private void clear(){ - Time.mark(); - - paths = new PathData[Team.all.length]; - blocked.clear(); - - for(Team team : Team.all){ - PathData path = new PathData(); - paths[team.ordinal()] = path; - - if(state.teams.isActive(team)){ - createFor(team); + /** A path target defines a set of targets for a path.*/ + public enum PathTarget{ + enemyCores((team, out) -> { + for(Tile other : indexer.getEnemy(team, BlockFlag.core)){ + out.add(other.pos()); } + + //spawn points are also enemies. + if(state.rules.waves && team == defaultTeam){ + for(Tile other : spawner.getGroundSpawns()){ + out.add(other.pos()); + } + } + }), + rallyPoints((team, out) -> { + for(Tile other : indexer.getAllied(team, BlockFlag.rally)){ + out.add(other.pos()); + } + }); + + public static final PathTarget[] all = values(); + + private final BiConsumer targeter; + + PathTarget(BiConsumer targeter){ + this.targeter = targeter; + } + + /** Get targets. This must run on the main thread.*/ + public IntArray getTargets(Team team, IntArray out){ + targeter.accept(team, out); + return out; } } + /** Data for a specific flow field to some set of destinations. */ class PathData{ - float[][] weights; - short[][] searches; - int search = 0; - long lastSearchTime; - IntQueue frontier = new IntQueue(); + /** Team this path is for. */ + final Team team; + /** Flag that is being targeted. */ + final PathTarget target; + /** costs of getting to a specific tile */ + final int[][] weights; + /** search IDs of each position - the highest, most recent search is prioritized and overwritten */ + final short[][] searches; + /** search frontier, these are Pos objects */ + final IntQueue frontier = new IntQueue(); + /** all target positions; these positions have a cost of 0, and must be synchronized on! */ + final IntArray targets = new IntArray(); + /** current search ID */ + int search = 1; + + PathData(Team team, PathTarget target, int width, int height){ + this.team = team; + this.target = target; + + this.weights = new int[width][height]; + this.searches = new short[width][height]; + this.frontier.ensureCapacity((width + height) * 3); + } + } + + /** Holds a copy of tile data for a specific tile position. */ + @Struct + class PathTileStruct{ + //traversal cost + byte cost; + //team of block, if applicable (0 by default) + byte team; + //type of target; TODO remove + byte type; + //whether it's viable to pass this block + boolean passable; } } diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/io/anuke/mindustry/content/Blocks.java index 93637d966d..8a07ded655 100644 --- a/core/src/io/anuke/mindustry/content/Blocks.java +++ b/core/src/io/anuke/mindustry/content/Blocks.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.content; import io.anuke.arc.*; +import io.anuke.arc.collection.*; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; @@ -18,6 +19,7 @@ import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.blocks.defense.*; import io.anuke.mindustry.world.blocks.defense.turrets.*; import io.anuke.mindustry.world.blocks.distribution.*; +import io.anuke.mindustry.world.blocks.logic.*; import io.anuke.mindustry.world.blocks.power.*; import io.anuke.mindustry.world.blocks.production.*; import io.anuke.mindustry.world.blocks.sandbox.*; @@ -48,7 +50,7 @@ public class Blocks implements ContentList{ melter, separator, sporePress, pulverizer, incinerator, coalCentrifuge, //sandbox - powerVoid, powerSource, itemSource, liquidSource, itemVoid, + powerVoid, powerSource, itemSource, liquidSource, itemVoid, message, //defense scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet @@ -56,7 +58,7 @@ public class Blocks implements ContentList{ phaseWall, phaseWallLarge, surgeWall, surgeWallLarge, mender, mendProjector, overdriveProjector, forceProjector, shockMine, //transport - conveyor, titaniumConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, router, overflowGate, massDriver, + conveyor, titaniumConveyor, armoredConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, router, overflowGate, massDriver, //liquids mechanicalPump, rotaryPump, thermalPump, conduit, pulseConduit, liquidRouter, liquidTank, liquidJunction, bridgeConduit, phaseConduit, @@ -733,6 +735,9 @@ public class Blocks implements ContentList{ requirements(Category.liquid, () -> state.rules.infiniteResources, ItemStack.with()); alwaysUnlocked = true; }}; + message = new MessageBlock("message"){{ + requirements(Category.effect, ItemStack.with(Items.graphite, 5)); + }}; //endregion //region defense @@ -901,10 +906,16 @@ public class Blocks implements ContentList{ speed = 0.08f; }}; + armoredConveyor = new ArmoredConveyor("armored-conveyor"){{ + requirements(Category.distribution, ItemStack.with(Items.metaglass, 1, Items.thorium, 1)); + health = 180; + speed = 0.08f; + }}; + junction = new Junction("junction"){{ requirements(Category.distribution, ItemStack.with(Items.copper, 1), true); speed = 26; - capacity = 15; + capacity = 12; health = 30; }}; @@ -912,7 +923,7 @@ public class Blocks implements ContentList{ requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 4)); range = 4; speed = 70f; - bufferCapacity = 15; + bufferCapacity = 14; }}; phaseConveyor = new ItemBridge("phase-conveyor"){{ @@ -1646,6 +1657,7 @@ public class Blocks implements ContentList{ commandCenter = new CommandCenter("command-center"){{ requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100)); + flags = EnumSet.of(BlockFlag.rally, BlockFlag.comandCenter); size = 2; health = size * size * 55; }}; diff --git a/core/src/io/anuke/mindustry/content/StatusEffects.java b/core/src/io/anuke/mindustry/content/StatusEffects.java index cb4035dd0e..fb94a881ce 100644 --- a/core/src/io/anuke/mindustry/content/StatusEffects.java +++ b/core/src/io/anuke/mindustry/content/StatusEffects.java @@ -46,6 +46,7 @@ public class StatusEffects implements ContentList{ if(unit.getTeam() == waveTeam){ Events.fire(Trigger.shock); } + result.set(this, time); })); opposite(() -> burning); }}; diff --git a/core/src/io/anuke/mindustry/content/TechTree.java b/core/src/io/anuke/mindustry/content/TechTree.java index 0c325b47a1..cef721908d 100644 --- a/core/src/io/anuke/mindustry/content/TechTree.java +++ b/core/src/io/anuke/mindustry/content/TechTree.java @@ -45,6 +45,10 @@ public class TechTree implements ContentList{ }); }); + + node(armoredConveyor, () -> { + + }); }); }); }); diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 13aad0a319..75519d1d08 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -204,9 +204,18 @@ public class Control implements ApplicationListener, Loadable{ player.add(); } - Events.on(ClientLoadEvent.class, e -> { - Core.input.addProcessor(input); - }); + Events.on(ClientLoadEvent.class, e -> input.add()); + } + + public void setInput(InputHandler newInput){ + Block block = input.block; + boolean added = Core.input.getInputProcessors().contains(input); + input.remove(); + this.input = newInput; + newInput.block = block; + if(added){ + newInput.add(); + } } public void playMap(Map map, Rules rules){ @@ -214,6 +223,8 @@ public class Control implements ApplicationListener, Loadable{ logic.reset(); world.loadMap(map, rules); state.rules = rules; + state.rules.zone = null; + state.rules.editor = false; logic.play(); if(settings.getBool("savecreate") && !world.isInvalidMap()){ control.saves.addSave(map.name() + " " + new SimpleDateFormat("MMM dd h:mm", Locale.getDefault()).format(new Date())); @@ -371,11 +382,15 @@ public class Control implements ApplicationListener, Loadable{ @Override public void update(){ + //TODO find out why this happens on Android + if(assets == null) return; + saves.update(); + //update and load any requested assets assets.update(); - input.updateController(); + input.updateState(); //autosave global data if it's modified data.checkSave(); diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index eaa60fe80a..9a198f9812 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -227,8 +227,6 @@ public class Logic implements ApplicationListener{ collisions.collideGroups(bulletGroup, playerGroup); } - - pathfinder.update(); } if(!net.client() && !world.isInvalidMap() && !state.isEditor()){ diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 57aa94fdcd..635601b406 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -230,6 +230,15 @@ public class NetClient implements ApplicationListener{ ui.loadfrag.hide(); } + @Remote(variants = Variant.one, priority = PacketPriority.high) + public static void onKick(String reason){ + netClient.disconnectQuietly(); + state.set(State.menu); + logic.reset(); + ui.showText("$disconnect", reason); + ui.loadfrag.hide(); + } + @Remote(variants = Variant.both) public static void onInfoMessage(String message){ ui.showText("", message); diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 74caa7e884..de84a6fd25 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -254,14 +254,13 @@ public class NetServer implements ApplicationListener{ Call.sendMessage(Strings.format("[orange]{0}[lightgray] has voted to kick[orange] {1}[].[accent] ({2}/{3})\n[lightgray]Type[orange] /vote [] to agree.", player.name, target.name, votes, votesRequired())); - //checkPass(); } boolean checkPass(){ if(votes >= votesRequired() && target.isAdded() && target.con.isConnected()){ - Call.sendMessage(Strings.format("[orange]Vote passed.[scarlet] {0}[orange] will be kicked from the server.", target.name)); - admins.getInfo(target.uuid).lastKicked = Time.millis() + kickDuration*1000; - target.con.kick(KickReason.vote); + Call.sendMessage(Strings.format("[orange]Vote passed.[scarlet] {0}[orange] will be banned from the server for {1} minutes.", target.name, (kickDuration/60))); + target.getInfo().lastKicked = Time.millis() + kickDuration*1000; + playerGroup.all().each(p -> p.uuid != null && p.uuid.equals(target.uuid), p -> p.con.kick(KickReason.vote)); map[0] = null; task.cancel(); return true; @@ -331,7 +330,8 @@ public class NetServer implements ApplicationListener{ if(currentlyKicking[0] == null){ player.sendMessage("[scarlet]Nobody is being voted on."); }else{ - if(currentlyKicking[0].voted.contains(player.uuid) || currentlyKicking[0].voted.contains(admins.getInfo(player.uuid).lastIP)){ + //hosts can vote all they want + if(player.uuid != null && (currentlyKicking[0].voted.contains(player.uuid) || currentlyKicking[0].voted.contains(admins.getInfo(player.uuid).lastIP))){ player.sendMessage("[scarlet]You've already voted. Sit down."); return; } @@ -704,16 +704,10 @@ public class NetServer implements ApplicationListener{ //iterate through each player for(int i = 0; i < playerGroup.size(); i++){ Player player = playerGroup.all().get(i); - if(player.isLocal) continue; + if(player.isLocal || player.con == null) continue; NetConnection connection = player.con; - if(connection == null || !connection.isConnected()){ - //player disconnected, call d/c event - onDisconnect(player, "disappeared"); - return; - } - if(!player.timer.get(Player.timerSync, serverSyncTime) || !connection.hasConnected) continue; writeSnapshot(player); diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/io/anuke/mindustry/core/Platform.java index 7ccb700499..55c57e82a4 100644 --- a/core/src/io/anuke/mindustry/core/Platform.java +++ b/core/src/io/anuke/mindustry/core/Platform.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.core; import io.anuke.arc.*; import io.anuke.arc.Input.*; +import io.anuke.arc.collection.*; import io.anuke.arc.files.*; import io.anuke.arc.function.*; import io.anuke.arc.math.*; @@ -25,6 +26,14 @@ public interface Platform{ /** Steam: Share a map on the workshop.*/ default void publishMap(Map map){} + /** Steam: Return external workshop maps to be loaded.*/ + default Array getExternalMaps(){ + return Array.with(); + } + + /** Steam: View a map listing on the workshop.*/ + default void viewMapListing(Map map){} + /** Steam: Open workshop for maps.*/ default void openWorkshop(){} diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index e5245d5e78..c6652e3327 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -22,6 +22,7 @@ import io.anuke.mindustry.entities.type.EffectEntity; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.input.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.defense.ForceProjector.*; @@ -128,7 +129,7 @@ public class Renderer implements ApplicationListener{ }else{ camera.position.lerpDelta(position, 0.08f); } - }else if(!mobile || settings.getBool("keyboard")){ + }else if(control.input instanceof DesktopInput){ camera.position.lerpDelta(position, 0.08f); } @@ -294,7 +295,7 @@ public class Renderer implements ApplicationListener{ overlays.drawTop(); - playerGroup.draw(p -> !p.isDead() && !p.isLocal, Player::drawName); + playerGroup.draw(p -> !p.isDead(), Player::drawName); drawLanding(); diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 5e18483e11..3663069518 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -325,8 +325,9 @@ public class UI implements ApplicationListener, Loadable{ cont.row(); cont.addImage().width(300f).pad(2).height(4f).color(Color.scarlet); cont.row(); - cont.add(text).pad(2f).growX().wrap(); - buttons.addButton("$ok", this::hide).size(120, 50).pad(4); + cont.add(text).pad(2f).growX().wrap().get().setAlignment(Align.center); + cont.row(); + cont.addButton("$ok", this::hide).size(120, 50).pad(4); }}.show(); } @@ -358,7 +359,11 @@ public class UI implements ApplicationListener, Loadable{ public void showText(String titleText, String text){ new Dialog(titleText){{ - cont.margin(15).add(text).width(400f).wrap().get().setAlignment(Align.center, Align.center); + cont.row(); + cont.addImage().width(400f).pad(2).colspan(2).height(4f).color(Pal.accent); + cont.row(); + cont.add(text).width(400f).wrap().get().setAlignment(Align.center, Align.center); + cont.row(); buttons.addButton("$ok", this::hide).size(90, 50).pad(4); }}.show(); } diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 8f2dd20d92..cc9dbdf821 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -85,37 +85,35 @@ public class MapEditorDialog extends Dialog implements Disposable{ t.row(); - if(!ios){ - t.addImageTextButton("$editor.import", Icon.loadMapSmall, () -> - createDialog("$editor.import", - "$editor.importmap", "$editor.importmap.description", Icon.loadMap, (Runnable)loadDialog::show, - "$editor.importfile", "$editor.importfile.description", Icon.file, (Runnable)() -> - platform.showFileChooser(true, mapExtension, file -> ui.loadAnd(() -> { - maps.tryCatchMapError(() -> { - if(MapIO.isImage(file)){ - ui.showInfo("$editor.errorimage"); - }else{ - editor.beginEdit(MapIO.createMap(file, true)); - } - }); - })), - - "$editor.importimage", "$editor.importimage.description", Icon.fileImage, (Runnable)() -> - platform.showFileChooser(true, "png", file -> - ui.loadAnd(() -> { - try{ - Pixmap pixmap = new Pixmap(file); - editor.beginEdit(pixmap); - pixmap.dispose(); - }catch(Exception e){ - ui.showException("$editor.errorload", e); - Log.err(e); + t.addImageTextButton("$editor.import", Icon.loadMapSmall, () -> + createDialog("$editor.import", + "$editor.importmap", "$editor.importmap.description", Icon.loadMap, (Runnable)loadDialog::show, + "$editor.importfile", "$editor.importfile.description", Icon.file, (Runnable)() -> + platform.showFileChooser(true, mapExtension, file -> ui.loadAnd(() -> { + maps.tryCatchMapError(() -> { + if(MapIO.isImage(file)){ + ui.showInfo("$editor.errorimage"); + }else{ + editor.beginEdit(MapIO.createMap(file, true)); } - }))) - ); - } + }); + })), - Cell cell = t.addImageTextButton("$editor.export", Icon.saveMapSmall, () -> { + "$editor.importimage", "$editor.importimage.description", Icon.fileImage, (Runnable)() -> + platform.showFileChooser(true, "png", file -> + ui.loadAnd(() -> { + try{ + Pixmap pixmap = new Pixmap(file); + editor.beginEdit(pixmap); + pixmap.dispose(); + }catch(Exception e){ + ui.showException("$editor.errorload", e); + Log.err(e); + } + }))) + ); + + t.addImageTextButton("$editor.export", Icon.saveMapSmall, () -> { if(!ios){ platform.showFileChooser(false, mapExtension, file -> { ui.loadAnd(() -> { @@ -143,10 +141,6 @@ public class MapEditorDialog extends Dialog implements Disposable{ }); } }); - - if(ios){ - cell.size(swidth * 2f + 10, 60f).colspan(2); - } }); menu.cont.row(); @@ -154,10 +148,21 @@ public class MapEditorDialog extends Dialog implements Disposable{ if(steam){ menu.cont.addImageTextButton("$editor.publish.workshop", Icon.linkSmall, () -> { Map map = save(); - if(map != null){ - platform.publishMap(map); + + if(map == null) return; + + if(map.tags.get("description", "").length() < 4){ + ui.showErrorMessage("$editor.nodescription"); + return; } - }).padTop(-3).size(swidth * 2f + 10, 60f); + + if(!Structs.contains(Gamemode.all, g -> g.valid(map))){ + ui.showErrorMessage("$map.nospawn"); + return; + } + + platform.publishMap(map); + }).padTop(-3).size(swidth * 2f + 10, 60f).update(b -> b.setText(editor.getTags().containsKey("steamid") ? "$view.workshop" : "$editor.publish.workshop")); menu.cont.row(); } @@ -255,6 +260,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ state.teams = new Teams(); player.reset(); state.rules = Gamemode.editor.apply(lastSavedRules.copy()); + state.rules.zone = null; world.setMap(new Map(StringMap.of( "name", "Editor Playtesting", "width", editor.width(), @@ -276,7 +282,9 @@ public class MapEditorDialog extends Dialog implements Disposable{ }); } - private Map save(){ + public Map save(){ + boolean isEditor = state.rules.editor; + state.rules.editor = false; String name = editor.getTags().get("name", "").trim(); editor.getTags().put("rules", JsonIO.write(state.rules)); editor.getTags().remove("width"); @@ -300,6 +308,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ menu.hide(); saved = true; + state.rules.editor = isEditor; return returned; } diff --git a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java index 6cfaaeca7a..c0567a724c 100644 --- a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java @@ -54,7 +54,7 @@ public class MapLoadDialog extends FloatingDialog{ for(Map map : maps.all()){ TextButton button = new TextButton(map.name(), Styles.togglet); - button.add(new BorderImage(map.texture, 2f).setScaling(Scaling.fit)).size(16 * 4f); + button.add(new BorderImage(map.safeTexture(), 2f).setScaling(Scaling.fit)).size(16 * 4f); button.getCells().reverse(); button.clicked(() -> selected = map); button.getLabelCell().grow().left().padLeft(5f); diff --git a/core/src/io/anuke/mindustry/entities/EntityGroup.java b/core/src/io/anuke/mindustry/entities/EntityGroup.java index ff48a1ad2e..07057d0436 100644 --- a/core/src/io/anuke/mindustry/entities/EntityGroup.java +++ b/core/src/io/anuke/mindustry/entities/EntityGroup.java @@ -18,6 +18,8 @@ public class EntityGroup{ private final Array entityArray = new Array<>(false, 32); private final Array entitiesToRemove = new Array<>(false, 32); private final Array entitiesToAdd = new Array<>(false, 32); + private final Array intersectArray = new Array<>(); + private final Rectangle intersectRect = new Rectangle(); private IntMap map; private QuadTree tree; private Consumer removeListener; @@ -161,6 +163,15 @@ public class EntityGroup{ tree().getIntersect(out, x, y, width, height); } + @SuppressWarnings("unchecked") + public Array intersect(float x, float y, float width, float height){ + intersectArray.clear(); + //don't waste time for empty groups + if(isEmpty()) return intersectArray; + tree().getIntersect(intersectArray, intersectRect.set(x, y, width, height)); + return intersectArray; + } + public QuadTree tree(){ if(!useTree) throw new RuntimeException("This group does not support quadtrees! Enable quadtrees when creating it."); return tree; diff --git a/core/src/io/anuke/mindustry/entities/effect/Lightning.java b/core/src/io/anuke/mindustry/entities/effect/Lightning.java index db8eeb5b1b..83dedb94be 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Lightning.java +++ b/core/src/io/anuke/mindustry/entities/effect/Lightning.java @@ -47,7 +47,7 @@ public class Lightning extends TimedEntity implements DrawTrait, TimeTrait{ } /** Do not invoke! */ - @Remote(called = Loc.server) + @Remote(called = Loc.server, unreliable = true) public static void createLighting(int seed, Team team, Color color, float damage, float x, float y, float rotation, int length){ Lightning l = Pools.obtain(Lightning.class, Lightning::new); diff --git a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java index 4a9d8695f3..00a9022c4c 100644 --- a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java @@ -16,6 +16,7 @@ import io.anuke.mindustry.game.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.blocks.defense.DeflectorWall.*; import io.anuke.mindustry.world.blocks.units.CommandCenter.*; import io.anuke.mindustry.world.blocks.units.UnitFactory.*; @@ -99,7 +100,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ return indexer.getAllied(team, BlockFlag.comandCenter).size != 0 && indexer.getAllied(team, BlockFlag.comandCenter).first().entity instanceof CommandCenterEntity; } - public UnitCommand getCommand(){ + public @Nullable UnitCommand getCommand(){ if(isCommanded()){ return indexer.getAllied(team, BlockFlag.comandCenter).first().entity().command; } @@ -173,8 +174,15 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ } } - public TileEntity getClosestEnemyCore(){ + public Tile getClosest(BlockFlag flag){ + return Geometry.findClosest(x, y, indexer.getAllied(team, flag)); + } + public Tile getClosestSpawner(){ + return Geometry.findClosest(x, y, Vars.spawner.getGroundSpawns()); + } + + public TileEntity getClosestEnemyCore(){ for(Team enemy : Vars.state.teams.enemiesOf(team)){ Tile tile = Geometry.findClosest(x, y, Vars.state.teams.get(enemy).cores); if(tile != null){ @@ -273,7 +281,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ return; } - if(!isFlying() && (world.tileWorld(x, y) != null && world.tileWorld(x, y).solid())){ + if(!isFlying() && (world.tileWorld(x, y) != null && !(world.tileWorld(x, y).block() instanceof BuildBlock) && world.tileWorld(x, y).solid())){ kill(); } diff --git a/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java index 2a0e18160e..ce83657c5e 100644 --- a/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java @@ -5,6 +5,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; +import io.anuke.mindustry.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.bullet.*; import io.anuke.mindustry.entities.units.*; @@ -35,13 +36,15 @@ public abstract class FlyingUnit extends BaseUnit{ if(target == null) targetClosestEnemyFlag(BlockFlag.producer); if(target == null) targetClosestEnemyFlag(BlockFlag.turret); - - if(target == null){ - setState(patrol); - } } - if(target != null){ + if(target == null){ + target = getSpawner(); + } + + if(target == getSpawner() && getSpawner() != null){ + circle(80f + Mathf.randomSeed(id) * 120); + }else if(target != null){ attack(type.attackLength); if((Angles.near(angleTo(target), rotation, type.shootCone) || getWeapon().ignoreRotation) //bombers and such don't care about rotation @@ -64,26 +67,28 @@ public abstract class FlyingUnit extends BaseUnit{ getWeapon().update(FlyingUnit.this, to.x, to.y); } } + }else{ + target = getClosestSpawner(); + moveTo(Vars.state.rules.dropZoneRadius + 120f); } } }, - patrol = new UnitState(){ + rally = new UnitState(){ public void update(){ if(retarget()){ + targetClosestAllyFlag(BlockFlag.rally); targetClosest(); - targetClosestEnemyFlag(BlockFlag.target); if(target != null && !Units.invalidateTarget(target, team, x, y)){ setState(attack); return; } - target = getSpawner(); - if(target == null) target = getClosestCore(); + if(target == null) target = getSpawner(); } if(target != null){ - circle(80f + Mathf.randomSeed(id) * 120); + circle(65f + Mathf.randomSeed(id) * 100); } } }, @@ -109,7 +114,7 @@ public abstract class FlyingUnit extends BaseUnit{ public void onCommand(UnitCommand command){ state.set(command == UnitCommand.retreat ? retreat : command == UnitCommand.attack ? attack : - command == UnitCommand.patrol ? patrol : + command == UnitCommand.rally ? rally : null); } diff --git a/core/src/io/anuke/mindustry/entities/type/GroundUnit.java b/core/src/io/anuke/mindustry/entities/type/GroundUnit.java index ccc1536c1a..ddb33a2662 100644 --- a/core/src/io/anuke/mindustry/entities/type/GroundUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/GroundUnit.java @@ -6,6 +6,7 @@ import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; import io.anuke.mindustry.*; +import io.anuke.mindustry.ai.Pathfinder.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.bullet.*; import io.anuke.mindustry.entities.units.*; @@ -13,6 +14,7 @@ import io.anuke.mindustry.game.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.*; +import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.*; @@ -34,31 +36,30 @@ public abstract class GroundUnit extends BaseUnit{ TileEntity core = getClosestEnemyCore(); if(core == null){ - setState(patrol); - return; - } + Tile closestSpawn = getClosestSpawner(); + if(closestSpawn == null || !withinDst(closestSpawn, Vars.state.rules.dropZoneRadius + 85f)){ + moveToCore(PathTarget.enemyCores); + } + }else{ - float dst = dst(core); + float dst = dst(core); - if(dst < getWeapon().bullet.range() / 1.1f){ - target = core; - } + if(dst < getWeapon().bullet.range() / 1.1f){ + target = core; + } - if(dst > getWeapon().bullet.range() * 0.5f){ - moveToCore(); + if(dst > getWeapon().bullet.range() * 0.5f){ + moveToCore(PathTarget.enemyCores); + } } } }, - patrol = new UnitState(){ + rally = new UnitState(){ public void update(){ - TileEntity target = getClosestCore(); + Tile target = getClosest(BlockFlag.rally); - if(target != null){ - if(dst(target) > 400f){ - moveAwayFromCore(); - }else if(!(!Units.invalidateTarget(GroundUnit.this.target, GroundUnit.this) && dst(GroundUnit.this.target) < getWeapon().bullet.range())){ - patrol(); - } + if(target != null && dst(target) > 80f){ + moveToCore(PathTarget.rallyPoints); } } }, @@ -76,7 +77,7 @@ public abstract class GroundUnit extends BaseUnit{ public void onCommand(UnitCommand command){ state.set(command == UnitCommand.retreat ? retreat : command == UnitCommand.attack ? attack : - command == UnitCommand.patrol ? patrol : + command == UnitCommand.rally ? rally : null); } @@ -220,10 +221,10 @@ public abstract class GroundUnit extends BaseUnit{ velocity.add(vec); } - protected void moveToCore(){ + protected void moveToCore(PathTarget path){ Tile tile = world.tileWorld(x, y); if(tile == null) return; - Tile targetTile = pathfinder.getTargetTile(team, tile); + Tile targetTile = pathfinder.getTargetTile(tile, team, path); if(tile == targetTile) return; @@ -242,11 +243,18 @@ public abstract class GroundUnit extends BaseUnit{ } } + if(enemy == null){ + for(Team team : Vars.state.teams.enemiesOf(team)){ + enemy = team; + break; + } + } + if(enemy == null) return; Tile tile = world.tileWorld(x, y); if(tile == null) return; - Tile targetTile = pathfinder.getTargetTile(enemy, tile); + Tile targetTile = pathfinder.getTargetTile(tile, enemy, PathTarget.enemyCores); TileEntity core = getClosestCore(); if(tile == targetTile || core == null || dst(core) < 120f) return; diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/io/anuke/mindustry/entities/type/Player.java index 3f1fd7fde7..fe0d501c42 100644 --- a/core/src/io/anuke/mindustry/entities/type/Player.java +++ b/core/src/io/anuke/mindustry/entities/type/Player.java @@ -7,6 +7,7 @@ import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.*; @@ -382,19 +383,21 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ font.setUseIntegerPositions(false); font.getData().setScale(0.25f / Scl.scl(1f)); layout.setText(font, name); - Draw.color(0f, 0f, 0f, 0.3f); - Fill.rect(x, y + nameHeight - layout.height / 2, layout.width + 2, layout.height + 3); - Draw.color(); - font.setColor(color); - font.draw(name, x, y + nameHeight, 0, Align.center, false); + if(!isLocal){ + Draw.color(0f, 0f, 0f, 0.3f); + Fill.rect(x, y + nameHeight - layout.height / 2, layout.width + 2, layout.height + 3); + Draw.color(); + font.setColor(color); + font.draw(name, x, y + nameHeight, 0, Align.center, false); - if(isAdmin){ - float s = 3f; - Draw.color(color.r * 0.5f, color.g * 0.5f, color.b * 0.5f, 1f); - Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1.5f, s, s); - Draw.color(color); - Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1f, s, s); + if(isAdmin){ + float s = 3f; + Draw.color(color.r * 0.5f, color.g * 0.5f, color.b * 0.5f, 1f); + Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1.5f, s, s); + Draw.color(color); + Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1f, s, s); + } } if(Core.settings.getBool("playerchat") && ((textFadeTime > 0 && lastText != null) || isTyping)){ @@ -567,7 +570,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ data.unlockContent(mech); } - if(mobile && !Core.settings.getBool("keyboard")){ + if(control.input instanceof MobileInput){ updateTouch(); }else{ updateKeyboard(); @@ -604,7 +607,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ float xa = Core.input.axis(Binding.move_x); float ya = Core.input.axis(Binding.move_y); - if(!Core.input.keyDown(Binding.gridMode)){ + if(!Core.input.keyDown(Binding.gridMode) && !(Core.scene.getKeyboardFocus() instanceof TextField)){ movement.y += ya * speed; movement.x += xa * speed; } @@ -723,50 +726,41 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ //update shooting if not building, not mining and there's ammo left if(!isBuilding() && getMineTile() == null){ - //autofire: mobile only! - if(mobile){ - if(target == null){ - isShooting = false; - if(Core.settings.getBool("autotarget")){ - target = Units.closestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.derelict, u -> u.getTeam() != Team.derelict); + //autofire + if(target == null){ + isShooting = false; + if(Core.settings.getBool("autotarget")){ + target = Units.closestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.derelict, u -> u.getTeam() != Team.derelict); - if(mech.canHeal && target == null){ - target = Geometry.findClosest(x, y, indexer.getDamaged(Team.sharded)); - if(target != null && dst(target) > getWeapon().bullet.range()){ - target = null; - }else if(target != null){ - target = ((Tile)target).entity; - } - } - - if(target != null){ - setMineTile(null); + if(mech.canHeal && target == null){ + target = Geometry.findClosest(x, y, indexer.getDamaged(Team.sharded)); + if(target != null && dst(target) > getWeapon().bullet.range()){ + target = null; + }else if(target != null){ + target = ((Tile)target).entity; } } - }else if(target.isValid() || (target instanceof TileEntity && ((TileEntity)target).damaged() && target.getTeam() == team && - mech.canHeal && dst(target) < getWeapon().bullet.range())){ - //rotate toward and shoot the target - if(mech.turnCursor){ - rotation = Mathf.slerpDelta(rotation, angleTo(target), 0.2f); + + if(target != null){ + setMineTile(null); } - - Vector2 intercept = Predict.intercept(this, target, getWeapon().bullet.speed); - - pointerX = intercept.x; - pointerY = intercept.y; - - updateShooting(); - isShooting = true; + } + }else if(target.isValid() || (target instanceof TileEntity && ((TileEntity)target).damaged() && target.getTeam() == team && + mech.canHeal && dst(target) < getWeapon().bullet.range())){ + //rotate toward and shoot the target + if(mech.turnCursor){ + rotation = Mathf.slerpDelta(rotation, angleTo(target), 0.2f); } - }else if(isShooting()){ - Vector2 vec = Core.input.mouseWorld(control.input.getMouseX(), - control.input.getMouseY()); - pointerX = vec.x; - pointerY = vec.y; + Vector2 intercept = Predict.intercept(this, target, getWeapon().bullet.speed); + + pointerX = intercept.x; + pointerY = intercept.y; updateShooting(); + isShooting = true; } + } } @@ -832,7 +826,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ } public boolean isShooting(){ - return isShooting && (!isBoosting || mech.flying) && mining == null; + return isShooting && (boostHeat < 0.1f || mech.flying) && mining == null; } public void updateRespawning(){ diff --git a/core/src/io/anuke/mindustry/entities/type/Unit.java b/core/src/io/anuke/mindustry/entities/type/Unit.java index 3dfd2e0364..63289f53e1 100644 --- a/core/src/io/anuke/mindustry/entities/type/Unit.java +++ b/core/src/io/anuke/mindustry/entities/type/Unit.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.entities.type; import io.anuke.annotations.Annotations.*; import io.anuke.arc.*; +import io.anuke.arc.collection.*; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; @@ -212,15 +213,25 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ float radScl = 1.5f; float fsize = getSize() / radScl; moveVector.setZero(); + float cx = x - fsize/2f, cy = y - fsize/2f; - Units.nearby(x - fsize/2f, y - fsize/2f, fsize, fsize, en -> { - if(en == this || en.isFlying() != isFlying()) return; + for(Team team : Team.all){ + avoid(unitGroups[team.ordinal()].intersect(cx, cy, fsize, fsize)); + } + + avoid(playerGroup.intersect(cx, cy, fsize, fsize)); + velocity.add(moveVector.x / mass() * Time.delta(), moveVector.y / mass() * Time.delta()); + } + + private void avoid(Array arr){ + float radScl = 1.5f; + + for(Unit en : arr){ + if(en.isFlying() != isFlying()) continue; float dst = dst(en); float scl = Mathf.clamp(1f - dst / (getSize()/(radScl*2f) + en.getSize()/(radScl*2f))); moveVector.add(Tmp.v1.set((x - en.x) * scl, (y - en.y) * scl).limit(0.4f)); - }); - - velocity.add(moveVector.x / mass() * Time.delta(), moveVector.y / mass() * Time.delta()); + } } public @Nullable TileEntity getClosestCore(){ diff --git a/core/src/io/anuke/mindustry/entities/units/Statuses.java b/core/src/io/anuke/mindustry/entities/units/Statuses.java index 62bcec4a2f..b96937bfcb 100644 --- a/core/src/io/anuke/mindustry/entities/units/Statuses.java +++ b/core/src/io/anuke/mindustry/entities/units/Statuses.java @@ -32,12 +32,12 @@ public class Statuses implements Saveable{ if(statuses.size > 0){ //check for opposite effects for(StatusEntry entry : statuses){ - if(entry.effect == null) continue; //extend effect if(entry.effect == effect){ entry.time = Math.max(entry.time, duration); return; }else if(entry.effect.reactsWith(effect)){ //find opposite + globalResult.effect = entry.effect; entry.effect.getTransition(unit, effect, entry.time, duration, globalResult); entry.time = globalResult.time; @@ -84,10 +84,6 @@ public class Statuses implements Saveable{ removals.clear(); for(StatusEntry entry : statuses){ - if(entry.effect == null){ - removals.add(entry); - continue; - } entry.time = Math.max(entry.time - Time.delta(), 0); applied.set(entry.effect.id); diff --git a/core/src/io/anuke/mindustry/entities/units/UnitCommand.java b/core/src/io/anuke/mindustry/entities/units/UnitCommand.java index 0972905fb9..654b3b0970 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitCommand.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitCommand.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.entities.units; import io.anuke.arc.*; public enum UnitCommand{ - attack, retreat, patrol; + attack, retreat, rally; private final String localized; public static final UnitCommand[] all = values(); diff --git a/core/src/io/anuke/mindustry/game/MusicControl.java b/core/src/io/anuke/mindustry/game/MusicControl.java index 81b0cdf0b6..a582babaca 100644 --- a/core/src/io/anuke/mindustry/game/MusicControl.java +++ b/core/src/io/anuke/mindustry/game/MusicControl.java @@ -17,9 +17,9 @@ public class MusicControl{ private static final float finTime = 120f, foutTime = 120f, musicInterval = 60 * 60 * 3f, musicChance = 0.6f, musicWaveChance = 0.5f; /** normal, ambient music, plays at any time */ - public final Array ambientMusic = Array.with(Musics.game1, Musics.game3, Musics.game4, Musics.game6); + public Array ambientMusic = Array.with(); /** darker music, used in times of conflict */ - public final Array darkMusic = Array.with(Musics.game2, Musics.game5, Musics.game7); + public Array darkMusic = Array.with(); private Music lastRandomPlayed; private Interval timer = new Interval(); private @Nullable Music current; @@ -27,6 +27,11 @@ public class MusicControl{ private boolean silenced; public MusicControl(){ + Events.on(ClientLoadEvent.class, e -> { + ambientMusic = Array.with(Musics.game1, Musics.game3, Musics.game4, Musics.game6); + darkMusic = Array.with(Musics.game2, Musics.game5, Musics.game7); + }); + //only run music 10 seconds after a wave spawns Events.on(WaveEvent.class, e -> Time.run(60f * 10f, () -> { if(Mathf.chance(musicWaveChance)){ diff --git a/core/src/io/anuke/mindustry/game/Tutorial.java b/core/src/io/anuke/mindustry/game/Tutorial.java index d2534c151b..8eb8e9e054 100644 --- a/core/src/io/anuke/mindustry/game/Tutorial.java +++ b/core/src/io/anuke/mindustry/game/Tutorial.java @@ -187,7 +187,7 @@ public class Tutorial{ } },; - protected final String line = Core.bundle.has("tutorial." + name() + ".mobile") && mobile ? "tutorial." + name() + ".mobile" : "tutorial." + name(); + protected String line = ""; protected final Function text; protected Array sentences; protected final BooleanProvider done; @@ -203,7 +203,10 @@ public class Tutorial{ /** displayed tutorial stage text.*/ public String text(){ - if(sentences == null) this.sentences = Array.select(Core.bundle.get(line).split("\n"), s -> !s.isEmpty()); + if(sentences == null){ + this.line = Core.bundle.has("tutorial." + name() + ".mobile") && mobile ? "tutorial." + name() + ".mobile" : "tutorial." + name(); + this.sentences = Array.select(Core.bundle.get(line).split("\n"), s -> !s.isEmpty()); + } String line = sentences.get(control.tutorial.sentence); return line.contains("{") ? text.get(line) : line; } diff --git a/core/src/io/anuke/mindustry/game/Version.java b/core/src/io/anuke/mindustry/game/Version.java index 3cbd43f52b..1df671ae06 100644 --- a/core/src/io/anuke/mindustry/game/Version.java +++ b/core/src/io/anuke/mindustry/game/Version.java @@ -33,7 +33,7 @@ public class Version{ PropertiesUtils.load(map, file.reader()); type = map.get("type"); - number = Integer.parseInt(map.get("number")); + number = Integer.parseInt(map.get("number", "4")); modifier = map.get("modifier"); if(map.get("build").contains(".")){ String[] split = map.get("build").split("\\."); diff --git a/core/src/io/anuke/mindustry/graphics/Pixelator.java b/core/src/io/anuke/mindustry/graphics/Pixelator.java index 448e35bffe..587ce3077a 100644 --- a/core/src/io/anuke/mindustry/graphics/Pixelator.java +++ b/core/src/io/anuke/mindustry/graphics/Pixelator.java @@ -55,7 +55,7 @@ public class Pixelator implements Disposable{ Draw.rect(Draw.wrap(buffer.getTexture()), Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height); Draw.blend(); - playerGroup.draw(p -> !p.isDead() && !p.isLocal, Player::drawName); + playerGroup.draw(p -> !p.isDead(), Player::drawName); Core.camera.position.set(px, py); Core.settings.put("animatedwater", hadWater); diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 874e29ae5b..acef76ac47 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -236,6 +236,15 @@ public class DesktopInput extends InputHandler{ selectY = tileY(Core.input.mouseY()); } + if (mode == placing && block != null){ + if (!overrideLineRotation && !Core.input.keyDown(Binding.diagonal_placement) && (selectX != cursorX || selectY != cursorY) && ((int) Core.input.axisTap(Binding.rotate) != 0)){ + rotation = ((int)((Angles.angle(selectX, selectY, cursorX, cursorY) + 45) / 90f)) % 4; + overrideLineRotation = true; + } + }else{ + overrideLineRotation = false; + } + if(Core.input.keyRelease(Binding.break_block) || Core.input.keyRelease(Binding.select)){ if(mode == placing && block != null){ //touch up while placing, place everything in selection @@ -280,7 +289,7 @@ public class DesktopInput extends InputHandler{ } @Override - public void updateController(){ + public void updateState(){ if(state.is(State.menu)){ droppingItem = false; mode = none; diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index e4e8dadfc7..c976eb7570 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -38,6 +38,7 @@ public abstract class InputHandler implements InputProcessor{ public final OverlayFragment frag = new OverlayFragment(); public Block block; + public boolean overrideLineRotation; public int rotation; public boolean droppingItem; @@ -58,7 +59,7 @@ public abstract class InputHandler implements InputProcessor{ @Remote(targets = Loc.both, forward = true, called = Loc.server) public static void transferInventory(Player player, Tile tile){ - if(!player.timer.get(Player.timerTransfer, 40)) return; + if(player == null || player.timer == null || !player.timer.get(Player.timerTransfer, 40)) return; if(net.server() && (player.item().amount <= 0 || player.isTransferring|| !tile.interactable(player.getTeam()))){ throw new ValidateException(player, "Player cannot transfer an item."); } @@ -132,7 +133,7 @@ public abstract class InputHandler implements InputProcessor{ } - public void updateController(){ + public void updateState(){ } @@ -273,6 +274,23 @@ public abstract class InputHandler implements InputProcessor{ public void remove(){ Core.input.removeProcessor(this); frag.remove(); + if(Core.scene != null){ + Table table = (Table)Core.scene.find("inputTable"); + if(table != null){ + table.clear(); + } + } + } + + public void add(){ + Core.input.addProcessor(this); + if(Core.scene != null){ + Table table = (Table)Core.scene.find("inputTable"); + if(table != null){ + table.clear(); + buildUI(table); + } + } } public boolean canShoot(){ @@ -363,7 +381,10 @@ public abstract class InputHandler implements InputProcessor{ } float angle = Angles.angle(startX, startY, endX, endY); - int baseRotation = (startX == endX && startY == endY) ? rotation : ((int)((angle + 45) / 90f)) % 4; + int baseRotation = rotation; + if (!overrideLineRotation || diagonal){ + baseRotation = (startX == endX && startY == endY) ? rotation : ((int)((angle + 45) / 90f)) % 4; + } Tmp.r3.set(-1, -1, 0, 0); @@ -377,7 +398,11 @@ public abstract class InputHandler implements InputProcessor{ Point2 next = i == points.size - 1 ? null : points.get(i + 1); line.x = point.x; line.y = point.y; - line.rotation = next != null ? Tile.relativeTo(point.x, point.y, next.x, next.y) : baseRotation; + if (!overrideLineRotation || diagonal){ + line.rotation = next != null ? Tile.relativeTo(point.x, point.y, next.x, next.y) : baseRotation; + }else{ + line.rotation = rotation; + } line.last = next == null; cons.accept(line); diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 14f86e360f..a5e8ec603f 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -36,6 +36,7 @@ public class MobileInput extends InputHandler implements GestureListener{ //gesture data private Vector2 vector = new Vector2(); private float lastZoom = -1; + private GestureDetector detector; /** Position where the player started dragging a line. */ private int lineStartX, lineStartY; @@ -65,38 +66,6 @@ public class MobileInput extends InputHandler implements GestureListener{ private int prevX, prevY, prevRotation; - public MobileInput(){ - Events.on(ClientLoadEvent.class, e -> { - GestureDetector dec = new GestureDetector(20, 0.5f, 0.4f, 0.15f, this){ - boolean clearMouse = false; - - @Override - public boolean touchDown(int x, int y, int pointer, KeyCode button){ - if(Core.scene.hasMouse(x, y)){ - clearMouse = true; - return false; - } - return super.touchDown(x, y, pointer, button); - } - - @Override - public boolean touchDragged(int x, int y, int pointer){ - if(!clearMouse){ - return super.touchDragged(x, y, pointer); - } - return false; - } - - @Override - public boolean touchUp(int x, int y, int pointer, KeyCode button){ - clearMouse = false; - return super.touchUp(x, y, pointer, button); - } - }; - Core.input.getInputProcessors().insert(0, dec); - }); - } - //region utility methods /** Check and assign targets for a specific position. */ @@ -322,6 +291,7 @@ public class MobileInput extends InputHandler implements GestureListener{ }).visible(() -> !selection.isEmpty()).name("confirmplace"); Core.scene.table(t -> { + t.setName("cancelMobile"); t.bottom().left().visible(() -> (player.isBuilding() || block != null || mode == breaking) && !state.is(State.menu)); t.addImageTextButton("$cancel", Icon.cancelSmall, () -> { player.clearBuilding(); @@ -471,6 +441,24 @@ public class MobileInput extends InputHandler implements GestureListener{ //endregion //region input events + @Override + public void add(){ + Core.input.addProcessor(detector = new GestureDetector(20, 0.5f, 0.4f, 0.15f, this)); + super.add(); + } + + @Override + public void remove(){ + super.remove(); + if(detector != null){ + Core.input.removeProcessor(detector); + } + + if(Core.scene != null && Core.scene.find("cancelMobile") != null){ + Core.scene.find("cancelMobile").remove(); + } + } + @Override public boolean touchDown(int screenX, int screenY, int pointer, KeyCode button){ if(state.is(State.menu) || player.isDead()) return false; diff --git a/core/src/io/anuke/mindustry/maps/Map.java b/core/src/io/anuke/mindustry/maps/Map.java index 92789727dc..94fa841f08 100644 --- a/core/src/io/anuke/mindustry/maps/Map.java +++ b/core/src/io/anuke/mindustry/maps/Map.java @@ -20,6 +20,8 @@ public class Map implements Comparable{ public final FileHandle file; /** Format version. */ public final int version; + /** Whether this map is managed, e.g. downloaded from the Steam workshop.*/ + public boolean workshop; /** Map width/height, shorts. */ public int width, height; /** Preview texture. */ @@ -57,8 +59,12 @@ public class Map implements Comparable{ return Core.settings.getInt("hiscore" + file.nameWithoutExtension(), 0); } + public Texture safeTexture(){ + return texture == null ? Core.assets.get("sprites/error.png") : texture; + } + public FileHandle previewFile(){ - return Vars.mapPreviewDirectory.child(file.nameWithoutExtension() + ".png"); + return Vars.mapPreviewDirectory.child((workshop ? file.parent().name() : file.nameWithoutExtension()) + ".png"); } public FileHandle cacheFile(){ @@ -127,6 +133,8 @@ public class Map implements Comparable{ @Override public int compareTo(Map map){ + int work = -Boolean.compare(workshop, map.workshop); + if(work != 0) return work; int type = -Boolean.compare(custom, map.custom); if(type != 0) return type; int modes = Boolean.compare(Gamemode.pvp.valid(this), Gamemode.pvp.valid(map)); diff --git a/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java b/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java index c743ec5bab..da229addce 100644 --- a/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java +++ b/core/src/io/anuke/mindustry/maps/MapPreviewLoader.java @@ -5,6 +5,8 @@ import io.anuke.arc.assets.loaders.*; import io.anuke.arc.assets.loaders.resolvers.*; import io.anuke.arc.collection.*; import io.anuke.arc.files.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.util.*; import io.anuke.mindustry.*; import io.anuke.mindustry.game.*; @@ -19,12 +21,27 @@ public class MapPreviewLoader extends TextureLoader{ try{ super.loadAsync(manager, fileName, file.sibling(file.nameWithoutExtension()), parameter); }catch(Exception e){ - e.printStackTrace(); + Log.err(e); MapPreviewParameter param = (MapPreviewParameter)parameter; Vars.maps.queueNewPreview(param.map); } } + @Override + public Texture loadSync(AssetManager manager, String fileName, FileHandle file, TextureParameter parameter){ + try{ + return super.loadSync(manager, fileName, file, parameter); + }catch(Throwable e){ + Log.err(e); + try{ + return new Texture(file); + }catch(Throwable e2){ + Log.err(e2); + return new Texture("sprites/error.png"); + } + } + } + @Override public Array getDependencies(String fileName, FileHandle file, TextureParameter parameter){ return Array.with(new AssetDescriptor<>("contentcreate", Content.class)); diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 7336e63114..395ceafec6 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -81,6 +81,7 @@ public class Maps{ /** Load all maps. Should be called at application start. */ public void load(){ + //defaults; must work try{ for(String name : defaultMapNames){ FileHandle file = Core.files.internal("maps/" + name + "." + mapExtension); @@ -90,7 +91,27 @@ public class Maps{ throw new RuntimeException(e); } - loadCustomMaps(); + //custom + for(FileHandle file : customMapDirectory.list()){ + try{ + if(file.extension().equalsIgnoreCase(mapExtension)){ + loadMap(file, true); + } + }catch(Exception e){ + Log.err("Failed to load custom map file '{0}'!", file); + Log.err(e); + } + } + + //workshop + for(FileHandle file : platform.getExternalMaps()){ + try{ + loadMap(file, false).workshop = true; + }catch(Exception e){ + Log.err("Failed to load workshop map file '{0}'!", file); + Log.err(e); + } + } } public void reload(){ @@ -174,14 +195,6 @@ public class Maps{ } } - /** Creates a legacy map by converting it to a non-legacy map and pasting it in a temp directory. - * Should be followed up by {@link #importMap(FileHandle)} .*/ - public Map makeLegacyMap(FileHandle file) throws IOException{ - FileHandle dst = tmpDirectory.child("conversion_map." + mapExtension); - LegacyMapIO.convertMap(file, dst); - return MapIO.createMap(dst, true); - } - /** Import a map, then save it. This updates all values and stored data necessary. */ public void importMap(FileHandle file) throws IOException{ FileHandle dest = findFile(); @@ -203,7 +216,6 @@ public class Maps{ if(error[0] != null){ throw new IOException(error[0]); } - } /** Attempts to run the following code; @@ -314,7 +326,7 @@ public class Maps{ for(Map map : maps){ //try to load preview if(map.previewFile().exists()){ - //this may fail, but calls createNewPreview + //this may fail, but calls queueNewPreview Core.assets.load(new AssetDescriptor<>(map.previewFile().path() + "." + mapExtension, Texture.class, new MapPreviewParameter(map))).loaded = t -> map.texture = (Texture)t; try{ @@ -332,7 +344,7 @@ public class Maps{ private void createAllPreviews(){ Core.app.post(() -> { for(Map map : previewList){ - createNewPreview(map, e -> Core.app.post(() -> map.texture = new Texture("sprites/error.png"))); + createNewPreview(map, e -> Core.app.post(() -> map.texture = Core.assets.get("sprites/error.png"))); } previewList.clear(); }); @@ -407,16 +419,4 @@ public class Maps{ return map; } - private void loadCustomMaps(){ - for(FileHandle file : customMapDirectory.list()){ - try{ - if(file.extension().equalsIgnoreCase(mapExtension)){ - loadMap(file, true); - } - }catch(Exception e){ - Log.err("Failed to load custom map file '{0}'!", file); - Log.err(e); - } - } - } } \ No newline at end of file diff --git a/core/src/io/anuke/mindustry/net/CrashSender.java b/core/src/io/anuke/mindustry/net/CrashSender.java index 6970e9521b..cc29071615 100644 --- a/core/src/io/anuke/mindustry/net/CrashSender.java +++ b/core/src/io/anuke/mindustry/net/CrashSender.java @@ -25,8 +25,8 @@ public class CrashSender{ try{ exception.printStackTrace(); - //don't create crash logs for me (anuke) or custom builds, as it's expected - if(System.getProperty("user.name").equals("anuke") || Version.build == -1) return; + //don't create crash logs for custom builds, as it's expected + if(Version.build == -1) return; //attempt to load version regardless if(Version.number == 0){ diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index 66482ab729..eddd19c1e6 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -46,7 +46,9 @@ public class Net{ t = t.getCause(); } - String error = t.getMessage() == null ? "" : t.getMessage().toLowerCase(); + String baseError = Strings.getFinalMesage(e); + + String error = baseError == null ? "" : baseError.toLowerCase(); String type = t.getClass().toString().toLowerCase(); boolean isError = false; diff --git a/core/src/io/anuke/mindustry/net/NetConnection.java b/core/src/io/anuke/mindustry/net/NetConnection.java index d2e1c3f86c..9334fd78c8 100644 --- a/core/src/io/anuke/mindustry/net/NetConnection.java +++ b/core/src/io/anuke/mindustry/net/NetConnection.java @@ -29,6 +29,7 @@ public abstract class NetConnection{ this.address = address; } + /** Kick with a special, localized reason. Use this if possible. */ public void kick(KickReason reason){ Log.info("Kicking connection {0}; Reason: {1}", address, reason.name()); @@ -45,6 +46,23 @@ public abstract class NetConnection{ netServer.admins.save(); } + /** Kick with an arbitrary reason. */ + public void kick(String reason){ + Log.info("Kicking connection {0}; Reason: {1}", address, reason); + + if(player != null && player.uuid != null){ + PlayerInfo info = netServer.admins.getInfo(player.uuid); + info.timesKicked++; + info.lastKicked = Math.max(Time.millis(), info.lastKicked); + } + + Call.onKick(this, reason); + + Time.runTask(2f, this::close); + + netServer.admins.save(); + } + public boolean isConnected(){ return true; } diff --git a/core/src/io/anuke/mindustry/plugin/Plugins.java b/core/src/io/anuke/mindustry/plugin/Plugins.java index dcd7d8501b..946ec00f4f 100644 --- a/core/src/io/anuke/mindustry/plugin/Plugins.java +++ b/core/src/io/anuke/mindustry/plugin/Plugins.java @@ -67,7 +67,7 @@ public class Plugins{ URLClassLoader classLoader = new URLClassLoader(new URL[]{jar.file().toURI().toURL()}, ClassLoader.getSystemClassLoader()); Class main = classLoader.loadClass(meta.main); metas.put(main, meta); - return new LoadedPlugin(jar, zip, (Plugin)main.newInstance(), meta); + return new LoadedPlugin(jar, zip, (Plugin)main.getDeclaredConstructor().newInstance(), meta); } /** Represents a plugin that has been loaded from a jar file.*/ diff --git a/core/src/io/anuke/mindustry/type/Category.java b/core/src/io/anuke/mindustry/type/Category.java index a90bad9c64..a22b742345 100644 --- a/core/src/io/anuke/mindustry/type/Category.java +++ b/core/src/io/anuke/mindustry/type/Category.java @@ -20,5 +20,7 @@ public enum Category{ /** Things that upgrade the player such as mech pads. */ upgrade, /** Things for storage or passive effects. */ - effect + effect; + + public static final Category[] all = values(); } diff --git a/core/src/io/anuke/mindustry/type/StatusEffect.java b/core/src/io/anuke/mindustry/type/StatusEffect.java index 19b662d76c..ae74288758 100644 --- a/core/src/io/anuke/mindustry/type/StatusEffect.java +++ b/core/src/io/anuke/mindustry/type/StatusEffect.java @@ -5,7 +5,7 @@ import io.anuke.arc.collection.ObjectMap; import io.anuke.arc.function.Supplier; import io.anuke.arc.graphics.Color; import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Time; +import io.anuke.arc.util.*; import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects.Effect; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java index 1031474167..a78051e601 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ControlsDialog.java @@ -13,13 +13,7 @@ public class ControlsDialog extends KeybindDialog{ setFillParent(true); title.setAlignment(Align.center); titleTable.row(); - titleTable.add(new Image()) - .growX().height(3f).pad(4f).get().setColor(Pal.accent); - if(Vars.mobile){ - cont.row(); - cont.add("$keybinds.mobile") - .center().growX().wrap().get().setAlignment(Align.center); - } + titleTable.add(new Image()).growX().height(3f).pad(4f).get().setColor(Pal.accent); } @Override diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java index efbdfa65df..74eb693fec 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java @@ -48,7 +48,7 @@ public class CustomGameDialog extends FloatingDialog{ maps.row(); } - ImageButton image = new ImageButton(new TextureRegion(map.texture), Styles.cleari); + ImageButton image = new ImageButton(new TextureRegion(map.safeTexture()), Styles.cleari); image.margin(5); image.top(); @@ -72,7 +72,7 @@ public class CustomGameDialog extends FloatingDialog{ image.add(img).size(images); - BorderImage border = new BorderImage(map.texture, 3f); + BorderImage border = new BorderImage(map.safeTexture(), 3f); border.setScaling(Scaling.fit); image.replaceImage(border); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 4ee58e10af..279731417e 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -195,6 +195,8 @@ public class LoadDialog extends FloatingDialog{ try{ net.reset(); slot.load(); + state.rules.editor = false; + state.rules.zone = null; state.set(State.playing); }catch(SaveException e){ Log.err(e); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java index c55b4f6fb8..b3da2b2f3f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java @@ -69,7 +69,7 @@ public class MapPlayDialog extends FloatingDialog{ cont.row(); cont.addImageTextButton("$customize", Icon.toolsSmall, () -> dialog.show(rules, () -> rules = map.applyRules(selectedGamemode))).width(230); cont.row(); - cont.add(new BorderImage(map.texture, 3f)).size(mobile && !Core.graphics.isPortrait() ? 150f : 250f).get().setScaling(Scaling.fit); + cont.add(new BorderImage(map.safeTexture(), 3f)).size(mobile && !Core.graphics.isPortrait() ? 150f : 250f).get().setScaling(Scaling.fit); //only maps with survival are valid for high scores if(Gamemode.survival.valid(map)){ cont.row(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java index 956c76bbd5..c6b2dabe60 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java @@ -4,7 +4,6 @@ import io.anuke.arc.*; import io.anuke.arc.graphics.*; import io.anuke.arc.input.*; import io.anuke.arc.math.*; -import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; @@ -53,12 +52,18 @@ public class MapsDialog extends FloatingDialog{ buttons.addImageTextButton("$editor.newmap", Icon.add, () -> { ui.showTextInput("$editor.newmap", "$name", "", text -> { - ui.loadAnd(() -> { + Runnable show = () -> ui.loadAnd(() -> { hide(); ui.editor.show(); ui.editor.editor.getTags().put("name", text); Events.fire(new MapMakeEvent()); }); + + if(maps.byName(text) != null){ + ui.showErrorMessage("$editor.exists"); + }else{ + show.run(); + } }); }).size(210f, 64f); @@ -137,9 +142,9 @@ public class MapsDialog extends FloatingDialog{ button.row(); button.addImage().growX().pad(4).color(Pal.gray); button.row(); - button.stack(new Image(map.texture).setScaling(Scaling.fit), new BorderImage(map.texture).setScaling(Scaling.fit)).size(mapsize - 20f); + button.stack(new Image(map.safeTexture()).setScaling(Scaling.fit), new BorderImage(map.safeTexture()).setScaling(Scaling.fit)).size(mapsize - 20f); button.row(); - button.add(map.custom ? "$custom" : "$builtin").color(Color.gray).padTop(3); + button.add(map.custom ? "$custom" : map.workshop ? "$workshop" : "$builtin").color(Color.gray).padTop(3); i++; } @@ -160,7 +165,7 @@ public class MapsDialog extends FloatingDialog{ float mapsize = Core.graphics.isPortrait() ? 160f : 300f; Table table = dialog.cont; - table.stack(new Image(map.texture).setScaling(Scaling.fit), new BorderImage(map.texture).setScaling(Scaling.fit)).size(mapsize); + table.stack(new Image(map.safeTexture()).setScaling(Scaling.fit), new BorderImage(map.safeTexture()).setScaling(Scaling.fit)).size(mapsize); table.table(Styles.black, desc -> { desc.top(); @@ -199,13 +204,17 @@ public class MapsDialog extends FloatingDialog{ } }).fillX().height(54f).marginLeft(10); - table.addImageTextButton("$delete", Icon.trash16Small, () -> { - ui.showConfirm("$confirm", Core.bundle.format("map.delete", map.name()), () -> { - maps.removeMap(map); - dialog.hide(); - setup(); - }); - }).fillX().height(54f).marginLeft(10).disabled(!map.custom).touchable(map.custom ? Touchable.enabled : Touchable.disabled); + table.addImageTextButton(map.workshop ? "$view.workshop" : "$delete", map.workshop ? Icon.linkSmall : Icon.trash16Small, () -> { + if(map.workshop){ + platform.viewMapListing(map); + }else{ + ui.showConfirm("$confirm", Core.bundle.format("map.delete", map.name()), () -> { + maps.removeMap(map); + dialog.hide(); + setup(); + }); + } + }).fillX().height(54f).marginLeft(10).disabled(!map.workshop && !map.custom); dialog.show(); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index aaf1e63d49..c2de795729 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -58,7 +58,7 @@ public class PausedDialog extends FloatingDialog{ cont.row(); cont.addButton("$hostserver", () -> { - if(net.active() && steam){ + if(net.server() && steam){ platform.inviteFriends(); }else{ if(steam){ @@ -67,12 +67,12 @@ public class PausedDialog extends FloatingDialog{ ui.host.show(); } } - }).disabled(b -> net.active() && !steam).colspan(2).width(dw * 2 + 20f).update(e -> e.setText(net.active() && steam ? "$invitefriends" : "$hostserver")); + }).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 20f).update(e -> e.setText(net.server() && steam ? "$invitefriends" : "$hostserver")); } cont.row(); - cont.addButton("$quit", this::showQuitConfirm).colspan(2).width(dw + 10f); + cont.addButton("$quit", this::showQuitConfirm).colspan(2).width(dw + 10f).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit")); }else{ cont.defaults().size(120f).pad(5); @@ -91,7 +91,7 @@ public class PausedDialog extends FloatingDialog{ cont.addRowImageTextButton("$hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); - cont.addRowImageTextButton("$quit", Icon.quit, this::showQuitConfirm); + cont.addRowImageTextButton("$quit", Icon.quit, this::showQuitConfirm).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit")); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index 28226b215d..58139cd3ed 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -17,6 +17,7 @@ import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.input.*; import io.anuke.mindustry.ui.*; import static io.anuke.arc.Core.bundle; @@ -126,24 +127,21 @@ public class SettingsMenuDialog extends SettingsDialog{ t.row(); - //iOS doesn't have a file chooser. - //if(!ios){ - t.addButton("$data.import", style, () -> ui.showConfirm("$confirm", "$data.import.confirm", () -> platform.showFileChooser(true, "zip", file -> { - try{ - data.importData(file); - Core.app.exit(); - }catch(IllegalArgumentException e){ + t.addButton("$data.import", style, () -> ui.showConfirm("$confirm", "$data.import.confirm", () -> platform.showFileChooser(true, "zip", file -> { + try{ + data.importData(file); + Core.app.exit(); + }catch(IllegalArgumentException e){ + ui.showErrorMessage("$data.invalid"); + }catch(Exception e){ + e.printStackTrace(); + if(e.getMessage() == null || !e.getMessage().contains("too short")){ + ui.showException(e); + }else{ ui.showErrorMessage("$data.invalid"); - }catch(Exception e){ - e.printStackTrace(); - if(e.getMessage() == null || !e.getMessage().contains("too short")){ - ui.showException(e); - }else{ - ui.showErrorMessage("$data.invalid"); - } } - }))); - //} + } + }))); }); ScrollPane pane = new ScrollPane(prefs); @@ -205,8 +203,20 @@ public class SettingsMenuDialog extends SettingsDialog{ game.screenshakePref(); if(mobile){ game.checkPref("autotarget", true); - game.checkPref("keyboard", false); + game.checkPref("keyboard", false, val -> control.setInput(val ? new DesktopInput() : new MobileInput())); + if(Core.settings.getBool("keyboard")){ + control.setInput(new DesktopInput()); + } } + //the issue with touchscreen support on desktop is that: + //1) I can't test it + //2) the SDL backend doesn't support multitouch + /*else{ + game.checkPref("touchscreen", false, val -> control.setInput(!val ? new DesktopInput() : new MobileInput())); + if(Core.settings.getBool("touchscreen")){ + control.setInput(new MobileInput()); + } + }*/ game.sliderPref("saveinterval", 60, 10, 5 * 120, i -> Core.bundle.format("setting.seconds", i)); if(!mobile){ @@ -294,7 +304,7 @@ public class SettingsMenuDialog extends SettingsDialog{ } }); - graphics.checkPref("linear", false, b -> { + graphics.checkPref("linear", !mobile, b -> { for(Texture tex : Core.atlas.getTextures()){ TextureFilter filter = b ? TextureFilter.Linear : TextureFilter.Nearest; tex.setFilter(filter, filter); diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java index b41dd8ea40..7644ec9559 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java @@ -1,17 +1,14 @@ package io.anuke.mindustry.ui.fragments; -import io.anuke.arc.Core; -import io.anuke.arc.math.Interpolation; -import io.anuke.arc.math.geom.Vector2; -import io.anuke.arc.scene.Element; -import io.anuke.arc.scene.Group; -import io.anuke.arc.scene.actions.Actions; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.util.Align; -import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; +import io.anuke.arc.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.actions.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.*; @@ -66,10 +63,10 @@ public class BlockConfigFragment extends Fragment{ } table.setOrigin(Align.center); - Vector2 pos = Core.input.mouseScreen(tile.drawx(), tile.drawy() - tile.block().size * tilesize / 2f - 1); - table.setPosition(pos.x, pos.y, Align.top); if(configTile == null || configTile.block() == Blocks.air || configTile.block() != configBlock){ hideConfig(); + }else{ + configTile.block().updateTableAlign(tile, table); } }); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index fc80e13ac8..63c4828f7e 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -32,7 +32,7 @@ import static io.anuke.mindustry.Vars.*; public class BlockInventoryFragment extends Fragment{ private final static float holdWithdraw = 20f; - private Table table; + private Table table = new Table(); private Tile tile; private float holdTime = 0f; private boolean holding; @@ -52,7 +52,6 @@ public class BlockInventoryFragment extends Fragment{ @Override public void build(Group parent){ - table = new Table(); table.setName("inventory"); table.setTransform(true); parent.setTransform(true); @@ -150,7 +149,7 @@ public class BlockInventoryFragment extends Fragment{ image.addListener(new InputListener(){ @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, KeyCode button){ - if(!canPick.get() || !tile.entity.items.has(item)) return false; + if(!canPick.get() || tile == null || tile.entity == null || tile.entity.items == null || !tile.entity.items.has(item)) return false; int amount = Math.min(1, player.maxAccepted(item)); if(amount > 0){ Call.requestItem(player, tile, item, amount); diff --git a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java index ab7889594a..e46d4283c2 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java @@ -100,7 +100,7 @@ public class ChatFragment extends Table{ fieldlabel.setStyle(fieldlabel.getStyle()); chatfield = new TextField("", new TextField.TextFieldStyle(scene.getStyle(TextField.TextFieldStyle.class))); - chatfield.setFilter((field, c) -> field.getText().length() < Vars.maxTextLength); + chatfield.setMaxLength(Vars.maxTextLength); chatfield.getStyle().background = null; chatfield.getStyle().font = Fonts.chat; chatfield.getStyle().fontColor = Color.white; diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 37c48d27a0..5196a97119 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -572,9 +572,6 @@ public class HudFragment extends Fragment{ } shown = !shown; - if(flip != null){ - flip.getParent().act(Core.graphics.getDeltaTime()); - } } private void addWaveTable(Button table){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 567b49898d..548ae1aee9 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -26,7 +26,7 @@ public class PlacementFragment extends Fragment{ Array returnArray = new Array<>(); Array returnCatArray = new Array<>(); - boolean[] categoryEmpty = new boolean[Category.values().length]; + boolean[] categoryEmpty = new boolean[Category.all.length]; Category currentCategory = Category.distribution; Block hovered, lastDisplay; Tile lastHover; @@ -91,7 +91,7 @@ public class PlacementFragment extends Fragment{ int i = 0; for(KeyCode key : inputCatGrid){ if(Core.input.keyDown(key)){ - input.block = getByCategory(Category.values()[i]).first(); + input.block = getByCategory(Category.all[i]).first(); currentCategory = input.block.buildCategory; } i++; @@ -116,7 +116,6 @@ public class PlacementFragment extends Fragment{ full.bottom().right().visible(() -> ui.hudfrag.shown()); full.table(frame -> { - InputHandler input = control.input; //rebuilds the category table with the correct recipes Runnable rebuildCategory = () -> { @@ -140,7 +139,7 @@ public class PlacementFragment extends Fragment{ ImageButton button = blockTable.addImageButton(Icon.lockedSmall, Styles.selecti, () -> { if(unlocked(block)){ - input.block = input.block == block ? null : block; + control.input.block = control.input.block == block ? null : block; } }).size(46f).group(group).name("block-" + block.name).get(); @@ -150,7 +149,7 @@ public class PlacementFragment extends Fragment{ TileEntity core = player.getClosestCore(); Color color = state.rules.infiniteResources || (core != null && (core.items.has(block.buildRequirements, state.rules.buildCostMultiplier) || state.rules.infiniteResources)) ? Color.white : Color.gray; button.forEach(elem -> elem.setColor(color)); - button.setChecked(input.block == block); + button.setChecked(control.input.block == block); }); button.hovered(() -> hovered = block); @@ -250,7 +249,7 @@ public class PlacementFragment extends Fragment{ blocksSelect.margin(4).marginTop(0); blocksSelect.table(blocks -> blockTable = blocks).grow(); blocksSelect.row(); - blocksSelect.table(input::buildUI).growX(); + blocksSelect.table(control.input::buildUI).name("inputTable").growX(); }).fillY().bottom().touchable(Touchable.enabled); frame.table(categories -> { categories.defaults().size(50f); @@ -258,7 +257,7 @@ public class PlacementFragment extends Fragment{ ButtonGroup group = new ButtonGroup<>(); //update category empty values - for(Category cat : Category.values()){ + for(Category cat : Category.all){ Array blocks = getByCategory(cat); categoryEmpty[cat.ordinal()] = blocks.isEmpty() || !unlocked(blocks.first()); } @@ -281,7 +280,7 @@ public class PlacementFragment extends Fragment{ rebuildCategory.run(); frame.update(() -> { - if(gridUpdate(input)) rebuildCategory.run(); + if(gridUpdate(control.input)) rebuildCategory.run(); }); }); }); @@ -289,7 +288,7 @@ public class PlacementFragment extends Fragment{ Array getCategories(){ returnCatArray.clear(); - returnCatArray.addAll(Category.values()); + returnCatArray.addAll(Category.all); returnCatArray.sort((c1, c2) -> Boolean.compare(categoryEmpty[c1.ordinal()], categoryEmpty[c2.ordinal()])); return returnCatArray; } diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index 0857661274..b9fd089a1c 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -129,6 +129,11 @@ public class PlayerListFragment extends Fragment{ t.addImageButton(Icon.zoomSmall, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace)); }).padRight(12).size(bs + 10f, bs); + }else if((!user.isLocal && !user.isAdmin) && net.client() && playerGroup.size() >= 3){ //votekick + button.add().growY(); + + button.addImageButton(Icon.banSmall, Styles.clearPartiali, + () -> ui.showConfirm("$confirm", "$confirmvotekick", () -> Call.sendChatMessage("/votekick " + user.name))).size(h); } content.add(button).padBottom(-6).width(350f).maxHeight(h + 14); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index a338a189c8..28296cc44a 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -440,11 +440,17 @@ public class Block extends BlockStorage{ /** * Called when this block is tapped to build a UI on the table. - * {@link #configurable} able} must return true for this to be called. + * {@link #configurable} must return true for this to be called. */ public void buildTable(Tile tile, Table table){ } + /** Update table alignment after configuring.*/ + public void updateTableAlign(Tile tile, Table table){ + Vector2 pos = Core.input.mouseScreen(tile.drawx(), tile.drawy() - tile.block().size * tilesize / 2f - 1); + table.setPosition(pos.x, pos.y, Align.top); + } + /** * Called when another tile is tapped while this block is selected. * Returns whether or not this block should be deselected. diff --git a/core/src/io/anuke/mindustry/world/BlockStorage.java b/core/src/io/anuke/mindustry/world/BlockStorage.java index 8573284852..920dba6c3e 100644 --- a/core/src/io/anuke/mindustry/world/BlockStorage.java +++ b/core/src/io/anuke/mindustry/world/BlockStorage.java @@ -111,7 +111,7 @@ public abstract class BlockStorage extends UnlockableContent{ Tile other = proximity.get((i + dump) % proximity.size); Tile in = Edges.getFacingEdge(tile, other); - if(other.getTeam() == tile.getTeam() && other.block().hasLiquids && canDumpLiquid(tile, other, liquid)){ + if(other.getTeam() == tile.getTeam() && other.block().hasLiquids && canDumpLiquid(tile, other, liquid) && other.entity.liquids != null){ float ofract = other.entity.liquids.get(liquid) / other.block().liquidCapacity; float fract = tile.entity.liquids.get(liquid) / liquidCapacity; diff --git a/core/src/io/anuke/mindustry/world/ItemBuffer.java b/core/src/io/anuke/mindustry/world/ItemBuffer.java index 3c80a87f54..9c058ce50c 100644 --- a/core/src/io/anuke/mindustry/world/ItemBuffer.java +++ b/core/src/io/anuke/mindustry/world/ItemBuffer.java @@ -1,7 +1,6 @@ package io.anuke.mindustry.world; -import io.anuke.arc.util.Pack; -import io.anuke.arc.util.Time; +import io.anuke.arc.util.*; import io.anuke.mindustry.type.Item; import java.io.*; @@ -78,5 +77,6 @@ public class ItemBuffer{ buffer[i] = l; } } + index = Math.min(index, length - 1); } } diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index e67be3d812..2d0583da98 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -50,6 +50,10 @@ public class Tile implements Position, TargetTrait{ return Pos.get(x, y); } + public byte relativeTo(Tile tile){ + return relativeTo(tile.x, tile.y); + } + /** Return relative rotation to a coordinate. Returns -1 if the coordinate is not near this tile. */ public byte relativeTo(int cx, int cy){ if(x == cx && y == cy - 1) return 1; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/Door.java b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java index db08a2bdf4..d10afac6aa 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/Door.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java @@ -40,7 +40,7 @@ public class Door extends Wall{ entity.open = open; Door door = (Door)tile.block(); - pathfinder.updateSolid(tile); + pathfinder.updateTile(tile); if(!entity.open){ Effects.effect(door.openfx, tile.drawx(), tile.drawy()); }else{ diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java index 7ed149ba2e..86f15dce93 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/CooledTurret.java @@ -55,7 +55,7 @@ public class CooledTurret extends Turret{ Liquid liquid = entity.liquids.current(); float used = Math.min(Math.min(entity.liquids.get(liquid), maxUsed * Time.delta()), Math.max(0, ((reload - entity.reload) / coolantMultiplier) / liquid.heatCapacity)) * baseReloadSpeed(tile); - entity.reload += (used * liquid.heatCapacity) / liquid.heatCapacity; + entity.reload += used * liquid.heatCapacity * coolantMultiplier; entity.liquids.remove(liquid, used); if(Mathf.chance(0.06 * used)){ diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java index ba3e8dda79..948161dfd1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java @@ -100,7 +100,7 @@ public abstract class Turret extends Block{ stats.add(BlockStat.shootRange, range / tilesize, StatUnit.blocks); stats.add(BlockStat.inaccuracy, (int)inaccuracy, StatUnit.degrees); - stats.add(BlockStat.reload, 60f / reload * shots, StatUnit.none); + stats.add(BlockStat.reload, 60f / reload, StatUnit.none); stats.add(BlockStat.shots, shots, StatUnit.none); stats.add(BlockStat.targetsAir, targetAir); stats.add(BlockStat.targetsGround, targetGround); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ArmoredConveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ArmoredConveyor.java new file mode 100644 index 0000000000..08ae878b5a --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ArmoredConveyor.java @@ -0,0 +1,26 @@ +package io.anuke.mindustry.world.blocks.distribution; + +import io.anuke.arc.math.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.world.*; + +public class ArmoredConveyor extends Conveyor{ + + public ArmoredConveyor(String name){ + super(name); + } + + @Override + public boolean acceptItem(Item item, Tile tile, Tile source){ + return super.acceptItem(item, tile, source) && (source.block() instanceof Conveyor || Edges.getFacingEdge(source, tile).relativeTo(tile) == tile.rotation()); + } + + @Override + protected boolean blends(Tile tile, int direction){ + Tile other = tile.getNearby(Mathf.mod(tile.rotation() - direction, 4)); + if(other != null) other = other.link(); + + return other != null && other.block().outputsItems() + && ((tile.getNearby(tile.rotation()) == other) || ((!other.block().rotate && Edges.getFacingEdge(other, tile).relativeTo(tile) == tile.rotation()) || (other.block().rotate && other.getNearby(other.rotation()) == tile))); + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java index 2024c7f176..39c7e4d96b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java @@ -127,12 +127,12 @@ public class Conveyor extends Block{ draw.region = regions[blendbits][0]; } - private boolean blends(int rotation, int offset, int prevX, int prevY, int prevRotation){ + protected boolean blends(int rotation, int offset, int prevX, int prevY, int prevRotation){ Point2 left = Geometry.d4(rotation - offset); return left.equals(prevX, prevY) && prevRotation == Mathf.mod(rotation + offset, 4); } - private boolean blends(Tile tile, int direction){ + protected boolean blends(Tile tile, int direction){ Tile other = tile.getNearby(Mathf.mod(tile.rotation() - direction, 4)); if(other != null) other = other.link(); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java index f0cac836d6..d41b392a3a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -24,7 +24,6 @@ public class ItemBridge extends Block{ protected int timerTransport = timers++; protected int range; protected float transportTime = 2f; - protected IntArray removals = new IntArray(); protected TextureRegion endRegion, bridgeRegion, arrowRegion; private static int lastPlaced = Pos.invalid; @@ -162,21 +161,15 @@ public class ItemBridge extends Block{ entity.time += entity.cycleSpeed * entity.delta(); entity.time2 += (entity.cycleSpeed - 1f) * entity.delta(); - removals.clear(); - IntSetIterator it = entity.incoming.iterator(); - while(it.hasNext){ int i = it.next(); Tile other = world.tile(i); if(!linkValid(tile, other, false)){ - removals.add(i); + it.remove(); } } - for(int j = 0; j < removals.size; j++) - entity.incoming.remove(removals.get(j)); - Tile other = world.tile(entity.link); if(!linkValid(tile, other)){ entity.link = Pos.invalid; @@ -184,7 +177,7 @@ public class ItemBridge extends Block{ entity.uptime = 0f; }else{ - if(entity.cons.valid()){ + if(entity.cons.valid() && (!hasPower || Mathf.isZero(1f - entity.power.satisfaction))){ entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, 0.04f); }else{ entity.uptime = Mathf.lerpDelta(entity.uptime, 0f, 0.02f); @@ -259,6 +252,16 @@ public class ItemBridge extends Block{ int rel2 = tile.relativeTo(source.x, source.y); if(rel == rel2) return false; + + + IntSetIterator it = entity.incoming.iterator(); + + while(it.hasNext){ + int v = it.next(); + if(tile.absoluteRelativeTo(Pos.x(v), Pos.y(v)) == rel2){ + return false; + } + } }else{ return source.block() instanceof ItemBridge && source.entity().link == tile.pos() && tile.entity.items.total() < itemCapacity; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java index 2bce0d1904..60822e9f08 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -12,7 +12,6 @@ import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.Effects.*; import io.anuke.mindustry.entities.type.*; -import io.anuke.mindustry.entities.type.Bullet; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.*; @@ -120,26 +119,28 @@ public class MassDriver extends Block{ if( tile.entity.items.total() >= minDistribute && //must shoot minimum amount of items - link.block().itemCapacity - link.entity.items.total() >= minDistribute && //must have minimum amount of space - entity.reload <= 0.0001f //must have reloaded + link.block().itemCapacity - link.entity.items.total() >= minDistribute //must have minimum amount of space ){ MassDriverEntity other = link.entity(); other.waitingShooters.add(tile); - //align to target location - entity.rotation = Mathf.slerpDelta(entity.rotation, targetRotation, rotateSpeed * entity.power.satisfaction); + if(entity.reload <= 0.0001f){ - //fire when it's the first in the queue and angles are ready. - if(other.currentShooter() == tile && + //align to target location + entity.rotation = Mathf.slerpDelta(entity.rotation, targetRotation, rotateSpeed * entity.power.satisfaction); + + //fire when it's the first in the queue and angles are ready. + if(other.currentShooter() == tile && other.state == DriverState.accepting && Angles.near(entity.rotation, targetRotation, 2f) && Angles.near(other.rotation, targetRotation + 180f, 2f)){ - //actually fire - fire(tile, link); - //remove waiting shooters, it's done firing - other.waitingShooters.remove(tile); - //set both states to idle - entity.state = DriverState.idle; - other.state = DriverState.idle; + //actually fire + fire(tile, link); + //remove waiting shooters, it's done firing + other.waitingShooters.remove(tile); + //set both states to idle + entity.state = DriverState.idle; + other.state = DriverState.idle; + } } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java index 382a5dd470..bd92126717 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.world.blocks.distribution; import io.anuke.arc.collection.Array; import io.anuke.arc.util.Time; +import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.*; @@ -63,7 +64,7 @@ public class Router extends Block{ for(int i = 0; i < proximity.size; i++){ Tile other = proximity.get((i + counter) % proximity.size); if(set) tile.rotation((byte)((tile.rotation() + 1) % proximity.size)); - if(other == from) continue; + if(other == from && from.block() == Blocks.overflowGate) continue; if(other.block().acceptItem(item, other, Edges.getFacingEdge(tile, other))){ return other; } diff --git a/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java new file mode 100644 index 0000000000..2199d9335e --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java @@ -0,0 +1,169 @@ +package io.anuke.mindustry.world.blocks.logic; + +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.Input.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.TextField.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.arc.util.pooling.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.net.*; +import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.dialogs.*; +import io.anuke.mindustry.world.*; + +import java.io.*; + +import static io.anuke.mindustry.Vars.*; + +public class MessageBlock extends Block{ + protected static int maxTextLength = 170; + protected static int maxNewlines = 5; + + public MessageBlock(String name){ + super(name); + configurable = true; + solid = true; + destructible = true; + } + + @Remote(targets = Loc.both, called = Loc.both, forward = true) + public static void setMessageBlockText(Player player, Tile tile, String text){ + if(net.server() && text.length() > maxTextLength){ + throw new ValidateException(player, "Player has gone above text limit."); + } + + //can be broken while a player is typing + if(!(tile.block() instanceof MessageBlock)){ + return; + } + + StringBuilder result = new StringBuilder(text.length()); + text = text.trim(); + int count = 0; + for(int i = 0; i < text.length(); i++){ + char c = text.charAt(i); + if(c == '\n' || c == '\r'){ + count ++; + if(count <= maxNewlines){ + result.append('\n'); + } + }else{ + result.append(c); + } + } + + MessageBlockEntity entity = tile.entity(); + if(entity != null){ + entity.message = result.toString(); + entity.lines = entity.message.split("\n"); + } + } + + @Override + public void drawSelect(Tile tile){ + MessageBlockEntity entity = tile.entity(); + BitmapFont font = Fonts.outline; + GlyphLayout l = Pools.obtain(GlyphLayout.class, GlyphLayout::new); + boolean ints = font.usesIntegerPositions(); + font.getData().setScale(1 / 4f / Scl.scl(1f)); + font.setUseIntegerPositions(false); + + String text = entity.message == null || entity.message.isEmpty() ? "[lightgray]" + Core.bundle.get("empty") : entity.message; + + l.setText(font, text, Color.white, 90f, Align.left, true); + float offset = 1f; + + Draw.color(0f, 0f, 0f, 0.2f); + Fill.rect(tile.drawx(), tile.drawy() - tilesize/2f - l.height/2f - offset, l.width + offset*2f, l.height + offset*2f); + Draw.color(); + font.setColor(Color.white); + font.draw(text, tile.drawx() - l.width/2f, tile.drawy() - tilesize/2f - offset, 90f, Align.left, true); + font.setUseIntegerPositions(ints); + + font.getData().setScale(1f); + + Pools.free(l); + } + + @Override + public void buildTable(Tile tile, Table table){ + MessageBlockEntity entity = tile.entity(); + + table.addImageButton(io.anuke.mindustry.gen.Icon.pencilSmall, () -> { + if(mobile){ + Core.input.getTextInput(new TextInput(){{ + text = entity.message; + multiline = true; + maxLength = maxTextLength; + accepted = out -> { + Call.setMessageBlockText(player, tile, out); + }; + }}); + }else{ + FloatingDialog dialog = new FloatingDialog("$editmessage"); + dialog.setFillParent(false); + TextArea a = dialog.cont.add(new TextArea(entity.message.replace("\n", "\r"))).size(380f, 160f).get(); + a.setFilter((textField, c) -> { + if(c == '\n' || c == '\r'){ + int count = 0; + for(int i = 0; i < textField.getText().length(); i++){ + if(textField.getText().charAt(i) == '\n' || textField.getText().charAt(i) == '\r'){ + count++; + } + } + return count < maxNewlines; + } + return true; + }); + a.setMaxLength(maxTextLength); + dialog.buttons.addButton("$ok", () -> { + Call.setMessageBlockText(player, tile, a.getText()); + dialog.hide(); + }).size(130f, 60f); + dialog.update(() -> { + if(!entity.isValid()){ + dialog.hide(); + } + }); + dialog.show(); + } + control.input.frag.config.hideConfig(); + }).size(40f); + } + + @Override + public void updateTableAlign(Tile tile, Table table){ + Vector2 pos = Core.input.mouseScreen(tile.drawx(), tile.drawy() + tile.block().size * tilesize / 2f + 1); + table.setPosition(pos.x, pos.y, Align.bottom); + } + + @Override + public TileEntity newEntity(){ + return new MessageBlockEntity(); + } + + public class MessageBlockEntity extends TileEntity{ + protected String message = ""; + protected String[] lines = {""}; + + @Override + public void write(DataOutput stream) throws IOException{ + super.write(stream); + stream.writeUTF(message); + } + + @Override + public void read(DataInput stream, byte revision) throws IOException{ + super.read(stream, revision); + message = stream.readUTF(); + } + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java index 2703c9abc0..e4cbf26c65 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java @@ -100,6 +100,16 @@ public class PowerGraph{ return totalCapacity; } + public float getTotalBatteryCapacity(){ + float totalCapacity = 0f; + for(Tile battery : batteries){ + if(battery.block().consumes.hasPower()){ + totalCapacity += battery.block().consumes.getPower().capacity; + } + } + return totalCapacity; + } + public float useBatteries(float needed){ float stored = getBatteryStored(); if(Mathf.isEqual(stored, 0f)) return 0f; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 9984a068e0..00c8ecd276 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -95,6 +95,12 @@ public class PowerNode extends PowerBlock{ ((entity.power.graph.getPowerBalance() >= 0 ? "+" : "") + Strings.fixed(entity.power.graph.getPowerBalance() * 60, 1))), () -> Pal.powerBar, () -> Mathf.clamp(entity.power.graph.getPowerProduced() / entity.power.graph.getPowerNeeded()))); + + bars.add("batteries", entity -> new Bar(() -> + Core.bundle.format("bar.powerstored", + (ui.formatAmount((int)entity.power.graph.getBatteryStored())), ui.formatAmount((int)entity.power.graph.getTotalBatteryCapacity())), + () -> Pal.powerBar, + () -> Mathf.clamp(entity.power.graph.getBatteryStored() / entity.power.graph.getTotalBatteryCapacity()))); } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java index 428697d853..eb76325965 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java @@ -127,6 +127,13 @@ public class GenericCrafter extends Block{ } } + @Override + public boolean outputsItems(){ + return outputItem != null; + } + + + @Override public boolean canProduce(Tile tile){ if(outputItem != null && tile.entity.items.get(outputItem.item) >= itemCapacity){ diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java index 5cafa70f57..cdb2ce0d70 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java @@ -33,7 +33,7 @@ public class CoreBlock extends StorageBlock{ solid = true; update = true; hasItems = true; - flags = EnumSet.of(BlockFlag.target, BlockFlag.producer); + flags = EnumSet.of(BlockFlag.core, BlockFlag.producer); activeSound = Sounds.respawning; activeSoundVolume = 1f; layer = Layer.overlay; @@ -97,8 +97,10 @@ public class CoreBlock extends StorageBlock{ entity.storageCapacity += other.block().itemCapacity + other.entity.proximity().sum(e -> isContainer(e) ? e.block().itemCapacity : 0); } - for(Item item : content.items()){ - entity.items.set(item, Math.min(entity.items.get(item), entity.storageCapacity)); + if(!world.isGenerating()){ + for(Item item : content.items()){ + entity.items.set(item, Math.min(entity.items.get(item), entity.storageCapacity)); + } } for(Tile other : state.teams.get(tile.getTeam()).cores){ diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java index d432944ea4..6473e1c18e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java @@ -73,12 +73,13 @@ public class LaunchPad extends StorageBlock{ public void update(Tile tile){ TileEntity entity = tile.entity; - if(entity.cons.valid() && world.isZone() && entity.items.total() >= itemCapacity && entity.timer.get(timerLaunch, launchTime / entity.timeScale)){ + if(world.isZone() && entity.cons.valid() && world.isZone() && entity.items.total() >= itemCapacity && entity.timer.get(timerLaunch, launchTime / entity.timeScale)){ for(Item item : Vars.content.items()){ Events.fire(Trigger.itemLaunch); Effects.effect(Fx.padlaunch, tile); - data.addItem(item, entity.items.get(item)); - entity.items.set(item, 0); + int used = Math.min(entity.items.get(item), itemCapacity); + data.addItem(item, used); + entity.items.remove(item, used); } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/RallyPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/RallyPoint.java new file mode 100644 index 0000000000..c4d467a19b --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/units/RallyPoint.java @@ -0,0 +1,14 @@ +package io.anuke.mindustry.world.blocks.units; + +import io.anuke.arc.collection.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.meta.*; + +public class RallyPoint extends Block{ + + public RallyPoint(String name){ + super(name); + update = solid = true; + flags = EnumSet.of(BlockFlag.rally); + } +} diff --git a/core/src/io/anuke/mindustry/world/meta/BlockFlag.java b/core/src/io/anuke/mindustry/world/meta/BlockFlag.java index 7b1dd6697e..ea5887abba 100644 --- a/core/src/io/anuke/mindustry/world/meta/BlockFlag.java +++ b/core/src/io/anuke/mindustry/world/meta/BlockFlag.java @@ -1,22 +1,19 @@ package io.anuke.mindustry.world.meta; +/** Stores special flags of blocks for easy querying. */ public enum BlockFlag{ - /** General important target for all types of units. */ - target(0), + /** Enemy core; primary target for all units. */ + core, + /** Rally point for units.*/ + rally, /** Producer of important goods. */ - producer(Float.MAX_VALUE), + producer, /** A turret. */ - turret(Float.MAX_VALUE), + turret, /** Only the command center block.*/ - comandCenter(Float.MAX_VALUE), + comandCenter, /** Repair point. */ - repair(Float.MAX_VALUE); + repair; public final static BlockFlag[] all = values(); - public final float cost; - - BlockFlag(float cost){ - if(cost < 0) throw new RuntimeException("Block flag costs cannot be < 0!"); - this.cost = cost; - } } diff --git a/desktop/build.gradle b/desktop/build.gradle index fa29af4f96..7aac76552a 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -10,7 +10,7 @@ project.ext.mainClassName = "io.anuke.mindustry.desktop.DesktopLauncher" project.ext.assetsDir = new File("../core/assets") def enableTemplates = true -def JDK_DIR = "$System.env.PACKR_DIR" +def JDK_DIR = "$System.env.JDK_DIR" def ICON_DIR = new File("core/assets/icons/icon.icns") task run(dependsOn: classes, type: JavaExec){ diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java index 59b665b31b..d215e28d9c 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java @@ -7,6 +7,7 @@ import io.anuke.arc.Files.*; import io.anuke.arc.backends.sdl.*; import io.anuke.arc.backends.sdl.jni.*; import io.anuke.arc.collection.*; +import io.anuke.arc.files.*; import io.anuke.arc.function.*; import io.anuke.arc.input.*; import io.anuke.arc.math.*; @@ -48,11 +49,12 @@ public class DesktopLauncher extends ClientLauncher{ setWindowIcon(FileType.Internal, "icons/icon_64.png"); }}); }catch(Throwable e){ - DesktopLauncher.handleCrash(e); + handleCrash(e); } } public DesktopLauncher(String[] args){ + Log.setUseColors(false); Version.init(); boolean useSteam = Version.modifier.equals("steam"); testMobile = Array.with(args).contains("-testMobile"); @@ -72,6 +74,16 @@ public class DesktopLauncher extends ClientLauncher{ if(useSteam){ if(showConsole){ + StringBuilder base = new StringBuilder(); + Log.setLogger(new LogHandler(){ + @Override + public void print(String text, Object... args){ + String out = Log.format(text, false, args); + + base.append(out).append("\n"); + } + }); + Events.on(ClientLoadEvent.class, event -> { Label[] label = {null}; boolean[] visible = {false}; @@ -86,6 +98,7 @@ public class DesktopLauncher extends ClientLauncher{ t.toFront(); }); t.table(Styles.black3, f -> label[0] = f.add("").get()).visible(() -> visible[0]); + label[0].getText().append(base); }); Log.setLogger(new LogHandler(){ @@ -177,12 +190,23 @@ public class DesktopLauncher extends ClientLauncher{ boolean fbgp = badGPU; CrashSender.send(e, file -> { + Throwable cause = Strings.getFinalCause(e); if(!fbgp){ - dialog.accept(() -> message("A crash has occured. It has been saved in:\n" + file.getAbsolutePath() + "\n" + (e.getMessage() == null ? "" : "\n" + e.getMessage()))); + dialog.accept(() -> message("A crash has occured. It has been saved in:\n" + file.getAbsolutePath() + "\n" + cause.getClass().getSimpleName().replace("Exception", "") + (cause.getMessage() == null ? "" : ":\n" + cause.getMessage()))); } }); } + @Override + public Array getExternalMaps(){ + return !steam ? super.getExternalMaps() : SVars.workshop.getMapFiles(); + } + + @Override + public void viewMapListing(Map map){ + SVars.net.friends.activateGameOverlayToWebPage("steam://url/CommunityFilePage/" + map.file.parent().name()); + } + @Override public NetProvider getNet(){ return steam ? SVars.net : new ArcNetImpl(); diff --git a/desktop/src/io/anuke/mindustry/desktop/steam/SNet.java b/desktop/src/io/anuke/mindustry/desktop/steam/SNet.java index 6c5d608980..5c0a2d591b 100644 --- a/desktop/src/io/anuke/mindustry/desktop/steam/SNet.java +++ b/desktop/src/io/anuke/mindustry/desktop/steam/SNet.java @@ -7,6 +7,7 @@ import com.codedisaster.steamworks.SteamNetworking.*; import io.anuke.arc.*; import io.anuke.arc.collection.*; import io.anuke.arc.function.*; +import io.anuke.arc.input.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.*; import io.anuke.mindustry.game.EventType.*; @@ -35,7 +36,6 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, final ByteBuffer readBuffer = ByteBuffer.allocateDirect(1024 * 4); final CopyOnWriteArrayList connections = new CopyOnWriteArrayList<>(); - final CopyOnWriteArrayList connectionsOut = new CopyOnWriteArrayList<>(); final IntMap steamConnections = new IntMap<>(); //maps steam ID -> valid net connection SteamID currentLobby, currentServer; @@ -61,20 +61,31 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, if(net.server()){ SteamConnection con = steamConnections.get(fromID); - //accept users on request - if(con == null){ - con = new SteamConnection(from); - Connect c = new Connect(); - c.addressTCP = "steam:" + from.getAccountID(); + try{ + //accept users on request + if(con == null){ + con = new SteamConnection(SteamID.createFromNativeHandle(SteamNativeHandle.getNativeHandle(from))); + Connect c = new Connect(); + c.addressTCP = "steam:" + from.getAccountID(); - Log.info("&bRecieved connection: {0}", c.addressTCP); + Log.info("&bRecieved STEAM connection: {0}", c.addressTCP); - steamConnections.put(from.getAccountID(), con); - connections.add(con); - net.handleServerReceived(con, c); + steamConnections.put(from.getAccountID(), con); + connections.add(con); + net.handleServerReceived(con, c); + } + + net.handleServerReceived(con, output); + }catch(RuntimeException e){ + if(e.getCause() instanceof ValidateException){ + ValidateException v = (ValidateException)e.getCause(); + Log.err("Validation failed: {0} ({1})", v.player.name, v.getMessage()); + }else{ + Log.err(e); + } + }catch(Exception e){ + Log.err(e); } - - net.handleServerReceived(con, output); }else if(currentServer != null && fromID == currentServer.getAccountID()){ net.handleClientReceived(output); } @@ -169,6 +180,8 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, public void hostServer(int port) throws IOException{ provider.hostServer(port); smat.createLobby(Core.settings.getBool("publichost") ? LobbyType.Public : LobbyType.FriendsOnly, 16); + + Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> Log.info("Server: {0}\nClient: {1}\nActive: {2}", net.server(), net.client(), net.active())))); } public void updateLobby(){ @@ -195,8 +208,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, @Override public Iterable getConnections(){ //merge provider connections - connectionsOut.clear(); - connectionsOut.addAll(connections); + CopyOnWriteArrayList connectionsOut = new CopyOnWriteArrayList<>(connections); for(NetConnection c : provider.getConnections()) connectionsOut.add(c); return connectionsOut; } @@ -237,6 +249,8 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, currentLobby = steamIDLobby; currentServer = smat.getLobbyOwner(steamIDLobby); + Log.info("Connect to owner {0}: {1}", currentServer.getAccountID(), friends.getFriendPersonaName(currentServer)); + if(joinCallback != null){ joinCallback.run(); joinCallback = null; @@ -247,6 +261,8 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, net.setClientConnected(); net.handleClientReceived(con); + + Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> Log.info("Server: {0}\nClient: {1}\nActive: {2}", net.server(), net.client(), net.active())))); } @Override @@ -362,12 +378,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, @Override public void onP2PSessionRequest(SteamID steamIDRemote){ Log.info("Connection request: {0}", steamIDRemote.getAccountID()); - if(currentServer != null && !net.server()){ - Log.info("Am client, accepting request"); - if(steamIDRemote.equals(currentServer)){ - snet.acceptP2PSessionWithUser(steamIDRemote); - } - }else if(net.server()){ + if(net.server()){ Log.info("Am server, accepting request from " + steamIDRemote.getAccountID()); snet.acceptP2PSessionWithUser(steamIDRemote); } @@ -421,6 +432,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, public SteamConnection(SteamID sid){ super(sid.getAccountID() + ""); this.sid = sid; + Log.info("Create STEAM client {0}", sid.getAccountID()); } @Override diff --git a/desktop/src/io/anuke/mindustry/desktop/steam/SStats.java b/desktop/src/io/anuke/mindustry/desktop/steam/SStats.java index c17ba75d7e..d7678d7a92 100644 --- a/desktop/src/io/anuke/mindustry/desktop/steam/SStats.java +++ b/desktop/src/io/anuke/mindustry/desktop/steam/SStats.java @@ -158,27 +158,27 @@ public class SStats implements SteamUserStatsCallback{ Events.on(Trigger.drown, drown::complete); - Events.on(Trigger.impactPower, powerupImpactReactor::complete); + trigger(Trigger.impactPower, powerupImpactReactor); - Events.on(Trigger.flameAmmo, useFlameAmmo::complete); + trigger(Trigger.flameAmmo, useFlameAmmo); - Events.on(Trigger.turretCool, coolTurret::complete); + trigger(Trigger.turretCool, coolTurret); + + trigger(Trigger.suicideBomb, suicideBomb); Events.on(Trigger.enablePixelation, enablePixelation::complete); - Events.on(Trigger.suicideBomb, suicideBomb::complete); - Events.on(Trigger.thoriumReactorOverheat, () -> { if(campaign()){ SStat.reactorsOverheated.add(); } }); - Events.on(Trigger.shock, shockWetEnemy::complete); + trigger(Trigger.shock, shockWetEnemy); - Events.on(Trigger.phaseDeflectHit, killEnemyPhaseWall::complete); + trigger(Trigger.phaseDeflectHit, killEnemyPhaseWall); - Events.on(Trigger.itemLaunch, launchItemPad::complete); + trigger(Trigger.itemLaunch, launchItemPad); Events.on(UnitCreateEvent.class, e -> { if(campaign() && e.unit.getTeam() == player.getTeam()){ @@ -263,6 +263,14 @@ public class SStats implements SteamUserStatsCallback{ }); } + private void trigger(Trigger trigger, SAchievement ach){ + Events.on(trigger, () -> { + if(campaign()){ + ach.complete(); + } + }); + } + private boolean ncustom(){ return campaign(); } diff --git a/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java b/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java index be4e1348d7..6ebf8792c9 100644 --- a/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java +++ b/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java @@ -4,6 +4,7 @@ import com.codedisaster.steamworks.*; import com.codedisaster.steamworks.SteamRemoteStorage.*; import com.codedisaster.steamworks.SteamUGC.*; import io.anuke.arc.*; +import io.anuke.arc.collection.*; import io.anuke.arc.files.*; import io.anuke.arc.util.*; import io.anuke.mindustry.game.EventType.*; @@ -18,8 +19,39 @@ public class SWorkshop implements SteamUGCCallback{ public final SteamUGC ugc = new SteamUGC(this); private Map lastMap; + private Array mapFiles; + + public SWorkshop(){ + int items = ugc.getNumSubscribedItems(); + SteamPublishedFileID[] ids = new SteamPublishedFileID[items]; + ItemInstallInfo info = new ItemInstallInfo(); + ugc.getSubscribedItems(ids); + mapFiles = Array.with(ids).map(f -> { + ugc.getItemInstallInfo(f, info); + return new FileHandle(info.getFolder()); + }).select(f -> f.list().length > 0).map(f -> f.list()[0]); + + if(items > 0){ + SAchievement.downloadMapWorkshop.complete(); + } + + Log.info("Fetching {0} subscribed maps.", items); + } + + public Array getMapFiles(){ + return mapFiles; + } public void publishMap(Map map){ + if(map.tags.containsKey("steamid")){ + Log.info("Map already published, redirecting to ID."); + SVars.net.friends.activateGameOverlayToWebPage("steam://url/CommunityFilePage/" + map.tags.get("steamid")); + return; + } + + //update author name when publishing + map.tags.put("author", SVars.net.friends.getPersonaName()); + FloatingDialog dialog = new FloatingDialog("$confirm"); dialog.setFillParent(false); dialog.cont.add("$map.publish.confirm").width(600f).wrap(); @@ -122,6 +154,12 @@ public class SWorkshop implements SteamUGCCallback{ if(needsToAcceptWLA){ SVars.net.friends.activateGameOverlayToWebPage("https://steamcommunity.com/sharedfiles/workshoplegalagreement"); } + ui.editor.editor.getTags().put("steamid", SteamNativeHandle.getNativeHandle(publishedFileID) + ""); + try{ + ui.editor.save(); + }catch(Exception e){ + Log.err(e); + } Events.fire(new MapPublishEvent()); }else{ ui.showErrorMessage(Core.bundle.format("map.publish.error ", result.name())); diff --git a/fastlane/metadata/steam/english/achievements.vdf b/fastlane/metadata/steam/english/achievements.vdf new file mode 100644 index 0000000000..93c5730a09 --- /dev/null +++ b/fastlane/metadata/steam/english/achievements.vdf @@ -0,0 +1,109 @@ +"lang" +{ + "Language" "english" + "Tokens" + { + "NEW_ACHIEVEMENT_20_0_NAME" "Verified" + "NEW_ACHIEVEMENT_20_0_DESC" "Complete the tutorial." + "NEW_ACHIEVEMENT_20_1_NAME" "Scrapper" + "NEW_ACHIEVEMENT_20_1_DESC" "Destroy 1000 enemy units." + "NEW_ACHIEVEMENT_20_2_NAME" "Purge" + "NEW_ACHIEVEMENT_20_2_DESC" "Destroy 100,000 enemy units." + "NEW_ACHIEVEMENT_20_3_NAME" "Atmospheric Transportation" + "NEW_ACHIEVEMENT_20_3_DESC" "Launch 10,000 items total." + "NEW_ACHIEVEMENT_20_5_NAME" "Endless Shipments" + "NEW_ACHIEVEMENT_20_5_DESC" "Launch 1,000,000 items total." + "NEW_ACHIEVEMENT_20_6_NAME" "Conqueror" + "NEW_ACHIEVEMENT_20_6_DESC" "Win 10 attack-mode matches." + "NEW_ACHIEVEMENT_20_7_NAME" "Champion" + "NEW_ACHIEVEMENT_20_7_DESC" "Win 10 multiplayer PvP matches." + "NEW_ACHIEVEMENT_20_8_NAME" "Blitz" + "NEW_ACHIEVEMENT_20_8_DESC" "Destroy the enemy core in an attack zone in 5 waves or fewer." + "NEW_ACHIEVEMENT_20_9_NAME" "Core Rain" + "NEW_ACHIEVEMENT_20_9_DESC" "Launch your core into a zone 30 times." + "NEW_ACHIEVEMENT_20_10_NAME" "Tenacious" + "NEW_ACHIEVEMENT_20_10_DESC" "Survive 100 waves." + "NEW_ACHIEVEMENT_20_11_NAME" "Unvanquished" + "NEW_ACHIEVEMENT_20_11_DESC" "Survive 500 waves." + "NEW_ACHIEVEMENT_20_12_NAME" "Researcher" + "NEW_ACHIEVEMENT_20_12_DESC" "Research everything." + "NEW_ACHIEVEMENT_20_13_NAME" "Shapeshifter" + "NEW_ACHIEVEMENT_20_13_DESC" "Unlock and transform into every mech in the game." + "NEW_ACHIEVEMENT_20_14_NAME" "Overload" + "NEW_ACHIEVEMENT_20_14_DESC" "Hit a water-covered enemy with electricity." + "NEW_ACHIEVEMENT_20_15_NAME" "Deflection" + "NEW_ACHIEVEMENT_20_15_DESC" "Destroy a unit with its own reflected bullet." + "NEW_ACHIEVEMENT_20_17_NAME" "A Grave Mistake" + "NEW_ACHIEVEMENT_20_17_DESC" "Research the Router." + "NEW_ACHIEVEMENT_20_18_NAME" "Create" + "NEW_ACHIEVEMENT_20_18_DESC" "Place 10,000 blocks." + "NEW_ACHIEVEMENT_20_19_NAME" "Raze" + "NEW_ACHIEVEMENT_20_19_DESC" "Destroy 1,000 enemy blocks." + "NEW_ACHIEVEMENT_20_20_NAME" "A Spectacular Disaster" + "NEW_ACHIEVEMENT_20_20_DESC" "Cause a Thorium Reactor to overheat and explode." + "NEW_ACHIEVEMENT_20_21_NAME" "Mapper" + "NEW_ACHIEVEMENT_20_21_DESC" "Make a new map 10 times." + "NEW_ACHIEVEMENT_20_22_NAME" "Browser" + "NEW_ACHIEVEMENT_20_22_DESC" "Download a map from the Workshop." + "NEW_ACHIEVEMENT_20_23_NAME" "Creator" + "NEW_ACHIEVEMENT_20_23_DESC" "Publish a map on the Workshop." + "NEW_ACHIEVEMENT_20_24_NAME" "Slayer" + "NEW_ACHIEVEMENT_20_24_DESC" "Defeat a boss." + "NEW_ACHIEVEMENT_20_25_NAME" "Explorer" + "NEW_ACHIEVEMENT_20_25_DESC" "Unlock all zones in the campaign." + "NEW_ACHIEVEMENT_20_26_NAME" "Completionist" + "NEW_ACHIEVEMENT_20_26_DESC" "Reach the configuration requirement wave on all zones." + "NEW_ACHIEVEMENT_20_29_NAME" "Material II" + "NEW_ACHIEVEMENT_20_29_DESC" "Unlock Thorium." + "NEW_ACHIEVEMENT_20_31_NAME" "Material I" + "NEW_ACHIEVEMENT_20_31_DESC" "Unlock Titanium." + "NEW_ACHIEVEMENT_21_0_NAME" "Kamikaze" + "NEW_ACHIEVEMENT_21_0_DESC" "Fill your mech up with explosive materials and die, creating an explosion." + "NEW_ACHIEVEMENT_21_1_NAME" "It Begins" + "NEW_ACHIEVEMENT_21_1_DESC" "Build a Dagger factory." + "NEW_ACHIEVEMENT_21_2_NAME" "Direct Assault" + "NEW_ACHIEVEMENT_21_2_DESC" "Issue the Attack command using the Command Center." + "NEW_ACHIEVEMENT_21_3_NAME" "Swarm" + "NEW_ACHIEVEMENT_21_3_DESC" "Have 100 units active at once." + "NEW_ACHIEVEMENT_21_4_NAME" "Flock" + "NEW_ACHIEVEMENT_21_4_DESC" "Have 10 Phantom drones active at once." + "NEW_ACHIEVEMENT_21_5_NAME" "Volatile Army" + "NEW_ACHIEVEMENT_21_5_DESC" "Have 50 Crawler units active at once." + "NEW_ACHIEVEMENT_21_6_NAME" "Legions" + "NEW_ACHIEVEMENT_21_6_DESC" "Build 1000 units total." + "NEW_ACHIEVEMENT_21_7_NAME" "Super" + "NEW_ACHIEVEMENT_21_7_DESC" "Earn the S rank on any zone." + "NEW_ACHIEVEMENT_21_8_NAME" "Super Super" + "NEW_ACHIEVEMENT_21_8_DESC" "Earn the SS rank on any zone." + "NEW_ACHIEVEMENT_21_9_NAME" "You Should've Listened" + "NEW_ACHIEVEMENT_21_9_DESC" "Die in the drop point exclusion zone." + "NEW_ACHIEVEMENT_21_10_NAME" "Just Press Shift" + "NEW_ACHIEVEMENT_21_10_DESC" "Drown, somehow." + "NEW_ACHIEVEMENT_21_11_NAME" "Collector" + "NEW_ACHIEVEMENT_21_11_DESC" "Fill the core to maximum capacity with every type of material." + "NEW_ACHIEVEMENT_21_12_NAME" "Crowd" + "NEW_ACHIEVEMENT_21_12_DESC" "Host a server with 10 players on it." + "NEW_ACHIEVEMENT_21_13_NAME" "Invulnerable" + "NEW_ACHIEVEMENT_21_13_DESC" "Build the Meltdown and Spectre." + "NEW_ACHIEVEMENT_21_14_NAME" "Liftoff" + "NEW_ACHIEVEMENT_21_14_DESC" "Use the Launch Pad." + "NEW_ACHIEVEMENT_21_15_NAME" "Complacence" + "NEW_ACHIEVEMENT_21_15_DESC" "Skip launching twice, then have your core destroyed by the enemy." + "NEW_ACHIEVEMENT_21_16_NAME" "Heresy" + "NEW_ACHIEVEMENT_21_16_DESC" "Build two routers next to each other." + "NEW_ACHIEVEMENT_21_17_NAME" "Lone Guardian" + "NEW_ACHIEVEMENT_21_17_DESC" "Survive 10 waves on any zone without placing any blocks." + "NEW_ACHIEVEMENT_21_18_NAME" "Incinerate" + "NEW_ACHIEVEMENT_21_18_DESC" "Use Pyratite in any turret." + "NEW_ACHIEVEMENT_21_19_NAME" "Efficiency" + "NEW_ACHIEVEMENT_21_19_DESC" "Cool a turret with water or cryofluid." + "NEW_ACHIEVEMENT_21_20_NAME" "Classic Mode" + "NEW_ACHIEVEMENT_21_20_DESC" "Enable pixelation." + "NEW_ACHIEVEMENT_21_21_NAME" "Scholar" + "NEW_ACHIEVEMENT_21_21_DESC" "Open the Wiki from the game." + "NEW_ACHIEVEMENT_21_22_NAME" "Head Start" + "NEW_ACHIEVEMENT_21_22_DESC" "Launch into a zone with 10,000 or more items configured." + "NEW_ACHIEVEMENT_21_23_NAME" "Ignition" + "NEW_ACHIEVEMENT_21_23_DESC" "Power up an Impact Reactor." + } +} diff --git a/fastlane/metadata/steam/english/description.txt b/fastlane/metadata/steam/english/description.txt new file mode 100644 index 0000000000..8e0d524ea3 --- /dev/null +++ b/fastlane/metadata/steam/english/description.txt @@ -0,0 +1,60 @@ +Create elaborate supply chains of conveyor belts to feed ammo into your turrets, produce materials to use for building, and defend your structures from waves of enemies. Play with your friends in cross-platform multiplayer co-op games, or challenge them in team-based PvP matches. + +[img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img] + +[h2]Gameplay[/h2] + +[list] +[*] Create drills and conveyors to move resources into your Core. +[*] Use production blocks to create advanced materials. +[*] Build drones for automatically mining resources, assisting in building and protecting your base. +[*] Distribute liquids and fight outbreaks of fire. +[*] Boost production by supplying optional coolant and lubricant to your defense and production blocks. +[/list] + +[h2]Campaign[/h2] + +[list] +[*] Advance through 12 replayable built-in zones with randomized spawn points +[*] Collect and launch resources +[*] Research new blocks to fuel progress +[*] Configure launch loadouts to bring resources to each zone +[*] Variety of mission objectives and goals +[*] Invite your friends to complete missions together +[*] 120+ technology blocks to master +[*] 19 different types of drones, mechs and ships +[*] 50+ achievements to complete +[/list] + +[h2][h2]Gamemodes[/h2][/h2] + +[*] [b]Survival[/b]: Build turrets to defend from enemies in tower-defense based gameplay. Survive as long as possible, optionally launching your core to use your collected resources for research. Prepare your base for intermittent attacks from airborne bosses. +[*] [b]Attack[/b]: Build factories for units to destroy the enemy cores, while simultaneously defending your base from waves of enemy units. Create a variety of different types of support and offensive unit to assist you in your goals. +[*] [b]PvP[/b]: Compete with other players on up to 4 different teams to destroy each other's cores. Create units, or attack other bases directly with your mechs. +[*] [b]Sandbox[/b]: Play around with infinite resources and no enemy threat. Use sandbox-specific item and liquid source blocks to test out designs, and spawn in enemies on request. +[/list] + +[h2]Custom Games & Cross-Platform Multiplayer[/h2] + +[list] +[*] 12 built in maps for custom games, in addition to campaign +[*] Play Co-op, PvP or sandbox +[*] Join a public dedicated server, or invite friends to your own private session +[*] Customizable game rules: Change block costs, enemy stats, starting items, wave timing and more +[*] Mix&match gamemodes: Combine PvP and PvE gamemodes together +[/list] + +[h2]Custom Map Editor[/h2] + +[list] +[*] Paint terrain with an editor UI +[*] Edit and preview structures in-game +[*] Configurable tool modes: Change how each tool functions +[*] Powerful map generation system, with many different types of filters for procedural manipulation of terrain +[*] Apply noise, distortion, smoothing, erosion, symmetry, ore generation and random terrain to your maps +[*] Randomize and configure ore generation, as well as placement of river and resource tiles +[*] Configure enemy wave layouts +[*] Share exported maps on the Steam Workshop +[*] Customize base map rules +[*] Use 75+ different environmental blocks +[/list] diff --git a/fastlane/metadata/steam/english/short-description.txt b/fastlane/metadata/steam/english/short-description.txt new file mode 100644 index 0000000000..1d5eae544e --- /dev/null +++ b/fastlane/metadata/steam/english/short-description.txt @@ -0,0 +1 @@ +An open-ended tower-defense game with a focus on resource management. diff --git a/gradle.properties b/gradle.properties index f686bb2212..97869cac97 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=1fda7fc4ed52e00fdbd6b9a5fab9af6add78dc63 +archash=bac0b86ee98cd406cf6a227656ebf908f53119f9 diff --git a/ios/Info.plist.xml b/ios/Info.plist.xml index 7c7ba53d60..0ab706af32 100644 --- a/ios/Info.plist.xml +++ b/ios/Info.plist.xml @@ -74,22 +74,22 @@ - - - CFBundleTypeIconFiles - - icon-72.png - - CFBundleTypeName - Zip Data File - LSHandlerRank - Alternate - LSItemContentTypes - - public.archive - - - + + CFBundleTypeIconFiles + + icon-72.png + + CFBundleTypeName + Zip Game Data + CFBundleTypeRole + Editor + LSHandlerRank + Owner + LSItemContentTypes + + public.archive + + UTExportedTypeDeclarations diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index 17bb408c13..6867ff01f7 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -13,6 +13,7 @@ import io.anuke.mindustry.io.*; import io.anuke.mindustry.ui.*; import org.robovm.apple.foundation.*; import org.robovm.apple.uikit.*; +import org.robovm.apple.uikit.UIBarButtonItem.*; import org.robovm.objc.block.*; import java.io.*; @@ -39,10 +40,15 @@ public class IOSLauncher extends IOSApplication.Delegate{ @Override public void showFileChooser(boolean open, String extension, Consumer cons){ - UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController(NSArray.fromStrings("public.archive")); + UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray)null); - cont.setAllowsDocumentCreation(false); - cont.setDelegate(new UIDocumentBrowserViewControllerDelegate(){ + NSArray arr = new NSArray<>(new UIBarButtonItem(Core.bundle.get("cancel"), UIBarButtonItemStyle.Plain, + uiBarButtonItem -> cont.dismissViewController(true, () -> {}))); + + cont.setAllowsDocumentCreation(!open); + cont.setAdditionalLeadingNavigationBarButtonItems(arr); + + class ChooserDelegate extends NSObject implements UIDocumentBrowserViewControllerDelegate{ @Override public void didPickDocumentURLs(UIDocumentBrowserViewController controller, NSArray documentURLs){ @@ -50,7 +56,10 @@ public class IOSLauncher extends IOSApplication.Delegate{ @Override public void didPickDocumentsAtURLs(UIDocumentBrowserViewController controller, NSArray documentURLs){ + if(documentURLs.size() < 1) return; + cont.dismissViewController(true, () -> {}); + cons.accept(Core.files.absolute(documentURLs.get(0).getPath())); } @Override @@ -77,7 +86,9 @@ public class IOSLauncher extends IOSApplication.Delegate{ public void willPresentActivityViewController(UIDocumentBrowserViewController controller, UIActivityViewController activityViewController){ } - }); + } + + cont.setDelegate(new ChooserDelegate()); UIApplication.getSharedApplication().getKeyWindow().getRootViewController().presentViewController(cont, true, () -> { }); diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index edfc4410c2..501e6fb157 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -688,6 +688,7 @@ public class ServerControl implements ApplicationListener{ Core.app.post(() -> { try{ SaveIO.loadFromSlot(slot); + state.rules.zone = null; }catch(Throwable t){ err("Failed to load save. Outdated or corrupt file."); } diff --git a/settings.gradle b/settings.gradle index e81f9cf42c..f97bd7c08d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -36,8 +36,9 @@ if(!hasProperty("release")){ use(':Arc:backends:backend-headless') } - if(new File(settingsDir, '../debug').exists()){ - use(':debug') + if(new File(settingsDir, '../Mindustry-Debug').exists()){ + include(":debug") + project(":debug").projectDir = new File(settingsDir, "../Mindustry-Debug") } }else{ println("Not including local repositories.")