diff --git a/android/build.gradle b/android/build.gradle index 65065cca60..b83b64c15a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -42,7 +42,7 @@ task deploy(type: Copy){ } android{ - buildToolsVersion '29.0.2' + buildToolsVersion '29.0.3' compileSdkVersion 29 sourceSets{ main{ diff --git a/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json new file mode 100644 index 0000000000..53a405df99 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/LegsUnitEntity/1.json b/annotations/src/main/resources/revisions/LegsUnitEntity/1.json new file mode 100644 index 0000000000..747fce7f99 --- /dev/null +++ b/annotations/src/main/resources/revisions/LegsUnitEntity/1.json @@ -0,0 +1 @@ +{version:1,fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/MechUnitEntity/0.json b/annotations/src/main/resources/revisions/MechUnitEntity/0.json new file mode 100644 index 0000000000..5250c9eaa5 --- /dev/null +++ b/annotations/src/main/resources/revisions/MechUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/core/assets-raw/sprites/units/cix-cell.png b/core/assets-raw/sprites/units/cix-cell.png new file mode 100644 index 0000000000..0806581f78 Binary files /dev/null and b/core/assets-raw/sprites/units/cix-cell.png differ diff --git a/core/assets-raw/sprites/units/cix-foot.png b/core/assets-raw/sprites/units/cix-foot.png new file mode 100644 index 0000000000..d198d789df Binary files /dev/null and b/core/assets-raw/sprites/units/cix-foot.png differ diff --git a/core/assets-raw/sprites/units/cix-joint.png b/core/assets-raw/sprites/units/cix-joint.png new file mode 100644 index 0000000000..054879457b Binary files /dev/null and b/core/assets-raw/sprites/units/cix-joint.png differ diff --git a/core/assets-raw/sprites/units/cix-leg-base.png b/core/assets-raw/sprites/units/cix-leg-base.png new file mode 100644 index 0000000000..17781d6781 Binary files /dev/null and b/core/assets-raw/sprites/units/cix-leg-base.png differ diff --git a/core/assets-raw/sprites/units/cix-leg.png b/core/assets-raw/sprites/units/cix-leg.png index 1e6e332be5..4857465b32 100644 Binary files a/core/assets-raw/sprites/units/cix-leg.png and b/core/assets-raw/sprites/units/cix-leg.png differ diff --git a/core/assets-raw/sprites/units/cix.png b/core/assets-raw/sprites/units/cix.png index 96f255db16..7996cd3aa4 100644 Binary files a/core/assets-raw/sprites/units/cix.png and b/core/assets-raw/sprites/units/cix.png differ diff --git a/core/assets-raw/sprites/weapons/missiles-mount.png b/core/assets-raw/sprites/weapons/missiles-mount.png new file mode 100644 index 0000000000..3503be2fb7 Binary files /dev/null and b/core/assets-raw/sprites/weapons/missiles-mount.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 3affe791ee..fae7d72647 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -20,49 +20,49 @@ force-projector-top index: -1 mend-projector rotate: false - xy: 1653, 1057 + xy: 1149, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 1719, 1057 + xy: 1215, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender rotate: false - xy: 1271, 39 + xy: 1281, 71 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-top rotate: false - xy: 1271, 5 + xy: 1281, 37 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 1851, 1065 + xy: 1347, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 1917, 1065 + xy: 1083, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 1355, 515 + xy: 1905, 885 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -83,518 +83,518 @@ block-unloader index: -1 bridge-arrow rotate: false - xy: 1594, 841 + xy: 1043, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 1764, 841 + xy: 1043, 83 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 1798, 841 + xy: 1093, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 1594, 807 + xy: 1143, 455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 center rotate: false - xy: 1628, 807 + xy: 1193, 505 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-0 rotate: false - xy: 1513, 1759 + xy: 616, 1241 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-full rotate: false - xy: 1513, 1759 + xy: 616, 1241 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-1 rotate: false - xy: 1628, 1629 + xy: 942, 1244 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-2 rotate: false - xy: 219, 848 + xy: 1875, 1229 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-3 rotate: false - xy: 616, 1241 + xy: 1577, 697 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-0 rotate: false - xy: 1083, 507 + xy: 257, 848 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-1 rotate: false - xy: 1547, 1759 + xy: 1662, 1629 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-2 rotate: false - xy: 1662, 1629 + xy: 1611, 697 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-3 rotate: false - xy: 253, 848 + xy: 616, 1207 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-0 rotate: false - xy: 287, 848 + xy: 1563, 1759 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-1 rotate: false - xy: 1083, 473 + xy: 817, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-2 rotate: false - xy: 1581, 1759 + xy: 817, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-3 rotate: false - xy: 1083, 439 + xy: 817, 20 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-0 rotate: false - xy: 1083, 405 + xy: 1719, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-1 rotate: false - xy: 1083, 371 + xy: 933, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-2 rotate: false - xy: 1083, 337 + xy: 975, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-3 rotate: false - xy: 1083, 303 + xy: 975, 305 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-0 rotate: false - xy: 1083, 269 + xy: 975, 271 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-1 rotate: false - xy: 1083, 235 + xy: 975, 237 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-2 rotate: false - xy: 1083, 201 + xy: 975, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-3 rotate: false - xy: 1083, 167 + xy: 975, 169 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 1397, 803 + xy: 1077, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 1431, 803 + xy: 1077, 91 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 1465, 803 + xy: 1043, 49 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 1499, 803 + xy: 1077, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 1533, 803 + xy: 1127, 413 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 1087, 719 + xy: 1177, 463 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 1091, 685 + xy: 1227, 513 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 1121, 719 + xy: 1277, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 1125, 685 + xy: 1311, 579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 1125, 651 + xy: 1345, 579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 1125, 617 + xy: 1311, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 1125, 583 + xy: 1345, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 1125, 549 + xy: 1277, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 1155, 719 + xy: 1311, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 1159, 685 + xy: 1345, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 1159, 651 + xy: 1581, 561 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 1159, 617 + xy: 1615, 561 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 1159, 583 + xy: 1111, 371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 1159, 549 + xy: 1111, 337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor rotate: false - xy: 1287, 345 + xy: 1769, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-0 rotate: false - xy: 1287, 311 + xy: 1803, 1037 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-1 rotate: false - xy: 1287, 277 + xy: 1769, 969 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-2 rotate: false - xy: 1287, 243 + xy: 1803, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-edge rotate: false - xy: 1287, 209 + xy: 1837, 1037 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-stack rotate: false - xy: 1287, 175 + xy: 1769, 935 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 1363, 685 + xy: 1939, 1021 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 1363, 651 + xy: 1939, 987 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 1363, 617 + xy: 1939, 953 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 1363, 583 + xy: 1939, 919 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 1363, 549 + xy: 1939, 885 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 1389, 515 + xy: 1939, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 1389, 481 + xy: 1939, 817 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 1389, 447 + xy: 1939, 783 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 1389, 413 + xy: 1939, 749 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 1389, 379 + xy: 1973, 1025 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 1389, 345 + xy: 1973, 991 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 1389, 311 + xy: 1973, 957 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 1389, 277 + xy: 1973, 923 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 1389, 243 + xy: 1973, 889 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 1389, 209 + xy: 1973, 855 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 1389, 175 + xy: 1973, 821 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 1389, 141 + xy: 1973, 787 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 1407, 107 + xy: 1973, 753 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 1407, 73 + xy: 2007, 1025 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cross rotate: false - xy: 1151, 209 + xy: 1111, 31 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor rotate: false - xy: 1587, 1103 + xy: 1083, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 inverted-sorter rotate: false - xy: 1185, 277 + xy: 1145, 141 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction rotate: false - xy: 1223, 719 + xy: 1247, 335 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -629,56 +629,56 @@ mass-driver-base index: -1 overflow-gate rotate: false - xy: 1261, 685 + xy: 1735, 1032 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 1287, 515 + xy: 1735, 862 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 1287, 481 + xy: 1735, 828 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 1287, 447 + xy: 1735, 794 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 1287, 413 + xy: 1735, 760 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router rotate: false - xy: 1321, 141 + xy: 1871, 867 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter rotate: false - xy: 1355, 447 + xy: 1905, 817 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 underflow-gate rotate: false - xy: 1393, 719 + xy: 2007, 923 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -713,14 +713,14 @@ blast-drill-top index: -1 drill-top rotate: false - xy: 1653, 1189 + xy: 1017, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-liquid rotate: false - xy: 1653, 1189 + xy: 1017, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -755,21 +755,21 @@ laser-drill-top index: -1 mechanical-drill rotate: false - xy: 1983, 1197 + xy: 1281, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 1917, 1131 + xy: 1017, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 1983, 1131 + xy: 1083, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -804,84 +804,84 @@ oil-extractor-top index: -1 pneumatic-drill rotate: false - xy: 885, 948 + xy: 1281, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 951, 1014 + xy: 1347, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 951, 948 + xy: 1413, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 1941, 933 + xy: 1545, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 853, 882 + xy: 1611, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 919, 882 + xy: 1677, 1197 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 985, 882 + xy: 1743, 1197 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 2011, 1471 + xy: 1125, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 2011, 753 + xy: 1810, 1071 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 1186, 837 + xy: 1377, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 1125, 803 + xy: 1615, 595 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message rotate: false - xy: 1257, 719 + xy: 1281, 3 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -895,189 +895,189 @@ place-arrow index: -1 bridge-conduit rotate: false - xy: 1628, 841 + xy: 1043, 185 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 1662, 841 + xy: 1043, 151 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 1662, 841 + xy: 1043, 151 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 1696, 841 + xy: 1043, 117 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 1730, 841 + xy: 1009, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 1730, 807 + xy: 1445, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 1764, 807 + xy: 1479, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 1798, 807 + xy: 1513, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 1053, 719 + xy: 1547, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 1053, 719 + xy: 1547, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 1053, 719 + xy: 1547, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 1053, 719 + xy: 1547, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 1091, 803 + xy: 1581, 595 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 1159, 803 + xy: 1077, 363 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 1193, 803 + xy: 1077, 329 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 1227, 803 + xy: 1077, 295 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 1261, 803 + xy: 1077, 261 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 1261, 803 + xy: 1077, 261 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 1295, 803 + xy: 1077, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 1329, 803 + xy: 1077, 193 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 1363, 803 + xy: 1077, 159 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 1227, 617 + xy: 1247, 233 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate rotate: false - xy: 1253, 515 + xy: 1247, 131 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate-top rotate: false - xy: 1253, 481 + xy: 1247, 97 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 1253, 447 + xy: 1247, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 1253, 413 + xy: 1247, 29 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 1253, 379 + xy: 1281, 411 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1105,161 +1105,161 @@ liquid-tank-top index: -1 mechanical-pump rotate: false - xy: 1253, 141 + xy: 1281, 173 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump-liquid rotate: false - xy: 1271, 107 + xy: 1281, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-liquid rotate: false - xy: 1271, 107 + xy: 1281, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-liquid rotate: false - xy: 1271, 107 + xy: 1281, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 1261, 651 + xy: 1735, 998 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 1261, 617 + xy: 1735, 964 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 1261, 583 + xy: 1735, 930 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 1261, 549 + xy: 1735, 896 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-cap rotate: false - xy: 1305, 107 + xy: 1837, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-0 rotate: false - xy: 1305, 73 + xy: 1871, 1037 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-1 rotate: false - xy: 1305, 39 + xy: 1769, 901 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-2 rotate: false - xy: 1305, 5 + xy: 1803, 935 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-3 rotate: false - xy: 1291, 719 + xy: 1837, 969 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-4 rotate: false - xy: 1295, 685 + xy: 1871, 1003 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-5 rotate: false - xy: 1295, 651 + xy: 1769, 867 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-6 rotate: false - xy: 1295, 617 + xy: 1803, 901 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 1321, 481 + xy: 1803, 867 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 1321, 447 + xy: 1837, 901 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 1321, 413 + xy: 1871, 935 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 1321, 379 + xy: 1769, 799 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 1321, 345 + xy: 1803, 833 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 1321, 311 + xy: 1837, 867 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 1149, 1037 + xy: 1347, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1273,7 +1273,7 @@ thermal-pump index: -1 battery rotate: false - xy: 1083, 133 + xy: 975, 135 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1294,21 +1294,21 @@ battery-large-top index: -1 battery-top rotate: false - xy: 616, 1207 + xy: 975, 101 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 1662, 807 + xy: 1243, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 1696, 807 + xy: 1411, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1336,28 +1336,28 @@ differential-generator-top index: -1 diode rotate: false - xy: 1151, 175 + xy: 1161, 421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 diode-arrow rotate: false - xy: 1151, 141 + xy: 1211, 471 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator rotate: false - xy: 1185, 379 + xy: 1145, 243 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-top rotate: false - xy: 1185, 345 + xy: 1145, 209 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1413,49 +1413,49 @@ impact-reactor-plasma-3 index: -1 power-node rotate: false - xy: 1295, 583 + xy: 1837, 935 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 1017, 1014 + xy: 1479, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source rotate: false - xy: 1295, 549 + xy: 1871, 969 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void rotate: false - xy: 1321, 515 + xy: 1769, 833 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 1083, 971 + xy: 1413, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 1339, 107 + xy: 1803, 765 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 1355, 481 + xy: 1905, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1469,14 +1469,14 @@ solar-panel-large index: -1 surge-tower rotate: false - xy: 1083, 905 + xy: 1611, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 1281, 905 + xy: 1611, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1504,14 +1504,14 @@ thorium-reactor-lights index: -1 turbine-generator rotate: false - xy: 1743, 925 + xy: 1347, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-top rotate: false - xy: 1809, 933 + xy: 1413, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1546,119 +1546,119 @@ block-launcher index: -1 coal-centrifuge rotate: false - xy: 1440, 1235 + xy: 1911, 1205 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 1059, 1103 + xy: 951, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 1125, 1103 + xy: 951, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 1191, 1103 + xy: 1017, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator rotate: false - xy: 1257, 1103 + xy: 951, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 1323, 1103 + xy: 1017, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 1389, 1103 + xy: 1083, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 graphite-press rotate: false - xy: 1785, 1197 + xy: 951, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 incinerator rotate: false - xy: 1185, 311 + xy: 1145, 175 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source rotate: false - xy: 1219, 311 + xy: 1213, 225 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void rotate: false - xy: 1237, 5 + xy: 1247, 369 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln rotate: false - xy: 1785, 1131 + xy: 1017, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 1851, 1197 + xy: 1083, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 1851, 1197 + xy: 1083, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 liquid-source rotate: false - xy: 1253, 277 + xy: 1281, 309 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-void rotate: false - xy: 1253, 243 + xy: 1281, 275 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter rotate: false - xy: 1271, 73 + xy: 1281, 105 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1672,63 +1672,63 @@ multi-press index: -1 phase-weaver rotate: false - xy: 861, 1080 + xy: 1215, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 927, 1080 + xy: 1281, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 993, 1080 + xy: 1347, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 819, 1014 + xy: 1413, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 819, 948 + xy: 1149, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 1321, 277 + xy: 1871, 901 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 1321, 243 + xy: 1769, 765 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 1017, 948 + xy: 1215, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator rotate: false - xy: 1413, 971 + xy: 1479, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1742,133 +1742,133 @@ separator-liquid index: -1 separator-spinner rotate: false - xy: 1479, 971 + xy: 1413, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 1545, 971 + xy: 1479, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press rotate: false - xy: 1611, 991 + xy: 1545, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame0 rotate: false - xy: 1677, 991 + xy: 1479, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame1 rotate: false - xy: 1743, 991 + xy: 1545, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame2 rotate: false - xy: 1809, 999 + xy: 1545, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-liquid rotate: false - xy: 1875, 999 + xy: 1611, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-top rotate: false - xy: 1941, 999 + xy: 1611, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rock1 rotate: false - xy: 941, 166 + xy: 933, 473 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock2 rotate: false - xy: 941, 116 + xy: 983, 523 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-boulder1 rotate: false - xy: 1339, 73 + xy: 1837, 799 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-boulder2 rotate: false - xy: 1339, 39 + xy: 1871, 833 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder1 rotate: false - xy: 1329, 583 + xy: 1905, 953 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder2 rotate: false - xy: 1329, 549 + xy: 1905, 919 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock1 rotate: false - xy: 991, 666 + xy: 1133, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock2 rotate: false - xy: 991, 616 + xy: 1233, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-cluster1 rotate: false - xy: 1083, 625 + xy: 1451, 689 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster2 rotate: false - xy: 1083, 583 + xy: 1493, 689 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster3 rotate: false - xy: 1083, 541 + xy: 1535, 689 size: 40, 40 orig: 40, 40 offset: 0, 0 @@ -1889,7 +1889,7 @@ white-tree-dead index: -1 container rotate: false - xy: 1572, 1235 + xy: 982, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1938,21 +1938,21 @@ launch-pad-light index: -1 launchpod rotate: false - xy: 844, 1212 + xy: 1911, 1271 size: 66, 64 orig: 66, 64 offset: 0, 0 index: -1 unloader rotate: false - xy: 1397, 685 + xy: 2007, 889 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-center rotate: false - xy: 1397, 651 + xy: 2007, 855 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1966,21 +1966,21 @@ vault index: -1 arc-heat rotate: false - xy: 251, 27 + xy: 1628, 1629 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-1 rotate: false - xy: 1059, 3 + xy: 1025, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-2 rotate: false - xy: 912, 1212 + xy: 1983, 1303 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2001,14 +2001,14 @@ block-4 index: -1 hail-heat rotate: false - xy: 2007, 1023 + xy: 1033, 431 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 1917, 1197 + xy: 1215, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2029,35 +2029,35 @@ ripple-heat index: -1 salvo-heat rotate: false - xy: 1149, 971 + xy: 1545, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 1281, 1037 + xy: 1281, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 1215, 971 + xy: 1347, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-heat rotate: false - xy: 1325, 719 + xy: 1871, 799 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 919, 816 + xy: 1809, 1197 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2085,21 +2085,21 @@ block-forge index: -1 command-center rotate: false - xy: 1506, 1235 + xy: 1977, 1171 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory rotate: false - xy: 1455, 1103 + xy: 951, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dagger-factory-top rotate: false - xy: 1521, 1103 + xy: 1017, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2141,14 +2141,14 @@ naval-factory index: -1 rally-point rotate: false - xy: 1083, 1037 + xy: 1281, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-base rotate: false - xy: 1321, 175 + xy: 1837, 833 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2169,70 +2169,70 @@ revenant-factory-top index: -1 copper-wall rotate: false - xy: 1151, 515 + xy: 1111, 303 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 1059, 1169 + xy: 1048, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door rotate: false - xy: 1185, 515 + xy: 1145, 379 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large rotate: false - xy: 721, 838 + xy: 1149, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 787, 838 + xy: 951, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-open rotate: false - xy: 1185, 481 + xy: 1145, 345 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 1287, 379 + xy: 1769, 1037 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 1983, 1065 + xy: 1149, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-wall rotate: false - xy: 1287, 141 + xy: 1803, 969 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large rotate: false - xy: 885, 1014 + xy: 1215, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2260,84 +2260,84 @@ scrap-wall-huge3 index: -1 scrap-wall-large1 rotate: false - xy: 1281, 971 + xy: 1479, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 1413, 1037 + xy: 1545, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 1347, 971 + xy: 1347, 839 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 1479, 1037 + xy: 1413, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall2 rotate: false - xy: 1329, 685 + xy: 1871, 765 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall3 rotate: false - xy: 1329, 651 + xy: 1905, 1021 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall4 rotate: false - xy: 1329, 617 + xy: 1905, 987 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall5 rotate: false - xy: 1329, 617 + xy: 1905, 987 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 1373, 5 + xy: 1923, 715 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 1149, 905 + xy: 1611, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 1359, 719 + xy: 1923, 681 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 1347, 905 + xy: 951, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2351,35 +2351,35 @@ thruster index: -1 titanium-wall rotate: false - xy: 1407, 39 + xy: 2007, 991 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large rotate: false - xy: 1677, 925 + xy: 1281, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 bullet rotate: false - xy: 841, 704 + xy: 1975, 1059 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 899, 762 + xy: 771, 784 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 casing rotate: false - xy: 1983, 1351 + xy: 409, 792 size: 8, 16 orig: 8, 16 offset: 0, 0 @@ -2407,112 +2407,112 @@ circle-shadow index: -1 error rotate: false - xy: 1761, 875 + xy: 833, 488 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser rotate: false - xy: 2043, 1319 + xy: 650, 1225 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 laser-end rotate: false - xy: 1845, 1263 + xy: 1689, 1263 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 minelaser rotate: false - xy: 650, 1225 + xy: 2043, 1187 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 1919, 1263 + xy: 1763, 1263 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 missile rotate: false - xy: 2011, 901 + xy: 2011, 1501 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 missile-back rotate: false - xy: 2011, 863 + xy: 2011, 1463 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 particle rotate: false - xy: 1059, 37 + xy: 1409, 689 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 scale_marker rotate: false - xy: 770, 1198 + xy: 1977, 1533 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 shell rotate: false - xy: 2011, 825 + xy: 1642, 1263 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shell-back rotate: false - xy: 2011, 787 + xy: 219, 844 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 transfer rotate: false - xy: 2043, 1269 + xy: 1405, 563 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 1407, 5 + xy: 2007, 957 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white rotate: false - xy: 848, 1604 + xy: 1742, 1066 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 arc rotate: false - xy: 819, 914 + xy: 783, 92 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-arc-full rotate: false - xy: 2011, 1505 + xy: 1075, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2526,56 +2526,56 @@ block-blast-drill-full index: -1 block-char-full rotate: false - xy: 2011, 1437 + xy: 1175, 539 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cliffs-full rotate: false - xy: 1117, 507 + xy: 1225, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-conduit-full rotate: false - xy: 1117, 473 + xy: 1275, 639 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-conveyor-full rotate: false - xy: 1117, 439 + xy: 1309, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 1117, 439 + xy: 1309, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-craters-full rotate: false - xy: 1117, 405 + xy: 1343, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cryofluidmixer-full rotate: false - xy: 795, 1138 + xy: 1977, 1597 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-cultivator-full rotate: false - xy: 861, 1146 + xy: 751, 26 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2589,28 +2589,28 @@ block-cyclone-full index: -1 block-dark-metal-full rotate: false - xy: 1117, 371 + xy: 1377, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-full rotate: false - xy: 1117, 337 + xy: 1411, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dunerocks-full rotate: false - xy: 1117, 303 + xy: 1445, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-duo-full rotate: false - xy: 1117, 269 + xy: 1479, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2624,56 +2624,56 @@ block-fuse-full index: -1 block-grass-full rotate: false - xy: 1117, 235 + xy: 1513, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hail-full rotate: false - xy: 1117, 201 + xy: 1547, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-holostone-full rotate: false - xy: 1117, 167 + xy: 1581, 663 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hotrock-full rotate: false - xy: 1117, 133 + xy: 1615, 663 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-full rotate: false - xy: 1101, 99 + xy: 1743, 1105 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-snow-full rotate: false - xy: 1101, 65 + xy: 1777, 1105 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icerocks-full rotate: false - xy: 1101, 31 + xy: 1811, 1105 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ignarock-full rotate: false - xy: 1135, 99 + xy: 1845, 1105 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2687,7 +2687,7 @@ block-impact-reactor-full index: -1 block-lancer-full rotate: false - xy: 927, 1146 + xy: 819, 1064 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2701,7 +2701,7 @@ block-laser-drill-full index: -1 block-liquid-router-full rotate: false - xy: 1135, 65 + xy: 1879, 1105 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2715,7 +2715,7 @@ block-liquid-tank-full index: -1 block-magmarock-full rotate: false - xy: 1135, 31 + xy: 1742, 1071 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2743,7 +2743,7 @@ block-mass-driver-full index: -1 block-mechanical-drill-full rotate: false - xy: 1977, 1597 + xy: 819, 998 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2757,14 +2757,14 @@ block-meltdown-full index: -1 block-metal-floor-damaged-full rotate: false - xy: 895, 724 + xy: 1776, 1071 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-moss-full rotate: false - xy: 1050, 848 + xy: 1844, 1071 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2778,91 +2778,91 @@ block-oil-extractor-full index: -1 block-ore-coal-full rotate: false - xy: 1084, 871 + xy: 1878, 1071 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-copper-full rotate: false - xy: 1118, 871 + xy: 1912, 1055 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-lead-full rotate: false - xy: 1152, 871 + xy: 1719, 686 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-scrap-full rotate: false - xy: 1186, 871 + xy: 1009, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-thorium-full rotate: false - xy: 1220, 871 + xy: 1009, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-titanium-full rotate: false - xy: 1254, 871 + xy: 1009, 279 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pebbles-full rotate: false - xy: 1288, 871 + xy: 1009, 245 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-weaver-full rotate: false - xy: 743, 26 + xy: 819, 932 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-plated-conduit-full rotate: false - xy: 1322, 871 + xy: 1009, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pneumatic-drill-full rotate: false - xy: 978, 1212 + xy: 885, 1076 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-pulse-conduit-full rotate: false - xy: 1356, 871 + xy: 1009, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulverizer-full rotate: false - xy: 1390, 871 + xy: 1009, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-repair-point-full rotate: false - xy: 1424, 871 + xy: 1009, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2876,77 +2876,77 @@ block-ripple-full index: -1 block-rock-full rotate: false - xy: 841, 446 + xy: 783, 526 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-rocks-full rotate: false - xy: 1458, 871 + xy: 1059, 397 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-saltrocks-full rotate: false - xy: 1492, 871 + xy: 1109, 447 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salvo-full rotate: false - xy: 993, 1146 + xy: 885, 1010 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-sand-boulder-full rotate: false - xy: 1526, 871 + xy: 1159, 497 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-full rotate: false - xy: 1560, 871 + xy: 1209, 547 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sandrocks-full rotate: false - xy: 1084, 837 + xy: 1259, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scatter-full rotate: false - xy: 1044, 1235 + xy: 885, 944 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-scorch-full rotate: false - xy: 1118, 837 + xy: 1309, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-full rotate: false - xy: 1152, 837 + xy: 1343, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall1 rotate: false - xy: 1152, 837 + xy: 1343, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2967,56 +2967,56 @@ scrap-wall-huge1 index: -1 block-scrap-wall-large-full rotate: false - xy: 1110, 1235 + xy: 1979, 1237 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-shale-boulder-full rotate: false - xy: 1220, 837 + xy: 1411, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-full rotate: false - xy: 1254, 837 + xy: 1445, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shalerocks-full rotate: false - xy: 1288, 837 + xy: 1479, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shrubs-full rotate: false - xy: 1322, 837 + xy: 1513, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-full rotate: false - xy: 1356, 837 + xy: 1547, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snowrock-full rotate: false - xy: 841, 396 + xy: 783, 476 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snowrocks-full rotate: false - xy: 1390, 837 + xy: 1581, 629 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3030,189 +3030,189 @@ block-spectre-full index: -1 block-spore-cluster-full rotate: false - xy: 1611, 1061 + xy: 933, 331 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-moss-full rotate: false - xy: 1424, 837 + xy: 1615, 629 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-press-full rotate: false - xy: 1176, 1235 + xy: 819, 866 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-sporerocks-full rotate: false - xy: 1458, 837 + xy: 1043, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-stone-full rotate: false - xy: 1492, 837 + xy: 1043, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-swarmer-full rotate: false - xy: 1242, 1235 + xy: 885, 878 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-tendrils-full rotate: false - xy: 1526, 837 + xy: 1043, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-titanium-conveyor-full rotate: false - xy: 1560, 837 + xy: 1043, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 1560, 837 + xy: 1043, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-water-extractor-full rotate: false - xy: 1308, 1235 + xy: 721, 838 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-wave-full rotate: false - xy: 1374, 1235 + xy: 885, 812 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-1-0 rotate: false - xy: 1151, 481 + xy: 1111, 269 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-1 rotate: false - xy: 1151, 447 + xy: 1111, 235 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-2 rotate: false - xy: 1151, 413 + xy: 1111, 201 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-3 rotate: false - xy: 1151, 379 + xy: 1111, 167 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-4 rotate: false - xy: 1151, 345 + xy: 1111, 133 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-5 rotate: false - xy: 1151, 311 + xy: 1111, 99 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-6 rotate: false - xy: 1151, 277 + xy: 1111, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-7 rotate: false - xy: 1151, 243 + xy: 1077, 23 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-2-0 rotate: false - xy: 1125, 1169 + xy: 1114, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-1 rotate: false - xy: 1191, 1169 + xy: 1180, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-2 rotate: false - xy: 1257, 1169 + xy: 1246, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-3 rotate: false - xy: 1323, 1169 + xy: 1312, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-4 rotate: false - xy: 1389, 1169 + xy: 1378, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-5 rotate: false - xy: 1455, 1169 + xy: 1444, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-6 rotate: false - xy: 1521, 1169 + xy: 1510, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-7 rotate: false - xy: 1587, 1169 + xy: 1576, 1235 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -3394,7 +3394,7 @@ cyclone index: -1 duo rotate: false - xy: 1185, 447 + xy: 1145, 311 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3408,714 +3408,714 @@ fuse index: -1 hail rotate: false - xy: 1185, 413 + xy: 1145, 277 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-blast-compound-large rotate: false - xy: 2007, 981 + xy: 1083, 481 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-blast-compound-medium rotate: false - xy: 1185, 209 + xy: 1145, 73 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-blast-compound-small rotate: false - xy: 251, 1 + xy: 787, 878 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-blast-compound-tiny rotate: false - xy: 1091, 667 + xy: 267, 43 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-blast-compound-xlarge rotate: false - xy: 1993, 1319 + xy: 833, 222 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-coal-large rotate: false - xy: 2007, 939 + xy: 1133, 531 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-coal-medium rotate: false - xy: 1185, 141 + xy: 1195, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal-small rotate: false - xy: 783, 94 + xy: 837, 840 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-coal-tiny rotate: false - xy: 786, 1424 + xy: 933, 794 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-coal-xlarge rotate: false - xy: 1993, 1269 + xy: 833, 172 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-copper-large rotate: false - xy: 819, 1096 + xy: 1183, 581 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-copper-medium rotate: false - xy: 1169, 73 + xy: 1179, 387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper-small rotate: false - xy: 1689, 1471 + xy: 2011, 1437 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-copper-tiny rotate: false - xy: 937, 1479 + xy: 933, 776 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-copper-xlarge rotate: false - xy: 1861, 833 + xy: 833, 122 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-graphite-large rotate: false - xy: 1638, 1259 + xy: 1233, 631 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-graphite-medium rotate: false - xy: 1203, 107 + xy: 1179, 319 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite-small rotate: false - xy: 1051, 922 + xy: 1642, 1237 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-graphite-tiny rotate: false - xy: 391, 792 + xy: 267, 25 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-graphite-xlarge rotate: false - xy: 1911, 825 + xy: 883, 762 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-lead-large rotate: false - xy: 1041, 625 + xy: 1283, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-lead-medium rotate: false - xy: 1203, 39 + xy: 1179, 251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead-small rotate: false - xy: 1050, 822 + xy: 1875, 1203 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-lead-tiny rotate: false - xy: 982, 1358 + xy: 848, 1609 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-lead-xlarge rotate: false - xy: 1961, 833 + xy: 883, 712 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-metaglass-large rotate: false - xy: 1041, 583 + xy: 1383, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-metaglass-medium rotate: false - xy: 1203, 5 + xy: 1179, 183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass-small rotate: false - xy: 1832, 849 + xy: 291, 856 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-metaglass-tiny rotate: false - xy: 1059, 1085 + xy: 786, 1424 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-metaglass-xlarge rotate: false - xy: 809, 46 + xy: 883, 662 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-phase-fabric-large rotate: false - xy: 1041, 541 + xy: 933, 289 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-phase-fabric-medium rotate: false - xy: 1193, 685 + xy: 1179, 115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric-small rotate: false - xy: 1567, 811 + xy: 1597, 1767 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-phase-fabric-tiny rotate: false - xy: 898, 1609 + xy: 937, 1479 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-phase-fabric-xlarge rotate: false - xy: 859, 46 + xy: 883, 612 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-plastanium-large rotate: false - xy: 1041, 499 + xy: 1325, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-plastanium-medium rotate: false - xy: 1193, 617 + xy: 1179, 47 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium-small rotate: false - xy: 1397, 625 + xy: 851, 96 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-plastanium-tiny rotate: false - xy: 795, 1120 + xy: 391, 792 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-plastanium-xlarge rotate: false - xy: 1961, 783 + xy: 883, 562 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-pyratite-large rotate: false - xy: 1041, 457 + xy: 1425, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-pyratite-medium rotate: false - xy: 1193, 549 + xy: 1179, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite-small rotate: false - xy: 1689, 1445 + xy: 1645, 705 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-pyratite-tiny rotate: false - xy: 481, 8 + xy: 795, 1112 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-pyratite-xlarge rotate: false - xy: 953, 716 + xy: 883, 512 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-sand-large rotate: false - xy: 1041, 415 + xy: 933, 247 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-sand-medium rotate: false - xy: 1219, 481 + xy: 1213, 395 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand-small rotate: false - xy: 1051, 896 + xy: 1379, 587 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-sand-tiny rotate: false - xy: 1696, 1645 + xy: 982, 1358 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-sand-xlarge rotate: false - xy: 1003, 717 + xy: 883, 462 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-scrap-large rotate: false - xy: 1041, 373 + xy: 1467, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-scrap-medium rotate: false - xy: 1219, 413 + xy: 1213, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap-small rotate: false - xy: 1832, 823 + xy: 1379, 561 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-scrap-tiny rotate: false - xy: 1696, 1627 + xy: 1696, 1645 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-scrap-xlarge rotate: false - xy: 891, 654 + xy: 883, 412 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-silicon-large rotate: false - xy: 1041, 331 + xy: 933, 205 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-silicon-medium rotate: false - xy: 1219, 345 + xy: 1213, 259 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon-small rotate: false - xy: 1397, 599 + xy: 1379, 535 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-silicon-tiny rotate: false - xy: 895, 706 + xy: 1696, 1627 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-silicon-xlarge rotate: false - xy: 891, 604 + xy: 883, 362 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-spore-pod-large rotate: false - xy: 1041, 289 + xy: 1509, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-spore-pod-medium rotate: false - xy: 1219, 243 + xy: 1213, 157 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod-small rotate: false - xy: 1397, 573 + xy: 1946, 1063 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-tiny rotate: false - xy: 809, 102 + xy: 481, 8 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-spore-pod-xlarge rotate: false - xy: 891, 554 + xy: 883, 312 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-surge-alloy-large rotate: false - xy: 1041, 247 + xy: 933, 163 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-surge-alloy-medium rotate: false - xy: 1219, 175 + xy: 1213, 89 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy-small rotate: false - xy: 293, 822 + xy: 2007, 829 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-surge-alloy-tiny rotate: false - xy: 1397, 555 + xy: 863, 848 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-surge-alloy-xlarge rotate: false - xy: 891, 504 + xy: 883, 262 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-thorium-large rotate: false - xy: 1041, 205 + xy: 1551, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-thorium-medium rotate: false - xy: 1237, 107 + xy: 1213, 21 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium-small rotate: false - xy: 1093, 5 + xy: 1689, 1443 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-thorium-tiny rotate: false - xy: 1145, 13 + xy: 851, 26 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-thorium-xlarge rotate: false - xy: 891, 454 + xy: 883, 212 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-titanium-large rotate: false - xy: 1041, 163 + xy: 933, 121 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-titanium-medium rotate: false - xy: 1237, 39 + xy: 1247, 403 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium-small rotate: false - xy: 1119, 5 + xy: 851, 70 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-titanium-tiny rotate: false - xy: 1884, 815 + xy: 2007, 759 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-titanium-xlarge rotate: false - xy: 891, 404 + xy: 883, 162 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lancer rotate: false - xy: 1851, 1131 + xy: 1149, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 liquid-cryofluid-large rotate: false - xy: 1041, 121 + xy: 1593, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-cryofluid-medium rotate: false - xy: 1227, 651 + xy: 1247, 267 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid-small rotate: false - xy: 1053, 796 + xy: 2007, 803 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-cryofluid-tiny rotate: false - xy: 786, 1406 + xy: 267, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-cryofluid-xlarge rotate: false - xy: 891, 104 + xy: 933, 623 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-oil-large rotate: false - xy: 809, 4 + xy: 1635, 731 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-oil-medium rotate: false - xy: 1227, 549 + xy: 1247, 165 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil-small rotate: false - xy: 1053, 770 + xy: 851, 44 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-oil-tiny rotate: false - xy: 955, 1479 + xy: 285, 8 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-oil-xlarge rotate: false - xy: 941, 666 + xy: 983, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-slag-large rotate: false - xy: 851, 4 + xy: 1677, 712 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-slag-medium rotate: false - xy: 1253, 311 + xy: 1281, 343 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag-small rotate: false - xy: 1832, 797 + xy: 2007, 777 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-slag-tiny rotate: false - xy: 982, 1340 + xy: 866, 1609 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-slag-xlarge rotate: false - xy: 941, 616 + xy: 1083, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-water-large rotate: false - xy: 1059, 79 + xy: 1367, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-water-medium rotate: false - xy: 1253, 175 + xy: 1281, 207 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water-small rotate: false - xy: 1858, 807 + xy: 1379, 509 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-water-tiny rotate: false - xy: 916, 1609 + xy: 786, 1406 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-water-xlarge rotate: false - xy: 941, 566 + xy: 933, 573 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4136,7 +4136,7 @@ meltdown index: -1 repair-point rotate: false - xy: 1321, 209 + xy: 1803, 799 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4150,21 +4150,21 @@ ripple index: -1 salvo rotate: false - xy: 1215, 1037 + xy: 1479, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter rotate: false - xy: 1347, 1037 + xy: 1413, 971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch rotate: false - xy: 1339, 5 + xy: 1837, 765 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4178,133 +4178,133 @@ spectre index: -1 splash-0 rotate: false - xy: 1355, 413 + xy: 1905, 783 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-1 rotate: false - xy: 1355, 379 + xy: 1905, 749 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-10 rotate: false - xy: 1373, 73 + xy: 1889, 715 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-11 rotate: false - xy: 1373, 39 + xy: 1889, 681 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-2 rotate: false - xy: 1355, 345 + xy: 1753, 726 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-3 rotate: false - xy: 1355, 311 + xy: 1753, 692 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-4 rotate: false - xy: 1355, 277 + xy: 1787, 731 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-5 rotate: false - xy: 1355, 243 + xy: 1787, 697 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-6 rotate: false - xy: 1355, 209 + xy: 1821, 731 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-7 rotate: false - xy: 1355, 175 + xy: 1821, 697 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-8 rotate: false - xy: 1355, 141 + xy: 1855, 731 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-9 rotate: false - xy: 1373, 107 + xy: 1855, 697 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer rotate: false - xy: 1215, 905 + xy: 1611, 905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-alpha-full rotate: false - xy: 991, 366 + xy: 1133, 623 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-cix-full rotate: false - xy: 481, 26 + xy: 661, 26 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 unit-crawler-full rotate: false - xy: 991, 316 + xy: 1183, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-dagger-full rotate: false - xy: 991, 266 + xy: 1283, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-draug-full rotate: false - xy: 991, 216 + xy: 933, 373 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-eruptor-full rotate: false - xy: 571, 26 + xy: 770, 1212 size: 88, 64 orig: 88, 64 offset: 0, 0 @@ -4318,7 +4318,7 @@ unit-fortress-full index: -1 unit-ghoul-full rotate: false - xy: 770, 1204 + xy: 1837, 1263 size: 72, 72 orig: 72, 72 offset: 0, 0 @@ -4332,7 +4332,7 @@ unit-oculon-full index: -1 unit-phantom-full rotate: false - xy: 713, 780 + xy: 1975, 1113 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -4346,189 +4346,189 @@ unit-reaper-full index: -1 unit-spirit-full rotate: false - xy: 991, 166 + xy: 983, 423 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-tau-full rotate: false - xy: 841, 758 + xy: 1917, 1089 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 unit-titan-full rotate: false - xy: 1875, 933 + xy: 1479, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-vanguard-full rotate: false - xy: 991, 116 + xy: 1033, 473 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-wraith-full rotate: false - xy: 1009, 66 + xy: 1083, 523 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wave rotate: false - xy: 853, 816 + xy: 1677, 1131 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 1185, 243 + xy: 1145, 107 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal rotate: false - xy: 1185, 175 + xy: 1145, 39 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper rotate: false - xy: 1169, 107 + xy: 1245, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite rotate: false - xy: 1169, 39 + xy: 1179, 353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead rotate: false - xy: 1203, 73 + xy: 1179, 285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass rotate: false - xy: 1169, 5 + xy: 1179, 217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 1189, 719 + xy: 1179, 149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 1193, 651 + xy: 1179, 81 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 1193, 583 + xy: 1145, 5 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand rotate: false - xy: 1219, 515 + xy: 1229, 437 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap rotate: false - xy: 1219, 447 + xy: 1213, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 1219, 379 + xy: 1213, 293 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod rotate: false - xy: 1219, 277 + xy: 1213, 191 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 1219, 209 + xy: 1213, 123 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 1219, 141 + xy: 1213, 55 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 1237, 73 + xy: 1263, 445 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid rotate: false - xy: 1227, 685 + xy: 1247, 301 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil rotate: false - xy: 1227, 583 + xy: 1247, 199 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag rotate: false - xy: 1253, 345 + xy: 1281, 377 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water rotate: false - xy: 1253, 209 + xy: 1281, 241 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blank rotate: false - xy: 1050, 819 + xy: 219, 841 size: 1, 1 orig: 1, 1 offset: 0, 0 @@ -4542,21 +4542,21 @@ circle index: -1 shape-3 rotate: false - xy: 985, 817 + xy: 1677, 1066 size: 63, 63 orig: 63, 63 offset: 0, 0 index: -1 alpha rotate: false - xy: 841, 654 + xy: 783, 734 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-cell rotate: false - xy: 841, 604 + xy: 783, 684 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4596,107 +4596,128 @@ cix orig: 88, 64 offset: 0, 0 index: -1 -eruptor +cix-cell rotate: false - xy: 1, 1 + xy: 526, 1209 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 +cix-foot + rotate: false + xy: 983, 381 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +cix-joint + rotate: false + xy: 1689, 1469 + size: 26, 26 + orig: 26, 26 + offset: 0, 0 + index: -1 cix-leg rotate: false - xy: 848, 1609 - size: 48, 16 - orig: 48, 16 + xy: 787, 838 + size: 48, 26 + orig: 48, 26 + offset: 0, 0 + index: -1 +cix-leg-base + rotate: false + xy: 1513, 1765 + size: 48, 26 + orig: 48, 26 offset: 0, 0 index: -1 crawler rotate: false - xy: 841, 346 + xy: 783, 426 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-base rotate: false - xy: 841, 296 + xy: 783, 376 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-cell rotate: false - xy: 841, 246 + xy: 783, 326 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-leg rotate: false - xy: 841, 196 + xy: 783, 276 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger rotate: false - xy: 841, 146 + xy: 783, 226 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 151, 11 + xy: 783, 176 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 201, 11 + xy: 783, 126 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta rotate: false - xy: 953, 766 + xy: 825, 788 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-base rotate: false - xy: 1003, 767 + xy: 833, 738 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-cell rotate: false - xy: 841, 96 + xy: 833, 688 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-leg rotate: false - xy: 1611, 875 + xy: 833, 638 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 draug rotate: false - xy: 1661, 875 + xy: 833, 588 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 draug-cell rotate: false - xy: 1711, 875 + xy: 833, 538 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4729,23 +4750,30 @@ eradicator-leg orig: 152, 124 offset: 0, 0 index: -1 +eruptor + rotate: false + xy: 481, 26 + size: 88, 64 + orig: 88, 64 + offset: 0, 0 + index: -1 eruptor-base rotate: false - xy: 1653, 1123 + xy: 1083, 1037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-cell rotate: false - xy: 526, 1209 + xy: 571, 26 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 eruptor-leg rotate: false - xy: 1719, 1189 + xy: 1149, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4759,7 +4787,7 @@ fortress index: -1 fortress-base rotate: false - xy: 1719, 1123 + xy: 1215, 1169 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4773,7 +4801,7 @@ fortress-cell index: -1 fortress-leg rotate: false - xy: 661, 30 + xy: 860, 1216 size: 80, 60 orig: 80, 60 offset: 0, 0 @@ -4787,7 +4815,7 @@ ghoul index: -1 ghoul-cell rotate: false - xy: 1771, 1263 + xy: 877, 1142 size: 72, 72 orig: 72, 72 offset: 0, 0 @@ -4801,28 +4829,28 @@ glaive index: -1 glaive-cell rotate: false - xy: 783, 642 + xy: 1743, 1139 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 javelin rotate: false - xy: 891, 354 + xy: 883, 112 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-cell rotate: false - xy: 891, 304 + xy: 933, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-shield rotate: false - xy: 891, 254 + xy: 983, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -4850,77 +4878,77 @@ oculon index: -1 oculon-base rotate: false - xy: 941, 416 + xy: 933, 523 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 oculon-cell rotate: false - xy: 941, 366 + xy: 983, 573 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 oculon-leg rotate: false - xy: 941, 316 + xy: 1033, 623 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega rotate: false - xy: 1689, 1255 + xy: 795, 1130 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 omega-armor rotate: false - xy: 1785, 1065 + xy: 1281, 1103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 omega-base rotate: false - xy: 783, 584 + xy: 1677, 870 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 omega-cell rotate: false - xy: 783, 526 + xy: 1801, 1139 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 omega-leg rotate: false - xy: 783, 468 + xy: 1677, 812 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 phantom rotate: false - xy: 783, 410 + xy: 713, 780 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 phantom-cell rotate: false - xy: 783, 352 + xy: 151, 3 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 power-cell rotate: false - xy: 783, 294 + xy: 209, 3 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -4955,70 +4983,70 @@ revenant-cell index: -1 spirit rotate: false - xy: 991, 566 + xy: 933, 423 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spirit-cell rotate: false - xy: 991, 516 + xy: 983, 473 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau rotate: false - xy: 783, 236 + xy: 1677, 754 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-base rotate: false - xy: 991, 466 + xy: 1033, 523 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-cell rotate: false - xy: 783, 178 + xy: 1859, 1139 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-leg rotate: false - xy: 991, 416 + xy: 1083, 573 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan rotate: false - xy: 1413, 905 + xy: 1017, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-base rotate: false - xy: 1479, 905 + xy: 1083, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-cell rotate: false - xy: 1545, 905 + xy: 1149, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 1611, 925 + xy: 1215, 773 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -5032,49 +5060,49 @@ trident index: -1 trident-cell rotate: false - xy: 783, 120 + xy: 1917, 1147 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 vanguard rotate: false - xy: 959, 16 + xy: 1133, 573 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vanguard-cell rotate: false - xy: 1009, 16 + xy: 1183, 623 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wraith rotate: false - xy: 1041, 667 + xy: 1333, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 artillery rotate: false - xy: 841, 546 + xy: 783, 626 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 beam-weapon rotate: false - xy: 841, 496 + xy: 783, 576 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 chaos rotate: false - xy: 783, 700 + xy: 1677, 928 size: 56, 136 orig: 56, 136 offset: 0, 0 @@ -5088,91 +5116,98 @@ eradication index: -1 eruption rotate: false - xy: 1811, 875 + xy: 833, 430 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flakgun rotate: false - xy: 1861, 883 + xy: 833, 380 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flamethrower rotate: false - xy: 1911, 875 + xy: 833, 322 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 heal-weapon rotate: false - xy: 1961, 883 + xy: 833, 272 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 large-weapon rotate: false - xy: 891, 204 + xy: 933, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lich-missiles rotate: false - xy: 891, 154 + xy: 1033, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles rotate: false - xy: 941, 516 + xy: 983, 623 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +missiles-mount + rotate: false + xy: 1033, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-weapon rotate: false - xy: 941, 466 + xy: 1133, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 reaper-weapon rotate: false - xy: 941, 266 + xy: 1083, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-missiles rotate: false - xy: 941, 216 + xy: 1183, 723 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-basic-weapon rotate: false - xy: 909, 54 + xy: 1033, 573 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-weapon rotate: false - xy: 959, 66 + xy: 1083, 623 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 weapon rotate: false - xy: 909, 4 + xy: 1233, 673 size: 48, 48 orig: 48, 48 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index af37d7929a..e7a24def83 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 2d4c27988d..90f6d3c60e 100644 Binary files a/core/assets/sprites/sprites2.png and b/core/assets/sprites/sprites2.png differ diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index e441943900..1a5b6621da 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -218,6 +218,13 @@ public class Fx{ }); }).ground(), + unitLandSmall = new Effect(30, e -> { + color(Tmp.c1.set(e.color).mul(1.1f)); + randLenVectors(e.id, 6, 12f * e.finpow(), (x, y) -> { + Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.1f); + }); + }).ground(), + unitPickup = new Effect(18, e -> { color(Pal.lightishGray); stroke(e.fin() * 2f); diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index a0d54fc49d..314c8b0666 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -280,50 +280,6 @@ public class TechTree implements ContentList{ }); }); }); - - /* - node(draugFactory, () -> { - node(spiritFactory, () -> { - node(phantomFactory); - }); - - node(daggerFactory, () -> { - node(commandCenter, () -> {}); - node(crawlerFactory, () -> { - node(titanFactory, () -> { - node(fortressFactory, () -> { - - }); - }); - }); - - node(wraithFactory, () -> { - node(ghoulFactory, () -> { - node(revenantFactory, () -> { - - }); - }); - }); - }); - }); - - /* - node(dartPad, () -> { - node(deltaPad, () -> { - - node(javelinPad, () -> { - node(tridentPad, () -> { - node(glaivePad); - }); - }); - - node(tauPad, () -> { - node(omegaPad, () -> { - - }); - }); - }); - });*/ }); }); }); @@ -367,8 +323,7 @@ public class TechTree implements ContentList{ /** Extra objectives needed to research this. TODO implement */ public Objective[] objectives = {}; /** Turns required to research this content. */ - //TODO keep track of turns that have been used so far - public int turns = 1; + public int turns = 3; //TODO keep track of turns that have been used so far /** Nodes that depend on this node. */ public final Array children = new Array<>(); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 6f2fed2344..fff131aae3 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1,6 +1,7 @@ package mindustry.content; import arc.graphics.*; +import arc.math.*; import arc.struct.*; import mindustry.annotations.Annotations.*; import mindustry.ctype.*; @@ -71,10 +72,24 @@ public class UnitTypes implements ContentList{ cix = new UnitType("cix"){{ drag = 0.1f; speed = 0.8f; - hitsize = 8f; - health = 130; + hitsize = 9f; + health = 140; legCount = 6; + rotateShooting = false; + + for(boolean b : Mathf.booleans){ + weapons.add( + new Weapon("missiles-mount"){{ + reload = 20f; + x = 4f * Mathf.sign(b); + rotate = true; + mirror = false; + flipSprite = !b; + shake = 1f; + bullet = Bullets.missileSwarm; + }}); + } }}; titan = new UnitType("titan"){{ diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index c5c1427eda..f744a16b4f 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -392,6 +392,15 @@ public class Control implements ApplicationListener, Loadable{ public void init(){ platform.updateRPC(); + //just a regular reminder + if(!OS.prop("user.name").equals("anuke") && !OS.hasEnv("iknowwhatimdoing")){ + if(mobile){ + ui.showInfo("[scarlet]6.0 doesn't work on mobile.[] Don't play it."); + }else{ + ui.showInfo("[scarlet]6.0 is not supposed to be played.[] Go do something else."); + } + } + //play tutorial on stop if(!settings.getBool("playedtutorial", false)){ Core.app.post(() -> Core.app.post(this::playTutorial)); @@ -400,7 +409,7 @@ public class Control implements ApplicationListener, Loadable{ //display UI scale changed dialog if(Core.settings.getBool("uiscalechanged", false)){ Core.app.post(() -> Core.app.post(() -> { - FloatingDialog dialog = new FloatingDialog("$confirm"); + BaseDialog dialog = new BaseDialog("$confirm"); dialog.setFillParent(true); float[] countdown = {60 * 11}; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index b02198d644..502d3f2571 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -33,10 +33,6 @@ import static mindustry.Vars.*; public class Logic implements ApplicationListener{ public Logic(){ - Events.on(WorldLoadEvent.class, event -> { - //TODO remove later - //Weathers.snow.create(); - }); Events.on(WaveEvent.class, event -> { if(state.isCampaign()){ diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 0329a94935..a38321807c 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -549,7 +549,7 @@ public class NetServer implements ApplicationListener{ connection.viewHeight = viewHeight; //disable shooting when a mech flies - if(!player.dead() && player.unit().isFlying() && !player.unit().type().flying){ + if(!player.dead() && player.unit().isFlying() && player.unit() instanceof Mechc){ shooting = false; } diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 2a684fcf10..db7439faa0 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -449,7 +449,7 @@ public class UI implements ApplicationListener, Loadable{ } public void showConfirm(String title, String text, Boolp hide, Runnable confirmed){ - FloatingDialog dialog = new FloatingDialog(title); + BaseDialog dialog = new BaseDialog(title); dialog.cont.add(text).width(mobile ? 400f : 500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); dialog.buttons.defaults().size(200f, 54f).pad(2f); dialog.setFillParent(false); @@ -475,7 +475,7 @@ public class UI implements ApplicationListener, Loadable{ } public void showCustomConfirm(String title, String text, String yes, String no, Runnable confirmed, Runnable denied){ - FloatingDialog dialog = new FloatingDialog(title); + BaseDialog dialog = new BaseDialog(title); dialog.cont.add(text).width(mobile ? 400f : 500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); dialog.buttons.defaults().size(200f, 54f).pad(2f); dialog.setFillParent(false); @@ -493,7 +493,7 @@ public class UI implements ApplicationListener, Loadable{ } public void showOkText(String title, String text, Runnable confirmed){ - FloatingDialog dialog = new FloatingDialog(title); + BaseDialog dialog = new BaseDialog(title); dialog.cont.add(text).width(500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); dialog.buttons.defaults().size(200f, 54f).pad(2f); dialog.setFillParent(false); diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 5d5fb17b8b..6af7345412 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -22,6 +22,7 @@ import mindustry.type.*; import mindustry.type.Sector.*; import mindustry.type.Weather.*; import mindustry.world.*; +import mindustry.world.blocks.environment.*; import mindustry.world.blocks.legacy.*; import static mindustry.Vars.*; @@ -78,6 +79,18 @@ public class World{ return height()*tilesize; } + @NonNull + public Floor floor(int x, int y){ + Tile tile = tile(x, y); + return tile == null ? Blocks.air.asFloor() : tile.floor(); + } + + @NonNull + public Floor floorWorld(float x, float y){ + Tile tile = tileWorld(x, y); + return tile == null ? Blocks.air.asFloor() : tile.floor(); + } + @Nullable public Tile tile(int pos){ return tile(Point2.x(pos), Point2.y(pos)); diff --git a/core/src/mindustry/ctype/Content.java b/core/src/mindustry/ctype/Content.java index 19196a5f4a..7565dc88b0 100644 --- a/core/src/mindustry/ctype/Content.java +++ b/core/src/mindustry/ctype/Content.java @@ -14,7 +14,7 @@ public abstract class Content implements Comparable, Disposable{ public Content(){ - this.id = (short) Vars.content.getBy(getContentType()).size; + this.id = (short)Vars.content.getBy(getContentType()).size; Vars.content.handleContent(this); } @@ -25,15 +25,13 @@ public abstract class Content implements Comparable, Disposable{ public abstract ContentType getContentType(); /** Called after all content and modules are created. Do not use to load regions or texture data! */ - public void init(){ - } + public void init(){} /** * Called after all content is created, only on non-headless versions. * Use for loading regions or other image data. */ - public void load(){ - } + public void load(){} /** @return whether an error ocurred during mod loading. */ public boolean hasErrored(){ diff --git a/core/src/mindustry/editor/DrawOperation.java b/core/src/mindustry/editor/DrawOperation.java index c38efca996..17e84715db 100755 --- a/core/src/mindustry/editor/DrawOperation.java +++ b/core/src/mindustry/editor/DrawOperation.java @@ -1,6 +1,6 @@ package mindustry.editor; -import mindustry.annotations.Annotations.Struct; +import mindustry.annotations.Annotations.*; import arc.struct.LongArray; import mindustry.game.Team; import mindustry.gen.TileOp; diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 932f5a12e6..0b15e9cbaa 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -42,7 +42,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ private MapResizeDialog resizeDialog; private MapGenerateDialog generateDialog; private ScrollPane pane; - private FloatingDialog menu; + private BaseDialog menu; private Rules lastSavedRules; private boolean saved = false; private boolean shownWithMap = false; @@ -58,7 +58,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ infoDialog = new MapInfoDialog(editor); generateDialog = new MapGenerateDialog(editor, true); - menu = new FloatingDialog("$menu"); + menu = new BaseDialog("$menu"); menu.addCloseButton(); float swidth = 180f; @@ -309,7 +309,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ * 3) listener */ private void createDialog(String title, Object... arguments){ - FloatingDialog dialog = new FloatingDialog(title); + BaseDialog dialog = new BaseDialog(title); float h = 90f; diff --git a/core/src/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java index 39a76cba54..ac84bbf24d 100644 --- a/core/src/mindustry/editor/MapGenerateDialog.java +++ b/core/src/mindustry/editor/MapGenerateDialog.java @@ -26,7 +26,7 @@ import mindustry.world.blocks.environment.*; import static mindustry.Vars.*; @SuppressWarnings("unchecked") -public class MapGenerateDialog extends FloatingDialog{ +public class MapGenerateDialog extends BaseDialog{ private final Prov[] filterTypes = new Prov[]{ NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new, RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new, @@ -284,7 +284,7 @@ public class MapGenerateDialog extends FloatingDialog{ } void showAdd(){ - FloatingDialog selection = new FloatingDialog("$add"); + BaseDialog selection = new BaseDialog("$add"); selection.setFillParent(false); selection.cont.defaults().size(210f, 60f); int i = 0; diff --git a/core/src/mindustry/editor/MapInfoDialog.java b/core/src/mindustry/editor/MapInfoDialog.java index 0ce61dc709..a4b6176375 100644 --- a/core/src/mindustry/editor/MapInfoDialog.java +++ b/core/src/mindustry/editor/MapInfoDialog.java @@ -9,7 +9,7 @@ import mindustry.io.*; import mindustry.ui.*; import mindustry.ui.dialogs.*; -public class MapInfoDialog extends FloatingDialog{ +public class MapInfoDialog extends BaseDialog{ private final MapEditor editor; private final WaveInfoDialog waveInfo; private final MapGenerateDialog generate; diff --git a/core/src/mindustry/editor/MapLoadDialog.java b/core/src/mindustry/editor/MapLoadDialog.java index 01d207111c..540ed754a2 100644 --- a/core/src/mindustry/editor/MapLoadDialog.java +++ b/core/src/mindustry/editor/MapLoadDialog.java @@ -10,7 +10,7 @@ import mindustry.ui.dialogs.*; import static mindustry.Vars.maps; -public class MapLoadDialog extends FloatingDialog{ +public class MapLoadDialog extends BaseDialog{ private Map selected = null; public MapLoadDialog(Cons loader){ diff --git a/core/src/mindustry/editor/MapResizeDialog.java b/core/src/mindustry/editor/MapResizeDialog.java index 1e86dd6560..bd8b758e61 100644 --- a/core/src/mindustry/editor/MapResizeDialog.java +++ b/core/src/mindustry/editor/MapResizeDialog.java @@ -6,7 +6,7 @@ import arc.scene.ui.layout.*; import mindustry.gen.*; import mindustry.ui.dialogs.*; -public class MapResizeDialog extends FloatingDialog{ +public class MapResizeDialog extends BaseDialog{ private static final int minSize = 50, maxSize = 500, increment = 50; int width, height; diff --git a/core/src/mindustry/editor/MapSaveDialog.java b/core/src/mindustry/editor/MapSaveDialog.java index 909957eb12..0bd9775d14 100644 --- a/core/src/mindustry/editor/MapSaveDialog.java +++ b/core/src/mindustry/editor/MapSaveDialog.java @@ -8,7 +8,7 @@ import mindustry.ui.dialogs.*; import static mindustry.Vars.ui; -public class MapSaveDialog extends FloatingDialog{ +public class MapSaveDialog extends BaseDialog{ private TextField field; private Cons listener; diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index 9153a738d4..e051c5d231 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -24,7 +24,7 @@ import mindustry.ui.dialogs.*; import static mindustry.Vars.*; import static mindustry.game.SpawnGroup.never; -public class WaveInfoDialog extends FloatingDialog{ +public class WaveInfoDialog extends BaseDialog{ private final static int displayed = 20; private Array groups = new Array<>(); @@ -49,7 +49,7 @@ public class WaveInfoDialog extends FloatingDialog{ addCloseButton(); buttons.button("$waves.edit", () -> { - FloatingDialog dialog = new FloatingDialog("$waves.edit"); + BaseDialog dialog = new BaseDialog("$waves.edit"); dialog.addCloseButton(); dialog.setFillParent(false); dialog.cont.defaults().size(210f, 64f); @@ -235,7 +235,7 @@ public class WaveInfoDialog extends FloatingDialog{ } void showUpdate(SpawnGroup group){ - FloatingDialog dialog = new FloatingDialog(""); + BaseDialog dialog = new BaseDialog(""); dialog.setFillParent(true); dialog.cont.pane(p -> { int i = 0; diff --git a/core/src/mindustry/entities/Leg.java b/core/src/mindustry/entities/Leg.java index a5efa0d900..24e032e482 100644 --- a/core/src/mindustry/entities/Leg.java +++ b/core/src/mindustry/entities/Leg.java @@ -3,6 +3,5 @@ package mindustry.entities; import arc.math.geom.*; public class Leg{ - public final Vec2 joint = new Vec2(), base = new Vec2(), target = new Vec2(); - public boolean moving = false; + public final Vec2 joint = new Vec2(), base = new Vec2(); } diff --git a/core/src/mindustry/entities/comp/LegsComp.java b/core/src/mindustry/entities/comp/LegsComp.java index c3e83192e1..e494e32b27 100644 --- a/core/src/mindustry/entities/comp/LegsComp.java +++ b/core/src/mindustry/entities/comp/LegsComp.java @@ -2,26 +2,34 @@ package mindustry.entities.comp; import arc.math.*; import arc.util.*; +import mindustry.*; import mindustry.annotations.Annotations.*; +import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; +import mindustry.type.*; +import mindustry.world.blocks.environment.*; @Component abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ - @Import float x, y, rotation, elevation; + @Import float x, y, elevation; + @Import UnitType type; transient Leg[] legs = {}; transient float totalLength; + transient int lastGroup; @Override public void update(){ //keep elevation halfway elevation = 0.5f; - int count = type().legCount; - float legLength = type().legLength; + int count = type.legCount; + float legLength = type.legLength; + float rotation = vel().angle(); - if(legs.length != type().legCount){ + //set up initial leg positions + if(legs.length != type.legCount){ this.legs = new Leg[count]; float spacing = 360f / count; @@ -36,16 +44,39 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ } } - float moveSpeed = 0.1f; + float moveSpeed = type.legSpeed; int div = Math.max(legs.length / 2, 2); float moveSpace = legLength / 1.6f / (div / 2f); totalLength += Mathf.dst(deltaX(), deltaY()); int stage = (int)(totalLength / moveSpace); - int odd = stage % div; + int group = stage % div; + + if(lastGroup != group){ + //create ripple effects when switching leg groups + int i = 0; + for(Leg l : legs){ + if(i++ % div == lastGroup){ + Floor floor = Vars.world.floorWorld(l.base.x, l.base.y); + if(floor.isLiquid){ + floor.walkEffect.at(l.base.x, l.base.y, 0, floor.mapColor); + }else{ + Fx.unitLandSmall.at(l.base.x, l.base.y, 0.5f, floor.mapColor); + } + + //shake when legs contact ground + if(type.landShake > 0){ + Effects.shake(type.landShake, type.landShake, this); + } + } + } + + lastGroup = group; + } + float movespace = 360f / legs.length / 4f; - float trns = vel().len() * 12.5f * div/1.5f; + float trns = vel().len() * 12.5f * div/1.5f * type.legTrns; Tmp.v4.trns(rotation, trns); @@ -58,7 +89,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ Tmp.v1.trns(dstRot, legLength).add(x, y).add(Tmp.v4); Tmp.v2.trns(rot2, legLength / 2f).add(x, y).add(Tmp.v4); - if(i % div == odd){ + if(i % div == group){ l.base.lerpDelta(Tmp.v1, moveSpeed); l.joint.lerpDelta(Tmp.v2, moveSpeed / 4f); } diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index e01e003d12..6f8913b9e2 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -9,28 +9,6 @@ import mindustry.world.*; /** Holds objective classes. */ public class Objectives{ - //TODO - public static class Wave implements Objective{ - public int wave; - - public Wave(int wave){ - this.wave = wave; - } - - protected Wave(){} - - @Override - public boolean complete(){ - return false; - } - - @Override - public String display(){ - //TODO - return null; - } - } - public static class Unlock implements Objective{ public @NonNull Block block; @@ -102,9 +80,8 @@ public class Objectives{ boolean complete(); /** @return the string displayed when this objective is completed, in imperative form. - * e.g. when the objective is 'complete 10 waves', this would display "complete 10 waves". - * If this objective should not be displayed, should return null.*/ - @Nullable String display(); + * e.g. when the objective is 'complete 10 waves', this would display "complete 10 waves". */ + String display(); /** Build a display for this zone requirement.*/ default void build(Table table){ diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index e8074b01c9..f3b4b92b08 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -579,11 +579,11 @@ public class DesktopInput extends InputHandler{ float speed = unit.type().speed * Mathf.lerp(1f, unit.type().canBoost ? unit.type().boostMultiplier : 1f, unit.elevation()) * strafePenalty; float xa = Core.input.axis(Binding.move_x); float ya = Core.input.axis(Binding.move_y); - boolean boosted = (!unit.type().flying && unit.isFlying()); + boolean boosted = (unit instanceof Mechc && unit.isFlying()); movement.set(xa, ya).nor().scl(speed); float mouseAngle = Angles.mouseAngle(unit.x(), unit.y()); - boolean aimCursor = omni && isShooting && unit.type().hasWeapons() && unit.type().faceTarget && !boosted; + boolean aimCursor = omni && isShooting && unit.type().hasWeapons() && unit.type().faceTarget && !boosted && unit.type().rotateShooting; if(aimCursor){ unit.lookAt(mouseAngle); diff --git a/core/src/mindustry/logic/LogicDialog.java b/core/src/mindustry/logic/LogicDialog.java index 184c57a4a5..0eddd67f22 100644 --- a/core/src/mindustry/logic/LogicDialog.java +++ b/core/src/mindustry/logic/LogicDialog.java @@ -2,7 +2,7 @@ package mindustry.logic; import mindustry.ui.dialogs.*; -public class LogicDialog extends FloatingDialog{ +public class LogicDialog extends BaseDialog{ public LogicDialog(){ super(""); diff --git a/core/src/mindustry/maps/filters/FilterOption.java b/core/src/mindustry/maps/filters/FilterOption.java index 5a8a43ee77..cdac5c9d4d 100644 --- a/core/src/mindustry/maps/filters/FilterOption.java +++ b/core/src/mindustry/maps/filters/FilterOption.java @@ -90,7 +90,7 @@ public abstract class FilterOption{ public void build(Table table){ table.button(b -> b.image(supplier.get().icon(Cicon.small)).update(i -> ((TextureRegionDrawable)i.getDrawable()) .setRegion(supplier.get() == Blocks.air ? Icon.block.getRegion() : supplier.get().icon(Cicon.small))).size(8 * 3), () -> { - FloatingDialog dialog = new FloatingDialog(""); + BaseDialog dialog = new BaseDialog(""); dialog.setFillParent(false); int i = 0; for(Block block : Vars.content.blocks()){ diff --git a/core/src/mindustry/net/BeControl.java b/core/src/mindustry/net/BeControl.java index 1a13bc815a..a31660763a 100644 --- a/core/src/mindustry/net/BeControl.java +++ b/core/src/mindustry/net/BeControl.java @@ -91,7 +91,7 @@ public class BeControl{ int[] length = {0}; Fi file = bebuildDirectory.child("client-be-" + updateBuild + ".jar"); - FloatingDialog dialog = new FloatingDialog("$be.updating"); + BaseDialog dialog = new BaseDialog("$be.updating"); download(updateUrl, file, i -> length[0] = i, v -> progress[0] = v, () -> cancel[0], () -> { try{ Runtime.getRuntime().exec(new String[]{"java", "-DlastBuild=" + Version.build, "-Dberestart", "-jar", file.absolutePath()}); diff --git a/core/src/mindustry/net/Registrator.java b/core/src/mindustry/net/Registrator.java index 8e3c48dc51..c0368497f5 100644 --- a/core/src/mindustry/net/Registrator.java +++ b/core/src/mindustry/net/Registrator.java @@ -5,14 +5,14 @@ import arc.func.Prov; import mindustry.net.Packets.*; public class Registrator{ - private static ClassEntry[] classes = { + private static final ClassEntry[] classes = { new ClassEntry(StreamBegin.class, StreamBegin::new), new ClassEntry(StreamChunk.class, StreamChunk::new), new ClassEntry(WorldStream.class, WorldStream::new), new ClassEntry(ConnectPacket.class, ConnectPacket::new), new ClassEntry(InvokePacket.class, InvokePacket::new) }; - private static ObjectIntMap ids = new ObjectIntMap<>(); + private static final ObjectIntMap> ids = new ObjectIntMap<>(); static{ if(classes.length > 127) throw new RuntimeException("Can't have more than 127 registered classes!"); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 70e6eafab1..28db89f096 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -37,12 +37,13 @@ public class UnitType extends UnlockableContent{ public float drag = 0.3f, accel = 0.5f, landShake = 0f; public float health = 200f, range = -1, armor = 0f; public boolean targetAir = true, targetGround = true; - public boolean faceTarget = true, isCounted = true, lowAltitude = false; + public boolean faceTarget = true, rotateShooting = true, isCounted = true, lowAltitude = false; public boolean canBoost = false; - public int legCount = 4; - public float legLength = 24f; public float sway = 1f; + public int legCount = 4; + public float legLength = 24f, legSpeed = 0.1f, legTrns = 1f; + public int itemCapacity = 30; public int drillTier = -1; public float buildSpeed = 1f, mineSpeed = 1f; @@ -59,7 +60,7 @@ public class UnitType extends UnlockableContent{ public Sound deathSound = Sounds.bang; public Array weapons = new Array<>(); - public TextureRegion baseRegion, legRegion, region, shadowRegion, cellRegion, occlusionRegion; + public TextureRegion baseRegion, legRegion, region, shadowRegion, cellRegion, occlusionRegion, jointRegion, footRegion, legBaseRegion; public UnitType(String name){ super(name); @@ -114,6 +115,9 @@ public class UnitType extends UnlockableContent{ weapons.each(Weapon::load); region = Core.atlas.find(name); legRegion = Core.atlas.find(name + "-leg"); + jointRegion = Core.atlas.find(name + "-joint"); + footRegion = Core.atlas.find(name + "-foot"); + legBaseRegion = Core.atlas.find(name + "-leg-base", name + "-leg"); baseRegion = Core.atlas.find(name + "-base"); cellRegion = Core.atlas.find(name + "-cell", Core.atlas.find("power-cell")); occlusionRegion = Core.atlas.find("circle-shadow"); @@ -285,7 +289,7 @@ public class UnitType extends UnlockableContent{ Draw.rect(weapon.region, unit.x() + Angles.trnsx(rotation, weapon.x * i, weapon.y) + Angles.trnsx(weaponRotation, 0, recoil), unit.y() + Angles.trnsy(rotation, weapon.x * i, weapon.y) + Angles.trnsy(weaponRotation, 0, recoil), - width * Draw.scl, + width * Draw.scl * -Mathf.sign(weapon.flipSprite), weapon.region.getHeight() * Draw.scl, weaponRotation); } @@ -319,24 +323,31 @@ public class UnitType extends UnlockableContent{ public void drawLegs(Legsc unit){ Leg[] legs = unit.legs(); - Lines.stroke(4f, Color.gray); - float srad = 2.1f; + + float ssize = footRegion.getWidth() * Draw.scl * 1.5f; for(Leg leg : legs){ + Drawf.shadow(leg.base.x, leg.base.y, ssize); + } + + int index = 0; + + for(Leg leg : legs){ + boolean flip = index++ >= legs.length/2f; + int flips = Mathf.sign(flip); Draw.color(); + Lines.stroke(legRegion.getHeight() * Draw.scl * flips); Lines.line(legRegion, unit.x(), unit.y(), leg.joint.x, leg.joint.y, CapStyle.none, 0); - Lines.line(legRegion, leg.joint.x, leg.joint.y, leg.base.x, leg.base.y, CapStyle.none, 0); - Draw.color(Pal.darkMetal); - Fill.circle(leg.joint.x, leg.joint.y, srad); + Lines.stroke(legBaseRegion.getHeight() * Draw.scl * flips); + Lines.line(legBaseRegion, leg.joint.x, leg.joint.y, leg.base.x, leg.base.y, CapStyle.none, 0); - Draw.color(Pal.darkerMetal); - Fill.circle(leg.base.x, leg.base.y, srad); + float angle1 = unit.angleTo(leg.joint), angle2 = unit.angleTo(leg.base); - Draw.color(); - //Lines.line(unit.x(), unit.y(), leg.base.x, leg.base.y); + Draw.rect(jointRegion, leg.joint.x, leg.joint.y); + Draw.rect(footRegion, leg.base.x, leg.base.y, angle2); } Draw.reset(); diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index c0b4f0b2c7..a73ab597ef 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -19,7 +19,7 @@ public class Weapon{ /** whether to mirror the weapon (draw two of them, which is the default) */ public boolean mirror = true; /** whether to flip the weapon's position/side on the ship (only valid when mirror is false) */ - public boolean flipped = false; + public boolean flipped = false, flipSprite = false; /** whether to shoot the weapons in different arms one after another, rather than all at once; only valid when mirror = true */ public boolean alternate = false; /** whether to rotate toward the target independently of unit */ diff --git a/core/src/mindustry/type/Weather.java b/core/src/mindustry/type/Weather.java index d541a75029..cf2d5fc28d 100644 --- a/core/src/mindustry/type/Weather.java +++ b/core/src/mindustry/type/Weather.java @@ -71,7 +71,7 @@ public abstract class Weather extends MappableContent{ return ContentType.weather; } - @Remote + @Remote(called = Loc.server) public static void createWeather(Weather weather, float intensity, float duration){ weather.create(intensity, duration); } diff --git a/core/src/mindustry/ui/dialogs/AboutDialog.java b/core/src/mindustry/ui/dialogs/AboutDialog.java index 58e0191b8a..3986dba4bd 100644 --- a/core/src/mindustry/ui/dialogs/AboutDialog.java +++ b/core/src/mindustry/ui/dialogs/AboutDialog.java @@ -14,7 +14,7 @@ import mindustry.ui.Links.*; import static mindustry.Vars.*; -public class AboutDialog extends FloatingDialog{ +public class AboutDialog extends BaseDialog{ private Array contributors = new Array<>(); private static ObjectSet bannedItems = ObjectSet.with("google-play", "itch.io", "dev-builds", "f-droid"); @@ -93,7 +93,7 @@ public class AboutDialog extends FloatingDialog{ } public void showCredits(){ - FloatingDialog dialog = new FloatingDialog("$credits"); + BaseDialog dialog = new BaseDialog("$credits"); dialog.addCloseButton(); dialog.cont.add("$credits.text").fillX().wrap().get().setAlignment(Align.center); dialog.cont.row(); diff --git a/core/src/mindustry/ui/dialogs/AdminsDialog.java b/core/src/mindustry/ui/dialogs/AdminsDialog.java index 29f5410091..60c390c344 100644 --- a/core/src/mindustry/ui/dialogs/AdminsDialog.java +++ b/core/src/mindustry/ui/dialogs/AdminsDialog.java @@ -7,7 +7,7 @@ import mindustry.net.Administration.*; import static mindustry.Vars.*; -public class AdminsDialog extends FloatingDialog{ +public class AdminsDialog extends BaseDialog{ public AdminsDialog(){ super("$server.admins"); diff --git a/core/src/mindustry/ui/dialogs/BansDialog.java b/core/src/mindustry/ui/dialogs/BansDialog.java index 98a65de6e9..6ec0949334 100644 --- a/core/src/mindustry/ui/dialogs/BansDialog.java +++ b/core/src/mindustry/ui/dialogs/BansDialog.java @@ -7,7 +7,7 @@ import mindustry.net.Administration.*; import static mindustry.Vars.*; -public class BansDialog extends FloatingDialog{ +public class BansDialog extends BaseDialog{ public BansDialog(){ super("$server.bans"); diff --git a/core/src/mindustry/ui/dialogs/FloatingDialog.java b/core/src/mindustry/ui/dialogs/BaseDialog.java similarity index 91% rename from core/src/mindustry/ui/dialogs/FloatingDialog.java rename to core/src/mindustry/ui/dialogs/BaseDialog.java index a9575a18d8..6cdca94146 100644 --- a/core/src/mindustry/ui/dialogs/FloatingDialog.java +++ b/core/src/mindustry/ui/dialogs/BaseDialog.java @@ -11,11 +11,11 @@ import mindustry.graphics.*; import static mindustry.Vars.*; -public class FloatingDialog extends Dialog{ +public class BaseDialog extends Dialog{ private boolean wasPaused; protected boolean shouldPause; - public FloatingDialog(String title, DialogStyle style){ + public BaseDialog(String title, DialogStyle style){ super(title, style); setFillParent(true); this.title.setAlignment(Align.center); @@ -40,7 +40,7 @@ public class FloatingDialog extends Dialog{ }); } - public FloatingDialog(String title){ + public BaseDialog(String title){ this(title, Core.scene.getStyle(DialogStyle.class)); } diff --git a/core/src/mindustry/ui/dialogs/ColorPicker.java b/core/src/mindustry/ui/dialogs/ColorPicker.java index b3745d1a57..ebdcb7e819 100644 --- a/core/src/mindustry/ui/dialogs/ColorPicker.java +++ b/core/src/mindustry/ui/dialogs/ColorPicker.java @@ -6,7 +6,7 @@ import arc.scene.ui.*; import mindustry.gen.*; import mindustry.graphics.*; -public class ColorPicker extends FloatingDialog{ +public class ColorPicker extends BaseDialog{ private Cons cons = c -> {}; private Color current = new Color(); diff --git a/core/src/mindustry/ui/dialogs/ContentInfoDialog.java b/core/src/mindustry/ui/dialogs/ContentInfoDialog.java index e73a0bb427..88a7e24dba 100644 --- a/core/src/mindustry/ui/dialogs/ContentInfoDialog.java +++ b/core/src/mindustry/ui/dialogs/ContentInfoDialog.java @@ -4,7 +4,7 @@ import arc.scene.ui.ScrollPane; import arc.scene.ui.layout.Table; import mindustry.ctype.UnlockableContent; -public class ContentInfoDialog extends FloatingDialog{ +public class ContentInfoDialog extends BaseDialog{ public ContentInfoDialog(){ super("$info.title"); diff --git a/core/src/mindustry/ui/dialogs/ControlsDialog.java b/core/src/mindustry/ui/dialogs/ControlsDialog.java index 265febe18b..022338b7a2 100644 --- a/core/src/mindustry/ui/dialogs/ControlsDialog.java +++ b/core/src/mindustry/ui/dialogs/ControlsDialog.java @@ -20,8 +20,7 @@ public class ControlsDialog extends KeybindDialog{ buttons.button("$back", Icon.left, this::hide).size(230f, 64f); keyDown(key -> { - if(key == KeyCode.escape || key == KeyCode.back) - hide(); + if(key == KeyCode.escape || key == KeyCode.back) hide(); }); } } diff --git a/core/src/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/mindustry/ui/dialogs/CustomGameDialog.java index 1c85aa347c..e9667270b8 100644 --- a/core/src/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomGameDialog.java @@ -14,7 +14,7 @@ import mindustry.graphics.*; import mindustry.maps.*; import mindustry.ui.*; -public class CustomGameDialog extends FloatingDialog{ +public class CustomGameDialog extends BaseDialog{ private MapPlayDialog dialog = new MapPlayDialog(); public CustomGameDialog(){ diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 629add59f2..b18e4deb4c 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -19,18 +19,18 @@ import mindustry.world.*; import static mindustry.Vars.*; -public class CustomRulesDialog extends FloatingDialog{ +public class CustomRulesDialog extends BaseDialog{ private Table main; private Rules rules; private Prov resetter; private LoadoutDialog loadoutDialog; - private FloatingDialog banDialog; + private BaseDialog banDialog; public CustomRulesDialog(){ super("$mode.custom"); loadoutDialog = new LoadoutDialog(); - banDialog = new FloatingDialog("$bannedblocks"); + banDialog = new BaseDialog("$bannedblocks"); banDialog.addCloseButton(); banDialog.shown(this::rebuildBanned); @@ -84,7 +84,7 @@ public class CustomRulesDialog extends FloatingDialog{ }).get().setScrollYForce(previousScroll); banDialog.cont.row(); banDialog.cont.button("$add", Icon.add, () -> { - FloatingDialog dialog = new FloatingDialog("$add"); + BaseDialog dialog = new BaseDialog("$add"); dialog.cont.pane(t -> { t.left().margin(14f); int[] i = {0}; diff --git a/core/src/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/mindustry/ui/dialogs/DatabaseDialog.java index 76767cac61..0f4209ecfd 100644 --- a/core/src/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/mindustry/ui/dialogs/DatabaseDialog.java @@ -16,7 +16,7 @@ import mindustry.ui.*; import static mindustry.Vars.ui; -public class DatabaseDialog extends FloatingDialog{ +public class DatabaseDialog extends BaseDialog{ public DatabaseDialog(){ super("$database"); diff --git a/core/src/mindustry/ui/dialogs/FileChooser.java b/core/src/mindustry/ui/dialogs/FileChooser.java index 0b12900fed..3e2118fb84 100644 --- a/core/src/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/mindustry/ui/dialogs/FileChooser.java @@ -17,7 +17,7 @@ import java.util.*; import static mindustry.Vars.platform; -public class FileChooser extends FloatingDialog{ +public class FileChooser extends BaseDialog{ private static final Fi homeDirectory = Core.files.absolute(Core.files.getExternalStoragePath()); private static Fi lastDirectory = homeDirectory; diff --git a/core/src/mindustry/ui/dialogs/GameOverDialog.java b/core/src/mindustry/ui/dialogs/GameOverDialog.java index 9dea740a88..ee96567c1d 100644 --- a/core/src/mindustry/ui/dialogs/GameOverDialog.java +++ b/core/src/mindustry/ui/dialogs/GameOverDialog.java @@ -9,7 +9,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class GameOverDialog extends FloatingDialog{ +public class GameOverDialog extends BaseDialog{ private Team winner; public GameOverDialog(){ diff --git a/core/src/mindustry/ui/dialogs/HostDialog.java b/core/src/mindustry/ui/dialogs/HostDialog.java index 0b5b8ce1c5..3f14f52822 100644 --- a/core/src/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/mindustry/ui/dialogs/HostDialog.java @@ -12,7 +12,7 @@ import java.io.*; import static mindustry.Vars.*; -public class HostDialog extends FloatingDialog{ +public class HostDialog extends BaseDialog{ float w = 300; public HostDialog(){ diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index d13c199adb..4e75d13552 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -19,7 +19,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class JoinDialog extends FloatingDialog{ +public class JoinDialog extends BaseDialog{ Array servers = new Array<>(); Dialog add; Server renaming; @@ -44,7 +44,7 @@ public class JoinDialog extends FloatingDialog{ buttons.button("?", () -> ui.showInfo("$join.info")).size(60f, 64f).width(-1); } - add = new FloatingDialog("$joingame.title"); + add = new BaseDialog("$joingame.title"); add.cont.add("$joingame.ip").padRight(5f).left(); TextField field = add.cont.field(Core.settings.getString("ip"), text -> { diff --git a/core/src/mindustry/ui/dialogs/LanguageDialog.java b/core/src/mindustry/ui/dialogs/LanguageDialog.java index bd07611af3..e1d31faa0d 100644 --- a/core/src/mindustry/ui/dialogs/LanguageDialog.java +++ b/core/src/mindustry/ui/dialogs/LanguageDialog.java @@ -13,7 +13,7 @@ import java.util.Locale; import static mindustry.Vars.locales; import static mindustry.Vars.ui; -public class LanguageDialog extends FloatingDialog{ +public class LanguageDialog extends BaseDialog{ private Locale lastLocale; private ObjectMap displayNames = ObjectMap.of( Locale.TRADITIONAL_CHINESE, "正體中文", diff --git a/core/src/mindustry/ui/dialogs/LoadDialog.java b/core/src/mindustry/ui/dialogs/LoadDialog.java index 60f5ba9583..c74580e9a6 100644 --- a/core/src/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/mindustry/ui/dialogs/LoadDialog.java @@ -19,7 +19,7 @@ import java.io.*; import static mindustry.Vars.*; -public class LoadDialog extends FloatingDialog{ +public class LoadDialog extends BaseDialog{ ScrollPane pane; Table slots; diff --git a/core/src/mindustry/ui/dialogs/LoadoutDialog.java b/core/src/mindustry/ui/dialogs/LoadoutDialog.java index 31b13046b4..510032e7d7 100644 --- a/core/src/mindustry/ui/dialogs/LoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LoadoutDialog.java @@ -11,7 +11,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class LoadoutDialog extends FloatingDialog{ +public class LoadoutDialog extends BaseDialog{ private Runnable hider; private Runnable resetter; private Runnable updater; diff --git a/core/src/mindustry/ui/dialogs/MapPlayDialog.java b/core/src/mindustry/ui/dialogs/MapPlayDialog.java index 1f09e8da21..a321d8d7c9 100644 --- a/core/src/mindustry/ui/dialogs/MapPlayDialog.java +++ b/core/src/mindustry/ui/dialogs/MapPlayDialog.java @@ -12,7 +12,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class MapPlayDialog extends FloatingDialog{ +public class MapPlayDialog extends BaseDialog{ CustomRulesDialog dialog = new CustomRulesDialog(); Rules rules; @NonNull Gamemode selectedGamemode = Gamemode.survival; @@ -89,7 +89,7 @@ public class MapPlayDialog extends FloatingDialog{ } private void displayGameModeHelp(){ - FloatingDialog d = new FloatingDialog(Core.bundle.get("mode.help.title")); + BaseDialog d = new BaseDialog(Core.bundle.get("mode.help.title")); d.setFillParent(false); Table table = new Table(); table.defaults().pad(1f); diff --git a/core/src/mindustry/ui/dialogs/MapsDialog.java b/core/src/mindustry/ui/dialogs/MapsDialog.java index bc11e7b882..07b7bc5ce7 100644 --- a/core/src/mindustry/ui/dialogs/MapsDialog.java +++ b/core/src/mindustry/ui/dialogs/MapsDialog.java @@ -17,8 +17,8 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class MapsDialog extends FloatingDialog{ - private FloatingDialog dialog; +public class MapsDialog extends BaseDialog{ + private BaseDialog dialog; public MapsDialog(){ super("$maps"); @@ -158,7 +158,7 @@ public class MapsDialog extends FloatingDialog{ } void showMapInfo(Map map){ - dialog = new FloatingDialog("$editor.mapinfo"); + dialog = new BaseDialog("$editor.mapinfo"); dialog.addCloseButton(); float mapsize = Core.graphics.isPortrait() ? 160f : 300f; diff --git a/core/src/mindustry/ui/dialogs/MinimapDialog.java b/core/src/mindustry/ui/dialogs/MinimapDialog.java index efa3024316..a045895354 100644 --- a/core/src/mindustry/ui/dialogs/MinimapDialog.java +++ b/core/src/mindustry/ui/dialogs/MinimapDialog.java @@ -10,7 +10,7 @@ import mindustry.gen.*; import static mindustry.Vars.renderer; -public class MinimapDialog extends FloatingDialog{ +public class MinimapDialog extends BaseDialog{ public MinimapDialog(){ super("$minimap"); diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 8f8a107d32..e0ac76d65c 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -17,7 +17,7 @@ import java.io.*; import static mindustry.Vars.*; -public class ModsDialog extends FloatingDialog{ +public class ModsDialog extends BaseDialog{ public ModsDialog(){ super("$mods"); @@ -25,7 +25,6 @@ public class ModsDialog extends FloatingDialog{ buttons.button("$mods.guide", Icon.link, () -> Core.app.openURI(modGuideURL)).size(210, 64f); - shown(this::setup); hidden(() -> { @@ -67,7 +66,7 @@ public class ModsDialog extends FloatingDialog{ float margin = 12f; buttons.button("$mod.import", Icon.add, style, () -> { - FloatingDialog dialog = new FloatingDialog("$mod.import"); + BaseDialog dialog = new BaseDialog("$mod.import"); TextButtonStyle bstyle = Styles.cleart; @@ -245,7 +244,7 @@ public class ModsDialog extends FloatingDialog{ } private void showMod(LoadedMod mod){ - FloatingDialog dialog = new FloatingDialog(mod.meta.displayName()); + BaseDialog dialog = new BaseDialog(mod.meta.displayName()); dialog.addCloseButton(); diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index e489026125..7b06ff6c4b 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -6,7 +6,7 @@ import mindustry.gen.*; import static mindustry.Vars.*; -public class PausedDialog extends FloatingDialog{ +public class PausedDialog extends BaseDialog{ private SaveDialog save = new SaveDialog(); private LoadDialog load = new LoadDialog(); private boolean wasClient = false; diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 8dfb169af7..cb0f22c3a0 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -29,7 +29,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class PlanetDialog extends FloatingDialog{ +public class PlanetDialog extends BaseDialog{ private static final Color outlineColor = Pal.accent.cpy().a(1f), hoverColor = Pal.accent.cpy().a(0.5f), diff --git a/core/src/mindustry/ui/dialogs/ResourcesDialog.java b/core/src/mindustry/ui/dialogs/ResourcesDialog.java index 51b07e5be7..53736790cf 100644 --- a/core/src/mindustry/ui/dialogs/ResourcesDialog.java +++ b/core/src/mindustry/ui/dialogs/ResourcesDialog.java @@ -7,7 +7,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class ResourcesDialog extends FloatingDialog{ +public class ResourcesDialog extends BaseDialog{ public ResourcesDialog(){ super("//TODO resources"); diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index edf715382f..d4f3aa8c9a 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -20,7 +20,7 @@ import mindustry.ui.*; import static mindustry.Vars.*; -public class SchematicsDialog extends FloatingDialog{ +public class SchematicsDialog extends BaseDialog{ private SchematicInfoDialog info = new SchematicInfoDialog(); private Schematic firstSchematic; private String search = ""; @@ -97,7 +97,7 @@ public class SchematicsDialog extends FloatingDialog{ showInfo(s); }); - buttons.button(Icon.download, style, () -> { + buttons.button(Icon.upload, style, () -> { showExport(s); }); @@ -168,7 +168,7 @@ public class SchematicsDialog extends FloatingDialog{ } public void showImport(){ - FloatingDialog dialog = new FloatingDialog("$editor.export"); + BaseDialog dialog = new BaseDialog("$editor.export"); dialog.cont.pane(p -> { p.margin(10f); p.table(Tex.button, t -> { @@ -217,7 +217,7 @@ public class SchematicsDialog extends FloatingDialog{ } public void showExport(Schematic s){ - FloatingDialog dialog = new FloatingDialog("$editor.export"); + BaseDialog dialog = new BaseDialog("$editor.export"); dialog.cont.pane(p -> { p.margin(10f); p.table(Tex.button, t -> { @@ -312,7 +312,7 @@ public class SchematicsDialog extends FloatingDialog{ } } - public static class SchematicInfoDialog extends FloatingDialog{ + public static class SchematicInfoDialog extends BaseDialog{ SchematicInfoDialog(){ super(""); diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 3b6ad2561e..2a918c4194 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -31,7 +31,7 @@ public class SettingsMenuDialog extends SettingsDialog{ private Table prefs; private Table menu; - private FloatingDialog dataDialog; + private BaseDialog dataDialog; private boolean wasPaused; public SettingsMenuDialog(){ @@ -77,7 +77,7 @@ public class SettingsMenuDialog extends SettingsDialog{ prefs.clearChildren(); prefs.add(menu); - dataDialog = new FloatingDialog("$settings.data"); + dataDialog = new BaseDialog("$settings.data"); dataDialog.addCloseButton(); dataDialog.cont.table(Tex.button, t -> { diff --git a/core/src/mindustry/ui/dialogs/TechTreeDialog.java b/core/src/mindustry/ui/dialogs/TechTreeDialog.java index 1c9d7010ac..a7b212ebd1 100644 --- a/core/src/mindustry/ui/dialogs/TechTreeDialog.java +++ b/core/src/mindustry/ui/dialogs/TechTreeDialog.java @@ -1,8 +1,6 @@ package mindustry.ui.dialogs; import arc.*; -import arc.scene.ui.layout.Stack; -import arc.struct.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.input.*; @@ -13,11 +11,14 @@ import arc.scene.actions.*; import arc.scene.event.*; import arc.scene.style.*; import arc.scene.ui.*; +import arc.scene.ui.layout.Stack; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.content.TechTree.*; import mindustry.game.EventType.*; +import mindustry.game.Objectives.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -29,7 +30,7 @@ import java.util.*; import static mindustry.Vars.*; -public class TechTreeDialog extends FloatingDialog{ +public class TechTreeDialog extends BaseDialog{ private final float nodeSize = Scl.scl(60f); private ObjectSet nodes = new ObjectSet<>(); private TechTreeNode root = new TechTreeNode(TechTree.root, null); @@ -361,6 +362,21 @@ public class TechTreeDialog extends FloatingDialog{ }).fillX().left(); t.row(); } + + //TODO test if this works + if(node.objectives.length > 0){ + t.table(r -> { + r.add("$complete").colspan(2).left(); + r.row(); + for(Objective o : node.objectives){ + r.image(Icon.right).padRight(4); + r.add(o.display()).color(Color.lightGray); + r.image(o.complete() ? Icon.ok : Icon.cancel, o.complete() ? Color.lightGray : Color.scarlet).padLeft(3); + r.row(); + } + }); + t.row(); + } }); }else{ desc.add("$completed"); diff --git a/core/src/mindustry/ui/dialogs/TraceDialog.java b/core/src/mindustry/ui/dialogs/TraceDialog.java index 3cd9ae460d..05f9ea5f0a 100644 --- a/core/src/mindustry/ui/dialogs/TraceDialog.java +++ b/core/src/mindustry/ui/dialogs/TraceDialog.java @@ -5,7 +5,7 @@ import arc.scene.ui.layout.Table; import mindustry.gen.*; import mindustry.net.Administration.TraceInfo; -public class TraceDialog extends FloatingDialog{ +public class TraceDialog extends BaseDialog{ public TraceDialog(){ super("$trace"); diff --git a/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java b/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java deleted file mode 100644 index 6f4c4173b5..0000000000 --- a/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java +++ /dev/null @@ -1,171 +0,0 @@ -package mindustry.ui.dialogs; - -import arc.*; -import arc.struct.*; -import arc.graphics.*; -import arc.scene.ui.*; -import arc.scene.ui.layout.*; -import mindustry.game.*; -import mindustry.game.Objectives.*; -import mindustry.gen.*; -import mindustry.graphics.*; -import mindustry.type.*; -import mindustry.ui.Cicon; - -import static mindustry.Vars.*; - -//TODO remove -public class ZoneInfoDialog extends FloatingDialog{ - private LoadoutDialog loadout = new LoadoutDialog(); - - public ZoneInfoDialog(){ - super(""); - - titleTable.remove(); - addCloseButton(); - } - - public void show(SectorPreset zone){ - setup(zone); - show(); - } - - private void setup(SectorPreset zone){ - cont.clear(); - - Table iteminfo = new Table(); - Runnable rebuildItems = () -> { - int i = 0; - iteminfo.clear(); - - if(!zone.unlocked()) return; - - for(ItemStack stack : zone.getLaunchCost()){ - if(stack.amount == 0) continue; - - if(i++ % 2 == 0){ - iteminfo.row(); - } - iteminfo.image(stack.item.icon(Cicon.small)).size(8 * 3).padRight(1); - iteminfo.add(stack.amount + "").color(Color.lightGray).padRight(5); - } - }; - - rebuildItems.run(); - - cont.pane(cont -> { - if(zone.locked()){ - cont.image(Icon.lock); - cont.row(); - cont.add("$locked").padBottom(6); - cont.row(); - - cont.table(req -> { - req.defaults().left(); - - Array zones = zone.requirements.select(o -> !(o instanceof Unlock)); - - if(!zones.isEmpty()){ - req.table(r -> { - r.add("$complete").colspan(2).left(); - r.row(); - for(Objectives.Objective o : zones){ - r.image(Icon.terrain).padRight(4); - r.add(o.display()).color(Color.lightGray); - r.image(o.complete() ? Icon.ok : Icon.cancel, o.complete() ? Color.lightGray : Color.scarlet).padLeft(3); - r.row(); - } - }); - } - - req.row(); - Array blocks = zone.requirements.select(o -> o instanceof Unlock).as(); - - if(!blocks.isEmpty()){ - req.table(r -> { - r.add("$research.list").colspan(2).left(); - r.row(); - for(Unlock blocko : blocks){ - r.image(blocko.block.icon(Cicon.small)).size(8 * 3).padRight(5); - r.add(blocko.block.localizedName).color(Color.lightGray).left(); - r.image(blocko.block.unlocked() ? Icon.ok : Icon.cancel, blocko.block.unlocked() ? Color.lightGray : Color.scarlet).padLeft(3); - r.row(); - } - - }).padTop(10); - } - }).growX(); - - }else{ - cont.add(zone.localizedName).color(Pal.accent).growX().center(); - cont.row(); - cont.image().color(Pal.accent).height(3).pad(6).growX(); - cont.row(); - cont.table(desc -> { - desc.left().defaults().left().width(Core.graphics.isPortrait() ? 350f : 500f); - desc.pane(t -> t.marginRight(12f).add(zone.description).wrap().growX()).fillX().maxHeight(mobile ? 300f : 450f).pad(2).padBottom(8f).get().setScrollingDisabled(true, false); - desc.row(); - - desc.table(t -> { - t.left(); - t.add("$zone.resources").padRight(6); - - /* - if(zone.resources.size > 0){ - t.table(r -> { - t.left(); - int i = 0; - for(Item item : zone.resources){ - r.image(item.icon(Cicon.small)).size(8 * 3); - if(++i % 4 == 0){ - r.row(); - } - } - }); - }else{ - t.add("$none"); - }*/ - }); - - Rules rules = zone.getRules(); - - desc.row(); - desc.add(Core.bundle.format("zone.objective", Core.bundle.get(!rules.attackMode ? "zone.objective.survival" : "zone.objective.attack"))); - - if(zone.bestWave() > 0){ - desc.row(); - desc.add(Core.bundle.format("bestwave", zone.bestWave())); - } - }); - - cont.row(); - } - cont.marginRight(12f); - }); - cont.row(); - - /* - cont.button(zone.canConfigure() ? "$configure" : Core.bundle.format("configure.locked", zone.configureObjective.display()), - () -> loadout.show(zone.loadout.findCore().itemCapacity, zone.getStartingItems(), zone::resetStartingItems, zone::updateLaunchCost, rebuildItems) - ).fillX().pad(3).disabled(b -> !zone.canConfigure());*/ - - cont.row(); - - Button button = cont.button(zone.locked() ? "$uncover" : "$launch", () -> { - if(!data.isUnlocked(zone)){ - Sounds.unlock.play(); - data.unlockContent(zone); - ui.planet.setup(); - setup(zone); - }else{ - ui.planet.hide(); - data.removeItems(zone.getLaunchCost()); - hide(); - //control.playZone(zone); - } - }).minWidth(200f).margin(13f).padTop(5).disabled(b -> zone.locked() ? !zone.canUnlock() : !data.hasItems(zone.getLaunchCost())).uniformY().get(); - - button.row(); - button.add(iteminfo); - } -} diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index b80c86f55c..7cc47d6a71 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -532,7 +532,7 @@ public class HudFragment extends Fragment{ } private void showLaunchConfirm(){ - FloatingDialog dialog = new FloatingDialog("$launch"); + BaseDialog dialog = new BaseDialog("$launch"); dialog.update(() -> { if(!inLaunchWave()){ dialog.hide(); diff --git a/core/src/mindustry/world/blocks/production/ResearchBlock.java b/core/src/mindustry/world/blocks/production/ResearchBlock.java new file mode 100644 index 0000000000..2bf2f4b774 --- /dev/null +++ b/core/src/mindustry/world/blocks/production/ResearchBlock.java @@ -0,0 +1,53 @@ +package mindustry.world.blocks.production; + +import arc.util.ArcAnnotate.*; +import arc.util.io.*; +import mindustry.*; +import mindustry.ctype.*; +import mindustry.gen.*; +import mindustry.world.*; + +public class ResearchBlock extends Block{ + + public ResearchBlock(String name){ + super(name); + + update = true; + solid = true; + hasPower = true; + hasItems = true; + } + + public class ResearchBlockEntity extends TileEntity{ + public @Nullable UnlockableContent researching; + + @Override + public void updateTile(){ + + } + + @Override + public void write(Writes write){ + super.write(write); + + if(researching != null){ + write.b(researching.getContentType().ordinal()); + write.s(researching.id); + }else{ + write.b(-1); + } + } + + @Override + public void read(Reads read, byte revision){ + super.read(read, revision); + + byte type = read.b(); + if(type != -1){ + researching = Vars.content.getByID(ContentType.all[type], read.s()); + }else{ + researching = null; + } + } + } +} diff --git a/core/src/mindustry/world/blocks/storage/MessageBlock.java b/core/src/mindustry/world/blocks/storage/MessageBlock.java index 9fe6535c2f..d3f34b7726 100644 --- a/core/src/mindustry/world/blocks/storage/MessageBlock.java +++ b/core/src/mindustry/world/blocks/storage/MessageBlock.java @@ -98,7 +98,7 @@ public class MessageBlock extends Block{ accepted = str -> configure(str); }}); }else{ - FloatingDialog dialog = new FloatingDialog("$editmessage"); + BaseDialog dialog = new BaseDialog("$editmessage"); dialog.setFillParent(false); TextArea a = dialog.cont.add(new TextArea(message.replace("\n", "\r"))).size(380f, 160f).get(); a.setFilter((textField, c) -> { diff --git a/desktop/src/mindustry/desktop/steam/SWorkshop.java b/desktop/src/mindustry/desktop/steam/SWorkshop.java index 898e4ca1cc..5acd588f6d 100644 --- a/desktop/src/mindustry/desktop/steam/SWorkshop.java +++ b/desktop/src/mindustry/desktop/steam/SWorkshop.java @@ -96,7 +96,7 @@ public class SWorkshop implements SteamUGCCallback{ if(details.getResult() == SteamResult.OK){ if(details.getOwnerID().equals(SVars.user.user.getSteamID())){ - FloatingDialog dialog = new FloatingDialog("$workshop.info"); + BaseDialog dialog = new BaseDialog("$workshop.info"); dialog.setFillParent(false); dialog.cont.add("$workshop.menu").pad(20f); dialog.addCloseButton(); @@ -107,7 +107,7 @@ public class SWorkshop implements SteamUGCCallback{ }).size(210f, 64f); dialog.buttons.button("$workshop.update", Icon.up, () -> { - new FloatingDialog("$workshop.update"){{ + new BaseDialog("$workshop.update"){{ setFillParent(false); cont.margin(10).add("$changelog").padRight(6f); cont.row(); @@ -177,7 +177,7 @@ public class SWorkshop implements SteamUGCCallback{ } void showPublish(Cons published){ - FloatingDialog dialog = new FloatingDialog("$confirm"); + BaseDialog dialog = new BaseDialog("$confirm"); dialog.setFillParent(false); dialog.cont.add("$publish.confirm").width(600f).wrap(); dialog.addCloseButton(); diff --git a/gradle.properties b/gradle.properties index d6e56b4a21..1652cb9f9d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=c8cdb44c30f50d0350c403547ad25532ad77c465 +archash=edaf52e6768e0c24cc4598de8105d07a6c66efd8