diff --git a/android/build.gradle b/android/build.gradle index d87fbc2d69..148adf6a3e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript{ } dependencies{ - classpath 'com.android.tools.build:gradle:3.3.2' + classpath 'com.android.tools.build:gradle:3.4.0' } } diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 087f392f7d..7571b3f746 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -23,8 +23,8 @@ import io.anuke.mindustry.game.Saves.SaveSlot; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.ui.dialogs.FileChooser; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; import java.io.*; import java.util.ArrayList; @@ -111,8 +111,8 @@ public class AndroidLauncher extends AndroidApplication{ } config.hideStatusBar = true; - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); initialize(new Mindustry(), config); checkFiles(getIntent()); } diff --git a/build.gradle b/build.gradle index 1b5a1b72e7..1d4557846f 100644 --- a/build.gradle +++ b/build.gradle @@ -187,7 +187,7 @@ project(":core"){ task copyGen{ doLast{ copy{ - from("../core/build/classes/java/main/io/anuke/mindustry/gen/"){ + from("../core/build/generated/sources/annotationProcessor/java/main/io/anuke/mindustry/gen"){ include "**/*.java" } @@ -202,7 +202,7 @@ project(":core"){ compile arcModule("arc-core") compile arcModule("extensions:freetype") - //compile arcModule("extensions:postprocessing") + compile arcModule("extensions:arcnet") if(localArc() && debugged()) compile arcModule("extensions:recorder") compileOnly project(":annotations") @@ -259,7 +259,6 @@ project(":net"){ dependencies{ compile project(":core") compile "org.lz4:lz4-java:1.4.1" - compile 'com.github.Anuken:kryonet:a64d2280880e80566ca1bdaffa55de43e51cad38' compile 'com.github.Anuken:WaifUPnP:05eb46bc577fd7674596946ba288c96c0cedd893' } } diff --git a/core/assets-raw/sprites/blocks/environment/edge-stencil-smooth.png b/core/assets-raw/sprites/blocks/environment/edge-stencil-smooth.png deleted file mode 100644 index ae245b60c4..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/edge-stencil-smooth.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged1.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged1.png deleted file mode 100644 index f4eb327e07..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged1.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged2.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged2.png deleted file mode 100644 index a8bcd4755d..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged2.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged3.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged3.png deleted file mode 100644 index 3bf985f177..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged3.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged4.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged4.png deleted file mode 100644 index 2ce2d2786c..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged4.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged5.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged5.png deleted file mode 100644 index c030a04fa1..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged5.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged6.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged6.png deleted file mode 100644 index 8b9b4d3fe8..0000000000 Binary files a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged6.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/mechs/alpha-dart-mech-pad.png b/core/assets-raw/sprites/blocks/mechs/dart-mech-pad.png similarity index 100% rename from core/assets-raw/sprites/blocks/mechs/alpha-dart-mech-pad.png rename to core/assets-raw/sprites/blocks/mechs/dart-mech-pad.png diff --git a/core/assets-raw/sprites/ui/check-disabled.png b/core/assets-raw/sprites/ui/check-disabled.png new file mode 100644 index 0000000000..68f22ed90e Binary files /dev/null and b/core/assets-raw/sprites/ui/check-disabled.png differ diff --git a/core/assets-raw/sprites/ui/check-on-disabled.png b/core/assets-raw/sprites/ui/check-on-disabled.png new file mode 100644 index 0000000000..bd65bb214f Binary files /dev/null and b/core/assets-raw/sprites/ui/check-on-disabled.png differ diff --git a/core/assets-raw/sprites/ui/underline-disabled.9.png b/core/assets-raw/sprites/ui/underline-disabled.9.png new file mode 100644 index 0000000000..753a3e9c24 Binary files /dev/null and b/core/assets-raw/sprites/ui/underline-disabled.9.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/coal1.png b/core/assets-raw/sprites_replacement/blocks/environment/coal1.png new file mode 100644 index 0000000000..a65216e00d Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/coal1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/coal2.png b/core/assets-raw/sprites_replacement/blocks/environment/coal2.png new file mode 100644 index 0000000000..9cf4691919 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/coal2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/coal3.png b/core/assets-raw/sprites_replacement/blocks/environment/coal3.png new file mode 100644 index 0000000000..5f2cf4730f Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/coal3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/copper1.png b/core/assets-raw/sprites_replacement/blocks/environment/copper1.png new file mode 100644 index 0000000000..c7b4dcc9ed Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/copper1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/copper2.png b/core/assets-raw/sprites_replacement/blocks/environment/copper2.png new file mode 100644 index 0000000000..d62a9f201a Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/copper2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/copper3.png b/core/assets-raw/sprites_replacement/blocks/environment/copper3.png new file mode 100644 index 0000000000..47128d4f81 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/copper3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil-blocky.png b/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil-blocky.png deleted file mode 100644 index 7dd02ca754..0000000000 Binary files a/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil-blocky.png and /dev/null differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil-smooth.png b/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil-smooth.png deleted file mode 100644 index c05f1f7b08..0000000000 Binary files a/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil-smooth.png and /dev/null differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil.png b/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil.png new file mode 100644 index 0000000000..7d7e1b2365 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/edge-stencil.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/lead1.png b/core/assets-raw/sprites_replacement/blocks/environment/lead1.png new file mode 100644 index 0000000000..ea20a9261d Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/lead1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/lead2.png b/core/assets-raw/sprites_replacement/blocks/environment/lead2.png new file mode 100644 index 0000000000..7741575e00 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/lead2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/lead3.png b/core/assets-raw/sprites_replacement/blocks/environment/lead3.png new file mode 100644 index 0000000000..c7e5ab676a Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/lead3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged1.png b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged1.png new file mode 100644 index 0000000000..8b1e45793d Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged2.png b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged2.png new file mode 100644 index 0000000000..5af2f8fbd2 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged3.png b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged3.png new file mode 100644 index 0000000000..fe999c003c Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged5.png b/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged5.png deleted file mode 100644 index 5d36f9193e..0000000000 Binary files a/core/assets-raw/sprites_replacement/blocks/environment/metal-floor-damaged5.png and /dev/null differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/scrap1.png b/core/assets-raw/sprites_replacement/blocks/environment/scrap1.png new file mode 100644 index 0000000000..9fb8fb03f2 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/scrap1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/scrap2.png b/core/assets-raw/sprites_replacement/blocks/environment/scrap2.png new file mode 100644 index 0000000000..f133d159f5 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/scrap2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/scrap3.png b/core/assets-raw/sprites_replacement/blocks/environment/scrap3.png new file mode 100644 index 0000000000..f602404e34 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/scrap3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/shrubs-large.png b/core/assets-raw/sprites_replacement/blocks/environment/shrubs-large.png index 17ec22101d..dd0b6612d9 100644 Binary files a/core/assets-raw/sprites_replacement/blocks/environment/shrubs-large.png and b/core/assets-raw/sprites_replacement/blocks/environment/shrubs-large.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/shrubs1.png b/core/assets-raw/sprites_replacement/blocks/environment/shrubs1.png index dd09a62fec..caff49a543 100644 Binary files a/core/assets-raw/sprites_replacement/blocks/environment/shrubs1.png and b/core/assets-raw/sprites_replacement/blocks/environment/shrubs1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/shrubs2.png b/core/assets-raw/sprites_replacement/blocks/environment/shrubs2.png index d211c517a5..a4f583d86f 100644 Binary files a/core/assets-raw/sprites_replacement/blocks/environment/shrubs2.png and b/core/assets-raw/sprites_replacement/blocks/environment/shrubs2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/tendrils1.png b/core/assets-raw/sprites_replacement/blocks/environment/tendrils1.png new file mode 100644 index 0000000000..904eb41418 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/tendrils1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/tendrils2.png b/core/assets-raw/sprites_replacement/blocks/environment/tendrils2.png new file mode 100644 index 0000000000..895843750c Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/tendrils2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/tendrils3.png b/core/assets-raw/sprites_replacement/blocks/environment/tendrils3.png new file mode 100644 index 0000000000..d71b9bc1c7 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/tendrils3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/thorium1.png b/core/assets-raw/sprites_replacement/blocks/environment/thorium1.png new file mode 100644 index 0000000000..ce0de1271c Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/thorium1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/thorium2.png b/core/assets-raw/sprites_replacement/blocks/environment/thorium2.png new file mode 100644 index 0000000000..9372bf6f81 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/thorium2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/thorium3.png b/core/assets-raw/sprites_replacement/blocks/environment/thorium3.png new file mode 100644 index 0000000000..de787e98a6 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/thorium3.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/titanium1.png b/core/assets-raw/sprites_replacement/blocks/environment/titanium1.png new file mode 100644 index 0000000000..9ba087608a Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/titanium1.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/titanium2.png b/core/assets-raw/sprites_replacement/blocks/environment/titanium2.png new file mode 100644 index 0000000000..c6add6ad54 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/titanium2.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/environment/titanium3.png b/core/assets-raw/sprites_replacement/blocks/environment/titanium3.png new file mode 100644 index 0000000000..946f55ab46 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/environment/titanium3.png differ diff --git a/core/assets-raw/sprites_replacement/weapons/blaster-equip.png b/core/assets-raw/sprites_replacement/weapons/blaster-equip.png new file mode 100644 index 0000000000..e8d35d7c9e Binary files /dev/null and b/core/assets-raw/sprites_replacement/weapons/blaster-equip.png differ diff --git a/core/assets-raw/sprites_replacement/weapons/chain-blaster-equip.png b/core/assets-raw/sprites_replacement/weapons/chain-blaster-equip.png new file mode 100644 index 0000000000..3cde6228a0 Binary files /dev/null and b/core/assets-raw/sprites_replacement/weapons/chain-blaster-equip.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 56c4861dd0..b8e85c6ef5 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -158,6 +158,7 @@ confirm = Confirm delete = Delete ok = OK open = Open +customize = Customize cancel = Cancel openlink = Open Link copylink = Copy Link @@ -174,6 +175,7 @@ loading = [accent]Loading... saving = [accent]Saving... wave = [accent]Wave {0} wave.waiting = [LIGHT_GRAY]Wave in {0} +wave.waveInProgress = [LIGHT_GRAY]Wave in progress waiting = [LIGHT_GRAY]Waiting... waiting.players = Waiting for players... wave.enemies = [LIGHT_GRAY]{0} Enemies Remaining @@ -326,6 +328,8 @@ zone.ruinousShores.name = Ruinous Shores zone.stainedMountains.name = Stained Mountains zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex +zone.overgrowth.name = Overgrowth +zone.tarFields.name = Tar Fields settings.language = Language settings.reset = Reset to Defaults @@ -440,14 +444,14 @@ setting.difficulty.name = Difficulty: setting.screenshake.name = Screen Shake setting.effects.name = Display Effects setting.sensitivity.name = Controller Sensitivity -setting.saveinterval.name = Autosave Interval +setting.saveinterval.name = Save Interval setting.seconds = {0} Seconds setting.fullscreen.name = Fullscreen setting.borderless.name = Borderless Window setting.fps.name = Show FPS setting.vsync.name = VSync setting.lasers.name = Show Power Lasers -setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance, disables animations) +setting.pixelate.name = Pixelate[LIGHT_GRAY] (disables animations) setting.minimap.name = Show Minimap setting.musicvol.name = Music Volume setting.mutemusic.name = Mute Music @@ -480,6 +484,7 @@ keybind.zoom_hold.name = Zoom Hold keybind.zoom.name = Zoom keybind.menu.name = Menu keybind.pause.name = Pause +keybind.minimap.name = Minimap keybind.dash.name = Dash keybind.chat.name = Chat keybind.player_list.name = Player list @@ -496,21 +501,18 @@ mode.survival.name = Survival mode.survival.description = The normal mode. Limited resources and automatic incoming waves. mode.sandbox.name = Sandbox mode.sandbox.description = Infinite resources and no timer for waves. -mode.freebuild.name = Freebuild -mode.freebuild.description = Limited resources and no timer for waves. mode.pvp.name = PvP mode.pvp.description = Fight against other players locally. mode.attack.name = Attack -mode.attack.description = No waves, with the goal to destroy the enemy base. +mode.attack.description = Destroy the enemy's base. No waves. mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves rules.enemyCheat = Infinite AI (Red Team) Resources -rules.pvp = PvP rules.unitdrops = Unit Drops -rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier +rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier rules.unithealthmultiplier = Unit Health Multiplier rules.playerhealthmultiplier = Player Health Multiplier rules.playerdamagemultiplier = Player Damage Multiplier @@ -520,6 +522,16 @@ rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.buildcostmultiplier = Build Cost Multiplier rules.buildspeedmultiplier = Build Speed Multiplier +rules.waitForWaveToEnd = Waves wait for enemies +rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles) +rules.respawns = Max respawns per wave +rules.limitedRespawns = Limit Respawns +rules.title.waves = Waves +rules.title.respawns = Respawns +rules.title.resourcesbuilding = Resources & Building +rules.title.player = Players +rules.title.enemy = Enemies +rules.title.unit = Units content.item.name = Items content.liquid.name = Liquids @@ -610,6 +622,7 @@ block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks block.pebbles.name = Pebbles +block.tendrils.name = Tendrils block.sandrocks.name = Sand Rocks block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks @@ -618,6 +631,7 @@ block.snowrock.name = Snow Rock block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss +block.shrubs.name = Shrubs block.spore-moss.name = Spore Moss block.shalerocks.name = Shale Rocks block.scrap-wall.name = Scrap Wall @@ -722,7 +736,7 @@ block.pneumatic-drill.name = Pneumatic Drill block.laser-drill.name = Laser Drill block.water-extractor.name = Water Extractor block.cultivator.name = Cultivator -block.alpha-dart-mech-pad.name = Alpha-Dart Mech Pad +block.dart-mech-pad.name = Dart Mech Pad block.delta-mech-pad.name = Delta Mech Pad block.javelin-ship-pad.name = Javelin Ship Pad block.trident-ship-pad.name = Trident Ship Pad diff --git a/core/assets/maps/desolateRift.mmap b/core/assets/maps/desolateRift.mmap index 0e4f0474e5..b09e8e279c 100644 Binary files a/core/assets/maps/desolateRift.mmap and b/core/assets/maps/desolateRift.mmap differ diff --git a/core/assets/maps/overgrowth.mmap b/core/assets/maps/overgrowth.mmap new file mode 100644 index 0000000000..1bbb742e2f Binary files /dev/null and b/core/assets/maps/overgrowth.mmap differ diff --git a/core/assets/maps/ruinousShores.mmap b/core/assets/maps/ruinousShores.mmap index 8723b5daad..f863ac1f6f 100644 Binary files a/core/assets/maps/ruinousShores.mmap and b/core/assets/maps/ruinousShores.mmap differ diff --git a/core/assets/maps/tarFields.mmap b/core/assets/maps/tarFields.mmap new file mode 100644 index 0000000000..402a7c7f07 Binary files /dev/null and b/core/assets/maps/tarFields.mmap differ diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index e3f1f7f657..5f975c6e24 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 96771206c2..85bac717fb 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -6,6671 +6,6965 @@ filter: Nearest,Nearest repeat: none force-projector rotate: false - xy: 131, 235 + xy: 415, 1302 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 force-projector-top rotate: false - xy: 131, 137 + xy: 513, 1333 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mend-projector rotate: false - xy: 992, 1232 + xy: 873, 1071 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 926, 1166 + xy: 939, 1071 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender rotate: false - xy: 1922, 1204 + xy: 1093, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-top rotate: false - xy: 1956, 1204 + xy: 1127, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 992, 1166 + xy: 1071, 1071 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 1124, 1232 + xy: 1137, 1071 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 1271, 636 + xy: 1581, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 1506, 1169 + xy: 999, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 1540, 1169 + xy: 1033, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 1616, 1211 + xy: 1067, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 1421, 1006 + xy: 1379, 696 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 1455, 1006 + xy: 1379, 662 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 1582, 1182 + xy: 1413, 696 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 1616, 1177 + xy: 1413, 662 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 1650, 1172 + xy: 1447, 696 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 1684, 1172 + xy: 1447, 662 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 1718, 1172 + xy: 1481, 696 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 1752, 1172 + xy: 1481, 662 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 1786, 1172 + xy: 1515, 696 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 1820, 1172 + xy: 1515, 662 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 1854, 1172 + xy: 896, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 1489, 1135 + xy: 930, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 1489, 1101 + xy: 964, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 1523, 1135 + xy: 998, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 1489, 1067 + xy: 1032, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 1523, 1101 + xy: 1066, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 1489, 1033 + xy: 1100, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 1523, 1067 + xy: 1134, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 1523, 1033 + xy: 893, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 1489, 999 + xy: 927, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 1577, 591 + xy: 1625, 749 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 1611, 659 + xy: 1659, 783 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 1611, 625 + xy: 1693, 817 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 1611, 591 + xy: 1659, 749 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 919, 616 + xy: 1693, 783 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 953, 616 + xy: 1693, 749 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 987, 616 + xy: 1625, 715 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 1021, 616 + xy: 1659, 715 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 1055, 624 + xy: 1693, 715 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 1089, 612 + xy: 1617, 681 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 1123, 612 + xy: 1651, 681 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 1157, 612 + xy: 1685, 681 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 1191, 612 + xy: 1617, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 1055, 590 + xy: 1651, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 1089, 578 + xy: 1685, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 1123, 578 + xy: 1615, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 1157, 578 + xy: 1615, 579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 1191, 578 + xy: 1649, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 1225, 602 + xy: 1615, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 1259, 602 + xy: 1649, 579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor rotate: false - xy: 677, 1298 + xy: 939, 1203 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 junction rotate: false - xy: 1515, 829 + xy: 957, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mass-driver-base rotate: false - xy: 513, 1333 + xy: 391, 1008 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 1151, 714 + xy: 821, 4 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 1583, 829 + xy: 1059, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 1583, 795 + xy: 1093, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 1583, 761 + xy: 1127, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 1067, 658 + xy: 1573, 895 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router rotate: false - xy: 1569, 693 + xy: 1513, 628 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter rotate: false - xy: 1373, 632 + xy: 1316, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-drill rotate: false - xy: 1, 397 + xy: 1360, 1919 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 1, 137 + xy: 1620, 1919 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rotator rotate: false - xy: 1, 7 + xy: 1750, 1919 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-top rotate: false - xy: 323, 1627 + xy: 1880, 1919 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 laser-drill rotate: false - xy: 807, 1560 + xy: 293, 912 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-rim rotate: false - xy: 905, 1560 + xy: 293, 716 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-rotator rotate: false - xy: 905, 1462 + xy: 293, 618 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-top rotate: false - xy: 1003, 1560 + xy: 293, 520 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill rotate: false - xy: 860, 1232 + xy: 1137, 1137 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 926, 1232 + xy: 783, 1033 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 860, 1166 + xy: 783, 967 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 oil-extractor rotate: false - xy: 807, 1364 + xy: 391, 714 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-liquid rotate: false - xy: 1003, 1364 + xy: 391, 518 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-rotator rotate: false - xy: 1101, 1364 + xy: 391, 420 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-top rotate: false - xy: 204, 1246 + xy: 391, 322 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 pneumatic-drill rotate: false - xy: 1049, 1100 + xy: 783, 901 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 1181, 1100 + xy: 759, 769 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 653, 1034 + xy: 849, 873 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 287, 643 + xy: 1923, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 485, 775 + xy: 695, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 419, 709 + xy: 563, 515 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 353, 643 + xy: 555, 449 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 1658, 1274 + xy: 821, 140 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 1692, 1274 + xy: 821, 106 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 1692, 1274 + xy: 821, 106 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 1726, 1274 + xy: 821, 72 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 634, 610 + xy: 1523, 832 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 place-arrow rotate: false - xy: 400, 1235 + xy: 391, 126 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 983, 1034 + xy: 825, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 1049, 1034 + xy: 891, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 1115, 1034 + xy: 957, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 1181, 1034 + xy: 1023, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-3-0 rotate: false - xy: 400, 1137 + xy: 709, 1137 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rubble-3-1 rotate: false - xy: 400, 1137 + xy: 709, 1137 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rubble-4-0 rotate: false - xy: 453, 1627 + xy: 1785, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 rubble-4-1 rotate: false - xy: 453, 1627 + xy: 1785, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spawn rotate: false - xy: 1407, 666 + xy: 1999, 1070 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 1760, 1274 + xy: 821, 38 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 1794, 1274 + xy: 897, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 1794, 1274 + xy: 897, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 1828, 1274 + xy: 931, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 1862, 1274 + xy: 965, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 1650, 1206 + xy: 1421, 798 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 1684, 1206 + xy: 1455, 832 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 1718, 1206 + xy: 1489, 866 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 1752, 1206 + xy: 1421, 764 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 1786, 1206 + xy: 1455, 798 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 1820, 1206 + xy: 1489, 832 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 1854, 1206 + xy: 1523, 866 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 2001, 1752 + xy: 1455, 764 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 1421, 1142 + xy: 1489, 764 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 1421, 1108 + xy: 1523, 798 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 1455, 1142 + xy: 1523, 764 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 1421, 1074 + xy: 1387, 730 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 1455, 1108 + xy: 1421, 730 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 1421, 1040 + xy: 1455, 730 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 1455, 1074 + xy: 1489, 730 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 1481, 795 + xy: 1025, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 1549, 795 + xy: 1093, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 1311, 790 + xy: 991, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 1345, 790 + xy: 1025, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-bottom rotate: false - xy: 1101, 1560 + xy: 293, 324 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-liquid rotate: false - xy: 219, 1344 + xy: 293, 128 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-top rotate: false - xy: 317, 1333 + xy: 293, 30 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 1892, 1238 + xy: 1127, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 1583, 965 + xy: 923, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 1583, 931 + xy: 957, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 1583, 897 + xy: 991, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 1583, 863 + xy: 1025, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 1263, 738 + xy: 1899, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 1297, 756 + xy: 1933, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 1331, 756 + xy: 1591, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 1297, 722 + xy: 1591, 827 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 1331, 722 + xy: 1591, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 1365, 738 + xy: 1591, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 1365, 704 + xy: 1591, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 851, 1034 + xy: 1047, 873 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 457, 1039 + xy: 587, 941 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -alpha-dart-mech-pad +dart-mech-pad rotate: false - xy: 1543, 1624 + xy: 1005, 1335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 delta-mech-pad rotate: false - xy: 611, 1298 + xy: 1071, 1401 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 glaive-ship-pad rotate: false - xy: 709, 1462 + xy: 293, 1010 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 javelin-ship-pad rotate: false - xy: 662, 1232 + xy: 1956, 1853 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 omega-mech-pad rotate: false - xy: 302, 1235 + xy: 391, 224 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 tau-mech-pad rotate: false - xy: 353, 841 + xy: 1593, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 trident-ship-pad rotate: false - xy: 287, 709 + xy: 1527, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 battery rotate: false - xy: 1582, 1216 + xy: 821, 310 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large rotate: false - xy: 219, 1442 + xy: 219, 1443 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 1824, 1240 + xy: 1455, 866 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 1858, 1240 + xy: 1387, 764 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator rotate: false - xy: 317, 1529 + xy: 709, 1431 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-top rotate: false - xy: 415, 1529 + xy: 219, 1345 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 impact-reactor rotate: false - xy: 1232, 1918 + xy: 163, 1064 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-bottom rotate: false - xy: 1362, 1918 + xy: 163, 934 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-light rotate: false - xy: 1622, 1918 + xy: 163, 674 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-0 rotate: false - xy: 1752, 1918 + xy: 163, 544 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-1 rotate: false - xy: 1882, 1918 + xy: 163, 414 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-2 rotate: false - xy: 526, 1788 + xy: 163, 284 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-3 rotate: false - xy: 656, 1788 + xy: 163, 154 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-top rotate: false - xy: 786, 1788 + xy: 163, 24 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 power-node rotate: false - xy: 1195, 792 + xy: 1549, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 719, 1034 + xy: 915, 873 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source rotate: false - xy: 1195, 758 + xy: 1729, 995 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void rotate: false - xy: 1229, 772 + xy: 1763, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 powerinfinite rotate: false - xy: 1185, 724 + xy: 1797, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 powervoid rotate: false - xy: 1229, 738 + xy: 1831, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 917, 1034 + xy: 1113, 873 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 1603, 693 + xy: 1479, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 1339, 636 + xy: 1214, 462 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 359, 1039 + xy: 489, 843 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 surge-tower rotate: false - xy: 353, 907 + xy: 695, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 287, 775 + xy: 1659, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-reactor rotate: false - xy: 555, 1039 + xy: 685, 1039 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-center rotate: false - xy: 1199, 1560 + xy: 489, 745 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-lights rotate: false - xy: 1199, 1462 + xy: 587, 843 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 turbine-generator rotate: false - xy: 221, 643 + xy: 1593, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-top rotate: false - xy: 551, 907 + xy: 1659, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 alloy-smelter rotate: false - xy: 219, 1540 + xy: 219, 1541 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-top rotate: false - xy: 1347, 1690 + xy: 1509, 1561 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 blast-mixer rotate: false - xy: 1543, 1558 + xy: 807, 1561 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 coal-centrifuge rotate: false - xy: 1609, 1558 + xy: 807, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 1395, 1476 + xy: 873, 1401 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 1873, 1624 + xy: 873, 1335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 1873, 1558 + xy: 939, 1401 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator rotate: false - xy: 1956, 1852 + xy: 1071, 1467 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 1383, 1410 + xy: 939, 1335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 1449, 1410 + xy: 1005, 1401 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 graphite-press rotate: false - xy: 596, 1232 + xy: 1137, 1203 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 incinerator rotate: false - xy: 1515, 931 + xy: 923, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source rotate: false - xy: 1277, 848 + xy: 957, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void rotate: false - xy: 1447, 836 + xy: 1127, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln rotate: false - xy: 596, 1166 + xy: 685, 727 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 728, 1232 + xy: 873, 1137 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 728, 1232 + xy: 873, 1137 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lavasmelter rotate: false - xy: 1413, 802 + xy: 957, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source rotate: false - xy: 1413, 768 + xy: 1093, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter rotate: false - xy: 1960, 1238 + xy: 1093, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press rotate: false - xy: 709, 1364 + xy: 391, 812 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 phase-weaver rotate: false - xy: 653, 1100 + xy: 1113, 1005 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 719, 1100 + xy: 849, 939 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 851, 1100 + xy: 981, 939 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 917, 1100 + xy: 1047, 939 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 983, 1100 + xy: 1113, 939 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 1399, 734 + xy: 1583, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 1399, 700 + xy: 1411, 628 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 785, 1034 + xy: 981, 873 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator rotate: false - xy: 155, 786 + xy: 1015, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 155, 720 + xy: 1081, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 155, 654 + xy: 563, 581 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 smelter rotate: false - xy: 1305, 620 + xy: 1581, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-press rotate: false - xy: 361, 973 + xy: 1155, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame0 rotate: false - xy: 427, 973 + xy: 1155, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame1 rotate: false - xy: 493, 973 + xy: 1147, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame2 rotate: false - xy: 559, 973 + xy: 1221, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-liquid rotate: false - xy: 287, 907 + xy: 1213, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-top rotate: false - xy: 221, 841 + xy: 629, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container rotate: false - xy: 1675, 1624 + xy: 489, 441 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 core-foundation rotate: false - xy: 1102, 1918 + xy: 786, 1793 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus rotate: false - xy: 1, 1031 + xy: 1, 1032 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard rotate: false - xy: 1543, 1690 + xy: 1705, 1561 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-top rotate: false - xy: 1641, 1690 + xy: 1803, 1561 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad rotate: false - xy: 1003, 1462 + xy: 293, 422 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large rotate: false - xy: 916, 1788 + xy: 745, 1627 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 sortedunloader rotate: false - xy: 1373, 666 + xy: 1282, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader rotate: false - xy: 1361, 564 + xy: 1683, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault rotate: false - xy: 1297, 1478 + xy: 587, 745 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 arc-heat rotate: false - xy: 2015, 1286 + xy: 821, 344 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-1 rotate: false - xy: 1620, 1245 + xy: 821, 174 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-2 rotate: false - xy: 1609, 1624 + xy: 489, 507 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-3 rotate: false - xy: 1445, 1690 + xy: 1607, 1561 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-4 rotate: false - xy: 582, 1918 + xy: 526, 1757 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 hail-heat rotate: false - xy: 526, 1918 + xy: 1645, 987 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 794, 1232 + xy: 1005, 1137 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 meltdown-heat rotate: false - xy: 1176, 1788 + xy: 1005, 1663 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 ripple-heat rotate: false - xy: 204, 1148 + xy: 513, 1137 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 salvo-heat rotate: false - xy: 1383, 1344 + xy: 825, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 1271, 1298 + xy: 957, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 1256, 1232 + xy: 1023, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-heat rotate: false - xy: 851, 646 + xy: 1513, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 419, 643 + xy: 555, 251 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory rotate: false - xy: 1741, 1624 + xy: 489, 111 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory rotate: false - xy: 1741, 1624 + xy: 489, 111 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phantom-factory rotate: false - xy: 1741, 1624 + xy: 489, 111 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spirit-factory rotate: false - xy: 1741, 1624 + xy: 489, 111 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith-factory rotate: false - xy: 1741, 1624 + xy: 489, 111 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-top rotate: false - xy: 1807, 1624 + xy: 873, 1467 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-top-open rotate: false - xy: 1807, 1558 + xy: 939, 1467 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-top rotate: false - xy: 1939, 1654 + xy: 873, 1203 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-top-open rotate: false - xy: 1939, 1588 + xy: 939, 1269 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-factory rotate: false - xy: 131, 39 + xy: 611, 1333 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fortress-factory-top rotate: false - xy: 415, 1431 + xy: 415, 1204 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ghoul-factory-top rotate: false - xy: 415, 1431 + xy: 415, 1204 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 titan-factory-top rotate: false - xy: 415, 1431 + xy: 415, 1204 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fortress-factory-top-open rotate: false - xy: 513, 1529 + xy: 513, 1235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ghoul-factory-top-open rotate: false - xy: 513, 1529 + xy: 513, 1235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 titan-factory-top-open rotate: false - xy: 513, 1529 + xy: 513, 1235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ghoul-factory rotate: false - xy: 611, 1462 + xy: 204, 1247 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 phantom-factory-top rotate: false - xy: 1190, 1232 + xy: 915, 1005 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phantom-factory-top-open rotate: false - xy: 1124, 1166 + xy: 981, 1005 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-base rotate: false - xy: 1501, 727 + xy: 1411, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory rotate: false - xy: 1436, 1788 + xy: 1265, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 revenant-factory-top rotate: false - xy: 1696, 1788 + xy: 1525, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 revenant-factory-top-open rotate: false - xy: 1826, 1788 + xy: 1655, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spirit-factory-top rotate: false - xy: 229, 973 + xy: 1179, 939 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spirit-factory-top-open rotate: false - xy: 295, 973 + xy: 1179, 873 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-factory rotate: false - xy: 1199, 1364 + xy: 685, 941 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 wraith-factory-top rotate: false - xy: 485, 643 + xy: 555, 119 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith-factory-top-open rotate: false - xy: 551, 643 + xy: 555, 53 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 1523, 999 + xy: 961, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 1675, 1558 + xy: 807, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door rotate: false - xy: 1311, 926 + xy: 1131, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large rotate: false - xy: 743, 1298 + xy: 1005, 1269 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 809, 1298 + xy: 1071, 1335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-open rotate: false - xy: 1345, 960 + xy: 889, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 1101, 646 + xy: 1607, 903 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 1190, 1166 + xy: 1047, 1005 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-gigantic rotate: false - xy: 583, 1658 + xy: 1915, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-huge1 rotate: false - xy: 498, 1137 + xy: 489, 1039 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-huge2 rotate: false - xy: 163, 1050 + xy: 489, 941 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-huge3 rotate: false - xy: 261, 1039 + xy: 587, 1039 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-large1 rotate: false - xy: 1247, 1034 + xy: 661, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 163, 984 + xy: 817, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 155, 918 + xy: 883, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 155, 852 + xy: 949, 675 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall1 rotate: false - xy: 919, 650 + xy: 1445, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall2 rotate: false - xy: 953, 650 + xy: 1479, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall3 rotate: false - xy: 987, 650 + xy: 1513, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall4 rotate: false - xy: 1021, 650 + xy: 1547, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall5 rotate: false - xy: 1021, 650 + xy: 1547, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 1475, 625 + xy: 1675, 919 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 287, 841 + xy: 1395, 1479 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 1441, 591 + xy: 1659, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 221, 709 + xy: 1725, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thruster rotate: false - xy: 973, 1658 + xy: 1135, 1533 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 titanium-wall rotate: false - xy: 1225, 568 + xy: 1683, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large rotate: false - xy: 353, 775 + xy: 1923, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 bullet rotate: false - xy: 799, 980 + xy: 526, 1907 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 853, 980 + xy: 1261, 1301 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 casing rotate: false - xy: 1505, 1326 + xy: 2039, 1541 size: 8, 16 orig: 8, 16 offset: 0, 0 index: -1 circle-shadow rotate: false - xy: 1, 1193 + xy: 1, 1194 size: 201, 201 orig: 201, 201 offset: 0, 0 index: -1 error rotate: false - xy: 429, 235 + xy: 671, 14 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser rotate: false - xy: 1021, 488 + xy: 507, 1154 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 laser-end rotate: false - xy: 1395, 1542 + xy: 489, 573 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 minelaser rotate: false - xy: 891, 188 + xy: 555, 523 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 1469, 1616 + xy: 587, 671 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 missile rotate: false - xy: 1506, 1270 + xy: 2011, 1171 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 missile-back rotate: false - xy: 1544, 1270 + xy: 2011, 1133 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 scale_marker rotate: false - xy: 1313, 1160 + xy: 204, 1194 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 scorch1 rotate: false - xy: 679, 428 + xy: 1161, 245 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch2 rotate: false - xy: 679, 326 + xy: 1161, 143 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch3 rotate: false - xy: 679, 224 + xy: 1161, 41 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch4 rotate: false - xy: 679, 122 + xy: 1717, 545 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch5 rotate: false - xy: 709, 428 + xy: 1717, 443 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 shell rotate: false - xy: 1506, 1203 + xy: 821, 445 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shell-back rotate: false - xy: 1544, 1232 + xy: 821, 407 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shot rotate: false - xy: 1305, 688 + xy: 1581, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 transfer rotate: false - xy: 1021, 438 + xy: 621, 465 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 1293, 586 + xy: 1649, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 transfer-end rotate: false - xy: 1469, 1542 + xy: 685, 793 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 alloy-smelter-icon-large rotate: false - xy: 907, 984 + xy: 1999, 1609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alloy-smelter-icon-medium rotate: false - xy: 2015, 1388 + xy: 727, 669 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 alloy-smelter-icon-small rotate: false - xy: 583, 1632 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -alpha-dart-mech-pad-icon-large - rotate: false - xy: 957, 984 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -alpha-dart-mech-pad-icon-medium - rotate: false - xy: 2015, 1354 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -alpha-dart-mech-pad-icon-small - rotate: false - xy: 2001, 1726 + xy: 137, 34 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 arc rotate: false - xy: 2015, 1320 + xy: 2015, 1225 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc-icon-full rotate: false - xy: 2015, 1252 + xy: 859, 394 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc-icon-large rotate: false - xy: 1157, 984 + xy: 1261, 1201 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 arc-icon-small rotate: false - xy: 447, 9 + xy: 137, 8 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 battery-icon-large rotate: false - xy: 1257, 984 + xy: 87, 10 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 battery-icon-small rotate: false - xy: 1429, 531 + xy: 485, 1601 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 battery-large-icon-large rotate: false - xy: 213, 528 + xy: 621, 414 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 battery-large-icon-medium rotate: false - xy: 2012, 1988 + xy: 821, 276 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large-icon-small rotate: false - xy: 1588, 565 + xy: 2019, 1270 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-icon-full rotate: false - xy: 1, 267 + xy: 1490, 1919 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-icon-large rotate: false - xy: 229, 478 + xy: 621, 364 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 blast-drill-icon-medium rotate: false - xy: 2012, 1954 + xy: 821, 242 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-drill-icon-small rotate: false - xy: 679, 58 + xy: 1384, 467 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-mixer-icon-large rotate: false - xy: 229, 428 + xy: 621, 314 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 blast-mixer-icon-medium rotate: false - xy: 2012, 1920 + xy: 821, 208 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-mixer-icon-small rotate: false - xy: 709, 339 + xy: 2014, 1793 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bridge-conduit-icon-large rotate: false - xy: 229, 278 + xy: 621, 164 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conduit-icon-small rotate: false - xy: 1455, 531 + xy: 1410, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bridge-conveyor-icon-large rotate: false - xy: 229, 228 + xy: 621, 114 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conveyor-icon-small rotate: false - xy: 1614, 565 + xy: 1436, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 char-icon-large rotate: false - xy: 229, 128 + xy: 1989, 1509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 char-icon-small rotate: false - xy: 709, 287 + xy: 1488, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cliffs-icon-large rotate: false - xy: 229, 78 + xy: 1989, 1459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cliffs-icon-small rotate: false - xy: 709, 261 + xy: 1514, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 coal-centrifuge-icon-large rotate: false - xy: 263, 528 + xy: 1261, 1093 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 coal-centrifuge-icon-medium rotate: false - xy: 1790, 1240 + xy: 1421, 832 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal-centrifuge-icon-small rotate: false - xy: 709, 235 + xy: 1719, 673 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 combustion-generator-icon-large rotate: false - xy: 313, 535 + xy: 1377, 1429 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 combustion-generator-icon-small rotate: false - xy: 709, 209 + xy: 1719, 647 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 conduit-icon-full rotate: false - xy: 1205, 826 + xy: 1489, 798 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-icon-large rotate: false - xy: 363, 535 + xy: 1427, 1429 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 conduit-icon-small rotate: false - xy: 709, 183 + xy: 1540, 461 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 container-icon-large rotate: false - xy: 413, 535 + xy: 1477, 1429 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 container-icon-medium rotate: false - xy: 1455, 1040 + xy: 1523, 730 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 container-icon-small rotate: false - xy: 709, 157 + xy: 1566, 461 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 conveyor-icon-large rotate: false - xy: 463, 535 + xy: 1989, 1409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 conveyor-icon-small rotate: false - xy: 709, 131 + xy: 290, 1221 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 copper-wall-icon-large rotate: false - xy: 513, 535 + xy: 671, 414 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 copper-wall-icon-small rotate: false - xy: 2022, 1894 + xy: 2022, 1907 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 copper-wall-large-icon-large rotate: false - xy: 563, 535 + xy: 671, 364 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 copper-wall-large-icon-medium rotate: false - xy: 1557, 1135 + xy: 995, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large-icon-small rotate: false - xy: 2022, 1868 + xy: 2022, 1881 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-foundation-icon-large rotate: false - xy: 229, 28 + xy: 671, 314 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-foundation-icon-medium rotate: false - xy: 1557, 1101 + xy: 1029, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-foundation-icon-small rotate: false - xy: 2022, 1842 + xy: 2022, 1855 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-nucleus-icon-large rotate: false - xy: 279, 478 + xy: 671, 264 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-nucleus-icon-medium rotate: false - xy: 1557, 1067 + xy: 1063, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-nucleus-icon-small rotate: false - xy: 2022, 1816 + xy: 1384, 441 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-shard-icon-large rotate: false - xy: 279, 428 + xy: 671, 214 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-shard-icon-medium rotate: false - xy: 1557, 1033 + xy: 1097, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-shard-icon-small rotate: false - xy: 2022, 1790 + xy: 1410, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +cracks-1-0 + rotate: false + xy: 1131, 381 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-1 + rotate: false + xy: 859, 360 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-2 + rotate: false + xy: 855, 326 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-3 + rotate: false + xy: 855, 292 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-4 + rotate: false + xy: 855, 258 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-5 + rotate: false + xy: 855, 224 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-6 + rotate: false + xy: 855, 190 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-7 + rotate: false + xy: 855, 156 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-2-0 + rotate: false + xy: 489, 375 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-1 + rotate: false + xy: 807, 1363 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-2 + rotate: false + xy: 489, 309 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-3 + rotate: false + xy: 807, 1297 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-4 + rotate: false + xy: 489, 243 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-5 + rotate: false + xy: 807, 1231 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-6 + rotate: false + xy: 489, 177 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-2-7 + rotate: false + xy: 807, 1165 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cracks-3-0 + rotate: false + xy: 1901, 1561 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-1 + rotate: false + xy: 317, 1498 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-2 + rotate: false + xy: 415, 1498 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-3 + rotate: false + xy: 513, 1529 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-4 + rotate: false + xy: 611, 1529 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-5 + rotate: false + xy: 709, 1529 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-6 + rotate: false + xy: 317, 1400 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-7 + rotate: false + xy: 415, 1400 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-4-0 + rotate: false + xy: 916, 1793 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-1 + rotate: false + xy: 1046, 1793 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-2 + rotate: false + xy: 1176, 1793 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-3 + rotate: false + xy: 1306, 1789 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-4 + rotate: false + xy: 1436, 1789 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-5 + rotate: false + xy: 1566, 1789 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-6 + rotate: false + xy: 1696, 1789 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-7 + rotate: false + xy: 1826, 1789 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-5-0 + rotate: false + xy: 1, 870 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-1 + rotate: false + xy: 1, 708 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-2 + rotate: false + xy: 1, 546 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-3 + rotate: false + xy: 1, 384 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-4 + rotate: false + xy: 1, 222 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-5 + rotate: false + xy: 1, 60 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-6 + rotate: false + xy: 323, 1596 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-7 + rotate: false + xy: 582, 1887 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 craters-icon-large rotate: false - xy: 279, 378 + xy: 671, 164 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 craters-icon-small rotate: false - xy: 2005, 1700 + xy: 1436, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 crawler-factory-icon-full rotate: false - xy: 1741, 1558 + xy: 489, 45 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-icon-large rotate: false - xy: 279, 228 + xy: 721, 421 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-factory-icon-medium rotate: false - xy: 1557, 999 + xy: 855, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 crawler-factory-icon-small rotate: false - xy: 2005, 1674 + xy: 1462, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 creeptree-icon-large rotate: false - xy: 279, 128 + xy: 721, 321 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 creeptree-icon-medium rotate: false - xy: 1117, 714 + xy: 855, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 creeptree-icon-small rotate: false - xy: 2005, 1648 + xy: 1488, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cryofluidmixer-icon-full rotate: false - xy: 1461, 1476 + xy: 1005, 1467 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-icon-large rotate: false - xy: 279, 78 + xy: 721, 271 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cryofluidmixer-icon-medium rotate: false - xy: 1243, 942 + xy: 855, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cryofluidmixer-icon-small rotate: false - xy: 2005, 1622 + xy: 1514, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cultivator-icon-full rotate: false - xy: 1956, 1786 + xy: 873, 1269 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-large rotate: false - xy: 279, 28 + xy: 721, 221 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cultivator-icon-medium rotate: false - xy: 1243, 908 + xy: 893, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cultivator-icon-small rotate: false - xy: 2005, 1596 + xy: 1540, 435 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cyclone rotate: false - xy: 1739, 1690 + xy: 513, 1431 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cyclone-icon-full rotate: false - xy: 1837, 1690 + xy: 611, 1431 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cyclone-icon-large rotate: false - xy: 329, 485 + xy: 721, 171 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cyclone-icon-medium rotate: false - xy: 1243, 874 + xy: 927, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cyclone-icon-small rotate: false - xy: 2005, 1570 + xy: 1566, 435 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dagger-factory-icon-full rotate: false - xy: 1935, 1720 + xy: 1137, 1467 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-icon-large rotate: false - xy: 329, 385 + xy: 1377, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-factory-icon-medium rotate: false - xy: 1277, 950 + xy: 961, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dagger-factory-icon-small rotate: false - xy: 2005, 1544 + xy: 1745, 673 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-metal-icon-large rotate: false - xy: 429, 485 + xy: 1477, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-metal-icon-small rotate: false - xy: 655, 647 + xy: 1745, 647 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-1-icon-large rotate: false - xy: 329, 335 + xy: 1527, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-1-icon-small rotate: false - xy: 681, 650 + xy: 1747, 621 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-2-icon-large rotate: false - xy: 379, 385 + xy: 1577, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-2-icon-small rotate: false - xy: 707, 650 + xy: 1747, 595 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-3-icon-large rotate: false - xy: 429, 435 + xy: 1627, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-3-icon-small rotate: false - xy: 733, 650 + xy: 1747, 569 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-4-icon-large rotate: false - xy: 479, 485 + xy: 1677, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-4-icon-small rotate: false - xy: 759, 650 + xy: 1747, 543 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-5-icon-large rotate: false - xy: 329, 285 + xy: 1727, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-5-icon-small rotate: false - xy: 785, 650 + xy: 1747, 517 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-6-icon-large rotate: false - xy: 379, 335 + xy: 1777, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-6-icon-small rotate: false - xy: 473, 1 + xy: 1747, 491 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-icon-large rotate: false - xy: 429, 385 + xy: 1827, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-icon-small rotate: false - xy: 499, 1 + xy: 1747, 465 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-tainted-water-icon-large rotate: false - xy: 479, 435 + xy: 1877, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-tainted-water-icon-small rotate: false - xy: 1588, 539 + xy: 1747, 439 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-water-icon-large rotate: false - xy: 529, 485 + xy: 1927, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-water-icon-small rotate: false - xy: 1614, 539 + xy: 1747, 969 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dart-mech-pad-icon-large + rotate: false + xy: 1977, 1359 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +dart-mech-pad-icon-medium + rotate: false + xy: 995, 347 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dart-mech-pad-icon-small + rotate: false + xy: 1773, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 deepwater-icon-large rotate: false - xy: 379, 285 + xy: 1245, 993 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 deepwater-icon-small rotate: false - xy: 668, 621 + xy: 1799, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 delta-mech-pad-icon-large rotate: false - xy: 329, 185 + xy: 1295, 993 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-pad-icon-medium rotate: false - xy: 1277, 916 + xy: 1029, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 delta-mech-pad-icon-small rotate: false - xy: 694, 624 + xy: 1825, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 differential-generator-icon-large rotate: false - xy: 379, 235 + xy: 1295, 943 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 differential-generator-icon-medium rotate: false - xy: 1277, 882 + xy: 1063, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator-icon-small rotate: false - xy: 720, 624 + xy: 1851, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 distributor-icon-large rotate: false - xy: 429, 285 + xy: 1295, 893 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 distributor-icon-medium rotate: false - xy: 1311, 960 + xy: 1097, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor-icon-small rotate: false - xy: 746, 624 + xy: 1877, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 door-icon-large rotate: false - xy: 479, 335 + xy: 1287, 843 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 door-icon-small rotate: false - xy: 772, 624 + xy: 1903, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 door-large-icon-large rotate: false - xy: 529, 385 + xy: 1287, 793 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 door-large-icon-medium rotate: false - xy: 1311, 892 + xy: 889, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-small rotate: false - xy: 668, 595 + xy: 1929, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dunerocks-icon-large rotate: false - xy: 329, 135 + xy: 1287, 743 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dunerocks-icon-small rotate: false - xy: 694, 598 + xy: 1747, 943 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 duo rotate: false - xy: 1345, 926 + xy: 923, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-full rotate: false - xy: 1345, 892 + xy: 889, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-large rotate: false - xy: 379, 185 + xy: 621, 14 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 duo-icon-small rotate: false - xy: 720, 598 + xy: 1773, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 force-projector-icon-large rotate: false - xy: 379, 135 + xy: 771, 371 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 force-projector-icon-medium rotate: false - xy: 1379, 942 + xy: 957, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 force-projector-icon-small rotate: false - xy: 746, 598 + xy: 1799, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-icon-full rotate: false - xy: 317, 1431 + xy: 709, 1333 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fortress-factory-icon-large rotate: false - xy: 429, 185 + xy: 771, 321 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fortress-factory-icon-medium rotate: false - xy: 1379, 908 + xy: 889, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fortress-factory-icon-small rotate: false - xy: 772, 598 + xy: 1825, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fuse rotate: false - xy: 513, 1431 + xy: 611, 1235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fuse-icon-full rotate: false - xy: 611, 1560 + xy: 709, 1235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fuse-icon-large rotate: false - xy: 479, 227 + xy: 771, 271 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fuse-icon-medium rotate: false - xy: 1413, 972 + xy: 923, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fuse-icon-small rotate: false - xy: 663, 569 + xy: 1851, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-icon-full rotate: false - xy: 709, 1560 + xy: 293, 1108 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ghoul-factory-icon-large rotate: false - xy: 529, 285 + xy: 771, 221 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ghoul-factory-icon-medium rotate: false - xy: 1413, 938 + xy: 957, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ghoul-factory-icon-small rotate: false - xy: 663, 543 + xy: 1877, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 glaive-ship-pad-icon-large rotate: false - xy: 379, 85 + xy: 771, 171 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 glaive-ship-pad-icon-medium rotate: false - xy: 1447, 972 + xy: 991, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 glaive-ship-pad-icon-small rotate: false - xy: 709, 105 + xy: 1903, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 graphite-press-icon-large rotate: false - xy: 429, 135 + xy: 771, 121 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 graphite-press-icon-medium rotate: false - xy: 1447, 938 + xy: 889, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 graphite-press-icon-small rotate: false - xy: 708, 79 + xy: 1929, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 grass-icon-large rotate: false - xy: 479, 177 + xy: 771, 71 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 grass-icon-small rotate: false - xy: 705, 53 + xy: 1743, 917 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hail rotate: false - xy: 1413, 904 + xy: 923, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail-icon-full rotate: false - xy: 1447, 904 + xy: 957, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail-icon-large rotate: false - xy: 529, 235 + xy: 771, 21 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 hail-icon-small rotate: false - xy: 798, 620 + xy: 1743, 891 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 holostone-icon-large rotate: false - xy: 479, 127 + xy: 1279, 641 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 holostone-icon-small rotate: false - xy: 824, 620 + xy: 1955, 977 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hotrock-icon-large rotate: false - xy: 529, 185 + xy: 1369, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 hotrock-icon-small rotate: false - xy: 850, 620 + xy: 1955, 951 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ice-icon-large rotate: false - xy: 529, 135 + xy: 1419, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ice-icon-small rotate: false - xy: 876, 620 + xy: 1773, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ice-snow-icon-large rotate: false - xy: 329, 27 + xy: 1469, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ice-snow-icon-small rotate: false - xy: 798, 594 + xy: 1799, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icerocks-icon-large rotate: false - xy: 379, 35 + xy: 1519, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icerocks-icon-small rotate: false - xy: 824, 594 + xy: 1825, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ignarock-icon-large rotate: false - xy: 479, 77 + xy: 1619, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ignarock-icon-small rotate: false - xy: 1640, 539 + xy: 1929, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 impact-reactor-icon-full rotate: false - xy: 1492, 1918 + xy: 163, 804 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-icon-large rotate: false - xy: 529, 85 + xy: 1669, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 impact-reactor-icon-medium rotate: false - xy: 1515, 965 + xy: 889, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 impact-reactor-icon-small rotate: false - xy: 689, 569 + xy: 1955, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 incinerator-icon-large rotate: false - xy: 479, 27 + xy: 1719, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 incinerator-icon-small rotate: false - xy: 689, 543 + xy: 1769, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-blast-compound-medium rotate: false - xy: 715, 530 + xy: 1795, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-blast-compound-small rotate: false - xy: 967, 448 + xy: 1773, 489 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-blast-compound-xlarge rotate: false - xy: 1067, 692 + xy: 1595, 937 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-coal-medium rotate: false - xy: 741, 572 + xy: 1821, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-coal-small rotate: false - xy: 985, 466 + xy: 1923, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-coal-xlarge rotate: false - xy: 1117, 748 + xy: 1745, 1037 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-copper-medium rotate: false - xy: 741, 546 + xy: 1847, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-copper-small rotate: false - xy: 1003, 484 + xy: 1773, 471 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-copper-xlarge rotate: false - xy: 1337, 1342 + xy: 1687, 987 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-graphite-medium rotate: false - xy: 767, 572 + xy: 1873, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-graphite-small rotate: false - xy: 967, 430 + xy: 1941, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-graphite-xlarge rotate: false - xy: 1337, 1300 + xy: 1787, 1037 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-lead-medium rotate: false - xy: 767, 546 + xy: 1899, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-lead-small rotate: false - xy: 985, 448 + xy: 1773, 453 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-lead-xlarge rotate: false - xy: 1379, 1302 + xy: 1829, 1037 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-metaglass-medium rotate: false - xy: 793, 568 + xy: 1925, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-metaglass-small rotate: false - xy: 1003, 466 + xy: 1959, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-metaglass-xlarge rotate: false - xy: 1421, 1302 + xy: 1871, 1037 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-phase-fabric-medium rotate: false - xy: 819, 568 + xy: 1951, 899 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-phase-fabric-small rotate: false - xy: 985, 430 + xy: 855, 2 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-phase-fabric-xlarge rotate: false - xy: 1463, 1302 + xy: 1913, 1037 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-plastanium-medium rotate: false - xy: 845, 568 + xy: 1967, 1011 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-plastanium-small rotate: false - xy: 1003, 448 + xy: 163, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-plastanium-xlarge rotate: false - xy: 1380, 1260 + xy: 802, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-pyratite-medium rotate: false - xy: 871, 568 + xy: 1769, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-pyratite-small rotate: false - xy: 1003, 430 + xy: 181, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-pyratite-xlarge rotate: false - xy: 1380, 1218 + xy: 844, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-sand-medium rotate: false - xy: 793, 542 + xy: 1795, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-sand-small rotate: false - xy: 207, 3 + xy: 199, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-sand-xlarge rotate: false - xy: 1422, 1260 + xy: 886, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-scrap-medium rotate: false - xy: 819, 542 + xy: 1821, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-scrap-small rotate: false - xy: 225, 10 + xy: 217, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-scrap-xlarge rotate: false - xy: 1380, 1176 + xy: 928, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-silicon-medium rotate: false - xy: 845, 542 + xy: 1847, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-silicon-small rotate: false - xy: 243, 10 + xy: 235, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-silicon-xlarge rotate: false - xy: 1422, 1218 + xy: 970, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-source-icon-large rotate: false - xy: 529, 35 + xy: 1769, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-source-icon-small rotate: false - xy: 871, 542 + xy: 1873, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-medium rotate: false - xy: 741, 520 + xy: 1899, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-small rotate: false - xy: 261, 10 + xy: 253, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-spore-pod-xlarge rotate: false - xy: 1422, 1176 + xy: 1012, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-surge-alloy-medium rotate: false - xy: 767, 520 + xy: 1925, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-surge-alloy-small rotate: false - xy: 279, 10 + xy: 271, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-surge-alloy-xlarge rotate: false - xy: 1464, 1260 + xy: 1054, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-thorium-medium rotate: false - xy: 739, 494 + xy: 1951, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-thorium-small rotate: false - xy: 297, 10 + xy: 1799, 559 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-thorium-xlarge rotate: false - xy: 1464, 1218 + xy: 1096, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-titanium-medium rotate: false - xy: 739, 468 + xy: 1761, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-titanium-small rotate: false - xy: 1211, 686 + xy: 1714, 425 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-titanium-xlarge rotate: false - xy: 1464, 1176 + xy: 1138, 483 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-void-icon-large rotate: false - xy: 579, 485 + xy: 1819, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-void-icon-small rotate: false - xy: 765, 494 + xy: 1761, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 javelin-ship-pad-icon-large rotate: false - xy: 579, 385 + xy: 1919, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-pad-icon-medium rotate: false - xy: 1481, 829 + xy: 923, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 javelin-ship-pad-icon-small rotate: false - xy: 739, 442 + xy: 1787, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 junction-icon-large rotate: false - xy: 579, 285 + xy: 1969, 1309 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 junction-icon-small rotate: false - xy: 765, 468 + xy: 1787, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 kiln-icon-large rotate: false - xy: 579, 235 + xy: 1369, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 kiln-icon-medium rotate: false - xy: 1549, 829 + xy: 991, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-small rotate: false - xy: 765, 442 + xy: 1813, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 lancer rotate: false - xy: 662, 1166 + xy: 939, 1137 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-full rotate: false - xy: 728, 1166 + xy: 1071, 1137 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-large rotate: false - xy: 579, 185 + xy: 1419, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lancer-icon-medium rotate: false - xy: 1311, 824 + xy: 1025, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lancer-icon-small rotate: false - xy: 793, 516 + xy: 1813, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 laser-drill-icon-full rotate: false - xy: 807, 1462 + xy: 293, 814 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-icon-large rotate: false - xy: 579, 135 + xy: 1469, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser-drill-icon-medium rotate: false - xy: 1345, 824 + xy: 1059, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 laser-drill-icon-small rotate: false - xy: 819, 516 + xy: 1839, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 launch-pad-icon-large rotate: false - xy: 579, 85 + xy: 1519, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 launch-pad-icon-medium rotate: false - xy: 1277, 814 + xy: 1093, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 launch-pad-icon-small rotate: false - xy: 845, 516 + xy: 1839, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 launch-pad-large-icon-large rotate: false - xy: 579, 35 + xy: 1569, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 launch-pad-large-icon-medium rotate: false - xy: 1379, 806 + xy: 1127, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 launch-pad-large-icon-small rotate: false - xy: 871, 516 + xy: 1865, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-junction-icon-large rotate: false - xy: 629, 485 + xy: 1669, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-junction-icon-small rotate: false - xy: 791, 490 + xy: 1865, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-router-icon-full rotate: false - xy: 1239, 806 + xy: 1127, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-large rotate: false - xy: 629, 435 + xy: 1719, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-router-icon-small rotate: false - xy: 791, 464 + xy: 1891, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-source-icon-large rotate: false - xy: 629, 385 + xy: 1769, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-source-icon-small rotate: false - xy: 817, 490 + xy: 1891, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-icon-full rotate: false - xy: 1101, 1462 + xy: 293, 226 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-icon-large rotate: false - xy: 629, 335 + xy: 1819, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-tank-icon-medium rotate: false - xy: 1447, 768 + xy: 1127, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-icon-small rotate: false - xy: 817, 464 + xy: 1917, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 magmarock-icon-large rotate: false - xy: 629, 285 + xy: 1869, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 magmarock-icon-small rotate: false - xy: 843, 490 + xy: 1917, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mass-driver rotate: false - xy: 415, 1333 + xy: 391, 1106 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mass-driver-icon-full rotate: false - xy: 611, 1364 + xy: 391, 910 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mass-driver-icon-large rotate: false - xy: 629, 235 + xy: 1919, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mass-driver-icon-medium rotate: false - xy: 1515, 761 + xy: 1059, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mass-driver-icon-small rotate: false - xy: 843, 464 + xy: 1943, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mech-icon-alpha-mech rotate: false - xy: 629, 185 + xy: 1969, 1259 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 629, 135 + xy: 1337, 843 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 629, 85 + xy: 1337, 793 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-glaive-ship rotate: false - xy: 286, 585 + xy: 694, 471 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-icon-javelin-ship rotate: false - xy: 629, 35 + xy: 1337, 743 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-omega-mech rotate: false - xy: 344, 585 + xy: 1203, 1337 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-icon-tau-mech rotate: false - xy: 402, 585 + xy: 1203, 1279 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-icon-trident-ship rotate: false - xy: 460, 585 + xy: 1203, 1221 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mechanical-drill-icon-full rotate: false - xy: 794, 1166 + xy: 807, 1099 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-icon-large rotate: false - xy: 1543, 1508 + xy: 1329, 693 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mechanical-drill-icon-medium rotate: false - xy: 1549, 761 + xy: 1093, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-drill-icon-small rotate: false - xy: 869, 490 + xy: 1943, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mechanical-pump-icon-large rotate: false - xy: 1593, 1508 + xy: 1329, 643 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mechanical-pump-icon-small rotate: false - xy: 869, 464 + xy: 1981, 1044 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 meltdown rotate: false - xy: 1046, 1788 + xy: 875, 1663 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 meltdown-icon-full rotate: false - xy: 1306, 1788 + xy: 1135, 1663 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 meltdown-icon-large rotate: false - xy: 1643, 1508 + xy: 555, 3 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 meltdown-icon-medium rotate: false - xy: 1926, 1238 + xy: 1059, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-icon-small rotate: false - xy: 791, 438 + xy: 2007, 1044 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 melter-icon-large rotate: false - xy: 1693, 1508 + xy: 761, 653 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 melter-icon-small rotate: false - xy: 817, 438 + xy: 1993, 1018 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mend-projector-icon-large rotate: false - xy: 1743, 1508 + xy: 761, 603 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mend-projector-icon-medium rotate: false - xy: 1888, 1204 + xy: 1127, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-small rotate: false - xy: 843, 438 + xy: 2019, 1018 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mender-icon-large rotate: false - xy: 1793, 1508 + xy: 761, 553 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mender-icon-small rotate: false - xy: 869, 438 + xy: 1969, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-2-icon-large rotate: false - xy: 1843, 1508 + xy: 811, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-2-icon-small rotate: false - xy: 739, 416 + xy: 1969, 821 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-3-icon-large rotate: false - xy: 1527, 1458 + xy: 861, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-3-icon-small rotate: false - xy: 765, 416 + xy: 1993, 992 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-5-icon-large rotate: false - xy: 1577, 1458 + xy: 811, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-5-icon-small rotate: false - xy: 738, 390 + xy: 2019, 992 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-damaged-icon-large rotate: false - xy: 1627, 1458 + xy: 911, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-damaged-icon-small rotate: false - xy: 764, 390 + xy: 1981, 966 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-icon-large rotate: false - xy: 1677, 1458 + xy: 861, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-icon-small rotate: false - xy: 738, 364 + xy: 1981, 940 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 moss-icon-large rotate: false - xy: 1727, 1458 + xy: 961, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 moss-icon-small rotate: false - xy: 764, 364 + xy: 2007, 966 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 multi-press-icon-large rotate: false - xy: 1777, 1458 + xy: 911, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 multi-press-icon-medium rotate: false - xy: 1888, 1170 + xy: 1127, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-small rotate: false - xy: 735, 338 + xy: 2007, 940 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-icon-full rotate: false - xy: 905, 1364 + xy: 391, 616 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-icon-large rotate: false - xy: 1827, 1458 + xy: 1011, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 oil-extractor-icon-medium rotate: false - xy: 1922, 1170 + xy: 889, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 oil-extractor-icon-small rotate: false - xy: 735, 312 + xy: 1981, 914 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 omega-mech-pad-icon-large rotate: false - xy: 1515, 1408 + xy: 961, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega-mech-pad-icon-medium rotate: false - xy: 1956, 1170 + xy: 923, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 omega-mech-pad-icon-small rotate: false - xy: 761, 338 + xy: 2007, 914 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-coal-icon-full rotate: false - xy: 379, 1 + xy: 957, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal-icon-medium rotate: false - xy: 379, 1 + xy: 957, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal-icon-large rotate: false - xy: 1515, 1358 + xy: 1061, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-coal-icon-small rotate: false - xy: 735, 286 + xy: 1977, 888 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-copper-icon-full rotate: false - xy: 413, 1 + xy: 991, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper-icon-medium rotate: false - xy: 413, 1 + xy: 991, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper-icon-large rotate: false - xy: 1565, 1408 + xy: 1011, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-copper-icon-small rotate: false - xy: 761, 312 + xy: 2003, 888 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-lead-icon-full rotate: false - xy: 529, 1 + xy: 1025, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead-icon-medium rotate: false - xy: 529, 1 + xy: 1025, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead-icon-large rotate: false - xy: 1565, 1358 + xy: 1111, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-lead-icon-small rotate: false - xy: 735, 260 + xy: 1995, 862 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-scrap-icon-full rotate: false - xy: 563, 1 + xy: 1059, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap-icon-medium rotate: false - xy: 563, 1 + xy: 1059, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap-icon-large rotate: false - xy: 1615, 1408 + xy: 1061, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-scrap-icon-small rotate: false - xy: 761, 286 + xy: 1995, 836 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-thorium-icon-full rotate: false - xy: 597, 1 + xy: 1093, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium-icon-medium rotate: false - xy: 597, 1 + xy: 1093, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium-icon-large rotate: false - xy: 1615, 1358 + xy: 1161, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-thorium-icon-small rotate: false - xy: 735, 234 + xy: 1995, 810 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ore-titanium-icon-full rotate: false - xy: 631, 1 + xy: 1127, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium-icon-medium rotate: false - xy: 631, 1 + xy: 1127, 41 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium-icon-large rotate: false - xy: 1665, 1408 + xy: 1111, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ore-titanium-icon-small rotate: false - xy: 761, 260 + xy: 2021, 862 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 overdrive-projector-icon-large rotate: false - xy: 1665, 1358 + xy: 1211, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 overdrive-projector-icon-medium rotate: false - xy: 665, 1 + xy: 855, 20 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-projector-icon-small rotate: false - xy: 735, 208 + xy: 2021, 836 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 overflow-gate-icon-large rotate: false - xy: 1715, 1408 + xy: 1161, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 overflow-gate-icon-small rotate: false - xy: 761, 234 + xy: 2021, 810 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pebbles-icon-large rotate: false - xy: 1715, 1358 + xy: 1211, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pebbles-icon-small rotate: false - xy: 735, 182 + xy: 369, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phantom-factory-icon-full rotate: false - xy: 1058, 1166 + xy: 849, 1005 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phantom-factory-icon-large rotate: false - xy: 1765, 1408 + xy: 1261, 591 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phantom-factory-icon-medium rotate: false - xy: 1143, 680 + xy: 889, 7 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phantom-factory-icon-small rotate: false - xy: 761, 208 + xy: 395, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conduit-icon-large rotate: false - xy: 1765, 1358 + xy: 811, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-conduit-icon-small rotate: false - xy: 735, 156 + xy: 421, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conveyor-icon-large rotate: false - xy: 1815, 1408 + xy: 861, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-conveyor-icon-small rotate: false - xy: 761, 182 + xy: 447, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-wall-icon-large rotate: false - xy: 1815, 1358 + xy: 911, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-wall-icon-small rotate: false - xy: 735, 130 + xy: 1761, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-wall-large-icon-large rotate: false - xy: 1877, 1458 + xy: 961, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-wall-large-icon-medium rotate: false - xy: 1135, 646 + xy: 1557, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-small rotate: false - xy: 761, 156 + xy: 1787, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-weaver-icon-full rotate: false - xy: 785, 1100 + xy: 915, 939 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-large rotate: false - xy: 1865, 1408 + xy: 1011, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-weaver-icon-medium rotate: false - xy: 1177, 680 + xy: 1557, 827 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-weaver-icon-small rotate: false - xy: 761, 130 + xy: 1813, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pine-icon-medium rotate: false - xy: 1169, 646 + xy: 1557, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine-icon-small rotate: false - xy: 735, 104 + xy: 1839, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 plastanium-compressor-icon-large rotate: false - xy: 1865, 1358 + xy: 1061, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 plastanium-compressor-icon-medium rotate: false - xy: 1203, 646 + xy: 1557, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-compressor-icon-small rotate: false - xy: 761, 104 + xy: 1865, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pneumatic-drill-icon-full rotate: false - xy: 1115, 1100 + xy: 759, 835 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-icon-large rotate: false - xy: 1927, 1472 + xy: 1111, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pneumatic-drill-icon-medium rotate: false - xy: 1161, 800 + xy: 1557, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-small rotate: false - xy: 734, 78 + xy: 1891, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-node-icon-large rotate: false - xy: 1977, 1472 + xy: 1161, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-node-icon-small rotate: false - xy: 760, 78 + xy: 1917, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-node-large-icon-large rotate: false - xy: 1515, 1308 + xy: 1211, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-node-large-icon-medium rotate: false - xy: 1161, 766 + xy: 1549, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-small rotate: false - xy: 791, 412 + xy: 1943, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-source-icon-large rotate: false - xy: 1565, 1308 + xy: 1261, 541 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-source-icon-small rotate: false - xy: 817, 412 + xy: 1969, 795 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-void-icon-large rotate: false - xy: 1615, 1308 + xy: 1311, 591 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-void-icon-small rotate: false - xy: 843, 412 + xy: 1758, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pulse-conduit-icon-full rotate: false - xy: 1263, 772 + xy: 1865, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-large rotate: false - xy: 1665, 1308 + xy: 1311, 541 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulse-conduit-icon-small rotate: false - xy: 869, 412 + xy: 1758, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pulverizer-icon-full rotate: false - xy: 1433, 734 + xy: 1583, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-large rotate: false - xy: 1715, 1308 + xy: 1261, 491 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulverizer-icon-small rotate: false - xy: 790, 386 + xy: 1784, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pyratite-mixer-icon-large rotate: false - xy: 1765, 1308 + xy: 1311, 491 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pyratite-mixer-icon-medium rotate: false - xy: 1433, 700 + xy: 1411, 594 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-small rotate: false - xy: 816, 386 + xy: 1784, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 repair-point rotate: false - xy: 1467, 727 + xy: 1445, 628 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point-icon-full rotate: false - xy: 1535, 727 + xy: 1445, 594 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point-icon-large rotate: false - xy: 1865, 1308 + xy: 1361, 543 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 repair-point-icon-small rotate: false - xy: 842, 386 + xy: 1810, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 revenant-factory-icon-full rotate: false - xy: 1566, 1788 + xy: 1395, 1659 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 revenant-factory-icon-large rotate: false - xy: 1927, 1422 + xy: 1361, 493 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-factory-icon-medium rotate: false - xy: 1569, 727 + xy: 1479, 628 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-icon-small rotate: false - xy: 868, 386 + xy: 1810, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ripple rotate: false - xy: 498, 1235 + xy: 391, 28 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ripple-icon-full rotate: false - xy: 302, 1137 + xy: 611, 1137 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ripple-icon-large rotate: false - xy: 1915, 1372 + xy: 1311, 1213 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ripple-icon-medium rotate: false - xy: 1467, 693 + xy: 1411, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple-icon-small rotate: false - xy: 731, 52 + xy: 1836, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rock-icon-medium rotate: false - xy: 1501, 693 + xy: 1445, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rock-icon-small rotate: false - xy: 757, 52 + xy: 1836, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rocks-icon-large rotate: false - xy: 1915, 1322 + xy: 1311, 1163 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-icon-small rotate: false - xy: 790, 360 + xy: 1862, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rotary-pump-icon-large rotate: false - xy: 1965, 1372 + xy: 1311, 1113 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rotary-pump-icon-medium rotate: false - xy: 1535, 693 + xy: 1479, 594 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-icon-small rotate: false - xy: 816, 360 + xy: 1862, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 router-icon-large rotate: false - xy: 1965, 1322 + xy: 1365, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 router-icon-small rotate: false - xy: 842, 360 + xy: 1888, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rtg-generator-icon-large rotate: false - xy: 1915, 1272 + xy: 1415, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rtg-generator-icon-medium rotate: false - xy: 1603, 727 + xy: 1445, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-small rotate: false - xy: 868, 360 + xy: 1888, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salt-icon-large rotate: false - xy: 1965, 1272 + xy: 1465, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 salt-icon-small rotate: false - xy: 787, 334 + xy: 1914, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 saltrocks-icon-large rotate: false - xy: 1313, 994 + xy: 1515, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 saltrocks-icon-small rotate: false - xy: 787, 308 + xy: 1914, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salvo rotate: false - xy: 1939, 1522 + xy: 1089, 807 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-icon-full rotate: false - xy: 1449, 1344 + xy: 891, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-icon-large rotate: false - xy: 1371, 1110 + xy: 1565, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 salvo-icon-medium rotate: false - xy: 1990, 1204 + xy: 1513, 594 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-small rotate: false - xy: 813, 334 + xy: 1940, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-icon-large rotate: false - xy: 1371, 1060 + xy: 1615, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-icon-small rotate: false - xy: 787, 282 + xy: 1940, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-water-icon-large rotate: false - xy: 1371, 1010 + xy: 1665, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-water-icon-small rotate: false - xy: 813, 308 + xy: 1966, 769 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sandrocks-icon-large rotate: false - xy: 617, 923 + xy: 1715, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sandrocks-icon-small rotate: false - xy: 839, 334 + xy: 1966, 743 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scatter rotate: false - xy: 1256, 1166 + xy: 1089, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter-icon-full rotate: false - xy: 1247, 1100 + xy: 751, 703 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter-icon-large rotate: false - xy: 617, 873 + xy: 1765, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scatter-icon-medium rotate: false - xy: 1990, 1170 + xy: 1479, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-small rotate: false - xy: 787, 256 + xy: 1995, 784 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scorch rotate: false - xy: 817, 646 + xy: 1513, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scorch-icon-full rotate: false - xy: 885, 646 + xy: 1411, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scorch-icon-large rotate: false - xy: 617, 823 + xy: 1815, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scorch-icon-small rotate: false - xy: 813, 282 + xy: 2021, 784 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-large rotate: false - xy: 617, 773 + xy: 1865, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-medium rotate: false - xy: 1219, 704 + xy: 1547, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-small rotate: false - xy: 839, 308 + xy: 1992, 758 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-huge-icon-large rotate: false - xy: 617, 723 + xy: 1915, 1229 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-huge-icon-medium rotate: false - xy: 1253, 704 + xy: 1581, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-huge-icon-small rotate: false - xy: 865, 334 + xy: 2018, 758 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-icon-large rotate: false - xy: 617, 673 + xy: 1361, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-icon-small rotate: false - xy: 787, 230 + xy: 1992, 732 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-large-icon-large rotate: false - xy: 667, 926 + xy: 1411, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-large-icon-medium rotate: false - xy: 1237, 670 + xy: 1547, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-small rotate: false - xy: 813, 256 + xy: 2018, 732 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 separator-icon-large rotate: false - xy: 717, 926 + xy: 1361, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 separator-icon-medium rotate: false - xy: 1271, 670 + xy: 1547, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 separator-icon-small rotate: false - xy: 787, 204 + xy: 1165, 347 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shale-boulder-icon-large rotate: false - xy: 667, 876 + xy: 1411, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shale-boulder-icon-small rotate: false - xy: 813, 230 + xy: 1618, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shale-icon-large rotate: false - xy: 717, 876 + xy: 1461, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shale-icon-small rotate: false - xy: 839, 240 + xy: 1644, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shalerocks-icon-large rotate: false - xy: 667, 826 + xy: 1461, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shalerocks-icon-small rotate: false - xy: 865, 271 + xy: 1670, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shock-mine-icon-large rotate: false - xy: 717, 826 + xy: 1511, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shock-mine-icon-small rotate: false - xy: 787, 178 + xy: 1168, 415 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shrubs-icon-large rotate: false - xy: 717, 776 + xy: 1561, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shrubs-icon-small rotate: false - xy: 813, 204 + xy: 1618, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 silicon-smelter-icon-large rotate: false - xy: 667, 726 + xy: 1561, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 silicon-smelter-icon-medium rotate: false - xy: 1305, 654 + xy: 1547, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-smelter-icon-small rotate: false - xy: 839, 214 + xy: 1644, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snow-icon-large rotate: false - xy: 717, 726 + xy: 1611, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-icon-small rotate: false - xy: 865, 245 + xy: 1670, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snowrock-icon-medium rotate: false - xy: 1339, 670 + xy: 1180, 462 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock-icon-small rotate: false - xy: 787, 152 + xy: 1592, 414 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snowrocks-icon-large rotate: false - xy: 667, 676 + xy: 1611, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-icon-small rotate: false - xy: 813, 178 + xy: 1618, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-icon-large rotate: false - xy: 717, 676 + xy: 1661, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 solar-panel-icon-small rotate: false - xy: 839, 188 + xy: 1644, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-large-icon-large rotate: false - xy: 767, 926 + xy: 1661, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 solar-panel-large-icon-medium rotate: false - xy: 1339, 602 + xy: 1248, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-small rotate: false - xy: 865, 219 + xy: 1670, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sorter-icon-large rotate: false - xy: 767, 876 + xy: 1711, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sorter-icon-small rotate: false - xy: 787, 126 + xy: 1758, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spawn-icon-large rotate: false - xy: 767, 826 + xy: 1711, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spawn-icon-small rotate: false - xy: 813, 152 + xy: 1784, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spectre rotate: false - xy: 713, 1658 + xy: 875, 1533 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spectre-icon-full rotate: false - xy: 843, 1658 + xy: 1005, 1533 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spectre-icon-large rotate: false - xy: 767, 776 + xy: 1761, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spectre-icon-medium rotate: false - xy: 1407, 632 + xy: 1350, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-small rotate: false - xy: 839, 162 + xy: 1810, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spirit-factory-icon-full rotate: false - xy: 155, 588 + xy: 1179, 1005 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spirit-factory-icon-large rotate: false - xy: 767, 676 + xy: 1811, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spirit-factory-icon-medium rotate: false - xy: 1373, 598 + xy: 2014, 1819 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spirit-factory-icon-small rotate: false - xy: 865, 193 + xy: 1836, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-cluster-icon-large rotate: false - xy: 817, 930 + xy: 1811, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-cluster-icon-medium rotate: false - xy: 1407, 598 + xy: 1645, 953 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-cluster-icon-small rotate: false - xy: 813, 126 + xy: 1862, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-moss-icon-large rotate: false - xy: 817, 880 + xy: 1861, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-moss-icon-small rotate: false - xy: 839, 136 + xy: 1888, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-pine-icon-medium rotate: false - xy: 1441, 659 + xy: 1679, 953 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine-icon-small rotate: false - xy: 865, 167 + xy: 1914, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-press-icon-full rotate: false - xy: 221, 907 + xy: 1221, 741 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-icon-large rotate: false - xy: 817, 830 + xy: 1861, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-medium rotate: false - xy: 1441, 625 + xy: 1713, 953 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-press-icon-small rotate: false - xy: 865, 141 + xy: 1940, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sporerocks-icon-large rotate: false - xy: 817, 780 + xy: 1911, 1179 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sporerocks-icon-small rotate: false - xy: 787, 100 + xy: 1966, 717 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 stone-icon-large rotate: false - xy: 817, 730 + xy: 1911, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 stone-icon-small rotate: false - xy: 813, 100 + xy: 1992, 706 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-tower-icon-large rotate: false - xy: 817, 680 + xy: 1965, 1209 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-tower-icon-medium rotate: false - xy: 1475, 659 + xy: 1641, 919 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-small rotate: false - xy: 839, 110 + xy: 2018, 706 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-icon-large rotate: false - xy: 867, 930 + xy: 1961, 1159 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-icon-small rotate: false - xy: 865, 115 + xy: 1771, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-large-icon-large rotate: false - xy: 867, 880 + xy: 1961, 1109 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-large-icon-medium rotate: false - xy: 1509, 659 + xy: 1709, 919 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-small rotate: false - xy: 786, 74 + xy: 1771, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 swarmer rotate: false - xy: 221, 775 + xy: 1461, 1479 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-full rotate: false - xy: 419, 907 + xy: 1527, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-large rotate: false - xy: 867, 780 + xy: 1411, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-icon-medium rotate: false - xy: 1509, 625 + xy: 1641, 885 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer-icon-small rotate: false - xy: 812, 74 + xy: 1797, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tainted-water-icon-large rotate: false - xy: 867, 730 + xy: 1461, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tainted-water-icon-small rotate: false - xy: 783, 48 + xy: 1797, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tar-icon-large rotate: false - xy: 867, 680 + xy: 1511, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tar-icon-small rotate: false - xy: 809, 48 + xy: 1823, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tau-mech-pad-icon-large rotate: false - xy: 917, 884 + xy: 1661, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-pad-icon-medium rotate: false - xy: 1543, 659 + xy: 1675, 885 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tau-mech-pad-icon-small rotate: false - xy: 839, 84 + xy: 1823, 665 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +tendrils-icon-large + rotate: false + xy: 1711, 1079 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +tendrils-icon-small + rotate: false + xy: 1849, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thermal-generator-icon-large rotate: false - xy: 1017, 934 + xy: 1761, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thermal-generator-icon-medium rotate: false - xy: 1543, 625 + xy: 1709, 885 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-generator-icon-small rotate: false - xy: 865, 89 + xy: 1849, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thermal-pump-icon-large rotate: false - xy: 917, 834 + xy: 1811, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thermal-pump-icon-medium rotate: false - xy: 1577, 659 + xy: 1625, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-icon-small rotate: false - xy: 838, 58 + xy: 1875, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor-icon-large rotate: false - xy: 967, 884 + xy: 1861, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-reactor-icon-medium rotate: false - xy: 1577, 625 + xy: 1625, 817 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-reactor-icon-small rotate: false - xy: 835, 32 + xy: 1875, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-icon-large rotate: false - xy: 1067, 934 + xy: 1911, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-icon-small rotate: false - xy: 902, 590 + xy: 1901, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-large-icon-large rotate: false - xy: 917, 784 + xy: 1345, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-large-icon-medium rotate: false - xy: 1475, 591 + xy: 1625, 783 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-small rotate: false - xy: 928, 590 + xy: 1901, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thruster-icon-large rotate: false - xy: 967, 834 + xy: 1345, 979 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thruster-icon-medium rotate: false - xy: 1509, 591 + xy: 1659, 817 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thruster-icon-small rotate: false - xy: 954, 590 + xy: 1927, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-icon-full rotate: false - xy: 1297, 1576 + xy: 489, 647 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 titan-factory-icon-large rotate: false - xy: 1017, 884 + xy: 1395, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan-factory-icon-medium rotate: false - xy: 1543, 591 + xy: 1693, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titan-factory-icon-small rotate: false - xy: 980, 590 + xy: 1927, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-conveyor-icon-large rotate: false - xy: 1117, 934 + xy: 1345, 929 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-conveyor-icon-small rotate: false - xy: 1006, 590 + xy: 1953, 691 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-icon-large rotate: false - xy: 917, 734 + xy: 1445, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-icon-small rotate: false - xy: 897, 564 + xy: 1953, 665 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-large-icon-large rotate: false - xy: 967, 784 + xy: 1395, 979 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-large-icon-medium rotate: false - xy: 1259, 568 + xy: 1615, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-small rotate: false - xy: 923, 564 + xy: 1979, 680 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 trident-ship-pad-icon-large rotate: false - xy: 1017, 834 + xy: 1495, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 trident-ship-pad-icon-medium rotate: false - xy: 1293, 552 + xy: 1683, 579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 trident-ship-pad-icon-small rotate: false - xy: 897, 538 + xy: 2005, 680 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 turbine-generator-icon-large rotate: false - xy: 1067, 884 + xy: 1445, 979 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 turbine-generator-icon-medium rotate: false - xy: 1327, 568 + xy: 1649, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 turbine-generator-icon-small rotate: false - xy: 949, 564 + xy: 1979, 654 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-icon-chaos-array rotate: false - xy: 1103, 1658 + xy: 1265, 1529 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 unit-icon-crawler rotate: false - xy: 917, 684 + xy: 1395, 929 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 967, 734 + xy: 1545, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-icon-eradicator rotate: false - xy: 1, 527 + xy: 1206, 1923 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 unit-icon-eruptor rotate: false - xy: 485, 841 + xy: 1725, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-icon-fortress rotate: false - xy: 419, 775 + xy: 1791, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-icon-titan rotate: false - xy: 353, 709 + xy: 1857, 1429 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unloader-icon-large rotate: false - xy: 1017, 784 + xy: 1495, 979 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unloader-icon-small rotate: false - xy: 923, 538 + xy: 2005, 654 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 vault-icon-large rotate: false - xy: 1067, 834 + xy: 1445, 929 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vault-icon-medium rotate: false - xy: 1395, 564 + xy: 1683, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-small rotate: false - xy: 975, 564 + xy: 1773, 639 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-extractor-icon-full rotate: false - xy: 551, 841 + xy: 629, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-icon-large rotate: false - xy: 1117, 884 + xy: 1595, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 water-extractor-icon-medium rotate: false - xy: 1327, 534 + xy: 1615, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-extractor-icon-small rotate: false - xy: 949, 538 + xy: 1773, 613 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-icon-large rotate: false - xy: 967, 684 + xy: 1545, 979 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 water-icon-small rotate: false - xy: 1001, 564 + xy: 1799, 639 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wave rotate: false - xy: 551, 775 + xy: 555, 383 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-full rotate: false - xy: 485, 709 + xy: 555, 317 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-large rotate: false - xy: 1017, 734 + xy: 1495, 929 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wave-icon-medium rotate: false - xy: 1361, 530 + xy: 1649, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-icon-small rotate: false - xy: 975, 538 + xy: 1773, 587 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 white-tree-dead-icon-large rotate: false - xy: 1067, 784 + xy: 1645, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 white-tree-dead-icon-medium rotate: false - xy: 1395, 530 + xy: 1683, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-dead-icon-small rotate: false - xy: 1001, 538 + xy: 1799, 613 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 white-tree-icon-large rotate: false - xy: 1117, 834 + xy: 1595, 979 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 white-tree-icon-medium rotate: false - xy: 1429, 557 + xy: 1727, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-icon-small rotate: false - xy: 897, 512 + xy: 1825, 639 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wraith-factory-icon-full rotate: false - xy: 551, 709 + xy: 555, 185 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith-factory-icon-large rotate: false - xy: 1067, 734 + xy: 1695, 1029 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wraith-factory-icon-medium rotate: false - xy: 1463, 557 + xy: 1727, 817 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wraith-factory-icon-small rotate: false - xy: 923, 512 + xy: 1773, 561 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-biomatter rotate: false - xy: 1549, 965 + xy: 957, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 1549, 931 + xy: 991, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal rotate: false - xy: 1481, 897 + xy: 1025, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper rotate: false - xy: 1515, 897 + xy: 1059, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite rotate: false - xy: 1549, 897 + xy: 889, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead rotate: false - xy: 1379, 874 + xy: 923, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass rotate: false - xy: 1413, 870 + xy: 957, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 1447, 870 + xy: 991, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 1481, 863 + xy: 1025, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 1515, 863 + xy: 1059, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand rotate: false - xy: 1549, 863 + xy: 1093, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap rotate: false - xy: 1109, 680 + xy: 889, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 1243, 840 + xy: 923, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod rotate: false - xy: 1311, 858 + xy: 991, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 1345, 858 + xy: 1025, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 1379, 840 + xy: 1059, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 1413, 836 + xy: 1093, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid rotate: false - xy: 1447, 802 + xy: 991, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil rotate: false - xy: 1515, 795 + xy: 1059, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag rotate: false - xy: 1379, 772 + xy: 1059, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water rotate: false - xy: 1481, 761 + xy: 1025, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 alpha-mech rotate: false - xy: 1007, 984 + xy: 1999, 1559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-mech-base rotate: false - xy: 1057, 984 + xy: 1319, 1363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-mech-leg rotate: false - xy: 1107, 984 + xy: 1261, 1251 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech rotate: false - xy: 429, 335 + xy: 1245, 943 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-base rotate: false - xy: 479, 385 + xy: 1245, 893 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 529, 435 + xy: 1295, 1043 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 518, 585 + xy: 1203, 1163 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 omega-mech-armor rotate: false - xy: 1058, 1232 + xy: 1005, 1071 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 omega-mech-base rotate: false - xy: 1313, 1102 + xy: 1203, 1105 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 omega-mech-leg rotate: false - xy: 1313, 1044 + xy: 1261, 1471 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 683, 976 + xy: 1261, 1355 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 917, 934 + xy: 1561, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 967, 934 + xy: 1611, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 329, 235 + xy: 1245, 1043 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 glaive-ship rotate: false - xy: 155, 530 + xy: 1956, 1795 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 javelin-ship rotate: false - xy: 579, 435 + xy: 1869, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 579, 335 + xy: 1319, 1313 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 741, 976 + xy: 1319, 1413 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 blank rotate: false - xy: 625, 973 + xy: 893, 425 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 circle rotate: false - xy: 323, 1757 + xy: 323, 1758 size: 201, 201 orig: 201, 201 offset: 0, 0 index: -1 clear rotate: false - xy: 201, 1190 + xy: 1758, 814 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 shape-3 rotate: false - xy: 221, 578 + xy: 629, 464 size: 63, 63 orig: 63, 63 offset: 0, 0 index: -1 bar rotate: false - xy: 679, 84 + xy: 1727, 699 size: 27, 36 split: 9, 9, 9, 9 orig: 27, 36 @@ -6678,7 +6972,7 @@ bar index: -1 bar-top rotate: false - xy: 1559, 553 + xy: 1161, 3 size: 27, 36 split: 9, 10, 9, 10 orig: 27, 36 @@ -6686,7 +6980,7 @@ bar-top index: -1 button rotate: false - xy: 1167, 839 + xy: 1383, 900 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6694,7 +6988,7 @@ button index: -1 button-disabled rotate: false - xy: 596, 1137 + xy: 293, 1 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6702,7 +6996,7 @@ button-disabled index: -1 button-down rotate: false - xy: 163, 1164 + xy: 331, 1 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6710,7 +7004,7 @@ button-down index: -1 button-edge-1 rotate: false - xy: 131, 10 + xy: 786, 1764 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6718,7 +7012,7 @@ button-edge-1 index: -1 button-edge-2 rotate: false - xy: 1893, 1529 + xy: 2010, 2020 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6726,7 +7020,7 @@ button-edge-2 index: -1 button-edge-3 rotate: false - xy: 617, 644 + xy: 1203, 1076 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6734,7 +7028,7 @@ button-edge-3 index: -1 button-edge-4 rotate: false - xy: 1167, 955 + xy: 1961, 1080 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6742,7 +7036,7 @@ button-edge-4 index: -1 button-over rotate: false - xy: 169, 10 + xy: 1345, 900 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6750,7 +7044,7 @@ button-over index: -1 button-right rotate: false - xy: 1167, 868 + xy: 2010, 1991 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6758,7 +7052,7 @@ button-right index: -1 button-right-down rotate: false - xy: 1167, 926 + xy: 1180, 496 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6766,7 +7060,7 @@ button-right-down index: -1 button-right-over rotate: false - xy: 1167, 897 + xy: 824, 1764 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6774,50 +7068,64 @@ button-right-over index: -1 button-select rotate: false - xy: 709, 313 + xy: 1462, 466 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 offset: 0, 0 index: -1 +check-disabled + rotate: false + xy: 1101, 449 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 check-off rotate: false - xy: 1654, 1240 + xy: 1135, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 1688, 1240 + xy: 1387, 866 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +check-on-disabled + rotate: false + xy: 1387, 832 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 1722, 1240 + xy: 1421, 866 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 1756, 1240 + xy: 1387, 798 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear rotate: false - xy: 1089, 646 + xy: 1, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 content-background rotate: false - xy: 1205, 860 + xy: 2010, 1933 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6825,7 +7133,7 @@ content-background index: -1 content-background-locked rotate: false - xy: 1205, 947 + xy: 1218, 496 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6833,7 +7141,7 @@ content-background-locked index: -1 content-background-noitems rotate: false - xy: 1205, 918 + xy: 2010, 1962 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6841,7 +7149,7 @@ content-background-noitems index: -1 content-background-over rotate: false - xy: 1205, 889 + xy: 1421, 900 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -6849,903 +7157,903 @@ content-background-over index: -1 cursor rotate: false - xy: 317, 1632 + xy: 317, 1633 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 discord-banner rotate: false - xy: 1297, 1431 + xy: 1, 13 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 empty-sector rotate: false - xy: 1379, 976 + xy: 923, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-crafting rotate: false - xy: 1896, 1272 + xy: 489, 1186 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 1994, 1254 + xy: 783, 1119 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-distribution rotate: false - xy: 2005, 1526 + xy: 849, 1081 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-effect rotate: false - xy: 634, 592 + xy: 759, 923 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 895, 476 + xy: 1696, 459 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-power rotate: false - xy: 949, 484 + xy: 759, 905 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-production rotate: false - xy: 967, 502 + xy: 605, 653 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-turret rotate: false - xy: 949, 448 + xy: 489, 1150 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-units rotate: false - xy: 985, 484 + xy: 1887, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-upgrade rotate: false - xy: 931, 422 + xy: 1696, 405 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 controller-cursor rotate: false - xy: 1287, 704 + xy: 661, 727 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-about rotate: false - xy: 1363, 994 + xy: 1509, 1545 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-add rotate: false - xy: 1233, 1658 + xy: 605, 37 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 1347, 1674 + xy: 2015, 1209 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 155, 1023 + xy: 751, 785 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 icon-areaDelete rotate: false - xy: 1515, 1464 + xy: 1977, 1417 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 1339, 704 + xy: 1377, 1511 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 1339, 704 + xy: 1377, 1511 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 1915, 1446 + xy: 2010, 1921 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 1055, 672 + xy: 2033, 1044 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 1293, 624 + xy: 13, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 1327, 608 + xy: 25, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-back rotate: false - xy: 1159, 748 + xy: 1261, 657 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 1527, 1526 + xy: 2033, 1088 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-break rotate: false - xy: 634, 1148 + xy: 1377, 1493 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 1893, 1511 + xy: 2031, 688 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel-2 rotate: false - xy: 850, 594 + xy: 1851, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icon-chat rotate: false - xy: 1915, 1434 + xy: 37, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-check rotate: false - xy: 207, 21 + xy: 2031, 670 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-check-2 rotate: false - xy: 876, 594 + xy: 1877, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icon-copy rotate: false - xy: 1896, 1290 + xy: 2031, 652 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 1915, 1422 + xy: 49, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-database rotate: false - xy: 163, 1148 + xy: 473, 12 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-database-small rotate: false - xy: 1055, 660 + xy: 61, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-dev-builds rotate: false - xy: 1380, 1160 + xy: 1261, 641 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-discord rotate: false - xy: 1994, 1238 + xy: 1345, 1079 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-donate rotate: false - xy: 1249, 1658 + xy: 605, 21 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 1363, 1674 + xy: 2031, 1209 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 1379, 1674 + xy: 2033, 1072 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 1527, 1510 + xy: 2033, 1056 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-elevation rotate: false - xy: 679, 40 + xy: 825, 883 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-eraser rotate: false - xy: 1032, 598 + xy: 587, 653 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 179, 1148 + xy: 873, 4 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-file rotate: false - xy: 949, 520 + xy: 1245, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 1317, 1366 + xy: 761, 535 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 1396, 1160 + xy: 2033, 976 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 967, 520 + xy: 1311, 1095 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 1265, 1658 + xy: 2033, 960 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 985, 520 + xy: 533, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 1281, 1658 + xy: 2033, 944 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 1911, 1513 + xy: 2033, 928 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-generated rotate: false - xy: 429, 35 + xy: 1569, 1329 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-github rotate: false - xy: 1481, 541 + xy: 2033, 912 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 902, 630 + xy: 1625, 887 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 1003, 520 + xy: 727, 709 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-hold rotate: false - xy: 204, 1384 + xy: 73, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 596, 1321 + xy: 1241, 1093 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 895, 406 + xy: 605, 5 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 911, 406 + xy: 1714, 409 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 927, 406 + xy: 1773, 437 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 894, 390 + xy: 2027, 1393 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-item rotate: false - xy: 568, 1948 + xy: 1981, 999 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 1229, 816 + xy: 744, 1887 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-line rotate: false - xy: 895, 494 + xy: 1379, 644 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-link rotate: false - xy: 894, 374 + xy: 2027, 1377 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-liquid-small rotate: false - xy: 568, 1776 + xy: 204, 1385 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-load rotate: false - xy: 910, 390 + xy: 2027, 1361 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 913, 494 + xy: 1799, 595 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 895, 458 + xy: 1825, 621 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 913, 476 + xy: 1851, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-locked rotate: false - xy: 931, 494 + xy: 1773, 543 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-logic rotate: false - xy: 1365, 778 + xy: 862, 1781 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-map rotate: false - xy: 910, 374 + xy: 2029, 896 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 652, 598 + xy: 302, 1333 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 949, 502 + xy: 546, 1889 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-missing rotate: false - xy: 315, 16 + xy: 290, 1209 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-background rotate: false - xy: 1297, 1364 + xy: 526, 1887 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 icon-mission-battle rotate: false - xy: 902, 618 + xy: 1977, 876 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-defense rotate: false - xy: 907, 282 + xy: 1377, 1481 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-done rotate: false - xy: 923, 298 + xy: 1397, 650 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-none rotate: false - xy: 891, 250 + xy: 797, 541 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-paste rotate: false - xy: 895, 440 + xy: 564, 1889 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 204, 1372 + xy: 489, 1138 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 913, 458 + xy: 489, 1168 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 926, 390 + xy: 771, 5 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 931, 476 + xy: 783, 1101 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-play rotate: false - xy: 596, 1309 + xy: 501, 1138 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 926, 374 + xy: 787, 5 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-play-custom rotate: false - xy: 894, 358 + xy: 803, 5 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 568, 1936 + xy: 1732, 431 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-power-requirement rotate: false - xy: 1481, 965 + xy: 991, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-power-small rotate: false - xy: 568, 1764 + xy: 1347, 1101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 910, 358 + xy: 1169, 441 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 895, 422 + xy: 1263, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 926, 358 + xy: 1185, 446 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 891, 342 + xy: 1201, 446 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 913, 440 + xy: 779, 535 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 891, 326 + xy: 1217, 446 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 907, 342 + xy: 1194, 430 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 891, 310 + xy: 1210, 430 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 907, 326 + xy: 1194, 414 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 923, 342 + xy: 1210, 414 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 931, 458 + xy: 1329, 1095 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 949, 466 + xy: 533, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 907, 270 + xy: 1233, 450 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-spray rotate: false - xy: 967, 484 + xy: 1696, 441 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 985, 502 + xy: 1799, 577 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 891, 294 + xy: 1191, 398 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 891, 238 + xy: 1191, 338 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 204, 1360 + xy: 1207, 354 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 907, 310 + xy: 1191, 382 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 913, 422 + xy: 1869, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tree rotate: false - xy: 931, 440 + xy: 1773, 525 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tree-locked rotate: false - xy: 1481, 931 + xy: 1025, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-trello rotate: false - xy: 923, 326 + xy: 1207, 398 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 891, 278 + xy: 1191, 366 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 967, 466 + xy: 1696, 423 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocked rotate: false - xy: 1003, 502 + xy: 1773, 507 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocks rotate: false - xy: 907, 294 + xy: 1207, 382 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 923, 310 + xy: 1191, 350 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-zone rotate: false - xy: 1640, 565 + xy: 1903, 925 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icon-zone-locked rotate: false - xy: 1117, 790 + xy: 489, 1 size: 42, 42 orig: 42, 42 offset: 0, 0 index: -1 icon-zoom rotate: false - xy: 949, 430 + xy: 1905, 647 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 891, 262 + xy: 1207, 366 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 info-banner rotate: false - xy: 1297, 1384 + xy: 204, 1200 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 inventory rotate: false - xy: 715, 556 + xy: 1955, 1037 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -7753,14 +8061,14 @@ inventory index: -1 logotext rotate: false - xy: 1, 1960 + xy: 1, 1961 size: 579, 86 orig: 579, 86 offset: 0, 0 index: -1 pane rotate: false - xy: 1582, 1279 + xy: 1459, 900 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -7768,7 +8076,7 @@ pane index: -1 pane-2 rotate: false - xy: 1506, 1241 + xy: 2011, 1104 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -7776,7 +8084,7 @@ pane-2 index: -1 scroll rotate: false - xy: 865, 297 + xy: 1592, 440 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -7784,7 +8092,7 @@ scroll index: -1 scroll-horizontal rotate: false - xy: 2012, 2022 + xy: 859, 428 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 @@ -7792,7 +8100,7 @@ scroll-horizontal index: -1 scroll-knob-horizontal-black rotate: false - xy: 526, 1762 + xy: 744, 1897 size: 40, 24 split: 11, 10, 10, 10 orig: 40, 24 @@ -7800,7 +8108,7 @@ scroll-knob-horizontal-black index: -1 scroll-knob-vertical-black rotate: false - xy: 839, 266 + xy: 1165, 373 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -7808,56 +8116,56 @@ scroll-knob-vertical-black index: -1 sector-select rotate: false - xy: 1237, 636 + xy: 1581, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 selection rotate: false - xy: 2046, 2019 + xy: 1992, 792 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 slider rotate: false - xy: 835, 64 + xy: 893, 415 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 1497, 551 + xy: 1727, 777 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 1528, 551 + xy: 1727, 737 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 1528, 551 + xy: 1727, 737 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-vertical rotate: false - xy: 155, 527 + xy: 1977, 873 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 underline rotate: false - xy: 1544, 1203 + xy: 1535, 900 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -7865,7 +8173,15 @@ underline index: -1 underline-2 rotate: false - xy: 1582, 1250 + xy: 1497, 900 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +underline-disabled + rotate: false + xy: 859, 454 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -7873,7 +8189,7 @@ underline-2 index: -1 underline-red rotate: false - xy: 1620, 1279 + xy: 821, 378 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -7881,14 +8197,14 @@ underline-red index: -1 white rotate: false - xy: 625, 1034 + xy: 1203, 1071 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window-empty rotate: false - xy: 709, 365 + xy: 2019, 1296 size: 27, 61 split: 8, 8, 44, 11 orig: 27, 61 @@ -7896,315 +8212,315 @@ window-empty index: -1 chaos-array rotate: false - xy: 712, 1918 + xy: 485, 1627 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 chaos-array-base rotate: false - xy: 842, 1918 + xy: 656, 1757 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 chaos-array-leg rotate: false - xy: 972, 1918 + xy: 615, 1627 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 crawler rotate: false - xy: 279, 328 + xy: 671, 114 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-base rotate: false - xy: 279, 278 + xy: 671, 64 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-leg rotate: false - xy: 279, 178 + xy: 721, 371 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger rotate: false - xy: 329, 435 + xy: 721, 121 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 379, 485 + xy: 721, 71 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 379, 435 + xy: 1427, 1379 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 eradicator rotate: false - xy: 1, 905 + xy: 744, 1923 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 eradicator-base rotate: false - xy: 1, 779 + xy: 898, 1923 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 eradicator-leg rotate: false - xy: 1, 653 + xy: 1052, 1923 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 eruptor rotate: false - xy: 875, 1298 + xy: 1137, 1401 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-base rotate: false - xy: 941, 1298 + xy: 1005, 1203 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-leg rotate: false - xy: 1007, 1298 + xy: 1071, 1269 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress rotate: false - xy: 1073, 1298 + xy: 1137, 1335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 1139, 1298 + xy: 1071, 1203 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-base rotate: false - xy: 1139, 1298 + xy: 1071, 1203 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 1205, 1298 + xy: 1137, 1269 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ghoul rotate: false - xy: 1395, 1616 + xy: 685, 867 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 lich rotate: false - xy: 1, 1396 + xy: 1, 1397 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 phantom rotate: false - xy: 576, 585 + xy: 1319, 1471 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 power-cell rotate: false - xy: 625, 976 + xy: 1261, 1413 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 reaper rotate: false - xy: 1, 1638 + xy: 1, 1639 size: 320, 320 orig: 320, 320 offset: 0, 0 index: -1 revenant rotate: false - xy: 1233, 1674 + xy: 1395, 1545 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 spirit rotate: false - xy: 767, 726 + xy: 1761, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan rotate: false - xy: 485, 907 + xy: 1791, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 419, 841 + xy: 1857, 1495 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith rotate: false - xy: 1017, 684 + xy: 1545, 929 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 artillery-equip rotate: false - xy: 1207, 976 + xy: 1261, 1143 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 229, 378 + xy: 621, 264 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bomber-equip rotate: false - xy: 229, 328 + xy: 621, 214 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 229, 328 + xy: 621, 214 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 chain-blaster-equip rotate: false - xy: 229, 178 + xy: 621, 64 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 chaos-equip rotate: false - xy: 1322, 1160 + xy: 1203, 1395 size: 56, 136 orig: 56, 136 offset: 0, 0 index: -1 eradication-equip rotate: false - xy: 131, 333 + xy: 317, 1206 size: 96, 192 orig: 96, 192 offset: 0, 0 index: -1 eruption-equip rotate: false - xy: 479, 277 + xy: 721, 13 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flakgun-equip rotate: false - xy: 529, 335 + xy: 752, 479 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 329, 77 + xy: 771, 421 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 heal-blaster-equip rotate: false - xy: 429, 85 + xy: 1279, 691 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lich-missiles-equip rotate: false - xy: 613, 535 + xy: 1619, 1279 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 reaper-gun-equip rotate: false - xy: 1815, 1308 + xy: 1361, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-missiles-equip rotate: false - xy: 1977, 1422 + xy: 1315, 1263 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 667, 776 + xy: 1511, 1129 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 867, 830 + xy: 1361, 1079 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -8222,13 +8538,6 @@ alloy-smelter-icon-editor orig: 96, 96 offset: 0, 0 index: -1 -alpha-dart-mech-pad-icon-editor - rotate: false - xy: 405, 106 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 arc-icon-editor rotate: false xy: 651, 590 @@ -8259,7 +8568,7 @@ blast-drill-icon-editor index: -1 blast-mixer-icon-editor rotate: false - xy: 471, 106 + xy: 405, 106 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8315,7 +8624,7 @@ cliffs-icon-editor index: -1 coal-centrifuge-icon-editor rotate: false - xy: 307, 8 + xy: 471, 106 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8336,7 +8645,7 @@ conduit-icon-editor index: -1 container-icon-editor rotate: false - xy: 745, 854 + xy: 307, 8 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8357,7 +8666,7 @@ copper-wall-icon-editor index: -1 copper-wall-large-icon-editor rotate: false - xy: 811, 854 + xy: 745, 854 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8399,7 +8708,7 @@ editor-craters1 index: -1 crawler-factory-icon-editor rotate: false - xy: 877, 854 + xy: 811, 854 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8413,14 +8722,14 @@ creeptree-icon-editor index: -1 cryofluidmixer-icon-editor rotate: false - xy: 943, 854 + xy: 877, 854 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-editor rotate: false - xy: 1009, 854 + xy: 943, 854 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8434,7 +8743,7 @@ cyclone-icon-editor index: -1 dagger-factory-icon-editor rotate: false - xy: 1075, 854 + xy: 1009, 854 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8572,6 +8881,13 @@ editor-darksand-water orig: 32, 32 offset: 0, 0 index: -1 +dart-mech-pad-icon-editor + rotate: false + xy: 1075, 854 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 deepwater-icon-editor rotate: false xy: 637, 352 @@ -8887,13 +9203,6 @@ editor-metal-floor orig: 32, 32 offset: 0, 0 index: -1 -editor-metal-floor-damaged5 - rotate: false - xy: 639, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 metal-floor-icon-editor rotate: false xy: 639, 80 @@ -8971,401 +9280,408 @@ editor-metal-floor-damaged3 orig: 32, 32 offset: 0, 0 index: -1 -editor-metal-floor-damaged4 +editor-moss1 rotate: false xy: 673, 114 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -editor-metal-floor-damaged6 - rotate: false - xy: 673, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss1 - rotate: false - xy: 673, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 moss-icon-editor rotate: false - xy: 673, 46 + xy: 673, 114 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss2 rotate: false - xy: 673, 12 + xy: 673, 80 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss3 rotate: false - xy: 705, 386 + xy: 673, 46 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal1 rotate: false - xy: 705, 352 + xy: 673, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal2 rotate: false - xy: 691, 318 + xy: 705, 386 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal3 rotate: false - xy: 691, 284 + xy: 705, 352 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper1 rotate: false - xy: 691, 250 + xy: 691, 318 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper2 rotate: false - xy: 691, 216 + xy: 691, 284 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper3 rotate: false - xy: 691, 182 + xy: 691, 250 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead1 rotate: false - xy: 707, 148 + xy: 691, 216 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead2 rotate: false - xy: 707, 114 + xy: 691, 182 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead3 rotate: false - xy: 707, 80 + xy: 707, 148 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap1 rotate: false - xy: 707, 46 + xy: 707, 114 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap2 rotate: false - xy: 707, 12 + xy: 707, 80 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap3 rotate: false - xy: 725, 318 + xy: 707, 46 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium1 rotate: false - xy: 725, 284 + xy: 707, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium2 rotate: false - xy: 725, 250 + xy: 725, 318 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium3 rotate: false - xy: 725, 216 + xy: 725, 284 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium1 rotate: false - xy: 725, 182 + xy: 725, 250 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium2 rotate: false - xy: 741, 148 + xy: 725, 216 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium3 rotate: false - xy: 741, 114 + xy: 725, 182 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles1 rotate: false - xy: 741, 80 + xy: 741, 148 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles2 rotate: false - xy: 741, 46 + xy: 741, 114 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles3 rotate: false - xy: 741, 12 + xy: 741, 80 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-salt rotate: false - xy: 733, 820 + xy: 741, 46 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-editor rotate: false - xy: 733, 820 + xy: 741, 46 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water rotate: false - xy: 869, 820 + xy: 801, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-editor rotate: false - xy: 869, 820 + xy: 801, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand1 rotate: false - xy: 767, 820 + xy: 741, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-editor rotate: false - xy: 767, 820 + xy: 741, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand2 rotate: false - xy: 801, 820 + xy: 733, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand3 rotate: false - xy: 835, 820 + xy: 767, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale1 rotate: false - xy: 903, 820 + xy: 835, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-editor rotate: false - xy: 903, 820 + xy: 835, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale2 rotate: false - xy: 937, 820 + xy: 869, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale3 rotate: false - xy: 971, 820 + xy: 903, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow1 rotate: false - xy: 1005, 820 + xy: 937, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-icon-editor rotate: false - xy: 1005, 820 + xy: 937, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow2 rotate: false - xy: 1039, 820 + xy: 971, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow3 rotate: false - xy: 1073, 820 + xy: 1005, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss1 rotate: false - xy: 1107, 820 + xy: 1039, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-editor rotate: false - xy: 1107, 820 + xy: 1039, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss2 rotate: false - xy: 1141, 820 + xy: 1073, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss3 rotate: false - xy: 1175, 820 + xy: 1107, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone1 rotate: false - xy: 1209, 820 + xy: 1141, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-editor rotate: false - xy: 1209, 820 + xy: 1141, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone2 rotate: false - xy: 1243, 820 + xy: 1175, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone3 rotate: false - xy: 1277, 820 + xy: 1209, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tainted-water rotate: false - xy: 1311, 820 + xy: 1243, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-editor rotate: false - xy: 1311, 820 + xy: 1243, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tar rotate: false - xy: 1345, 820 + xy: 1277, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-editor + rotate: false + xy: 1277, 820 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils1 + rotate: false + xy: 1311, 820 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils2 rotate: false xy: 1345, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +editor-tendrils3 + rotate: false + xy: 1379, 820 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 editor-water rotate: false - xy: 1379, 820 + xy: 1413, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-editor rotate: false - xy: 1379, 820 + xy: 1413, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9414,14 +9730,14 @@ graphite-press-icon-editor index: -1 hail-icon-editor rotate: false - xy: 1413, 820 + xy: 1447, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-icon-editor rotate: false - xy: 1447, 820 + xy: 1481, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9435,21 +9751,21 @@ impact-reactor-icon-editor index: -1 incinerator-icon-editor rotate: false - xy: 1481, 820 + xy: 1515, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-editor rotate: false - xy: 1515, 820 + xy: 1549, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-editor rotate: false - xy: 1549, 820 + xy: 1583, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9463,7 +9779,7 @@ javelin-ship-pad-icon-editor index: -1 junction-icon-editor rotate: false - xy: 1583, 820 + xy: 1617, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9505,21 +9821,21 @@ launch-pad-large-icon-editor index: -1 liquid-junction-icon-editor rotate: false - xy: 1617, 820 + xy: 1651, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-editor rotate: false - xy: 1651, 820 + xy: 1685, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-editor rotate: false - xy: 1685, 820 + xy: 1719, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9547,7 +9863,7 @@ mechanical-drill-icon-editor index: -1 mechanical-pump-icon-editor rotate: false - xy: 1719, 820 + xy: 1753, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9561,7 +9877,7 @@ meltdown-icon-editor index: -1 melter-icon-editor rotate: false - xy: 1753, 820 + xy: 1787, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9575,7 +9891,7 @@ mend-projector-icon-editor index: -1 mender-icon-editor rotate: false - xy: 1787, 820 + xy: 1821, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9610,14 +9926,14 @@ overdrive-projector-icon-editor index: -1 overflow-gate-icon-editor rotate: false - xy: 1821, 820 + xy: 1855, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles-icon-editor rotate: false - xy: 1855, 820 + xy: 1889, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9631,21 +9947,21 @@ phantom-factory-icon-editor index: -1 phase-conduit-icon-editor rotate: false - xy: 1889, 820 + xy: 1923, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-editor rotate: false - xy: 1923, 820 + xy: 1957, 820 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-editor rotate: false - xy: 1957, 820 + xy: 717, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9687,7 +10003,7 @@ pneumatic-drill-icon-editor index: -1 power-node-icon-editor rotate: false - xy: 717, 786 + xy: 717, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9701,28 +10017,28 @@ power-node-large-icon-editor index: -1 power-source-icon-editor rotate: false - xy: 717, 752 + xy: 751, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-editor rotate: false - xy: 751, 786 + xy: 717, 718 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-editor rotate: false - xy: 717, 718 + xy: 785, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-editor rotate: false - xy: 785, 786 + xy: 751, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9736,7 +10052,7 @@ pyratite-mixer-icon-editor index: -1 repair-point-icon-editor rotate: false - xy: 751, 752 + xy: 717, 684 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9764,7 +10080,7 @@ rock-icon-editor index: -1 rocks-icon-editor rotate: false - xy: 717, 684 + xy: 819, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9778,7 +10094,7 @@ rotary-pump-icon-editor index: -1 router-icon-editor rotate: false - xy: 819, 786 + xy: 785, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9792,7 +10108,7 @@ rtg-generator-icon-editor index: -1 saltrocks-icon-editor rotate: false - xy: 785, 752 + xy: 751, 718 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9806,7 +10122,7 @@ salvo-icon-editor index: -1 sandrocks-icon-editor rotate: false - xy: 751, 718 + xy: 717, 650 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9820,7 +10136,7 @@ scatter-icon-editor index: -1 scorch-icon-editor rotate: false - xy: 717, 650 + xy: 853, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9841,7 +10157,7 @@ scrap-wall-huge-icon-editor index: -1 scrap-wall-icon-editor rotate: false - xy: 853, 786 + xy: 819, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9862,28 +10178,28 @@ separator-icon-editor index: -1 shale-boulder-icon-editor rotate: false - xy: 819, 752 + xy: 785, 718 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-editor rotate: false - xy: 785, 718 + xy: 751, 684 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-editor rotate: false - xy: 751, 684 + xy: 887, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-editor rotate: false - xy: 887, 786 + xy: 853, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9904,14 +10220,14 @@ snowrock-icon-editor index: -1 snowrocks-icon-editor rotate: false - xy: 853, 752 + xy: 819, 718 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-editor rotate: false - xy: 819, 718 + xy: 785, 684 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9925,14 +10241,14 @@ solar-panel-large-icon-editor index: -1 sorter-icon-editor rotate: false - xy: 785, 684 + xy: 751, 650 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-editor rotate: false - xy: 751, 650 + xy: 921, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9974,7 +10290,7 @@ spore-press-icon-editor index: -1 sporerocks-icon-editor rotate: false - xy: 921, 786 + xy: 887, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9988,7 +10304,7 @@ surge-tower-icon-editor index: -1 surge-wall-icon-editor rotate: false - xy: 887, 752 + xy: 853, 718 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -10014,6 +10330,13 @@ tau-mech-pad-icon-editor orig: 64, 64 offset: 0, 0 index: -1 +tendrils-icon-editor + rotate: false + xy: 819, 684 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thermal-generator-icon-editor rotate: false xy: 519, 492 @@ -10037,7 +10360,7 @@ thorium-reactor-icon-editor index: -1 thorium-wall-icon-editor rotate: false - xy: 853, 718 + xy: 785, 650 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -10065,14 +10388,14 @@ titan-factory-icon-editor index: -1 titanium-conveyor-icon-editor rotate: false - xy: 819, 684 + xy: 955, 786 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-editor rotate: false - xy: 785, 650 + xy: 921, 752 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -10100,7 +10423,7 @@ turbine-generator-icon-editor index: -1 unloader-icon-editor rotate: false - xy: 955, 786 + xy: 887, 718 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -10155,1351 +10478,1351 @@ filter: Nearest,Nearest repeat: none char1 rotate: false - xy: 2015, 973 + xy: 2015, 989 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char2 rotate: false - xy: 2015, 939 + xy: 2015, 955 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char3 rotate: false - xy: 1773, 449 + xy: 911, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs1 rotate: false - xy: 1839, 821 + xy: 1773, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal1 rotate: false - xy: 515, 385 + xy: 1839, 837 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal2 rotate: false - xy: 1925, 907 + xy: 1925, 923 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal3 rotate: false - xy: 1839, 787 + xy: 945, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper1 rotate: false - xy: 549, 385 + xy: 1773, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper2 rotate: false - xy: 1959, 907 + xy: 1839, 803 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper3 rotate: false - xy: 1839, 753 + xy: 1959, 923 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters1 rotate: false - xy: 583, 385 + xy: 979, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters2 rotate: false - xy: 1839, 719 + xy: 1773, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters3 rotate: false - xy: 617, 385 + xy: 1013, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters4 rotate: false - xy: 1839, 685 + xy: 1773, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters5 rotate: false - xy: 651, 385 + xy: 1047, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters6 rotate: false - xy: 1839, 651 + xy: 1773, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 creeptree rotate: false - xy: 1773, 897 + xy: 1773, 913 size: 108, 108 orig: 108, 108 offset: 0, 0 index: -1 dark-metal-large rotate: false - xy: 1, 3 + xy: 1, 19 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dark-metal1 rotate: false - xy: 685, 385 + xy: 1081, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal2 rotate: false - xy: 719, 385 + xy: 1115, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1 rotate: false - xy: 753, 385 + xy: 1149, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-edge rotate: false - xy: 323, 909 + xy: 323, 925 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 dark-panel-2 rotate: false - xy: 787, 385 + xy: 1183, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-edge rotate: false - xy: 1, 265 + xy: 1, 281 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 dark-panel-3 rotate: false - xy: 821, 385 + xy: 1217, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-edge rotate: false - xy: 323, 811 + xy: 323, 827 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 dark-panel-4 rotate: false - xy: 855, 385 + xy: 1251, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-edge rotate: false - xy: 613, 909 + xy: 613, 925 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 dark-panel-5 rotate: false - xy: 889, 385 + xy: 1285, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-edge rotate: false - xy: 1, 167 + xy: 1, 183 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 dark-panel-6 rotate: false - xy: 923, 385 + xy: 1319, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-edge rotate: false - xy: 323, 713 + xy: 323, 729 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 darksand-edge rotate: false - xy: 613, 811 + xy: 613, 827 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 darksand-tainted-water rotate: false - xy: 1059, 385 + xy: 1455, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-edge rotate: false - xy: 903, 909 + xy: 903, 925 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 darksand-water rotate: false - xy: 1093, 385 + xy: 1489, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-edge rotate: false - xy: 1, 69 + xy: 1, 85 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 darksand1 rotate: false - xy: 957, 385 + xy: 1353, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand2 rotate: false - xy: 991, 385 + xy: 1387, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand3 rotate: false - xy: 1025, 385 + xy: 1421, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater rotate: false - xy: 1127, 385 + xy: 1523, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-edge rotate: false - xy: 323, 615 + xy: 323, 631 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 dunerocks-large rotate: false - xy: 1773, 831 + xy: 613, 369 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dunerocks1 rotate: false - xy: 1161, 385 + xy: 1557, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dunerocks2 rotate: false - xy: 1195, 385 + xy: 1591, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -edge-stencil-blocky +edge-stencil rotate: false - xy: 613, 713 - size: 288, 96 - orig: 288, 96 - offset: 0, 0 - index: -1 -edge-stencil-smooth - rotate: false - xy: 613, 713 + xy: 613, 729 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 grass-edge rotate: false - xy: 903, 811 + xy: 903, 827 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 grass1 rotate: false - xy: 1229, 385 + xy: 1625, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass2 rotate: false - xy: 1263, 385 + xy: 1659, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass3 rotate: false - xy: 1297, 385 + xy: 1693, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone-edge rotate: false - xy: 1193, 909 + xy: 1193, 925 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 holostone1 rotate: false - xy: 1331, 385 + xy: 1727, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone2 rotate: false - xy: 1365, 385 + xy: 613, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone3 rotate: false - xy: 1399, 385 + xy: 647, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock1 rotate: false - xy: 1433, 385 + xy: 681, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock2 rotate: false - xy: 1467, 385 + xy: 715, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock3 rotate: false - xy: 1501, 385 + xy: 749, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-edge rotate: false - xy: 323, 517 + xy: 323, 533 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 ice-snow-edge rotate: false - xy: 613, 615 + xy: 613, 631 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 ice-snow1 rotate: false - xy: 1637, 385 + xy: 817, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow2 rotate: false - xy: 1671, 385 + xy: 851, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow3 rotate: false - xy: 1705, 385 + xy: 885, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice1 rotate: false - xy: 1535, 385 + xy: 783, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice2 rotate: false - xy: 1569, 385 + xy: 1773, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice3 rotate: false - xy: 1603, 385 + xy: 1839, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-large rotate: false - xy: 1883, 941 + xy: 1773, 847 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 icerocks1 rotate: false - xy: 1739, 385 + xy: 1823, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks2 rotate: false - xy: 1773, 415 + xy: 1823, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock-edge rotate: false - xy: 903, 713 + xy: 903, 729 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 ignarock1 rotate: false - xy: 291, 329 + xy: 1823, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock2 rotate: false - xy: 291, 295 + xy: 1823, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock3 rotate: false - xy: 291, 261 + xy: 919, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lead1 rotate: false - xy: 291, 227 + xy: 953, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lead2 rotate: false - xy: 291, 193 + xy: 987, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lead3 rotate: false - xy: 291, 159 + xy: 1021, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock1 rotate: false - xy: 291, 125 + xy: 1055, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock2 rotate: false - xy: 291, 91 + xy: 1089, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock3 rotate: false - xy: 1773, 381 + xy: 1123, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor rotate: false - xy: 325, 335 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged5 - rotate: false - xy: 325, 335 + xy: 1157, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2 rotate: false - xy: 325, 301 + xy: 1191, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2-edge rotate: false - xy: 1193, 811 + xy: 1193, 827 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 metal-floor-3 rotate: false - xy: 359, 335 + xy: 1225, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-edge rotate: false - xy: 1483, 909 + xy: 1483, 925 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 metal-floor-5 rotate: false - xy: 325, 267 + xy: 1259, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-edge rotate: false - xy: 323, 419 + xy: 323, 435 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 metal-floor-damaged-edge rotate: false - xy: 613, 517 + xy: 613, 533 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 metal-floor-damaged1 rotate: false - xy: 359, 301 + xy: 1293, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged2 rotate: false - xy: 393, 335 + xy: 1327, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged3 rotate: false - xy: 325, 233 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged4 - rotate: false - xy: 359, 267 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged6 - rotate: false - xy: 393, 301 + xy: 1361, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-edge rotate: false - xy: 903, 615 + xy: 903, 631 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 moss-edge rotate: false - xy: 1193, 713 + xy: 1193, 729 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 moss1 rotate: false - xy: 427, 335 + xy: 1395, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss2 rotate: false - xy: 325, 199 + xy: 1429, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss3 rotate: false - xy: 359, 233 + xy: 1463, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal1 rotate: false - xy: 393, 267 + xy: 1497, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal2 rotate: false - xy: 427, 301 + xy: 1531, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal3 rotate: false - xy: 325, 165 + xy: 1565, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper1 rotate: false - xy: 359, 199 + xy: 1599, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper2 rotate: false - xy: 393, 233 + xy: 1633, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper3 rotate: false - xy: 427, 267 + xy: 1667, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead1 rotate: false - xy: 325, 131 + xy: 1701, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead2 rotate: false - xy: 359, 165 + xy: 1735, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead3 rotate: false - xy: 393, 199 + xy: 199, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap1 rotate: false - xy: 427, 233 + xy: 1807, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap2 rotate: false - xy: 325, 97 + xy: 1807, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap3 rotate: false - xy: 359, 131 + xy: 1807, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium1 rotate: false - xy: 393, 165 + xy: 1807, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium2 rotate: false - xy: 427, 199 + xy: 1807, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium3 rotate: false - xy: 359, 97 + xy: 1807, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium1 rotate: false - xy: 393, 131 + xy: 817, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium2 rotate: false - xy: 427, 165 + xy: 851, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium3 rotate: false - xy: 393, 97 + xy: 885, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles-edge rotate: false - xy: 1483, 811 + xy: 1483, 827 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 pebbles1 rotate: false - xy: 427, 131 + xy: 919, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles2 rotate: false - xy: 427, 97 + xy: 953, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles3 rotate: false - xy: 265, 35 + xy: 987, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine rotate: false - xy: 323, 369 + xy: 1773, 731 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock1 rotate: false - xy: 1773, 583 + xy: 199, 35 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock2 rotate: false - xy: 373, 369 + xy: 811, 385 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-large rotate: false - xy: 67, 3 + xy: 1883, 957 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rocks1 rotate: false - xy: 265, 1 + xy: 1021, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rocks2 rotate: false - xy: 1839, 617 + xy: 1055, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt rotate: false - xy: 1823, 583 + xy: 1089, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-edge rotate: false - xy: 613, 419 + xy: 613, 435 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 saltrocks-large rotate: false - xy: 1773, 765 + xy: 67, 19 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 saltrocks1 rotate: false - xy: 1823, 549 + xy: 1123, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks2 rotate: false - xy: 1823, 515 + xy: 1157, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-edge rotate: false - xy: 903, 517 + xy: 903, 533 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 sand-water rotate: false - xy: 1807, 379 + xy: 1293, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-edge rotate: false - xy: 1193, 615 + xy: 1193, 631 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 sand1 rotate: false - xy: 1823, 481 + xy: 1191, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand2 rotate: false - xy: 1807, 447 + xy: 1225, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand3 rotate: false - xy: 1807, 413 + xy: 1259, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-large rotate: false - xy: 1949, 941 + xy: 679, 369 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sandrocks1 rotate: false - xy: 1857, 583 + xy: 1327, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks2 rotate: false - xy: 1857, 549 + xy: 1361, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap1 rotate: false - xy: 1857, 515 + xy: 1395, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap2 rotate: false - xy: 1857, 481 + xy: 1429, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap3 rotate: false - xy: 1841, 447 + xy: 1463, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder1 rotate: false - xy: 1875, 413 + xy: 1599, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder2 rotate: false - xy: 1875, 379 + xy: 1633, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-edge rotate: false - xy: 1483, 713 + xy: 1483, 729 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 shale1 rotate: false - xy: 1841, 413 + xy: 1497, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale2 rotate: false - xy: 1841, 379 + xy: 1531, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale3 rotate: false - xy: 1875, 447 + xy: 1565, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-large rotate: false - xy: 133, 3 + xy: 1773, 781 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shalerocks1 rotate: false - xy: 461, 335 + xy: 1667, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks2 rotate: false - xy: 461, 301 + xy: 1701, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-large rotate: false - xy: 1773, 699 + xy: 1949, 957 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shrubs1 rotate: false - xy: 461, 267 + xy: 1735, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs2 rotate: false - xy: 461, 233 + xy: 1857, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-edge rotate: false - xy: 903, 419 + xy: 903, 435 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 snow1 rotate: false - xy: 461, 199 + xy: 1857, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow2 rotate: false - xy: 461, 165 + xy: 1857, 667 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow3 rotate: false - xy: 461, 131 + xy: 1857, 633 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock1 rotate: false - xy: 1773, 533 + xy: 1773, 681 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock2 rotate: false - xy: 423, 369 + xy: 861, 385 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-large rotate: false - xy: 199, 3 + xy: 133, 19 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 snowrocks1 rotate: false - xy: 461, 97 + xy: 1841, 599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrocks2 rotate: false - xy: 495, 343 + xy: 1841, 565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-cluster1 rotate: false - xy: 1839, 855 + xy: 1839, 871 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster2 rotate: false - xy: 1883, 899 + xy: 1883, 915 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster3 rotate: false - xy: 473, 377 + xy: 249, 43 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-moss-edge rotate: false - xy: 1193, 517 + xy: 1193, 533 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 spore-moss1 rotate: false - xy: 495, 309 + xy: 1841, 531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss2 rotate: false - xy: 495, 275 + xy: 1841, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss3 rotate: false - xy: 495, 241 + xy: 1841, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine rotate: false - xy: 1773, 483 + xy: 1773, 631 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sporerocks-large rotate: false - xy: 1773, 633 + xy: 745, 369 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sporerocks1 rotate: false - xy: 495, 207 + xy: 1841, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sporerocks2 rotate: false - xy: 495, 173 + xy: 233, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-edge rotate: false - xy: 1483, 615 + xy: 1483, 631 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 stone1 rotate: false - xy: 495, 139 + xy: 919, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone2 rotate: false - xy: 495, 105 + xy: 953, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone3 rotate: false - xy: 529, 351 + xy: 987, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water rotate: false - xy: 563, 351 + xy: 1021, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-edge rotate: false - xy: 1193, 419 + xy: 1193, 435 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 tar rotate: false - xy: 529, 317 + xy: 1055, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-edge rotate: false - xy: 1483, 517 + xy: 1483, 533 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 +tendrils-edge + rotate: false + xy: 1483, 435 + size: 288, 96 + orig: 288, 96 + offset: 0, 0 + index: -1 +tendrils1 + rotate: false + xy: 1089, 299 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tendrils2 + rotate: false + xy: 1123, 299 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tendrils3 + rotate: false + xy: 1157, 299 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thorium1 rotate: false - xy: 597, 351 + xy: 1191, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 529, 283 + xy: 1225, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 563, 317 + xy: 1259, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 631, 351 + xy: 1293, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 529, 249 + xy: 1327, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 563, 283 + xy: 1361, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water rotate: false - xy: 597, 317 + xy: 1395, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-edge rotate: false - xy: 1483, 419 + xy: 323, 337 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 white-tree rotate: false - xy: 1, 685 + xy: 1, 701 size: 320, 320 orig: 320, 320 offset: 0, 0 index: -1 white-tree-dead rotate: false - xy: 1, 363 + xy: 1, 379 size: 320, 320 orig: 320, 320 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 721c3c3bd6..6078b33501 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 fac0c80af8..4347823d19 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 2ba5820cfe..843b93d182 100644 Binary files a/core/assets/sprites/sprites3.png and b/core/assets/sprites/sprites3.png differ diff --git a/core/assets/sprites/sprites_fallback.atlas b/core/assets/sprites/sprites_fallback.atlas index 7628664ece..21aef85f7c 100644 --- a/core/assets/sprites/sprites_fallback.atlas +++ b/core/assets/sprites/sprites_fallback.atlas @@ -6,67 +6,25 @@ filter: Nearest,Nearest repeat: none blast-drill rotate: false - xy: 799, 845 + xy: 850, 269 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 775, 585 + xy: 219, 29 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rotator - rotate: false - xy: 219, 29 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -blast-drill-top rotate: false xy: 349, 29 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -impact-reactor - rotate: false - xy: 818, 325 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -impact-reactor-bottom - rotate: false - xy: 680, 195 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -impact-reactor-light - rotate: false - xy: 869, 65 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -core-foundation - rotate: false - xy: 688, 325 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -core-foundation-icon-editor - rotate: false - xy: 688, 325 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 core-nucleus rotate: false xy: 526, 403 @@ -81,23 +39,9 @@ core-nucleus-icon-editor orig: 160, 160 offset: 0, 0 index: -1 -block-4 - rotate: false - xy: 479, 21 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 blast-drill-icon-editor rotate: false - xy: 645, 593 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -impact-reactor-icon-editor - rotate: false - xy: 810, 195 + xy: 842, 139 size: 128, 128 orig: 128, 128 offset: 0, 0 @@ -125,21 +69,70 @@ circle-shadow index: -1 blast-drill-icon-full rotate: false - xy: 799, 715 + xy: 842, 9 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -impact-reactor-icon-full +cracks-5-0 rotate: false - xy: 739, 65 - size: 128, 128 - orig: 128, 128 + xy: 526, 241 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-1 + rotate: false + xy: 526, 79 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-2 + rotate: false + xy: 645, 813 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-3 + rotate: false + xy: 645, 651 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-4 + rotate: false + xy: 807, 813 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-5 + rotate: false + xy: 807, 651 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-6 + rotate: false + xy: 688, 489 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +cracks-5-7 + rotate: false + xy: 688, 327 + size: 160, 160 + orig: 160, 160 offset: 0, 0 index: -1 unit-icon-eradicator rotate: false - xy: 645, 723 + xy: 850, 399 size: 152, 124 orig: 152, 124 offset: 0, 0 @@ -158,44 +151,23 @@ logotext orig: 579, 86 offset: 0, 0 index: -1 -chaos-array - rotate: false - xy: 609, 21 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -chaos-array-base - rotate: false - xy: 688, 455 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -chaos-array-leg - rotate: false - xy: 818, 455 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 eradicator rotate: false - xy: 526, 277 + xy: 688, 201 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 eradicator-base rotate: false - xy: 526, 151 + xy: 688, 75 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 eradicator-leg rotate: false - xy: 645, 849 + xy: 850, 525 size: 152, 124 orig: 152, 124 offset: 0, 0 @@ -222,714 +194,567 @@ filter: Nearest,Nearest repeat: none force-projector rotate: false - xy: 229, 425 + xy: 815, 241 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 force-projector-icon-editor rotate: false - xy: 229, 425 + xy: 815, 241 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 force-projector-top rotate: false - xy: 327, 425 + xy: 913, 241 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -mass-driver-base +blast-drill-top rotate: false - xy: 99, 133 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -laser-drill - rotate: false - xy: 817, 297 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -laser-drill-rim - rotate: false - xy: 99, 231 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -laser-drill-rotator - rotate: false - xy: 197, 229 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -laser-drill-top - rotate: false - xy: 295, 229 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -oil-extractor - rotate: false - xy: 491, 131 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -oil-extractor-liquid - rotate: false - xy: 785, 101 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -oil-extractor-rotator - rotate: false - xy: 883, 101 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -oil-extractor-top - rotate: false - xy: 1, 99 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -place-arrow - rotate: false - xy: 197, 33 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -rubble-3-0 - rotate: false - xy: 687, 33 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -rubble-3-1 - rotate: false - xy: 687, 33 - size: 96, 96 - orig: 96, 96 + xy: 1, 895 + size: 128, 128 + orig: 128, 128 offset: 0, 0 index: -1 rubble-4-0 rotate: false - xy: 131, 621 + xy: 391, 375 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 rubble-4-1 rotate: false - xy: 131, 621 + xy: 391, 375 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -liquid-tank-bottom - rotate: false - xy: 491, 229 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -liquid-tank-liquid - rotate: false - xy: 785, 199 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -liquid-tank-top - rotate: false - xy: 883, 199 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -glaive-ship-pad - rotate: false - xy: 621, 327 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -omega-mech-pad - rotate: false - xy: 99, 35 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -omega-mech-pad-icon-editor - rotate: false - xy: 99, 35 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 battery-large rotate: false - xy: 131, 523 + xy: 421, 17 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 battery-large-icon-editor rotate: false - xy: 131, 523 + xy: 421, 17 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator rotate: false - xy: 817, 493 + xy: 715, 81 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-icon-editor rotate: false - xy: 817, 493 + xy: 715, 81 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-top rotate: false - xy: 915, 493 + xy: 847, 339 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +impact-reactor + rotate: false + xy: 131, 635 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +impact-reactor-bottom + rotate: false + xy: 131, 505 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +impact-reactor-light + rotate: false + xy: 131, 115 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 impact-reactor-plasma-0 rotate: false - xy: 1, 881 + xy: 261, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-1 rotate: false - xy: 131, 881 + xy: 391, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-2 rotate: false - xy: 261, 881 + xy: 521, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-3 rotate: false - xy: 391, 881 + xy: 651, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-top rotate: false - xy: 521, 881 + xy: 781, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 alloy-smelter rotate: false - xy: 911, 689 + xy: 225, 17 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-icon-editor rotate: false - xy: 911, 689 + xy: 225, 17 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-top rotate: false - xy: 911, 591 + xy: 323, 17 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -multi-press +core-foundation rotate: false - xy: 393, 131 - size: 96, 96 - orig: 96, 96 + xy: 1, 245 + size: 128, 128 + orig: 128, 128 offset: 0, 0 index: -1 -multi-press-icon-editor +core-foundation-icon-editor rotate: false - xy: 393, 131 - size: 96, 96 - orig: 96, 96 + xy: 1, 245 + size: 128, 128 + orig: 128, 128 offset: 0, 0 index: -1 core-shard rotate: false - xy: 327, 523 + xy: 911, 927 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-icon-editor rotate: false - xy: 327, 523 + xy: 911, 927 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-top rotate: false - xy: 425, 523 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -launch-pad - rotate: false - xy: 393, 229 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -launch-pad-icon-editor - rotate: false - xy: 393, 229 + xy: 911, 829 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large rotate: false - xy: 651, 881 + xy: 261, 635 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 launch-pad-large-icon-editor rotate: false - xy: 651, 881 + xy: 261, 635 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-3 rotate: false - xy: 229, 523 + xy: 519, 17 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -meltdown-heat +block-4 rotate: false - xy: 1, 751 + xy: 1, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -ripple-heat +meltdown-heat rotate: false - xy: 393, 33 - size: 96, 96 - orig: 96, 96 + xy: 261, 375 + size: 128, 128 + orig: 128, 128 offset: 0, 0 index: -1 fortress-factory rotate: false - xy: 425, 425 + xy: 815, 143 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fortress-factory-top rotate: false - xy: 719, 425 + xy: 911, 45 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ghoul-factory-top rotate: false - xy: 719, 425 + xy: 911, 45 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 titan-factory-top rotate: false - xy: 719, 425 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -fortress-factory-top-open - rotate: false - xy: 817, 395 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -ghoul-factory-top-open - rotate: false - xy: 817, 395 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -titan-factory-top-open - rotate: false - xy: 817, 395 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -ghoul-factory - rotate: false - xy: 327, 327 + xy: 911, 45 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 revenant-factory rotate: false - xy: 391, 751 + xy: 391, 635 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 revenant-factory-top rotate: false - xy: 781, 751 + xy: 781, 635 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 revenant-factory-top-open rotate: false - xy: 1, 621 + xy: 391, 505 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-gigantic rotate: false - xy: 261, 621 + xy: 391, 245 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-editor rotate: false - xy: 261, 621 + xy: 391, 245 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -scrap-wall-huge1 - rotate: false - xy: 785, 3 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -scrap-wall-huge-icon-editor - rotate: false - xy: 785, 3 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -scrap-wall-huge2 - rotate: false - xy: 883, 3 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -scrap-wall-huge3 - rotate: false - xy: 1, 1 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 thruster rotate: false - xy: 781, 621 + xy: 781, 505 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 thruster-icon-editor rotate: false - xy: 781, 621 + xy: 781, 505 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 creeptree-icon-editor rotate: false - xy: 911, 787 + xy: 115, 5 size: 108, 108 orig: 108, 108 offset: 0, 0 index: -1 cyclone-icon-editor rotate: false - xy: 621, 523 + xy: 651, 407 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fortress-factory-icon-editor rotate: false - xy: 523, 425 + xy: 913, 143 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -fuse-icon-editor +impact-reactor-icon-editor rotate: false - xy: 1, 393 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -ghoul-factory-icon-editor - rotate: false - xy: 425, 327 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -glaive-ship-pad-icon-editor - rotate: false - xy: 719, 327 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -laser-drill-icon-editor - rotate: false - xy: 915, 297 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -liquid-tank-icon-editor - rotate: false - xy: 589, 229 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -mass-driver-icon-editor - rotate: false - xy: 197, 131 - size: 96, 96 - orig: 96, 96 + xy: 131, 375 + size: 128, 128 + orig: 128, 128 offset: 0, 0 index: -1 meltdown-icon-editor rotate: false - xy: 131, 751 + xy: 261, 245 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -oil-extractor-icon-editor - rotate: false - xy: 589, 131 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 revenant-factory-icon-editor rotate: false - xy: 521, 751 + xy: 521, 635 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -ripple-icon-editor +spectre-icon-editor rotate: false - xy: 491, 33 + xy: 521, 505 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-3-0 + rotate: false + xy: 911, 731 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -spectre-icon-editor +cracks-3-1 rotate: false - xy: 521, 621 + xy: 911, 633 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-2 + rotate: false + xy: 911, 535 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-3 + rotate: false + xy: 911, 437 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-4 + rotate: false + xy: 521, 277 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-5 + rotate: false + xy: 521, 179 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-6 + rotate: false + xy: 617, 81 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-3-7 + rotate: false + xy: 619, 277 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cracks-4-0 + rotate: false + xy: 1, 115 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-1 + rotate: false + xy: 131, 895 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-2 + rotate: false + xy: 261, 895 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-3 + rotate: false + xy: 391, 895 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-4 + rotate: false + xy: 521, 895 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-5 + rotate: false + xy: 651, 895 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-6 + rotate: false + xy: 781, 895 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +cracks-4-7 + rotate: false + xy: 131, 765 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cyclone rotate: false - xy: 523, 523 + xy: 619, 179 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cyclone-icon-full rotate: false - xy: 719, 523 + xy: 749, 407 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fortress-factory-icon-full rotate: false - xy: 621, 425 + xy: 813, 45 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -fuse +impact-reactor-icon-full rotate: false - xy: 915, 395 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -fuse-icon-full - rotate: false - xy: 229, 327 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -ghoul-factory-icon-full - rotate: false - xy: 523, 327 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -laser-drill-icon-full - rotate: false - xy: 1, 295 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -liquid-tank-icon-full - rotate: false - xy: 687, 229 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -mass-driver - rotate: false - xy: 1, 197 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -mass-driver-icon-full - rotate: false - xy: 295, 131 - size: 96, 96 - orig: 96, 96 + xy: 131, 245 + size: 128, 128 + orig: 128, 128 offset: 0, 0 index: -1 meltdown rotate: false - xy: 781, 881 + xy: 261, 505 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 meltdown-icon-full rotate: false - xy: 261, 751 + xy: 261, 115 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -oil-extractor-icon-full - rotate: false - xy: 687, 131 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 revenant-factory-icon-full rotate: false - xy: 651, 751 + xy: 651, 635 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -ripple - rotate: false - xy: 295, 33 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -ripple-icon-full - rotate: false - xy: 589, 33 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 spectre rotate: false - xy: 391, 621 + xy: 391, 115 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spectre-icon-full rotate: false - xy: 651, 621 + xy: 651, 505 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 unit-icon-chaos-array rotate: false - xy: 1, 491 + xy: 521, 375 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +chaos-array + rotate: false + xy: 1, 635 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +chaos-array-base + rotate: false + xy: 1, 505 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +chaos-array-leg + rotate: false + xy: 1, 375 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 revenant rotate: false - xy: 911, 897 + xy: 1, 1 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 eradication-equip rotate: false - xy: 131, 329 + xy: 717, 213 size: 96, 192 orig: 96, 192 offset: 0, 0 @@ -942,7554 +767,4290 @@ filter: Nearest,Nearest repeat: none mend-projector rotate: false - xy: 199, 655 + xy: 559, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-icon-editor rotate: false - xy: 199, 655 + xy: 559, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 265, 655 + xy: 493, 191 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 397, 655 + xy: 427, 144 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-icon-editor rotate: false - xy: 397, 655 + xy: 427, 144 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 1, 616 + xy: 559, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 distributor rotate: false - xy: 529, 729 + xy: 559, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 distributor-icon-editor rotate: false - xy: 529, 729 + xy: 559, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +mass-driver-base + rotate: false + xy: 99, 531 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +laser-drill + rotate: false + xy: 1, 41 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +laser-drill-rim + rotate: false + xy: 295, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +laser-drill-rotator + rotate: false + xy: 393, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +laser-drill-top + rotate: false + xy: 491, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 mechanical-drill rotate: false - xy: 727, 663 + xy: 361, 210 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 925, 663 + xy: 295, 93 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 133, 655 + xy: 295, 27 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +oil-extractor + rotate: false + xy: 99, 139 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +oil-extractor-liquid + rotate: false + xy: 295, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +oil-extractor-rotator + rotate: false + xy: 393, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +oil-extractor-top + rotate: false + xy: 491, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 pneumatic-drill rotate: false - xy: 331, 589 + xy: 625, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 67, 550 + xy: 757, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 463, 531 + xy: 823, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -water-extractor +place-arrow rotate: false - xy: 1, 286 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -water-extractor-liquid - rotate: false - xy: 529, 267 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -water-extractor-rotator - rotate: false - xy: 595, 267 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -water-extractor-top - rotate: false - xy: 661, 267 - size: 64, 64 - orig: 64, 64 + xy: 687, 825 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 925, 531 + xy: 691, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 133, 523 + xy: 757, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 199, 523 + xy: 823, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 265, 523 + xy: 889, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +rubble-3-0 + rotate: false + xy: 197, 531 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +rubble-3-1 + rotate: false + xy: 197, 531 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +liquid-tank-bottom + rotate: false + xy: 687, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +liquid-tank-liquid + rotate: false + xy: 99, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +liquid-tank-top + rotate: false + xy: 99, 727 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 rotary-pump rotate: false - xy: 727, 531 + xy: 691, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 99, 927 + xy: 197, 41 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -alpha-dart-mech-pad +dart-mech-pad rotate: false - xy: 469, 861 + xy: 831, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -alpha-dart-mech-pad-icon-editor +dart-mech-pad-icon-editor rotate: false - xy: 469, 861 + xy: 831, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 delta-mech-pad rotate: false - xy: 463, 729 + xy: 897, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 delta-mech-pad-icon-editor rotate: false - xy: 463, 729 + xy: 897, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +glaive-ship-pad + rotate: false + xy: 1, 237 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 javelin-ship-pad rotate: false - xy: 331, 721 + xy: 955, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -tau-mech-pad +omega-mech-pad rotate: false - xy: 463, 333 - size: 64, 64 - orig: 64, 64 + xy: 589, 825 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 -tau-mech-pad-icon-editor +omega-mech-pad-icon-editor rotate: false - xy: 463, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -trident-ship-pad - rotate: false - xy: 859, 333 - size: 64, 64 - orig: 64, 64 + xy: 589, 825 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 529, 531 + xy: 889, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 859, 531 + xy: 691, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-icon-editor rotate: false - xy: 859, 531 + xy: 691, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 1, 927 + xy: 197, 139 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 solar-panel-large-icon-editor rotate: false - xy: 1, 927 + xy: 197, 139 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -surge-tower - rotate: false - xy: 265, 391 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -surge-tower-icon-editor - rotate: false - xy: 265, 391 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -thermal-generator - rotate: false - xy: 529, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -thermal-generator-icon-editor - rotate: false - xy: 529, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 thorium-reactor rotate: false - xy: 295, 927 + xy: 393, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-icon-editor rotate: false - xy: 295, 927 + xy: 393, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-center rotate: false - xy: 393, 927 + xy: 491, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-lights rotate: false - xy: 491, 927 + xy: 589, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -turbine-generator - rotate: false - xy: 133, 325 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -turbine-generator-icon-editor - rotate: false - xy: 133, 325 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -turbine-generator-top - rotate: false - xy: 199, 325 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 blast-mixer rotate: false - xy: 535, 861 + xy: 639, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 blast-mixer-icon-editor rotate: false - xy: 535, 861 + xy: 639, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 coal-centrifuge rotate: false - xy: 667, 861 + xy: 771, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 coal-centrifuge-icon-editor rotate: false - xy: 667, 861 + xy: 771, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 535, 795 + xy: 427, 474 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 733, 795 + xy: 805, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 799, 795 + xy: 871, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator rotate: false - xy: 865, 795 + xy: 937, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 199, 787 + xy: 361, 408 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 265, 787 + xy: 295, 357 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 graphite-press rotate: false - xy: 265, 721 + xy: 889, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 graphite-press-icon-editor rotate: false - xy: 265, 721 + xy: 889, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln rotate: false - xy: 1, 682 + xy: 493, 323 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-icon-editor rotate: false - xy: 1, 682 + xy: 493, 323 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 67, 682 + xy: 361, 276 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 67, 682 + xy: 361, 276 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +multi-press + rotate: false + xy: 99, 237 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +multi-press-icon-editor + rotate: false + xy: 99, 237 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 phase-weaver rotate: false - xy: 727, 597 + xy: 559, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 793, 597 + xy: 493, 59 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 133, 589 + xy: 625, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 199, 589 + xy: 625, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-icon-editor rotate: false - xy: 199, 589 + xy: 625, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 265, 589 + xy: 625, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 661, 531 + xy: 691, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pyratite-mixer-icon-editor rotate: false - xy: 661, 531 + xy: 691, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator rotate: false - xy: 265, 457 + xy: 889, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-editor rotate: false - xy: 265, 457 + xy: 889, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 331, 457 + xy: 955, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 397, 457 + xy: 955, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-icon-editor rotate: false - xy: 397, 457 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press - rotate: false - xy: 595, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-frame0 - rotate: false - xy: 661, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-frame1 - rotate: false - xy: 727, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-frame2 - rotate: false - xy: 793, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-liquid - rotate: false - xy: 133, 391 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-top - rotate: false - xy: 199, 391 + xy: 955, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container rotate: false - xy: 733, 861 + xy: 837, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-icon-editor rotate: false - xy: 733, 861 + xy: 837, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +launch-pad + rotate: false + xy: 589, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +launch-pad-icon-editor + rotate: false + xy: 589, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 vault rotate: false - xy: 883, 927 + xy: 295, 629 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vault-icon-editor rotate: false - xy: 883, 927 + xy: 295, 629 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-2 rotate: false - xy: 601, 861 + xy: 705, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 529, 663 + xy: 427, 276 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +ripple-heat + rotate: false + xy: 883, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 salvo-heat rotate: false - xy: 397, 523 + xy: 757, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 463, 465 + xy: 757, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 529, 465 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wave-liquid - rotate: false - xy: 925, 267 + xy: 823, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory rotate: false - xy: 865, 861 + xy: 903, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory rotate: false - xy: 865, 861 + xy: 903, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phantom-factory rotate: false - xy: 865, 861 + xy: 903, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spirit-factory rotate: false - xy: 865, 861 + xy: 903, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith-factory rotate: false - xy: 865, 861 + xy: 903, 595 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-top rotate: false - xy: 67, 814 + xy: 361, 474 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-top-open rotate: false - xy: 469, 795 + xy: 295, 423 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-top rotate: false - xy: 1, 748 + xy: 699, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-top-open rotate: false - xy: 67, 748 + xy: 765, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +fortress-factory-top-open + rotate: false + xy: 1, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ghoul-factory-top-open + rotate: false + xy: 1, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +titan-factory-top-open + rotate: false + xy: 1, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ghoul-factory + rotate: false + xy: 1, 531 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 phantom-factory-top rotate: false - xy: 529, 597 + xy: 427, 78 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phantom-factory-top-open rotate: false - xy: 595, 597 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spirit-factory-top - rotate: false - xy: 463, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spirit-factory-top-open - rotate: false - xy: 529, 399 + xy: 361, 12 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-factory rotate: false - xy: 589, 927 + xy: 687, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -wraith-factory-top - rotate: false - xy: 265, 259 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wraith-factory-top-open - rotate: false - xy: 331, 259 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 copper-wall-large rotate: false - xy: 799, 861 + xy: 903, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 copper-wall-large-icon-editor rotate: false - xy: 799, 861 + xy: 903, 661 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large rotate: false - xy: 595, 729 + xy: 493, 389 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-icon-editor rotate: false - xy: 595, 729 + xy: 493, 389 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 661, 729 + xy: 361, 342 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 661, 597 + xy: 427, 12 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-wall-large-icon-editor rotate: false - xy: 661, 597 + xy: 427, 12 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +scrap-wall-huge1 + rotate: false + xy: 197, 433 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +scrap-wall-huge-icon-editor + rotate: false + xy: 197, 433 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +scrap-wall-huge2 + rotate: false + xy: 197, 335 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +scrap-wall-huge3 + rotate: false + xy: 197, 237 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 scrap-wall-large1 rotate: false - xy: 793, 465 + xy: 823, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 859, 465 + xy: 823, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 925, 465 + xy: 889, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 133, 457 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -surge-wall-large - rotate: false - xy: 331, 391 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -surge-wall-large-icon-editor - rotate: false - xy: 331, 391 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -thorium-wall-large - rotate: false - xy: 595, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -thorium-wall-large-icon-editor - rotate: false - xy: 595, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -titanium-wall-large - rotate: false - xy: 793, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -titanium-wall-large-icon-editor - rotate: false - xy: 793, 333 + xy: 955, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-icon-editor rotate: false - xy: 931, 861 + xy: 607, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-icon-editor rotate: false - xy: 601, 795 + xy: 673, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-editor rotate: false - xy: 931, 795 + xy: 567, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-icon-editor rotate: false - xy: 331, 787 + xy: 427, 408 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +fuse-icon-editor + rotate: false + xy: 1, 727 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ghoul-factory-icon-editor + rotate: false + xy: 1, 433 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +glaive-ship-pad-icon-editor + rotate: false + xy: 1, 139 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 javelin-ship-pad-icon-editor rotate: false - xy: 397, 721 + xy: 559, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-editor rotate: false - xy: 595, 663 + xy: 559, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +laser-drill-icon-editor + rotate: false + xy: 99, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +liquid-tank-icon-editor + rotate: false + xy: 785, 923 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +mass-driver-icon-editor + rotate: false + xy: 99, 433 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 mechanical-drill-icon-editor rotate: false - xy: 793, 663 + xy: 295, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +oil-extractor-icon-editor + rotate: false + xy: 99, 41 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 phantom-factory-icon-editor rotate: false - xy: 67, 616 + xy: 493, 125 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-editor rotate: false - xy: 859, 597 + xy: 559, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-icon-editor rotate: false - xy: 397, 589 + xy: 625, 1 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-node-large-icon-editor rotate: false - xy: 595, 531 + xy: 955, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +ripple-icon-editor + rotate: false + xy: 197, 727 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 rotary-pump-icon-editor rotate: false - xy: 793, 531 + xy: 691, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-icon-editor rotate: false - xy: 1, 484 + xy: 757, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter-icon-editor rotate: false - xy: 661, 465 + xy: 955, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large-icon-editor rotate: false - xy: 199, 457 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spirit-factory-icon-editor - rotate: false - xy: 1, 418 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-icon-editor - rotate: false - xy: 859, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -swarmer-icon-editor - rotate: false - xy: 1, 352 + xy: 889, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump-icon-editor rotate: false - xy: 197, 927 + xy: 295, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 titan-factory-icon-editor rotate: false - xy: 687, 927 + xy: 785, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -trident-ship-pad-icon-editor - rotate: false - xy: 925, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -water-extractor-icon-editor - rotate: false - xy: 67, 286 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wave-icon-editor - rotate: false - xy: 793, 267 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wraith-factory-icon-editor - rotate: false - xy: 133, 259 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -bullet - rotate: false - xy: 175, 205 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -bullet-back - rotate: false - xy: 229, 205 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -error - rotate: false - xy: 575, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 laser-end rotate: false - xy: 247, 853 + xy: 393, 606 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 321, 853 + xy: 295, 555 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 transfer-end rotate: false - xy: 395, 853 + xy: 467, 606 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 -alloy-smelter-icon-large +cracks-2-0 rotate: false - xy: 283, 209 - size: 48, 48 - orig: 48, 48 + xy: 639, 595 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -alpha-dart-mech-pad-icon-large +cracks-2-1 rotate: false - xy: 333, 209 - size: 48, 48 - orig: 48, 48 + xy: 541, 587 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -arc-icon-large +cracks-2-2 rotate: false - xy: 455, 159 - size: 48, 48 - orig: 48, 48 + xy: 369, 540 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -battery-icon-large +cracks-2-3 rotate: false - xy: 555, 159 - size: 48, 48 - orig: 48, 48 + xy: 295, 489 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -battery-large-icon-large +cracks-2-4 rotate: false - xy: 605, 159 - size: 48, 48 - orig: 48, 48 + xy: 435, 540 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -blast-drill-icon-large +cracks-2-5 rotate: false - xy: 655, 159 - size: 48, 48 - orig: 48, 48 + xy: 705, 595 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -blast-mixer-icon-large +cracks-2-6 rotate: false - xy: 705, 159 - size: 48, 48 - orig: 48, 48 + xy: 771, 595 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -bridge-conduit-icon-large +cracks-2-7 rotate: false - xy: 855, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -bridge-conveyor-icon-large - rotate: false - xy: 905, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -char-icon-large - rotate: false - xy: 175, 155 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -cliffs-icon-large - rotate: false - xy: 225, 155 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -coal-centrifuge-icon-large - rotate: false - xy: 383, 152 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -combustion-generator-icon-large - rotate: false - xy: 109, 151 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -conduit-icon-large - rotate: false - xy: 59, 128 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -container-icon-large - rotate: false - xy: 275, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -conveyor-icon-large - rotate: false - xy: 325, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -copper-wall-icon-large - rotate: false - xy: 433, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -copper-wall-large-icon-large - rotate: false - xy: 555, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -core-foundation-icon-large - rotate: false - xy: 605, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -core-nucleus-icon-large - rotate: false - xy: 655, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -core-shard-icon-large - rotate: false - xy: 705, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -craters-icon-large - rotate: false - xy: 755, 109 - size: 48, 48 - orig: 48, 48 + xy: 837, 595 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 crawler-factory-icon-full rotate: false - xy: 1, 814 + xy: 501, 521 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -crawler-factory-icon-large - rotate: false - xy: 905, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -creeptree-icon-large - rotate: false - xy: 159, 105 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 cryofluidmixer-icon-full rotate: false - xy: 667, 795 + xy: 739, 529 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -cryofluidmixer-icon-large - rotate: false - xy: 209, 105 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 cultivator-icon-full rotate: false - xy: 133, 787 + xy: 493, 455 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -cultivator-icon-large - rotate: false - xy: 375, 102 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -cyclone-icon-large - rotate: false - xy: 109, 101 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 dagger-factory-icon-full rotate: false - xy: 397, 787 + xy: 633, 463 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -dagger-factory-icon-large +fuse rotate: false - xy: 51, 78 - size: 48, 48 - orig: 48, 48 + xy: 1, 825 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 -dark-metal-icon-large +fuse-icon-full rotate: false - xy: 309, 59 - size: 48, 48 - orig: 48, 48 + xy: 1, 629 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 -dark-panel-1-icon-large +ghoul-factory-icon-full rotate: false - xy: 425, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dark-panel-2-icon-large - rotate: false - xy: 533, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dark-panel-3-icon-large - rotate: false - xy: 583, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dark-panel-4-icon-large - rotate: false - xy: 633, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dark-panel-5-icon-large - rotate: false - xy: 683, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dark-panel-6-icon-large - rotate: false - xy: 733, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -darksand-icon-large - rotate: false - xy: 783, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -darksand-tainted-water-icon-large - rotate: false - xy: 833, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -darksand-water-icon-large - rotate: false - xy: 883, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -deepwater-icon-large - rotate: false - xy: 159, 55 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -delta-mech-pad-icon-large - rotate: false - xy: 475, 51 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -differential-generator-icon-large - rotate: false - xy: 1, 48 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -distributor-icon-large - rotate: false - xy: 51, 28 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -door-icon-large - rotate: false - xy: 259, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -door-large-icon-large - rotate: false - xy: 309, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dunerocks-icon-large - rotate: false - xy: 409, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -duo-icon-large - rotate: false - xy: 525, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -force-projector-icon-large - rotate: false - xy: 775, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -fortress-factory-icon-large - rotate: false - xy: 825, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -fuse-icon-large - rotate: false - xy: 875, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -ghoul-factory-icon-large - rotate: false - xy: 925, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -glaive-ship-pad-icon-large - rotate: false - xy: 975, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -graphite-press-icon-large - rotate: false - xy: 151, 5 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -grass-icon-large - rotate: false - xy: 201, 5 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -hail-icon-large - rotate: false - xy: 359, 2 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -holostone-icon-large - rotate: false - xy: 459, 1 - size: 48, 48 - orig: 48, 48 + xy: 1, 335 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 lancer rotate: false - xy: 463, 663 + xy: 295, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-full rotate: false - xy: 661, 663 + xy: 493, 257 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -mech-icon-glaive-ship +laser-drill-icon-full rotate: false - xy: 462, 209 - size: 56, 56 - orig: 56, 56 + xy: 197, 923 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 -mech-icon-omega-mech +liquid-tank-icon-full rotate: false - xy: 520, 209 - size: 56, 56 - orig: 56, 56 + xy: 883, 923 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 -mech-icon-tau-mech +mass-driver rotate: false - xy: 578, 209 - size: 56, 56 - orig: 56, 56 + xy: 99, 629 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 -mech-icon-trident-ship +mass-driver-icon-full rotate: false - xy: 636, 209 - size: 56, 56 - orig: 56, 56 + xy: 99, 335 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill-icon-full rotate: false - xy: 859, 663 + xy: 427, 210 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +oil-extractor-icon-full + rotate: false + xy: 197, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 phantom-factory-icon-full rotate: false - xy: 463, 597 + xy: 361, 78 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-full rotate: false - xy: 925, 597 + xy: 625, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-icon-full rotate: false - xy: 1, 550 + xy: 691, 331 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +ripple + rotate: false + xy: 785, 825 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ripple-icon-full + rotate: false + xy: 197, 629 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 salvo rotate: false - xy: 331, 523 + xy: 955, 265 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-icon-full rotate: false - xy: 67, 484 + xy: 757, 67 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter rotate: false - xy: 595, 465 + xy: 889, 199 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter-icon-full rotate: false - xy: 727, 465 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spirit-factory-icon-full - rotate: false - xy: 67, 418 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -spore-press-icon-full - rotate: false - xy: 925, 399 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -swarmer - rotate: false - xy: 397, 391 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -swarmer-icon-full - rotate: false - xy: 67, 352 + xy: 823, 133 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-factory-icon-full rotate: false - xy: 785, 927 + xy: 883, 727 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -unit-icon-eruptor - rotate: false - xy: 265, 325 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -unit-icon-fortress - rotate: false - xy: 331, 325 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -unit-icon-titan - rotate: false - xy: 397, 325 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -water-extractor-icon-full - rotate: false - xy: 463, 267 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wave - rotate: false - xy: 727, 267 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wave-icon-full - rotate: false - xy: 859, 267 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -wraith-factory-icon-full - rotate: false - xy: 199, 259 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -alpha-mech - rotate: false - xy: 59, 178 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -alpha-mech-base - rotate: false - xy: 283, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -alpha-mech-leg - rotate: false - xy: 333, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -delta-mech - rotate: false - xy: 209, 55 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -delta-mech-base - rotate: false - xy: 359, 52 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -delta-mech-leg - rotate: false - xy: 101, 51 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -omega-mech - rotate: false - xy: 694, 209 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 omega-mech-armor rotate: false - xy: 331, 655 + xy: 361, 144 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -omega-mech-base - rotate: false - xy: 752, 209 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -omega-mech-leg - rotate: false - xy: 810, 209 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -tau-mech - rotate: false - xy: 397, 202 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -dart-ship - rotate: false - xy: 933, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -glaive-ship - rotate: false - xy: 59, 228 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -trident-ship - rotate: false - xy: 117, 201 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -shape-3 - rotate: false - xy: 397, 260 - size: 63, 63 - orig: 63, 63 - offset: 0, 0 - index: -1 discord-banner rotate: false - xy: 1, 880 + xy: 393, 680 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 info-banner rotate: false - xy: 87, 880 + xy: 479, 680 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 -crawler - rotate: false - xy: 805, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -crawler-base - rotate: false - xy: 855, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -crawler-leg - rotate: false - xy: 955, 109 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dagger - rotate: false - xy: 483, 101 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dagger-base - rotate: false - xy: 1, 98 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -dagger-leg - rotate: false - xy: 259, 59 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 eruptor rotate: false - xy: 727, 729 + xy: 295, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-base rotate: false - xy: 793, 729 + xy: 427, 342 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-leg rotate: false - xy: 859, 729 + xy: 625, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress rotate: false - xy: 925, 729 + xy: 691, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 133, 721 + xy: 757, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-base rotate: false - xy: 133, 721 + xy: 757, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 199, 721 + xy: 823, 397 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ghoul rotate: false - xy: 173, 853 + xy: 565, 653 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 -phantom - rotate: false - xy: 868, 209 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -power-cell - rotate: false - xy: 926, 209 - size: 56, 56 - orig: 56, 56 - offset: 0, 0 - index: -1 -titan - rotate: false - xy: 661, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -titan-leg - rotate: false - xy: 727, 333 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -artillery-equip - rotate: false - xy: 505, 151 - size: 48, 56 - orig: 48, 56 - offset: 0, 0 - index: -1 -blaster-equip - rotate: false - xy: 755, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -bomber-equip - rotate: false - xy: 805, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -missiles-equip - rotate: false - xy: 805, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -chain-blaster-equip - rotate: false - xy: 955, 159 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -chaos-equip - rotate: false - xy: 1, 148 - size: 56, 136 - orig: 56, 136 - offset: 0, 0 - index: -1 -eruption-equip - rotate: false - xy: 625, 1 - size: 48, 56 - orig: 48, 56 - offset: 0, 0 - index: -1 -flakgun-equip - rotate: false - xy: 675, 9 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -flamethrower-equip - rotate: false - xy: 725, 1 - size: 48, 56 - orig: 48, 56 - offset: 0, 0 - index: -1 -heal-blaster-equip - rotate: false - xy: 101, 1 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 sprites_fallback4.png size: 1024,1024 format: RGBA8888 filter: Nearest,Nearest repeat: none -mender - rotate: false - xy: 965, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mender-icon-editor - rotate: false - xy: 965, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mender-top - rotate: false - xy: 965, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shock-mine - rotate: false - xy: 963, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 bridge-conveyor rotate: false - xy: 557, 991 + xy: 723, 74 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-editor rotate: false - xy: 557, 991 + xy: 723, 74 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 557, 957 + xy: 753, 40 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 557, 923 + xy: 753, 6 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 591, 855 + xy: 825, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-icon-editor rotate: false - xy: 591, 855 + xy: 825, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 591, 821 + xy: 825, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 591, 787 + xy: 825, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 591, 753 + xy: 855, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 591, 719 + xy: 855, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 587, 651 + xy: 855, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 587, 617 + xy: 845, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 585, 583 + xy: 841, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 581, 549 + xy: 841, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 577, 515 + xy: 841, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 577, 481 + xy: 841, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 596, 447 + xy: 859, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 621, 685 + xy: 859, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 625, 991 + xy: 859, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 625, 957 + xy: 859, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 625, 923 + xy: 889, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 625, 889 + xy: 889, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 625, 855 + xy: 889, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 625, 821 + xy: 879, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 625, 787 + xy: 875, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -titanium-conveyor-0-0 +water-extractor rotate: false - xy: 759, 243 - size: 32, 32 - orig: 32, 32 + xy: 67, 827 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -titanium-conveyor-icon-editor +water-extractor-liquid rotate: false - xy: 759, 243 - size: 32, 32 - orig: 32, 32 + xy: 67, 629 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -titanium-conveyor-0-1 +water-extractor-rotator rotate: false - xy: 793, 243 - size: 32, 32 - orig: 32, 32 + xy: 67, 563 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -titanium-conveyor-0-2 +water-extractor-top rotate: false - xy: 827, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-0-3 - rotate: false - xy: 861, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-1-0 - rotate: false - xy: 895, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-1-1 - rotate: false - xy: 929, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-1-2 - rotate: false - xy: 963, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-1-3 - rotate: false - xy: 521, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-2-0 - rotate: false - xy: 419, 190 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-2-1 - rotate: false - xy: 351, 167 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-2-2 - rotate: false - xy: 385, 167 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-2-3 - rotate: false - xy: 453, 190 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-3-0 - rotate: false - xy: 487, 190 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-3-1 - rotate: false - xy: 555, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-3-2 - rotate: false - xy: 589, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-3-3 - rotate: false - xy: 623, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-4-0 - rotate: false - xy: 657, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-4-1 - rotate: false - xy: 691, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-4-2 - rotate: false - xy: 725, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-conveyor-4-3 - rotate: false - xy: 759, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -junction - rotate: false - xy: 927, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -junction-icon-editor - rotate: false - xy: 927, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -overflow-gate - rotate: false - xy: 453, 394 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -overflow-gate-icon-editor - rotate: false - xy: 453, 394 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conveyor - rotate: false - xy: 725, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conveyor-icon-editor - rotate: false - xy: 725, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conveyor-arrow - rotate: false - xy: 759, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conveyor-bridge - rotate: false - xy: 793, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conveyor-end - rotate: false - xy: 827, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -router - rotate: false - xy: 827, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -router-icon-editor - rotate: false - xy: 827, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sorter - rotate: false - xy: 691, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sorter-icon-editor - rotate: false - xy: 691, 277 - size: 32, 32 - orig: 32, 32 + xy: 67, 497 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 519, 685 + xy: 709, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-border-editor rotate: false - xy: 519, 685 + xy: 709, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 519, 651 + xy: 705, 278 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 519, 651 + xy: 705, 278 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 519, 617 + xy: 705, 244 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 385, 405 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -spawn - rotate: false - xy: 725, 277 + xy: 821, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 517, 583 + xy: 705, 210 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-icon-editor rotate: false - xy: 517, 583 + xy: 705, 210 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 513, 549 + xy: 723, 176 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 513, 549 + xy: 723, 176 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 543, 515 + xy: 723, 142 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 553, 685 + xy: 723, 108 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 547, 549 + xy: 757, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 543, 481 + xy: 757, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 426, 462 + xy: 757, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 351, 439 + xy: 787, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 385, 439 + xy: 787, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 460, 462 + xy: 787, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 494, 466 + xy: 791, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 528, 447 + xy: 791, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 453, 428 + xy: 821, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 487, 428 + xy: 821, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 562, 447 + xy: 811, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 587, 685 + xy: 807, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 591, 991 + xy: 807, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 591, 957 + xy: 807, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 591, 923 + xy: 807, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -liquid-junction +tau-mech-pad rotate: false - xy: 931, 855 - size: 32, 32 - orig: 32, 32 + xy: 199, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -liquid-junction-icon-editor +tau-mech-pad-icon-editor rotate: false - xy: 931, 855 - size: 32, 32 - orig: 32, 32 + xy: 199, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -liquid-router-bottom +trident-ship-pad rotate: false - xy: 931, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-router-liquid - rotate: false - xy: 936, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-router-top - rotate: false - xy: 951, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mechanical-pump - rotate: false - xy: 965, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conduit - rotate: false - xy: 589, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conduit-icon-editor - rotate: false - xy: 589, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conduit-arrow - rotate: false - xy: 623, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conduit-bridge - rotate: false - xy: 657, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-conduit-end - rotate: false - xy: 691, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-0 - rotate: false - xy: 759, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-1 - rotate: false - xy: 793, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-2 - rotate: false - xy: 827, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-3 - rotate: false - xy: 861, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-4 - rotate: false - xy: 895, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-5 - rotate: false - xy: 929, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-top-6 - rotate: false - xy: 963, 379 - size: 32, 32 - orig: 32, 32 + xy: 595, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 battery rotate: false - xy: 523, 855 + xy: 671, 210 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-editor rotate: false - xy: 523, 855 + xy: 671, 210 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 553, 617 + xy: 773, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-icon-editor rotate: false - xy: 553, 617 + xy: 773, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 551, 583 + xy: 773, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -power-node +surge-tower rotate: false - xy: 351, 337 - size: 32, 32 - orig: 32, 32 + xy: 1, 167 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -power-node-icon-editor +surge-tower-icon-editor rotate: false - xy: 351, 337 - size: 32, 32 - orig: 32, 32 + xy: 1, 167 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -power-source +thermal-generator rotate: false - xy: 453, 360 - size: 32, 32 - orig: 32, 32 + xy: 265, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -power-void +thermal-generator-icon-editor rotate: false - xy: 555, 379 - size: 32, 32 - orig: 32, 32 + xy: 265, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -powerinfinite +turbine-generator rotate: false - xy: 623, 379 - size: 32, 32 - orig: 32, 32 + xy: 727, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -powervoid +turbine-generator-icon-editor rotate: false - xy: 657, 379 - size: 32, 32 - orig: 32, 32 + xy: 727, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -rtg-generator-top +turbine-generator-top rotate: false - xy: 895, 345 - size: 32, 32 - orig: 32, 32 + xy: 793, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -solar-panel +spore-press rotate: false - xy: 589, 277 - size: 32, 32 - orig: 32, 32 + xy: 1, 695 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -solar-panel-icon-editor +spore-press-frame0 rotate: false - xy: 589, 277 - size: 32, 32 - orig: 32, 32 + xy: 1, 629 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -incinerator +spore-press-frame1 rotate: false - xy: 868, 447 - size: 32, 32 - orig: 32, 32 + xy: 1, 563 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -incinerator-icon-editor +spore-press-frame2 rotate: false - xy: 868, 447 - size: 32, 32 - orig: 32, 32 + xy: 1, 497 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -item-source +spore-press-liquid rotate: false - xy: 897, 787 - size: 32, 32 - orig: 32, 32 + xy: 1, 299 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -item-source-icon-editor +spore-press-top rotate: false - xy: 897, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-void - rotate: false - xy: 925, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-void-icon-editor - rotate: false - xy: 925, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -lavasmelter - rotate: false - xy: 931, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-source - rotate: false - xy: 955, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-source-icon-editor - rotate: false - xy: 955, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -melter - rotate: false - xy: 965, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -melter-icon-editor - rotate: false - xy: 965, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulverizer - rotate: false - xy: 521, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulverizer-rotator - rotate: false - xy: 385, 303 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -smelter - rotate: false - xy: 453, 258 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sortedunloader - rotate: false - xy: 657, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -unloader - rotate: false - xy: 963, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -unloader-icon-editor - rotate: false - xy: 963, 209 - size: 32, 32 - orig: 32, 32 + xy: 1, 233 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 arc-heat rotate: false - xy: 523, 957 + xy: 671, 312 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-1 rotate: false - xy: 523, 719 + xy: 705, 312 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail-heat rotate: false - xy: 395, 533 + xy: 383, 1 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -scorch-heat +wave-liquid rotate: false - xy: 385, 269 - size: 32, 32 - orig: 32, 32 + xy: 67, 233 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -repair-point-base +spirit-factory-top rotate: false - xy: 555, 345 - size: 32, 32 - orig: 32, 32 + xy: 1, 827 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +spirit-factory-top-open + rotate: false + xy: 1, 761 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +wraith-factory-top + rotate: false + xy: 67, 35 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +wraith-factory-top-open + rotate: false + xy: 133, 893 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 625, 753 + xy: 875, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-editor rotate: false - xy: 625, 753 + xy: 875, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door rotate: false - xy: 689, 685 + xy: 991, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-icon-editor rotate: false - xy: 689, 685 + xy: 991, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-open rotate: false - xy: 693, 957 + xy: 991, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -phase-wall +surge-wall-large rotate: false - xy: 861, 413 - size: 32, 32 - orig: 32, 32 + xy: 1, 101 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -phase-wall-icon-editor +surge-wall-large-icon-editor rotate: false - xy: 861, 413 - size: 32, 32 - orig: 32, 32 + xy: 1, 101 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -scrap-wall1 +thorium-wall-large rotate: false - xy: 555, 311 - size: 32, 32 - orig: 32, 32 + xy: 331, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -scrap-wall2 +thorium-wall-large-icon-editor rotate: false - xy: 589, 311 - size: 32, 32 - orig: 32, 32 + xy: 331, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -scrap-wall3 +titanium-wall-large rotate: false - xy: 623, 311 - size: 32, 32 - orig: 32, 32 + xy: 529, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 -scrap-wall4 +titanium-wall-large-icon-editor rotate: false - xy: 657, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall5 - rotate: false - xy: 657, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -surge-wall - rotate: false - xy: 419, 224 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -surge-wall-icon-editor - rotate: false - xy: 419, 224 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -thorium-wall - rotate: false - xy: 623, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -thorium-wall-icon-editor - rotate: false - xy: 623, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-wall - rotate: false - xy: 793, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -titanium-wall-icon-editor - rotate: false - xy: 793, 209 - size: 32, 32 - orig: 32, 32 + xy: 529, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 arc-icon-editor rotate: false - xy: 523, 923 + xy: 671, 278 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char-icon-editor rotate: false - xy: 557, 889 + xy: 739, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char1 rotate: false - xy: 557, 889 + xy: 739, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs-icon-editor rotate: false - xy: 557, 719 + xy: 777, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-icon-editor rotate: false - xy: 419, 428 + xy: 791, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters-icon-editor rotate: false - xy: 615, 549 + xy: 909, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters1 rotate: false - xy: 615, 549 + xy: 909, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal-icon-editor rotate: false - xy: 659, 923 + xy: 957, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-editor rotate: false - xy: 659, 889 + xy: 957, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-1 rotate: false - xy: 659, 889 + xy: 957, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-editor rotate: false - xy: 659, 855 + xy: 957, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-2 rotate: false - xy: 659, 855 + xy: 957, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-editor rotate: false - xy: 659, 821 + xy: 943, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-3 rotate: false - xy: 659, 821 + xy: 943, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-editor rotate: false - xy: 659, 787 + xy: 943, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-4 rotate: false - xy: 659, 787 + xy: 943, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-editor rotate: false - xy: 659, 753 + xy: 943, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-5 rotate: false - xy: 659, 753 + xy: 943, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-editor rotate: false - xy: 659, 719 + xy: 943, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-6 rotate: false - xy: 659, 719 + xy: 943, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-editor rotate: false - xy: 655, 651 + xy: 961, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand1 rotate: false - xy: 655, 651 + xy: 961, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-editor rotate: false - xy: 655, 617 + xy: 977, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water rotate: false - xy: 655, 617 + xy: 977, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-editor rotate: false - xy: 653, 583 + xy: 977, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water rotate: false - xy: 653, 583 + xy: 977, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-editor rotate: false - xy: 649, 549 + xy: 977, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-deepwater rotate: false - xy: 649, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -dunerocks-icon-editor - rotate: false - xy: 693, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -duo-icon-editor - rotate: false - xy: 693, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-char2 - rotate: false - xy: 693, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-char3 - rotate: false - xy: 693, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-craters2 - rotate: false - xy: 693, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-craters3 - rotate: false - xy: 689, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand2 - rotate: false - xy: 689, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-darksand3 - rotate: false - xy: 687, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-grass1 - rotate: false - xy: 683, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -grass-icon-editor - rotate: false - xy: 683, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-grass2 - rotate: false - xy: 679, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-grass3 - rotate: false - xy: 679, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-holostone1 - rotate: false - xy: 698, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -holostone-icon-editor - rotate: false - xy: 698, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-holostone2 - rotate: false - xy: 723, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-holostone3 - rotate: false - xy: 723, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-hotrock1 - rotate: false - xy: 723, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -hotrock-icon-editor - rotate: false - xy: 723, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-hotrock2 - rotate: false - xy: 721, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-hotrock3 - rotate: false - xy: 727, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice-snow1 - rotate: false - xy: 727, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ice-snow-icon-editor - rotate: false - xy: 727, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice-snow2 - rotate: false - xy: 727, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice-snow3 - rotate: false - xy: 727, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice1 - rotate: false - xy: 727, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ice-icon-editor - rotate: false - xy: 727, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice2 - rotate: false - xy: 727, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ice3 - rotate: false - xy: 727, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ignarock1 - rotate: false - xy: 727, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ignarock-icon-editor - rotate: false - xy: 727, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ignarock2 - rotate: false - xy: 727, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ignarock3 - rotate: false - xy: 717, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-magmarock1 - rotate: false - xy: 713, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -magmarock-icon-editor - rotate: false - xy: 713, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-magmarock2 - rotate: false - xy: 713, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-magmarock3 - rotate: false - xy: 732, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor - rotate: false - xy: 757, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged5 - rotate: false - xy: 757, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-icon-editor - rotate: false - xy: 757, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-2 - rotate: false - xy: 757, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-2-icon-editor - rotate: false - xy: 757, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-3 - rotate: false - xy: 757, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-3-icon-editor - rotate: false - xy: 757, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-5 - rotate: false - xy: 755, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-5-icon-editor - rotate: false - xy: 755, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged1 - rotate: false - xy: 751, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged-icon-editor - rotate: false - xy: 751, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged2 - rotate: false - xy: 747, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged3 - rotate: false - xy: 747, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged4 - rotate: false - xy: 761, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-metal-floor-damaged6 - rotate: false - xy: 761, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss1 - rotate: false - xy: 761, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -moss-icon-editor - rotate: false - xy: 761, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss2 - rotate: false - xy: 761, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-moss3 - rotate: false - xy: 761, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-coal1 - rotate: false - xy: 761, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-coal2 - rotate: false - xy: 761, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-coal3 - rotate: false - xy: 761, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-copper1 - rotate: false - xy: 761, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-copper2 - rotate: false - xy: 766, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-copper3 - rotate: false - xy: 789, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-lead1 - rotate: false - xy: 791, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-lead2 - rotate: false - xy: 791, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-lead3 - rotate: false - xy: 791, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-scrap1 - rotate: false - xy: 785, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-scrap2 - rotate: false - xy: 781, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-scrap3 - rotate: false - xy: 781, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-thorium1 - rotate: false - xy: 795, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-thorium2 - rotate: false - xy: 795, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-thorium3 - rotate: false - xy: 795, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-titanium1 - rotate: false - xy: 795, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-titanium2 - rotate: false - xy: 795, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-ore-titanium3 - rotate: false - xy: 795, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-pebbles1 - rotate: false - xy: 795, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-pebbles2 - rotate: false - xy: 795, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-pebbles3 - rotate: false - xy: 795, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-salt - rotate: false - xy: 800, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -salt-icon-editor - rotate: false - xy: 800, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand-water - rotate: false - xy: 825, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sand-water-icon-editor - rotate: false - xy: 825, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand1 - rotate: false - xy: 823, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sand-icon-editor - rotate: false - xy: 823, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand2 - rotate: false - xy: 825, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-sand3 - rotate: false - xy: 825, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-shale1 - rotate: false - xy: 819, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shale-icon-editor - rotate: false - xy: 819, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-shale2 - rotate: false - xy: 815, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-shale3 - rotate: false - xy: 815, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-snow1 - rotate: false - xy: 829, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -snow-icon-editor - rotate: false - xy: 829, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-snow2 - rotate: false - xy: 829, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-snow3 - rotate: false - xy: 829, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spore-moss1 - rotate: false - xy: 829, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -spore-moss-icon-editor - rotate: false - xy: 829, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spore-moss2 - rotate: false - xy: 829, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-spore-moss3 - rotate: false - xy: 829, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-stone1 - rotate: false - xy: 829, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -stone-icon-editor - rotate: false - xy: 829, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-stone2 - rotate: false - xy: 829, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-stone3 - rotate: false - xy: 829, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tainted-water - rotate: false - xy: 834, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -tainted-water-icon-editor - rotate: false - xy: 834, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-tar - rotate: false - xy: 857, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -tar-icon-editor - rotate: false - xy: 857, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -editor-water - rotate: false - xy: 859, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -water-icon-editor - rotate: false - xy: 859, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -hail-icon-editor - rotate: false - xy: 863, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icerocks-icon-editor - rotate: false - xy: 863, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-router-icon-editor - rotate: false - xy: 931, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mechanical-pump-icon-editor - rotate: false - xy: 965, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pebbles-icon-editor - rotate: false - xy: 487, 394 + xy: 977, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine-icon-editor rotate: false - xy: 151, 975 + xy: 899, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -power-source-icon-editor - rotate: false - xy: 487, 360 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -power-void-icon-editor - rotate: false - xy: 589, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulse-conduit-icon-editor - rotate: false - xy: 691, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pulverizer-icon-editor - rotate: false - xy: 419, 326 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -repair-point-icon-editor - rotate: false - xy: 589, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 rock-icon-editor rotate: false - xy: 151, 225 + xy: 791, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -rocks-icon-editor - rotate: false - xy: 759, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -saltrocks-icon-editor - rotate: false - xy: 929, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -sandrocks-icon-editor - rotate: false - xy: 521, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scorch-icon-editor - rotate: false - xy: 453, 292 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall-icon-editor - rotate: false - xy: 759, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shale-boulder-icon-editor - rotate: false - xy: 895, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shalerocks-icon-editor - rotate: false - xy: 929, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shock-mine-icon-editor - rotate: false - xy: 521, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -shrubs-icon-editor - rotate: false - xy: 351, 235 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 snowrock-icon-editor rotate: false - xy: 251, 925 + xy: 333, 285 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -snowrocks-icon-editor +spirit-factory-icon-editor rotate: false - xy: 555, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -spawn-icon-editor - rotate: false - xy: 759, 277 - size: 32, 32 - orig: 32, 32 + xy: 1, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 spore-cluster-icon-editor rotate: false - xy: 443, 747 + xy: 609, 75 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-pine-icon-editor rotate: false - xy: 251, 375 + xy: 233, 213 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -sporerocks-icon-editor +spore-press-icon-editor rotate: false - xy: 963, 277 - size: 32, 32 - orig: 32, 32 + xy: 1, 431 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +swarmer-icon-editor + rotate: false + xy: 67, 959 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +trident-ship-pad-icon-editor + rotate: false + xy: 661, 959 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +water-extractor-icon-editor + rotate: false + xy: 67, 761 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +wave-icon-editor + rotate: false + xy: 67, 365 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +wraith-factory-icon-editor + rotate: false + xy: 67, 167 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +bullet + rotate: false + xy: 380, 847 + size: 52, 52 + orig: 52, 52 + offset: 0, 0 + index: -1 +bullet-back + rotate: false + xy: 423, 793 + size: 52, 52 + orig: 52, 52 + offset: 0, 0 + index: -1 +error + rotate: false + xy: 927, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 missile rotate: false - xy: 485, 726 + xy: 633, 250 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 missile-back rotate: false - xy: 481, 688 + xy: 633, 212 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 -scorch1 - rotate: false - xy: 995, 617 - size: 28, 100 - orig: 28, 100 - offset: 0, 0 - index: -1 -scorch2 - rotate: false - xy: 419, 54 - size: 28, 100 - orig: 28, 100 - offset: 0, 0 - index: -1 -scorch3 - rotate: false - xy: 351, 31 - size: 28, 100 - orig: 28, 100 - offset: 0, 0 - index: -1 -scorch4 - rotate: false - xy: 381, 31 - size: 28, 100 - orig: 28, 100 - offset: 0, 0 - index: -1 -scorch5 - rotate: false - xy: 449, 54 - size: 28, 100 - orig: 28, 100 - offset: 0, 0 - index: -1 shell rotate: false - xy: 479, 592 + xy: 651, 116 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shell-back rotate: false - xy: 437, 496 + xy: 651, 78 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 -shot +alloy-smelter-icon-large rotate: false - xy: 419, 258 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -transfer-arrow - rotate: false - xy: 861, 209 - size: 32, 32 - orig: 32, 32 + xy: 434, 851 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 alloy-smelter-icon-medium rotate: false - xy: 475, 500 + xy: 991, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -alloy-smelter-icon-small - rotate: false - xy: 479, 566 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -alpha-dart-mech-pad-icon-medium - rotate: false - xy: 509, 500 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -alpha-dart-mech-pad-icon-small - rotate: false - xy: 993, 591 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 arc rotate: false - xy: 523, 991 + xy: 991, 991 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc-icon-full rotate: false - xy: 523, 889 + xy: 671, 244 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -arc-icon-small +arc-icon-large rotate: false - xy: 443, 605 - size: 24, 24 - orig: 24, 24 + xy: 488, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -battery-icon-small +battery-icon-large rotate: false - xy: 401, 579 - size: 24, 24 - orig: 24, 24 + xy: 534, 859 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +battery-large-icon-large + rotate: false + xy: 538, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 battery-large-icon-medium rotate: false - xy: 523, 821 + xy: 689, 176 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -battery-large-icon-small +blast-drill-icon-large rotate: false - xy: 552, 143 - size: 24, 24 - orig: 24, 24 + xy: 577, 809 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 blast-drill-icon-medium rotate: false - xy: 523, 787 + xy: 689, 142 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -blast-drill-icon-small +blast-mixer-icon-large rotate: false - xy: 578, 143 - size: 24, 24 - orig: 24, 24 + xy: 584, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 blast-mixer-icon-medium rotate: false - xy: 523, 753 + xy: 689, 108 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -blast-mixer-icon-small +bridge-conduit-icon-large rotate: false - xy: 999, 999 - size: 24, 24 - orig: 24, 24 + xy: 634, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -bridge-conduit-icon-small +bridge-conveyor-icon-large rotate: false - xy: 999, 973 - size: 24, 24 - orig: 24, 24 + xy: 638, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -bridge-conveyor-icon-small +char-icon-large rotate: false - xy: 999, 947 - size: 24, 24 - orig: 24, 24 + xy: 684, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -char-icon-small +cliffs-icon-large rotate: false - xy: 999, 895 - size: 24, 24 - orig: 24, 24 + xy: 688, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -cliffs-icon-small +coal-centrifuge-icon-large rotate: false - xy: 999, 869 - size: 24, 24 - orig: 24, 24 + xy: 727, 809 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 coal-centrifuge-icon-medium rotate: false - xy: 553, 651 + xy: 773, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -coal-centrifuge-icon-small +combustion-generator-icon-large rotate: false - xy: 999, 843 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -combustion-generator-icon-small - rotate: false - xy: 999, 817 - size: 24, 24 - orig: 24, 24 + xy: 734, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 conduit-icon-full rotate: false - xy: 351, 405 + xy: 791, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -conduit-icon-small +conduit-icon-large rotate: false - xy: 999, 791 - size: 24, 24 - orig: 24, 24 + xy: 738, 909 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +container-icon-large + rotate: false + xy: 777, 809 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 container-icon-medium rotate: false - xy: 591, 889 + xy: 825, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -container-icon-small +conveyor-icon-large rotate: false - xy: 999, 765 - size: 24, 24 - orig: 24, 24 + xy: 784, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -conveyor-icon-small +copper-wall-icon-large rotate: false - xy: 999, 739 - size: 24, 24 - orig: 24, 24 + xy: 788, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -copper-wall-icon-small +copper-wall-large-icon-large rotate: false - xy: 644, 183 - size: 24, 24 - orig: 24, 24 + xy: 827, 809 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 copper-wall-large-icon-medium rotate: false - xy: 625, 719 + xy: 875, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -copper-wall-large-icon-small +core-foundation-icon-large rotate: false - xy: 670, 183 - size: 24, 24 - orig: 24, 24 + xy: 834, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 core-foundation-icon-medium rotate: false - xy: 621, 651 + xy: 875, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -core-foundation-icon-small +core-nucleus-icon-large rotate: false - xy: 696, 183 - size: 24, 24 - orig: 24, 24 + xy: 838, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 core-nucleus-icon-medium rotate: false - xy: 621, 617 + xy: 893, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -core-nucleus-icon-small +core-shard-icon-large rotate: false - xy: 722, 183 - size: 24, 24 - orig: 24, 24 + xy: 877, 809 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 core-shard-icon-medium rotate: false - xy: 619, 583 + xy: 913, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -core-shard-icon-small +cracks-1-0 rotate: false - xy: 748, 183 - size: 24, 24 - orig: 24, 24 + xy: 893, 171 + size: 32, 32 + orig: 32, 32 offset: 0, 0 index: -1 -craters-icon-small +cracks-1-1 rotate: false - xy: 774, 183 - size: 24, 24 - orig: 24, 24 + xy: 893, 137 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-2 + rotate: false + xy: 893, 103 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-3 + rotate: false + xy: 923, 69 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-4 + rotate: false + xy: 923, 35 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-5 + rotate: false + xy: 923, 1 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-6 + rotate: false + xy: 947, 375 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +cracks-1-7 + rotate: false + xy: 909, 341 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +craters-icon-large + rotate: false + xy: 884, 859 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +crawler-factory-icon-large + rotate: false + xy: 938, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 crawler-factory-icon-medium rotate: false - xy: 611, 515 + xy: 909, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -crawler-factory-icon-small +creeptree-icon-large rotate: false - xy: 800, 183 - size: 24, 24 - orig: 24, 24 + xy: 577, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 creeptree-icon-medium rotate: false - xy: 611, 481 + xy: 909, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -creeptree-icon-small +cryofluidmixer-icon-large rotate: false - xy: 826, 183 - size: 24, 24 - orig: 24, 24 + xy: 477, 751 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 cryofluidmixer-icon-medium rotate: false - xy: 630, 447 + xy: 927, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -cryofluidmixer-icon-small +cultivator-icon-large rotate: false - xy: 852, 183 - size: 24, 24 - orig: 24, 24 + xy: 527, 751 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 cultivator-icon-medium rotate: false - xy: 655, 685 + xy: 927, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -cultivator-icon-small +cyclone-icon-large rotate: false - xy: 878, 183 - size: 24, 24 - orig: 24, 24 + xy: 423, 743 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 cyclone-icon-medium rotate: false - xy: 659, 991 + xy: 927, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -cyclone-icon-small +dagger-factory-icon-large rotate: false - xy: 904, 183 - size: 24, 24 - orig: 24, 24 + xy: 191, 670 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 dagger-factory-icon-medium rotate: false - xy: 659, 957 + xy: 927, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -dagger-factory-icon-small +dark-metal-icon-large rotate: false - xy: 930, 183 - size: 24, 24 - orig: 24, 24 + xy: 299, 713 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-metal-icon-small +dark-panel-1-icon-large rotate: false - xy: 956, 183 - size: 24, 24 - orig: 24, 24 + xy: 627, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-panel-1-icon-small +dark-panel-2-icon-large rotate: false - xy: 982, 183 - size: 24, 24 - orig: 24, 24 + xy: 677, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-panel-2-icon-small +dark-panel-3-icon-large rotate: false - xy: 997, 421 - size: 24, 24 - orig: 24, 24 + xy: 727, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-panel-3-icon-small +dark-panel-4-icon-large rotate: false - xy: 997, 395 - size: 24, 24 - orig: 24, 24 + xy: 777, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-panel-4-icon-small +dark-panel-5-icon-large rotate: false - xy: 997, 369 - size: 24, 24 - orig: 24, 24 + xy: 827, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-panel-5-icon-small +dark-panel-6-icon-large rotate: false - xy: 997, 343 - size: 24, 24 - orig: 24, 24 + xy: 877, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dark-panel-6-icon-small +darksand-icon-large rotate: false - xy: 997, 317 - size: 24, 24 - orig: 24, 24 + xy: 927, 759 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -darksand-icon-small +darksand-tainted-water-icon-large rotate: false - xy: 997, 291 - size: 24, 24 - orig: 24, 24 + xy: 577, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -darksand-tainted-water-icon-small +darksand-water-icon-large rotate: false - xy: 997, 265 - size: 24, 24 - orig: 24, 24 + xy: 473, 701 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -darksand-water-icon-small +dart-mech-pad-icon-large rotate: false - xy: 997, 239 - size: 24, 24 - orig: 24, 24 + xy: 523, 701 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -deepwater-icon-small +dart-mech-pad-icon-medium rotate: false - xy: 997, 213 - size: 24, 24 - orig: 24, 24 + xy: 977, 273 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +deepwater-icon-large + rotate: false + xy: 349, 685 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +delta-mech-pad-icon-large + rotate: false + xy: 291, 663 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 delta-mech-pad-icon-medium rotate: false - xy: 645, 515 + xy: 961, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -delta-mech-pad-icon-small +differential-generator-icon-large rotate: false - xy: 644, 157 - size: 24, 24 - orig: 24, 24 + xy: 627, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 differential-generator-icon-medium rotate: false - xy: 645, 481 + xy: 961, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -differential-generator-icon-small +distributor-icon-large rotate: false - xy: 670, 157 - size: 24, 24 - orig: 24, 24 + xy: 677, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 distributor-icon-medium rotate: false - xy: 664, 447 + xy: 961, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -distributor-icon-small +door-icon-large rotate: false - xy: 696, 157 - size: 24, 24 - orig: 24, 24 + xy: 727, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -door-icon-small +door-large-icon-large rotate: false - xy: 722, 157 - size: 24, 24 - orig: 24, 24 + xy: 777, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 door-large-icon-medium rotate: false - xy: 693, 991 + xy: 991, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -door-large-icon-small +dunerocks-icon-large rotate: false - xy: 748, 157 - size: 24, 24 - orig: 24, 24 + xy: 827, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -dunerocks-icon-small +duo-icon-large rotate: false - xy: 774, 157 - size: 24, 24 - orig: 24, 24 + xy: 877, 709 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -duo +force-projector-icon-large rotate: false - xy: 693, 889 - size: 32, 32 - orig: 32, 32 + xy: 399, 643 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -duo-icon-full +fortress-factory-icon-large rotate: false - xy: 693, 821 - size: 32, 32 - orig: 32, 32 + xy: 341, 635 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -duo-icon-small +fuse-icon-large rotate: false - xy: 800, 157 - size: 24, 24 - orig: 24, 24 + xy: 449, 601 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -force-projector-icon-medium +ghoul-factory-icon-large rotate: false - xy: 859, 617 - size: 32, 32 - orig: 32, 32 + xy: 391, 593 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -force-projector-icon-small +glaive-ship-pad-icon-large rotate: false - xy: 826, 157 - size: 24, 24 - orig: 24, 24 + xy: 233, 613 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -fortress-factory-icon-medium +graphite-press-icon-large rotate: false - xy: 853, 549 - size: 32, 32 - orig: 32, 32 + xy: 183, 570 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -fortress-factory-icon-small +grass-icon-large rotate: false - xy: 852, 157 - size: 24, 24 - orig: 24, 24 + xy: 133, 569 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -fuse-icon-medium +hail-icon-large rotate: false - xy: 849, 515 - size: 32, 32 - orig: 32, 32 + xy: 283, 613 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -fuse-icon-small +holostone-icon-large rotate: false - xy: 878, 157 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ghoul-factory-icon-medium - rotate: false - xy: 849, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ghoul-factory-icon-small - rotate: false - xy: 904, 157 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -glaive-ship-pad-icon-medium - rotate: false - xy: 863, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -glaive-ship-pad-icon-small - rotate: false - xy: 930, 157 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -graphite-press-icon-medium - rotate: false - xy: 863, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -graphite-press-icon-small - rotate: false - xy: 956, 157 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -grass-icon-small - rotate: false - xy: 982, 157 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -hail - rotate: false - xy: 863, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -hail-icon-full - rotate: false - xy: 863, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -hail-icon-small - rotate: false - xy: 644, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -holostone-icon-small - rotate: false - xy: 508, 109 - size: 24, 24 - orig: 24, 24 + xy: 233, 563 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 hotrock-icon-large rotate: false - xy: 1, 975 + xy: 183, 520 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -hotrock-icon-small - rotate: false - xy: 479, 92 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 ice-icon-large rotate: false - xy: 1, 925 + xy: 133, 519 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ice-icon-small - rotate: false - xy: 534, 109 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 ice-snow-icon-large rotate: false - xy: 1, 875 + xy: 283, 563 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ice-snow-icon-small - rotate: false - xy: 560, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 icerocks-icon-large rotate: false - xy: 1, 825 + xy: 623, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icerocks-icon-small - rotate: false - xy: 586, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 ignarock-icon-large rotate: false - xy: 1, 725 + xy: 723, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ignarock-icon-small - rotate: false - xy: 722, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 impact-reactor-icon-large rotate: false - xy: 1, 675 + xy: 773, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -impact-reactor-icon-medium - rotate: false - xy: 863, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -impact-reactor-icon-small - rotate: false - xy: 748, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 incinerator-icon-large rotate: false - xy: 1, 625 + xy: 823, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -incinerator-icon-small - rotate: false - xy: 774, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -item-blast-compound-medium - rotate: false - xy: 638, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-blast-compound-xlarge rotate: false - xy: 401, 983 + xy: 977, 773 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-coal-medium - rotate: false - xy: 560, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-coal-xlarge rotate: false - xy: 401, 941 + xy: 977, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-copper-medium - rotate: false - xy: 479, 66 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-copper-xlarge rotate: false - xy: 401, 899 + xy: 533, 159 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-graphite-medium - rotate: false - xy: 505, 83 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-graphite-xlarge rotate: false - xy: 401, 857 + xy: 483, 151 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-lead-medium - rotate: false - xy: 531, 83 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-lead-xlarge rotate: false - xy: 401, 815 + xy: 983, 417 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-metaglass-medium - rotate: false - xy: 586, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-metaglass-xlarge rotate: false - xy: 401, 773 + xy: 983, 375 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-phase-fabric-medium - rotate: false - xy: 612, 94 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-phase-fabric-xlarge rotate: false - xy: 401, 731 + xy: 525, 117 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-plastanium-medium - rotate: false - xy: 664, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-plastanium-xlarge rotate: false - xy: 401, 689 + xy: 483, 109 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-pyratite-medium - rotate: false - xy: 690, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-pyratite-xlarge rotate: false - xy: 401, 647 + xy: 525, 75 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-sand-medium - rotate: false - xy: 716, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-sand-xlarge rotate: false - xy: 401, 605 + xy: 483, 67 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-scrap-medium - rotate: false - xy: 742, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-scrap-xlarge rotate: false - xy: 437, 563 + xy: 483, 25 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-silicon-medium - rotate: false - xy: 768, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-silicon-xlarge rotate: false - xy: 443, 983 + xy: 525, 33 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-source-icon-large rotate: false - xy: 1, 575 + xy: 873, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -item-source-icon-small - rotate: false - xy: 826, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -item-spore-pod-medium - rotate: false - xy: 852, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-spore-pod-xlarge rotate: false - xy: 443, 941 + xy: 567, 117 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-surge-alloy-medium - rotate: false - xy: 878, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-surge-alloy-xlarge rotate: false - xy: 443, 899 + xy: 567, 75 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-thorium-medium - rotate: false - xy: 904, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-thorium-xlarge rotate: false - xy: 443, 857 + xy: 567, 33 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-titanium-medium - rotate: false - xy: 930, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 item-titanium-xlarge rotate: false - xy: 443, 815 + xy: 609, 117 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-void-icon-large rotate: false - xy: 1, 525 + xy: 923, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -item-void-icon-small - rotate: false - xy: 956, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 javelin-ship-pad-icon-large rotate: false - xy: 1, 425 + xy: 623, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -javelin-ship-pad-icon-medium - rotate: false - xy: 927, 685 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -javelin-ship-pad-icon-small - rotate: false - xy: 982, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 junction-icon-large rotate: false - xy: 1, 325 + xy: 499, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -junction-icon-small - rotate: false - xy: 826, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 kiln-icon-large rotate: false - xy: 1, 275 + xy: 441, 551 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -kiln-icon-medium - rotate: false - xy: 927, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -kiln-icon-small - rotate: false - xy: 794, 89 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 lancer-icon-large rotate: false - xy: 1, 225 + xy: 383, 543 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -lancer-icon-medium - rotate: false - xy: 917, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -lancer-icon-small - rotate: false - xy: 638, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 laser-drill-icon-large rotate: false - xy: 1, 175 + xy: 333, 535 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -laser-drill-icon-medium - rotate: false - xy: 917, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -laser-drill-icon-small - rotate: false - xy: 557, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 launch-pad-icon-large rotate: false - xy: 1, 125 + xy: 233, 513 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -launch-pad-icon-medium - rotate: false - xy: 931, 991 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -launch-pad-icon-small - rotate: false - xy: 479, 40 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 launch-pad-large-icon-large rotate: false - xy: 1, 75 + xy: 183, 470 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -launch-pad-large-icon-medium - rotate: false - xy: 931, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -launch-pad-large-icon-small - rotate: false - xy: 411, 28 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 liquid-junction-icon-large rotate: false - xy: 51, 975 + xy: 283, 513 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -liquid-junction-icon-small - rotate: false - xy: 437, 28 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -liquid-router-icon-full - rotate: false - xy: 931, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 liquid-router-icon-large rotate: false - xy: 51, 925 + xy: 673, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -liquid-router-icon-small - rotate: false - xy: 351, 5 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 liquid-source-icon-large rotate: false - xy: 51, 875 + xy: 723, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -liquid-source-icon-small - rotate: false - xy: 377, 5 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 liquid-tank-icon-large rotate: false - xy: 51, 825 + xy: 773, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -liquid-tank-icon-medium - rotate: false - xy: 951, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-tank-icon-small - rotate: false - xy: 505, 57 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 magmarock-icon-large rotate: false - xy: 51, 775 + xy: 823, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -magmarock-icon-small - rotate: false - xy: 531, 57 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 mass-driver-icon-large rotate: false - xy: 51, 725 + xy: 873, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -mass-driver-icon-medium - rotate: false - xy: 961, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mass-driver-icon-small - rotate: false - xy: 583, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 mech-icon-alpha-mech rotate: false - xy: 51, 675 + xy: 923, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 51, 625 + xy: 973, 609 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 51, 575 + xy: 615, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +mech-icon-glaive-ship + rotate: false + xy: 133, 835 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 mech-icon-javelin-ship rotate: false - xy: 51, 525 + xy: 549, 551 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +mech-icon-omega-mech + rotate: false + xy: 191, 778 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 +mech-icon-tau-mech + rotate: false + xy: 133, 777 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 +mech-icon-trident-ship + rotate: false + xy: 249, 763 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 mechanical-drill-icon-large rotate: false - xy: 51, 475 + xy: 491, 543 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -mechanical-drill-icon-medium - rotate: false - xy: 961, 617 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mechanical-drill-icon-small - rotate: false - xy: 609, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 mechanical-pump-icon-large rotate: false - xy: 51, 425 + xy: 433, 501 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -mechanical-pump-icon-small - rotate: false - xy: 664, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 meltdown-icon-large rotate: false - xy: 51, 375 + xy: 383, 493 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -meltdown-icon-medium - rotate: false - xy: 965, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -meltdown-icon-small - rotate: false - xy: 690, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 melter-icon-large rotate: false - xy: 51, 325 + xy: 333, 485 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -melter-icon-small - rotate: false - xy: 716, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 mend-projector-icon-large rotate: false - xy: 51, 275 + xy: 233, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -mend-projector-icon-medium - rotate: false - xy: 965, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -mend-projector-icon-small - rotate: false - xy: 742, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 mender-icon-large rotate: false - xy: 51, 225 + xy: 183, 420 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -mender-icon-small - rotate: false - xy: 768, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 metal-floor-2-icon-large rotate: false - xy: 51, 175 + xy: 133, 419 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-2-icon-small - rotate: false - xy: 852, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 metal-floor-3-icon-large rotate: false - xy: 51, 125 + xy: 283, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-3-icon-small - rotate: false - xy: 878, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 metal-floor-5-icon-large rotate: false - xy: 51, 75 + xy: 665, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-5-icon-small - rotate: false - xy: 904, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 metal-floor-damaged-icon-large rotate: false - xy: 51, 25 + xy: 715, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-damaged-icon-small - rotate: false - xy: 930, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 metal-floor-icon-large rotate: false - xy: 101, 975 + xy: 765, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -metal-floor-icon-small - rotate: false - xy: 956, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 moss-icon-large rotate: false - xy: 101, 925 + xy: 815, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -moss-icon-small - rotate: false - xy: 982, 105 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 multi-press-icon-large rotate: false - xy: 101, 875 + xy: 865, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -multi-press-icon-medium - rotate: false - xy: 965, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -multi-press-icon-small - rotate: false - xy: 820, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 oil-extractor-icon-large rotate: false - xy: 101, 825 + xy: 915, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -oil-extractor-icon-medium - rotate: false - xy: 965, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -oil-extractor-icon-small - rotate: false - xy: 794, 63 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 omega-mech-pad-icon-large rotate: false - xy: 101, 775 + xy: 965, 559 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -omega-mech-pad-icon-medium - rotate: false - xy: 970, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -omega-mech-pad-icon-small - rotate: false - xy: 635, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ore-coal-icon-full - rotate: false - xy: 985, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ore-coal-icon-medium - rotate: false - xy: 985, 515 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 ore-coal-icon-large rotate: false - xy: 101, 725 + xy: 599, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ore-coal-icon-small - rotate: false - xy: 557, 39 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ore-copper-icon-full - rotate: false - xy: 989, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ore-copper-icon-medium - rotate: false - xy: 989, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 ore-copper-icon-large rotate: false - xy: 101, 675 + xy: 541, 501 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ore-copper-icon-small - rotate: false - xy: 505, 31 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ore-lead-icon-full - rotate: false - xy: 985, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ore-lead-icon-medium - rotate: false - xy: 985, 481 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 ore-lead-icon-large rotate: false - xy: 101, 625 + xy: 483, 493 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ore-lead-icon-small - rotate: false - xy: 463, 14 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ore-scrap-icon-full - rotate: false - xy: 521, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ore-scrap-icon-medium - rotate: false - xy: 521, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 ore-scrap-icon-large rotate: false - xy: 101, 575 + xy: 433, 451 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ore-scrap-icon-small - rotate: false - xy: 531, 31 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ore-thorium-icon-full - rotate: false - xy: 419, 394 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ore-thorium-icon-medium - rotate: false - xy: 419, 394 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 ore-thorium-icon-large rotate: false - xy: 101, 525 + xy: 383, 443 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ore-thorium-icon-small - rotate: false - xy: 403, 2 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -ore-titanium-icon-full - rotate: false - xy: 351, 371 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ore-titanium-icon-medium - rotate: false - xy: 351, 371 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 ore-titanium-icon-large rotate: false - xy: 101, 475 + xy: 333, 435 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ore-titanium-icon-small - rotate: false - xy: 429, 2 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 overdrive-projector-icon-large rotate: false - xy: 101, 425 + xy: 233, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -overdrive-projector-icon-medium - rotate: false - xy: 385, 371 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -overdrive-projector-icon-small - rotate: false - xy: 583, 39 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 overflow-gate-icon-large rotate: false - xy: 101, 375 + xy: 183, 370 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -overflow-gate-icon-small - rotate: false - xy: 609, 39 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 pebbles-icon-large rotate: false - xy: 101, 325 + xy: 133, 369 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -pebbles-icon-small - rotate: false - xy: 661, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 phantom-factory-icon-large rotate: false - xy: 101, 275 + xy: 283, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -phantom-factory-icon-medium - rotate: false - xy: 555, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phantom-factory-icon-small - rotate: false - xy: 687, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 phase-conduit-icon-large rotate: false - xy: 101, 225 + xy: 649, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -phase-conduit-icon-small - rotate: false - xy: 713, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 phase-conveyor-icon-large rotate: false - xy: 101, 175 + xy: 699, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -phase-conveyor-icon-small - rotate: false - xy: 739, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 phase-wall-icon-large rotate: false - xy: 101, 125 + xy: 749, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -phase-wall-icon-small - rotate: false - xy: 765, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 phase-wall-large-icon-large rotate: false - xy: 101, 75 + xy: 799, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -phase-wall-large-icon-medium - rotate: false - xy: 895, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-wall-large-icon-small - rotate: false - xy: 846, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 phase-weaver-icon-large rotate: false - xy: 101, 25 + xy: 849, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -phase-weaver-icon-medium - rotate: false - xy: 929, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -phase-weaver-icon-small - rotate: false - xy: 872, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -pine-icon-medium - rotate: false - xy: 963, 413 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pine-icon-small - rotate: false - xy: 898, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 plastanium-compressor-icon-large rotate: false - xy: 151, 925 + xy: 949, 509 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -plastanium-compressor-icon-medium - rotate: false - xy: 521, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -plastanium-compressor-icon-small - rotate: false - xy: 924, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 pneumatic-drill-icon-large rotate: false - xy: 151, 875 + xy: 591, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -pneumatic-drill-icon-medium - rotate: false - xy: 419, 360 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pneumatic-drill-icon-small - rotate: false - xy: 950, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 power-node-icon-large rotate: false - xy: 151, 825 + xy: 533, 451 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -power-node-icon-small - rotate: false - xy: 976, 79 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 power-node-large-icon-large rotate: false - xy: 151, 775 + xy: 483, 443 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -power-node-large-icon-medium - rotate: false - xy: 385, 337 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -power-node-large-icon-small - rotate: false - xy: 820, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 power-source-icon-large rotate: false - xy: 151, 725 + xy: 433, 401 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -power-source-icon-small - rotate: false - xy: 791, 37 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 power-void-icon-large rotate: false - xy: 151, 675 + xy: 383, 393 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -power-void-icon-small - rotate: false - xy: 635, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -pulse-conduit-icon-full - rotate: false - xy: 725, 379 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 pulse-conduit-icon-large rotate: false - xy: 151, 625 + xy: 333, 385 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -pulse-conduit-icon-small - rotate: false - xy: 557, 13 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -pulverizer-icon-full - rotate: false - xy: 351, 303 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 pulverizer-icon-large rotate: false - xy: 151, 575 + xy: 233, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -pulverizer-icon-small - rotate: false - xy: 583, 13 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 pyratite-mixer-icon-large rotate: false - xy: 151, 525 + xy: 183, 320 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -pyratite-mixer-icon-medium - rotate: false - xy: 453, 326 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -pyratite-mixer-icon-small - rotate: false - xy: 609, 13 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -repair-point - rotate: false - xy: 487, 326 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -repair-point-icon-full - rotate: false - xy: 623, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 repair-point-icon-large rotate: false - xy: 151, 425 + xy: 283, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -repair-point-icon-small - rotate: false - xy: 489, 5 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 revenant-factory-icon-large rotate: false - xy: 151, 375 + xy: 641, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -revenant-factory-icon-medium - rotate: false - xy: 657, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -revenant-factory-icon-small - rotate: false - xy: 515, 5 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 ripple-icon-large rotate: false - xy: 151, 275 + xy: 741, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -ripple-icon-medium - rotate: false - xy: 691, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -ripple-icon-small - rotate: false - xy: 661, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -rock-icon-medium - rotate: false - xy: 725, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -rock-icon-small - rotate: false - xy: 687, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 rocks-icon-large rotate: false - xy: 151, 175 + xy: 841, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -rocks-icon-small - rotate: false - xy: 713, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 rotary-pump-icon-large rotate: false - xy: 151, 125 + xy: 891, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -rotary-pump-icon-medium - rotate: false - xy: 793, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -rotary-pump-icon-small - rotate: false - xy: 739, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 router-icon-large rotate: false - xy: 151, 75 + xy: 941, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -router-icon-small - rotate: false - xy: 765, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 rtg-generator-icon-large rotate: false - xy: 151, 25 + xy: 583, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -rtg-generator-icon-medium - rotate: false - xy: 861, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -rtg-generator-icon-small - rotate: false - xy: 846, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 salt-icon-large rotate: false - xy: 201, 975 + xy: 533, 401 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -salt-icon-small - rotate: false - xy: 872, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 saltrocks-icon-large rotate: false - xy: 201, 925 + xy: 483, 393 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -saltrocks-icon-small - rotate: false - xy: 898, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 salvo-icon-large rotate: false - xy: 201, 875 + xy: 433, 351 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -salvo-icon-medium - rotate: false - xy: 963, 345 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -salvo-icon-small - rotate: false - xy: 924, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 sand-icon-large rotate: false - xy: 201, 825 + xy: 383, 343 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -sand-icon-small - rotate: false - xy: 950, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 sand-water-icon-large rotate: false - xy: 201, 775 + xy: 333, 335 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -sand-water-icon-small - rotate: false - xy: 976, 53 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 sandrocks-icon-large rotate: false - xy: 201, 725 + xy: 233, 313 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -sandrocks-icon-small - rotate: false - xy: 817, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 scatter-icon-large rotate: false - xy: 201, 675 + xy: 183, 270 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -scatter-icon-medium - rotate: false - xy: 419, 292 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scatter-icon-small - rotate: false - xy: 791, 11 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -scorch - rotate: false - xy: 351, 269 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scorch-icon-full - rotate: false - xy: 487, 292 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 scorch-icon-large rotate: false - xy: 201, 625 + xy: 133, 269 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -scorch-icon-small - rotate: false - xy: 635, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 scrap-wall-gigantic-icon-large rotate: false - xy: 201, 575 + xy: 283, 313 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -scrap-wall-gigantic-icon-medium - rotate: false - xy: 691, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall-gigantic-icon-small - rotate: false - xy: 661, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 scrap-wall-huge-icon-large rotate: false - xy: 201, 525 + xy: 633, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -scrap-wall-huge-icon-medium - rotate: false - xy: 725, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall-huge-icon-small - rotate: false - xy: 687, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 scrap-wall-icon-large rotate: false - xy: 201, 475 + xy: 683, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -scrap-wall-icon-small - rotate: false - xy: 713, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 scrap-wall-large-icon-large rotate: false - xy: 201, 425 + xy: 733, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -scrap-wall-large-icon-medium - rotate: false - xy: 793, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -scrap-wall-large-icon-small - rotate: false - xy: 739, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 separator-icon-large rotate: false - xy: 201, 375 + xy: 783, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -separator-icon-medium - rotate: false - xy: 861, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -separator-icon-small - rotate: false - xy: 765, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 shale-boulder-icon-large rotate: false - xy: 201, 325 + xy: 833, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -shale-boulder-icon-small - rotate: false - xy: 817, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 shale-icon-large rotate: false - xy: 201, 275 + xy: 883, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -shale-icon-small - rotate: false - xy: 895, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 shalerocks-icon-large rotate: false - xy: 201, 225 + xy: 933, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -shalerocks-icon-small - rotate: false - xy: 921, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 shock-mine-icon-large rotate: false - xy: 201, 175 + xy: 583, 359 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -shock-mine-icon-small - rotate: false - xy: 947, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 shrubs-icon-large rotate: false - xy: 201, 75 + xy: 483, 343 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -shrubs-icon-small - rotate: false - xy: 973, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 silicon-smelter-icon-large rotate: false - xy: 201, 25 + xy: 433, 301 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -silicon-smelter-icon-medium - rotate: false - xy: 385, 235 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -silicon-smelter-icon-small - rotate: false - xy: 999, 27 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 snow-icon-large rotate: false - xy: 251, 975 + xy: 383, 293 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -snow-icon-small - rotate: false - xy: 895, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -snowrock-icon-medium - rotate: false - xy: 487, 258 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -snowrock-icon-small - rotate: false - xy: 921, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 snowrocks-icon-large rotate: false - xy: 251, 875 + xy: 233, 263 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -snowrocks-icon-small - rotate: false - xy: 947, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 solar-panel-icon-large rotate: false - xy: 251, 825 + xy: 183, 220 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -solar-panel-icon-small - rotate: false - xy: 973, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 solar-panel-large-icon-large rotate: false - xy: 251, 775 + xy: 133, 219 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -solar-panel-large-icon-medium - rotate: false - xy: 623, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -solar-panel-large-icon-small - rotate: false - xy: 999, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 sorter-icon-large rotate: false - xy: 251, 725 + xy: 283, 263 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spawn-icon-large rotate: false - xy: 251, 675 + xy: 583, 309 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spectre-icon-large rotate: false - xy: 251, 625 + xy: 533, 301 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -spectre-icon-medium +spirit-factory-icon-full rotate: false - xy: 793, 277 - size: 32, 32 - orig: 32, 32 + xy: 1, 893 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 spirit-factory-icon-large rotate: false - xy: 251, 525 + xy: 433, 251 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -spirit-factory-icon-medium - rotate: false - xy: 827, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 spore-cluster-icon-large rotate: false - xy: 251, 475 + xy: 383, 243 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -spore-cluster-icon-medium - rotate: false - xy: 861, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 spore-moss-icon-large rotate: false - xy: 251, 425 + xy: 333, 235 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -spore-pine-icon-medium +spore-press-icon-full rotate: false - xy: 895, 277 - size: 32, 32 - orig: 32, 32 + xy: 1, 365 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 spore-press-icon-large rotate: false - xy: 251, 325 + xy: 183, 170 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -spore-press-icon-medium - rotate: false - xy: 929, 277 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 sporerocks-icon-large rotate: false - xy: 251, 275 + xy: 133, 169 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 stone-icon-large rotate: false - xy: 251, 225 + xy: 283, 213 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-tower-icon-large rotate: false - xy: 251, 175 + xy: 583, 259 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -surge-tower-icon-medium - rotate: false - xy: 521, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 surge-wall-icon-large rotate: false - xy: 251, 125 + xy: 533, 251 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-large-icon-large rotate: false - xy: 251, 75 + xy: 483, 243 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -surge-wall-large-icon-medium +swarmer rotate: false - xy: 351, 201 - size: 32, 32 - orig: 32, 32 + xy: 1, 35 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +swarmer-icon-full + rotate: false + xy: 133, 959 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-large rotate: false - xy: 301, 975 + xy: 383, 193 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -swarmer-icon-medium - rotate: false - xy: 385, 201 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 tainted-water-icon-large rotate: false - xy: 301, 925 + xy: 333, 185 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tar-icon-large rotate: false - xy: 301, 875 + xy: 233, 163 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-pad-icon-large rotate: false - xy: 301, 725 + xy: 283, 163 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -tau-mech-pad-icon-medium +tendrils-icon-large rotate: false - xy: 453, 224 - size: 32, 32 - orig: 32, 32 + xy: 183, 70 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 thermal-generator-icon-large rotate: false - xy: 301, 675 + xy: 133, 69 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -thermal-generator-icon-medium - rotate: false - xy: 487, 224 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 thermal-pump-icon-large rotate: false - xy: 301, 625 + xy: 183, 20 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -thermal-pump-icon-medium - rotate: false - xy: 555, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 thorium-reactor-icon-large rotate: false - xy: 301, 575 + xy: 133, 19 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -thorium-reactor-icon-medium - rotate: false - xy: 589, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 thorium-wall-icon-large rotate: false - xy: 301, 525 + xy: 583, 209 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-large-icon-large rotate: false - xy: 301, 475 + xy: 533, 201 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -thorium-wall-large-icon-medium - rotate: false - xy: 657, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 thruster-icon-large rotate: false - xy: 301, 425 + xy: 483, 193 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -thruster-icon-medium - rotate: false - xy: 691, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 titan-factory-icon-large rotate: false - xy: 301, 375 + xy: 433, 151 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -titan-factory-icon-medium - rotate: false - xy: 725, 243 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 titanium-conveyor-icon-large rotate: false - xy: 301, 325 + xy: 383, 143 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-icon-large rotate: false - xy: 301, 275 + xy: 333, 135 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-large-icon-large rotate: false - xy: 301, 225 + xy: 233, 113 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -titanium-wall-large-icon-medium - rotate: false - xy: 827, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 trident-ship-pad-icon-large rotate: false - xy: 301, 175 + xy: 283, 113 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -trident-ship-pad-icon-medium - rotate: false - xy: 895, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 turbine-generator-icon-large rotate: false - xy: 301, 125 + xy: 233, 63 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -turbine-generator-icon-medium - rotate: false - xy: 929, 209 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 unit-icon-crawler rotate: false - xy: 301, 75 + xy: 233, 13 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 301, 25 + xy: 283, 63 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +unit-icon-eruptor + rotate: false + xy: 859, 959 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +unit-icon-fortress + rotate: false + xy: 925, 959 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +unit-icon-titan + rotate: false + xy: 67, 893 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 unloader-icon-large rotate: false - xy: 351, 975 + xy: 283, 13 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vault-icon-large rotate: false - xy: 351, 925 + xy: 433, 101 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -vault-icon-medium +water-extractor-icon-full rotate: false - xy: 521, 175 - size: 32, 32 - orig: 32, 32 + xy: 67, 695 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 water-extractor-icon-large rotate: false - xy: 351, 875 + xy: 383, 93 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -water-extractor-icon-medium - rotate: false - xy: 419, 156 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 water-icon-large rotate: false - xy: 351, 825 + xy: 333, 85 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +wave + rotate: false + xy: 67, 431 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +wave-icon-full + rotate: false + xy: 67, 299 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 wave-icon-large rotate: false - xy: 351, 775 + xy: 333, 35 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -wave-icon-medium - rotate: false - xy: 351, 133 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 white-tree-dead-icon-large rotate: false - xy: 351, 725 + xy: 383, 43 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -white-tree-dead-icon-medium - rotate: false - xy: 385, 133 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 white-tree-icon-large rotate: false - xy: 351, 675 + xy: 433, 51 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -white-tree-icon-medium +wraith-factory-icon-full rotate: false - xy: 453, 156 - size: 32, 32 - orig: 32, 32 + xy: 67, 101 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 wraith-factory-icon-large rotate: false - xy: 351, 575 + xy: 583, 159 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -wraith-factory-icon-medium +alpha-mech rotate: false - xy: 487, 156 - size: 32, 32 - orig: 32, 32 + xy: 438, 909 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -item-biomatter +alpha-mech-base rotate: false - xy: 891, 583 - size: 32, 32 - orig: 32, 32 + xy: 477, 801 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -item-blast-compound +alpha-mech-leg rotate: false - xy: 893, 685 - size: 32, 32 - orig: 32, 32 + xy: 484, 859 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -item-coal +delta-mech rotate: false - xy: 893, 651 - size: 32, 32 - orig: 32, 32 + xy: 241, 663 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -item-copper +delta-mech-base rotate: false - xy: 893, 617 - size: 32, 32 - orig: 32, 32 + xy: 183, 620 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -item-graphite +delta-mech-leg rotate: false - xy: 887, 549 - size: 32, 32 - orig: 32, 32 + xy: 133, 619 + size: 48, 48 + orig: 48, 48 offset: 0, 0 index: -1 -item-lead +omega-mech rotate: false - xy: 883, 515 - size: 32, 32 - orig: 32, 32 + xy: 191, 720 + size: 56, 56 + orig: 56, 56 offset: 0, 0 index: -1 -item-metaglass +omega-mech-base rotate: false - xy: 883, 481 - size: 32, 32 - orig: 32, 32 + xy: 133, 719 + size: 56, 56 + orig: 56, 56 offset: 0, 0 index: -1 -item-phase-fabric +omega-mech-leg rotate: false - xy: 897, 991 - size: 32, 32 - orig: 32, 32 + xy: 307, 763 + size: 56, 56 + orig: 56, 56 offset: 0, 0 index: -1 -item-plastanium +tau-mech rotate: false - xy: 897, 957 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-pyratite - rotate: false - xy: 897, 923 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-sand - rotate: false - xy: 897, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-scrap - rotate: false - xy: 897, 855 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-silicon - rotate: false - xy: 897, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-spore-pod - rotate: false - xy: 897, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-surge-alloy - rotate: false - xy: 897, 719 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-thorium - rotate: false - xy: 902, 447 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -item-titanium - rotate: false - xy: 921, 549 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-cryofluid - rotate: false - xy: 931, 889 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-oil - rotate: false - xy: 931, 821 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-slag - rotate: false - xy: 959, 583 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -liquid-water - rotate: false - xy: 961, 685 - size: 32, 32 - orig: 32, 32 + xy: 365, 785 + size: 56, 56 + orig: 56, 56 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 301, 825 + xy: 183, 120 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 301, 775 + xy: 133, 119 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +dart-ship + rotate: false + xy: 415, 693 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +glaive-ship + rotate: false + xy: 199, 836 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 javelin-ship rotate: false - xy: 1, 475 + xy: 973, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 1, 375 + xy: 565, 601 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -bar +trident-ship rotate: false - xy: 586, 171 - size: 27, 36 - split: 9, 9, 9, 9 - orig: 27, 36 + xy: 380, 901 + size: 56, 56 + orig: 56, 56 offset: 0, 0 index: -1 -bar-top +shape-3 rotate: false - xy: 479, 118 - size: 27, 36 - split: 9, 10, 9, 10 - orig: 27, 36 + xy: 199, 894 + size: 63, 63 + orig: 63, 63 offset: 0, 0 index: -1 button rotate: false - xy: 485, 880 + xy: 677, 17 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8497,7 +5058,7 @@ button index: -1 button-disabled rotate: false - xy: 443, 718 + xy: 984, 880 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8505,7 +5066,7 @@ button-disabled index: -1 button-down rotate: false - xy: 443, 689 + xy: 1, 6 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8513,7 +5074,7 @@ button-down index: -1 button-edge-1 rotate: false - xy: 443, 660 + xy: 39, 6 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8521,7 +5082,7 @@ button-edge-1 index: -1 button-edge-2 rotate: false - xy: 443, 631 + xy: 77, 6 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8529,7 +5090,7 @@ button-edge-2 index: -1 button-edge-3 rotate: false - xy: 437, 534 + xy: 525, 4 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8537,7 +5098,7 @@ button-edge-3 index: -1 button-edge-4 rotate: false - xy: 475, 534 + xy: 563, 4 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8545,7 +5106,7 @@ button-edge-4 index: -1 button-over rotate: false - xy: 485, 996 + xy: 601, 4 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8553,7 +5114,7 @@ button-over index: -1 button-right rotate: false - xy: 485, 909 + xy: 647, 46 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8561,7 +5122,7 @@ button-right index: -1 button-right-down rotate: false - xy: 485, 967 + xy: 609, 46 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8569,51 +5130,57 @@ button-right-down index: -1 button-right-over rotate: false - xy: 485, 938 + xy: 639, 17 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 offset: 0, 0 index: -1 -button-select +check-disabled rotate: false - xy: 999, 921 - size: 24, 24 - split: 4, 4, 4, 4 - orig: 24, 24 + xy: 743, 375 + size: 32, 32 + orig: 32, 32 offset: 0, 0 index: -1 check-off rotate: false - xy: 557, 855 + xy: 739, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 557, 821 + xy: 739, 273 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +check-on-disabled + rotate: false + xy: 739, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 557, 787 + xy: 757, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 557, 753 + xy: 773, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 content-background rotate: false - xy: 485, 764 + xy: 633, 288 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8621,7 +5188,7 @@ content-background index: -1 content-background-locked rotate: false - xy: 485, 851 + xy: 633, 346 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8629,7 +5196,7 @@ content-background-locked index: -1 content-background-noitems rotate: false - xy: 485, 822 + xy: 633, 380 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8637,79 +5204,29 @@ content-background-noitems index: -1 content-background-over rotate: false - xy: 485, 793 + xy: 633, 317 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 offset: 0, 0 index: -1 -empty-sector - rotate: false - xy: 859, 651 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-cancel-2 - rotate: false - xy: 612, 120 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -icon-check-2 - rotate: false - xy: 670, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 icon-generated rotate: false - xy: 1, 775 + xy: 673, 659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -icon-power-requirement - rotate: false - xy: 863, 787 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-tree-locked - rotate: false - xy: 863, 753 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-zone - rotate: false - xy: 696, 131 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 icon-zone-locked rotate: false - xy: 351, 531 + xy: 977, 815 size: 42, 42 orig: 42, 42 offset: 0, 0 index: -1 -inventory - rotate: false - xy: 800, 115 - size: 24, 40 - split: 10, 10, 10, 14 - orig: 24, 40 - offset: 0, 0 - index: -1 pane rotate: false - xy: 481, 630 + xy: 651, 154 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8717,23 +5234,15 @@ pane index: -1 pane-2 rotate: false - xy: 481, 659 + xy: 633, 183 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 offset: 0, 0 index: -1 -scroll - rotate: false - xy: 869, 16 - size: 24, 35 - split: 10, 10, 6, 5 - orig: 24, 35 - offset: 0, 0 - index: -1 scroll-horizontal rotate: false - xy: 389, 476 + xy: 988, 933 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 @@ -8741,51 +5250,15 @@ scroll-horizontal index: -1 scroll-knob-horizontal-black rotate: false - xy: 443, 789 + xy: 333, 9 size: 40, 24 split: 11, 10, 10, 10 orig: 40, 24 offset: 0, 0 index: -1 -scroll-knob-vertical-black - rotate: false - xy: 843, 11 - size: 24, 40 - split: 10, 10, 6, 10 - orig: 24, 40 - offset: 0, 0 - index: -1 -sector-select - rotate: false - xy: 827, 311 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -slider-knob - rotate: false - xy: 555, 169 - size: 29, 38 - orig: 29, 38 - offset: 0, 0 - index: -1 -slider-knob-down - rotate: false - xy: 521, 135 - size: 29, 38 - orig: 29, 38 - offset: 0, 0 - index: -1 -slider-knob-over - rotate: false - xy: 521, 135 - size: 29, 38 - orig: 29, 38 - offset: 0, 0 - index: -1 underline rotate: false - xy: 389, 502 + xy: 671, 380 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8793,7 +5266,15 @@ underline index: -1 underline-2 rotate: false - xy: 351, 502 + xy: 685, 49 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +underline-disabled + rotate: false + xy: 715, 20 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8801,1370 +5282,5212 @@ underline-2 index: -1 underline-red rotate: false - xy: 351, 473 + xy: 671, 346 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 offset: 0, 0 index: -1 -window-empty +crawler rotate: false - xy: 615, 146 - size: 27, 61 - split: 8, 8, 44, 11 - orig: 27, 61 - offset: 0, 0 - index: -1 -spirit - rotate: false - xy: 251, 575 + xy: 888, 909 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +crawler-base + rotate: false + xy: 934, 859 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +crawler-leg + rotate: false + xy: 927, 809 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +dagger + rotate: false + xy: 365, 735 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +dagger-base + rotate: false + xy: 249, 713 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +dagger-leg + rotate: false + xy: 133, 669 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +phantom + rotate: false + xy: 322, 901 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 +power-cell + rotate: false + xy: 322, 843 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 +spirit + rotate: false + xy: 483, 293 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +titan + rotate: false + xy: 397, 959 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +titan-leg + rotate: false + xy: 463, 959 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 wraith rotate: false - xy: 351, 625 + xy: 433, 1 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +artillery-equip + rotate: false + xy: 527, 801 + size: 48, 56 + orig: 48, 56 + offset: 0, 0 + index: -1 +blaster-equip + rotate: false + xy: 588, 909 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +bomber-equip + rotate: false + xy: 627, 809 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +missiles-equip + rotate: false + xy: 627, 809 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +chain-blaster-equip + rotate: false + xy: 677, 809 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +chaos-equip + rotate: false + xy: 264, 821 + size: 56, 136 + orig: 56, 136 + offset: 0, 0 + index: -1 +eruption-equip + rotate: false + xy: 573, 651 + size: 48, 56 + orig: 48, 56 + offset: 0, 0 + index: -1 +flakgun-equip + rotate: false + xy: 465, 651 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +flamethrower-equip + rotate: false + xy: 515, 643 + size: 48, 56 + orig: 48, 56 + offset: 0, 0 + index: -1 +heal-blaster-equip + rotate: false + xy: 333, 585 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lich-missiles-equip rotate: false - xy: 1, 25 + xy: 133, 469 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 reaper-gun-equip rotate: false - xy: 151, 475 + xy: 133, 319 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-missiles-equip rotate: false - xy: 151, 325 + xy: 691, 459 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 201, 125 + xy: 533, 351 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 251, 25 + xy: 433, 201 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sprites_fallback5.png -size: 512,128 +size: 1024,1024 format: RGBA8888 filter: Nearest,Nearest repeat: none +mender + rotate: false + xy: 341, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mender-icon-editor + rotate: false + xy: 341, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mender-top + rotate: false + xy: 375, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shock-mine + rotate: false + xy: 647, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-0-0 + rotate: false + xy: 307, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-icon-editor + rotate: false + xy: 307, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-0-1 + rotate: false + xy: 341, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-0-2 + rotate: false + xy: 375, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-0-3 + rotate: false + xy: 409, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-1-0 + rotate: false + xy: 443, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-1-1 + rotate: false + xy: 477, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-1-2 + rotate: false + xy: 511, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-1-3 + rotate: false + xy: 545, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-2-0 + rotate: false + xy: 579, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-2-1 + rotate: false + xy: 613, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-2-2 + rotate: false + xy: 647, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-2-3 + rotate: false + xy: 681, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-3-0 + rotate: false + xy: 715, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-3-1 + rotate: false + xy: 749, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-3-2 + rotate: false + xy: 1, 209 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-3-3 + rotate: false + xy: 35, 243 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-4-0 + rotate: false + xy: 69, 277 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-4-1 + rotate: false + xy: 103, 311 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-4-2 + rotate: false + xy: 137, 345 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-4-3 + rotate: false + xy: 171, 379 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +junction + rotate: false + xy: 1, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +junction-icon-editor + rotate: false + xy: 1, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +overflow-gate + rotate: false + xy: 171, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +overflow-gate-icon-editor + rotate: false + xy: 171, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor + rotate: false + xy: 409, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-icon-editor + rotate: false + xy: 409, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-arrow + rotate: false + xy: 443, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-bridge + rotate: false + xy: 477, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-end + rotate: false + xy: 511, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +router + rotate: false + xy: 545, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +router-icon-editor + rotate: false + xy: 545, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sorter + rotate: false + xy: 307, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sorter-icon-editor + rotate: false + xy: 307, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spawn + rotate: false + xy: 341, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-junction + rotate: false + xy: 273, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-junction-icon-editor + rotate: false + xy: 273, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-bottom + rotate: false + xy: 341, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-liquid + rotate: false + xy: 443, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-top + rotate: false + xy: 477, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mechanical-pump + rotate: false + xy: 171, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit + rotate: false + xy: 273, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit-icon-editor + rotate: false + xy: 273, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit-arrow + rotate: false + xy: 307, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit-bridge + rotate: false + xy: 341, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit-end + rotate: false + xy: 375, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-0 + rotate: false + xy: 477, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-1 + rotate: false + xy: 511, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-2 + rotate: false + xy: 545, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-3 + rotate: false + xy: 579, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-4 + rotate: false + xy: 613, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-5 + rotate: false + xy: 1, 345 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-top-6 + rotate: false + xy: 35, 379 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-node + rotate: false + xy: 137, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-node-icon-editor + rotate: false + xy: 137, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-source + rotate: false + xy: 205, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-void + rotate: false + xy: 273, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +powerinfinite + rotate: false + xy: 341, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +powervoid + rotate: false + xy: 375, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rtg-generator-top + rotate: false + xy: 613, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel + rotate: false + xy: 205, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel-icon-editor + rotate: false + xy: 205, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +incinerator + rotate: false + xy: 273, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +incinerator-icon-editor + rotate: false + xy: 273, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-source + rotate: false + xy: 273, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-source-icon-editor + rotate: false + xy: 273, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-void + rotate: false + xy: 443, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-void-icon-editor + rotate: false + xy: 443, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +lavasmelter + rotate: false + xy: 205, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-source + rotate: false + xy: 1, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-source-icon-editor + rotate: false + xy: 1, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +melter + rotate: false + xy: 273, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +melter-icon-editor + rotate: false + xy: 273, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer + rotate: false + xy: 69, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer-rotator + rotate: false + xy: 171, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +smelter + rotate: false + xy: 103, 379 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sortedunloader + rotate: false + xy: 273, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +unloader + rotate: false + xy: 375, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +unloader-icon-editor + rotate: false + xy: 375, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scorch-heat + rotate: false + xy: 137, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +repair-point-base + rotate: false + xy: 273, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall + rotate: false + xy: 545, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall-icon-editor + rotate: false + xy: 545, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall1 + rotate: false + xy: 239, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall2 + rotate: false + xy: 273, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall3 + rotate: false + xy: 307, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall4 + rotate: false + xy: 341, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall5 + rotate: false + xy: 341, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-wall + rotate: false + xy: 647, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-wall-icon-editor + rotate: false + xy: 647, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-wall + rotate: false + xy: 171, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-wall-icon-editor + rotate: false + xy: 171, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-wall + rotate: false + xy: 205, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-wall-icon-editor + rotate: false + xy: 205, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dunerocks-icon-editor + rotate: false + xy: 1, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +duo-icon-editor + rotate: false + xy: 35, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-char2 + rotate: false + xy: 35, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-char3 + rotate: false + xy: 69, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-craters2 + rotate: false + xy: 1, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-craters3 + rotate: false + xy: 35, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand2 + rotate: false + xy: 69, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-darksand3 + rotate: false + xy: 103, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-grass1 + rotate: false + xy: 1, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +grass-icon-editor + rotate: false + xy: 1, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-grass2 + rotate: false + xy: 35, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-grass3 + rotate: false + xy: 69, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-holostone1 + rotate: false + xy: 103, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +holostone-icon-editor + rotate: false + xy: 103, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-holostone2 + rotate: false + xy: 137, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-holostone3 + rotate: false + xy: 1, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-hotrock1 + rotate: false + xy: 35, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hotrock-icon-editor + rotate: false + xy: 35, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-hotrock2 + rotate: false + xy: 69, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-hotrock3 + rotate: false + xy: 103, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice-snow1 + rotate: false + xy: 35, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ice-snow-icon-editor + rotate: false + xy: 35, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice-snow2 + rotate: false + xy: 69, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice-snow3 + rotate: false + xy: 103, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice1 + rotate: false + xy: 137, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ice-icon-editor + rotate: false + xy: 137, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice2 + rotate: false + xy: 171, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ice3 + rotate: false + xy: 1, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ignarock1 + rotate: false + xy: 137, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ignarock-icon-editor + rotate: false + xy: 137, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ignarock2 + rotate: false + xy: 171, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ignarock3 + rotate: false + xy: 205, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-magmarock1 + rotate: false + xy: 1, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +magmarock-icon-editor + rotate: false + xy: 1, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-magmarock2 + rotate: false + xy: 35, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-magmarock3 + rotate: false + xy: 69, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor + rotate: false + xy: 103, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-icon-editor + rotate: false + xy: 103, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-2 + rotate: false + xy: 137, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-2-icon-editor + rotate: false + xy: 137, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-3 + rotate: false + xy: 171, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-3-icon-editor + rotate: false + xy: 171, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-5 + rotate: false + xy: 205, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-5-icon-editor + rotate: false + xy: 205, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-damaged1 + rotate: false + xy: 239, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metal-floor-damaged-icon-editor + rotate: false + xy: 239, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-damaged2 + rotate: false + xy: 1, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-metal-floor-damaged3 + rotate: false + xy: 35, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-moss1 + rotate: false + xy: 69, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +moss-icon-editor + rotate: false + xy: 69, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-moss2 + rotate: false + xy: 103, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-moss3 + rotate: false + xy: 137, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-coal1 + rotate: false + xy: 171, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-coal2 + rotate: false + xy: 205, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-coal3 + rotate: false + xy: 239, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-copper1 + rotate: false + xy: 273, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-copper2 + rotate: false + xy: 1, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-copper3 + rotate: false + xy: 35, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-lead1 + rotate: false + xy: 69, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-lead2 + rotate: false + xy: 103, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-lead3 + rotate: false + xy: 137, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-scrap1 + rotate: false + xy: 171, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-scrap2 + rotate: false + xy: 205, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-scrap3 + rotate: false + xy: 239, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-thorium1 + rotate: false + xy: 273, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-thorium2 + rotate: false + xy: 307, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-thorium3 + rotate: false + xy: 1, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-titanium1 + rotate: false + xy: 35, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-titanium2 + rotate: false + xy: 69, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-ore-titanium3 + rotate: false + xy: 103, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-pebbles1 + rotate: false + xy: 137, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-pebbles2 + rotate: false + xy: 171, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-pebbles3 + rotate: false + xy: 205, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-salt + rotate: false + xy: 239, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +salt-icon-editor + rotate: false + xy: 239, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand-water + rotate: false + xy: 1, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sand-water-icon-editor + rotate: false + xy: 1, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand1 + rotate: false + xy: 273, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sand-icon-editor + rotate: false + xy: 273, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand2 + rotate: false + xy: 307, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-sand3 + rotate: false + xy: 341, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-shale1 + rotate: false + xy: 35, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shale-icon-editor + rotate: false + xy: 35, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-shale2 + rotate: false + xy: 69, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-shale3 + rotate: false + xy: 103, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-snow1 + rotate: false + xy: 137, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +snow-icon-editor + rotate: false + xy: 137, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-snow2 + rotate: false + xy: 171, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-snow3 + rotate: false + xy: 205, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spore-moss1 + rotate: false + xy: 239, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spore-moss-icon-editor + rotate: false + xy: 239, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spore-moss2 + rotate: false + xy: 273, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-spore-moss3 + rotate: false + xy: 307, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-stone1 + rotate: false + xy: 341, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +stone-icon-editor + rotate: false + xy: 341, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-stone2 + rotate: false + xy: 375, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-stone3 + rotate: false + xy: 1, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tainted-water + rotate: false + xy: 35, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tainted-water-icon-editor + rotate: false + xy: 35, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tar + rotate: false + xy: 69, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tar-icon-editor + rotate: false + xy: 69, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils1 + rotate: false + xy: 103, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils2 + rotate: false + xy: 137, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-tendrils3 + rotate: false + xy: 171, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +editor-water + rotate: false + xy: 205, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +water-icon-editor + rotate: false + xy: 205, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hail-icon-editor + rotate: false + xy: 69, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +icerocks-icon-editor + rotate: false + xy: 137, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-icon-editor + rotate: false + xy: 375, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mechanical-pump-icon-editor + rotate: false + xy: 205, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pebbles-icon-editor + rotate: false + xy: 205, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-source-icon-editor + rotate: false + xy: 239, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-void-icon-editor + rotate: false + xy: 307, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-icon-editor + rotate: false + xy: 409, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer-icon-editor + rotate: false + xy: 103, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +repair-point-icon-editor + rotate: false + xy: 307, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rocks-icon-editor + rotate: false + xy: 477, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +saltrocks-icon-editor + rotate: false + xy: 647, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sandrocks-icon-editor + rotate: false + xy: 35, 345 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scorch-icon-editor + rotate: false + xy: 171, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-icon-editor + rotate: false + xy: 443, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shale-boulder-icon-editor + rotate: false + xy: 579, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shalerocks-icon-editor + rotate: false + xy: 613, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shock-mine-icon-editor + rotate: false + xy: 681, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +shrubs-icon-editor + rotate: false + xy: 35, 311 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +snowrocks-icon-editor + rotate: false + xy: 171, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spawn-icon-editor + rotate: false + xy: 375, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sporerocks-icon-editor + rotate: false + xy: 579, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tendrils-icon-editor + rotate: false + xy: 35, 277 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 casing rotate: false - xy: 481, 63 + xy: 197, 1 size: 8, 16 orig: 8, 16 offset: 0, 0 index: -1 laser rotate: false - xy: 503, 79 + xy: 1019, 913 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 minelaser rotate: false - xy: 495, 67 + xy: 1017, 975 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 scale_marker rotate: false - xy: 387, 1 + xy: 53, 17 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 +scorch1 + rotate: false + xy: 1, 67 + size: 28, 100 + orig: 28, 100 + offset: 0, 0 + index: -1 +scorch2 + rotate: false + xy: 31, 67 + size: 28, 100 + orig: 28, 100 + offset: 0, 0 + index: -1 +scorch3 + rotate: false + xy: 647, 787 + size: 28, 100 + orig: 28, 100 + offset: 0, 0 + index: -1 +scorch4 + rotate: false + xy: 677, 787 + size: 28, 100 + orig: 28, 100 + offset: 0, 0 + index: -1 +scorch5 + rotate: false + xy: 707, 821 + size: 28, 100 + orig: 28, 100 + offset: 0, 0 + index: -1 +shot + rotate: false + xy: 1, 277 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 transfer rotate: false - xy: 501, 29 + xy: 233, 225 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 +transfer-arrow + rotate: false + xy: 273, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +alloy-smelter-icon-small + rotate: false + xy: 681, 897 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +arc-icon-small + rotate: false + xy: 783, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +battery-icon-small + rotate: false + xy: 69, 251 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +battery-large-icon-small + rotate: false + xy: 103, 285 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +blast-drill-icon-small + rotate: false + xy: 137, 319 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +blast-mixer-icon-small + rotate: false + xy: 171, 353 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +bridge-conduit-icon-small + rotate: false + xy: 205, 387 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +bridge-conveyor-icon-small + rotate: false + xy: 239, 421 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +char-icon-small + rotate: false + xy: 307, 489 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +cliffs-icon-small + rotate: false + xy: 341, 523 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +coal-centrifuge-icon-small + rotate: false + xy: 375, 557 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +combustion-generator-icon-small + rotate: false + xy: 409, 591 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +conduit-icon-small + rotate: false + xy: 443, 625 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +container-icon-small + rotate: false + xy: 477, 659 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +conveyor-icon-small + rotate: false + xy: 511, 693 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +copper-wall-icon-small + rotate: false + xy: 545, 727 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +copper-wall-large-icon-small + rotate: false + xy: 579, 761 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +core-foundation-icon-small + rotate: false + xy: 35, 217 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +core-nucleus-icon-small + rotate: false + xy: 613, 789 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +core-shard-icon-small + rotate: false + xy: 707, 795 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +craters-icon-small + rotate: false + xy: 1, 3 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +crawler-factory-icon-small + rotate: false + xy: 715, 931 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +creeptree-icon-small + rotate: false + xy: 809, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +cryofluidmixer-icon-small + rotate: false + xy: 27, 3 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +cultivator-icon-small + rotate: false + xy: 835, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +cyclone-icon-small + rotate: false + xy: 861, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dagger-factory-icon-small + rotate: false + xy: 887, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-metal-icon-small + rotate: false + xy: 913, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-panel-1-icon-small + rotate: false + xy: 939, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-panel-2-icon-small + rotate: false + xy: 965, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-panel-3-icon-small + rotate: false + xy: 991, 999 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-panel-4-icon-small + rotate: false + xy: 737, 902 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-panel-5-icon-small + rotate: false + xy: 737, 876 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dark-panel-6-icon-small + rotate: false + xy: 737, 850 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +darksand-icon-small + rotate: false + xy: 737, 824 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +darksand-tainted-water-icon-small + rotate: false + xy: 763, 902 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +darksand-water-icon-small + rotate: false + xy: 763, 876 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dart-mech-pad-icon-small + rotate: false + xy: 763, 850 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +deepwater-icon-small + rotate: false + xy: 763, 824 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +delta-mech-pad-icon-small + rotate: false + xy: 61, 217 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +differential-generator-icon-small + rotate: false + xy: 95, 251 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +distributor-icon-small + rotate: false + xy: 87, 225 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +door-icon-small + rotate: false + xy: 129, 285 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +door-large-icon-small + rotate: false + xy: 121, 259 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +dunerocks-icon-small + rotate: false + xy: 163, 319 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +duo + rotate: false + xy: 1, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +duo-icon-full + rotate: false + xy: 1, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +duo-icon-small + rotate: false + xy: 155, 293 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +force-projector-icon-medium + rotate: false + xy: 273, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +force-projector-icon-small + rotate: false + xy: 197, 353 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +fortress-factory-icon-medium + rotate: false + xy: 307, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +fortress-factory-icon-small + rotate: false + xy: 189, 327 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +fuse-icon-medium + rotate: false + xy: 341, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +fuse-icon-small + rotate: false + xy: 231, 387 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ghoul-factory-icon-medium + rotate: false + xy: 375, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ghoul-factory-icon-small + rotate: false + xy: 223, 361 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +glaive-ship-pad-icon-medium + rotate: false + xy: 409, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +glaive-ship-pad-icon-small + rotate: false + xy: 265, 421 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +graphite-press-icon-medium + rotate: false + xy: 1, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +graphite-press-icon-small + rotate: false + xy: 257, 395 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +grass-icon-small + rotate: false + xy: 299, 455 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +hail + rotate: false + xy: 35, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hail-icon-full + rotate: false + xy: 103, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hail-icon-small + rotate: false + xy: 291, 429 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +holostone-icon-small + rotate: false + xy: 333, 489 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +hotrock-icon-small + rotate: false + xy: 325, 463 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ice-icon-small + rotate: false + xy: 367, 523 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ice-snow-icon-small + rotate: false + xy: 359, 497 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +icerocks-icon-small + rotate: false + xy: 401, 557 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ignarock-icon-small + rotate: false + xy: 469, 625 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +impact-reactor-icon-medium + rotate: false + xy: 239, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +impact-reactor-icon-small + rotate: false + xy: 461, 599 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +incinerator-icon-small + rotate: false + xy: 503, 659 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +item-blast-compound-medium + rotate: false + xy: 487, 591 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-blast-compound-small rotate: false - xy: 325, 93 + xy: 879, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-coal-medium + rotate: false + xy: 461, 573 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-coal-small rotate: false - xy: 333, 111 + xy: 897, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-copper-medium + rotate: false + xy: 487, 565 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-copper-small rotate: false - xy: 325, 75 + xy: 915, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-graphite-medium + rotate: false + xy: 537, 693 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-graphite-small rotate: false - xy: 325, 57 + xy: 933, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-lead-medium + rotate: false + xy: 529, 667 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-lead-small rotate: false - xy: 325, 39 + xy: 879, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-metaglass-medium + rotate: false + xy: 571, 727 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-metaglass-small rotate: false - xy: 327, 21 + xy: 897, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-phase-fabric-medium + rotate: false + xy: 563, 701 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-phase-fabric-small rotate: false - xy: 327, 3 + xy: 915, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-plastanium-medium + rotate: false + xy: 605, 761 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-plastanium-small rotate: false - xy: 343, 93 + xy: 933, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-pyratite-medium + rotate: false + xy: 597, 735 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-pyratite-small rotate: false - xy: 351, 111 + xy: 951, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-sand-medium + rotate: false + xy: 631, 761 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-sand-small rotate: false - xy: 343, 75 + xy: 897, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-scrap-medium + rotate: false + xy: 623, 735 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-scrap-small rotate: false - xy: 343, 57 + xy: 915, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-silicon-medium + rotate: false + xy: 657, 761 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-silicon-small rotate: false - xy: 343, 39 + xy: 933, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-source-icon-small + rotate: false + xy: 649, 735 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +item-spore-pod-medium + rotate: false + xy: 683, 761 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-spore-pod-small rotate: false - xy: 345, 21 + xy: 951, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-surge-alloy-medium + rotate: false + xy: 675, 735 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-surge-alloy-small rotate: false - xy: 345, 3 + xy: 969, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-thorium-medium + rotate: false + xy: 709, 769 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-thorium-small rotate: false - xy: 361, 93 + xy: 915, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-titanium-medium + rotate: false + xy: 35, 191 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 item-titanium-small rotate: false - xy: 369, 111 + xy: 933, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +item-void-icon-small + rotate: false + xy: 61, 191 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +javelin-ship-pad-icon-medium + rotate: false + xy: 477, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +javelin-ship-pad-icon-small + rotate: false + xy: 87, 199 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +junction-icon-small + rotate: false + xy: 783, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +kiln-icon-medium + rotate: false + xy: 35, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +kiln-icon-small + rotate: false + xy: 809, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +lancer-icon-medium + rotate: false + xy: 69, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +lancer-icon-small + rotate: false + xy: 835, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +laser-drill-icon-medium + rotate: false + xy: 103, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +laser-drill-icon-small + rotate: false + xy: 861, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +launch-pad-icon-medium + rotate: false + xy: 137, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +launch-pad-icon-small + rotate: false + xy: 887, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +launch-pad-large-icon-medium + rotate: false + xy: 171, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +launch-pad-large-icon-small + rotate: false + xy: 913, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +liquid-junction-icon-small + rotate: false + xy: 939, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +liquid-router-icon-full + rotate: false + xy: 409, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-icon-small + rotate: false + xy: 965, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +liquid-source-icon-small + rotate: false + xy: 991, 973 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +liquid-tank-icon-medium + rotate: false + xy: 35, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-tank-icon-small + rotate: false + xy: 778, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +magmarock-icon-small + rotate: false + xy: 804, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +mass-driver-icon-medium + rotate: false + xy: 103, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mass-driver-icon-small + rotate: false + xy: 830, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +mechanical-drill-icon-medium + rotate: false + xy: 137, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mechanical-drill-icon-small + rotate: false + xy: 856, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +mechanical-pump-icon-small + rotate: false + xy: 882, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +meltdown-icon-medium + rotate: false + xy: 239, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +meltdown-icon-small + rotate: false + xy: 908, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +melter-icon-small + rotate: false + xy: 934, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +mend-projector-icon-medium + rotate: false + xy: 307, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mend-projector-icon-small + rotate: false + xy: 960, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +mender-icon-small + rotate: false + xy: 986, 947 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +metal-floor-2-icon-small + rotate: false + xy: 113, 225 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +metal-floor-3-icon-small + rotate: false + xy: 113, 199 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +metal-floor-5-icon-small + rotate: false + xy: 147, 259 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +metal-floor-damaged-icon-small + rotate: false + xy: 139, 233 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +metal-floor-icon-small + rotate: false + xy: 139, 207 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +moss-icon-small + rotate: false + xy: 181, 293 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +multi-press-icon-medium + rotate: false + xy: 409, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +multi-press-icon-small + rotate: false + xy: 173, 267 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +oil-extractor-icon-medium + rotate: false + xy: 443, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +oil-extractor-icon-small + rotate: false + xy: 215, 327 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +omega-mech-pad-icon-medium + rotate: false + xy: 477, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +omega-mech-pad-icon-small + rotate: false + xy: 207, 301 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ore-coal-icon-full + rotate: false + xy: 511, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-coal-icon-medium + rotate: false + xy: 511, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-coal-icon-small + rotate: false + xy: 249, 361 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ore-copper-icon-full + rotate: false + xy: 545, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-copper-icon-medium + rotate: false + xy: 545, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-copper-icon-small + rotate: false + xy: 241, 335 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ore-lead-icon-full + rotate: false + xy: 1, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-lead-icon-medium + rotate: false + xy: 1, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-lead-icon-small + rotate: false + xy: 283, 395 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ore-scrap-icon-full + rotate: false + xy: 35, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-scrap-icon-medium + rotate: false + xy: 35, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-scrap-icon-small + rotate: false + xy: 275, 369 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ore-thorium-icon-full + rotate: false + xy: 69, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-thorium-icon-medium + rotate: false + xy: 69, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-thorium-icon-small + rotate: false + xy: 317, 429 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ore-titanium-icon-full + rotate: false + xy: 103, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-titanium-icon-medium + rotate: false + xy: 103, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ore-titanium-icon-small + rotate: false + xy: 309, 403 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +overdrive-projector-icon-medium + rotate: false + xy: 137, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +overdrive-projector-icon-small + rotate: false + xy: 351, 463 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +overflow-gate-icon-small + rotate: false + xy: 343, 437 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +pebbles-icon-small + rotate: false + xy: 385, 497 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +phantom-factory-icon-medium + rotate: false + xy: 239, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phantom-factory-icon-small + rotate: false + xy: 377, 471 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +phase-conduit-icon-small + rotate: false + xy: 419, 531 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +phase-conveyor-icon-small + rotate: false + xy: 411, 505 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +phase-wall-icon-small + rotate: false + xy: 521, 633 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +phase-wall-large-icon-medium + rotate: false + xy: 579, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall-large-icon-small + rotate: false + xy: 521, 607 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +phase-weaver-icon-medium + rotate: false + xy: 1, 379 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-weaver-icon-small + rotate: false + xy: 513, 581 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +pine-icon-medium + rotate: false + xy: 35, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pine-icon-small + rotate: false + xy: 513, 555 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +plastanium-compressor-icon-medium + rotate: false + xy: 69, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-compressor-icon-small + rotate: false + xy: 555, 667 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +pneumatic-drill-icon-medium + rotate: false + xy: 103, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pneumatic-drill-icon-small + rotate: false + xy: 547, 641 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +power-node-icon-small + rotate: false + xy: 547, 615 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +power-node-large-icon-medium + rotate: false + xy: 171, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-node-large-icon-small + rotate: false + xy: 589, 701 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +power-source-icon-small + rotate: false + xy: 581, 675 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +power-void-icon-small + rotate: false + xy: 615, 709 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +pulse-conduit-icon-full + rotate: false + xy: 443, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-icon-small + rotate: false + xy: 641, 709 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +pulverizer-icon-full + rotate: false + xy: 137, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer-icon-small + rotate: false + xy: 667, 709 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +pyratite-mixer-icon-medium + rotate: false + xy: 205, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pyratite-mixer-icon-small + rotate: false + xy: 701, 735 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +repair-point + rotate: false + xy: 239, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +repair-point-icon-full + rotate: false + xy: 341, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +repair-point-icon-small + rotate: false + xy: 693, 709 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +revenant-factory-icon-medium + rotate: false + xy: 375, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +revenant-factory-icon-small + rotate: false + xy: 87, 173 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +ripple-icon-medium + rotate: false + xy: 409, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +ripple-icon-small + rotate: false + xy: 113, 173 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +rock-icon-medium + rotate: false + xy: 443, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rock-icon-small + rotate: false + xy: 139, 181 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +rocks-icon-small + rotate: false + xy: 61, 165 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +rotary-pump-icon-medium + rotate: false + xy: 511, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rotary-pump-icon-small + rotate: false + xy: 61, 139 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +router-icon-small + rotate: false + xy: 87, 147 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +rtg-generator-icon-medium + rotate: false + xy: 579, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +rtg-generator-icon-small + rotate: false + xy: 61, 113 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +salt-icon-small + rotate: false + xy: 87, 121 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +saltrocks-icon-small + rotate: false + xy: 113, 147 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +salvo-icon-medium + rotate: false + xy: 1, 311 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +salvo-icon-small + rotate: false + xy: 139, 155 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +sand-icon-small + rotate: false + xy: 61, 87 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +sand-water-icon-small + rotate: false + xy: 87, 95 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +sandrocks-icon-small + rotate: false + xy: 113, 121 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scatter-icon-medium + rotate: false + xy: 69, 379 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scatter-icon-small + rotate: false + xy: 139, 129 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scorch + rotate: false + xy: 103, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scorch-icon-full + rotate: false + xy: 205, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scorch-icon-small + rotate: false + xy: 113, 95 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scrap-wall-gigantic-icon-medium + rotate: false + xy: 375, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-gigantic-icon-small + rotate: false + xy: 139, 103 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scrap-wall-huge-icon-medium + rotate: false + xy: 409, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-huge-icon-small + rotate: false + xy: 61, 61 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scrap-wall-icon-small + rotate: false + xy: 87, 69 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scrap-wall-large-icon-medium + rotate: false + xy: 477, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-large-icon-small + rotate: false + xy: 113, 69 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +separator-icon-medium + rotate: false + xy: 545, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +separator-icon-small + rotate: false + xy: 165, 233 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +shale-boulder-icon-small + rotate: false + xy: 165, 207 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +shale-icon-small + rotate: false + xy: 165, 181 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +shalerocks-icon-small + rotate: false + xy: 165, 155 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +shock-mine-icon-small + rotate: false + xy: 165, 129 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +shrubs-icon-small + rotate: false + xy: 165, 103 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +silicon-smelter-icon-medium + rotate: false + xy: 69, 345 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +silicon-smelter-icon-small + rotate: false + xy: 165, 77 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +snow-icon-small + rotate: false + xy: 165, 51 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +snowrock-icon-medium + rotate: false + xy: 137, 413 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +snowrock-icon-small + rotate: false + xy: 199, 267 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +snowrocks-icon-small + rotate: false + xy: 191, 241 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +solar-panel-icon-small + rotate: false + xy: 191, 215 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +solar-panel-large-icon-medium + rotate: false + xy: 239, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel-large-icon-small + rotate: false + xy: 191, 189 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 sorter-icon-small rotate: false - xy: 1, 103 + xy: 191, 163 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spawn-icon-small rotate: false - xy: 1, 77 + xy: 191, 137 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +spectre-icon-medium + rotate: false + xy: 409, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 spectre-icon-small rotate: false - xy: 1, 51 + xy: 191, 111 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +spirit-factory-icon-medium + rotate: false + xy: 443, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 spirit-factory-icon-small rotate: false - xy: 1, 25 + xy: 191, 85 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +spore-cluster-icon-medium + rotate: false + xy: 477, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 spore-cluster-icon-small rotate: false - xy: 27, 103 + xy: 191, 59 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-moss-icon-small rotate: false - xy: 27, 77 + xy: 233, 301 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +spore-pine-icon-medium + rotate: false + xy: 511, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 spore-pine-icon-small rotate: false - xy: 27, 51 + xy: 225, 275 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +spore-press-icon-medium + rotate: false + xy: 545, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 spore-press-icon-small rotate: false - xy: 27, 25 + xy: 267, 335 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sporerocks-icon-small rotate: false - xy: 53, 103 + xy: 259, 309 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 stone-icon-small rotate: false - xy: 53, 77 + xy: 301, 369 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +surge-tower-icon-medium + rotate: false + xy: 613, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 surge-tower-icon-small rotate: false - xy: 53, 51 + xy: 293, 343 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-icon-small rotate: false - xy: 53, 25 + xy: 335, 403 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +surge-wall-large-icon-medium + rotate: false + xy: 681, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 surge-wall-large-icon-small rotate: false - xy: 79, 103 + xy: 327, 377 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +swarmer-icon-medium + rotate: false + xy: 715, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 swarmer-icon-small rotate: false - xy: 79, 77 + xy: 369, 437 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tainted-water-icon-small rotate: false - xy: 79, 51 + xy: 361, 411 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tar-icon-small rotate: false - xy: 79, 25 + xy: 403, 471 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +tau-mech-pad-icon-medium + rotate: false + xy: 1, 243 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 tau-mech-pad-icon-small rotate: false - xy: 105, 103 + xy: 395, 445 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +tendrils-icon-small + rotate: false + xy: 437, 505 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +thermal-generator-icon-medium + rotate: false + xy: 69, 311 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thermal-generator-icon-small rotate: false - xy: 105, 77 + xy: 429, 479 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +thermal-pump-icon-medium + rotate: false + xy: 103, 345 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thermal-pump-icon-small rotate: false - xy: 105, 51 + xy: 539, 581 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +thorium-reactor-icon-medium + rotate: false + xy: 137, 379 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thorium-reactor-icon-small rotate: false - xy: 105, 25 + xy: 539, 555 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-icon-small rotate: false - xy: 131, 103 + xy: 573, 641 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +thorium-wall-large-icon-medium + rotate: false + xy: 205, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thorium-wall-large-icon-small rotate: false - xy: 131, 77 + xy: 573, 615 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +thruster-icon-medium + rotate: false + xy: 239, 481 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thruster-icon-small rotate: false - xy: 131, 51 + xy: 565, 589 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +titan-factory-icon-medium + rotate: false + xy: 273, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 titan-factory-icon-small rotate: false - xy: 131, 25 + xy: 565, 563 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-conveyor-icon-small rotate: false - xy: 157, 103 + xy: 607, 675 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-icon-small rotate: false - xy: 157, 77 + xy: 599, 649 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +titanium-wall-large-icon-medium + rotate: false + xy: 239, 447 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 titanium-wall-large-icon-small rotate: false - xy: 157, 51 + xy: 599, 623 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +trident-ship-pad-icon-medium + rotate: false + xy: 307, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 trident-ship-pad-icon-small rotate: false - xy: 157, 25 + xy: 633, 683 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +turbine-generator-icon-medium + rotate: false + xy: 341, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 turbine-generator-icon-small rotate: false - xy: 183, 103 + xy: 659, 683 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unloader-icon-small rotate: false - xy: 183, 77 + xy: 685, 683 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +vault-icon-medium + rotate: false + xy: 409, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 vault-icon-small rotate: false - xy: 183, 51 + xy: 719, 709 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +water-extractor-icon-medium + rotate: false + xy: 443, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 water-extractor-icon-small rotate: false - xy: 183, 25 + xy: 711, 683 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-icon-small rotate: false - xy: 209, 103 + xy: 87, 43 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +wave-icon-medium + rotate: false + xy: 477, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 wave-icon-small rotate: false - xy: 209, 77 + xy: 113, 43 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +white-tree-dead-icon-medium + rotate: false + xy: 511, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 white-tree-dead-icon-small rotate: false - xy: 209, 51 + xy: 139, 35 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +white-tree-icon-medium + rotate: false + xy: 545, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 white-tree-icon-small rotate: false - xy: 209, 25 + xy: 85, 17 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +wraith-factory-icon-medium + rotate: false + xy: 579, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 wraith-factory-icon-small rotate: false - xy: 235, 103 + xy: 111, 17 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 +item-biomatter + rotate: false + xy: 307, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-blast-compound + rotate: false + xy: 341, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-coal + rotate: false + xy: 375, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-copper + rotate: false + xy: 409, 957 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-graphite + rotate: false + xy: 443, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-lead + rotate: false + xy: 1, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-metaglass + rotate: false + xy: 35, 549 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-phase-fabric + rotate: false + xy: 69, 583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-plastanium + rotate: false + xy: 103, 617 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-pyratite + rotate: false + xy: 137, 651 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-sand + rotate: false + xy: 171, 685 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-scrap + rotate: false + xy: 205, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-silicon + rotate: false + xy: 239, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-spore-pod + rotate: false + xy: 307, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-surge-alloy + rotate: false + xy: 341, 855 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-thorium + rotate: false + xy: 375, 889 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-titanium + rotate: false + xy: 409, 923 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-cryofluid + rotate: false + xy: 239, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-oil + rotate: false + xy: 307, 787 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-slag + rotate: false + xy: 511, 991 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-water + rotate: false + xy: 69, 515 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 blank rotate: false - xy: 467, 114 + xy: 644, 852 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 clear rotate: false - xy: 471, 102 + xy: 32, 206 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 clear-editor rotate: false - xy: 471, 102 + xy: 32, 206 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 +bar + rotate: false + xy: 30, 29 + size: 27, 36 + split: 9, 9, 9, 9 + orig: 27, 36 + offset: 0, 0 + index: -1 +bar-top + rotate: false + xy: 1, 29 + size: 27, 36 + split: 9, 10, 9, 10 + orig: 27, 36 + offset: 0, 0 + index: -1 +button-select + rotate: false + xy: 273, 455 + size: 24, 24 + split: 4, 4, 4, 4 + orig: 24, 24 + offset: 0, 0 + index: -1 clear rotate: false - xy: 395, 3 + xy: 217, 63 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 editor-clear rotate: false - xy: 395, 3 + xy: 217, 63 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 cursor rotate: false - xy: 387, 7 + xy: 53, 23 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 +empty-sector + rotate: false + xy: 239, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 icon-crafting rotate: false - xy: 147, 7 + xy: 904, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 165, 7 + xy: 922, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-distribution rotate: false - xy: 183, 7 + xy: 940, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-effect rotate: false - xy: 201, 7 + xy: 958, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 253, 67 + xy: 789, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-power rotate: false - xy: 273, 21 + xy: 807, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-production rotate: false - xy: 273, 3 + xy: 825, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-turret rotate: false - xy: 315, 111 + xy: 843, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-units rotate: false - xy: 307, 57 + xy: 879, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-upgrade rotate: false - xy: 309, 21 + xy: 915, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 controller-cursor rotate: false - xy: 21, 7 + xy: 778, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-about rotate: false - xy: 361, 77 + xy: 165, 35 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-add rotate: false - xy: 361, 61 + xy: 951, 877 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 361, 45 + xy: 969, 895 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 261, 103 + xy: 487, 617 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 icon-areaDelete rotate: false - xy: 363, 1 + xy: 251, 289 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 39, 7 + xy: 796, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 39, 7 + xy: 796, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 375, 1 + xy: 251, 277 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 237, 1 + xy: 285, 323 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 249, 1 + xy: 285, 311 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 261, 1 + xy: 319, 357 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-back rotate: false - xy: 57, 7 + xy: 814, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 363, 29 + xy: 987, 913 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-break rotate: false - xy: 75, 7 + xy: 832, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 93, 7 + xy: 850, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +icon-cancel-2 + rotate: false + xy: 393, 531 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 icon-chat rotate: false - xy: 457, 85 + xy: 319, 345 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-check rotate: false - xy: 111, 7 + xy: 868, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +icon-check-2 + rotate: false + xy: 435, 591 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 icon-copy rotate: false - xy: 129, 7 + xy: 886, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 459, 101 + xy: 353, 391 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-database rotate: false - xy: 363, 13 + xy: 933, 841 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-database-small rotate: false - xy: 467, 117 + xy: 353, 379 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-dev-builds rotate: false - xy: 377, 77 + xy: 951, 861 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-discord rotate: false - xy: 379, 95 + xy: 789, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-donate rotate: false - xy: 387, 113 + xy: 805, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 377, 61 + xy: 821, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 377, 45 + xy: 837, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 379, 29 + xy: 853, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-elevation rotate: false - xy: 219, 7 + xy: 976, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-eraser rotate: false - xy: 235, 85 + xy: 994, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 379, 13 + xy: 869, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-file rotate: false - xy: 235, 67 + xy: 789, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 235, 49 + xy: 789, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 393, 79 + xy: 885, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 235, 31 + xy: 807, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 395, 97 + xy: 901, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 237, 13 + xy: 789, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 403, 113 + xy: 917, 823 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 393, 63 + xy: 933, 825 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-github rotate: false - xy: 393, 47 + xy: 53, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 395, 31 + xy: 69, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 253, 85 + xy: 807, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-hold rotate: false - xy: 457, 73 + xy: 387, 425 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 457, 61 + xy: 387, 413 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 395, 15 + xy: 85, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 409, 81 + xy: 101, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 411, 97 + xy: 117, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 419, 113 + xy: 133, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-item rotate: false - xy: 457, 49 + xy: 421, 459 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 481, 53 + xy: 1012, 963 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-line rotate: false - xy: 261, 111 + xy: 825, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-link rotate: false - xy: 409, 65 + xy: 137, 19 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-liquid-small rotate: false - xy: 459, 37 + xy: 421, 447 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-load rotate: false - xy: 409, 49 + xy: 153, 19 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 253, 49 + xy: 807, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 253, 31 + xy: 825, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 255, 13 + xy: 843, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-locked rotate: false - xy: 271, 93 + xy: 789, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-logic rotate: false - xy: 459, 25 + xy: 455, 493 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-map rotate: false - xy: 411, 33 + xy: 149, 3 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 459, 13 + xy: 455, 481 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 279, 111 + xy: 807, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-missing rotate: false - xy: 459, 1 + xy: 591, 603 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-background rotate: false - xy: 1, 5 + xy: 32, 171 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 icon-mission-battle rotate: false - xy: 469, 89 + xy: 591, 591 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-defense rotate: false - xy: 471, 105 + xy: 591, 579 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-done rotate: false - xy: 479, 117 + xy: 591, 567 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-none rotate: false - xy: 469, 77 + xy: 565, 551 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-paste rotate: false - xy: 271, 75 + xy: 825, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 469, 65 + xy: 577, 551 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 271, 57 + xy: 843, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 411, 17 + xy: 169, 19 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 271, 39 + xy: 861, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-play rotate: false - xy: 469, 53 + xy: 625, 663 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 411, 1 + xy: 165, 3 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-play-custom rotate: false - xy: 425, 81 + xy: 181, 35 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 471, 41 + xy: 625, 651 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 +icon-power-requirement + rotate: false + xy: 171, 719 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 icon-power-small rotate: false - xy: 481, 93 + xy: 625, 639 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 427, 97 + xy: 185, 19 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 289, 93 + xy: 843, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 435, 113 + xy: 181, 3 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 425, 65 + xy: 1003, 913 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 297, 111 + xy: 861, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 425, 49 + xy: 217, 251 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 427, 33 + xy: 217, 235 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 427, 17 + xy: 217, 219 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 427, 1 + xy: 217, 203 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 441, 81 + xy: 217, 187 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 289, 75 + xy: 879, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 289, 57 + xy: 825, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 483, 105 + xy: 625, 627 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-spray rotate: false - xy: 289, 39 + xy: 843, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 291, 21 + xy: 861, 875 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 443, 97 + xy: 217, 171 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 491, 117 + xy: 737, 697 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 481, 81 + xy: 737, 685 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 451, 113 + xy: 217, 155 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 291, 3 + xy: 879, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tree rotate: false - xy: 307, 93 + xy: 897, 911 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +icon-tree-locked + rotate: false + xy: 205, 753 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 icon-trello rotate: false - xy: 441, 65 + xy: 217, 139 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 441, 49 + xy: 217, 123 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 307, 75 + xy: 861, 857 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocked rotate: false - xy: 307, 39 + xy: 897, 893 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocks rotate: false - xy: 443, 33 + xy: 217, 107 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 443, 17 + xy: 217, 91 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 +icon-zone + rotate: false + xy: 427, 565 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 icon-zoom rotate: false - xy: 309, 3 + xy: 861, 839 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 443, 1 + xy: 217, 75 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 +inventory + rotate: false + xy: 495, 617 + size: 24, 40 + split: 10, 10, 10, 14 + orig: 24, 40 + offset: 0, 0 + index: -1 +scroll + rotate: false + xy: 59, 24 + size: 24, 35 + split: 10, 10, 6, 5 + orig: 24, 35 + offset: 0, 0 + index: -1 +scroll-knob-vertical-black + rotate: false + xy: 139, 61 + size: 24, 40 + split: 10, 10, 6, 10 + orig: 24, 40 + offset: 0, 0 + index: -1 +sector-select + rotate: false + xy: 511, 821 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 selection rotate: false - xy: 474, 102 + xy: 644, 849 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 slider rotate: false - xy: 407, 5 + xy: 32, 196 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 +slider-knob + rotate: false + xy: 613, 815 + size: 29, 38 + orig: 29, 38 + offset: 0, 0 + index: -1 +slider-knob-down + rotate: false + xy: 1, 169 + size: 29, 38 + orig: 29, 38 + offset: 0, 0 + index: -1 +slider-knob-over + rotate: false + xy: 1, 169 + size: 29, 38 + orig: 29, 38 + offset: 0, 0 + index: -1 slider-vertical rotate: false - xy: 459, 98 + xy: 681, 894 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 white rotate: false - xy: 507, 74 + xy: 778, 986 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 +window-empty + rotate: false + xy: 749, 928 + size: 27, 61 + split: 8, 8, 44, 11 + orig: 27, 61 + offset: 0, 0 + index: -1 sprites_fallback6.png size: 1024,1024 @@ -10241,14 +10564,7 @@ deepwater-edge orig: 288, 96 offset: 0, 0 index: -1 -edge-stencil-blocky - rotate: false - xy: 1, 393 - size: 288, 96 - orig: 288, 96 - offset: 0, 0 - index: -1 -edge-stencil-smooth +edge-stencil rotate: false xy: 1, 393 size: 288, 96 @@ -10362,1168 +10678,1175 @@ white-tree-dead index: -1 sprites_fallback7.png -size: 1024,512 +size: 1024,1024 format: RGBA8888 filter: Nearest,Nearest repeat: none char1 rotate: false - xy: 291, 117 + xy: 423, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char2 rotate: false - xy: 539, 183 + xy: 473, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char3 rotate: false - xy: 829, 281 + xy: 763, 785 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs1 rotate: false - xy: 151, 19 + xy: 1, 309 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal1 rotate: false - xy: 981, 435 + xy: 183, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal2 rotate: false - xy: 291, 83 + xy: 981, 939 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal3 rotate: false - xy: 325, 117 + xy: 383, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper1 rotate: false - xy: 981, 401 + xy: 423, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper2 rotate: false - xy: 979, 367 + xy: 507, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper3 rotate: false - xy: 325, 83 + xy: 797, 785 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters1 rotate: false - xy: 359, 117 + xy: 1, 275 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters2 rotate: false - xy: 359, 83 + xy: 217, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters3 rotate: false - xy: 393, 117 + xy: 981, 905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters4 rotate: false - xy: 393, 83 + xy: 979, 871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters5 rotate: false - xy: 427, 117 + xy: 541, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters6 rotate: false - xy: 427, 83 + xy: 831, 785 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 creeptree rotate: false - xy: 871, 401 + xy: 871, 905 size: 108, 108 orig: 108, 108 offset: 0, 0 index: -1 dark-metal-large rotate: false - xy: 1, 53 + xy: 291, 655 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dark-metal1 rotate: false - xy: 581, 215 + xy: 1, 241 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal2 rotate: false - xy: 615, 215 + xy: 251, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1 rotate: false - xy: 649, 215 + xy: 1, 207 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2 rotate: false - xy: 683, 215 + xy: 1, 173 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3 rotate: false - xy: 717, 215 + xy: 1, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4 rotate: false - xy: 461, 117 + xy: 1, 105 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5 rotate: false - xy: 461, 83 + xy: 1, 71 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6 rotate: false - xy: 751, 215 + xy: 1, 37 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water rotate: false - xy: 641, 181 + xy: 649, 719 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water rotate: false - xy: 675, 181 + xy: 683, 719 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand1 rotate: false - xy: 937, 325 + xy: 1, 3 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand2 rotate: false - xy: 573, 181 + xy: 581, 719 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand3 rotate: false - xy: 607, 181 + xy: 615, 719 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater rotate: false - xy: 709, 181 + xy: 575, 685 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dunerocks-large rotate: false - xy: 291, 151 + xy: 581, 753 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dunerocks1 rotate: false - xy: 743, 181 + xy: 609, 685 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dunerocks2 rotate: false - xy: 871, 301 + xy: 643, 685 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass1 rotate: false - xy: 495, 133 + xy: 677, 685 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass2 rotate: false - xy: 495, 99 + xy: 937, 829 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass3 rotate: false - xy: 785, 231 + xy: 871, 805 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone1 rotate: false - xy: 539, 149 + xy: 717, 735 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone2 rotate: false - xy: 573, 147 + xy: 51, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone3 rotate: false - xy: 607, 147 + xy: 117, 425 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock1 rotate: false - xy: 641, 147 + xy: 457, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock2 rotate: false - xy: 675, 147 + xy: 457, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock3 rotate: false - xy: 709, 147 + xy: 491, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow1 rotate: false - xy: 597, 113 + xy: 559, 651 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow2 rotate: false - xy: 631, 113 + xy: 593, 651 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow3 rotate: false - xy: 665, 113 + xy: 627, 651 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice1 rotate: false - xy: 743, 147 + xy: 491, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice2 rotate: false - xy: 529, 115 + xy: 525, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice3 rotate: false - xy: 563, 113 + xy: 525, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-large rotate: false - xy: 581, 249 + xy: 1, 459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 icerocks1 rotate: false - xy: 699, 113 + xy: 661, 651 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks2 rotate: false - xy: 733, 113 + xy: 559, 617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock1 rotate: false - xy: 529, 81 + xy: 593, 617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock2 rotate: false - xy: 495, 65 + xy: 627, 617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock3 rotate: false - xy: 563, 79 + xy: 661, 617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lead1 rotate: false - xy: 597, 79 + xy: 763, 751 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lead2 rotate: false - xy: 631, 79 + xy: 797, 751 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lead3 rotate: false - xy: 665, 79 + xy: 831, 751 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock1 rotate: false - xy: 699, 79 + xy: 865, 771 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock2 rotate: false - xy: 733, 79 + xy: 865, 737 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock3 rotate: false - xy: 529, 47 + xy: 35, 309 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor rotate: false - xy: 563, 45 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged5 - rotate: false - xy: 563, 45 + xy: 35, 275 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2 rotate: false - xy: 597, 45 + xy: 35, 241 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3 rotate: false - xy: 631, 45 + xy: 35, 207 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5 rotate: false - xy: 665, 45 + xy: 35, 173 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged1 rotate: false - xy: 699, 45 + xy: 35, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged2 rotate: false - xy: 733, 45 + xy: 35, 105 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged3 rotate: false - xy: 829, 247 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged4 - rotate: false - xy: 863, 267 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -metal-floor-damaged6 - rotate: false - xy: 863, 233 + xy: 35, 71 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss1 rotate: false - xy: 785, 197 + xy: 35, 37 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss2 rotate: false - xy: 777, 163 + xy: 35, 3 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss3 rotate: false - xy: 819, 213 + xy: 183, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal1 rotate: false - xy: 199, 35 + xy: 217, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal2 rotate: false - xy: 777, 129 + xy: 251, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-coal3 rotate: false - xy: 767, 95 + xy: 717, 701 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper1 rotate: false - xy: 767, 61 + xy: 751, 717 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper2 rotate: false - xy: 819, 179 + xy: 785, 717 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-copper3 rotate: false - xy: 811, 145 + xy: 819, 717 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead1 rotate: false - xy: 853, 199 + xy: 85, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead2 rotate: false - xy: 853, 165 + xy: 695, 651 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-lead3 rotate: false - xy: 233, 35 + xy: 695, 617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap1 rotate: false - xy: 767, 27 + xy: 491, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap2 rotate: false - xy: 811, 111 + xy: 525, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-scrap3 rotate: false - xy: 845, 131 + xy: 559, 583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium1 rotate: false - xy: 801, 77 + xy: 593, 583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium2 rotate: false - xy: 801, 43 + xy: 627, 583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-thorium3 rotate: false - xy: 845, 97 + xy: 661, 583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium1 rotate: false - xy: 835, 63 + xy: 695, 583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium2 rotate: false - xy: 835, 29 + xy: 751, 683 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ore-titanium3 rotate: false - xy: 801, 9 + xy: 785, 683 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles1 rotate: false - xy: 267, 43 + xy: 819, 683 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles2 rotate: false - xy: 301, 49 + xy: 853, 703 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles3 rotate: false - xy: 335, 49 + xy: 853, 669 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine rotate: false - xy: 1, 3 + xy: 291, 539 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock1 rotate: false - xy: 199, 69 + xy: 423, 671 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock2 rotate: false - xy: 489, 167 + xy: 713, 769 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-large rotate: false - xy: 871, 335 + xy: 871, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rocks1 rotate: false - xy: 369, 49 + xy: 85, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rocks2 rotate: false - xy: 403, 49 + xy: 69, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt rotate: false - xy: 437, 49 + xy: 69, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks-large rotate: false - xy: 67, 53 + xy: 291, 589 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 saltrocks1 rotate: false - xy: 887, 199 + xy: 69, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks2 rotate: false - xy: 887, 165 + xy: 69, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-edge rotate: false - xy: 1, 413 + xy: 1, 917 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 sand-water rotate: false - xy: 869, 29 + xy: 69, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-edge rotate: false - xy: 1, 315 + xy: 1, 819 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 sand1 rotate: false - xy: 879, 131 + xy: 69, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand2 rotate: false - xy: 879, 97 + xy: 69, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand3 rotate: false - xy: 869, 63 + xy: 69, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-large rotate: false - xy: 357, 151 + xy: 357, 655 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sandrocks1 rotate: false - xy: 903, 63 + xy: 69, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks2 rotate: false - xy: 903, 29 + xy: 69, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap1 rotate: false - xy: 979, 333 + xy: 119, 391 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap2 rotate: false - xy: 267, 9 + xy: 119, 357 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap3 rotate: false - xy: 301, 15 + xy: 103, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder1 rotate: false - xy: 437, 15 + xy: 103, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder2 rotate: false - xy: 471, 31 + xy: 103, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-edge rotate: false - xy: 291, 413 + xy: 291, 917 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 shale1 rotate: false - xy: 335, 15 + xy: 103, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale2 rotate: false - xy: 369, 15 + xy: 103, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale3 rotate: false - xy: 403, 15 + xy: 103, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-large rotate: false - xy: 647, 249 + xy: 647, 753 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shalerocks1 rotate: false - xy: 897, 267 + xy: 103, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks2 rotate: false - xy: 897, 233 + xy: 103, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-large rotate: false - xy: 133, 53 + xy: 1, 393 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shrubs1 rotate: false - xy: 921, 199 + xy: 103, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs2 rotate: false - xy: 921, 165 + xy: 103, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-edge rotate: false - xy: 1, 217 + xy: 1, 721 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 snow1 rotate: false - xy: 913, 131 + xy: 291, 505 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow2 rotate: false - xy: 913, 97 + xy: 285, 471 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow3 rotate: false - xy: 937, 63 + xy: 325, 505 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock1 rotate: false - xy: 779, 265 + xy: 1, 343 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock2 rotate: false - xy: 51, 3 + xy: 67, 409 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-large rotate: false - xy: 423, 151 + xy: 67, 459 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 snowrocks1 rotate: false - xy: 937, 29 + xy: 319, 471 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrocks2 rotate: false - xy: 947, 131 + xy: 359, 513 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-cluster1 rotate: false - xy: 981, 469 + xy: 981, 973 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster2 rotate: false - xy: 937, 359 + xy: 937, 863 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster3 rotate: false - xy: 249, 77 + xy: 341, 547 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-moss-edge rotate: false - xy: 291, 315 + xy: 291, 819 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 spore-moss1 rotate: false - xy: 947, 97 + xy: 393, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss2 rotate: false - xy: 971, 63 + xy: 417, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss3 rotate: false - xy: 971, 29 + xy: 427, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine rotate: false - xy: 101, 3 + xy: 133, 475 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sporerocks-large rotate: false - xy: 713, 249 + xy: 357, 589 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sporerocks1 rotate: false - xy: 931, 291 + xy: 451, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sporerocks2 rotate: false - xy: 931, 257 + xy: 285, 437 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-edge rotate: false - xy: 581, 413 + xy: 581, 917 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 stone1 rotate: false - xy: 965, 291 + xy: 319, 437 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone2 rotate: false - xy: 965, 257 + xy: 887, 703 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone3 rotate: false - xy: 955, 223 + xy: 887, 669 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water rotate: false - xy: 955, 189 + xy: 729, 649 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-edge rotate: false - xy: 1, 119 + xy: 1, 623 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 tar rotate: false - xy: 989, 223 + xy: 729, 615 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-edge rotate: false - xy: 291, 217 + xy: 291, 721 size: 288, 96 orig: 288, 96 offset: 0, 0 index: -1 +tendrils-edge + rotate: false + xy: 581, 819 + size: 288, 96 + orig: 288, 96 + offset: 0, 0 + index: -1 +tendrils1 + rotate: false + xy: 763, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tendrils2 + rotate: false + xy: 763, 615 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +tendrils3 + rotate: false + xy: 797, 649 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 thorium1 rotate: false - xy: 989, 189 + xy: 797, 615 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 981, 155 + xy: 729, 581 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 981, 121 + xy: 763, 581 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 185, 1 + xy: 797, 581 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 219, 1 + xy: 831, 635 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 505, 13 + xy: 831, 601 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water rotate: false - xy: 539, 11 + xy: 865, 635 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-edge rotate: false - xy: 581, 315 + xy: 1, 525 size: 288, 96 orig: 288, 96 offset: 0, 0 diff --git a/core/assets/sprites/sprites_fallback.png b/core/assets/sprites/sprites_fallback.png index b65d1c8f03..2fe93bf680 100644 Binary files a/core/assets/sprites/sprites_fallback.png and b/core/assets/sprites/sprites_fallback.png differ diff --git a/core/assets/sprites/sprites_fallback2.png b/core/assets/sprites/sprites_fallback2.png index c6d404ee89..465764d631 100644 Binary files a/core/assets/sprites/sprites_fallback2.png and b/core/assets/sprites/sprites_fallback2.png differ diff --git a/core/assets/sprites/sprites_fallback3.png b/core/assets/sprites/sprites_fallback3.png index e58c3ca380..4926d49973 100644 Binary files a/core/assets/sprites/sprites_fallback3.png and b/core/assets/sprites/sprites_fallback3.png differ diff --git a/core/assets/sprites/sprites_fallback4.png b/core/assets/sprites/sprites_fallback4.png index 204586e1a7..0959687378 100644 Binary files a/core/assets/sprites/sprites_fallback4.png and b/core/assets/sprites/sprites_fallback4.png differ diff --git a/core/assets/sprites/sprites_fallback5.png b/core/assets/sprites/sprites_fallback5.png index 7f51c22dba..7c4f5b063d 100644 Binary files a/core/assets/sprites/sprites_fallback5.png and b/core/assets/sprites/sprites_fallback5.png differ diff --git a/core/assets/sprites/sprites_fallback6.png b/core/assets/sprites/sprites_fallback6.png index a4c52c6963..c27409840e 100644 Binary files a/core/assets/sprites/sprites_fallback6.png and b/core/assets/sprites/sprites_fallback6.png differ diff --git a/core/assets/sprites/sprites_fallback7.png b/core/assets/sprites/sprites_fallback7.png index dbe205fa14..f2fae997ba 100644 Binary files a/core/assets/sprites/sprites_fallback7.png and b/core/assets/sprites/sprites_fallback7.png differ diff --git a/core/assets/sprites/uiskin.json b/core/assets/sprites/uiskin.json index 7921494553..3931878115 100644 --- a/core/assets/sprites/uiskin.json +++ b/core/assets/sprites/uiskin.json @@ -281,6 +281,7 @@ font: default-font-chat, fontColor: white, disabledFontColor: gray, + disabledBackground: underline-disabled, selection: selection, background: underline, invalidBackground: underline-red, @@ -305,9 +306,12 @@ checkboxOff: check-off, checkboxOnOver: check-on-over, checkboxOver: check-over, + checkboxOnDisabled: check-on-disabled, + checkboxOffDisabled: check-disabled, font: default-font, fontColor: white, - disabledFontColor: gray + disabledFontColor: gray, + } } } diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 8b3a7d2de9..191d5a65a5 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -6,8 +6,7 @@ import io.anuke.arc.files.FileHandle; import io.anuke.arc.graphics.Color; import io.anuke.arc.util.Structs; import io.anuke.mindustry.core.*; -import io.anuke.mindustry.entities.Entities; -import io.anuke.mindustry.entities.EntityGroup; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.Puddle; @@ -48,10 +47,6 @@ public class Vars{ public static final Team defaultTeam = Team.blue; /** team of the enemy in waves/sectors */ public static final Team waveTeam = Team.red; - /** how many times longer a boss wave takes */ - public static final float bossWaveMultiplier = 3f; - /** how many times longer a launch wave takes */ - public static final float launchWaveMultiplier = 2f; /** max chat message length */ public static final int maxTextLength = 150; /** max player name length in bytes */ @@ -70,22 +65,22 @@ public class Vars{ public static final int tilesize = 8; /** all choosable player colors in join/host dialog */ public static final Color[] playerColors = { - Color.valueOf("82759a"), - Color.valueOf("c0c1c5"), - Color.valueOf("fff0e7"), - Color.valueOf("7d2953"), - Color.valueOf("ff074e"), - Color.valueOf("ff072a"), - Color.valueOf("ff76a6"), - Color.valueOf("a95238"), - Color.valueOf("ffa108"), - Color.valueOf("feeb2c"), - Color.valueOf("ffcaa8"), - Color.valueOf("008551"), - Color.valueOf("00e339"), - Color.valueOf("423c7b"), - Color.valueOf("4b5ef1"), - Color.valueOf("2cabfe"), + Color.valueOf("82759a"), + Color.valueOf("c0c1c5"), + Color.valueOf("fff0e7"), + Color.valueOf("7d2953"), + Color.valueOf("ff074e"), + Color.valueOf("ff072a"), + Color.valueOf("ff76a6"), + Color.valueOf("a95238"), + Color.valueOf("ffa108"), + Color.valueOf("feeb2c"), + Color.valueOf("ffcaa8"), + Color.valueOf("008551"), + Color.valueOf("00e339"), + Color.valueOf("423c7b"), + Color.valueOf("4b5ef1"), + Color.valueOf("2cabfe"), }; /** default server port */ public static final int port = 6567; @@ -120,6 +115,7 @@ public class Vars{ public static ContentLoader content; public static GameState state; public static GlobalData data; + public static EntityCollisions collisions; public static Control control; public static Logic logic; @@ -165,6 +161,8 @@ public class Vars{ content.setVerbose(); } + collisions = new EntityCollisions(); + playerGroup = Entities.addGroup(Player.class).enableMapping(); tileGroup = Entities.addGroup(TileEntity.class, false); bulletGroup = Entities.addGroup(Bullet.class).enableMapping(); diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java index e2fce15b7c..a3bf0b59b1 100644 --- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java +++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java @@ -21,7 +21,6 @@ import java.io.*; import static io.anuke.mindustry.Vars.*; public class WaveSpawner{ - private static final float shockwaveBase = 380f, shockwaveRand = 0f, maxShockwaveDst = shockwaveBase + shockwaveRand; private Array flySpawns = new Array<>(); private Array groundSpawns = new Array<>(); private IntArray loadedSpawns = new IntArray(); @@ -56,7 +55,7 @@ public class WaveSpawner{ /** @return true if the player is near a ground spawn point. */ public boolean playerNear(){ - return groundSpawns.count(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < maxShockwaveDst) > 0; + return groundSpawns.count(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < state.rules.dropZoneRadius) > 0; } public void spawnEnemies(){ @@ -98,7 +97,7 @@ public class WaveSpawner{ } Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawn.x * tilesize, spawn.y * tilesize)); //would be interesting to see player structures survive this without hacks - Time.run(40f, () -> Damage.damage(waveTeam, spawn.x * tilesize, spawn.y * tilesize, shockwaveBase + Mathf.random(shockwaveRand), 99999999f, true)); + Time.run(40f, () -> Damage.damage(waveTeam, spawn.x * tilesize, spawn.y * tilesize, state.rules.dropZoneRadius, 99999999f, true)); } } } diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/io/anuke/mindustry/content/Blocks.java index 708de83446..e617b7f36d 100644 --- a/core/src/io/anuke/mindustry/content/Blocks.java +++ b/core/src/io/anuke/mindustry/content/Blocks.java @@ -36,7 +36,7 @@ public class Blocks implements ContentList{ metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, ignarock, magmarock, hotrock, snowrocks, rock, snowrock, saltRocks, creeptree, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal, - pebbles, + pebbles, tendrils, //ores oreCopper, oreLead, oreScrap, oreCoal, oreTitanium, oreThorium, @@ -77,7 +77,7 @@ public class Blocks implements ContentList{ fortressFactory, repairPoint, //upgrades - alphaDartPad, deltaPad, tauPad, omegaPad, javelinPad, tridentPad, glaivePad; + dartPad, deltaPad, tauPad, omegaPad, javelinPad, tridentPad, glaivePad; @Override public void load(){ @@ -112,10 +112,7 @@ public class Blocks implements ContentList{ part = new BlockPart(); - spawn = new Block("spawn"){ - public void drawShadow(Tile tile){ - } - }; + spawn = new Block("spawn"); //Registers build blocks from size 1-6 //no reference is needed here since they can be looked up by name later @@ -255,13 +252,11 @@ public class Blocks implements ContentList{ dragMultiplier = 1f; speedMultiplier = 1f; attributes.set(Attribute.water, 0.4f); - edgeStyle = "blocky"; }}; iceSnow = new Floor("ice-snow"){{ variants = 3; attributes.set(Attribute.water, 0.3f); - edgeStyle = "blocky"; }}; cliffs = new StaticWall("cliffs"){{ @@ -351,7 +346,6 @@ public class Blocks implements ContentList{ sporeMoss = new Floor("spore-moss"){{ variants = 3; attributes.set(Attribute.spores, 0.3f); - edgeStyle = "blocky"; }}; metalFloor = new Floor("metal-floor"){{ @@ -359,7 +353,7 @@ public class Blocks implements ContentList{ }}; metalFloorDamaged = new Floor("metal-floor-damaged"){{ - variants = 6; + variants = 3; }}; metalFloor2 = new Floor("metal-floor-2"){{ @@ -381,11 +375,12 @@ public class Blocks implements ContentList{ darkPanel5 = new Floor("dark-panel-5"){{ variants = 0; }}; darkPanel6 = new Floor("dark-panel-6"){{ variants = 0; }}; - darkMetal = new StaticWall("dark-metal"){{ - }}; + darkMetal = new StaticWall("dark-metal"); pebbles = new OverlayFloor("pebbles"); + tendrils = new OverlayFloor("tendrils"); + //endregion //region ore @@ -902,8 +897,8 @@ public class Blocks implements ContentList{ junction = new Junction("junction"){{ requirements(Category.distribution, ItemStack.with(Items.copper, 3), true); speed = 26; - capacity = 32; - health = 25; + capacity = 15; + health = 30; }}; itemBridge = new BufferedItemBridge("bridge-conveyor"){{ @@ -1117,7 +1112,7 @@ public class Blocks implements ContentList{ itemDuration = 40f; consumes.power(25f); consumes.item(Items.blastCompound); - consumes.liquid(Liquids.cryofluid, 0.3f); + consumes.liquid(Liquids.cryofluid, 0.26f); }}; //endregion power @@ -1652,9 +1647,9 @@ public class Blocks implements ContentList{ //endregion //region upgrades - alphaDartPad = new MechPad("alpha-dart-mech-pad"){{ + dartPad = new MechPad("dart-mech-pad"){{ requirements(Category.upgrade, ItemStack.with(Items.lead, 200, Items.graphite, 100, Items.copper, 150)); - mech = Mechs.alpha; + mech = Mechs.dart; size = 2; consumes.powerBuffered(50f); }}; diff --git a/core/src/io/anuke/mindustry/content/Bullets.java b/core/src/io/anuke/mindustry/content/Bullets.java index ae356cb001..449add9ab3 100644 --- a/core/src/io/anuke/mindustry/content/Bullets.java +++ b/core/src/io/anuke/mindustry/content/Bullets.java @@ -730,7 +730,7 @@ public class Bullets implements ContentList{ explode = new BombBulletType(2f, 3f, "clear"){ { hitEffect = Fx.pulverize; - lifetime = 23f; + lifetime = 30f; speed = 1f; splashDamageRadius = 50f; splashDamage = 28f; diff --git a/core/src/io/anuke/mindustry/content/Mechs.java b/core/src/io/anuke/mindustry/content/Mechs.java index 51daec4090..b6fffbc3e5 100644 --- a/core/src/io/anuke/mindustry/content/Mechs.java +++ b/core/src/io/anuke/mindustry/content/Mechs.java @@ -6,7 +6,6 @@ import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.util.Time; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Units; @@ -21,20 +20,18 @@ import io.anuke.mindustry.type.Weapon; public class Mechs implements ContentList{ public static Mech alpha, delta, tau, omega, dart, javelin, trident, glaive; - /** These are not new mechs, just re-assignments for convenience. */ - public static Mech starterDesktop, starterMobile; + public static Mech starter; @Override public void load(){ alpha = new Mech("alpha-mech", false){ - { drillPower = 1; mineSpeed = 1.5f; mass = 1.2f; speed = 0.5f; - boostSpeed = 0.85f; + boostSpeed = 0.95f; buildPower = 1.2f; engineColor = Color.valueOf("ffd37f"); health = 300f; @@ -103,7 +100,6 @@ public class Mechs implements ContentList{ float healRange = 60f; float healAmount = 10f; float healReload = 160f; - Rectangle rect = new Rectangle(); boolean wasHealed; { @@ -137,15 +133,12 @@ public class Mechs implements ContentList{ if(player.timer.get(Player.timerAbility, healReload)){ wasHealed = false; - rect.setSize(healRange * 2f).setCenter(player.x, player.y); - Units.getNearby(player.getTeam(), rect, unit -> { - if(unit.dst(player) <= healRange){ - if(unit.health < unit.maxHealth()){ - Effects.effect(Fx.heal, unit); - wasHealed = true; - } - unit.healBy(healAmount); + Units.nearby(player.getTeam(), player.x, player.y, healRange, unit -> { + if(unit.health < unit.maxHealth()){ + Effects.effect(Fx.heal, unit); + wasHealed = true; } + unit.healBy(healAmount); }); if(wasHealed){ @@ -230,9 +223,9 @@ public class Mechs implements ContentList{ { drillPower = 1; mineSpeed = 0.9f; - speed = 0.4f; - drag = 0.1f; - health = 180f; + speed = 0.5f; + drag = 0.09f; + health = 200f; weaponOffsetX = -1; weaponOffsetY = -1; engineColor = Pal.lightTrail; @@ -240,17 +233,12 @@ public class Mechs implements ContentList{ buildPower = 1.1f; weapon = new Weapon("blaster"){{ length = 1.5f; - reload = 20f; + reload = 15f; roundrobin = true; ejectEffect = Fx.shellEjectSmall; bullet = Bullets.standardCopper; }}; } - - @Override - public boolean alwaysUnlocked(){ - return true; - } }; javelin = new Mech("javelin-ship", true){ @@ -371,7 +359,6 @@ public class Mechs implements ContentList{ } }; - starterDesktop = alpha; - starterMobile = dart; + starter = alpha; } } diff --git a/core/src/io/anuke/mindustry/content/TechTree.java b/core/src/io/anuke/mindustry/content/TechTree.java index db98cb4877..caf1ebeb4b 100644 --- a/core/src/io/anuke/mindustry/content/TechTree.java +++ b/core/src/io/anuke/mindustry/content/TechTree.java @@ -250,7 +250,7 @@ public class TechTree implements ContentList{ node(phantomFactory); }); - node(alphaDartPad, () -> { + node(dartPad, () -> { node(deltaPad, () -> { node(javelinPad, () -> { @@ -281,8 +281,7 @@ public class TechTree implements ContentList{ } private TechNode node(Block block){ - return node(block, () -> { - }); + return node(block, () -> {}); } public static class TechNode{ diff --git a/core/src/io/anuke/mindustry/content/Zones.java b/core/src/io/anuke/mindustry/content/Zones.java index 7b7ee1e8e7..d4559dcacb 100644 --- a/core/src/io/anuke/mindustry/content/Zones.java +++ b/core/src/io/anuke/mindustry/content/Zones.java @@ -1,18 +1,17 @@ package io.anuke.mindustry.content; -import io.anuke.mindustry.game.ContentList; -import io.anuke.mindustry.game.Rules; -import io.anuke.mindustry.maps.zonegen.DesertWastesGenerator; +import io.anuke.arc.collection.Array; +import io.anuke.mindustry.game.*; import io.anuke.mindustry.maps.generators.MapGenerator; import io.anuke.mindustry.maps.generators.MapGenerator.Decoration; -import io.anuke.mindustry.maps.zonegen.OvergrowthGenerator; +import io.anuke.mindustry.maps.zonegen.DesertWastesGenerator; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.Block; public class Zones implements ContentList{ public static Zone groundZero, desertWastes, - craters, frozenForest, ruinousShores, stainedMountains, + craters, frozenForest, ruinousShores, stainedMountains, tarFields, saltFlats, overgrowth, infestedIslands, desolateRift, nuclearComplex; @@ -35,21 +34,58 @@ public class Zones implements ContentList{ desertWastes = new Zone("desertWastes", new DesertWastesGenerator(260, 260)){{ startingItems = ItemStack.list(Items.copper, 200); - conditionWave = 10; - zoneRequirements = ZoneRequirement.with(groundZero, 10); - blockRequirements = new Block[]{Blocks.router}; + conditionWave = 20; + launchPeriod = 10; + loadout = Loadouts.advancedShard; + zoneRequirements = ZoneRequirement.with(groundZero, 20); resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.sand}; rules = () -> new Rules(){{ waves = true; waveTimer = true; - waveSpacing = 60 * 60 * 1.5f; + launchWaveMultiplier = 3f; + waveSpacing = 60 * 50f; + spawns = Array.with( + new SpawnGroup(UnitTypes.crawler){{ + unitScaling = 3f; + }}, + new SpawnGroup(UnitTypes.dagger){{ + unitScaling = 4f; + begin = 2; + spacing = 2; + }}, + new SpawnGroup(UnitTypes.wraith){{ + unitScaling = 3f; + begin = 11; + spacing = 3; + }}, + new SpawnGroup(UnitTypes.eruptor){{ + unitScaling = 3f; + begin = 22; + unitAmount = 1; + spacing = 4; + }}, + new SpawnGroup(UnitTypes.titan){{ + unitScaling = 3f; + begin = 37; + unitAmount = 2; + spacing = 4; + }}, + new SpawnGroup(UnitTypes.fortress){{ + unitScaling = 2f; + effect = StatusEffects.boss; + begin = 41; + spacing = 20; + }} + ); }}; }}; + //to be implemented as an attack map + /* saltFlats = new Zone("saltFlats", new DesertWastesGenerator(260, 260)){{ startingItems = ItemStack.list(Items.copper, 200); conditionWave = 10; - zoneRequirements = ZoneRequirement.with(groundZero, 10); + zoneRequirements = ZoneRequirement.with(desertWastes, 25); blockRequirements = new Block[]{Blocks.router}; resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.sand}; rules = () -> new Rules(){{ @@ -57,20 +93,7 @@ public class Zones implements ContentList{ waveTimer = true; waveSpacing = 60 * 60 * 1.5f; }}; - }}; - - overgrowth = new Zone("overgrowth", new OvergrowthGenerator(320, 320)){{ - startingItems = ItemStack.list(Items.copper, 200); - conditionWave = 10; - zoneRequirements = ZoneRequirement.with(groundZero, 10); - blockRequirements = new Block[]{Blocks.router}; - resources = new Item[]{Items.copper, Items.lead, Items.coal}; - rules = () -> new Rules(){{ - waves = true; - waveTimer = true; - waveSpacing = 60 * 60 * 1.5f; - }}; - }}; + }};*/ craters = new Zone("craters", new MapGenerator("craters", 1).dist(0).decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{ startingItems = ItemStack.list(Items.copper, 200); @@ -100,13 +123,28 @@ public class Zones implements ContentList{ }}; }}; + overgrowth = new Zone("overgrowth", new MapGenerator("overgrowth")){{ + startingItems = ItemStack.list(Items.copper, 3000, Items.lead, 2000, Items.silicon, 1000, Items.metaglass, 500); + conditionWave = 12; + launchPeriod = 4; + loadout = Loadouts.basicNucleus; + zoneRequirements = ZoneRequirement.with(frozenForest, 40); + blockRequirements = new Block[]{Blocks.router}; + resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.titanium, Items.sand, Items.thorium, Items.scrap}; + rules = () -> new Rules(){{ + waves = true; + waveTimer = true; + waveSpacing = 60 * 100f; + }}; + }}; + ruinousShores = new Zone("ruinousShores", new MapGenerator("ruinousShores", 1).dist(3f, true)){{ loadout = Loadouts.basicFoundation; baseLaunchCost = ItemStack.with(); startingItems = ItemStack.list(Items.copper, 400); conditionWave = 20; launchPeriod = 20; - zoneRequirements = ZoneRequirement.with(frozenForest, 10, craters, 15); + zoneRequirements = ZoneRequirement.with(desertWastes, 20, craters, 15); blockRequirements = new Block[]{Blocks.graphitePress, Blocks.combustionGenerator}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.sand}; rules = () -> new Rules(){{ @@ -124,7 +162,7 @@ public class Zones implements ContentList{ zoneRequirements = new Zone[]{frozenForest}; blockRequirements = new Block[]{Blocks.copperWall}; rules = () -> new Rules(){{ - waves = true; + waves = true;] waveTimer = true; waveSpacing = 60 * 80; }}; @@ -132,9 +170,8 @@ public class Zones implements ContentList{ stainedMountains = new Zone("stainedMountains", new MapGenerator("stainedMountains", 2) .dist(0f, false) - .decor(new Decoration(Blocks.moss, Blocks.shaleBoulder, 0.02))){{ + .decor(new Decoration(Blocks.shale, Blocks.shaleBoulder, 0.02))){{ loadout = Loadouts.basicFoundation; - baseLaunchCost = ItemStack.with(); startingItems = ItemStack.list(Items.copper, 400, Items.lead, 100); conditionWave = 10; launchPeriod = 10; @@ -148,31 +185,47 @@ public class Zones implements ContentList{ }}; }}; - desolateRift = new Zone("desolateRift", new MapGenerator("desolateRift").dist(2f)){{ - loadout = Loadouts.basicNucleus; - baseLaunchCost = ItemStack.with(); - startingItems = ItemStack.list(Items.copper, 1500); - conditionWave = 10; - launchPeriod = 20; - zoneRequirements = ZoneRequirement.with(stainedMountains, 20); - blockRequirements = new Block[]{Blocks.thermalGenerator}; + tarFields = new Zone("tarFields", new MapGenerator("tarFields") + .dist(0f, false) + .decor(new Decoration(Blocks.shale, Blocks.shaleBoulder, 0.02))){{ + loadout = Loadouts.basicFoundation; + startingItems = ItemStack.list(Items.copper, 500, Items.lead, 200); + conditionWave = 15; + launchPeriod = 10; + zoneRequirements = ZoneRequirement.with(ruinousShores, 20); + blockRequirements = new Block[]{Blocks.coalCentrifuge}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand}; rules = () -> new Rules(){{ waves = true; waveTimer = true; - waveSpacing = 60 * 60 * 1.3f; + waveSpacing = 60 * 60 * 2; + }}; + }}; + + desolateRift = new Zone("desolateRift", new MapGenerator("desolateRift").dist(2f)){{ + loadout = Loadouts.basicNucleus; + baseLaunchCost = ItemStack.with(); + startingItems = ItemStack.list(Items.copper, 1500); + conditionWave = 3; + launchPeriod = 1; + zoneRequirements = ZoneRequirement.with(tarFields, 20); + blockRequirements = new Block[]{Blocks.thermalGenerator}; + resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand, Items.thorium}; + rules = () -> new Rules(){{ + waves = true; + waveTimer = true; + waveSpacing = 60 * 60 * 2.5f; }}; }}; nuclearComplex = new Zone("nuclearComplex", new MapGenerator("nuclearProductionComplex", 1) - .drops(ItemStack.with(Items.copper, 2000, Items.lead, 1500, Items.silicon, 1000, Items.graphite, 1000, Items.thorium, 200, Items.titanium, 2000, Items.metaglass, 1000)) .decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{ loadout = Loadouts.basicNucleus; baseLaunchCost = ItemStack.with(); startingItems = ItemStack.list(Items.copper, 2500, Items.lead, 3000, Items.silicon, 800, Items.metaglass, 400); conditionWave = 30; launchPeriod = 15; - zoneRequirements = ZoneRequirement.with(desolateRift, 20); + zoneRequirements = ZoneRequirement.with(stainedMountains, 20); blockRequirements = new Block[]{Blocks.thermalGenerator}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.thorium, Items.sand}; rules = () -> new Rules(){{ diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 1de9fc48d4..7668cdfa49 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -9,10 +9,8 @@ import io.anuke.arc.input.KeyCode; import io.anuke.arc.scene.ui.Dialog; import io.anuke.arc.scene.ui.TextField; import io.anuke.arc.util.*; -import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.EntityQuery; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.EventType.*; @@ -91,7 +89,15 @@ public class Control implements ApplicationListener{ }); Events.on(WorldLoadEvent.class, event -> { - Core.app.post(() -> Core.app.post(() -> Core.camera.position.set(player))); + Core.app.post(() -> Core.app.post(() -> { + if(Net.active() && player.getClosestCore() != null){ + //set to closest core since that's where the player will probably respawn; prevents camera jumps + Core.camera.position.set(player.getClosestCore()); + }else{ + //locally, set to player position since respawning occurs immediately + Core.camera.position.set(player); + } + })); }); Events.on(ResetEvent.class, event -> { @@ -124,7 +130,7 @@ public class Control implements ApplicationListener{ } }); - //autohost for pvp sectors + //autohost for pvp maps Events.on(WorldLoadEvent.class, event -> { if(state.rules.pvp && !Net.active()){ try{ @@ -173,7 +179,6 @@ public class Control implements ApplicationListener{ void createPlayer(){ player = new Player(); player.name = Core.settings.getString("name"); - player.mech = mobile ? Mechs.starterMobile : Mechs.starterDesktop; player.color.set(Core.settings.getInt("color-0")); player.isLocal = true; player.isMobile = mobile; @@ -230,8 +235,6 @@ public class Control implements ApplicationListener{ @Override public void init(){ - EntityQuery.init(); - Platform.instance.updateRPC(); if(!Core.settings.getBool("4.0-warning-2", false)){ diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index a450acf61c..a81d3c2702 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -9,6 +9,7 @@ import io.anuke.arc.util.Time; import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.*; @@ -33,13 +34,15 @@ public class Logic implements ApplicationListener{ if(world.isZone()){ world.getZone().updateWave(state.wave); } + for (Player p : playerGroup.all()) { + p.respawns = state.rules.respawns; + } }); } @Override public void init(){ - EntityQuery.init(); - EntityQuery.collisions().setCollider(tilesize, (x, y) -> { + collisions.setCollider(tilesize, (x, y) -> { Tile tile = world.tile(x, y); return tile != null && tile.solid(); }); @@ -55,7 +58,11 @@ public class Logic implements ApplicationListener{ public void play(){ state.set(State.playing); state.wavetime = state.rules.waveSpacing * 2; //grace period of 2x wave time before game starts - state.rules.spawns = world.getMap().getWaves(); + + //sometimes a map has no waves defined, they're defined in the zone rules + if(world.getMap().getWaves() != DefaultWaves.get() || !world.isZone()){ + state.rules.spawns = world.getMap().getWaves(); + } Events.fire(new PlayEvent()); } @@ -78,8 +85,8 @@ public class Logic implements ApplicationListener{ public void runWave(){ world.spawner.spawnEnemies(); state.wave++; - state.wavetime = world.isZone() && world.getZone().isBossWave(state.wave) ? state.rules.waveSpacing * bossWaveMultiplier : - world.isZone() && world.getZone().isLaunchWave(state.wave) ? state.rules.waveSpacing * launchWaveMultiplier : state.rules.waveSpacing; + state.wavetime = world.isZone() && world.getZone().isBossWave(state.wave) ? state.rules.waveSpacing * state.rules.bossWaveMultiplier : + world.isZone() && world.getZone().isLaunchWave(state.wave) ? state.rules.waveSpacing * state.rules.launchWaveMultiplier : state.rules.waveSpacing; Events.fire(new WaveEvent()); } @@ -88,7 +95,7 @@ public class Logic implements ApplicationListener{ if(state.rules.waves && state.teams.get(defaultTeam).cores.size == 0 && !state.gameOver){ state.gameOver = true; Events.fire(new GameOverEvent(waveTeam)); - }else if(!state.rules.waves){ + }else if(state.rules.attackMode){ Team alive = null; for(Team team : Team.all){ @@ -144,17 +151,15 @@ public class Logic implements ApplicationListener{ Time.update(); if(state.rules.waves && state.rules.waveTimer && !state.gameOver){ - state.wavetime = Math.max(state.wavetime - Time.delta(), 0); + if(!state.rules.waitForWaveToEnd || unitGroups[waveTeam.ordinal()].size() == 0){ + state.wavetime = Math.max(state.wavetime - Time.delta(), 0); + } } if(!Net.client() && state.wavetime <= 0 && state.rules.waves){ runWave(); } - if(!Entities.defaultGroup().isEmpty()){ - throw new IllegalArgumentException("Do not add anything to the default group!"); - } - if(!headless){ Entities.update(effectGroup); Entities.update(groundEffectGroup); @@ -179,11 +184,11 @@ public class Logic implements ApplicationListener{ for(EntityGroup group : unitGroups){ if(group.isEmpty()) continue; - EntityQuery.collideGroups(bulletGroup, group); + collisions.collideGroups(bulletGroup, group); } - EntityQuery.collideGroups(bulletGroup, playerGroup); - EntityQuery.collideGroups(playerGroup, playerGroup); + collisions.collideGroups(bulletGroup, playerGroup); + collisions.collideGroups(playerGroup, playerGroup); world.pathfinder.update(); } diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 9a812ef964..9c5f6ed830 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -4,7 +4,8 @@ import io.anuke.annotations.Annotations.Loc; import io.anuke.annotations.Annotations.Remote; import io.anuke.arc.ApplicationListener; import io.anuke.arc.Events; -import io.anuke.arc.collection.*; +import io.anuke.arc.collection.IntMap; +import io.anuke.arc.collection.ObjectSet; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Colors; import io.anuke.arc.math.Mathf; @@ -14,7 +15,6 @@ import io.anuke.arc.util.*; import io.anuke.arc.util.io.ByteBufferOutput; import io.anuke.arc.util.io.CountableByteArrayOutputStream; import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Entities; import io.anuke.mindustry.entities.EntityGroup; @@ -33,7 +33,6 @@ import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.world.Tile; import java.io.*; -import java.lang.StringBuilder; import java.nio.ByteBuffer; import java.util.zip.DeflaterOutputStream; @@ -161,7 +160,6 @@ public class NetServer implements ApplicationListener{ player.name = packet.name; player.uuid = uuid; player.isMobile = packet.mobile; - player.mech = packet.mobile ? Mechs.starterMobile : Mechs.starterDesktop; player.dead = true; player.setNet(player.x, player.y); player.color.set(packet.color); diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 9e4c6bfb2d..a6a5aa1363 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -126,6 +126,13 @@ public class Renderer implements ApplicationListener{ } } + @Override + public void dispose(){ + minimap.dispose(); + shieldBuffer.dispose(); + blocks.dispose(); + } + void updateShake(float scale){ if(shaketime > 0){ float intensity = shakeIntensity * (settings.getInt("screenshake", 4) / 4f) * scale; @@ -195,13 +202,13 @@ public class Renderer implements ApplicationListener{ overlays.drawBottom(); drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests); - if(EntityDraw.countInBounds(shieldGroup) > 0){ + if(Entities.countInBounds(shieldGroup) > 0){ if(settings.getBool("animatedshields")){ Draw.flush(); shieldBuffer.begin(); graphics.clear(Color.CLEAR); - EntityDraw.draw(shieldGroup); - EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawOver()); + Entities.draw(shieldGroup); + Entities.draw(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawOver()); Draw.flush(); shieldBuffer.end(); Draw.shader(Shaders.shield); @@ -210,7 +217,7 @@ public class Renderer implements ApplicationListener{ Draw.color(); Draw.shader(); }else{ - EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawSimple()); + Entities.draw(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawSimple()); } } @@ -289,7 +296,7 @@ public class Renderer implements ApplicationListener{ } public void drawAndInterpolate(EntityGroup group, Predicate toDraw, Consumer drawer){ - EntityDraw.drawWith(group, toDraw, drawer); + Entities.draw(group, toDraw, drawer); } public void scaleCamera(float amount){ diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 0706a3d371..446ff0ef9d 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -76,21 +76,21 @@ public class UI implements ApplicationListener{ Core.input.addProcessor(Core.scene); Dialog.setShowAction(() -> sequence( - alpha(0f), - originCenter(), - moveToAligned(Core.graphics.getWidth() / 2f, Core.graphics.getHeight() / 2f, Align.center), - scaleTo(0.0f, 1f), - parallel( - scaleTo(1f, 1f, 0.1f, Interpolation.fade), - fadeIn(0.1f, Interpolation.fade) - ) + alpha(0f), + originCenter(), + moveToAligned(Core.graphics.getWidth() / 2f, Core.graphics.getHeight() / 2f, Align.center), + scaleTo(0.0f, 1f), + parallel( + scaleTo(1f, 1f, 0.1f, Interpolation.fade), + fadeIn(0.1f, Interpolation.fade) + ) )); Dialog.setHideAction(() -> sequence( - parallel( - scaleTo(0.01f, 0.01f, 0.1f, Interpolation.fade), - fadeOut(0.1f, Interpolation.fade) - ) + parallel( + scaleTo(0.01f, 0.01f, 0.1f, Interpolation.fade), + fadeOut(0.1f, Interpolation.fade) + ) )); TooltipManager.getInstance().animations = false; diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index af3ac67537..1645d4b70b 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -11,7 +11,7 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.ai.*; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.EntityQuery; +import io.anuke.mindustry.entities.Entities; import io.anuke.mindustry.game.EventType.TileChangeEvent; import io.anuke.mindustry.game.EventType.WorldLoadEvent; import io.anuke.mindustry.game.Team; @@ -85,13 +85,11 @@ public class World implements ApplicationListener{ return tiles == null ? 0 : tiles[0].length; } - public @Nullable - Tile tile(int pos){ + public @Nullable Tile tile(int pos){ return tiles == null ? null : tile(Pos.x(pos), Pos.y(pos)); } - public @Nullable - Tile tile(int x, int y){ + public @Nullable Tile tile(int x, int y){ if(tiles == null){ return null; } @@ -103,8 +101,7 @@ public class World implements ApplicationListener{ return tiles[x][y]; } - public @Nullable - Tile tileWorld(float x, float y){ + public @Nullable Tile tileWorld(float x, float y){ return tile(Math.round(x / tilesize), Math.round(y / tilesize)); } @@ -176,7 +173,7 @@ public class World implements ApplicationListener{ addDarkness(tiles); - EntityQuery.resizeTree(-finalWorldBounds, -finalWorldBounds, tiles.length * tilesize + finalWorldBounds * 2, tiles[0].length * tilesize + finalWorldBounds * 2); + Entities.getAllGroups().each(group -> group.resize(-finalWorldBounds, -finalWorldBounds, tiles.length * tilesize + finalWorldBounds * 2, tiles[0].length * tilesize + finalWorldBounds * 2)); generating = false; Events.fire(new WorldLoadEvent()); @@ -263,7 +260,7 @@ public class World implements ApplicationListener{ if(invalidMap){ ui.showError("$map.nospawn.pvp"); } - }else if(!state.rules.waves){ //pvp maps need two cores to be valid + }else if(state.rules.attackMode){ //pvp maps need two cores to be valid invalidMap = state.teams.get(waveTeam).cores.isEmpty(); if(invalidMap){ ui.showError("$map.nospawn.attack"); diff --git a/core/src/io/anuke/mindustry/editor/EditorTile.java b/core/src/io/anuke/mindustry/editor/EditorTile.java index 2ac9c755b8..839466eaa6 100644 --- a/core/src/io/anuke/mindustry/editor/EditorTile.java +++ b/core/src/io/anuke/mindustry/editor/EditorTile.java @@ -26,7 +26,9 @@ public class EditorTile extends Tile{ public void setFloor(Floor type){ if(type instanceof OverlayFloor){ //don't place on liquids - setOverlayID(type.id); + if(!floor.isLiquid){ + setOverlayID(type.id); + } return; } diff --git a/core/src/io/anuke/mindustry/editor/EditorTool.java b/core/src/io/anuke/mindustry/editor/EditorTool.java index 56af578d06..b4cb882ce2 100644 --- a/core/src/io/anuke/mindustry/editor/EditorTool.java +++ b/core/src/io/anuke/mindustry/editor/EditorTool.java @@ -4,13 +4,13 @@ import io.anuke.arc.Core; import io.anuke.arc.collection.IntArray; import io.anuke.arc.function.IntPositionConsumer; import io.anuke.arc.input.KeyCode; -import io.anuke.arc.util.Pack; -import io.anuke.arc.util.Structs; +import io.anuke.arc.util.*; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.*; public enum EditorTool{ + zoom, pick{ public void touched(MapEditor editor, int x, int y){ if(!Structs.inBounds(x, y, editor.width(), editor.height())) return; @@ -34,6 +34,7 @@ public enum EditorTool{ editor.drawBlock = tile.block() == Blocks.air ? tile.overlay() == Blocks.air ? tile.floor() : tile.overlay() : tile.block(); } }, + line, pencil{ { edit = true; @@ -56,22 +57,6 @@ public enum EditorTool{ editor.draw(x, y, isPaint(), Blocks.air); } }, - spray{ - { - edit = true; - draggable = true; - } - - @Override - public void touched(MapEditor editor, int x, int y){ - editor.draw(x, y, isPaint(), editor.drawBlock, 0.012); - } - }, - line{ - { - - } - }, fill{ { edit = true; @@ -157,7 +142,6 @@ public enum EditorTool{ }else{ //normal fill int x1; - boolean spanAbove, spanBelow; stack.clear(); @@ -171,21 +155,21 @@ public enum EditorTool{ x1 = x; while(x1 >= 0 && eq(x1, y)) x1--; x1++; - spanAbove = spanBelow = false; + boolean spanAbove = false, spanBelow = false; while(x1 < width && eq(x1, y)){ writer.accept(x1, y); if(!spanAbove && y > 0 && eq(x1, y - 1)){ stack.add(Pos.get(x1, y - 1)); spanAbove = true; - }else if(spanAbove && eq(x1, y - 1)){ + }else if(spanAbove && !eq(x1, y - 1)){ spanAbove = false; } if(!spanBelow && y < height - 1 && eq(x1, y + 1)){ stack.add(Pos.get(x1, y + 1)); spanBelow = true; - }else if(spanBelow && y < height - 1 && eq(x1, y + 1)){ + }else if(spanBelow && y < height - 1 && !eq(x1, y + 1)){ spanBelow = false; } x1++; @@ -200,7 +184,17 @@ public enum EditorTool{ return (data.drawBlock instanceof OverlayFloor ? tile.overlay() : isfloor ? tile.floor() : tile.block()) == dest && !(data.drawBlock instanceof OverlayFloor && tile.floor().isLiquid); } }, - zoom; + spray{ + { + edit = true; + draggable = true; + } + + @Override + public void touched(MapEditor editor, int x, int y){ + editor.draw(x, y, isPaint(), editor.drawBlock, 0.012); + } + }; boolean edit, draggable; diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 5d7edd42c8..3751276c95 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -33,6 +33,7 @@ import static io.anuke.mindustry.Vars.*; public class MapEditorDialog extends Dialog implements Disposable{ public final MapEditor editor; + private MapView view; private MapInfoDialog infoDialog; private MapLoadDialog loadDialog; @@ -85,49 +86,50 @@ public class MapEditorDialog extends Dialog implements Disposable{ t.row(); t.addImageTextButton("$editor.import", "icon-load-map", isize, () -> - createDialog("$editor.import", - "$editor.importmap", "$editor.importmap.description", "icon-load-map", (Runnable)loadDialog::show, - "$editor.importfile", "$editor.importfile.description", "icon-file", (Runnable)() -> - Platform.instance.showFileChooser("$editor.loadmap", "Map Files", file -> ui.loadAnd(() -> { - try{ - //TODO what if it's an image? users should be warned for their stupidity - editor.beginEdit(MapIO.readMap(file, true)); - }catch(Exception e){ - ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false))); - Log.err(e); - } - }), true, mapExtension), - - "$editor.importimage", "$editor.importimage.description", "icon-file-image", (Runnable)() -> - Platform.instance.showFileChooser("$loadimage", "Image Files", file -> - ui.loadAnd(() -> { - try{ - Pixmap pixmap = new Pixmap(file); - Tile[][] tiles = editor.createTiles(pixmap.getWidth(), pixmap.getHeight()); - editor.load(() -> MapIO.readLegacyPixmap(pixmap, tiles)); - editor.beginEdit(tiles); - }catch(Exception e){ - ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false))); - Log.err(e); - } - }), true, "png"))); - - t.addImageTextButton("$editor.export", "icon-save-map", isize, () -> - Platform.instance.showFileChooser("$editor.savemap", "Map Files", file -> { - file = file.parent().child(file.nameWithoutExtension() + "." + mapExtension); - FileHandle result = file; - ui.loadAnd(() -> { + createDialog("$editor.import", + "$editor.importmap", "$editor.importmap.description", "icon-load-map", (Runnable)loadDialog::show, + "$editor.importfile", "$editor.importfile.description", "icon-file", (Runnable)() -> + Platform.instance.showFileChooser("$editor.loadmap", "Map Files", file -> ui.loadAnd(() -> { try{ - if(!editor.getTags().containsKey("name")){ - editor.getTags().put("name", result.nameWithoutExtension()); - } - MapIO.writeMap(result, editor.createMap(result), editor.tiles()); + //TODO what if it's an image? users should be warned for their stupidity + editor.beginEdit(MapIO.readMap(file, true)); }catch(Exception e){ - ui.showError(Core.bundle.format("editor.errorsave", Strings.parseException(e, false))); + ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false))); Log.err(e); } - }); - }, false, mapExtension)); + }), true, mapExtension), + + "$editor.importimage", "$editor.importimage.description", "icon-file-image", (Runnable)() -> + Platform.instance.showFileChooser("$loadimage", "Image Files", file -> + ui.loadAnd(() -> { + try{ + Pixmap pixmap = new Pixmap(file); + Tile[][] tiles = editor.createTiles(pixmap.getWidth(), pixmap.getHeight()); + editor.load(() -> MapIO.readLegacyPixmap(pixmap, tiles)); + editor.beginEdit(tiles); + }catch(Exception e){ + ui.showError(Core.bundle.format("editor.errorload", Strings.parseException(e, false))); + Log.err(e); + } + }), true, "png")) + ); + + t.addImageTextButton("$editor.export", "icon-save-map", isize, () -> + Platform.instance.showFileChooser("$editor.savemap", "Map Files", file -> { + file = file.parent().child(file.nameWithoutExtension() + "." + mapExtension); + FileHandle result = file; + ui.loadAnd(() -> { + try{ + if(!editor.getTags().containsKey("name")){ + editor.getTags().put("name", result.nameWithoutExtension()); + } + MapIO.writeMap(result, editor.createMap(result), editor.tiles()); + }catch(Exception e){ + ui.showError(Core.bundle.format("editor.errorsave", Strings.parseException(e, false))); + Log.err(e); + } + }); + }, false, mapExtension)); }); menu.cont.row(); diff --git a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java index 32e74f59d2..e34a139e9e 100644 --- a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java @@ -79,7 +79,9 @@ public class MapGenerateDialog extends FloatingDialog{ cont.clear(); cont.table("flat", t -> { t.margin(8f); - t.stack(new BorderImage(texture), new Stack(){{ + t.stack(new BorderImage(texture){{ + setScaling(Scaling.fit); + }}, new Stack(){{ add(new Image("loadDim")); add(new Image("icon-refresh"){{ setScaling(Scaling.none); diff --git a/core/src/io/anuke/mindustry/editor/MapView.java b/core/src/io/anuke/mindustry/editor/MapView.java index 4503304907..68bef8dec8 100644 --- a/core/src/io/anuke/mindustry/editor/MapView.java +++ b/core/src/io/anuke/mindustry/editor/MapView.java @@ -24,11 +24,7 @@ import static io.anuke.mindustry.Vars.ui; public class MapView extends Element implements GestureListener{ private MapEditor editor; private EditorTool tool = EditorTool.pencil; - //private OperationStack stack = new OperationStack(); - //private DrawOperation op; - //private GridBits used; private Bresenham2 br = new Bresenham2(); - private boolean updated = false; private float offsetx, offsety; private float zoom = 1f; private boolean grid = false; @@ -84,8 +80,6 @@ public class MapView extends Element implements GestureListener{ mousex = x; mousey = y; - updated = false; - Point2 p = project(x, y); lastx = p.x; lasty = p.y; @@ -95,7 +89,6 @@ public class MapView extends Element implements GestureListener{ firstTouch.set(p); if(tool.edit){ - updated = true; ui.editor.resetSaved(); } @@ -127,7 +120,6 @@ public class MapView extends Element implements GestureListener{ for(Point2 point : points){ editor.draw(point.x, point.y, EditorTool.isPaint()); } - updated = true; } editor.flushOp(); @@ -153,7 +145,6 @@ public class MapView extends Element implements GestureListener{ for(Point2 point : points){ tool.touched(editor, point.x, point.y); } - updated = true; } if(tool == EditorTool.line && Core.input.keyDown(KeyCode.TAB)){ diff --git a/core/src/io/anuke/mindustry/entities/Damage.java b/core/src/io/anuke/mindustry/entities/Damage.java index 91631ccad4..9f7ea0ca44 100644 --- a/core/src/io/anuke/mindustry/entities/Damage.java +++ b/core/src/io/anuke/mindustry/entities/Damage.java @@ -86,6 +86,7 @@ public class Damage{ tr.trns(angle, length); world.raycastEachWorld(x, y, x + tr.x, y + tr.y, (cx, cy) -> { Tile tile = world.tile(cx, cy); + if(tile != null) tile = tile.target(); if(tile != null && tile.entity != null && tile.target().getTeamID() != team.ordinal() && tile.entity.collide(hitter)){ tile.entity.collision(hitter); hitter.getBulletType().hit(hitter, tile.worldx(), tile.worldy()); @@ -113,7 +114,7 @@ public class Damage{ rect.width += expand * 2; rect.height += expand * 2; - Consumer cons = e -> { + Consumer cons = e -> { e.hitbox(hitrect); Rectangle other = hitrect; other.y -= expand; @@ -130,12 +131,12 @@ public class Damage{ } }; - Units.getNearbyEnemies(team, rect, cons); + Units.nearbyEnemies(team, rect, cons); } /** Damages all entities and blocks in a radius that are enemies of the team. */ - public static void damageUnits(Team team, float x, float y, float size, float damage, Predicate predicate, Consumer acceptor){ - Consumer cons = entity -> { + public static void damageUnits(Team team, float x, float y, float size, float damage, Predicate predicate, Consumer acceptor){ + Consumer cons = entity -> { if(!predicate.test(entity)) return; entity.hitbox(hitrect); @@ -148,9 +149,9 @@ public class Damage{ rect.setSize(size * 2).setCenter(x, y); if(team != null){ - Units.getNearbyEnemies(team, rect, cons); + Units.nearbyEnemies(team, rect, cons); }else{ - Units.getNearby(rect, cons); + Units.nearby(rect, cons); } } @@ -179,9 +180,9 @@ public class Damage{ rect.setSize(radius * 2).setCenter(x, y); if(team != null){ - Units.getNearbyEnemies(team, rect, cons); + Units.nearbyEnemies(team, rect, cons); }else{ - Units.getNearby(rect, cons); + Units.nearby(rect, cons); } if(!complete){ diff --git a/core/src/io/anuke/mindustry/entities/Entities.java b/core/src/io/anuke/mindustry/entities/Entities.java index 94a2baa629..f98ee41587 100755 --- a/core/src/io/anuke/mindustry/entities/Entities.java +++ b/core/src/io/anuke/mindustry/entities/Entities.java @@ -1,18 +1,23 @@ package io.anuke.mindustry.entities; +import io.anuke.arc.Core; import io.anuke.arc.collection.Array; import io.anuke.arc.collection.IntMap; +import io.anuke.arc.function.Consumer; +import io.anuke.arc.function.Predicate; +import io.anuke.arc.graphics.Camera; +import io.anuke.arc.math.geom.Rectangle; +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.traits.DrawTrait; import io.anuke.mindustry.entities.traits.Entity; public class Entities{ - public static final int maxLeafObjects = 5; - private static final EntityGroup defaultGroup; + public static final int maxLeafObjects = 4; private static final Array> groupArray = new Array<>(); private static final IntMap> groups = new IntMap<>(); - - static{ - defaultGroup = addGroup(Entity.class); - } + private static final Rectangle viewport = new Rectangle(); + private static final boolean clip = true; + private static int count = 0; public static void clear(){ for(EntityGroup group : groupArray){ @@ -20,20 +25,12 @@ public class Entities{ } } - public static Iterable all(){ - return defaultGroup.all(); - } - public static EntityGroup getGroup(int id){ return groups.get(id); } - public static Iterable> getAllGroups(){ - return groups.values(); - } - - public static EntityGroup defaultGroup(){ - return defaultGroup; + public static Array> getAllGroups(){ + return groupArray; } public static EntityGroup addGroup(Class type){ @@ -47,20 +44,46 @@ public class Entities{ return group; } - public static void update(){ - update(defaultGroup()); - EntityQuery.collideGroups(defaultGroup(), defaultGroup()); - } - public static void update(EntityGroup group){ group.updateEvents(); if(group.useTree()){ - EntityQuery.collisions().updatePhysics(group); + Vars.collisions.updatePhysics(group); } for(Entity e : group.all()){ e.update(); } } + + public static int countInBounds(EntityGroup group){ + count = 0; + draw(group, e -> true, e -> count++); + return count; + } + + public static void draw(EntityGroup group){ + draw(group, e -> true); + } + + public static void draw(EntityGroup group, Predicate toDraw){ + draw(group, toDraw, DrawTrait::draw); + } + + @SuppressWarnings("unchecked") + public static void draw(EntityGroup group, Predicate toDraw, Consumer cons){ + if(clip){ + Camera cam = Core.camera; + viewport.set(cam.position.x - cam.width / 2, cam.position.y - cam.height / 2, cam.width, cam.height); + } + + for(Entity e : group.all()){ + if(!(e instanceof DrawTrait) || !toDraw.test((T)e) || !e.isAdded()) continue; + DrawTrait draw = (DrawTrait)e; + + if(!clip || viewport.overlaps(draw.getX() - draw.drawSize()/2f, draw.getY() - draw.drawSize()/2f, draw.drawSize(), draw.drawSize())){ + cons.accept((T)e); + } + } + } } diff --git a/core/src/io/anuke/mindustry/entities/EntityCollisions.java b/core/src/io/anuke/mindustry/entities/EntityCollisions.java index dec2fd2291..3d98f80d35 100644 --- a/core/src/io/anuke/mindustry/entities/EntityCollisions.java +++ b/core/src/io/anuke/mindustry/entities/EntityCollisions.java @@ -43,7 +43,7 @@ public class EntityCollisions{ while(Math.abs(deltax) > 0 || !movedx){ movedx = true; - moveInternal(entity, Math.min(Math.abs(deltax), seg) * Mathf.sign(deltax), 0, true); + moveDelta(entity, Math.min(Math.abs(deltax), seg) * Mathf.sign(deltax), 0, true); if(Math.abs(deltax) >= seg){ deltax -= seg * Mathf.sign(deltax); @@ -56,7 +56,7 @@ public class EntityCollisions{ while(Math.abs(deltay) > 0 || !movedy){ movedy = true; - moveInternal(entity, 0, Math.min(Math.abs(deltay), seg) * Mathf.sign(deltay), false); + moveDelta(entity, 0, Math.min(Math.abs(deltay), seg) * Mathf.sign(deltay), false); if(Math.abs(deltay) >= seg){ deltay -= seg * Mathf.sign(deltay); @@ -66,7 +66,7 @@ public class EntityCollisions{ } } - public void moveInternal(SolidTrait entity, float deltax, float deltay, boolean x){ + public void moveDelta(SolidTrait entity, float deltax, float deltay, boolean x){ if(collider == null) throw new IllegalArgumentException("No tile collider specified! Call setCollider() first."); @@ -124,6 +124,7 @@ public class EntityCollisions{ return false; } + @SuppressWarnings("unchecked") public void updatePhysics(EntityGroup group){ collided.clear(); @@ -218,6 +219,7 @@ public class EntityCollisions{ } } + @SuppressWarnings("unchecked") public void collideGroups(EntityGroup groupa, EntityGroup groupb){ collided.clear(); diff --git a/core/src/io/anuke/mindustry/entities/EntityDraw.java b/core/src/io/anuke/mindustry/entities/EntityDraw.java deleted file mode 100644 index 1308b4dd64..0000000000 --- a/core/src/io/anuke/mindustry/entities/EntityDraw.java +++ /dev/null @@ -1,54 +0,0 @@ -package io.anuke.mindustry.entities; - -import io.anuke.arc.Core; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.function.Predicate; -import io.anuke.arc.graphics.Camera; -import io.anuke.arc.math.geom.Rectangle; -import io.anuke.mindustry.entities.traits.DrawTrait; -import io.anuke.mindustry.entities.traits.Entity; - -public class EntityDraw{ - private static final Rectangle viewport = new Rectangle(); - private static final Rectangle rect = new Rectangle(); - private static boolean clip = true; - private static int count = 0; - - public static void setClip(boolean clip){ - EntityDraw.clip = clip; - } - - public static int countInBounds(EntityGroup group){ - count = 0; - drawWith(group, e -> true, e -> count++); - return count; - } - - public static void draw(){ - draw(Entities.defaultGroup()); - } - - public static void draw(EntityGroup group){ - draw(group, e -> true); - } - - public static void draw(EntityGroup group, Predicate toDraw){ - drawWith(group, toDraw, DrawTrait::draw); - } - - @SuppressWarnings("unchecked") - public static void drawWith(EntityGroup group, Predicate toDraw, Consumer cons){ - if(clip){ - Camera cam = Core.camera; - viewport.set(cam.position.x - cam.width / 2, cam.position.y - cam.height / 2, cam.width, cam.height); - } - - for(Entity e : group.all()){ - if(!(e instanceof DrawTrait) || !toDraw.test((T)e) || !e.isAdded()) continue; - - if(!clip || rect.setSize(((DrawTrait)e).drawSize()).setCenter(e.getX(), e.getY()).overlaps(viewport)){ - cons.accept((T)e); - } - } - } -} diff --git a/core/src/io/anuke/mindustry/entities/EntityGroup.java b/core/src/io/anuke/mindustry/entities/EntityGroup.java index 212bd6dfa8..314aa63d76 100644 --- a/core/src/io/anuke/mindustry/entities/EntityGroup.java +++ b/core/src/io/anuke/mindustry/entities/EntityGroup.java @@ -25,6 +25,10 @@ public class EntityGroup{ this.useTree = useTree; this.id = lastid++; this.type = type; + + if(useTree){ + tree = new QuadTree<>(Entities.maxLeafObjects, new Rectangle(0, 0, 0, 0)); + } } public boolean useTree(){ @@ -105,12 +109,23 @@ public class EntityGroup{ } } + @SuppressWarnings("unchecked") + public void intersect(float x, float y, float width, float height, Consumer out){ + //don't waste time for empty groups + if(isEmpty()) return; + tree().getIntersect(out, x, y, width, height); + } + public QuadTree tree(){ + if(!useTree) throw new RuntimeException("This group does not support quadtrees! Enable quadtrees when creating it."); return tree; } - public void setTree(float x, float y, float w, float h){ - tree = new QuadTree<>(Entities.maxLeafObjects, new Rectangle(x, y, w, h)); + /** Resizes the internal quadtree, if it is enabled.*/ + public void resize(float x, float y, float w, float h){ + if(useTree){ + tree = new QuadTree<>(Entities.maxLeafObjects, new Rectangle(x, y, w, h)); + } } public boolean isEmpty(){ @@ -184,11 +199,4 @@ public class EntityGroup{ public Array all(){ return entityArray; } - - public void forEach(Consumer cons){ - - for(T t : entityArray){ - cons.accept(t); - } - } } diff --git a/core/src/io/anuke/mindustry/entities/EntityQuery.java b/core/src/io/anuke/mindustry/entities/EntityQuery.java deleted file mode 100644 index 9358ca4f06..0000000000 --- a/core/src/io/anuke/mindustry/entities/EntityQuery.java +++ /dev/null @@ -1,95 +0,0 @@ -package io.anuke.mindustry.entities; - -import io.anuke.arc.collection.Array; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.function.Predicate; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Rectangle; -import io.anuke.mindustry.entities.traits.Entity; -import io.anuke.mindustry.entities.traits.SolidTrait; - -import static io.anuke.mindustry.entities.Entities.defaultGroup; - -public class EntityQuery{ - private static final EntityCollisions collisions = new EntityCollisions(); - private static final Array array = new Array<>(); - private static final Rectangle r1 = new Rectangle(); - - public static EntityCollisions collisions(){ - return collisions; - } - - public static void init(float x, float y, float w, float h){ - - for(EntityGroup group : Entities.getAllGroups()){ - if(group.useTree()){ - group.setTree(x, y, w, h); - } - } - } - - public static void init(){ - init(0, 0, 0, 0); - } - - public static void resizeTree(float x, float y, float w, float h){ - init(x, y, w, h); - } - - public static void getNearby(EntityGroup group, Rectangle rect, Consumer out){ - - if(!group.useTree()) - throw new RuntimeException("This group does not support quadtrees! Enable quadtrees when creating it."); - group.tree().getIntersect(out, rect); - } - - public static Array getNearby(EntityGroup group, Rectangle rect){ - - array.clear(); - if(!group.useTree()) - throw new RuntimeException("This group does not support quadtrees! Enable quadtrees when creating it."); - group.tree().getIntersect(array, rect); - return array; - } - - public static void getNearby(float x, float y, float size, Consumer out){ - getNearby(defaultGroup(), r1.setSize(size).setCenter(x, y), out); - } - - public static void getNearby(EntityGroup group, float x, float y, float size, Consumer out){ - getNearby(group, r1.setSize(size).setCenter(x, y), out); - } - - public static Array getNearby(float x, float y, float size){ - return getNearby(defaultGroup(), r1.setSize(size).setCenter(x, y)); - } - - public static Array getNearby(EntityGroup group, float x, float y, float size){ - return getNearby(group, r1.setSize(size).setCenter(x, y)); - } - - public static T getClosest(EntityGroup group, float x, float y, float range, Predicate pred){ - - T closest = null; - float cdist = 0f; - Array entities = getNearby(group, x, y, range * 2f); - for(int i = 0; i < entities.size; i++){ - T e = (T)entities.get(i); - if(!pred.test(e)) - continue; - - float dist = Mathf.dst(e.getX(), e.getY(), x, y); - if(dist < range) - if(closest == null || dist < cdist){ - closest = e; - cdist = dist; - } - } - - return closest; - } - - public static void collideGroups(EntityGroup groupa, EntityGroup groupb){ - collisions().collideGroups(groupa, groupb); - } -} diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index c913a6db6f..dbf78bf0fa 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -9,16 +9,12 @@ import io.anuke.arc.math.geom.Rectangle; import io.anuke.mindustry.entities.traits.TargetTrait; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.*; -/** - * Utility class for unit and team interactions. - */ +/** Utility class for unit and team interactions.*/ public class Units{ - private static Rectangle rect = new Rectangle(); private static Rectangle hitrect = new Rectangle(); private static Unit result; private static float cdist; @@ -34,7 +30,7 @@ public class Units{ * @return whether the target is invalid */ public static boolean invalidateTarget(TargetTrait target, Team team, float x, float y, float range){ - return target == null || (range != Float.MAX_VALUE && target.dst(x, y) > range) || target.getTeam() == team || !target.isValid(); + return target == null || (range != Float.MAX_VALUE && !target.withinDst(x, y, range)) || target.getTeam() == team || !target.isValid(); } /** See {@link #invalidateTarget(TargetTrait, Team, float, float, float)} */ @@ -49,23 +45,19 @@ public class Units{ /** Returns whether there are any entities on this tile. */ public static boolean anyEntities(Tile tile){ - Block type = tile.block(); - rect.setSize(type.size * tilesize, type.size * tilesize); - rect.setCenter(tile.drawx(), tile.drawy()); - - return anyEntities(rect); + float size = tile.block().size * tilesize; + return anyEntities(tile.drawx() - size/2f, tile.drawy() - size/2f, size, size); } - /** Can be called from any thread. */ - public static boolean anyEntities(Rectangle rect){ + public static boolean anyEntities(float x, float y, float width, float height){ boolResult = false; - Units.getNearby(rect, unit -> { + nearby(x, y, width, height, unit -> { if(boolResult) return; if(!unit.isFlying()){ unit.hitbox(hitrect); - if(hitrect.overlaps(rect)){ + if(hitrect.overlaps(x, y, width, height)){ boolResult = true; } } @@ -74,28 +66,6 @@ public class Units{ return boolResult; } - /** Returns whether there are any entities on this tile, with the hitbox expanded. */ - public static boolean anyEntities(Tile tile, float expansion, Predicate pred){ - Block type = tile.block(); - rect.setSize(type.size * tilesize + expansion, type.size * tilesize + expansion); - rect.setCenter(tile.drawx(), tile.drawy()); - - boolean[] value = new boolean[1]; - - Units.getNearby(rect, unit -> { - if(value[0] || !pred.test(unit) || unit.isDead()) return; - if(!unit.isFlying()){ - unit.hitbox(hitrect); - - if(hitrect.overlaps(rect)){ - value[0] = true; - } - } - }); - - return value[0]; - } - /** Returns the neareset damaged tile. */ public static TileEntity findDamagedTile(Team team, float x, float y){ Tile tile = Geometry.findClosest(x, y, world.indexer.getDamaged(team)); @@ -120,36 +90,19 @@ public class Units{ return null; } - /** Iterates over all units on all teams, including players. */ - public static void allUnits(Consumer cons){ - //check all unit groups first - for(EntityGroup group : unitGroups){ - if(!group.isEmpty()){ - for(BaseUnit unit : group.all()){ - cons.accept(unit); - } - } - } - - //then check all player groups - for(Player player : playerGroup.all()){ - cons.accept(player); - } + /** Returns the closest target enemy. First, units are checked, then tile entities. */ + public static TargetTrait closestTarget(Team team, float x, float y, float range){ + return closestTarget(team, x, y, range, Unit::isValid); } /** Returns the closest target enemy. First, units are checked, then tile entities. */ - public static TargetTrait getClosestTarget(Team team, float x, float y, float range){ - return getClosestTarget(team, x, y, range, Unit::isValid); + public static TargetTrait closestTarget(Team team, float x, float y, float range, Predicate unitPred){ + return closestTarget(team, x, y, range, unitPred, t -> true); } /** Returns the closest target enemy. First, units are checked, then tile entities. */ - public static TargetTrait getClosestTarget(Team team, float x, float y, float range, Predicate unitPred){ - return getClosestTarget(team, x, y, range, unitPred, t -> true); - } - - /** Returns the closest target enemy. First, units are checked, then tile entities. */ - public static TargetTrait getClosestTarget(Team team, float x, float y, float range, Predicate unitPred, Predicate tilePred){ - Unit unit = getClosestEnemy(team, x, y, range, unitPred); + public static TargetTrait closestTarget(Team team, float x, float y, float range, Predicate unitPred, Predicate tilePred){ + Unit unit = closestEnemy(team, x, y, range, unitPred); if(unit != null){ return unit; }else{ @@ -158,24 +111,19 @@ public class Units{ } /** Returns the closest enemy of this team. Filter by predicate. */ - public static Unit getClosestEnemy(Team team, float x, float y, float range, Predicate predicate){ + public static Unit closestEnemy(Team team, float x, float y, float range, Predicate predicate){ if(team == Team.none) return null; result = null; cdist = 0f; - rect.setSize(range * 2f).setCenter(x, y); + nearbyEnemies(team, x - range, y - range, range*2f, range*2f, e -> { + if(e.isDead() || !predicate.test(e)) return; - getNearbyEnemies(team, rect, e -> { - if(e.isDead() || !predicate.test(e)) - return; - - float dist = Mathf.dst(e.x, e.y, x, y); - if(dist < range){ - if(result == null || dist < cdist){ - result = e; - cdist = dist; - } + float dst2 = Mathf.dst2(e.x, e.y, x, y); + if(dst2 < range*range && (result == null || dst2 < cdist)){ + result = e; + cdist = dst2; } }); @@ -183,22 +131,17 @@ public class Units{ } /** Returns the closest ally of this team. Filter by predicate. */ - public static Unit getClosest(Team team, float x, float y, float range, Predicate predicate){ + public static Unit closest(Team team, float x, float y, float range, Predicate predicate){ result = null; cdist = 0f; - rect.setSize(range * 2f).setCenter(x, y); + nearby(team, x, y, range, e -> { + if(!predicate.test(e)) return; - getNearby(team, rect, e -> { - if(!predicate.test(e)) - return; - - float dist = Mathf.dst(e.x, e.y, x, y); - if(dist < range){ - if(result == null || dist < cdist){ - result = e; - cdist = dist; - } + float dist = Mathf.dst2(e.x, e.y, x, y); + if(result == null || dist < cdist){ + result = e; + cdist = dist; } }); @@ -206,87 +149,71 @@ public class Units{ } /** Iterates over all units in a rectangle. */ - public static void getNearby(Team team, Rectangle rect, Consumer cons){ - - EntityGroup group = unitGroups[team.ordinal()]; - if(!group.isEmpty()){ - EntityQuery.getNearby(group, rect, entity -> cons.accept((Unit)entity)); - } - - //now check all players - EntityQuery.getNearby(playerGroup, rect, player -> { - if(((Unit)player).getTeam() == team) cons.accept((Unit)player); + public static void nearby(Team team, float x, float y, float width, float height, Consumer cons){ + unitGroups[team.ordinal()].intersect(x, y, width, height, cons); + playerGroup.intersect(x, y, width, height, player -> { + if(player.getTeam() == team){ + cons.accept(player); + } }); } /** Iterates over all units in a circle around this position. */ - public static void getNearby(Team team, float x, float y, float radius, Consumer cons){ - rect.setSize(radius * 2).setCenter(x, y); + public static void nearby(Team team, float x, float y, float radius, Consumer cons){ + unitGroups[team.ordinal()].intersect(x - radius, y - radius, radius*2f, radius*2f, unit -> { + if(unit.withinDst(x, y, radius)){ + cons.accept(unit); + } + }); - EntityGroup group = unitGroups[team.ordinal()]; - if(!group.isEmpty()){ - EntityQuery.getNearby(group, rect, entity -> { - if(entity.dst(x, y) <= radius){ - cons.accept((Unit)entity); - } - }); - } - - //now check all players - EntityQuery.getNearby(playerGroup, rect, player -> { - if(((Unit)player).getTeam() == team && player.dst(x, y) <= radius){ - cons.accept((Unit)player); + playerGroup.intersect(x - radius, y - radius, radius*2f, radius*2f, unit -> { + if(unit.getTeam() == team && unit.withinDst(x, y, radius)){ + cons.accept(unit); } }); } /** Iterates over all units in a rectangle. */ - public static void getNearby(Rectangle rect, Consumer cons){ - + public static void nearby(float x, float y, float width, float height, Consumer cons){ for(Team team : Team.all){ - EntityGroup group = unitGroups[team.ordinal()]; - if(!group.isEmpty()){ - EntityQuery.getNearby(group, rect, entity -> cons.accept((Unit)entity)); - } + unitGroups[team.ordinal()].intersect(x, y, width, height, cons); } - //now check all enemy players - EntityQuery.getNearby(playerGroup, rect, player -> cons.accept((Unit)player)); + playerGroup.intersect(x, y, width, height, cons); + } + + /** Iterates over all units in a rectangle. */ + public static void nearby(Rectangle rect, Consumer cons){ + nearby(rect.x, rect.y, rect.width, rect.height, cons); } /** Iterates over all units that are enemies of this team. */ - public static void getNearbyEnemies(Team team, Rectangle rect, Consumer cons){ + public static void nearbyEnemies(Team team, float x, float y, float width, float height, Consumer cons){ EnumSet targets = state.teams.enemiesOf(team); for(Team other : targets){ - EntityGroup group = unitGroups[other.ordinal()]; - if(!group.isEmpty()){ - EntityQuery.getNearby(group, rect, entity -> cons.accept((Unit)entity)); - } + unitGroups[other.ordinal()].intersect(x, y, width, height, cons); } - //now check all enemy players - EntityQuery.getNearby(playerGroup, rect, player -> { - if(targets.contains(((Player)player).getTeam())){ - cons.accept((Unit)player); + playerGroup.intersect(x, y, width, height, player -> { + if(targets.contains(player.getTeam())){ + cons.accept(player); } }); } + /** Iterates over all units that are enemies of this team. */ + public static void nearbyEnemies(Team team, Rectangle rect, Consumer cons){ + nearbyEnemies(team, rect.x, rect.y, rect.width, rect.height, cons); + } + /** Iterates over all units. */ - public static void getAllUnits(Consumer cons){ - + public static void all(Consumer cons){ for(Team team : Team.all){ - EntityGroup group = unitGroups[team.ordinal()]; - for(Unit unit : group.all()){ - cons.accept(unit); - } + unitGroups[team.ordinal()].all().each(cons); } - //now check all enemy players - for(Unit unit : playerGroup.all()){ - cons.accept(unit); - } + playerGroup.all().each(cons); } } diff --git a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java index 45cbc8aa8a..3bda06008a 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java @@ -148,7 +148,7 @@ public abstract class BulletType extends Content{ public void update(Bullet b){ if(homingPower > 0.0001f){ - TargetTrait target = Units.getClosestTarget(b.getTeam(), b.x, b.y, homingRange); + TargetTrait target = Units.closestTarget(b.getTeam(), b.x, b.y, homingRange); if(target != null){ b.velocity().setAngle(Mathf.slerpDelta(b.velocity().angle(), b.angleTo(target), 0.08f)); } diff --git a/core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java b/core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java index 227191470a..0a435d0bcb 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java @@ -24,7 +24,7 @@ public abstract class FlakBulletType extends BasicBulletType{ if(b.getData() instanceof Integer) return; if(b.timer.get(2, 6)){ - Units.getNearbyEnemies(b.getTeam(), rect.setSize(explodeRange * 2f).setCenter(b.x, b.y), unit -> { + Units.nearbyEnemies(b.getTeam(), rect.setSize(explodeRange * 2f).setCenter(b.x, b.y), unit -> { if(b.getData() instanceof Float) return; if(unit.dst(b) < explodeRange){ diff --git a/core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java b/core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java index 01902bd9bc..a3bd379542 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java +++ b/core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java @@ -88,7 +88,6 @@ public class MassDriverBolt extends BulletType{ if(!(b.getData() instanceof DriverBulletData)) return; DriverBulletData data = (DriverBulletData)b.getData(); - data.to.isRecieving = false; for(int i = 0; i < data.items.length; i++){ int amountDropped = Mathf.random(0, data.items[i]); diff --git a/core/src/io/anuke/mindustry/entities/effect/Lightning.java b/core/src/io/anuke/mindustry/entities/effect/Lightning.java index 3358d64cd7..b3e72ca915 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Lightning.java +++ b/core/src/io/anuke/mindustry/entities/effect/Lightning.java @@ -70,7 +70,7 @@ public class Lightning extends TimedEntity implements DrawTrait, SyncTrait, Time rect.setSize(hitRange).setCenter(x, y); entities.clear(); if(hit.size < maxChain){ - Units.getNearbyEnemies(team, rect, u -> { + Units.nearbyEnemies(team, rect, u -> { if(!hit.contains(u.getID())){ entities.add(u); } diff --git a/core/src/io/anuke/mindustry/entities/effect/Puddle.java b/core/src/io/anuke/mindustry/entities/effect/Puddle.java index f07800844c..76816d077e 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Puddle.java +++ b/core/src/io/anuke/mindustry/entities/effect/Puddle.java @@ -188,7 +188,7 @@ public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrai //effects-only code if(amount >= maxLiquid / 2f && updateTime <= 0f){ - Units.getNearby(rect.setSize(Mathf.clamp(amount / (maxLiquid / 1.5f)) * 10f).setCenter(x, y), unit -> { + Units.nearby(rect.setSize(Mathf.clamp(amount / (maxLiquid / 1.5f)) * 10f).setCenter(x, y), unit -> { if(unit.isFlying()) return; unit.hitbox(rect2); diff --git a/core/src/io/anuke/mindustry/entities/impl/EffectEntity.java b/core/src/io/anuke/mindustry/entities/impl/EffectEntity.java index e678f29964..789ce78dfa 100644 --- a/core/src/io/anuke/mindustry/entities/impl/EffectEntity.java +++ b/core/src/io/anuke/mindustry/entities/impl/EffectEntity.java @@ -5,9 +5,12 @@ import io.anuke.arc.util.pooling.Pool.Poolable; import io.anuke.arc.util.pooling.Pools; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects.Effect; +import io.anuke.mindustry.entities.EntityGroup; import io.anuke.mindustry.entities.traits.DrawTrait; import io.anuke.mindustry.entities.traits.Entity; +import static io.anuke.mindustry.Vars.effectGroup; + public class EffectEntity extends TimedEntity implements Poolable, DrawTrait{ public Effect effect; public Color color = new Color(Color.WHITE); @@ -27,6 +30,12 @@ public class EffectEntity extends TimedEntity implements Poolable, DrawTrait{ this.poffsety = y - parent.getY(); } + @Override + public EntityGroup targetGroup(){ + //this should never actually be called + return effectGroup; + } + @Override public float lifetime(){ return effect.lifetime; diff --git a/core/src/io/anuke/mindustry/entities/traits/Entity.java b/core/src/io/anuke/mindustry/entities/traits/Entity.java index 582880beac..a98257cf77 100644 --- a/core/src/io/anuke/mindustry/entities/traits/Entity.java +++ b/core/src/io/anuke/mindustry/entities/traits/Entity.java @@ -1,6 +1,5 @@ package io.anuke.mindustry.entities.traits; -import io.anuke.mindustry.entities.Entities; import io.anuke.mindustry.entities.EntityGroup; public interface Entity extends MoveTrait{ @@ -18,13 +17,13 @@ public interface Entity extends MoveTrait{ default void added(){ } - default EntityGroup targetGroup(){ - return Entities.defaultGroup(); - } + EntityGroup targetGroup(); @SuppressWarnings("unchecked") default void add(){ - targetGroup().add(this); + if(targetGroup() != null){ + targetGroup().add(this); + } } @SuppressWarnings("unchecked") diff --git a/core/src/io/anuke/mindustry/entities/traits/SolidTrait.java b/core/src/io/anuke/mindustry/entities/traits/SolidTrait.java index 9321c6fcc1..5ebf8105f3 100644 --- a/core/src/io/anuke/mindustry/entities/traits/SolidTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/SolidTrait.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.entities.traits; import io.anuke.arc.math.geom.*; import io.anuke.arc.math.geom.QuadTree.QuadTreeObject; -import io.anuke.mindustry.entities.EntityQuery; +import io.anuke.mindustry.Vars; public interface SolidTrait extends QuadTreeObject, MoveTrait, VelocityTrait, Entity, Position{ @@ -25,10 +25,6 @@ public interface SolidTrait extends QuadTreeObject, MoveTrait, VelocityTrait, En return getY() - lastPosition().y; } - default boolean movable(){ - return false; - } - default boolean collides(SolidTrait other){ return true; } @@ -37,6 +33,6 @@ public interface SolidTrait extends QuadTreeObject, MoveTrait, VelocityTrait, En } default void move(float x, float y){ - EntityQuery.collisions().move(this, x, y); + Vars.collisions.move(this, x, y); } } diff --git a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java index 54553c2036..6909d470e5 100644 --- a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java @@ -136,7 +136,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ } public void targetClosest(){ - TargetTrait newTarget = Units.getClosestTarget(team, x, y, Math.max(getWeapon().bullet.range(), type.range), u -> type.targetAir || !u.isFlying()); + TargetTrait newTarget = Units.closestTarget(team, x, y, Math.max(getWeapon().bullet.range(), type.range), u -> type.targetAir || !u.isFlying()); if(newTarget != null){ target = newTarget; } @@ -260,7 +260,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ kill(); } - avoidOthers(1.25f); + avoidOthers(); if(spawner != noSpawner && (world.tile(spawner) == null || world.tile(spawner).entity == null)){ kill(); diff --git a/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java index 854cd51c3d..dc92379241 100644 --- a/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java @@ -84,7 +84,7 @@ public abstract class FlyingUnit extends BaseUnit{ }); if(target != null){ - circle(60f + Mathf.absin(Time.time() + id * 23525, 70f, 1200f)); + circle(60f + Mathf.absin(Time.time() + Mathf.randomSeed(id) * 1200f, 70f, 1200f)); } } }; diff --git a/core/src/io/anuke/mindustry/entities/type/GroundUnit.java b/core/src/io/anuke/mindustry/entities/type/GroundUnit.java index 062231d760..0239f9bdf2 100644 --- a/core/src/io/anuke/mindustry/entities/type/GroundUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/GroundUnit.java @@ -76,8 +76,9 @@ public abstract class GroundUnit extends BaseUnit{ @Override public void move(float x, float y){ - if(Mathf.dst(x, y) > 0.01f){ - baseRotation = Mathf.slerpDelta(baseRotation, Mathf.angle(x, y), type.baseRotateSpeed); + float dst = Mathf.dst(x, y); + if(dst > 0.01f){ + baseRotation = Mathf.slerp(baseRotation, Mathf.angle(x, y), type.baseRotateSpeed * (dst / type.speed)); } super.move(x, y); } diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/io/anuke/mindustry/entities/type/Player.java index 922d4bd4ce..3b38f68390 100644 --- a/core/src/io/anuke/mindustry/entities/type/Player.java +++ b/core/src/io/anuke/mindustry/entities/type/Player.java @@ -52,8 +52,9 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ public float boostHeat, shootHeat, destructTime; public boolean achievedFlight; public Color color = new Color(); - public Mech mech; + public Mech mech = Mechs.starter; public SpawnerTrait spawner, lastSpawner; + public int respawns; public NetConnection con; public boolean isLocal = false; @@ -81,7 +82,6 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ player.dead = true; player.placeQueue.clear(); player.onDeath(); - player.mech = (player.isMobile ? Mechs.starterMobile : Mechs.starterDesktop); } @Override @@ -101,25 +101,29 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ @Override public void onRespawn(Tile tile){ + velocity.setZero(); boostHeat = 1f; achievedFlight = true; + rotation = 90f; + baseRotation = 90f; + dead = false; + spawner = null; + respawns --; + + setNet(tile.drawx(), tile.drawy()); + clearItem(); + heal(); } @Override public void move(float x, float y){ if(!mech.flying){ - EntityQuery.collisions().move(this, x, y); + collisions.move(this, x, y); }else{ moveBy(x, y); } } - @Override - public boolean collidesGrid(int x, int y){ - Tile tile = world.tile(x, y); - return !isFlying() || (!mech.flying && tile != null && !tile.block().synthetic() && tile.block().solid); - } - @Override public float drag(){ return mech.drag; @@ -489,7 +493,6 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ @Override public void update(){ - hitTime -= Time.delta(); if(Float.isNaN(x) || Float.isNaN(y)){ @@ -516,13 +519,15 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ if(isDead()){ isBoosting = false; boostHeat = 0f; - updateRespawning(); + if(respawns > 0 || !state.rules.limitedRespawns){ + updateRespawning(); + } return; }else{ spawner = null; } - avoidOthers(1f); + avoidOthers(); Tile tile = world.tileWorld(x, y); @@ -682,7 +687,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ rect.width += expansion * 2f; rect.height += expansion * 2f; - isBoosting = EntityQuery.collisions().overlapsTile(rect) || dst(targetX, targetY) > 85f; + isBoosting = collisions.overlapsTile(rect) || dst(targetX, targetY) > 85f; velocity.add(movement.scl(Time.delta())); @@ -710,7 +715,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ if(target == null){ isShooting = false; if(Core.settings.getBool("autotarget")){ - target = Units.getClosestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.none, u -> u.getTeam() != Team.none); + target = Units.closestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.none, u -> u.getTeam() != Team.none); if(mech.canHeal && target == null){ target = Geometry.findClosest(x, y, world.indexer.getDamaged(Team.blue)); @@ -775,12 +780,9 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ spawner = lastSpawner = null; health = maxHealth(); boostHeat = drownTime = hitTime = 0f; - mech = getStarterMech(); + mech = Mechs.starter; placeQueue.clear(); - } - - public Mech getStarterMech(){ - return (isMobile ? Mechs.starterMobile : Mechs.starterDesktop); + respawns = state.rules.respawns; } public boolean isShooting(){ @@ -792,10 +794,12 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ if(spawner != null && spawner.isValid()){ spawner.updateSpawning(this); }else if(!netServer.isWaitingForPlayers()){ - if(lastSpawner != null && lastSpawner.isValid()){ - this.spawner = lastSpawner; - }else if(getClosestCore() != null){ - this.spawner = (SpawnerTrait)getClosestCore(); + if(!Net.client()){ + if(lastSpawner != null && lastSpawner.isValid()){ + this.spawner = lastSpawner; + }else if(getClosestCore() != null){ + this.spawner = (SpawnerTrait)getClosestCore(); + } } }else if(getClosestCore() != null){ set(getClosestCore().getX(), getClosestCore().getY()); @@ -806,17 +810,13 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ this.spawner = spawner; this.lastSpawner = spawner; this.dead = true; - } - - public void endRespawning(){ - spawner = null; + setNet(spawner.getX(), spawner.getY()); } //endregion //region read and write methods - @Override public boolean isClipped(){ return false; @@ -900,12 +900,13 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ }else{ mining = world.tile(mine); isBoosting = boosting; - Tile tile = world.tile(spawner); - if(tile != null && tile.entity instanceof SpawnerTrait){ - this.spawner = (SpawnerTrait)tile.entity; - }else{ - this.spawner = null; - } + } + + Tile tile = world.tile(spawner); + if(tile != null && tile.entity instanceof SpawnerTrait){ + this.spawner = (SpawnerTrait)tile.entity; + }else{ + this.spawner = null; } } diff --git a/core/src/io/anuke/mindustry/entities/type/TileEntity.java b/core/src/io/anuke/mindustry/entities/type/TileEntity.java index 2fb3bb1d81..a02be3653b 100644 --- a/core/src/io/anuke/mindustry/entities/type/TileEntity.java +++ b/core/src/io/anuke/mindustry/entities/type/TileEntity.java @@ -5,13 +5,10 @@ import io.anuke.annotations.Annotations.Remote; import io.anuke.arc.Events; import io.anuke.arc.collection.Array; import io.anuke.arc.collection.ObjectSet; -import io.anuke.arc.math.Mathf; import io.anuke.arc.math.geom.Point2; import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.util.Interval; import io.anuke.arc.util.Time; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.EntityGroup; import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.impl.BaseEntity; @@ -21,7 +18,6 @@ import io.anuke.mindustry.game.EventType.BlockDestroyEvent; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.blocks.defense.Wall; import io.anuke.mindustry.world.modules.*; import java.io.*; @@ -247,7 +243,6 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ Events.fire(new BlockDestroyEvent(tile)); block.onDestroyed(tile); world.removeBlock(tile); - block.afterDestroyed(tile, this); remove(); } } @@ -265,10 +260,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ @Override public void update(){ //TODO better smoke effect, this one is awful - if(health != 0 && health < block.health && !(block instanceof Wall) && + /*if(health != 0 && health < block.health && !(block instanceof Wall) && Mathf.chance(0.009f * Time.delta() * (1f - health / block.health))){ Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4)); - } + }*/ timeScaleDuration -= Time.delta(); if(timeScaleDuration <= 0f || !block.canOverdrive){ diff --git a/core/src/io/anuke/mindustry/entities/type/Unit.java b/core/src/io/anuke/mindustry/entities/type/Unit.java index 910f8299ab..8bb69e72e1 100644 --- a/core/src/io/anuke/mindustry/entities/type/Unit.java +++ b/core/src/io/anuke/mindustry/entities/type/Unit.java @@ -8,12 +8,10 @@ import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.Vector2; -import io.anuke.arc.util.Time; -import io.anuke.arc.util.Tmp; +import io.anuke.arc.util.*; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Damage; -import io.anuke.mindustry.entities.Effects; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.effect.ScorchDecal; import io.anuke.mindustry.entities.impl.DestructibleEntity; import io.anuke.mindustry.entities.traits.*; @@ -44,9 +42,6 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ private static final Vector2 moveVector = new Vector2(); - private int lastWeightTile = Pos.invalid, lastWeightDelta; - private boolean wasFlying = false; - public float rotation; protected final Interpolator interpolator = new Interpolator(); @@ -56,11 +51,6 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ protected Team team = Team.blue; protected float drownTime, hitTime; - @Override - public boolean movable(){ - return !isDead(); - } - @Override public boolean collidesGrid(int x, int y){ return !isFlying(); @@ -137,22 +127,6 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ } } - @Override - public void removed(){ - if(lastWeightTile != Pos.invalid){ - Tile tile = world.tile(lastWeightTile); - - if(tile != null){ - int dec = Math.min(lastWeightDelta, wasFlying ? tile.airWeight : tile.weight); - if(!wasFlying){ - tile.weight -= dec; - }else{ - tile.airWeight -= dec; - } - } - } - } - @Override public boolean isValid(){ return !isDead() && isAdded(); @@ -232,55 +206,19 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ return status.hasEffect(effect); } - public void avoidOthers(float scaling){ - boolean flying = isFlying(); - - if(lastWeightTile != Pos.invalid){ - Tile tile = world.tile(lastWeightTile); - - if(tile != null){ - int dec = Math.min(lastWeightDelta, wasFlying ? tile.airWeight : tile.weight); - if(!wasFlying){ - tile.weight -= dec; - }else{ - tile.airWeight -= dec; - } - } - } - - final int rad = 2; - + public void avoidOthers(){ + float radScl = 1.5f; + float fsize = getSize() / radScl; moveVector.setZero(); - for(int cx = -rad; cx <= rad; cx++){ - for(int cy = -rad; cy <= rad; cy++){ - Tile tile = world.tileWorld(x + cx * tilesize, y + cy * tilesize); - if(tile == null) continue; - int weight = flying ? tile.airWeight : tile.weight; - float scl = (rad - Mathf.dst(tile.worldx(), tile.worldy(), x, y) / (8f * 1.2f * Mathf.sqrt2)) * 0.1f; - moveVector.add(Mathf.sign(x - tile.worldx()) * scaling * weight * scl, Mathf.sign(y - tile.worldy()) * scaling * weight * scl); - } - } - - moveVector.limit(flying ? 0.1f : 0.2f); + Units.nearby(x - fsize/2f, y - fsize/2f, fsize, fsize, en -> { + if(en == this || en.isFlying() != isFlying()) return; + 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()); - - Tile tile = world.tileWorld(x, y); - - if(tile != null){ - int tw = flying ? tile.airWeight : tile.weight; - lastWeightDelta = Math.min((int)(mass()), 127 - tw); - lastWeightTile = tile.pos(); - if(!flying){ - tile.weight += lastWeightDelta; - }else{ - tile.airWeight += lastWeightDelta; - } - }else{ - lastWeightTile = Pos.invalid; - } - wasFlying = flying; } public TileEntity getClosestCore(){ @@ -416,7 +354,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ } public void drawStats(){ - Draw.color(Color.BLACK, team.color, healthf() + Mathf.absin(Time.time(), healthf() * 5f, 1f - healthf())); + Draw.color(Color.BLACK, team.color, healthf() + Mathf.absin(Time.time(), Math.max(healthf() * 5f, 1f), 1f - healthf())); Draw.rect(getPowerCellRegion(), x, y, rotation - 90); Draw.color(); } diff --git a/core/src/io/anuke/mindustry/game/RulePreset.java b/core/src/io/anuke/mindustry/game/Gamemode.java similarity index 90% rename from core/src/io/anuke/mindustry/game/RulePreset.java rename to core/src/io/anuke/mindustry/game/Gamemode.java index 4968f24db3..4211e1fcf9 100644 --- a/core/src/io/anuke/mindustry/game/RulePreset.java +++ b/core/src/io/anuke/mindustry/game/Gamemode.java @@ -4,7 +4,7 @@ import io.anuke.arc.Core; import io.anuke.arc.function.Supplier; /** Defines preset rule sets.. */ -public enum RulePreset{ +public enum Gamemode{ survival(() -> new Rules(){{ waveTimer = true; waves = true; @@ -16,11 +16,12 @@ public enum RulePreset{ waves = true; waveTimer = false; respawnTime = 0f; - spawns = DefaultWaves.get(); }}), attack(() -> new Rules(){{ enemyCheat = true; unitDrops = true; + waves = false; + attackMode = true; }}), pvp(() -> new Rules(){{ pvp = true; @@ -32,11 +33,12 @@ public enum RulePreset{ playerHealthMultiplier = 0.8f; unitBuildSpeedMultiplier = 3f; unitHealthMultiplier = 2f; + attackMode = true; }}); private final Supplier rules; - RulePreset(Supplier rules){ + Gamemode(Supplier rules){ this.rules = rules; } diff --git a/core/src/io/anuke/mindustry/game/GlobalData.java b/core/src/io/anuke/mindustry/game/GlobalData.java index 11dabeb994..f472325bee 100644 --- a/core/src/io/anuke/mindustry/game/GlobalData.java +++ b/core/src/io/anuke/mindustry/game/GlobalData.java @@ -77,7 +77,7 @@ public class GlobalData{ /** * Makes this piece of content 'unlocked', if possible. - * If this piece of content is already unlocked or cannot be unlocked due to dependencies, nothing changes. + * If this piece of content is already unlocked, nothing changes. * Results are not saved until you call {@link #save()}. */ public void unlockContent(UnlockableContent content){ diff --git a/core/src/io/anuke/mindustry/game/Rules.java b/core/src/io/anuke/mindustry/game/Rules.java index 44db4aabdf..95faf1c90a 100644 --- a/core/src/io/anuke/mindustry/game/Rules.java +++ b/core/src/io/anuke/mindustry/game/Rules.java @@ -37,12 +37,26 @@ public class Rules{ public float buildSpeedMultiplier = 1f; /** No-build zone around enemy core radius. */ public float enemyCoreBuildRadius = 400f; + /** Radius around enemy wave drop zones.*/ + public float dropZoneRadius = 380f; /** Player respawn time in ticks. */ public float respawnTime = 60 * 4; /** Time between waves in ticks. */ public float waveSpacing = 60 * 60 * 2; + /** How many times longer a boss wave takes. */ + public float bossWaveMultiplier = 3f; + /** How many times longer a launch wave takes. */ + public float launchWaveMultiplier = 2f; /** Zone ID, -1 for invalid zone. */ public byte zone = -1; - /** Spawn layout. Since only zones modify this, it should be assigned on save load. */ + /** Spawn layout. Should be assigned on save load based on map or zone. */ public transient Array spawns = DefaultWaves.get(); + /** Determines if there should be limited respawns. */ + public boolean limitedRespawns = false; + /** How many times player can respawn during one wave. */ + public int respawns = 5; + /** Hold wave timer until all enemies are destroyed. */ + public boolean waitForWaveToEnd = false; + /** Determinates if gamemode is attack mode */ + public boolean attackMode = false; } diff --git a/core/src/io/anuke/mindustry/game/SpawnGroup.java b/core/src/io/anuke/mindustry/game/SpawnGroup.java index d6cc11f243..4637ba4bfd 100644 --- a/core/src/io/anuke/mindustry/game/SpawnGroup.java +++ b/core/src/io/anuke/mindustry/game/SpawnGroup.java @@ -48,9 +48,7 @@ public class SpawnGroup implements Serializable{ if(wave < begin || wave > end || (wave - begin) % spacing != 0){ return 0; } - float scaling = this.unitScaling; - - return Math.min(unitAmount - 1 + Math.max((int)(((wave - begin + 1) / spacing) / scaling), 1), max); + return Math.min(unitAmount + (int)(((wave - begin) / spacing) / unitScaling), max); } /** diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index 524d1df00a..cafd2fb798 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -9,6 +9,7 @@ import io.anuke.arc.graphics.Texture.TextureFilter; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Fill; import io.anuke.arc.graphics.glutils.FrameBuffer; +import io.anuke.arc.util.Disposable; import io.anuke.arc.util.Tmp; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.game.EventType.TileChangeEvent; @@ -20,7 +21,7 @@ import io.anuke.mindustry.world.Tile; import static io.anuke.arc.Core.camera; import static io.anuke.mindustry.Vars.*; -public class BlockRenderer{ +public class BlockRenderer implements Disposable{ private final static int initialRequests = 32 * 32; private final static int expandr = 9; private final static Color shadowColor = new Color(0, 0, 0, 0.71f); @@ -76,8 +77,14 @@ public class BlockRenderer{ for(int x = 0; x < world.width(); x++){ for(int y = 0; y < world.height(); y++){ Tile tile = world.rawTile(x, y); - if(tile.getRotation() > 0 && tile.block().solid && tile.block().fillsTile && !tile.block().synthetic()){ - Draw.color(0f, 0f, 0f, Math.min((tile.getRotation() + 0.5f) / 4f, 1f)); + int edgeBlend = 2; + float rot = tile.getRotation(); + int edgeDst = Math.min(x, Math.min(y, Math.min(Math.abs(x - (world.width() - 1)), Math.abs(y - (world.height() - 1))))); + if(edgeDst <= edgeBlend){ + rot = Math.max((edgeBlend - edgeDst) * (4f / edgeBlend), rot); + } + if(rot > 0 && ((tile.block().solid && tile.block().fillsTile && !tile.block().synthetic()) || edgeDst <= edgeBlend)){ + Draw.color(0f, 0f, 0f, Math.min((rot + 0.5f) / 4f, 1f)); Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1); } } @@ -193,11 +200,11 @@ public class BlockRenderer{ if(block.expanded || !expanded){ - if(block.layer != null && block.isLayer(tile)){ + if(block.layer != null){ addRequest(tile, block.layer); } - if(block.layer2 != null && block.isLayer2(tile)){ + if(block.layer2 != null){ addRequest(tile, block.layer2); } @@ -234,6 +241,9 @@ public class BlockRenderer{ if(req.layer == Layer.block){ block.draw(req.tile); + if(req.tile.entity != null && req.tile.entity.damaged()){ + block.drawCracks(req.tile); + } if(block.synthetic() && req.tile.getTeam() != player.getTeam()){ block.drawTeam(req.tile); } @@ -291,6 +301,14 @@ public class BlockRenderer{ requestidx++; } + @Override + public void dispose(){ + shadows.dispose(); + fog.dispose(); + shadows = fog = null; + floor.dispose(); + } + private class BlockRequest implements Comparable{ Tile tile; Layer layer; diff --git a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java b/core/src/io/anuke/mindustry/graphics/FloorRenderer.java index b3276147dc..df6a420be4 100644 --- a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/FloorRenderer.java @@ -18,7 +18,7 @@ import java.util.Arrays; import static io.anuke.mindustry.Vars.tilesize; import static io.anuke.mindustry.Vars.world; -public class FloorRenderer{ +public class FloorRenderer implements Disposable{ private final static int chunksize = 64; private Chunk[][] cache; @@ -221,6 +221,14 @@ public class FloorRenderer{ Log.info("Time to cache: {0}", Time.elapsed()); } + @Override + public void dispose(){ + if(cbatch != null){ + cbatch.dispose(); + cbatch = null; + } + } + private class Chunk{ int[] caches = new int[CacheLayer.values().length]; } diff --git a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java b/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java index c14c49b6e8..612af596eb 100644 --- a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java @@ -25,7 +25,7 @@ public class MinimapRenderer implements Disposable{ private Pixmap pixmap; private Texture texture; private TextureRegion region; - private Rectangle rect = new Rectangle(), scissor = new Rectangle(); + private Rectangle rect = new Rectangle(); private float zoom = 4; public MinimapRenderer(){ @@ -60,6 +60,7 @@ public class MinimapRenderer implements Disposable{ pixmap.dispose(); texture.dispose(); } + setZoom(4f); pixmap = new Pixmap(world.width(), world.height(), Format.RGBA8888); texture = new Texture(pixmap); region = new TextureRegion(texture); @@ -123,9 +124,8 @@ public class MinimapRenderer implements Disposable{ dx = Mathf.clamp(dx, sz, world.width() - sz); dy = Mathf.clamp(dy, sz, world.height() - sz); - rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize); units.clear(); - Units.getNearby(rect, units::add); + Units.nearby((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize, units::add); } private int colorFor(Tile tile){ @@ -135,9 +135,11 @@ public class MinimapRenderer implements Disposable{ @Override public void dispose(){ - pixmap.dispose(); - texture.dispose(); - texture = null; - pixmap = null; + if(pixmap != null && texture != null){ + pixmap.dispose(); + texture.dispose(); + texture = null; + pixmap = null; + } } } diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java index a08d9d1788..bea762d8be 100644 --- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java @@ -50,7 +50,7 @@ public class OverlayRenderer{ } } - Units.allUnits(unit -> { + Units.all(unit -> { if(unit != player && unit.getTeam() != player.getTeam() && !rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f).setCenter(Core.camera.position.x, Core.camera.position.y).contains(unit.x, unit.y)){ Tmp.v1.set(unit.x, unit.y).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength); diff --git a/core/src/io/anuke/mindustry/graphics/Pixelator.java b/core/src/io/anuke/mindustry/graphics/Pixelator.java index afc4b91cd8..e8a9e0d2f3 100644 --- a/core/src/io/anuke/mindustry/graphics/Pixelator.java +++ b/core/src/io/anuke/mindustry/graphics/Pixelator.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.graphics; import io.anuke.arc.Core; import io.anuke.arc.graphics.Blending; +import io.anuke.arc.graphics.Texture.TextureFilter; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.glutils.FrameBuffer; import io.anuke.arc.util.Disposable; @@ -15,6 +16,10 @@ import static io.anuke.mindustry.Vars.renderer; public class Pixelator implements Disposable{ private FrameBuffer buffer = new FrameBuffer(2, 2); + { + buffer.getTexture().setFilter(TextureFilter.Nearest, TextureFilter.Nearest); + } + public void drawPixelate(){ float pre = renderer.getScale(); float scale = renderer.getScale(); diff --git a/core/src/io/anuke/mindustry/input/Binding.java b/core/src/io/anuke/mindustry/input/Binding.java index d135f1f528..8b2fd227bf 100644 --- a/core/src/io/anuke/mindustry/input/Binding.java +++ b/core/src/io/anuke/mindustry/input/Binding.java @@ -22,6 +22,7 @@ public enum Binding implements KeyBind{ zoom(new Axis(KeyCode.SCROLL)), menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE), pause(KeyCode.SPACE), + minimap(KeyCode.M), toggle_menus(KeyCode.C), screenshot(KeyCode.P), player_list(KeyCode.TAB, "multiplayer"), diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index bc3ef2533c..51ad097eb5 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -130,6 +130,14 @@ public class DesktopInput extends InputHandler{ player.isShooting = false; } + if(!state.is(State.menu) && Core.input.keyTap(Binding.minimap)){ + if(!ui.minimap.isShown()){ + ui.minimap.show(); + }else{ + ui.minimap.hide(); + } + } + if(state.is(State.menu) || Core.scene.hasDialog()) return; //zoom and rotate things diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index ab33b78716..876e2732c7 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -81,7 +81,7 @@ public class MobileInput extends InputHandler implements GestureListener{ /** Check and assign targets for a specific position. */ void checkTargets(float x, float y){ - Unit unit = Units.getClosestEnemy(player.getTeam(), x, y, 20f, u -> !u.isDead()); + Unit unit = Units.closestEnemy(player.getTeam(), x, y, 20f, u -> !u.isDead()); if(unit != null){ player.setMineTile(null); @@ -452,7 +452,6 @@ public class MobileInput extends InputHandler implements GestureListener{ } //endregion - //region input events @Override @@ -591,6 +590,7 @@ public class MobileInput extends InputHandler implements GestureListener{ @Override public void update(){ + clampCamera(); if(state.is(State.menu) || player.isDead()){ selection.clear(); removals.clear(); @@ -730,6 +730,22 @@ public class MobileInput extends InputHandler implements GestureListener{ return true; } + void clampCamera(){ + if(player.isDead()) return; + + Vector2 v = Core.camera.position; + //change to 1/2 to clamp to viewport + float scaling = 1f; + + v.x = clerp(v.x, player.x - Core.camera.width*scaling, player.x + Core.camera.width*scaling); + v.y = clerp(v.y, player.y - Core.camera.height*scaling, player.y + Core.camera.height*scaling); + } + + float clerp(float value, float min, float max){ + final float alpha = 0.07f; + return value < min ? Mathf.lerpDelta(value, min, alpha) : value > max ? Mathf.lerpDelta(value, max, alpha) : value; + } + //endregion private class PlaceRequest{ diff --git a/core/src/io/anuke/mindustry/io/MapIO.java b/core/src/io/anuke/mindustry/io/MapIO.java index 5d925a8899..c124e75555 100644 --- a/core/src/io/anuke/mindustry/io/MapIO.java +++ b/core/src/io/anuke/mindustry/io/MapIO.java @@ -37,15 +37,14 @@ public class MapIO{ private static void initBlocks(){ if(missingBlocks != null) return; - //stainedRocks, stainedRocksRed, stainedRocksYellow, stainedStoneYellow, stainedBoulder, missingBlocks = ObjectMap.of( - "stained-stone", Blocks.shale, - "stained-stone-red", Blocks.shale, - "stained-stone-yellow", Blocks.shale, - "stained-rocks", Blocks.shaleRocks, - "stained-boulder", Blocks.shaleBoulder, - "stained-rocks-red", Blocks.shaleRocks, - "stained-rocks-yellow", Blocks.shaleRocks + "stained-stone", Blocks.shale, + "stained-stone-red", Blocks.shale, + "stained-stone-yellow", Blocks.shale, + "stained-rocks", Blocks.shaleRocks, + "stained-boulder", Blocks.shaleBoulder, + "stained-rocks-red", Blocks.shaleRocks, + "stained-rocks-yellow", Blocks.shaleRocks ); } diff --git a/core/src/io/anuke/mindustry/io/versions/Save1.java b/core/src/io/anuke/mindustry/io/versions/Save1.java index 438da9feae..41563a20c9 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save1.java +++ b/core/src/io/anuke/mindustry/io/versions/Save1.java @@ -2,10 +2,12 @@ package io.anuke.mindustry.io.versions; import io.anuke.arc.collection.ObjectMap; import io.anuke.arc.util.Time; -import io.anuke.mindustry.game.Version; +import io.anuke.mindustry.game.*; import io.anuke.mindustry.gen.Serialization; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.maps.Map; +import io.anuke.mindustry.type.ContentType; +import io.anuke.mindustry.type.Zone; import java.io.*; @@ -30,6 +32,12 @@ public class Save1 extends SaveFileVersion{ if(map == null) map = new Map(customMapDirectory.child(mapname), 1, 1, new ObjectMap<>(), true); world.setMap(map); state.rules.spawns = map.getWaves(); + if(content.getByID(ContentType.zone, state.rules.zone) != null){ + Rules rules = content.getByID(ContentType.zone, state.rules.zone).rules.get(); + if(rules.spawns != DefaultWaves.get()){ + state.rules.spawns = rules.spawns; + } + } int wave = stream.readInt(); float wavetime = stream.readFloat(); diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 72ecba7c64..015b994174 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -25,10 +25,6 @@ public class Maps implements Disposable{ /** Serializer for meta. */ private Json json = new Json(); - public Maps(){ - - } - /** Returns a list of all maps, including custom ones. */ public Array all(){ return maps; diff --git a/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java index 46811f808f..93bd2e6bdb 100644 --- a/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java @@ -6,10 +6,9 @@ import io.anuke.arc.math.geom.Point2; import io.anuke.arc.util.Structs; import io.anuke.arc.util.noise.Simplex; import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.content.Items; import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.maps.Map; -import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Loadout; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -35,8 +34,6 @@ public class MapGenerator extends Generator{ public int enemySpawns = -1; /** Whether floor is distorted along with blocks. */ public boolean distortFloor = false; - /** Items randomly added to containers and vaults. */ - public ItemStack[] storageDrops = ItemStack.with(Items.copper, 300, Items.lead, 300, Items.silicon, 200, Items.graphite, 200, Items.blastCompound, 200); public MapGenerator(String mapName){ this.mapName = mapName; @@ -47,11 +44,6 @@ public class MapGenerator extends Generator{ this.enemySpawns = enemySpawns; } - public MapGenerator drops(ItemStack[] drops){ - this.storageDrops = drops; - return this; - } - public MapGenerator decor(Decoration... decor){ this.decorations.addAll(decor); return this; @@ -140,10 +132,10 @@ public class MapGenerator extends Generator{ } } - if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock)){ - for(ItemStack stack : storageDrops){ + if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock) && world.getZone() != null){ + for(Item item : world.getZone().resources){ if(Mathf.chance(0.3)){ - tile.entity.items.add(stack.item, Math.min(Mathf.random(stack.amount), tile.block().itemCapacity)); + tile.entity.items.add(item, Math.min(Mathf.random(500), tile.block().itemCapacity)); } } } @@ -152,7 +144,7 @@ public class MapGenerator extends Generator{ if(enemySpawns != -1){ if(enemySpawns > enemies.size){ - throw new IllegalArgumentException("Enemy spawn pool greater than map spawn number."); + throw new IllegalArgumentException("Enemy spawn pool greater than map spawn number for map: " + mapName); } enemies.shuffle(); diff --git a/core/src/io/anuke/mindustry/net/CrashSender.java b/core/src/io/anuke/mindustry/net/CrashSender.java new file mode 100644 index 0000000000..b6e37c0dec --- /dev/null +++ b/core/src/io/anuke/mindustry/net/CrashSender.java @@ -0,0 +1,139 @@ +package io.anuke.mindustry.net; + +import io.anuke.arc.Core; +import io.anuke.arc.collection.ObjectMap; +import io.anuke.arc.function.Consumer; +import io.anuke.arc.util.Log; +import io.anuke.arc.util.OS; +import io.anuke.arc.util.Strings; +import io.anuke.arc.util.io.PropertiesUtils; +import io.anuke.arc.util.serialization.JsonValue; +import io.anuke.arc.util.serialization.JsonValue.ValueType; +import io.anuke.arc.util.serialization.JsonWriter.OutputType; +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.game.Version; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class CrashSender{ + + public static void send(Throwable exception, Consumer writeListener){ + try{ + exception.printStackTrace(); + + //don't create crash logs for me (anuke) or custom builds, as it's expected + //TODO maybe custom builds such as bleeding edge in certain cases + if(System.getProperty("user.name").equals("anuke") || Version.build == -1) return; + + //attempt to load version regardless + if(Version.number == 0){ + try{ + ObjectMap map = new ObjectMap<>(); + PropertiesUtils.load(map, new InputStreamReader(CrashSender.class.getResourceAsStream("version.properties"))); + + Version.type = map.get("type"); + Version.number = Integer.parseInt(map.get("number")); + Version.modifier = map.get("modifier"); + if(map.get("build").contains(".")){ + String[] split = map.get("build").split("\\."); + Version.build = Integer.parseInt(split[0]); + Version.revision = Integer.parseInt(split[1]); + }else{ + Version.build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1; + } + }catch(Throwable ignored){ + Log.err("Failed to parse version."); + } + } + + try{ + //check crash report setting + if(!Core.settings.getBool("crashreport", true)){ + return; + } + }catch(Throwable ignored){ + //if there's no settings init we don't know what the user wants but chances are it's an important crash, so send it anyway + } + + //do not send exceptions that occur for versions that can't be parsed + if(Version.number == 0){ + return; + } + + try{ + File file = new File(OS.getAppDataDirectoryString(Vars.appName), "crashes/crash-report-" + DateTimeFormatter.ofPattern("MM_dd_yyyy_HH_mm_ss").format(LocalDateTime.now()) + ".txt"); + new File(OS.getAppDataDirectoryString(Vars.appName)).mkdir(); + new BufferedOutputStream(new FileOutputStream(file), 2048).write(parseException(exception).getBytes()); + Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes")); + + writeListener.accept(file); + }catch(Throwable ignored){ + Log.err("Failed to save local crash report."); + } + + boolean netActive = false, netServer = false; + + //attempt to close connections, if applicable + try{ + netActive = Net.active(); + netServer = Net.server(); + Net.dispose(); + }catch(Throwable ignored){ + } + + JsonValue value = new JsonValue(ValueType.object); + + boolean fn = netActive, fs = netServer; + + //add all relevant info, ignoring exceptions + ex(() -> value.addChild("versionType", new JsonValue(Version.type))); + ex(() -> value.addChild("versionNumber", new JsonValue(Version.number))); + ex(() -> value.addChild("versionModifier", new JsonValue(Version.modifier))); + ex(() -> value.addChild("build", new JsonValue(Version.build))); + ex(() -> value.addChild("net", new JsonValue(fn))); + ex(() -> value.addChild("server", new JsonValue(fs))); + ex(() -> value.addChild("players", new JsonValue(Vars.playerGroup.size()))); + ex(() -> value.addChild("state", new JsonValue(Vars.state.getState().name()))); + ex(() -> value.addChild("os", new JsonValue(System.getProperty("os.name")))); + ex(() -> value.addChild("trace", new JsonValue(parseException(exception)))); + + Log.info("Sending crash report."); + //post to crash report URL + Net.http(Vars.crashReportURL, "POST", value.toJson(OutputType.json), r -> { + Log.info("Crash sent successfully."); + System.exit(1); + }, t -> { + t.printStackTrace(); + System.exit(1); + }); + + //sleep for 10 seconds or until crash report is sent + try{ + Thread.sleep(10000); + }catch(InterruptedException ignored){ + } + }catch(Throwable death){ + death.printStackTrace(); + System.exit(1); + } + } + + private static String parseException(Throwable e){ + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + return sw.toString(); + } + + private static void ex(Runnable r){ + try{ + r.run(); + }catch(Throwable t){ + t.printStackTrace(); + } + } +} diff --git a/core/src/io/anuke/mindustry/net/NetworkIO.java b/core/src/io/anuke/mindustry/net/NetworkIO.java index 19ca66cf53..2239a20f05 100644 --- a/core/src/io/anuke/mindustry/net/NetworkIO.java +++ b/core/src/io/anuke/mindustry/net/NetworkIO.java @@ -1,6 +1,5 @@ package io.anuke.mindustry.net; -import io.anuke.arc.Core; import io.anuke.arc.collection.ObjectMap; import io.anuke.arc.collection.ObjectMap.Entry; import io.anuke.arc.util.Time; @@ -122,10 +121,6 @@ public class NetworkIO{ for(int j = 0; j < cores; j++){ state.teams.get(team).cores.add(world.tile(stream.readInt())); } - - if(team == player.getTeam() && cores > 0){ - Core.camera.position.set(state.teams.get(team).cores.first().drawx(), state.teams.get(team).cores.first().drawy()); - } } }catch(IOException e){ diff --git a/core/src/io/anuke/mindustry/type/Zone.java b/core/src/io/anuke/mindustry/type/Zone.java index e97bc11cf1..c8d66819bf 100644 --- a/core/src/io/anuke/mindustry/type/Zone.java +++ b/core/src/io/anuke/mindustry/type/Zone.java @@ -24,7 +24,6 @@ public class Zone extends UnlockableContent{ public final Generator generator; public Block[] blockRequirements = {}; public ZoneRequirement[] zoneRequirements = {}; - //TODO debug verify resources. public Item[] resources = {}; public Supplier rules = Rules::new; public boolean alwaysUnlocked; @@ -128,6 +127,7 @@ public class Zone extends UnlockableContent{ generator.init(loadout); Arrays.sort(resources); + @SuppressWarnings("unchecked") Array arr = Core.settings.getObject(name + "-starting-items", Array.class, () -> null); if(arr != null){ startingItems = arr; diff --git a/core/src/io/anuke/mindustry/ui/ItemImage.java b/core/src/io/anuke/mindustry/ui/ItemImage.java index 6ef197b8d9..e7bed333b1 100644 --- a/core/src/io/anuke/mindustry/ui/ItemImage.java +++ b/core/src/io/anuke/mindustry/ui/ItemImage.java @@ -1,6 +1,5 @@ package io.anuke.mindustry.ui; -import io.anuke.arc.function.Supplier; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.scene.ui.Image; import io.anuke.arc.scene.ui.layout.Stack; @@ -18,14 +17,6 @@ public class ItemImage extends Stack{ add(t); } - public ItemImage(TextureRegion region, Supplier text){ - Table t = new Table().left().bottom(); - t.label(text).name("item-label"); - - add(new Image(region)); - add(t); - } - public ItemImage(ItemStack stack){ add(new Image(stack.item.icon(Icon.large))); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java index 42fed50472..2c83b7fbcb 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java @@ -40,7 +40,7 @@ public class AdminsDialog extends FloatingDialog{ res.addImageButton("icon-cancel", 14 * 3, () -> { ui.showConfirm("$confirm", "$confirmunadmin", () -> { netServer.admins.unAdminPlayer(info.id); - playerGroup.forEach(player -> { + playerGroup.all().each(player -> { if(player != null && player.uuid != null && player.uuid.equals(info.id)){ player.isAdmin = false; } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java index aa0c22c37e..06edc28521 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java @@ -4,12 +4,16 @@ import io.anuke.arc.Core; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.ButtonGroup; +import io.anuke.arc.scene.ui.ImageButton; +import io.anuke.arc.scene.ui.ScrollPane; +import io.anuke.arc.scene.ui.TextButton; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.util.Align; import io.anuke.arc.util.Scaling; import io.anuke.mindustry.game.Difficulty; -import io.anuke.mindustry.game.RulePreset; +import io.anuke.mindustry.game.Gamemode; +import io.anuke.mindustry.game.Rules; import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.ui.BorderImage; @@ -17,21 +21,21 @@ import static io.anuke.mindustry.Vars.*; public class CustomGameDialog extends FloatingDialog{ Difficulty difficulty = Difficulty.normal; - RulePreset lastPreset = RulePreset.survival; CustomRulesDialog dialog = new CustomRulesDialog(); + Rules rules; + Gamemode selectedGamemode; public CustomGameDialog(){ super("$customgame"); addCloseButton(); shown(this::setup); - onResize(this::setup); } void setup(){ - if(lastPreset == null){ - lastPreset = RulePreset.survival; - } + selectedGamemode = Gamemode.survival; + rules = selectedGamemode.get(); + cont.clear(); Table maps = new Table(); @@ -48,21 +52,17 @@ public class CustomGameDialog extends FloatingDialog{ int i = 0; Table modes = new Table(); - modes.marginBottom(5); - for(RulePreset mode : RulePreset.values()){ + for(Gamemode mode : Gamemode.values()){ modes.addButton(mode.toString(), "toggle", () -> { - lastPreset = mode; - }).update(b -> b.setChecked(lastPreset == mode)).group(group).size(140f, 54f); + selectedGamemode = mode; + rules = mode.get(); + dialog.selectedGamemode = null; + dialog.rules = null; + }).update(b -> b.setChecked(selectedGamemode == mode)).group(group).size(140f, 54f); if(i++ % 2 == 1) modes.row(); } selmode.add(modes); - selmode.addButton("$mode.custom", "toggle", () -> { - }) - .update(b -> b.setChecked(lastPreset == null)).size(108f).group(group).get().tapped(() -> { - lastPreset = null; - dialog.show(); - }); selmode.addButton("?", this::displayGameModeHelp).width(50f).fillY().padLeft(18f); cont.add(selmode); @@ -93,8 +93,9 @@ public class CustomGameDialog extends FloatingDialog{ difficulty = (ds[Mathf.mod(difficulty.ordinal() + 1, ds.length)]); state.wavetime = difficulty.waveTime; }).width(s); + sdif.addButton("$customize", () -> dialog.show(rules, selectedGamemode)).width(140).padLeft(10); - cont.add(sdif).visible(() -> lastPreset != null); + cont.add(sdif); cont.row(); float images = 146f; @@ -122,7 +123,7 @@ public class CustomGameDialog extends FloatingDialog{ image.clicked(() -> { hide(); - control.playMap(map, lastPreset == null ? dialog.rules : lastPreset.get()); + control.playMap(map, (dialog.rules == null) ? rules : dialog.rules); }); maps.add(image); @@ -145,7 +146,7 @@ public class CustomGameDialog extends FloatingDialog{ ScrollPane pane = new ScrollPane(table); pane.setFadeScrollBars(false); table.row(); - for(RulePreset mode : RulePreset.values()){ + for(Gamemode mode : Gamemode.values()){ table.labelWrap("[accent]" + mode.toString() + ":[] [lightgray]" + mode.description()).width(400f); table.row(); } @@ -154,5 +155,4 @@ public class CustomGameDialog extends FloatingDialog{ d.buttons.addButton("$ok", d::hide).size(110, 50).pad(10f); d.show(); } - -} +} \ No newline at end of file diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java index 2b8073eff7..0fb415686c 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java @@ -1,67 +1,105 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.function.FloatConsumer; -import io.anuke.arc.function.FloatProvider; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.Color; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.util.Strings; import io.anuke.mindustry.core.Platform; +import io.anuke.mindustry.game.Gamemode; import io.anuke.mindustry.game.Rules; +import io.anuke.mindustry.graphics.Pal; import static io.anuke.mindustry.Vars.tilesize; public class CustomRulesDialog extends FloatingDialog{ - public final Rules rules = new Rules(); private Table main; + public Rules rules; + public Gamemode selectedGamemode; public CustomRulesDialog(){ super("$mode.custom"); - rules.waves = true; - rules.waveTimer = true; - setFillParent(true); shown(this::setup); addCloseButton(); } + public void show(Rules rules, Gamemode gamemode){ + this.rules = rules; + this.selectedGamemode = gamemode; + show(); + } + void setup(){ cont.clear(); cont.pane(m -> main = m); main.margin(10f); - + main.addButton("$settings.reset", () -> { + rules = selectedGamemode.get(); + setup(); + }).size(300f, 50f); main.left().defaults().fillX().left().pad(5); main.row(); - main.addCheck("$rules.infiniteresources", b -> rules.infiniteResources = b).checked(b -> rules.infiniteResources); - main.row(); - main.addCheck("$rules.wavetimer", b -> rules.waveTimer = b).checked(b -> rules.waveTimer); - main.row(); - main.addCheck("$rules.waves", b -> rules.waves = b).checked(b -> rules.waves); - main.row(); - main.addCheck("$rules.pvp", b -> rules.pvp = b).checked(b -> rules.pvp); - main.row(); - main.addCheck("$rules.unitdrops", b -> rules.unitDrops = b).checked(b -> rules.unitDrops); - main.row(); - number("$rules.buildcostmultiplier", f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier); + + title("$rules.title.waves"); + check("$rules.waves", b -> rules.waves = b, () -> rules.waves); + check("$rules.wavetimer", b -> rules.waveTimer = b, () -> rules.waveTimer, () -> rules.waves); + check("$rules.waitForWaveToEnd", b -> rules.waitForWaveToEnd = b, () -> rules.waitForWaveToEnd, () -> rules.waves); + number("$rules.wavespacing", false, f -> rules.waveSpacing = f * 60f, () -> rules.waveSpacing / 60f, () -> rules.waves); + number("$rules.dropzoneradius", false, f -> rules.dropZoneRadius = f * tilesize, () -> rules.dropZoneRadius / tilesize, () -> rules.waves); + + title("$rules.title.respawns"); + check("$rules.limitedRespawns", b -> rules.limitedRespawns= b, () -> rules.limitedRespawns); + number("$rules.respawns", true, f -> rules.respawns = (int) f, () -> rules.respawns, () -> rules.limitedRespawns); + number("$rules.respawntime", f -> rules.respawnTime = f * 60f, () -> rules.respawnTime / 60f); + + title("$rules.title.resourcesbuilding"); + check("$rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources); + number("$rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources); number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier); + + title("$rules.title.player"); + number("$rules.playerdamagemultiplier", f -> rules.playerDamageMultiplier = f, () -> rules.playerDamageMultiplier); + number("$rules.playerhealthmultiplier", f -> rules.playerHealthMultiplier = f, () -> rules.playerHealthMultiplier); + + title("$rules.title.unit"); + check("$rules.unitdrops", b -> rules.unitDrops = b, () -> rules.unitDrops, ()->true); number("$rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier); number("$rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier); - number("$rules.playerhealthmultiplier", f -> rules.playerHealthMultiplier = f, () -> rules.playerHealthMultiplier); - number("$rules.playerdamagemultiplier", f -> rules.playerDamageMultiplier = f, () -> rules.playerDamageMultiplier); number("$rules.unitdamagemultiplier", f -> rules.unitDamageMultiplier = f, () -> rules.unitDamageMultiplier); + + title("$rules.title.enemy"); number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f * tilesize, () -> Math.min(rules.enemyCoreBuildRadius / tilesize, 200)); - number("$rules.respawntime", f -> rules.respawnTime = f * 60f, () -> rules.respawnTime / 60f); - number("$rules.wavespacing", f -> rules.waveSpacing = f * 60f, () -> rules.waveSpacing / 60f); } void number(String text, FloatConsumer cons, FloatProvider prov){ + number(text, false, cons, prov, () -> true); + } + + void number(String text, boolean integer, FloatConsumer cons, FloatProvider prov, BooleanProvider condition){ main.table(t -> { t.left(); - t.add(text).left().padRight(5); - Platform.instance.addDialog(t.addField(prov.get() + "", s -> cons.accept(Strings.parseFloat(s))) - .valid(Strings::canParsePositiveFloat).width(120f).left().get()); - }); - + t.add(text).left().padRight(5) + .update(a->a.setColor(condition.get() ? Color.WHITE : Color.GRAY)); + Platform.instance.addDialog(t.addField((integer ? (int)prov.get() : prov.get()) + "", s -> cons.accept(Strings.parseFloat(s))) + .padRight(100f) + .update(a -> a.setDisabled(!condition.get())) + .valid(Strings::canParsePositiveFloat).width(120f) .left().get()); + }).padTop(0); main.row(); + } + void check(String text, BooleanConsumer cons, BooleanProvider prov){ + check(text, cons, prov, () -> true); + } + + void check(String text, BooleanConsumer cons, BooleanProvider prov, BooleanProvider condition){ + main.addCheck(text, cons).checked(prov.get()).update(a -> a.setDisabled(!condition.get())).padRight(100f); + main.row(); + } + + void title(String text){ + main.add(text).color(Pal.accent).padTop(20).padBottom(20).padRight(100f); + main.row(); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java index af0c8b34a2..f5a17db26a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.Core; import io.anuke.arc.collection.Array; import io.anuke.arc.collection.ObjectSet; +import io.anuke.arc.collection.ObjectSet.ObjectSetIterator; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Lines; import io.anuke.arc.scene.Group; @@ -10,6 +11,7 @@ import io.anuke.arc.scene.ui.TextButton; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Unit; import io.anuke.arc.util.Align; +import io.anuke.arc.util.Structs; import io.anuke.mindustry.content.Zones; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.Saves.SaveSlot; @@ -97,6 +99,17 @@ public class DeployDialog extends FloatingDialog{ }).growX().height(50f).pad(-12).padTop(10); }}, new ItemsDisplay()).grow(); + + //set up direct and indirect children + for(ZoneNode node : nodes){ + node.allChildren.clear(); + node.allChildren.addAll(node.children); + for(ZoneNode other : new ObjectSetIterator<>(nodes)){ + if(Structs.contains(other.zone.zoneRequirements, req -> req.zone == node.zone)){ + node.allChildren.add(other); + } + } + } } boolean hidden(Zone zone){ @@ -155,7 +168,7 @@ public class DeployDialog extends FloatingDialog{ float offsetX = panX + width / 2f + x, offsetY = panY + height / 2f + y; for(ZoneNode node : nodes){ - for(ZoneNode child : node.children){ + for(ZoneNode child : node.allChildren){ Lines.stroke(Unit.dp.scl(3f), node.zone.locked() || child.zone.locked() ? Pal.locked : Pal.accent); Lines.line(node.x + offsetX, node.y + offsetY, child.x + offsetX, child.y + offsetY); } @@ -168,6 +181,7 @@ public class DeployDialog extends FloatingDialog{ class ZoneNode extends TreeNode{ final Array arr = new Array<>(); + final Array allChildren = new Array<>(); final Zone zone; ZoneNode(Zone zone, ZoneNode parent){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java index 2bb98b5cd9..38a27083f6 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java @@ -13,20 +13,16 @@ import io.anuke.arc.scene.ui.layout.Unit; import io.anuke.arc.scene.utils.UIUtils; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.Platform; import java.util.Arrays; public class FileChooser extends FloatingDialog{ - public static Predicate pngFilter = file -> file.extension().equalsIgnoreCase("png"); - public static Predicate mapFilter = file -> file.extension().equalsIgnoreCase(Vars.mapExtension); - public static Predicate jpegFilter = file -> file.extension().equalsIgnoreCase("png") || file.extension().equalsIgnoreCase("jpg") || file.extension().equalsIgnoreCase("jpeg"); - public static Predicate defaultFilter = file -> true; + private static final FileHandle homeDirectory = Core.files.absolute(OS.isMac ? OS.getProperty("user.home") + "/Downloads/" : Core.files.getExternalStoragePath()); + private static FileHandle lastDirectory = homeDirectory; + private Table files; - private FileHandle homeDirectory = Core.files.absolute(OS.isMac ? OS.getProperty("user.home") + "/Downloads/" : - Core.files.getExternalStoragePath()); - private FileHandle directory = homeDirectory; + private FileHandle directory = lastDirectory; private ScrollPane pane; private TextField navigation, filefield; private TextButton ok; @@ -117,6 +113,7 @@ public class FileChooser extends FloatingDialog{ home.resizeImage(isize); home.clicked(() -> { directory = homeDirectory; + lastDirectory = directory; updateFiles(true); }); @@ -198,6 +195,7 @@ public class FileChooser extends FloatingDialog{ TextButton upbutton = new TextButton(".." + directory.toString(), "clear-toggle"); upbutton.clicked(() -> { directory = directory.parent(); + lastDirectory = directory; updateFiles(true); }); @@ -226,6 +224,7 @@ public class FileChooser extends FloatingDialog{ updateFileFieldStatus(); }else{ directory = directory.child(filename); + lastDirectory = directory; updateFiles(true); } }); @@ -296,12 +295,14 @@ public class FileChooser extends FloatingDialog{ if(!canBack()) return; index--; directory = history.get(index - 1); + lastDirectory = directory; updateFiles(false); } public void forward(){ if(!canForward()) return; directory = history.get(index); + lastDirectory = directory; index++; updateFiles(false); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java index 36f57dc608..111d102232 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java @@ -8,8 +8,8 @@ import io.anuke.arc.scene.event.InputEvent; import io.anuke.arc.scene.event.InputListener; import io.anuke.arc.scene.ui.layout.Unit; -import static io.anuke.mindustry.Vars.mobile; -import static io.anuke.mindustry.Vars.renderer; +import static io.anuke.mindustry.Vars.*; +import static io.anuke.mindustry.Vars.world; public class MinimapDialog extends FloatingDialog{ @@ -54,7 +54,8 @@ public class MinimapDialog extends FloatingDialog{ @Override public void touchDragged(InputEvent event, float x, float y, int pointer){ if(mobile){ - renderer.minimap.zoomBy(Core.input.deltaY(pointer) / 30f / Unit.dp.scl(1f)); + float max = Math.min(world.width(), world.height()) / 16f / 2f; + renderer.minimap.setZoom(1f + y / cont.getHeight() * (max - 1f)); } } }); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index 403d24d44b..4e862edaaa 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -49,8 +49,7 @@ public class SettingsMenuDialog extends SettingsDialog{ setFillParent(true); title.setAlignment(Align.center); titleTable.row(); - titleTable.add(new Image("white")) - .growX().height(3f).pad(4f).get().setColor(Pal.accent); + titleTable.add(new Image("white")).growX().height(3f).pad(4f).get().setColor(Pal.accent); cont.clearChildren(); cont.remove(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java index e51801c200..392a73c352 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java @@ -10,7 +10,6 @@ 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.input.InputHandler; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -18,14 +17,9 @@ import static io.anuke.mindustry.Vars.*; public class BlockConfigFragment extends Fragment{ private Table table = new Table(); - private InputHandler input; private Tile configTile; private Block configBlock; - public BlockConfigFragment(InputHandler input){ - this.input = input; - } - @Override public void build(Group parent){ table.visible(false); diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index 77e0670121..71a633707b 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -5,22 +5,25 @@ import io.anuke.annotations.Annotations.Remote; import io.anuke.arc.Core; import io.anuke.arc.collection.IntSet; import io.anuke.arc.function.BooleanProvider; +import io.anuke.arc.function.Supplier; +import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.input.KeyCode; import io.anuke.arc.math.Interpolation; import io.anuke.arc.math.Mathf; 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.event.*; +import io.anuke.arc.scene.ui.Image; +import io.anuke.arc.scene.ui.layout.Stack; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.gen.Call; -import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item.Icon; -import io.anuke.mindustry.ui.ItemImage; import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.*; @@ -30,15 +33,10 @@ public class BlockInventoryFragment extends Fragment{ private Table table; private Tile tile; - private InputHandler input; private float holdTime = 0f; private boolean holding; private Item lastItem; - public BlockInventoryFragment(InputHandler input){ - this.input = input; - } - @Remote(called = Loc.server, targets = Loc.both, forward = true) public static void requestItem(Player player, Tile tile, Item item, int amount){ if(player == null || tile == null) return; @@ -118,7 +116,7 @@ public class BlockInventoryFragment extends Fragment{ int row = 0; table.margin(6f); - table.defaults().size(8 * 5).space(6f); + table.defaults().size(8 * 5).space(8f); if(tile.block().hasItems){ @@ -133,7 +131,7 @@ public class BlockInventoryFragment extends Fragment{ HandCursorListener l = new HandCursorListener(); l.setEnabled(canPick); - ItemImage image = new ItemImage(item.icon(Icon.xlarge), () -> { + Element image = itemImage(item.icon(Icon.xlarge), () -> { if(tile == null || tile.entity == null){ return ""; } @@ -182,9 +180,9 @@ public class BlockInventoryFragment extends Fragment{ private String round(float f){ f = (int)f; if(f >= 1000000){ - return Strings.fixed(f / 1000000f, 1) + "[gray]mil[]"; + return (int)(f / 1000000f) + "[gray]mil[]"; }else if(f >= 1000){ - return Strings.fixed(f / 1000, 1) + "k"; + return (int)(f / 1000) + "k"; }else{ return (int)f + ""; } @@ -195,4 +193,15 @@ public class BlockInventoryFragment extends Fragment{ table.pack(); table.setPosition(v.x, v.y, Align.topLeft); } + + private Element itemImage(TextureRegion region, Supplier text){ + Stack stack = new Stack(); + + Table t = new Table().left().bottom(); + t.label(text); + + stack.add(new Image(region)); + stack.add(t); + return stack; + } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java index df9e17abdf..f2bcf3ea48 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java @@ -34,7 +34,6 @@ public class ChatFragment extends Table{ private BitmapFont font; private GlyphLayout layout = new GlyphLayout(); private float offsetx = Unit.dp.scl(4), offsety = Unit.dp.scl(4), fontoffsetx = Unit.dp.scl(2), chatspace = Unit.dp.scl(50); - private float textWidth = Unit.dp.scl(600); private Color shadowColor = new Color(0, 0, 0, 0.4f); private float textspacing = Unit.dp.scl(10); private Array history = new Array<>(); @@ -124,6 +123,7 @@ public class ChatFragment extends Table{ @Override public void draw(){ float opacity = Core.settings.getInt("chatopacity") / 100f; + float textWidth = Math.min(Core.graphics.getWidth()/1.5f, Unit.dp.scl(700f)); Draw.color(shadowColor); diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index ef847fb53e..fa294a642a 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -459,7 +459,7 @@ public class HudFragment extends Fragment{ } if(state.rules.waveTimer){ - builder.append(waitingf.get((int)(state.wavetime / 60))); + builder.append((state.rules.waitForWaveToEnd && unitGroups[waveTeam.ordinal()].size() > 0) ? Core.bundle.get("wave.waveInProgress") : ( waitingf.get((int)(state.wavetime/60)))); }else if(state.enemies() == 0){ builder.append(Core.bundle.get("waiting")); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java b/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java index 6493496d76..c7fd119393 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.ui.fragments; import io.anuke.arc.scene.Group; import io.anuke.mindustry.input.InputHandler; -/** Fragment for displaying overlays such as block inventories. One is created for each input handler. */ +/** Fragment for displaying overlays such as block inventories. */ public class OverlayFragment extends Fragment{ public final BlockInventoryFragment inv; public final BlockConfigFragment config; @@ -11,8 +11,8 @@ public class OverlayFragment extends Fragment{ private Group group = new Group(); public OverlayFragment(InputHandler input){ - inv = new BlockInventoryFragment(input); - config = new BlockConfigFragment(input); + inv = new BlockInventoryFragment(); + config = new BlockConfigFragment(); } @Override diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 74275cf327..6a01e36a88 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -40,15 +40,15 @@ public class PlacementFragment extends Fragment{ //TODO make this configurable final KeyCode[] inputGrid = { - KeyCode.NUM_1, KeyCode.NUM_2, KeyCode.NUM_3, KeyCode.NUM_4, - KeyCode.Q, KeyCode.W, KeyCode.E, KeyCode.R, - KeyCode.A, KeyCode.S, KeyCode.D, KeyCode.F, - KeyCode.Z, KeyCode.X, KeyCode.C, KeyCode.V + KeyCode.NUM_1, KeyCode.NUM_2, KeyCode.NUM_3, KeyCode.NUM_4, + KeyCode.Q, KeyCode.W, KeyCode.E, KeyCode.R, + KeyCode.A, KeyCode.S, KeyCode.D, KeyCode.F, + KeyCode.Z, KeyCode.X, KeyCode.C, KeyCode.V }, inputCatGrid = { - KeyCode.NUM_1, KeyCode.NUM_2, - KeyCode.Q, KeyCode.W, - KeyCode.A, KeyCode.S, - KeyCode.Z, KeyCode.X, KeyCode.C, KeyCode.V + KeyCode.NUM_1, KeyCode.NUM_2, + KeyCode.Q, KeyCode.W, + KeyCode.A, KeyCode.S, + KeyCode.Z, KeyCode.X, KeyCode.C, KeyCode.V }; public PlacementFragment(){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index 544fbd5ce7..fefe7fdc4a 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -68,8 +68,7 @@ public class PlayerListFragment extends Fragment{ float h = 74f; playerGroup.all().sort((p1, p2) -> p1.getTeam().compareTo(p2.getTeam())); - - playerGroup.forEach(user -> { + playerGroup.all().each(user -> { NetConnection connection = user.con; if(connection == null && Net.server() && !user.isLocal) return; diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index bbcd360ecf..f3d37565c4 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -34,6 +34,8 @@ import java.util.Arrays; import static io.anuke.mindustry.Vars.*; public class Block extends BlockStorage{ + public static final int crackRegions = 8, maxCrackSize = 5; + /** whether this block has a tile entity that updates */ public boolean update; /** whether this block has health and can be destroyed */ @@ -113,6 +115,8 @@ public class Block extends BlockStorage{ protected TextureRegion[] variantRegions, editorVariantRegions; protected TextureRegion region, editorIcon; + protected static TextureRegion[][] cracks; + /** Dump timer ID.*/ protected final int timerDump = timers++; /** How often to try dumping items in ticks, e.g. 5 = 12 times/sec*/ @@ -188,20 +192,21 @@ public class Block extends BlockStorage{ return progressIncrease; } - public boolean isLayer(Tile tile){ - return true; - } - - public boolean isLayer2(Tile tile){ - return true; - } - public void drawLayer(Tile tile){ } public void drawLayer2(Tile tile){ } + public void drawCracks(Tile tile){ + if(!tile.entity.damaged()) return; + int id = tile.pos(); + TextureRegion region = cracks[size - 1][Mathf.clamp((int)((1f - tile.entity.healthf()) * crackRegions), 0, crackRegions-1)]; + Draw.colorl(0.2f, 0.1f + (1f - tile.entity.healthf())* 0.6f); + Draw.rect(region, tile.drawx(), tile.drawy(), (id%4)*90); + Draw.color(); + } + /** Draw the block overlay that is shown when a cursor is over the block. */ public void drawSelect(Tile tile){ } @@ -261,7 +266,6 @@ public class Block extends BlockStorage{ /** Called when a unit that spawned at this tile is removed. */ public void unitRemoved(Tile tile, Unit unit){ - } /** Returns whether ot not this block can be place on the specified tile. */ @@ -271,7 +275,8 @@ public class Block extends BlockStorage{ /** Call when some content is produced. This unlocks the content if it is applicable. */ public void useContent(Tile tile, UnlockableContent content){ - if(!headless && tile.getTeam() == player.getTeam()){ + //only unlocks content in zones + if(!headless && tile.getTeam() == player.getTeam() && world.isZone()){ logic.handleContent(content); } } @@ -333,6 +338,15 @@ public class Block extends BlockStorage{ for(int i = 0; i < cacheRegions.length; i++){ cacheRegions[i] = Core.atlas.find(cacheRegionStrings.get(i)); } + + if(cracks == null){ + cracks = new TextureRegion[maxCrackSize][crackRegions]; + for(int size = 1; size <= maxCrackSize; size++){ + for(int i = 0; i < crackRegions; i++){ + cracks[size - 1][i] = Core.atlas.find("cracks-" + size + "-" + i); + } + } + } } /** Adds a region by name to be loaded, with the final name "{name}-suffix". Returns an ID to looks this region up by in {@link #reg(int)}. */ @@ -422,7 +436,7 @@ public class Block extends BlockStorage{ float capacity = consumes.getPower().powerCapacity; bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power.satisfaction * capacity) ? "" : (int)(entity.power.satisfaction * capacity)) : - Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> entity.power.satisfaction)); + Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> entity.power.satisfaction)); } if(hasItems && configurable){ @@ -453,11 +467,6 @@ public class Block extends BlockStorage{ return (hasItems && itemCapacity > 0); } - /** Called after the block is destroyed and removed. */ - public void afterDestroyed(Tile tile, TileEntity entity){ - - } - /** Called when the block is destroyed. */ public void onDestroyed(Tile tile){ float x = tile.worldx(), y = tile.worldy(); diff --git a/core/src/io/anuke/mindustry/world/BlockStorage.java b/core/src/io/anuke/mindustry/world/BlockStorage.java index b6c6f2e0c1..0484676931 100644 --- a/core/src/io/anuke/mindustry/world/BlockStorage.java +++ b/core/src/io/anuke/mindustry/world/BlockStorage.java @@ -154,15 +154,13 @@ public abstract class BlockStorage extends UnlockableContent{ return flow; }else if(ofract > 0.1f && fract > 0.1f){ Liquid other = next.entity.liquids.current(); - if((other.flammability > 0.3f && liquid.temperature > 0.7f) || - (liquid.flammability > 0.3f && other.temperature > 0.7f)){ + if((other.flammability > 0.3f && liquid.temperature > 0.7f) || (liquid.flammability > 0.3f && other.temperature > 0.7f)){ tile.entity.damage(1 * Time.delta()); next.entity.damage(1 * Time.delta()); if(Mathf.chance(0.1 * Time.delta())){ Effects.effect(Fx.fire, (tile.worldx() + next.worldx()) / 2f, (tile.worldy() + next.worldy()) / 2f); } - }else if((liquid.temperature > 0.7f && other.temperature < 0.55f) || - (other.temperature > 0.7f && liquid.temperature < 0.55f)){ + }else if((liquid.temperature > 0.7f && other.temperature < 0.55f) || (other.temperature > 0.7f && liquid.temperature < 0.55f)){ tile.entity.liquids.remove(liquid, Math.min(tile.entity.liquids.get(liquid), 0.7f * Time.delta())); if(Mathf.chance(0.2f * Time.delta())){ Effects.effect(Fx.steam, (tile.worldx() + next.worldx()) / 2f, (tile.worldy() + next.worldy()) / 2f); diff --git a/core/src/io/anuke/mindustry/world/Build.java b/core/src/io/anuke/mindustry/world/Build.java index cc9b761488..f301dd3e42 100644 --- a/core/src/io/anuke/mindustry/world/Build.java +++ b/core/src/io/anuke/mindustry/world/Build.java @@ -117,8 +117,7 @@ public class Build{ return false; } - if((type.solid || type.solidifes) && - Units.anyEntities(rect.setSize(tilesize * type.size).setCenter(x * tilesize + type.offset(), y * tilesize + type.offset()))){ + if((type.solid || type.solidifes) && Units.anyEntities(x * tilesize + type.offset() - type.size*tilesize/2f, y * tilesize + type.offset() - type.size*tilesize/2f, type.size * tilesize, type.size*tilesize)){ return false; } diff --git a/core/src/io/anuke/mindustry/world/ItemBuffer.java b/core/src/io/anuke/mindustry/world/ItemBuffer.java index fbb16ad3e0..251517b379 100644 --- a/core/src/io/anuke/mindustry/world/ItemBuffer.java +++ b/core/src/io/anuke/mindustry/world/ItemBuffer.java @@ -22,7 +22,7 @@ public class ItemBuffer{ public void accept(Item item, short data){ //if(!accepts()) return; - buffer[index++] = Pack.longInt(NumberUtils.floatToIntBits(Time.time()), Pack.shortInt((short)item.id, data)); + buffer[index++] = Pack.longInt(Float.floatToIntBits(Time.time()), Pack.shortInt((short)item.id, data)); } public void accept(Item item){ @@ -32,7 +32,7 @@ public class ItemBuffer{ public Item poll(){ if(index > 0){ long l = buffer[0]; - float time = NumberUtils.intBitsToFloat(Pack.leftInt(l)); + float time = Float.intBitsToFloat(Pack.leftInt(l)); if(Time.time() >= time + speed || Time.time() < time){ return content.item(Pack.leftShort(Pack.rightInt(l))); @@ -44,7 +44,7 @@ public class ItemBuffer{ public short pollData(){ if(index > 0){ long l = buffer[0]; - float time = NumberUtils.intBitsToFloat(Pack.leftInt(l)); + float time = Float.intBitsToFloat(Pack.leftInt(l)); if(Time.time() >= time + speed || Time.time() < time){ return Pack.rightShort(Pack.rightInt(l)); diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index 6a46deac64..8b418769dd 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -19,8 +19,6 @@ import static io.anuke.mindustry.Vars.*; public class Tile implements Position, TargetTrait{ /** Tile traversal cost. */ public byte cost = 1; - /** Weight of [ground] units on this tile. */ - public byte weight, airWeight = 0; /** Tile entity, usually null. */ public TileEntity entity; public short x, y; diff --git a/core/src/io/anuke/mindustry/world/blocks/Floor.java b/core/src/io/anuke/mindustry/world/blocks/Floor.java index 7cfa2b9103..51d4a5aa32 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Floor.java +++ b/core/src/io/anuke/mindustry/world/blocks/Floor.java @@ -45,8 +45,6 @@ public class Floor extends Block{ public boolean isLiquid; /** if true, this block cannot be mined by players. useful for annoying things like sand. */ public boolean playerUnmineable = false; - /** Style of the edge stencil. Loaded by looking up "edge-stencil-{name}". */ - public String edgeStyle = "smooth"; /** Group of blocks that this block does not draw edges on. */ public Block blendGroup = this; /** Effect displayed when randomly updated. */ diff --git a/core/src/io/anuke/mindustry/world/blocks/StaticWall.java b/core/src/io/anuke/mindustry/world/blocks/StaticWall.java index d1cb3334c7..b645abb3b5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/StaticWall.java +++ b/core/src/io/anuke/mindustry/world/blocks/StaticWall.java @@ -45,7 +45,8 @@ public class StaticWall extends Rock{ } boolean eq(int rx, int ry){ - return world.tile(rx + 1, ry).block() == this + return rx < world.width() - 1 && ry < world.height() - 1 + && world.tile(rx + 1, ry).block() == this && world.tile(rx, ry + 1).block() == this && world.tile(rx, ry).block() == this && world.tile(rx + 1, ry + 1).block() == this; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java index 93bc7d6648..6ee12b2212 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java @@ -41,8 +41,7 @@ public class ForceProjector extends Block{ private static Tile paramTile; private static ForceProjector paramBlock; private static ForceEntity paramEntity; - private static Consumer shieldConsumer = bullet -> { - AbsorbTrait trait = (AbsorbTrait)bullet; + private static Consumer shieldConsumer = trait -> { if(trait.canBeAbsorbed() && trait.getTeam() != paramTile.getTeam() && paramBlock.isInsideHexagon(trait.getX(), trait.getY(), paramBlock.realRadius(paramEntity) * 2f, paramTile.drawx(), paramTile.drawy())){ trait.absorb(); Effects.effect(Fx.absorb, trait); @@ -173,7 +172,7 @@ public class ForceProjector extends Block{ paramTile = tile; paramEntity = entity; paramBlock = this; - EntityQuery.getNearby(bulletGroup, tile.drawx(), tile.drawy(), realRadius * 2f, shieldConsumer); + bulletGroup.intersect(tile.drawx() - realRadius, tile.drawy() - realRadius, realRadius*2f, realRadius * 2f, shieldConsumer); } float realRadius(ForceEntity entity){ diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java index 1e284f2717..2de2cd6b8f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java @@ -52,7 +52,7 @@ public class OverdriveProjector extends Block{ @Override public void drawPlace(int x, int y, int rotation, boolean valid){ Draw.color(Pal.accent); - Lines.dashCircle(x * tilesize, y * tilesize, range); + Lines.dashCircle(x * tilesize + offset(), y * tilesize + offset(), range); Draw.color(); } @@ -90,7 +90,7 @@ public class OverdriveProjector extends Block{ for(int x = -tileRange + tile.x; x <= tileRange + tile.x; x++){ for(int y = -tileRange + tile.y; y <= tileRange + tile.y; y++){ - if(Mathf.dst(x, y, tile.x, tile.y) > realRange) continue; + if(Mathf.dst(x, y, tile.x, tile.y) > tileRange) continue; Tile other = world.tile(x, y); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java index 6caa16390e..c89ef0c4cf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -38,6 +38,15 @@ public class ItemTurret extends CooledTurret{ stats.add(BlockStat.ammo, new AmmoListValue<>(ammo)); } + @Override + public void onProximityAdded(Tile tile){ + super.onProximityAdded(tile); + + //add first ammo item to cheaty blocks so they can shoot properly + if(tile.isEnemyCheat() && ammo.size > 0){ + handleItem(ammo.entries().next().key, tile, tile); + } + } @Override public void displayBars(Tile tile, Table bars){ 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 3755868fb9..e753b69a2e 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 @@ -97,7 +97,7 @@ public abstract class Turret extends Block{ public void setStats(){ super.setStats(); - stats.add(BlockStat.shootRange, range, StatUnit.blocks); + 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.shots, shots, StatUnit.none); @@ -195,7 +195,7 @@ public abstract class Turret extends Block{ protected void findTarget(Tile tile){ TurretEntity entity = tile.entity(); - entity.target = Units.getClosestTarget(tile.getTeam(), + entity.target = Units.closestTarget(tile.getTeam(), tile.drawx(), tile.drawy(), range, e -> !e.isDead() && (!e.isFlying() || targetAir) && (e.isFlying() || targetGround)); } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java index 2e145a59e5..cdae6e25e0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java @@ -36,7 +36,7 @@ public class Junction extends Block{ if(buffer.index > 0){ if(buffer.index > buffer.items.length) buffer.index = buffer.items.length; long l = buffer.items[0]; - float time = NumberUtils.intBitsToFloat(Pack.leftInt(l)); + float time = Float.intBitsToFloat(Pack.leftInt(l)); if(Time.time() >= time + speed || Time.time() < time){ @@ -59,7 +59,7 @@ public class Junction extends Block{ @Override public void handleItem(Item item, Tile tile, Tile source){ JunctionEntity entity = tile.entity(); - long value = Pack.longInt(NumberUtils.floatToIntBits(Time.time()), item.id); + long value = Pack.longInt(Float.floatToIntBits(Time.time()), item.id); int relative = source.relativeTo(tile.x, tile.y); entity.buffers[relative].add(value); } 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 8cb1ea19d7..cdf537563d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -3,8 +3,7 @@ package io.anuke.mindustry.world.blocks.distribution; import io.anuke.annotations.Annotations.Loc; import io.anuke.annotations.Annotations.Remote; import io.anuke.arc.Core; -import io.anuke.arc.collection.ObjectSet; -import io.anuke.arc.graphics.Color; +import io.anuke.arc.collection.OrderedSet; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.Angles; import io.anuke.arc.math.Mathf; @@ -63,47 +62,6 @@ public class MassDriver extends Block{ entity.link = position; } - @Remote(called = Loc.server) - public static void onMassDriverFire(Tile tile, Tile target){ - //just in case the client has invalid data - if(!(tile.entity instanceof MassDriverEntity) || !(target.entity instanceof MassDriverEntity)) return; - - MassDriver driver = (MassDriver)tile.block(); - - MassDriverEntity entity = tile.entity(); - MassDriverEntity other = target.entity(); - - entity.reload = 1f; - - entity.power.satisfaction -= Math.min(entity.power.satisfaction, driver.powerPercentageUsed); - - DriverBulletData data = Pools.obtain(DriverBulletData.class, DriverBulletData::new); - data.from = entity; - data.to = other; - int totalUsed = 0; - for(int i = 0; i < content.items().size; i++){ - int maxTransfer = Math.min(entity.items.get(content.item(i)), ((MassDriver)tile.block()).itemCapacity - totalUsed); - data.items[i] = maxTransfer; - totalUsed += maxTransfer; - } - entity.items.clear(); - - float angle = tile.angleTo(target); - - other.isRecieving = true; - Bullet.create(Bullets.driverBolt, entity, entity.getTeam(), - tile.drawx() + Angles.trnsx(angle, driver.translation), tile.drawy() + Angles.trnsy(angle, driver.translation), - angle, 1f, 1f, data); - - Effects.effect(driver.shootEffect, tile.drawx() + Angles.trnsx(angle, driver.translation), - tile.drawy() + Angles.trnsy(angle, driver.translation), angle); - - Effects.effect(driver.smokeEffect, tile.drawx() + Angles.trnsx(angle, driver.translation), - tile.drawy() + Angles.trnsy(angle, driver.translation), angle); - - Effects.shake(driver.shake, driver.shake, entity); - } - @Override public TextureRegion[] generateIcons(){ return new TextureRegion[]{Core.atlas.find(name + "-base"), Core.atlas.find(name)}; @@ -126,51 +84,78 @@ public class MassDriver extends Block{ @Override public void update(Tile tile){ MassDriverEntity entity = tile.entity(); - Tile link = world.tile(entity.link); + boolean hasLink = linkValid(tile); - if(entity.isUnloading){ - tryDump(tile); - if(entity.items.total() <= 0){ - entity.isUnloading = false; - } - } - + //reload regardless of state if(entity.reload > 0f){ entity.reload = Mathf.clamp(entity.reload - entity.delta() / reloadTime); } - //unload when dest is full - if(!linkValid(tile) || (link.entity.items.total() >= itemCapacity) && entity.items.total() > 0){ - entity.isUnloading = true; + //cleanup waiting shooters that are not valid + if(!shooterValid(tile, entity.currentShooter())){ + entity.waitingShooters.remove(entity.currentShooter()); } - if(!entity.isRecieving){ - - if(entity.waiting.size > 0){ //accepting takes priority over shooting - Tile waiter = entity.waiting.first(); - - entity.rotation = Mathf.slerpDelta(entity.rotation, tile.angleTo(waiter), rotateSpeed); - }else if(tile.entity.items.total() >= minDistribute && - linkValid(tile) && //only fire when at 100% power capacity - tile.entity.power.satisfaction >= powerPercentageUsed && - link.block().itemCapacity - link.entity.items.total() >= minDistribute && entity.reload <= 0.0001f){ - - MassDriverEntity other = link.entity(); - other.waiting.add(tile); - - float target = tile.angleTo(link); - - entity.rotation = Mathf.slerpDelta(entity.rotation, target, rotateSpeed); - - if(Angles.near(entity.rotation, target, 1f) && - Angles.near(other.rotation, target + 180f, 1f)){ - Call.onMassDriverFire(tile, link); - } + //switch states + if(entity.state == DriverState.idle){ + //start accepting when idle + if(!entity.waitingShooters.isEmpty()){ + entity.state = DriverState.accepting; + }else if(hasLink){ //switch to shooting if there's a valid link. + entity.state = DriverState.shooting; } } - entity.waiting.clear(); + //dump when idle or accepting + if(entity.state == DriverState.idle || entity.state == DriverState.accepting){ + tryDump(tile); + } + + if(entity.state == DriverState.accepting){ + //if there's nothing shooting at this, bail + if(entity.currentShooter() == null){ + entity.state = DriverState.idle; + return; + } + + //align to shooter rotation + entity.rotation = Mathf.slerpDelta(entity.rotation, tile.angleTo(entity.currentShooter()), rotateSpeed); + }else if(entity.state == DriverState.shooting){ + //if there's nothing to shoot at OR someone wants to shoot at this thing, bail + if(!hasLink || !entity.waitingShooters.isEmpty()){ + entity.state = DriverState.idle; + return; + } + + float targetRotation = tile.angleTo(link); + + if( + tile.entity.items.total() >= minDistribute && //must shoot minimum amount of items + tile.entity.power.satisfaction >= powerPercentageUsed && //must have power + link.block().itemCapacity - link.entity.items.total() >= minDistribute && //must have minimum amount of space + entity.reload <= 0.0001f //must have reloaded + ){ + MassDriverEntity other = link.entity(); + other.waitingShooters.add(tile); + + //align to target location + entity.rotation = Mathf.slerpDelta(entity.rotation, targetRotation, rotateSpeed); + + //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; + } + } + } } @Override @@ -187,6 +172,13 @@ public class MassDriver extends Block{ tile.drawy() + Angles.trnsy(entity.rotation + 180f, entity.reload * knockback), entity.rotation - 90); } + @Override + public void drawPlace(int x, int y, int rotation, boolean valid){ + Draw.color(Pal.accent); + Lines.dashCircle(x * tilesize, y*tilesize, range); + Draw.color(); + } + @Override public void drawConfigure(Tile tile){ float sin = Mathf.absin(Time.time(), 6f, 1f); @@ -237,7 +229,71 @@ public class MassDriver extends Block{ return new MassDriverEntity(); } + protected void fire(Tile tile, Tile target){ + MassDriverEntity entity = tile.entity(); + MassDriverEntity other = target.entity(); + + //reset reload, use power. + entity.reload = 1f; + entity.power.satisfaction -= Math.min(entity.power.satisfaction, powerPercentageUsed); + + DriverBulletData data = Pools.obtain(DriverBulletData.class, DriverBulletData::new); + data.from = entity; + data.to = other; + int totalUsed = 0; + for(int i = 0; i < content.items().size; i++){ + int maxTransfer = Math.min(entity.items.get(content.item(i)), ((MassDriver)tile.block()).itemCapacity - totalUsed); + data.items[i] = maxTransfer; + totalUsed += maxTransfer; + } + entity.items.clear(); + + float angle = tile.angleTo(target); + + Bullet.create(Bullets.driverBolt, entity, entity.getTeam(), + tile.drawx() + Angles.trnsx(angle, translation), tile.drawy() + Angles.trnsy(angle, translation), + angle, 1f, 1f, data); + + Effects.effect(shootEffect, tile.drawx() + Angles.trnsx(angle, translation), + tile.drawy() + Angles.trnsy(angle, translation), angle); + + Effects.effect(smokeEffect, tile.drawx() + Angles.trnsx(angle, translation), + tile.drawy() + Angles.trnsy(angle, translation), angle); + + Effects.shake(shake, shake, entity); + } + + protected void handlePayload(MassDriverEntity entity, Bullet bullet, DriverBulletData data){ + int totalItems = entity.items.total(); + + //add all the items possible + for(int i = 0; i < data.items.length; i++){ + int maxAdd = Math.min(data.items[i], itemCapacity * 2 - totalItems); + entity.items.add(content.item(i), maxAdd); + data.items[i] -= maxAdd; + totalItems += maxAdd; + + if(totalItems >= itemCapacity * 2){ + break; + } + } + + Effects.shake(shake, shake, entity); + Effects.effect(recieveEffect, bullet); + + entity.reload = 1f; + bullet.remove(); + } + + protected boolean shooterValid(Tile tile, Tile other){ + if(other == null) return true; + if(!(other.block() instanceof MassDriver)) return false; + MassDriverEntity entity = other.entity(); + return entity.link == tile.pos() && tile.dst(other) <= range; + } + protected boolean linkValid(Tile tile){ + if(tile == null) return false; MassDriverEntity entity = tile.entity(); if(entity == null || entity.link == -1) return false; Tile link = world.tile(entity.link); @@ -257,63 +313,39 @@ public class MassDriver extends Block{ } public class MassDriverEntity extends TileEntity{ - public int link = -1; - public float rotation = 90; - //set of tiles that currently want to distribute to this tile - public ObjectSet waiting = new ObjectSet<>(); - //whether this mass driver is waiting for a bullet to hit it and deliver items - public boolean isRecieving; - //whether this driver just recieved some items and is now unloading - public boolean isUnloading = true; + int link = -1; + float rotation = 90; + float reload = 0f; + DriverState state = DriverState.idle; + OrderedSet waitingShooters = new OrderedSet<>(); - public float reload = 0f; + Tile currentShooter(){ + return waitingShooters.isEmpty() ? null : waitingShooters.first(); + } public void handlePayload(Bullet bullet, DriverBulletData data){ - int totalItems = items.total(); - - //add all the items possible - for(int i = 0; i < data.items.length; i++){ - int maxAdd = Math.min(data.items[i], itemCapacity * 2 - totalItems); - items.add(content.item(i), maxAdd); - data.items[i] -= maxAdd; - totalItems += maxAdd; - - if(totalItems >= itemCapacity * 2){ - break; - } - } - - //drop all items remaining on the ground - for(int i = 0; i < data.items.length; i++){ - int amountDropped = Mathf.random(0, data.items[i]); - if(amountDropped > 0){ - float angle = Mathf.range(180f); - Effects.effect(Fx.dropItem, Color.WHITE, bullet.x, bullet.y, angle, content.item(i)); - } - } - - reload = 1f; - Effects.shake(shake, shake, this); - Effects.effect(recieveEffect, bullet); - - isRecieving = false; - bullet.remove(); - - if(!linkValid(tile)){ - isUnloading = true; - } + ((MassDriver)block).handlePayload(this, bullet, data); } @Override public void write(DataOutput stream) throws IOException{ stream.writeInt(link); stream.writeFloat(rotation); + stream.writeByte((byte)state.ordinal()); } @Override public void read(DataInput stream) throws IOException{ link = stream.readInt(); rotation = stream.readFloat(); + state = DriverState.values()[stream.readByte()]; } } + + enum DriverState{ + idle, //nothing is shooting at this mass driver and it does not have any target + accepting, //currently getting shot at, unload items + shooting, + unloading + } } 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 6c32d91b99..3915f563eb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -45,7 +45,7 @@ public class PowerNode extends PowerBlock{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void linkPowerNodes(Player player, Tile tile, Tile other){ - if(tile.entity.power == null || !((PowerNode)tile.block()).linkValid(tile, other) + if(tile.entity == null || other == null || tile.entity.power == null || !((PowerNode)tile.block()).linkValid(tile, other) || tile.entity.power.links.size >= ((PowerNode)tile.block()).maxNodes) return; TileEntity entity = tile.entity(); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java index d9e814c8ca..c34163b3b2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -88,6 +88,9 @@ public class Drill extends Block{ topRegion = Core.atlas.find(name + "-top"); } + @Override + public void drawCracks(Tile tile){} + @Override public void draw(Tile tile){ float s = 0.3f; @@ -96,6 +99,7 @@ public class Drill extends Block{ DrillEntity entity = tile.entity(); Draw.rect(region, tile.drawx(), tile.drawy()); + super.drawCracks(tile); if(drawRim){ Draw.color(heatColor); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java index 177e870768..a792a1c334 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java @@ -36,11 +36,15 @@ public class Fracker extends SolidPump{ topRegion = Core.atlas.find(name + "-top"); } + @Override + public void drawCracks(Tile tile){} + @Override public void draw(Tile tile){ FrackerEntity entity = tile.entity(); Draw.rect(region, tile.drawx(), tile.drawy()); + super.drawCracks(tile); Draw.color(result.color); Draw.alpha(tile.entity.liquids.get(result) / liquidCapacity); 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 844d7cc058..9d85168575 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java @@ -8,6 +8,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.Mathf; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Fx; +import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.traits.SpawnerTrait; import io.anuke.mindustry.entities.type.*; @@ -43,14 +44,8 @@ public class CoreBlock extends StorageBlock{ entity.progress = 0; entity.currentUnit = player; entity.currentUnit.onRespawn(tile); - entity.currentUnit.heal(); - entity.currentUnit.rotation = 90f; entity.currentUnit.applyImpulse(0, 8f); - entity.currentUnit.setNet(tile.drawx(), tile.drawy()); - entity.currentUnit.add(); entity.currentUnit = null; - - player.endRespawning(); } @Override @@ -124,10 +119,10 @@ public class CoreBlock extends StorageBlock{ Draw.color(Pal.accent); Lines.lineAngleCenter( - tile.drawx() + Mathf.sin(entity.time, 6f, Vars.tilesize / 3f * size), - tile.drawy(), - 90, - size * Vars.tilesize / 2f); + tile.drawx() + Mathf.sin(entity.time, 6f, Vars.tilesize / 3f * size), + tile.drawy(), + 90, + size * Vars.tilesize / 2f); Draw.reset(); } @@ -148,6 +143,7 @@ public class CoreBlock extends StorageBlock{ return; } + entity.currentUnit.set(tile.drawx(), tile.drawy()); entity.heat = Mathf.lerpDelta(entity.heat, 1f, 0.1f); entity.time += entity.delta(); entity.progress += 1f / state.rules.respawnTime * entity.delta(); @@ -176,8 +172,8 @@ public class CoreBlock extends StorageBlock{ if(!netServer.isWaitingForPlayers() && currentUnit == null){ currentUnit = player; progress = 0f; - player.mech = player.getStarterMech(); - player.set(tile.drawx(), tile.drawy()); + player.mech = Mechs.starter; + player.beginRespawning(this); } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java index d4564e5eae..25e7723842 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java @@ -9,7 +9,6 @@ import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.util.Time; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.traits.SpawnerTrait; import io.anuke.mindustry.entities.type.Player; @@ -31,9 +30,7 @@ import static io.anuke.mindustry.Vars.tilesize; public class MechPad extends Block{ protected Mech mech; protected float buildTime = 60 * 5; - protected float requiredSatisfaction = 1f; - - protected TextureRegion openRegion; + protected float requiredSatisfaction = 0.999f; public MechPad(String name){ super(name); @@ -49,11 +46,6 @@ public class MechPad extends Block{ stats.add(BlockStat.productionTime, buildTime / 60f, StatUnit.seconds); } - @Override - public void init(){ - super.init(); - } - @Override public boolean shouldConsume(Tile tile){ return false; @@ -81,25 +73,10 @@ public class MechPad extends Block{ Effects.effect(Fx.spawn, entity); if(entity.player == null) return; - - Mech result = ((MechPad)tile.block()).mech; - - if(entity.player.mech == result){ - Mech target = (entity.player.isMobile ? Mechs.starterMobile : Mechs.starterDesktop); - if(entity.player.mech == target){ - entity.player.mech = (entity.player.isMobile ? Mechs.starterDesktop : Mechs.starterMobile); - }else{ - entity.player.mech = target; - } - }else{ - entity.player.mech = result; - } + entity.player.mech = ((MechPad)tile.block()).mech; entity.progress = 0; - entity.player.heal(); - entity.player.endRespawning(); - entity.player.setDead(false); - entity.player.clearItem(); + entity.player.onRespawn(tile); entity.player = null; } @@ -125,17 +102,12 @@ public class MechPad extends Block{ if(checkValidTap(tile, player)){ Call.onMechFactoryTap(player, tile); - }else if(player.isLocal && mobile && !player.isDead() && entity.cons.valid() && entity.player == null){ - player.moveTarget = tile.entity; + }else if(player.isLocal && mobile && !player.isDead() && (entity.power.satisfaction >= requiredSatisfaction) && entity.player == null){ + //deselect on double taps + player.moveTarget = player.moveTarget == tile.entity ? null : tile.entity; } } - @Override - public void load(){ - super.load(); - openRegion = Core.atlas.find(name + "-open"); - } - @Override public void draw(Tile tile){ MechFactoryEntity entity = tile.entity(); @@ -145,10 +117,6 @@ public class MechPad extends Block{ if(entity.player != null){ TextureRegion region = mech.iconRegion; - if(entity.player.mech == mech){ - region = (entity.player.mech == Mechs.starterDesktop ? Mechs.starterMobile : Mechs.starterDesktop).iconRegion; - } - Shaders.build.region = region; Shaders.build.progress = entity.progress; Shaders.build.time = -entity.time / 5f; @@ -175,6 +143,7 @@ public class MechPad extends Block{ MechFactoryEntity entity = tile.entity(); if(entity.player != null){ + entity.player.set(tile.drawx(), tile.drawy()); entity.heat = Mathf.lerpDelta(entity.heat, 1f, 0.1f); entity.progress += 1f / buildTime * entity.delta(); @@ -205,9 +174,6 @@ public class MechPad extends Block{ progress = 0f; player = unit; - player.rotation = 90f; - player.baseRotation = 90f; - player.setNet(x, y); player.beginRespawning(this); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java index c0b949d055..835c987c1a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java @@ -122,7 +122,7 @@ public class RepairPoint extends Block{ if(entity.timer.get(timerTarget, 20)){ rect.setSize(repairRadius * 2).setCenter(tile.drawx(), tile.drawy()); - entity.target = Units.getClosest(tile.getTeam(), tile.drawx(), tile.drawy(), repairRadius, + entity.target = Units.closest(tile.getTeam(), tile.drawx(), tile.drawy(), repairRadius, unit -> unit.health < unit.maxHealth()); } } diff --git a/core/src/io/anuke/mindustry/world/modules/PowerModule.java b/core/src/io/anuke/mindustry/world/modules/PowerModule.java index a51e469064..ad82a5aedb 100644 --- a/core/src/io/anuke/mindustry/world/modules/PowerModule.java +++ b/core/src/io/anuke/mindustry/world/modules/PowerModule.java @@ -1,10 +1,11 @@ package io.anuke.mindustry.world.modules; -import io.anuke.annotations.Annotations.NonNull; import io.anuke.arc.collection.IntArray; import io.anuke.mindustry.world.blocks.power.PowerGraph; -import java.io.*; +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; public class PowerModule extends BlockModule{ /** @@ -13,10 +14,7 @@ public class PowerModule extends BlockModule{ * In case of buffered consumers, this is the percentage of power stored in relation to the maximum capacity. */ public float satisfaction = 0.0f; - /** Specifies power which is required additionally, e.g. while a force projector is being shot at. */ - public float extraUse = 0f; - public @NonNull - PowerGraph graph = new PowerGraph(); + public PowerGraph graph = new PowerGraph(); public IntArray links = new IntArray(); @Override diff --git a/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java b/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java deleted file mode 100644 index 24a0fa4529..0000000000 --- a/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java +++ /dev/null @@ -1,143 +0,0 @@ -package io.anuke.mindustry.desktop; - -import io.anuke.arc.Core; -import io.anuke.arc.collection.ObjectMap; -import io.anuke.arc.util.*; -import io.anuke.arc.util.io.PropertiesUtils; -import io.anuke.arc.util.serialization.JsonValue; -import io.anuke.arc.util.serialization.JsonValue.ValueType; -import io.anuke.arc.util.serialization.JsonWriter.OutputType; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.game.Version; -import io.anuke.mindustry.net.Net; -import org.lwjgl.util.tinyfd.TinyFileDialogs; - -import java.io.*; -import java.nio.file.*; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -public class CrashHandler{ - - public static void handle(Throwable e){ - e.printStackTrace(); - if(Version.number == 0){ - try{ - ObjectMap map = new ObjectMap<>(); - PropertiesUtils.load(map, new InputStreamReader(CrashHandler.class.getResourceAsStream("/version.properties"))); - - Version.type = map.get("type"); - Version.number = Integer.parseInt(map.get("number")); - Version.modifier = map.get("modifier"); - if(map.get("build").contains(".")){ - String[] split = map.get("build").split("\\."); - Version.build = Integer.parseInt(split[0]); - Version.revision = Integer.parseInt(split[1]); - }else{ - Version.build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1; - } - }catch(Throwable ignored){ - - } - } - - try{ - //check crash report setting - if(!Core.settings.getBool("crashreport", true)){ - return; - } - }catch(Throwable ignored){ - //if there's no settings init we don't know what the user wants but chances are it's an important crash, so send it anyway - } - - boolean badGPU = false; - - if(e.getMessage() != null && (e.getMessage().contains("Couldn't create window") || e.getMessage().contains("OpenGL 2.0 or higher"))){ - - dialog(() -> TinyFileDialogs.tinyfd_messageBox("oh no", - e.getMessage().contains("Couldn't create window") ? "A graphics initialization error has occured! Try to update your graphics drivers.\nReport this to the developer." : - "Your graphics card does not support OpenGL 2.0!\n" + - "Try to update your graphics drivers.\n\n" + - "(If that doesn't work, your computer just doesn't support Mindustry.)", "ok", "error", true)); - badGPU = true; - } - - //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; - - boolean netActive = false, netServer = false; - - //attempt to close connections, if applicable - try{ - netActive = Net.active(); - netServer = Net.server(); - Net.dispose(); - }catch(Throwable p){ - p.printStackTrace(); - } - - JsonValue value = new JsonValue(ValueType.object); - - boolean fn = netActive, fs = netServer; - - //add all relevant info, ignoring exceptions - ex(() -> value.addChild("versionType", new JsonValue(Version.type))); - ex(() -> value.addChild("versionNumber", new JsonValue(Version.number))); - ex(() -> value.addChild("versionModifier", new JsonValue(Version.modifier))); - ex(() -> value.addChild("build", new JsonValue(Version.build))); - ex(() -> value.addChild("net", new JsonValue(fn))); - ex(() -> value.addChild("server", new JsonValue(fs))); - ex(() -> value.addChild("state", new JsonValue(Vars.state.getState().name()))); - ex(() -> value.addChild("os", new JsonValue(System.getProperty("os.name")))); - ex(() -> value.addChild("trace", new JsonValue(parseException(e)))); - - try{ - Path path = Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes", - "crash-report-" + DateTimeFormatter.ofPattern("MM_dd_yyyy_HH_mm_ss").format(LocalDateTime.now()) + ".txt"); - Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes")); - Files.write(path, parseException(e).getBytes()); - - if(!badGPU){ - dialog(() -> TinyFileDialogs.tinyfd_messageBox("oh no", "A crash has occured. It has been saved in:\n" + path.toAbsolutePath().toString(), "ok", "error", true)); - } - }catch(Throwable t){ - Log.err("Failed to save local crash report."); - t.printStackTrace(); - } - - Log.info("Sending crash report."); - //post to crash report URL - Net.http(Vars.crashReportURL, "POST", value.toJson(OutputType.json), r -> { - Log.info("Crash sent successfully."); - System.exit(1); - }, t -> { - t.printStackTrace(); - System.exit(1); - }); - - //sleep for 10 seconds or until crash report is sent - try{ - Thread.sleep(10000); - }catch(InterruptedException ignored){ - } - } - - private static void dialog(Runnable r){ - new Thread(r).start(); - } - - private static String parseException(Throwable e){ - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - e.printStackTrace(pw); - return sw.toString(); - } - - private static void ex(Runnable r){ - try{ - r.run(); - }catch(Throwable t){ - t.printStackTrace(); - } - } -} diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java index 3ebae9529f..7750ca6edd 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java @@ -1,7 +1,6 @@ package io.anuke.mindustry.desktop; -import io.anuke.arc.ApplicationListener; -import io.anuke.arc.Settings; +import io.anuke.arc.*; import io.anuke.arc.backends.lwjgl3.Lwjgl3Application; import io.anuke.arc.backends.lwjgl3.Lwjgl3ApplicationConfiguration; import io.anuke.arc.files.FileHandle; @@ -10,8 +9,7 @@ import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.net.Net; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.*; public class DesktopLauncher extends Lwjgl3Application{ @@ -45,11 +43,11 @@ public class DesktopLauncher extends Lwjgl3Application{ Platform.instance = new DesktopPlatform(arg); - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); new DesktopLauncher(new Mindustry(), config); }catch(Throwable e){ - CrashHandler.handle(e); + DesktopPlatform.handleCrash(e); } } } diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java index 8c4559ea60..f4d79f6b09 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java @@ -1,16 +1,21 @@ package io.anuke.mindustry.desktop; -import club.minnced.discord.rpc.*; +import club.minnced.discord.rpc.DiscordEventHandlers; +import club.minnced.discord.rpc.DiscordRPC; +import club.minnced.discord.rpc.DiscordRichPresence; import io.anuke.arc.collection.Array; import io.anuke.arc.files.FileHandle; import io.anuke.arc.function.Consumer; +import io.anuke.arc.util.Log; import io.anuke.arc.util.OS; import io.anuke.arc.util.Strings; import io.anuke.arc.util.serialization.Base64Coder; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.Platform; +import io.anuke.mindustry.net.CrashSender; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.ui.dialogs.FileChooser; +import org.lwjgl.util.tinyfd.TinyFileDialogs; import java.net.NetworkInterface; import java.util.Enumeration; @@ -18,7 +23,7 @@ import java.util.Enumeration; import static io.anuke.mindustry.Vars.*; public class DesktopPlatform extends Platform{ - final static boolean useDiscord = OS.is64Bit; + static boolean useDiscord = OS.is64Bit; final static String applicationId = "398246104468291591"; String[] args; @@ -28,13 +33,41 @@ public class DesktopPlatform extends Platform{ testMobile = Array.with(args).contains("-testMobile"); if(useDiscord){ - DiscordEventHandlers handlers = new DiscordEventHandlers(); - DiscordRPC.INSTANCE.Discord_Initialize(applicationId, handlers, true, ""); + try{ + DiscordEventHandlers handlers = new DiscordEventHandlers(); + DiscordRPC.INSTANCE.Discord_Initialize(applicationId, handlers, true, ""); - Runtime.getRuntime().addShutdownHook(new Thread(DiscordRPC.INSTANCE::Discord_Shutdown)); + Runtime.getRuntime().addShutdownHook(new Thread(DiscordRPC.INSTANCE::Discord_Shutdown)); + }catch(Throwable t){ + useDiscord = false; + Log.err("Failed to initialize discord.", t); + } } } + static void handleCrash(Throwable e){ + Consumer dialog = r -> new Thread(r).start(); + boolean badGPU = false; + + if(e.getMessage() != null && (e.getMessage().contains("Couldn't create window") || e.getMessage().contains("OpenGL 2.0 or higher"))){ + + dialog.accept(() -> TinyFileDialogs.tinyfd_messageBox("oh no", + e.getMessage().contains("Couldn't create window") ? "A graphics initialization error has occured! Try to update your graphics drivers.\nReport this to the developer." : + "Your graphics card does not support OpenGL 2.0!\n" + + "Try to update your graphics drivers.\n\n" + + "(If that doesn't work, your computer just doesn't support Mindustry.)", "ok", "error", true)); + badGPU = true; + } + + boolean fbgp = badGPU; + + CrashSender.send(e, file -> { + if(!fbgp){ + dialog.accept(() -> TinyFileDialogs.tinyfd_messageBox("oh no", "A crash has occured. It has been saved in:\n" + file.getAbsolutePath(), "ok", "error", true)); + } + }); + } + @Override public void showFileChooser(String text, String content, Consumer cons, boolean open, String filter){ new FileChooser(text, file -> file.extension().equalsIgnoreCase(filter), open, cons).show(); diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 457aad0d98..94336fcae9 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 290541c738..5f1b1201a7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index af6708ff22..cccdd3d517 100755 --- a/gradlew +++ b/gradlew @@ -28,7 +28,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" diff --git a/gradlew.bat b/gradlew.bat index 0f8d5937c4..e95643d6a2 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS= @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index 3f795ee768..7f9e9f43e2 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -10,8 +10,8 @@ import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.game.Saves.SaveSlot; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.net.Net; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; import org.robovm.apple.foundation.NSAutoreleasePool; import org.robovm.apple.foundation.NSURL; import org.robovm.apple.uikit.*; @@ -27,8 +27,8 @@ public class IOSLauncher extends IOSApplication.Delegate{ @Override protected IOSApplication createApplication(){ - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); if(UIDevice.getCurrentDevice().getUserInterfaceIdiom() == UIUserInterfaceIdiom.Pad){ Unit.dp.addition = 0.5f; diff --git a/net/src/io/anuke/net/KryoClient.java b/net/src/io/anuke/mindustry/net/ArcNetClient.java similarity index 88% rename from net/src/io/anuke/net/KryoClient.java rename to net/src/io/anuke/mindustry/net/ArcNetClient.java index 2c24b2e687..3e267b8703 100644 --- a/net/src/io/anuke/net/KryoClient.java +++ b/net/src/io/anuke/mindustry/net/ArcNetClient.java @@ -1,11 +1,10 @@ -package io.anuke.net; +package io.anuke.mindustry.net; -import com.esotericsoftware.kryonet.*; import io.anuke.arc.Core; import io.anuke.arc.collection.Array; import io.anuke.arc.function.Consumer; +import io.anuke.arc.net.*; import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Net.ClientProvider; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.Connect; @@ -21,24 +20,22 @@ import java.nio.channels.ClosedSelectorException; import static io.anuke.mindustry.Vars.netClient; import static io.anuke.mindustry.Vars.port; -public class KryoClient implements ClientProvider{ +public class ArcNetClient implements ClientProvider{ final Client client; final Array foundAddresses = new Array<>(); final ClientDiscoveryHandler handler; final LZ4FastDecompressor decompressor = LZ4Factory.fastestInstance().fastDecompressor(); Consumer lastCallback; - public KryoClient(){ - KryoCore.init(); - + public ArcNetClient(){ handler = new ClientDiscoveryHandler(){ @Override - public DatagramPacket onRequestNewDatagramPacket(){ + public DatagramPacket newDatagramPacket(){ return new DatagramPacket(new byte[128], 128); } @Override - public void onDiscoveredHost(DatagramPacket datagramPacket){ + public void discoveredHost(DatagramPacket datagramPacket){ ByteBuffer buffer = ByteBuffer.wrap(datagramPacket.getData()); Host host = NetworkIO.readServerData(datagramPacket.getAddress().getHostAddress(), buffer); for(InetAddress address : foundAddresses){ @@ -51,15 +48,15 @@ public class KryoClient implements ClientProvider{ } @Override - public void onFinally(){ + public void finish(){ } }; - client = new Client(8192, 4096, connection -> new ByteSerializer()); + client = new Client(8192, 4096, new PacketSerializer()); client.setDiscoveryHandler(handler); - Listener listener = new Listener(){ + NetListener listener = new NetListener(){ @Override public void connected(Connection connection){ Connect c = new Connect(); @@ -95,11 +92,7 @@ public class KryoClient implements ClientProvider{ } }; - if(KryoCore.fakeLag){ - client.addListener(new Listener.LagListener(KryoCore.fakeLagMin, KryoCore.fakeLagMax, listener)); - }else{ - client.addListener(listener); - } + client.addListener(listener); } private static boolean isLocal(InetAddress addr){ @@ -133,7 +126,7 @@ public class KryoClient implements ClientProvider{ }catch(Exception e){ if(!(e instanceof ClosedSelectorException)) handleException(e); } - }, "Kryonet Client"); + }, "Net Client"); updateThread.setDaemon(true); updateThread.start(); @@ -188,7 +181,7 @@ public class KryoClient implements ClientProvider{ lastCallback = valid; - DatagramPacket packet = handler.onRequestNewDatagramPacket(); + DatagramPacket packet = handler.newDatagramPacket(); socket.receive(packet); @@ -231,7 +224,7 @@ public class KryoClient implements ClientProvider{ } private void handleException(Exception e){ - if(e instanceof KryoNetException){ + if(e instanceof ArcNetException){ Core.app.post(() -> Net.showError(new IOException("mismatch"))); }else{ Core.app.post(() -> Net.showError(e)); diff --git a/net/src/io/anuke/net/KryoServer.java b/net/src/io/anuke/mindustry/net/ArcNetServer.java similarity index 90% rename from net/src/io/anuke/net/KryoServer.java rename to net/src/io/anuke/mindustry/net/ArcNetServer.java index 5304913a6d..0110523061 100644 --- a/net/src/io/anuke/net/KryoServer.java +++ b/net/src/io/anuke/mindustry/net/ArcNetServer.java @@ -1,15 +1,12 @@ -package io.anuke.net; +package io.anuke.mindustry.net; import com.dosse.upnp.UPnP; -import com.esotericsoftware.kryonet.*; -import com.esotericsoftware.kryonet.Listener.LagListener; -import com.esotericsoftware.kryonet.util.InputStreamSender; import io.anuke.arc.Core; import io.anuke.arc.collection.Array; +import io.anuke.arc.net.*; import io.anuke.arc.util.Log; import io.anuke.arc.util.Time; import io.anuke.mindustry.Vars; -import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Net.ServerProvider; import io.anuke.mindustry.net.Packets.*; @@ -22,7 +19,7 @@ import java.nio.channels.ClosedSelectorException; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; -public class KryoServer implements ServerProvider{ +public class ArcNetServer implements ServerProvider{ final Server server; final CopyOnWriteArrayList connections = new CopyOnWriteArrayList<>(); final CopyOnWriteArraySet missing = new CopyOnWriteArraySet<>(); @@ -32,18 +29,15 @@ public class KryoServer implements ServerProvider{ int lastconnection = 0; - public KryoServer(){ - KryoCore.init(); - - server = new Server(4096 * 2, 4096, connection -> new ByteSerializer()); + public ArcNetServer(){ + server = new Server(4096 * 2, 4096, new PacketSerializer()); server.setDiscoveryHandler((datagramChannel, fromAddress) -> { ByteBuffer buffer = NetworkIO.writeServerData(); buffer.position(0); datagramChannel.send(buffer, fromAddress); - return true; }); - Listener listener = new Listener(){ + NetListener listener = new NetListener(){ @Override public void connected(Connection connection){ @@ -83,8 +77,13 @@ public class KryoServer implements ServerProvider{ Core.app.post(() -> { try{ Net.handleServerReceived(k.id, object); - }catch(ValidateException e){ - Log.err("Validation failed: {0} ({1})", e.player.name, e.getMessage()); + }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{ + e.printStackTrace(); + } }catch(Exception e){ e.printStackTrace(); } @@ -92,11 +91,7 @@ public class KryoServer implements ServerProvider{ } }; - if(KryoCore.fakeLag){ - server.addListener(new LagListener(KryoCore.fakeLagMin, KryoCore.fakeLagMax, listener)); - }else{ - server.addListener(listener); - } + server.addListener(listener); } @Override @@ -150,7 +145,7 @@ public class KryoServer implements ServerProvider{ }catch(Throwable e){ if(!(e instanceof ClosedSelectorException)) handleException(e); } - }, "Kryonet Server"); + }, "Net Server"); serverThread.setDaemon(true); serverThread.start(); } @@ -291,12 +286,11 @@ public class KryoServer implements ServerProvider{ } }catch(Exception e){ Log.err(e); - Log.info("Disconnecting invalid client!"); + Log.info("Error sending packet. Disconnecting invalid client!"); connection.close(); KryoConnection k = getByKryoID(connection.getID()); if(k != null) connections.remove(k); - Log.info("Connection removed {0}", k); } } diff --git a/net/src/io/anuke/mindustry/net/PacketSerializer.java b/net/src/io/anuke/mindustry/net/PacketSerializer.java new file mode 100644 index 0000000000..e79d5457aa --- /dev/null +++ b/net/src/io/anuke/mindustry/net/PacketSerializer.java @@ -0,0 +1,88 @@ +package io.anuke.mindustry.net; + +import io.anuke.arc.function.Supplier; +import io.anuke.arc.net.FrameworkMessage; +import io.anuke.arc.net.FrameworkMessage.*; +import io.anuke.arc.net.NetSerializer; +import io.anuke.arc.util.pooling.Pools; + +import java.nio.ByteBuffer; + +@SuppressWarnings("unchecked") +public class PacketSerializer implements NetSerializer{ + + @Override + public void write(ByteBuffer byteBuffer, Object o){ + if(o instanceof FrameworkMessage){ + byteBuffer.put((byte)-2); //code for framework message + writeFramework(byteBuffer, (FrameworkMessage)o); + }else{ + if(!(o instanceof Packet)) + throw new RuntimeException("All sent objects must implement be Packets! Class: " + o.getClass()); + byte id = Registrator.getID(o.getClass()); + if(id == -1) + throw new RuntimeException("Unregistered class: " + o.getClass()); + byteBuffer.put(id); + ((Packet)o).write(byteBuffer); + } + } + + @Override + public Object read(ByteBuffer byteBuffer){ + byte id = byteBuffer.get(); + if(id == -2){ + return readFramework(byteBuffer); + }else{ + Packet packet = Pools.obtain((Class)Registrator.getByID(id).type, (Supplier)Registrator.getByID(id).constructor); + packet.read(byteBuffer); + return packet; + } + } + + + public static void writeFramework(ByteBuffer buffer, FrameworkMessage message){ + if(message instanceof Ping){ + Ping p = (Ping)message; + buffer.put((byte)0); + buffer.putInt(p.id); + buffer.put(p.isReply ? 1 : (byte)0); + }else if(message instanceof DiscoverHost){ + buffer.put((byte)1); + }else if(message instanceof KeepAlive){ + buffer.put((byte)2); + }else if(message instanceof RegisterUDP){ + RegisterUDP p = (RegisterUDP)message; + buffer.put((byte)3); + buffer.putInt(p.connectionID); + }else if(message instanceof RegisterTCP){ + RegisterTCP p = (RegisterTCP)message; + buffer.put((byte)4); + buffer.putInt(p.connectionID); + } + } + + public static FrameworkMessage readFramework(ByteBuffer buffer){ + byte id = buffer.get(); + + if(id == 0){ + Ping p = new Ping(); + p.id = buffer.getInt(); + p.isReply = buffer.get() == 1; + return p; + }else if(id == 1){ + return new DiscoverHost(); + }else if(id == 2){ + return new KeepAlive(); + }else if(id == 3){ + RegisterUDP p = new RegisterUDP(); + p.connectionID = buffer.getInt(); + return p; + }else if(id == 4){ + RegisterTCP p = new RegisterTCP(); + p.connectionID = buffer.getInt(); + return p; + }else{ + throw new RuntimeException("Unknown framework message!"); + } + } +} diff --git a/net/src/io/anuke/net/ByteSerializer.java b/net/src/io/anuke/net/ByteSerializer.java deleted file mode 100644 index 4d01745afe..0000000000 --- a/net/src/io/anuke/net/ByteSerializer.java +++ /dev/null @@ -1,57 +0,0 @@ -package io.anuke.net; - -import com.esotericsoftware.kryonet.FrameworkMessage; -import com.esotericsoftware.kryonet.serialization.Serialization; -import io.anuke.arc.function.Supplier; -import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.net.Packet; -import io.anuke.mindustry.net.Registrator; - -import java.nio.ByteBuffer; - -@SuppressWarnings("unchecked") -public class ByteSerializer implements Serialization{ - - @Override - public void write(ByteBuffer byteBuffer, Object o){ - if(o instanceof FrameworkMessage){ - byteBuffer.put((byte)-2); //code for framework message - FrameworkSerializer.write(byteBuffer, (FrameworkMessage)o); - }else{ - if(!(o instanceof Packet)) - throw new RuntimeException("All sent objects must implement be Packets! Class: " + o.getClass()); - byte id = Registrator.getID(o.getClass()); - if(id == -1) - throw new RuntimeException("Unregistered class: " + o.getClass()); - byteBuffer.put(id); - ((Packet)o).write(byteBuffer); - } - } - - @Override - public Object read(ByteBuffer byteBuffer){ - byte id = byteBuffer.get(); - if(id == -2){ - return FrameworkSerializer.read(byteBuffer); - }else{ - Packet packet = Pools.obtain((Class)Registrator.getByID(id).type, (Supplier)Registrator.getByID(id).constructor); - packet.read(byteBuffer); - return packet; - } - } - - @Override - public int getLengthLength(){ - return 2; - } - - @Override - public void writeLength(ByteBuffer byteBuffer, int i){ - byteBuffer.putShort((short)i); - } - - @Override - public int readLength(ByteBuffer byteBuffer){ - return byteBuffer.getShort(); - } -} diff --git a/net/src/io/anuke/net/FrameworkSerializer.java b/net/src/io/anuke/net/FrameworkSerializer.java deleted file mode 100644 index 9e7b472e37..0000000000 --- a/net/src/io/anuke/net/FrameworkSerializer.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.anuke.net; - -import com.esotericsoftware.kryonet.FrameworkMessage; -import com.esotericsoftware.kryonet.FrameworkMessage.*; - -import java.nio.ByteBuffer; - -public class FrameworkSerializer{ - - public static void write(ByteBuffer buffer, FrameworkMessage message){ - if(message instanceof Ping){ - Ping p = (Ping)message; - - buffer.put((byte)0); - buffer.putInt(p.id); - buffer.put(p.isReply ? 1 : (byte)0); - }else if(message instanceof DiscoverHost){ - DiscoverHost p = (DiscoverHost)message; - - buffer.put((byte)1); - }else if(message instanceof KeepAlive){ - KeepAlive p = (KeepAlive)message; - - buffer.put((byte)2); - }else if(message instanceof RegisterUDP){ - RegisterUDP p = (RegisterUDP)message; - - buffer.put((byte)3); - buffer.putInt(p.connectionID); - }else if(message instanceof RegisterTCP){ - RegisterTCP p = (RegisterTCP)message; - - buffer.put((byte)4); - buffer.putInt(p.connectionID); - } - } - - public static FrameworkMessage read(ByteBuffer buffer){ - byte id = buffer.get(); - - if(id == 0){ - Ping p = new Ping(); - p.id = buffer.getInt(); - p.isReply = buffer.get() == 1; - - return p; - }else if(id == 1){ - - return new DiscoverHost(); - }else if(id == 2){ - - return new KeepAlive(); - }else if(id == 3){ - RegisterUDP p = new RegisterUDP(); - p.connectionID = buffer.getInt(); - - return p; - }else if(id == 4){ - RegisterTCP p = new RegisterTCP(); - p.connectionID = buffer.getInt(); - - return p; - }else{ - throw new RuntimeException("Unknown framework message!"); - } - } -} diff --git a/net/src/io/anuke/net/KryoCore.java b/net/src/io/anuke/net/KryoCore.java deleted file mode 100644 index 3e4be3ab3f..0000000000 --- a/net/src/io/anuke/net/KryoCore.java +++ /dev/null @@ -1,66 +0,0 @@ -package io.anuke.net; - -import com.esotericsoftware.kryonet.util.Log; -import com.esotericsoftware.kryonet.util.Log.Logger; -import io.anuke.arc.util.ColorCodes; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.concurrent.ScheduledExecutorService; - -import static io.anuke.mindustry.Vars.headless; - -/** Utilities and configs for kryo module. */ -public class KryoCore{ - public static boolean fakeLag = false; - public static final int fakeLagMax = 500; - public static final int fakeLagMin = 0; - public static final float fakeLagDrop = 0.1f; - public static final float fakeLagDuplicate = 0.1f; - - public static boolean lastUDP; - - private static ScheduledExecutorService threadPool; - - public static void init(){ - Log.set(fakeLag ? Log.LEVEL_DEBUG : Log.LEVEL_WARN); - - Log.setLogger(new Logger(){ - public void log(int level, String category, String message, Throwable ex){ - if(fakeLag){ - if(message.contains("UDP")){ - lastUDP = true; - }else if(message.contains("TCP")){ - lastUDP = false; - } - return; - } - - StringBuilder builder = new StringBuilder(256); - - if(headless) - builder.append(ColorCodes.BLUE); - - builder.append("Net Error: "); - - builder.append(message); - - if(ex != null){ - StringWriter writer = new StringWriter(256); - ex.printStackTrace(new PrintWriter(writer)); - builder.append('\n'); - builder.append(writer.toString().trim()); - } - - if(headless) - builder.append(ColorCodes.RESET); - - io.anuke.arc.util.Log.info("&b" + builder.toString()); - } - }); - } - - private static int calculateLag(){ - return fakeLagMin + (int)(Math.random() * (fakeLagMax - fakeLagMin)); - } -} diff --git a/server/src/io/anuke/mindustry/server/CrashHandler.java b/server/src/io/anuke/mindustry/server/CrashHandler.java deleted file mode 100644 index 3e65ffb84c..0000000000 --- a/server/src/io/anuke/mindustry/server/CrashHandler.java +++ /dev/null @@ -1,91 +0,0 @@ -package io.anuke.mindustry.server; - -import io.anuke.arc.Core; -import io.anuke.arc.util.Log; -import io.anuke.arc.util.OS; -import io.anuke.arc.util.serialization.JsonValue; -import io.anuke.arc.util.serialization.JsonValue.ValueType; -import io.anuke.arc.util.serialization.JsonWriter.OutputType; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.game.Version; -import io.anuke.mindustry.net.Net; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.nio.file.*; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -public class CrashHandler{ - - public static void handle(Throwable e){ - e.printStackTrace(); - - //don't create crash logs for me (anuke), as it's expected - //also don't create logs for custom builds - if(System.getProperty("user.name").equals("anuke") || Version.build == -1) return; - - //if getting the crash report property failed, OR if it set to false... don't send it - try{ - if(!Core.settings.getBool("crashreport")) return; - }catch(Throwable ignored){ - return; - } - - //attempt to close connections, if applicable - try{ - Net.dispose(); - }catch(Throwable p){ - p.printStackTrace(); - } - - JsonValue value = new JsonValue(ValueType.object); - - //add all relevant info, ignoring exceptions - ex(() -> value.addChild("versionType", new JsonValue(Version.type))); - ex(() -> value.addChild("versionNumber", new JsonValue(Version.number))); - ex(() -> value.addChild("versionModifier", new JsonValue(Version.modifier))); - ex(() -> value.addChild("build", new JsonValue(Version.build))); - ex(() -> value.addChild("state", new JsonValue(Vars.state.getState().name()))); - ex(() -> value.addChild("players", new JsonValue(Vars.playerGroup.size()))); - ex(() -> value.addChild("os", new JsonValue(System.getProperty("os.name")))); - ex(() -> value.addChild("trace", new JsonValue(parseException(e)))); - - try{ - Path path = Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes", - "crash-report-" + DateTimeFormatter.ofPattern("MM-dd-yyyy-HH:mm:ss").format(LocalDateTime.now()) + ".txt"); - Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes")); - Files.write(path, parseException(e).getBytes()); - - Log.info("Saved crash report at {0}", path.toAbsolutePath().toString()); - }catch(Throwable t){ - Log.err("Failure saving crash report: "); - t.printStackTrace(); - } - - Log.info("&lcSending crash report."); - //post to crash report URL - Net.http(Vars.crashReportURL, "POST", value.toJson(OutputType.json), r -> System.exit(1), t -> System.exit(1)); - - //sleep forever - try{ - Thread.sleep(Long.MAX_VALUE); - }catch(InterruptedException ignored){ - } - } - - private static String parseException(Throwable e){ - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - e.printStackTrace(pw); - return sw.toString(); - } - - private static void ex(Runnable r){ - try{ - r.run(); - }catch(Throwable t){ - t.printStackTrace(); - } - } -} diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index 323a6bde73..91d5211133 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -46,13 +46,13 @@ public class ServerControl implements ApplicationListener{ public ServerControl(String[] args){ Core.settings.defaults( - "shufflemode", "normal", - "bans", "", - "admins", "", - "shuffle", true, - "crashreport", false, - "port", port, - "logging", true + "shufflemode", "normal", + "bans", "", + "admins", "", + "shuffle", true, + "crashreport", false, + "port", port, + "logging", true ); Log.setLogger(new LogHandler(){ @@ -90,10 +90,8 @@ public class ServerControl implements ApplicationListener{ }); Time.setDeltaProvider(() -> Core.graphics.getDeltaTime() * 60f); - Effects.setScreenShakeProvider((a, b) -> { - }); - Effects.setEffectProvider((a, b, c, d, e, f) -> { - }); + Effects.setScreenShakeProvider((a, b) -> {}); + Effects.setEffectProvider((a, b, c, d, e, f) -> {}); registerCommands(); @@ -138,6 +136,8 @@ public class ServerControl implements ApplicationListener{ Map map = previous; if(maps.size > 1){ while(map == previous) map = maps.random(); + }else if(!previous.custom && !world.maps.customMaps().isEmpty()){ + map = maps.first(); } Call.onInfoMessage((state.rules.pvp @@ -204,11 +204,11 @@ public class ServerControl implements ApplicationListener{ return; } - RulePreset preset = RulePreset.survival; + Gamemode preset = Gamemode.survival; if(arg.length > 1){ try{ - preset = RulePreset.valueOf(arg[1]); + preset = Gamemode.valueOf(arg[1]); }catch(IllegalArgumentException e){ err("No gamemode '{0}' found.", arg[1]); return; diff --git a/server/src/io/anuke/mindustry/server/ServerLauncher.java b/server/src/io/anuke/mindustry/server/ServerLauncher.java index 63f6e0797e..a6ed80333c 100644 --- a/server/src/io/anuke/mindustry/server/ServerLauncher.java +++ b/server/src/io/anuke/mindustry/server/ServerLauncher.java @@ -4,9 +4,10 @@ package io.anuke.mindustry.server; import io.anuke.arc.ApplicationListener; import io.anuke.arc.backends.headless.HeadlessApplication; import io.anuke.arc.backends.headless.HeadlessApplicationConfiguration; +import io.anuke.mindustry.net.CrashSender; import io.anuke.mindustry.net.Net; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; public class ServerLauncher extends HeadlessApplication{ @@ -17,27 +18,19 @@ public class ServerLauncher extends HeadlessApplication{ public static void main(String[] args){ try{ - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration(); new ServerLauncher(new MindustryServer(args), config); }catch(Throwable t){ - CrashHandler.handle(t); + CrashSender.send(t, f -> {}); } //find and handle uncaught exceptions in libGDX thread for(Thread thread : Thread.getAllStackTraces().keySet()){ if(thread.getName().equals("HeadlessApplication")){ - thread.setUncaughtExceptionHandler((t, throwable) -> { - try{ - CrashHandler.handle(throwable); - System.exit(-1); - }catch(Throwable crashCrash){ - crashCrash.printStackTrace(); - System.exit(-1); - } - }); + thread.setUncaughtExceptionHandler((t, throwable) -> CrashSender.send(throwable, f -> {})); break; } } diff --git a/settings.gradle b/settings.gradle index dd3c19e139..384df3c359 100644 --- a/settings.gradle +++ b/settings.gradle @@ -26,7 +26,7 @@ if(!hasProperty("release")){ use(':Arc:extensions', '../Arc/extensions') use(':Arc:extensions:freetype', '../Arc/extensions/freetype') use(':Arc:extensions:recorder', '../Arc/extensions/recorder') - //use(':Arc:extensions:postprocessing', '../Arc/extensions/postprocessing') + use(':Arc:extensions:arcnet', '../Arc/extensions/arcnet') use(':Arc:backends', '../Arc/backends') use(':Arc:backends:backend-lwjgl3', '../Arc/backends/backend-lwjgl3') use(':Arc:backends:backend-android', '../Arc/backends/backend-android') diff --git a/tests/src/test/java/ZoneTests.java b/tests/src/test/java/ZoneTests.java index 39e9d640e2..dd6f2580b9 100644 --- a/tests/src/test/java/ZoneTests.java +++ b/tests/src/test/java/ZoneTests.java @@ -33,6 +33,7 @@ public class ZoneTests{ for(Zone zone : content.zones()){ out.add(dynamicTest(zone.name, () -> { + zone.generator.init(zone.loadout); logic.reset(); world.loadGenerator(zone.generator); ObjectSet resources = new ObjectSet<>(); diff --git a/tests/src/test/java/power/ItemLiquidGeneratorTests.java b/tests/src/test/java/power/ItemLiquidGeneratorTests.java index 19342611fc..b56e914fd4 100644 --- a/tests/src/test/java/power/ItemLiquidGeneratorTests.java +++ b/tests/src/test/java/power/ItemLiquidGeneratorTests.java @@ -27,7 +27,7 @@ public class ItemLiquidGeneratorTests extends PowerTestFixture{ private ItemLiquidGenerator generator; private Tile tile; private ItemLiquidGenerator.ItemLiquidGeneratorEntity entity; - private final float fakeItemDuration = 60f; // 60 ticks + private final float fakeItemDuration = 60f; //ticks private final float maximumLiquidUsage = 0.5f; public void createGenerator(InputType inputType){ diff --git a/tools/build.gradle b/tools/build.gradle index c161ff6ea1..16781d2917 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -24,14 +24,12 @@ def antialias = { File file -> } def color = new Color() - def color2 = new Color() def sum = new Color() def suma = new Color() for(int x = 0; x < image.getWidth(); x++){ for(int y = 0; y < image.getHeight(); y++){ - int A = - getRGB(x - 1, y + 1), + int A = getRGB(x - 1, y + 1), B = getRGB(x, y + 1), C = getRGB(x + 1, y + 1), D = getRGB(x - 1, y), @@ -88,6 +86,52 @@ def antialias = { File file -> ImageIO.write(out, "png", file) } +def scaleImage = { File file -> + def image = ImageIO.read(file) + for(int iteration in 0..1){ + def scaled = new BufferedImage(image.getWidth() * 2, image.getHeight() * 2, BufferedImage.TYPE_INT_ARGB) + + def getRGB = { int ix, int iy -> + //if(ix <= 0 || iy <= 0 || ix >= image.width || iy >= image.height) return 0 + return image.getRGB(Math.max(Math.min(ix, image.width - 1), 0), Math.max(Math.min(iy, image.height - 1), 0)) + } + + for(int x = 0; x < image.getWidth(); x++){ + for(int y = 0; y < image.getHeight(); y++){ + int p = image.getRGB(x, y) + int p1 = p, p2 = p, p3 = p, p4 = p + + int A = getRGB(x - 1, y + 1), + B = getRGB(x, y + 1), + C = getRGB(x + 1, y + 1), + D = getRGB(x - 1, y), + E = getRGB(x, y), + F = getRGB(x + 1, y), + G = getRGB(x - 1, y - 1), + H = getRGB(x, y - 1), + I = getRGB(x + 1, y - 1), + J = getRGB(x, y + 2), + K = getRGB(x - 2, y), + L = getRGB(x + 2, y), + M = getRGB(x, y - 2) + + if(B == D && B != F && D != H && (E != A || E == C || E == G || A == J || A == K)) p1 = B + if(B == F & B != D & F != H && (E != C || E == A || E == I || C == J || C == L)) p2 = F + if(D == H & B != D & F != H && (E != G || E == A || E == I || G == K || G == M)) p3 = D + if(F == H & B != F & D != H && (E != I || E == C || E == G || I == L || I == M)) p4 = H + + scaled.setRGB(x * 2, y * 2 + 1, p1) + scaled.setRGB(x * 2 + 1, y * 2 + 1, p2) + scaled.setRGB(x * 2, y * 2, p3) + scaled.setRGB(x * 2 + 1, y * 2, p4) + } + } + image = scaled + } + + ImageIO.write(image, "png", file) +} + task swapColors(){ doLast{ if(project.hasProperty("colors")){ @@ -126,49 +170,7 @@ task scaleSprites4x(){ fileTree(dir: '../core/assets-raw/sprites_out/', include: "**/*.png").visit{ file -> if(file.isDirectory() || file.toString().contains("/ui/")) return - for(int iteration in 0..1){ - def image = ImageIO.read(file.file) - def scaled = new BufferedImage(image.getWidth() * 2, image.getHeight() * 2, BufferedImage.TYPE_INT_ARGB) - - def getRGB = { int ix, int iy -> - //if(ix <= 0 || iy <= 0 || ix >= image.width || iy >= image.height) return 0 - return image.getRGB(Math.max(Math.min(ix, image.width - 1), 0), Math.max(Math.min(iy, image.height - 1), 0)) - } - - for(int x = 0; x < image.getWidth(); x++){ - for(int y = 0; y < image.getHeight(); y++){ - int p = image.getRGB(x, y) - int p1 = p, p2 = p, p3 = p, p4 = p - - int A = getRGB(x - 1, y + 1), - B = getRGB(x, y + 1), - C = getRGB(x + 1, y + 1), - D = getRGB(x - 1, y), - E = getRGB(x, y), - F = getRGB(x + 1, y), - G = getRGB(x - 1, y - 1), - H = getRGB(x, y - 1), - I = getRGB(x + 1, y - 1), - J = getRGB(x, y + 2), - K = getRGB(x - 2, y), - L = getRGB(x + 2, y), - M = getRGB(x, y - 2) - - if(B == D && B != F && D != H && (E != A || E == C || E == G || A == J || A == K)) p1 = B - if(B == F & B != D & F != H && (E != C || E == A || E == I || C == J || C == L)) p2 = F - if(D == H & B != D & F != H && (E != G || E == A || E == I || G == K || G == M)) p3 = D - if(F == H & B != F & D != H && (E != I || E == C || E == G || I == L || I == M)) p4 = H - - scaled.setRGB(x * 2, y * 2 + 1, p1) - scaled.setRGB(x * 2 + 1, y * 2 + 1, p2) - scaled.setRGB(x * 2, y * 2, p3) - scaled.setRGB(x * 2 + 1, y * 2, p4) - } - } - - ImageIO.write(scaled, "png", file.file) - } - + scaleImage(file.file) antialias(file.file) } } @@ -187,6 +189,15 @@ task scaleSprites(){ dependsOn 'scaleSprites4x' } +task scaleImages(){ + doLast{ + for(def img : project.getProperty("images").split(",")){ + println(project.getProperty("startdir") + "/" + img) + scaleImage(new File(project.getProperty("startdir") + "/" + img)) + } + } +} + task pack(){ dependsOn 'cleanSprites', 'scaleSprites' //finalizedBy 'cleanup' diff --git a/tools/src/io/anuke/mindustry/Generators.java b/tools/src/io/anuke/mindustry/Generators.java index 0ef8513a3e..c164860d52 100644 --- a/tools/src/io/anuke/mindustry/Generators.java +++ b/tools/src/io/anuke/mindustry/Generators.java @@ -5,6 +5,7 @@ import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; import io.anuke.arc.util.Log; +import io.anuke.arc.util.noise.RidgedPerlin; import io.anuke.mindustry.ImagePacker.GenRegion; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.Block; @@ -23,6 +24,51 @@ public class Generators{ public static void generate(){ + ImagePacker.generate("cracks", () -> { + RidgedPerlin r = new RidgedPerlin(1, 3); + for(int size = 1; size <= Block.maxCrackSize; size++){ + int dim = size * 32; + int steps = Block.crackRegions; + for(int i = 0; i < steps; i++){ + float fract = i / (float)steps; + + Image image = new Image(dim, dim); + for(int x = 0; x < dim; x++){ + for(int y = 0; y < dim; y++){ + float dst = Mathf.dst((float)x/dim, (float)y/dim, 0.5f, 0.5f) * 2f; + if(dst < 1.2f && r.getValue(x, y, 1f / 40f) - dst*(1f-fract) > 0.16f){ + image.draw(x, y, Color.WHITE); + } + } + } + + Image output = new Image(image.width, image.height); + int rad = 3; + + //median filter + for(int x = 0; x < output.width; x++){ + for(int y = 0; y < output.height; y++){ + int whites = 0, clears = 0; + for(int cx = -rad; cx < rad; cx++){ + for(int cy = -rad; cy < rad; cy++){ + int wx = Mathf.clamp(cx + x, 0, output.width - 1), wy = Mathf.clamp(cy + y, 0, output.height - 1); + Color color = image.getColor(wx, wy); + if(color.a > 0.5f){ + whites ++; + }else{ + clears ++; + } + } + } + output.draw(x, y, whites >= clears ? Color.WHITE : Color.CLEAR); + } + } + + output.save("cracks-" + size + "-" + i); + } + } + }); + ImagePacker.generate("block-icons", () -> { Image colors = new Image(256, 1); Color outlineColor = new Color(0, 0, 0, 0.3f); @@ -54,8 +100,8 @@ public class Generators{ GenRegion region = (GenRegion)regions[regions.length - 1]; Image base = ImagePacker.get(region); Image out = last = new Image(region.getWidth(), region.getHeight()); - for(int x = 0; x < out.width(); x++){ - for(int y = 0; y < out.height(); y++){ + for(int x = 0; x < out.width; x++){ + for(int y = 0; y < out.height; y++){ Color color = base.getColor(x, y); out.draw(x, y, color); @@ -105,22 +151,22 @@ public class Generators{ image.save("../editor/" + block.name + "-icon-editor"); for(Icon icon : Icon.values()){ - if(icon.size == 0 || (icon.size == image.width() && icon.size == image.height())) continue; + if(icon.size == 0 || (icon.size == image.width && icon.size == image.height)) continue; Image scaled = new Image(icon.size, icon.size); scaled.drawScaled(image); scaled.save(block.name + "-icon-" + icon.name()); } Color average = new Color(); - for(int x = 0; x < image.width(); x++){ - for(int y = 0; y < image.height(); y++){ + for(int x = 0; x < image.width; x++){ + for(int y = 0; y < image.height; y++){ Color color = image.getColor(x, y); average.r += color.r; average.g += color.g; average.b += color.b; } } - average.mul(1f / (image.width() * image.height())); + average.mul(1f / (image.width * image.height)); if(block instanceof Floor){ average.mul(0.8f); }else{ @@ -142,7 +188,7 @@ public class Generators{ for(Item item : content.items()){ Image base = ImagePacker.get("item-" + item.name); for(Item.Icon icon : Item.Icon.values()){ - if(icon.size == base.width()) continue; + if(icon.size == base.width) continue; Image image = new Image(icon.size, icon.size); image.drawScaled(base); image.save("item-" + item.name + "-" + icon.name(), false); @@ -164,7 +210,7 @@ public class Generators{ image.drawCenter(mech.region); } - int off = image.width() / 2 - mech.weapon.region.getWidth() / 2; + int off = image.width / 2 - mech.weapon.region.getWidth() / 2; image.draw(mech.weapon.region, -(int)mech.weaponOffsetX + off, (int)mech.weaponOffsetY + off, false, false); image.draw(mech.weapon.region, (int)mech.weaponOffsetX + off, (int)mech.weaponOffsetY + off, true, false); @@ -188,8 +234,8 @@ public class Generators{ for(boolean b : Mathf.booleans){ image.draw(type.weapon.region, - (int)(Mathf.sign(b) * type.weapon.width / Draw.scl + image.width() / 2 - type.weapon.region.getWidth() / 2), - (int)(type.weaponOffsetY / Draw.scl + image.height() / 2f - type.weapon.region.getHeight() / 2f), + (int)(Mathf.sign(b) * type.weapon.width / Draw.scl + image.width / 2 - type.weapon.region.getWidth() / 2), + (int)(type.weaponOffsetY / Draw.scl + image.height / 2f - type.weapon.region.getHeight() / 2f), b, false); } @@ -206,10 +252,10 @@ public class Generators{ Image image = new Image(32, 32); Image shadow = ImagePacker.get(item.name + (i + 1)); - int offset = image.width() / tilesize; + int offset = image.width / tilesize; - for(int x = 0; x < image.width(); x++){ - for(int y = offset; y < image.height(); y++){ + for(int x = 0; x < image.width; x++){ + for(int y = offset; y < image.height; y++){ Color color = shadow.getColor(x, y - offset); //draw semi transparent background @@ -245,12 +291,12 @@ public class Generators{ try{ Image image = ImagePacker.get(floor.generateIcons()[0]); - Image edge = ImagePacker.get("edge-stencil-" + floor.edgeStyle); - Image result = new Image(edge.width(), edge.height()); + Image edge = ImagePacker.get("edge-stencil"); + Image result = new Image(edge.width, edge.height); - for(int x = 0; x < edge.width(); x++){ - for(int y = 0; y < edge.height(); y++){ - result.draw(x, y, edge.getColor(x, y).mul(image.getColor(x % image.width(), y % image.height()))); + for(int x = 0; x < edge.width; x++){ + for(int y = 0; y < edge.height; y++){ + result.draw(x, y, edge.getColor(x, y).mul(image.getColor(x % image.width, y % image.height))); } } diff --git a/tools/src/io/anuke/mindustry/Image.java b/tools/src/io/anuke/mindustry/Image.java index 5759f5ba68..30e06b8170 100644 --- a/tools/src/io/anuke/mindustry/Image.java +++ b/tools/src/io/anuke/mindustry/Image.java @@ -19,6 +19,8 @@ class Image{ private Graphics2D graphics; private Color color = new Color(); + public final int width, height; + Image(TextureRegion region){ this(ImagePacker.buf(region)); } @@ -27,6 +29,8 @@ class Image{ this.image = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_ARGB); this.graphics = image.createGraphics(); this.graphics.drawImage(src, 0, 0, null); + this.width = image.getWidth(); + this.height = image.getHeight(); toDispose.add(this); } @@ -35,16 +39,8 @@ class Image{ this(new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB)); } - int width(){ - return image.getWidth(); - } - - int height(){ - return image.getHeight(); - } - boolean isEmpty(int x, int y){ - if(!Structs.inBounds(x, y, width(), height())){ + if(!Structs.inBounds(x, y, width, height)){ return true; } Color color = getColor(x, y); @@ -52,7 +48,7 @@ class Image{ } Color getColor(int x, int y){ - if(!Structs.inBounds(x, y, width(), height())) return color.set(0, 0, 0, 0); + if(!Structs.inBounds(x, y, width, height)) return color.set(0, 0, 0, 0); int i = image.getRGB(x, y); Color.argb8888ToColor(color, i); return color; @@ -70,16 +66,16 @@ class Image{ /** Draws a region at the center. */ void drawCenter(TextureRegion region){ - draw(region, (width() - region.getWidth()) / 2, (height() - region.getHeight()) / 2, false, false); + draw(region, (width - region.getWidth()) / 2, (height - region.getHeight()) / 2, false, false); } /** Draws a region at the center. */ void drawCenter(TextureRegion region, boolean flipx, boolean flipy){ - draw(region, (width() - region.getWidth()) / 2, (height() - region.getHeight()) / 2, flipx, flipy); + draw(region, (width - region.getWidth()) / 2, (height - region.getHeight()) / 2, flipx, flipy); } void drawScaled(Image image){ - graphics.drawImage(image.image.getScaledInstance(width(), height(), java.awt.Image.SCALE_AREA_AVERAGING), 0, 0, width(), height(), null); + graphics.drawImage(image.image.getScaledInstance(width, height, java.awt.Image.SCALE_AREA_AVERAGING), 0, 0, width, height, null); } /** Draws an image at the top left corner. */