diff --git a/res_built/atlas/atlas0_hq.json b/res_built/atlas/atlas0_hq.json index f37ffb8e..1c0cb736 100644 --- a/res_built/atlas/atlas0_hq.json +++ b/res_built/atlas/atlas0_hq.json @@ -10,7 +10,7 @@ }, "sprites/belt/built/forward_1.png": { - "frame": {"x":1814,"y":1070,"w":116,"h":144}, + "frame": {"x":1815,"y":1070,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -18,7 +18,7 @@ }, "sprites/belt/built/forward_2.png": { - "frame": {"x":430,"y":1334,"w":116,"h":144}, + "frame": {"x":1802,"y":1366,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -26,7 +26,7 @@ }, "sprites/belt/built/forward_3.png": { - "frame": {"x":426,"y":1482,"w":116,"h":144}, + "frame": {"x":1922,"y":1405,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -34,7 +34,7 @@ }, "sprites/belt/built/forward_4.png": { - "frame": {"x":3,"y":1884,"w":116,"h":144}, + "frame": {"x":1796,"y":1514,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -42,7 +42,7 @@ }, "sprites/belt/built/forward_5.png": { - "frame": {"x":123,"y":1884,"w":116,"h":144}, + "frame": {"x":1796,"y":1662,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -50,7 +50,7 @@ }, "sprites/belt/built/forward_6.png": { - "frame": {"x":424,"y":1630,"w":116,"h":144}, + "frame": {"x":1916,"y":1693,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -58,7 +58,7 @@ }, "sprites/belt/built/forward_7.png": { - "frame": {"x":243,"y":1881,"w":116,"h":144}, + "frame": {"x":1795,"y":1810,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -66,7 +66,7 @@ }, "sprites/belt/built/forward_8.png": { - "frame": {"x":363,"y":1881,"w":116,"h":144}, + "frame": {"x":145,"y":1887,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -74,7 +74,7 @@ }, "sprites/belt/built/forward_9.png": { - "frame": {"x":483,"y":1778,"w":116,"h":144}, + "frame": {"x":265,"y":1887,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -82,7 +82,7 @@ }, "sprites/belt/built/forward_10.png": { - "frame": {"x":1545,"y":1139,"w":116,"h":144}, + "frame": {"x":1537,"y":1139,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -90,7 +90,7 @@ }, "sprites/belt/built/forward_11.png": { - "frame": {"x":1812,"y":1218,"w":116,"h":144}, + "frame": {"x":1804,"y":1218,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -98,7 +98,7 @@ }, "sprites/belt/built/forward_12.png": { - "frame": {"x":433,"y":1038,"w":116,"h":144}, + "frame": {"x":1924,"y":1257,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -106,7 +106,7 @@ }, "sprites/belt/built/forward_13.png": { - "frame": {"x":431,"y":1186,"w":116,"h":144}, + "frame": {"x":439,"y":1038,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -114,7 +114,7 @@ }, "sprites/belt/built/left_0.png": { - "frame": {"x":151,"y":1035,"w":130,"h":130}, + "frame": {"x":961,"y":1033,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -122,7 +122,7 @@ }, "sprites/belt/built/left_1.png": { - "frame": {"x":151,"y":1169,"w":130,"h":130}, + "frame": {"x":1523,"y":1287,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -130,7 +130,7 @@ }, "sprites/belt/built/left_2.png": { - "frame": {"x":148,"y":1571,"w":130,"h":130}, + "frame": {"x":137,"y":1700,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -138,7 +138,7 @@ }, "sprites/belt/built/left_3.png": { - "frame": {"x":146,"y":1705,"w":130,"h":130}, + "frame": {"x":271,"y":1700,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -146,7 +146,7 @@ }, "sprites/belt/built/left_4.png": { - "frame": {"x":687,"y":1584,"w":130,"h":130}, + "frame": {"x":545,"y":1736,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -154,7 +154,7 @@ }, "sprites/belt/built/left_5.png": { - "frame": {"x":821,"y":1584,"w":130,"h":130}, + "frame": {"x":927,"y":1578,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -162,7 +162,7 @@ }, "sprites/belt/built/left_6.png": { - "frame": {"x":904,"y":1864,"w":130,"h":130}, + "frame": {"x":786,"y":1649,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -170,7 +170,7 @@ }, "sprites/belt/built/left_7.png": { - "frame": {"x":1003,"y":1704,"w":130,"h":130}, + "frame": {"x":645,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -178,7 +178,7 @@ }, "sprites/belt/built/left_8.png": { - "frame": {"x":1087,"y":1508,"w":130,"h":130}, + "frame": {"x":779,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -186,7 +186,7 @@ }, "sprites/belt/built/left_9.png": { - "frame": {"x":1038,"y":1838,"w":130,"h":130}, + "frame": {"x":913,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -194,7 +194,7 @@ }, "sprites/belt/built/left_10.png": { - "frame": {"x":960,"y":1033,"w":130,"h":130}, + "frame": {"x":1519,"y":1421,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -202,7 +202,7 @@ }, "sprites/belt/built/left_11.png": { - "frame": {"x":960,"y":1167,"w":130,"h":130}, + "frame": {"x":1519,"y":1555,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -210,7 +210,7 @@ }, "sprites/belt/built/left_12.png": { - "frame": {"x":151,"y":1303,"w":130,"h":130}, + "frame": {"x":1915,"y":1841,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -218,7 +218,7 @@ }, "sprites/belt/built/left_13.png": { - "frame": {"x":149,"y":1437,"w":130,"h":130}, + "frame": {"x":3,"y":1700,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -226,7 +226,7 @@ }, "sprites/belt/built/right_0.png": { - "frame": {"x":1137,"y":1642,"w":130,"h":130}, + "frame": {"x":1047,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -234,7 +234,7 @@ }, "sprites/belt/built/right_1.png": { - "frame": {"x":1221,"y":1508,"w":130,"h":130}, + "frame": {"x":1181,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -242,7 +242,7 @@ }, "sprites/belt/built/right_2.png": { - "frame": {"x":1803,"y":1428,"w":130,"h":130}, + "frame": {"x":920,"y":1712,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -250,7 +250,7 @@ }, "sprites/belt/built/right_3.png": { - "frame": {"x":1623,"y":1461,"w":130,"h":130}, + "frame": {"x":1054,"y":1735,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -258,7 +258,7 @@ }, "sprites/belt/built/right_4.png": { - "frame": {"x":1489,"y":1555,"w":130,"h":130}, + "frame": {"x":1188,"y":1735,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -266,7 +266,7 @@ }, "sprites/belt/built/right_5.png": { - "frame": {"x":1271,"y":1670,"w":130,"h":130}, + "frame": {"x":1322,"y":1703,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -274,7 +274,7 @@ }, "sprites/belt/built/right_6.png": { - "frame": {"x":1172,"y":1804,"w":130,"h":130}, + "frame": {"x":405,"y":1315,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -282,7 +282,7 @@ }, "sprites/belt/built/right_7.png": { - "frame": {"x":1306,"y":1804,"w":130,"h":130}, + "frame": {"x":405,"y":1449,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -290,7 +290,7 @@ }, "sprites/belt/built/right_8.png": { - "frame": {"x":1757,"y":1562,"w":130,"h":130}, + "frame": {"x":405,"y":1583,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -298,7 +298,7 @@ }, "sprites/belt/built/right_9.png": { - "frame": {"x":1623,"y":1595,"w":130,"h":130}, + "frame": {"x":3,"y":1182,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -306,7 +306,7 @@ }, "sprites/belt/built/right_10.png": { - "frame": {"x":1528,"y":1287,"w":130,"h":130}, + "frame": {"x":1315,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -314,7 +314,7 @@ }, "sprites/belt/built/right_11.png": { - "frame": {"x":1355,"y":1402,"w":130,"h":130}, + "frame": {"x":1449,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -322,7 +322,7 @@ }, "sprites/belt/built/right_12.png": { - "frame": {"x":1489,"y":1421,"w":130,"h":130}, + "frame": {"x":1583,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -330,7 +330,7 @@ }, "sprites/belt/built/right_13.png": { - "frame": {"x":1355,"y":1536,"w":130,"h":130}, + "frame": {"x":1061,"y":1601,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -338,7 +338,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":1891,"y":1562,"w":130,"h":130}, + "frame": {"x":137,"y":1182,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -346,7 +346,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":1440,"y":1689,"w":130,"h":130}, + "frame": {"x":271,"y":1182,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -354,7 +354,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":603,"y":1720,"w":116,"h":144}, + "frame": {"x":385,"y":1887,"w":116,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, @@ -386,7 +386,7 @@ }, "sprites/blueprints/display.png": { - "frame": {"x":955,"y":1564,"w":128,"h":136}, + "frame": {"x":1916,"y":1553,"w":128,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":8,"w":128,"h":136}, @@ -418,7 +418,7 @@ }, "sprites/blueprints/logic_gate-or.png": { - "frame": {"x":1249,"y":989,"w":144,"h":123}, + "frame": {"x":1249,"y":996,"w":144,"h":123}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":123}, @@ -434,7 +434,7 @@ }, "sprites/blueprints/logic_gate-xor.png": { - "frame": {"x":290,"y":890,"w":144,"h":143}, + "frame": {"x":291,"y":890,"w":144,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":143}, @@ -442,7 +442,7 @@ }, "sprites/blueprints/logic_gate.png": { - "frame": {"x":1249,"y":852,"w":144,"h":133}, + "frame": {"x":1397,"y":852,"w":144,"h":133}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133}, @@ -450,7 +450,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":624,"y":1868,"w":136,"h":143}, + "frame": {"x":151,"y":1035,"w":136,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, @@ -458,7 +458,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":723,"y":1718,"w":136,"h":143}, + "frame": {"x":1513,"y":1689,"w":136,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, @@ -506,15 +506,15 @@ }, "sprites/blueprints/reader.png": { - "frame": {"x":1241,"y":1253,"w":142,"h":144}, + "frame": {"x":1086,"y":1313,"w":141,"h":144}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":142,"h":144}, + "spriteSourceSize": {"x":2,"y":0,"w":141,"h":144}, "sourceSize": {"w":144,"h":144} }, "sprites/blueprints/rotater-ccw.png": { - "frame": {"x":1665,"y":1198,"w":143,"h":144}, + "frame": {"x":1243,"y":1123,"w":143,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, @@ -522,7 +522,7 @@ }, "sprites/blueprints/rotater-fl.png": { - "frame": {"x":560,"y":1036,"w":142,"h":144}, + "frame": {"x":940,"y":1167,"w":142,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":142,"h":144}, @@ -530,7 +530,7 @@ }, "sprites/blueprints/rotater.png": { - "frame": {"x":813,"y":1033,"w":143,"h":144}, + "frame": {"x":1390,"y":1126,"w":143,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, @@ -538,7 +538,7 @@ }, "sprites/blueprints/splitter-compact-inverse.png": { - "frame": {"x":285,"y":1182,"w":142,"h":138}, + "frame": {"x":791,"y":1254,"w":142,"h":138}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, @@ -546,7 +546,7 @@ }, "sprites/blueprints/splitter-compact-merge-inverse.png": { - "frame": {"x":3,"y":1326,"w":142,"h":138}, + "frame": {"x":1086,"y":1171,"w":142,"h":138}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, @@ -554,7 +554,7 @@ }, "sprites/blueprints/splitter-compact-merge.png": { - "frame": {"x":551,"y":1324,"w":139,"h":138}, + "frame": {"x":1376,"y":1421,"w":139,"h":138}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, @@ -562,7 +562,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":283,"y":1472,"w":139,"h":138}, + "frame": {"x":1227,"y":1558,"w":139,"h":138}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, @@ -602,7 +602,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":3,"y":1755,"w":138,"h":125}, + "frame": {"x":405,"y":1186,"w":138,"h":125}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":19,"w":138,"h":125}, @@ -610,7 +610,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":893,"y":1448,"w":138,"h":112}, + "frame": {"x":3,"y":1836,"w":138,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":32,"w":138,"h":112}, @@ -618,7 +618,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":550,"y":1466,"w":139,"h":112}, + "frame": {"x":1653,"y":1632,"w":139,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":139,"h":112}, @@ -626,7 +626,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":739,"y":1468,"w":138,"h":112}, + "frame": {"x":645,"y":1377,"w":138,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":138,"h":112}, @@ -642,7 +642,7 @@ }, "sprites/blueprints/virtual_processor-rotater.png": { - "frame": {"x":438,"y":890,"w":118,"h":144}, + "frame": {"x":1545,"y":991,"w":118,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":118,"h":144}, @@ -650,7 +650,7 @@ }, "sprites/blueprints/virtual_processor-shapecompare.png": { - "frame": {"x":1397,"y":852,"w":144,"h":133}, + "frame": {"x":1397,"y":989,"w":144,"h":133}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133}, @@ -666,7 +666,7 @@ }, "sprites/blueprints/virtual_processor.png": { - "frame": {"x":285,"y":1037,"w":144,"h":141}, + "frame": {"x":291,"y":1037,"w":144,"h":141}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":144,"h":141}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/wire-split.png": { - "frame": {"x":1397,"y":989,"w":144,"h":82}, + "frame": {"x":1098,"y":1000,"w":144,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":62,"w":144,"h":82}, @@ -690,7 +690,7 @@ }, "sprites/blueprints/wire-turn.png": { - "frame": {"x":1932,"y":1257,"w":82,"h":82}, + "frame": {"x":707,"y":1036,"w":82,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":62,"y":62,"w":82,"h":82}, @@ -706,15 +706,15 @@ }, "sprites/blueprints/wire_tunnel-coating.png": { - "frame": {"x":255,"y":677,"w":33,"h":135}, + "frame": {"x":255,"y":677,"w":33,"h":134}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":55,"y":4,"w":33,"h":135}, + "spriteSourceSize": {"x":56,"y":5,"w":33,"h":134}, "sourceSize": {"w":144,"h":144} }, "sprites/blueprints/wire_tunnel.png": { - "frame": {"x":282,"y":1614,"w":138,"h":135}, + "frame": {"x":1653,"y":1748,"w":138,"h":135}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":138,"h":135}, @@ -722,7 +722,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":151,"y":1035,"w":130,"h":130}, + "frame": {"x":961,"y":1033,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, @@ -730,7 +730,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":1137,"y":1642,"w":130,"h":130}, + "frame": {"x":1047,"y":1887,"w":130,"h":130}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, @@ -810,7 +810,7 @@ }, "sprites/buildings/logic_gate-or.png": { - "frame": {"x":1388,"y":1160,"w":143,"h":123}, + "frame": {"x":559,"y":1173,"w":143,"h":123}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":123}, @@ -826,7 +826,7 @@ }, "sprites/buildings/logic_gate-xor.png": { - "frame": {"x":1094,"y":1085,"w":143,"h":143}, + "frame": {"x":1657,"y":1198,"w":143,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":143}, @@ -834,7 +834,7 @@ }, "sprites/buildings/logic_gate.png": { - "frame": {"x":1094,"y":1232,"w":143,"h":132}, + "frame": {"x":793,"y":1118,"w":143,"h":132}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":132}, @@ -842,7 +842,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":764,"y":1865,"w":136,"h":142}, + "frame": {"x":505,"y":1887,"w":136,"h":142}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, @@ -850,7 +850,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":863,"y":1718,"w":136,"h":142}, + "frame": {"x":405,"y":1736,"w":136,"h":142}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, @@ -898,7 +898,7 @@ }, "sprites/buildings/reader.png": { - "frame": {"x":285,"y":1324,"w":141,"h":144}, + "frame": {"x":937,"y":1315,"w":141,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":144}, @@ -906,7 +906,7 @@ }, "sprites/buildings/rotater-ccw.png": { - "frame": {"x":3,"y":1468,"w":141,"h":143}, + "frame": {"x":1378,"y":1274,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, @@ -914,7 +914,7 @@ }, "sprites/buildings/rotater-fl.png": { - "frame": {"x":791,"y":1181,"w":141,"h":143}, + "frame": {"x":1231,"y":1411,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":141,"h":143}, @@ -922,7 +922,7 @@ }, "sprites/buildings/rotater.png": { - "frame": {"x":936,"y":1301,"w":141,"h":143}, + "frame": {"x":1657,"y":1345,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, @@ -930,7 +930,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":1081,"y":1368,"w":141,"h":136}, + "frame": {"x":1082,"y":1461,"w":141,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":141,"h":136}, @@ -938,7 +938,7 @@ }, "sprites/buildings/splitter-compact-merge-inverse.png": { - "frame": {"x":553,"y":1184,"w":142,"h":136}, + "frame": {"x":1232,"y":1271,"w":142,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":142,"h":136}, @@ -946,7 +946,7 @@ }, "sprites/buildings/splitter-compact-merge.png": { - "frame": {"x":3,"y":1615,"w":139,"h":136}, + "frame": {"x":1653,"y":1492,"w":139,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, @@ -954,7 +954,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":750,"y":1328,"w":139,"h":136}, + "frame": {"x":1370,"y":1563,"w":139,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, @@ -994,7 +994,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":280,"y":1753,"w":137,"h":124}, + "frame": {"x":645,"y":1493,"w":137,"h":124}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":20,"w":137,"h":124}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":483,"y":1926,"w":137,"h":111}, + "frame": {"x":928,"y":1463,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":33,"w":137,"h":111}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":1387,"y":1287,"w":137,"h":111}, + "frame": {"x":786,"y":1534,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, @@ -1018,7 +1018,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":1662,"y":1346,"w":137,"h":111}, + "frame": {"x":645,"y":1621,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, @@ -1034,7 +1034,7 @@ }, "sprites/buildings/virtual_processor-rotater.png": { - "frame": {"x":1545,"y":991,"w":117,"h":144}, + "frame": {"x":439,"y":890,"w":117,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":117,"h":144}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/virtual_processor-shapecompare.png": { - "frame": {"x":1241,"y":1116,"w":143,"h":133}, + "frame": {"x":560,"y":1036,"w":143,"h":133}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":133}, @@ -1058,7 +1058,7 @@ }, "sprites/buildings/virtual_processor.png": { - "frame": {"x":3,"y":1182,"w":144,"h":140}, + "frame": {"x":1249,"y":852,"w":144,"h":140}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":144,"h":140}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/wire-split.png": { - "frame": {"x":1098,"y":1000,"w":144,"h":81}, + "frame": {"x":1667,"y":1028,"w":144,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, @@ -1098,15 +1098,15 @@ }, "sprites/buildings/wire_tunnel-coating.png": { - "frame": {"x":255,"y":816,"w":31,"h":134}, + "frame": {"x":255,"y":815,"w":32,"h":134}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":56,"y":5,"w":31,"h":134}, + "spriteSourceSize": {"x":56,"y":5,"w":32,"h":134}, "sourceSize": {"w":144,"h":144} }, "sprites/buildings/wire_tunnel.png": { - "frame": {"x":546,"y":1582,"w":137,"h":134}, + "frame": {"x":787,"y":1396,"w":137,"h":134}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":137,"h":134}, @@ -1138,7 +1138,7 @@ }, "sprites/misc/processor_disabled.png": { - "frame": {"x":699,"y":1206,"w":78,"h":81}, + "frame": {"x":3,"y":1958,"w":78,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":10,"y":10,"w":78,"h":81}, @@ -1178,7 +1178,7 @@ }, "sprites/misc/storage_overlay.png": { - "frame": {"x":1934,"y":1209,"w":89,"h":44}, + "frame": {"x":1935,"y":1209,"w":89,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":89,"h":44}, @@ -1186,7 +1186,7 @@ }, "sprites/misc/waypoint.png": { - "frame": {"x":893,"y":1328,"w":38,"h":48}, + "frame": {"x":292,"y":1834,"w":38,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, @@ -1194,7 +1194,7 @@ }, "sprites/wires/boolean_false.png": { - "frame": {"x":255,"y":954,"w":31,"h":41}, + "frame": {"x":255,"y":953,"w":31,"h":41}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":5,"w":31,"h":41}, @@ -1250,7 +1250,7 @@ }, "sprites/wires/display/white.png": { - "frame": {"x":699,"y":1291,"w":47,"h":47}, + "frame": {"x":145,"y":1836,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, @@ -1258,7 +1258,7 @@ }, "sprites/wires/display/yellow.png": { - "frame": {"x":694,"y":1342,"w":47,"h":47}, + "frame": {"x":196,"y":1836,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, @@ -1290,7 +1290,7 @@ }, "sprites/wires/network_conflict.png": { - "frame": {"x":694,"y":1393,"w":47,"h":44}, + "frame": {"x":85,"y":1952,"w":47,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":2,"w":47,"h":44}, @@ -1298,7 +1298,7 @@ }, "sprites/wires/network_empty.png": { - "frame": {"x":694,"y":1441,"w":41,"h":48}, + "frame": {"x":247,"y":1834,"w":41,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":41,"h":48}, @@ -1306,7 +1306,7 @@ }, "sprites/wires/overlay_tile.png": { - "frame": {"x":1934,"y":1109,"w":96,"h":96}, + "frame": {"x":1935,"y":1109,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/sets/color_split.png": { - "frame": {"x":1397,"y":1075,"w":144,"h":81}, + "frame": {"x":1667,"y":1113,"w":144,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, @@ -1338,7 +1338,7 @@ }, "sprites/wires/sets/color_turn.png": { - "frame": {"x":1932,"y":1343,"w":81,"h":81}, + "frame": {"x":707,"y":1122,"w":81,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/sets/conflict_split.png": { - "frame": {"x":1666,"y":1028,"w":144,"h":81}, + "frame": {"x":813,"y":1033,"w":144,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, @@ -1370,7 +1370,7 @@ }, "sprites/wires/sets/conflict_turn.png": { - "frame": {"x":706,"y":1036,"w":81,"h":81}, + "frame": {"x":706,"y":1207,"w":81,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81}, @@ -1394,7 +1394,7 @@ }, "sprites/wires/sets/regular_split.png": { - "frame": {"x":1098,"y":1000,"w":144,"h":81}, + "frame": {"x":1667,"y":1028,"w":144,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, @@ -1426,7 +1426,7 @@ }, "sprites/wires/sets/shape_split.png": { - "frame": {"x":1666,"y":1113,"w":144,"h":81}, + "frame": {"x":1095,"y":1086,"w":144,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, @@ -1434,7 +1434,7 @@ }, "sprites/wires/sets/shape_turn.png": { - "frame": {"x":706,"y":1121,"w":81,"h":81}, + "frame": {"x":706,"y":1292,"w":81,"h":81}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81}, @@ -1455,6 +1455,6 @@ "format": "RGBA8888", "size": {"w":2048,"h":2048}, "scale": "0.75", - "smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$" + "smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$" } } diff --git a/res_built/atlas/atlas0_hq.png b/res_built/atlas/atlas0_hq.png index a5f78e0c..c7e5c979 100644 Binary files a/res_built/atlas/atlas0_hq.png and b/res_built/atlas/atlas0_hq.png differ diff --git a/res_built/atlas/atlas0_lq.json b/res_built/atlas/atlas0_lq.json index 290bb8c7..c4702db9 100644 --- a/res_built/atlas/atlas0_lq.json +++ b/res_built/atlas/atlas0_lq.json @@ -10,7 +10,7 @@ }, "sprites/belt/built/forward_1.png": { - "frame": {"x":405,"y":817,"w":40,"h":48}, + "frame": {"x":3,"y":939,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -18,7 +18,7 @@ }, "sprites/belt/built/forward_2.png": { - "frame": {"x":3,"y":930,"w":40,"h":48}, + "frame": {"x":179,"y":969,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -26,7 +26,7 @@ }, "sprites/belt/built/forward_3.png": { - "frame": {"x":95,"y":960,"w":40,"h":48}, + "frame": {"x":407,"y":864,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -34,7 +34,7 @@ }, "sprites/belt/built/forward_4.png": { - "frame": {"x":139,"y":960,"w":40,"h":48}, + "frame": {"x":352,"y":869,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -42,7 +42,7 @@ }, "sprites/belt/built/forward_5.png": { - "frame": {"x":183,"y":954,"w":40,"h":48}, + "frame": {"x":300,"y":883,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -50,7 +50,7 @@ }, "sprites/belt/built/forward_6.png": { - "frame": {"x":449,"y":823,"w":40,"h":48}, + "frame": {"x":249,"y":893,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -58,7 +58,7 @@ }, "sprites/belt/built/forward_7.png": { - "frame": {"x":400,"y":869,"w":40,"h":48}, + "frame": {"x":451,"y":864,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -66,7 +66,7 @@ }, "sprites/belt/built/forward_8.png": { - "frame": {"x":352,"y":913,"w":40,"h":48}, + "frame": {"x":223,"y":945,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -74,7 +74,7 @@ }, "sprites/belt/built/forward_9.png": { - "frame": {"x":300,"y":925,"w":40,"h":48}, + "frame": {"x":267,"y":945,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -82,7 +82,7 @@ }, "sprites/belt/built/forward_10.png": { - "frame": {"x":201,"y":901,"w":40,"h":48}, + "frame": {"x":47,"y":961,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -90,7 +90,7 @@ }, "sprites/belt/built/forward_11.png": { - "frame": {"x":150,"y":902,"w":40,"h":48}, + "frame": {"x":91,"y":961,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -98,7 +98,7 @@ }, "sprites/belt/built/forward_12.png": { - "frame": {"x":99,"y":908,"w":40,"h":48}, + "frame": {"x":135,"y":941,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -106,7 +106,7 @@ }, "sprites/belt/built/forward_13.png": { - "frame": {"x":51,"y":927,"w":40,"h":48}, + "frame": {"x":179,"y":917,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -154,7 +154,7 @@ }, "sprites/belt/built/left_5.png": { - "frame": {"x":261,"y":749,"w":44,"h":44}, + "frame": {"x":275,"y":707,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, @@ -162,7 +162,7 @@ }, "sprites/belt/built/left_6.png": { - "frame": {"x":208,"y":757,"w":44,"h":44}, + "frame": {"x":323,"y":739,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, @@ -170,7 +170,7 @@ }, "sprites/belt/built/left_7.png": { - "frame": {"x":363,"y":769,"w":44,"h":44}, + "frame": {"x":208,"y":759,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, @@ -178,7 +178,7 @@ }, "sprites/belt/built/left_8.png": { - "frame": {"x":309,"y":781,"w":44,"h":44}, + "frame": {"x":156,"y":773,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, @@ -186,7 +186,7 @@ }, "sprites/belt/built/left_9.png": { - "frame": {"x":256,"y":797,"w":44,"h":44}, + "frame": {"x":105,"y":797,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, @@ -226,7 +226,7 @@ }, "sprites/belt/built/right_0.png": { - "frame": {"x":208,"y":805,"w":44,"h":44}, + "frame": {"x":54,"y":817,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -234,7 +234,7 @@ }, "sprites/belt/built/right_1.png": { - "frame": {"x":156,"y":806,"w":44,"h":44}, + "frame": {"x":3,"y":843,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -242,7 +242,7 @@ }, "sprites/belt/built/right_2.png": { - "frame": {"x":304,"y":829,"w":44,"h":44}, + "frame": {"x":102,"y":845,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -250,7 +250,7 @@ }, "sprites/belt/built/right_3.png": { - "frame": {"x":256,"y":845,"w":44,"h":44}, + "frame": {"x":51,"y":865,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -258,7 +258,7 @@ }, "sprites/belt/built/right_4.png": { - "frame": {"x":204,"y":853,"w":44,"h":44}, + "frame": {"x":3,"y":891,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -266,7 +266,7 @@ }, "sprites/belt/built/right_5.png": { - "frame": {"x":153,"y":854,"w":44,"h":44}, + "frame": {"x":359,"y":821,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -274,7 +274,7 @@ }, "sprites/belt/built/right_6.png": { - "frame": {"x":102,"y":860,"w":44,"h":44}, + "frame": {"x":304,"y":835,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -282,7 +282,7 @@ }, "sprites/belt/built/right_7.png": { - "frame": {"x":51,"y":879,"w":44,"h":44}, + "frame": {"x":252,"y":845,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -290,7 +290,7 @@ }, "sprites/belt/built/right_8.png": { - "frame": {"x":3,"y":882,"w":44,"h":44}, + "frame": {"x":201,"y":855,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -298,7 +298,7 @@ }, "sprites/belt/built/right_9.png": { - "frame": {"x":352,"y":865,"w":44,"h":44}, + "frame": {"x":150,"y":869,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -306,7 +306,7 @@ }, "sprites/belt/built/right_10.png": { - "frame": {"x":105,"y":812,"w":44,"h":44}, + "frame": {"x":311,"y":787,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -314,7 +314,7 @@ }, "sprites/belt/built/right_11.png": { - "frame": {"x":54,"y":831,"w":44,"h":44}, + "frame": {"x":256,"y":797,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -322,7 +322,7 @@ }, "sprites/belt/built/right_12.png": { - "frame": {"x":3,"y":834,"w":44,"h":44}, + "frame": {"x":204,"y":807,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -330,7 +330,7 @@ }, "sprites/belt/built/right_13.png": { - "frame": {"x":357,"y":817,"w":44,"h":44}, + "frame": {"x":153,"y":821,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -338,7 +338,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":304,"y":877,"w":44,"h":44}, + "frame": {"x":99,"y":893,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, @@ -346,7 +346,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":252,"y":893,"w":44,"h":44}, + "frame": {"x":51,"y":913,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -354,7 +354,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":344,"y":965,"w":40,"h":48}, + "frame": {"x":311,"y":935,"w":40,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, @@ -418,7 +418,7 @@ }, "sprites/blueprints/logic_gate-or.png": { - "frame": {"x":371,"y":723,"w":48,"h":42}, + "frame": {"x":423,"y":818,"w":48,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":42}, @@ -442,7 +442,7 @@ }, "sprites/blueprints/logic_gate.png": { - "frame": {"x":55,"y":555,"w":48,"h":45}, + "frame": {"x":171,"y":622,"w":48,"h":45}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, @@ -450,7 +450,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":55,"y":682,"w":47,"h":48}, + "frame": {"x":107,"y":648,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -458,7 +458,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":3,"y":689,"w":47,"h":48}, + "frame": {"x":55,"y":672,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -554,7 +554,7 @@ }, "sprites/blueprints/splitter-compact-merge.png": { - "frame": {"x":54,"y":734,"w":47,"h":47}, + "frame": {"x":106,"y":700,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, @@ -562,7 +562,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":3,"y":741,"w":47,"h":47}, + "frame": {"x":54,"y":724,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, @@ -602,7 +602,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":223,"y":659,"w":48,"h":43}, + "frame": {"x":447,"y":771,"w":48,"h":43}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":5,"w":48,"h":43}, @@ -610,7 +610,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":3,"y":605,"w":48,"h":38}, + "frame": {"x":55,"y":556,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":10,"w":48,"h":38}, @@ -618,7 +618,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":3,"y":647,"w":48,"h":38}, + "frame": {"x":55,"y":598,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, @@ -626,7 +626,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":107,"y":604,"w":48,"h":38}, + "frame": {"x":107,"y":606,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, @@ -650,7 +650,7 @@ }, "sprites/blueprints/virtual_processor-shapecompare.png": { - "frame": {"x":3,"y":556,"w":48,"h":45}, + "frame": {"x":223,"y":659,"w":48,"h":45}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, @@ -698,7 +698,7 @@ }, "sprites/blueprints/wire.png": { - "frame": {"x":437,"y":722,"w":8,"h":48}, + "frame": {"x":159,"y":520,"w":8,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, @@ -706,15 +706,15 @@ }, "sprites/blueprints/wire_tunnel-coating.png": { - "frame": {"x":425,"y":638,"w":13,"h":47}, + "frame": {"x":425,"y":655,"w":12,"h":46}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":17,"y":0,"w":13,"h":47}, + "spriteSourceSize": {"x":18,"y":1,"w":12,"h":46}, "sourceSize": {"w":48,"h":48} }, "sprites/blueprints/wire_tunnel.png": { - "frame": {"x":55,"y":504,"w":48,"h":47}, + "frame": {"x":107,"y":504,"w":48,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, @@ -730,7 +730,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":208,"y":805,"w":44,"h":44}, + "frame": {"x":54,"y":817,"w":44,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, @@ -810,7 +810,7 @@ }, "sprites/buildings/logic_gate-or.png": { - "frame": {"x":55,"y":604,"w":48,"h":42}, + "frame": {"x":3,"y":556,"w":48,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":42}, @@ -834,7 +834,7 @@ }, "sprites/buildings/logic_gate.png": { - "frame": {"x":107,"y":555,"w":48,"h":45}, + "frame": {"x":371,"y":723,"w":48,"h":45}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, @@ -842,7 +842,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":159,"y":703,"w":47,"h":48}, + "frame": {"x":3,"y":698,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -850,7 +850,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":106,"y":710,"w":47,"h":48}, + "frame": {"x":158,"y":671,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -930,7 +930,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":107,"y":504,"w":48,"h":47}, + "frame": {"x":107,"y":555,"w":48,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, @@ -946,7 +946,7 @@ }, "sprites/buildings/splitter-compact-merge.png": { - "frame": {"x":210,"y":706,"w":47,"h":47}, + "frame": {"x":3,"y":750,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, @@ -954,7 +954,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":157,"y":755,"w":47,"h":47}, + "frame": {"x":209,"y":708,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, @@ -994,7 +994,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":54,"y":785,"w":47,"h":42}, + "frame": {"x":105,"y":751,"w":47,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":6,"w":47,"h":42}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":3,"y":792,"w":47,"h":38}, + "frame": {"x":54,"y":775,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":10,"w":47,"h":38}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":261,"y":707,"w":47,"h":38}, + "frame": {"x":3,"y":801,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, @@ -1018,7 +1018,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":312,"y":739,"w":47,"h":38}, + "frame": {"x":260,"y":755,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/virtual_processor-shapecompare.png": { - "frame": {"x":171,"y":622,"w":48,"h":45}, + "frame": {"x":371,"y":772,"w":48,"h":45}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, @@ -1066,7 +1066,7 @@ }, "sprites/buildings/wire-cross.png": { - "frame": {"x":459,"y":667,"w":48,"h":48}, + "frame": {"x":457,"y":667,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/wire-split.png": { - "frame": {"x":107,"y":646,"w":48,"h":28}, + "frame": {"x":3,"y":602,"w":48,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, @@ -1090,7 +1090,7 @@ }, "sprites/buildings/wire.png": { - "frame": {"x":501,"y":771,"w":8,"h":48}, + "frame": {"x":159,"y":572,"w":8,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, @@ -1098,7 +1098,7 @@ }, "sprites/buildings/wire_tunnel-coating.png": { - "frame": {"x":442,"y":672,"w":12,"h":46}, + "frame": {"x":441,"y":655,"w":12,"h":46}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":18,"y":1,"w":12,"h":46}, @@ -1106,7 +1106,7 @@ }, "sprites/buildings/wire_tunnel.png": { - "frame": {"x":105,"y":762,"w":47,"h":46}, + "frame": {"x":157,"y":723,"w":47,"h":46}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":47,"h":46}, @@ -1162,7 +1162,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":442,"y":638,"w":13,"h":13}, + "frame": {"x":425,"y":638,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -1170,7 +1170,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":442,"y":655,"w":13,"h":13}, + "frame": {"x":442,"y":638,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -1194,7 +1194,7 @@ }, "sprites/wires/boolean_false.png": { - "frame": {"x":424,"y":689,"w":12,"h":15}, + "frame": {"x":424,"y":705,"w":12,"h":15}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":1,"w":12,"h":15}, @@ -1202,7 +1202,7 @@ }, "sprites/wires/boolean_true.png": { - "frame": {"x":424,"y":708,"w":9,"h":15}, + "frame": {"x":440,"y":705,"w":9,"h":15}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":1,"w":9,"h":15}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/sets/color_cross.png": { - "frame": {"x":458,"y":719,"w":48,"h":48}, + "frame": {"x":453,"y":719,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -1322,7 +1322,7 @@ }, "sprites/wires/sets/color_forward.png": { - "frame": {"x":159,"y":520,"w":8,"h":48}, + "frame": {"x":423,"y":724,"w":8,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/sets/color_split.png": { - "frame": {"x":55,"y":650,"w":48,"h":28}, + "frame": {"x":3,"y":634,"w":48,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/sets/conflict_cross.png": { - "frame": {"x":449,"y":771,"w":48,"h":48}, + "frame": {"x":3,"y":504,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/sets/conflict_forward.png": { - "frame": {"x":159,"y":572,"w":8,"h":48}, + "frame": {"x":435,"y":724,"w":8,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/sets/conflict_split.png": { - "frame": {"x":159,"y":671,"w":48,"h":28}, + "frame": {"x":55,"y":640,"w":48,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/sets/regular_cross.png": { - "frame": {"x":459,"y":667,"w":48,"h":48}, + "frame": {"x":457,"y":667,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -1386,7 +1386,7 @@ }, "sprites/wires/sets/regular_forward.png": { - "frame": {"x":501,"y":771,"w":8,"h":48}, + "frame": {"x":159,"y":572,"w":8,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, @@ -1394,7 +1394,7 @@ }, "sprites/wires/sets/regular_split.png": { - "frame": {"x":107,"y":646,"w":48,"h":28}, + "frame": {"x":3,"y":602,"w":48,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, @@ -1410,7 +1410,7 @@ }, "sprites/wires/sets/shape_cross.png": { - "frame": {"x":3,"y":504,"w":48,"h":48}, + "frame": {"x":55,"y":504,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -1418,7 +1418,7 @@ }, "sprites/wires/sets/shape_forward.png": { - "frame": {"x":423,"y":727,"w":8,"h":48}, + "frame": {"x":499,"y":771,"w":8,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, @@ -1426,7 +1426,7 @@ }, "sprites/wires/sets/shape_split.png": { - "frame": {"x":107,"y":678,"w":48,"h":28}, + "frame": {"x":3,"y":666,"w":48,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, @@ -1455,6 +1455,6 @@ "format": "RGBA8888", "size": {"w":512,"h":1024}, "scale": "0.25", - "smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$" + "smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$" } } diff --git a/res_built/atlas/atlas0_lq.png b/res_built/atlas/atlas0_lq.png index ae088ef8..7a18ee17 100644 Binary files a/res_built/atlas/atlas0_lq.png and b/res_built/atlas/atlas0_lq.png differ diff --git a/res_built/atlas/atlas0_mq.json b/res_built/atlas/atlas0_mq.json index 87b9f896..72e36985 100644 --- a/res_built/atlas/atlas0_mq.json +++ b/res_built/atlas/atlas0_mq.json @@ -2,7 +2,7 @@ "sprites/belt/built/forward_0.png": { - "frame": {"x":943,"y":842,"w":78,"h":96}, + "frame": {"x":943,"y":803,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -10,7 +10,7 @@ }, "sprites/belt/built/forward_1.png": { - "frame": {"x":821,"y":990,"w":78,"h":96}, + "frame": {"x":891,"y":1749,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -18,7 +18,7 @@ }, "sprites/belt/built/forward_2.png": { - "frame": {"x":3,"y":1868,"w":78,"h":96}, + "frame": {"x":331,"y":1550,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -26,7 +26,7 @@ }, "sprites/belt/built/forward_3.png": { - "frame": {"x":853,"y":1502,"w":78,"h":96}, + "frame": {"x":413,"y":1639,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -34,7 +34,7 @@ }, "sprites/belt/built/forward_4.png": { - "frame": {"x":935,"y":1502,"w":78,"h":96}, + "frame": {"x":495,"y":1695,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -42,7 +42,7 @@ }, "sprites/belt/built/forward_5.png": { - "frame": {"x":762,"y":1554,"w":78,"h":96}, + "frame": {"x":577,"y":1756,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -50,7 +50,7 @@ }, "sprites/belt/built/forward_6.png": { - "frame": {"x":661,"y":1624,"w":78,"h":96}, + "frame": {"x":659,"y":1834,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -58,7 +58,7 @@ }, "sprites/belt/built/forward_7.png": { - "frame": {"x":557,"y":1641,"w":78,"h":96}, + "frame": {"x":3,"y":1934,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -66,7 +66,7 @@ }, "sprites/belt/built/forward_8.png": { - "frame": {"x":459,"y":1695,"w":78,"h":96}, + "frame": {"x":85,"y":1538,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -74,7 +74,7 @@ }, "sprites/belt/built/forward_9.png": { - "frame": {"x":362,"y":1704,"w":78,"h":96}, + "frame": {"x":3,"y":1538,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -82,7 +82,7 @@ }, "sprites/belt/built/forward_10.png": { - "frame": {"x":819,"y":1090,"w":78,"h":96}, + "frame": {"x":3,"y":1438,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -90,7 +90,7 @@ }, "sprites/belt/built/forward_11.png": { - "frame": {"x":185,"y":1694,"w":78,"h":96}, + "frame": {"x":85,"y":1438,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -98,7 +98,7 @@ }, "sprites/belt/built/forward_12.png": { - "frame": {"x":94,"y":1706,"w":78,"h":96}, + "frame": {"x":167,"y":1502,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -106,7 +106,7 @@ }, "sprites/belt/built/forward_13.png": { - "frame": {"x":3,"y":1768,"w":78,"h":96}, + "frame": {"x":249,"y":1530,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -114,7 +114,7 @@ }, "sprites/belt/built/left_0.png": { - "frame": {"x":196,"y":1421,"w":87,"h":87}, + "frame": {"x":931,"y":903,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -122,7 +122,7 @@ }, "sprites/belt/built/left_1.png": { - "frame": {"x":99,"y":1433,"w":87,"h":87}, + "frame": {"x":403,"y":911,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -130,7 +130,7 @@ }, "sprites/belt/built/left_2.png": { - "frame": {"x":489,"y":1328,"w":87,"h":87}, + "frame": {"x":663,"y":1383,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -138,7 +138,7 @@ }, "sprites/belt/built/left_3.png": { - "frame": {"x":883,"y":1229,"w":87,"h":87}, + "frame": {"x":572,"y":1418,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -146,7 +146,7 @@ }, "sprites/belt/built/left_4.png": { - "frame": {"x":782,"y":1281,"w":87,"h":87}, + "frame": {"x":754,"y":1461,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -154,7 +154,7 @@ }, "sprites/belt/built/left_5.png": { - "frame": {"x":681,"y":1351,"w":87,"h":87}, + "frame": {"x":663,"y":1474,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -162,7 +162,7 @@ }, "sprites/belt/built/left_6.png": { - "frame": {"x":580,"y":1364,"w":87,"h":87}, + "frame": {"x":845,"y":1464,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -170,7 +170,7 @@ }, "sprites/belt/built/left_7.png": { - "frame": {"x":489,"y":1419,"w":87,"h":87}, + "frame": {"x":754,"y":1552,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -178,7 +178,7 @@ }, "sprites/belt/built/left_8.png": { - "frame": {"x":389,"y":1422,"w":87,"h":87}, + "frame": {"x":845,"y":1555,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -186,7 +186,7 @@ }, "sprites/belt/built/left_9.png": { - "frame": {"x":287,"y":1494,"w":87,"h":87}, + "frame": {"x":3,"y":1256,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -194,7 +194,7 @@ }, "sprites/belt/built/left_10.png": { - "frame": {"x":3,"y":1495,"w":87,"h":87}, + "frame": {"x":401,"y":1002,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -202,7 +202,7 @@ }, "sprites/belt/built/left_11.png": { - "frame": {"x":792,"y":1190,"w":87,"h":87}, + "frame": {"x":481,"y":1275,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -210,7 +210,7 @@ }, "sprites/belt/built/left_12.png": { - "frame": {"x":691,"y":1260,"w":87,"h":87}, + "frame": {"x":572,"y":1327,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -218,7 +218,7 @@ }, "sprites/belt/built/left_13.png": { - "frame": {"x":590,"y":1273,"w":87,"h":87}, + "frame": {"x":481,"y":1366,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -226,7 +226,7 @@ }, "sprites/belt/built/right_0.png": { - "frame": {"x":190,"y":1512,"w":87,"h":87}, + "frame": {"x":94,"y":1256,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -234,7 +234,7 @@ }, "sprites/belt/built/right_1.png": { - "frame": {"x":94,"y":1524,"w":87,"h":87}, + "frame": {"x":185,"y":1320,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -242,7 +242,7 @@ }, "sprites/belt/built/right_2.png": { - "frame": {"x":580,"y":1455,"w":87,"h":87}, + "frame": {"x":640,"y":1565,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -250,7 +250,7 @@ }, "sprites/belt/built/right_3.png": { - "frame": {"x":480,"y":1510,"w":87,"h":87}, + "frame": {"x":731,"y":1643,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -258,7 +258,7 @@ }, "sprites/belt/built/right_4.png": { - "frame": {"x":378,"y":1513,"w":87,"h":87}, + "frame": {"x":822,"y":1646,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -266,7 +266,7 @@ }, "sprites/belt/built/right_5.png": { - "frame": {"x":281,"y":1585,"w":87,"h":87}, + "frame": {"x":913,"y":1658,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -274,7 +274,7 @@ }, "sprites/belt/built/right_6.png": { - "frame": {"x":185,"y":1603,"w":87,"h":87}, + "frame": {"x":3,"y":1347,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -282,7 +282,7 @@ }, "sprites/belt/built/right_7.png": { - "frame": {"x":94,"y":1615,"w":87,"h":87}, + "frame": {"x":94,"y":1347,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -290,7 +290,7 @@ }, "sprites/belt/built/right_8.png": { - "frame": {"x":3,"y":1677,"w":87,"h":87}, + "frame": {"x":185,"y":1411,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -298,7 +298,7 @@ }, "sprites/belt/built/right_9.png": { - "frame": {"x":863,"y":1411,"w":87,"h":87}, + "frame": {"x":276,"y":1439,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -306,7 +306,7 @@ }, "sprites/belt/built/right_10.png": { - "frame": {"x":3,"y":1586,"w":87,"h":87}, + "frame": {"x":276,"y":1348,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -314,7 +314,7 @@ }, "sprites/belt/built/right_11.png": { - "frame": {"x":873,"y":1320,"w":87,"h":87}, + "frame": {"x":367,"y":1368,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -322,7 +322,7 @@ }, "sprites/belt/built/right_12.png": { - "frame": {"x":772,"y":1372,"w":87,"h":87}, + "frame": {"x":458,"y":1457,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -330,7 +330,7 @@ }, "sprites/belt/built/right_13.png": { - "frame": {"x":671,"y":1442,"w":87,"h":87}, + "frame": {"x":549,"y":1509,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -338,7 +338,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":762,"y":1463,"w":87,"h":87}, + "frame": {"x":367,"y":1459,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -346,7 +346,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":671,"y":1533,"w":87,"h":87}, + "frame": {"x":458,"y":1548,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -354,7 +354,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":267,"y":1776,"w":78,"h":96}, + "frame": {"x":167,"y":1602,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -386,7 +386,7 @@ }, "sprites/blueprints/display.png": { - "frame": {"x":571,"y":1546,"w":86,"h":91}, + "frame": {"x":549,"y":1600,"w":86,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":86,"h":91}, @@ -402,7 +402,7 @@ }, "sprites/blueprints/lever.png": { - "frame": {"x":946,"y":752,"w":75,"h":86}, + "frame": {"x":85,"y":1638,"w":75,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":3,"w":75,"h":86}, @@ -410,7 +410,7 @@ }, "sprites/blueprints/logic_gate-not.png": { - "frame": {"x":372,"y":1604,"w":83,"h":96}, + "frame": {"x":936,"y":1558,"w":83,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":83,"h":96}, @@ -418,7 +418,7 @@ }, "sprites/blueprints/logic_gate-or.png": { - "frame": {"x":3,"y":874,"w":96,"h":82}, + "frame": {"x":203,"y":861,"w":96,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":82}, @@ -426,7 +426,7 @@ }, "sprites/blueprints/logic_gate-transistor.png": { - "frame": {"x":451,"y":754,"w":68,"h":96}, + "frame": {"x":451,"y":703,"w":68,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96}, @@ -442,7 +442,7 @@ }, "sprites/blueprints/logic_gate.png": { - "frame": {"x":419,"y":954,"w":96,"h":89}, + "frame": {"x":910,"y":1094,"w":96,"h":89}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89}, @@ -450,7 +450,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":298,"y":1295,"w":92,"h":96}, + "frame": {"x":585,"y":1227,"w":92,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, @@ -458,7 +458,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":198,"y":1321,"w":92,"h":96}, + "frame": {"x":681,"y":1283,"w":92,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, @@ -506,7 +506,7 @@ }, "sprites/blueprints/reader.png": { - "frame": {"x":3,"y":1018,"w":95,"h":96}, + "frame": {"x":203,"y":947,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, @@ -522,7 +522,7 @@ }, "sprites/blueprints/rotater-fl.png": { - "frame": {"x":303,"y":1001,"w":95,"h":96}, + "frame": {"x":302,"y":961,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":95,"h":96}, @@ -538,7 +538,7 @@ }, "sprites/blueprints/splitter-compact-inverse.png": { - "frame": {"x":302,"y":1101,"w":95,"h":93}, + "frame": {"x":399,"y":1093,"w":95,"h":93}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":95,"h":93}, @@ -546,7 +546,7 @@ }, "sprites/blueprints/splitter-compact-merge-inverse.png": { - "frame": {"x":201,"y":1129,"w":95,"h":93}, + "frame": {"x":498,"y":1099,"w":95,"h":93}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":95,"h":93}, @@ -554,7 +554,7 @@ }, "sprites/blueprints/splitter-compact-merge.png": { - "frame": {"x":401,"y":1147,"w":93,"h":93}, + "frame": {"x":794,"y":1270,"w":93,"h":93}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":1,"w":93,"h":93}, @@ -562,7 +562,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":300,"y":1198,"w":93,"h":93}, + "frame": {"x":891,"y":1280,"w":93,"h":93}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":1,"w":93,"h":93}, @@ -602,7 +602,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":599,"y":1107,"w":93,"h":84}, + "frame": {"x":294,"y":1161,"w":93,"h":84}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":12,"w":93,"h":84}, @@ -610,7 +610,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":498,"y":1171,"w":93,"h":75}, + "frame": {"x":391,"y":1190,"w":93,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":21,"w":93,"h":75}, @@ -618,7 +618,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":501,"y":1092,"w":94,"h":75}, + "frame": {"x":794,"y":1191,"w":94,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":94,"h":75}, @@ -626,7 +626,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":397,"y":1244,"w":93,"h":75}, + "frame": {"x":488,"y":1196,"w":93,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":93,"h":75}, @@ -634,7 +634,7 @@ }, "sprites/blueprints/virtual_processor-analyzer.png": { - "frame": {"x":349,"y":803,"w":96,"h":96}, + "frame": {"x":523,"y":799,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -642,7 +642,7 @@ }, "sprites/blueprints/virtual_processor-rotater.png": { - "frame": {"x":823,"y":890,"w":79,"h":96}, + "frame": {"x":725,"y":1734,"w":79,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":79,"h":96}, @@ -650,7 +650,7 @@ }, "sprites/blueprints/virtual_processor-shapecompare.png": { - "frame": {"x":519,"y":999,"w":96,"h":89}, + "frame": {"x":910,"y":1187,"w":96,"h":89}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89}, @@ -658,7 +658,7 @@ }, "sprites/blueprints/virtual_processor-unstacker.png": { - "frame": {"x":523,"y":799,"w":96,"h":96}, + "frame": {"x":349,"y":803,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -666,7 +666,7 @@ }, "sprites/blueprints/virtual_processor.png": { - "frame": {"x":203,"y":873,"w":96,"h":94}, + "frame": {"x":710,"y":1090,"w":96,"h":94}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":96,"h":94}, @@ -674,7 +674,7 @@ }, "sprites/blueprints/wire-cross.png": { - "frame": {"x":623,"y":814,"w":96,"h":96}, + "frame": {"x":522,"y":899,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/wire-split.png": { - "frame": {"x":103,"y":874,"w":96,"h":55}, + "frame": {"x":103,"y":866,"w":96,"h":55}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":41,"w":96,"h":55}, @@ -706,15 +706,15 @@ }, "sprites/blueprints/wire_tunnel-coating.png": { - "frame": {"x":921,"y":594,"w":23,"h":91}, + "frame": {"x":921,"y":594,"w":23,"h":90}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":36,"y":2,"w":23,"h":91}, + "spriteSourceSize": {"x":37,"y":3,"w":23,"h":90}, "sourceSize": {"w":96,"h":96} }, "sprites/blueprints/wire_tunnel.png": { - "frame": {"x":201,"y":1226,"w":93,"h":91}, + "frame": {"x":3,"y":1083,"w":93,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":93,"h":91}, @@ -722,7 +722,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":196,"y":1421,"w":87,"h":87}, + "frame": {"x":931,"y":903,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, @@ -730,7 +730,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":190,"y":1512,"w":87,"h":87}, + "frame": {"x":94,"y":1256,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, @@ -738,7 +738,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":943,"y":842,"w":78,"h":96}, + "frame": {"x":943,"y":803,"w":78,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, @@ -770,7 +770,7 @@ }, "sprites/buildings/display.png": { - "frame": {"x":469,"y":1601,"w":84,"h":90}, + "frame": {"x":936,"y":1464,"w":84,"h":90}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":84,"h":90}, @@ -802,7 +802,7 @@ }, "sprites/buildings/logic_gate-not.png": { - "frame": {"x":276,"y":1676,"w":82,"h":96}, + "frame": {"x":639,"y":1656,"w":82,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":82,"h":96}, @@ -810,7 +810,7 @@ }, "sprites/buildings/logic_gate-or.png": { - "frame": {"x":901,"y":1142,"w":96,"h":83}, + "frame": {"x":203,"y":774,"w":96,"h":83}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":83}, @@ -818,7 +818,7 @@ }, "sprites/buildings/logic_gate-transistor.png": { - "frame": {"x":449,"y":854,"w":68,"h":96}, + "frame": {"x":623,"y":799,"w":68,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96}, @@ -826,7 +826,7 @@ }, "sprites/buildings/logic_gate-xor.png": { - "frame": {"x":203,"y":774,"w":96,"h":95}, + "frame": {"x":610,"y":1033,"w":96,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":95}, @@ -834,7 +834,7 @@ }, "sprites/buildings/logic_gate.png": { - "frame": {"x":719,"y":1090,"w":96,"h":88}, + "frame": {"x":103,"y":774,"w":96,"h":88}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":88}, @@ -842,7 +842,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":394,"y":1323,"w":91,"h":95}, + "frame": {"x":291,"y":1249,"w":91,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, @@ -850,7 +850,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":294,"y":1395,"w":91,"h":95}, + "frame": {"x":386,"y":1269,"w":91,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, @@ -898,7 +898,7 @@ }, "sprites/buildings/reader.png": { - "frame": {"x":203,"y":1029,"w":95,"h":96}, + "frame": {"x":3,"y":983,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, @@ -906,7 +906,7 @@ }, "sprites/buildings/rotater-ccw.png": { - "frame": {"x":102,"y":1049,"w":95,"h":96}, + "frame": {"x":102,"y":983,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, @@ -914,7 +914,7 @@ }, "sprites/buildings/rotater-fl.png": { - "frame": {"x":3,"y":1118,"w":95,"h":96}, + "frame": {"x":201,"y":1047,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":95,"h":96}, @@ -922,7 +922,7 @@ }, "sprites/buildings/rotater.png": { - "frame": {"x":402,"y":1047,"w":95,"h":96}, + "frame": {"x":300,"y":1061,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, @@ -930,7 +930,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":3,"y":1218,"w":94,"h":91}, + "frame": {"x":696,"y":1188,"w":94,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":94,"h":91}, @@ -938,7 +938,7 @@ }, "sprites/buildings/splitter-compact-merge-inverse.png": { - "frame": {"x":102,"y":1149,"w":95,"h":91}, + "frame": {"x":597,"y":1132,"w":95,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":95,"h":91}, @@ -946,7 +946,7 @@ }, "sprites/buildings/splitter-compact-merge.png": { - "frame": {"x":101,"y":1244,"w":93,"h":91}, + "frame": {"x":100,"y":1083,"w":93,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":2,"w":93,"h":91}, @@ -954,7 +954,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":3,"y":1313,"w":93,"h":91}, + "frame": {"x":197,"y":1147,"w":93,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":2,"w":93,"h":91}, @@ -986,7 +986,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":521,"y":899,"w":96,"h":96}, + "frame": {"x":731,"y":890,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -994,7 +994,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":3,"y":1408,"w":92,"h":83}, + "frame": {"x":873,"y":1377,"w":92,"h":83}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":13,"w":92,"h":83}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":696,"y":1182,"w":92,"h":74}, + "frame": {"x":3,"y":1178,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":22,"w":92,"h":74}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":595,"y":1195,"w":92,"h":74}, + "frame": {"x":99,"y":1178,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, @@ -1018,7 +1018,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":494,"y":1250,"w":92,"h":74}, + "frame": {"x":195,"y":1242,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, @@ -1026,7 +1026,7 @@ }, "sprites/buildings/virtual_processor-analyzer.png": { - "frame": {"x":723,"y":890,"w":96,"h":96}, + "frame": {"x":622,"y":933,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1034,7 +1034,7 @@ }, "sprites/buildings/virtual_processor-rotater.png": { - "frame": {"x":942,"y":942,"w":79,"h":96}, + "frame": {"x":808,"y":1737,"w":79,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":79,"h":96}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/virtual_processor-shapecompare.png": { - "frame": {"x":619,"y":1014,"w":96,"h":89}, + "frame": {"x":3,"y":774,"w":96,"h":89}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89}, @@ -1050,7 +1050,7 @@ }, "sprites/buildings/virtual_processor-unstacker.png": { - "frame": {"x":621,"y":914,"w":96,"h":96}, + "frame": {"x":510,"y":999,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1058,7 +1058,7 @@ }, "sprites/buildings/virtual_processor.png": { - "frame": {"x":319,"y":903,"w":96,"h":94}, + "frame": {"x":810,"y":1093,"w":96,"h":94}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":96,"h":94}, @@ -1066,7 +1066,7 @@ }, "sprites/buildings/wire-cross.png": { - "frame": {"x":721,"y":990,"w":96,"h":96}, + "frame": {"x":831,"y":893,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/wire-split.png": { - "frame": {"x":103,"y":933,"w":96,"h":54}, + "frame": {"x":3,"y":867,"w":96,"h":54}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54}, @@ -1098,15 +1098,15 @@ }, "sprites/buildings/wire_tunnel-coating.png": { - "frame": {"x":921,"y":689,"w":21,"h":90}, + "frame": {"x":921,"y":688,"w":22,"h":90}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":37,"y":3,"w":21,"h":90}, + "spriteSourceSize": {"x":37,"y":3,"w":22,"h":90}, "sourceSize": {"w":96,"h":96} }, "sprites/buildings/wire_tunnel.png": { - "frame": {"x":100,"y":1339,"w":92,"h":90}, + "frame": {"x":777,"y":1367,"w":92,"h":90}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":3,"w":92,"h":90}, @@ -1130,7 +1130,7 @@ }, "sprites/misc/hub_direction_indicator.png": { - "frame": {"x":906,"y":931,"w":32,"h":32}, + "frame": {"x":695,"y":851,"w":32,"h":32}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, @@ -1138,7 +1138,7 @@ }, "sprites/misc/processor_disabled.png": { - "frame": {"x":964,"y":1320,"w":53,"h":55}, + "frame": {"x":449,"y":803,"w":53,"h":55}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":53,"h":55}, @@ -1154,7 +1154,7 @@ }, "sprites/misc/reader_overlay.png": { - "frame": {"x":451,"y":703,"w":70,"h":47}, + "frame": {"x":947,"y":752,"w":70,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":25,"w":70,"h":47}, @@ -1234,7 +1234,7 @@ }, "sprites/wires/display/purple.png": { - "frame": {"x":906,"y":783,"w":33,"h":33}, + "frame": {"x":906,"y":782,"w":33,"h":33}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, @@ -1242,7 +1242,7 @@ }, "sprites/wires/display/red.png": { - "frame": {"x":906,"y":820,"w":33,"h":33}, + "frame": {"x":906,"y":819,"w":33,"h":33}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, @@ -1250,7 +1250,7 @@ }, "sprites/wires/display/white.png": { - "frame": {"x":906,"y":857,"w":33,"h":33}, + "frame": {"x":906,"y":856,"w":33,"h":33}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, @@ -1258,7 +1258,7 @@ }, "sprites/wires/display/yellow.png": { - "frame": {"x":906,"y":894,"w":33,"h":33}, + "frame": {"x":695,"y":814,"w":33,"h":33}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, @@ -1282,7 +1282,7 @@ }, "sprites/wires/logical_ejector.png": { - "frame": {"x":303,"y":810,"w":41,"h":45}, + "frame": {"x":449,"y":862,"w":41,"h":45}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":29,"y":0,"w":41,"h":45}, @@ -1290,7 +1290,7 @@ }, "sprites/wires/network_conflict.png": { - "frame": {"x":903,"y":1003,"w":32,"h":30}, + "frame": {"x":622,"y":899,"w":32,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":32,"h":30}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/sets/color_cross.png": { - "frame": {"x":903,"y":1042,"w":96,"h":96}, + "frame": {"x":722,"y":990,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/sets/color_split.png": { - "frame": {"x":3,"y":960,"w":96,"h":54}, + "frame": {"x":303,"y":903,"w":96,"h":54}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/sets/conflict_cross.png": { - "frame": {"x":3,"y":774,"w":96,"h":96}, + "frame": {"x":822,"y":993,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/sets/conflict_forward.png": { - "frame": {"x":1003,"y":1042,"w":12,"h":96}, + "frame": {"x":506,"y":803,"w":12,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/sets/conflict_split.png": { - "frame": {"x":203,"y":971,"w":96,"h":54}, + "frame": {"x":3,"y":925,"w":96,"h":54}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/sets/regular_cross.png": { - "frame": {"x":721,"y":990,"w":96,"h":96}, + "frame": {"x":831,"y":893,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1394,7 +1394,7 @@ }, "sprites/wires/sets/regular_split.png": { - "frame": {"x":103,"y":933,"w":96,"h":54}, + "frame": {"x":3,"y":867,"w":96,"h":54}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54}, @@ -1410,7 +1410,7 @@ }, "sprites/wires/sets/shape_cross.png": { - "frame": {"x":103,"y":774,"w":96,"h":96}, + "frame": {"x":922,"y":994,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1418,7 +1418,7 @@ }, "sprites/wires/sets/shape_forward.png": { - "frame": {"x":303,"y":859,"w":12,"h":96}, + "frame": {"x":494,"y":903,"w":12,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96}, @@ -1426,7 +1426,7 @@ }, "sprites/wires/sets/shape_split.png": { - "frame": {"x":103,"y":991,"w":96,"h":54}, + "frame": {"x":103,"y":925,"w":96,"h":54}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54}, @@ -1442,7 +1442,7 @@ }, "sprites/wires/wires_preview.png": { - "frame": {"x":906,"y":967,"w":32,"h":32}, + "frame": {"x":695,"y":887,"w":32,"h":32}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, @@ -1455,6 +1455,6 @@ "format": "RGBA8888", "size": {"w":1024,"h":2048}, "scale": "0.5", - "smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$" + "smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$" } } diff --git a/res_built/atlas/atlas0_mq.png b/res_built/atlas/atlas0_mq.png index 3711c3fa..909d3b8b 100644 Binary files a/res_built/atlas/atlas0_mq.png and b/res_built/atlas/atlas0_mq.png differ diff --git a/res_raw/sprites/blueprints/reader.png b/res_raw/sprites/blueprints/reader.png index 2ade7ced..dc2f5bfa 100644 Binary files a/res_raw/sprites/blueprints/reader.png and b/res_raw/sprites/blueprints/reader.png differ diff --git a/res_raw/sprites/blueprints/wire_tunnel-coating.png b/res_raw/sprites/blueprints/wire_tunnel-coating.png index 381e628a..af93022a 100644 Binary files a/res_raw/sprites/blueprints/wire_tunnel-coating.png and b/res_raw/sprites/blueprints/wire_tunnel-coating.png differ diff --git a/res_raw/sprites/buildings/wire_tunnel-coating.png b/res_raw/sprites/buildings/wire_tunnel-coating.png index aed6c8cb..f5dd3ffe 100644 Binary files a/res_raw/sprites/buildings/wire_tunnel-coating.png and b/res_raw/sprites/buildings/wire_tunnel-coating.png differ diff --git a/src/js/core/config.js b/src/js/core/config.js index 1770a1ea..70e6623a 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -61,7 +61,7 @@ export const globalConfig = { undergroundBeltMaxTilesByTier: [5, 8], - readerAnalyzeIntervalSeconds: 10, + readerAnalyzeIntervalSeconds: G_IS_DEV ? 3 : 10, buildingSpeeds: { cutter: 1 / 4, diff --git a/src/js/core/utils.js b/src/js/core/utils.js index 31d00d69..a469a7a0 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -459,67 +459,6 @@ export function removeAllChildren(elem) { } } -/** - * Fixes lockstep simulation by converting times like 34.0000000003 to 34.00. - * We use 3 digits of precision, this allows us to store precision of 1 ms without - * the risking simulation errors due to resync issues - * @param {number} value - */ -export function quantizeFloat(value) { - return Math.round(value * 1000.0) / 1000.0; -} - -/** - * Safe check to check if a timer is expired. quantizes numbers - * @param {number} now Current time - * @param {number} lastTick Last tick of the timer - * @param {number} tickRate Interval of the timer - */ -export function checkTimerExpired(now, lastTick, tickRate) { - if (G_IS_DEV) { - if (quantizeFloat(now) !== now) { - console.error("Got non-quantizied time:" + now + " vs " + quantizeFloat(now)); - now = quantizeFloat(now); - } - if (quantizeFloat(lastTick) !== lastTick) { - // FIXME: REENABLE - // console.error("Got non-quantizied timer:" + lastTick + " vs " + quantizeFloat(lastTick)); - lastTick = quantizeFloat(lastTick); - } - } else { - // just to be safe - now = quantizeFloat(now); - lastTick = quantizeFloat(lastTick); - } - /* - Ok, so heres the issue (Died a bit while debugging it): - - In multiplayer lockstep simulation, client A will simulate everything at T, but client B - will simulate it at T + 3. So we are running into the following precision issue: - Lets say on client A the time is T = 30. Then on clientB the time is T = 33. - Now, our timer takes 0.1 seconds and ticked at 29.90 - What does happen now? - Client A computes the timer and checks T > lastTick + interval. He computes - - 30 >= 29.90 + 0.1 <=> 30 >= 30.0000 <=> True <=> Tick performed - - However, this is what it looks on client B: - - 33 >= 32.90 + 0.1 <=> 33 >= 32.999999999999998 <=> False <=> No tick performed! - - This means that Client B will only tick at the *next* frame, which means it from now is out - of sync by one tick, which means the game will resync further or later and be not able to recover, - since it will run into the same issue over and over. - */ - - // The next tick, in our example it would be 30.0000 / 32.99999999998. In order to fix it, we quantize - // it, so its now 30.0000 / 33.0000 - const nextTick = quantizeFloat(lastTick + tickRate); - - // This check is safe, but its the only check where you may compare times. You always need to use - // this method! - return now >= nextTick; -} - /** * Returns if the game supports this browser */ diff --git a/src/js/game/components/item_processor.js b/src/js/game/components/item_processor.js index 9bd9ee7f..423cc8a9 100644 --- a/src/js/game/components/item_processor.js +++ b/src/js/game/components/item_processor.js @@ -109,6 +109,11 @@ export class ItemProcessorComponent extends Component { * How long it takes until we are done with the current items */ this.secondsUntilEject = 0; + + /** + * How much processing time we have lest from the last tick + */ + this.bonusFromLastTick = 0; } /** diff --git a/src/js/game/components/miner.js b/src/js/game/components/miner.js index a7515678..d2f3ef2d 100644 --- a/src/js/game/components/miner.js +++ b/src/js/game/components/miner.js @@ -1,58 +1,58 @@ -import { types } from "../../savegame/serialization"; -import { BaseItem } from "../base_item"; -import { Component } from "../component"; -import { typeItemSingleton } from "../item_resolver"; - -const chainBufferSize = 3; - -export class MinerComponent extends Component { - static getId() { - return "Miner"; - } - - static getSchema() { - // cachedMinedItem is not serialized. - return { - lastMiningTime: types.ufloat, - itemChainBuffer: types.array(typeItemSingleton), - }; - } - - duplicateWithoutContents() { - return new MinerComponent({ - chainable: this.chainable, - }); - } - - constructor({ chainable = false }) { - super(); - this.lastMiningTime = 0; - this.chainable = chainable; - - /** - * Stores items from other miners which were chained to this - * miner. - * @type {Array} - */ - this.itemChainBuffer = []; - - /** - * @type {BaseItem} - */ - this.cachedMinedItem = null; - } - - /** - * - * @param {BaseItem} item - */ - tryAcceptChainedItem(item) { - if (this.itemChainBuffer.length > chainBufferSize) { - // Well, this one is full - return false; - } - - this.itemChainBuffer.push(item); - return true; - } -} +import { types } from "../../savegame/serialization"; +import { BaseItem } from "../base_item"; +import { Component } from "../component"; +import { typeItemSingleton } from "../item_resolver"; + +const chainBufferSize = 6; + +export class MinerComponent extends Component { + static getId() { + return "Miner"; + } + + static getSchema() { + // cachedMinedItem is not serialized. + return { + lastMiningTime: types.ufloat, + itemChainBuffer: types.array(typeItemSingleton), + }; + } + + duplicateWithoutContents() { + return new MinerComponent({ + chainable: this.chainable, + }); + } + + constructor({ chainable = false }) { + super(); + this.lastMiningTime = 0; + this.chainable = chainable; + + /** + * Stores items from other miners which were chained to this + * miner. + * @type {Array} + */ + this.itemChainBuffer = []; + + /** + * @type {BaseItem} + */ + this.cachedMinedItem = null; + } + + /** + * + * @param {BaseItem} item + */ + tryAcceptChainedItem(item) { + if (this.itemChainBuffer.length > chainBufferSize) { + // Well, this one is full + return false; + } + + this.itemChainBuffer.push(item); + return true; + } +} diff --git a/src/js/game/systems/item_processor.js b/src/js/game/systems/item_processor.js index a6799738..1640f6ed 100644 --- a/src/js/game/systems/item_processor.js +++ b/src/js/game/systems/item_processor.js @@ -25,10 +25,14 @@ export class ItemProcessorSystem extends GameSystemWithFilter { const ejectorComp = entity.components.ItemEjector; // First of all, process the current recipe - processorComp.secondsUntilEject = Math.max( - 0, - processorComp.secondsUntilEject - this.root.dynamicTickrate.deltaSeconds - ); + const newSecondsUntilEject = + processorComp.secondsUntilEject - this.root.dynamicTickrate.deltaSeconds; + + processorComp.secondsUntilEject = Math.max(0, newSecondsUntilEject); + + if (newSecondsUntilEject < 0) { + processorComp.bonusFromLastTick -= newSecondsUntilEject; + } if (G_IS_DEV && globalConfig.debug.instantProcessors) { processorComp.secondsUntilEject = 0; @@ -233,7 +237,10 @@ export class ItemProcessorSystem extends GameSystemWithFilter { } const baseSpeed = this.root.hubGoals.getProcessorBaseSpeed(processorComp.type); - processorComp.secondsUntilEject = 1 / baseSpeed; + + // Substract one tick because we already process it this frame + processorComp.secondsUntilEject = Math.max(0, 1 / baseSpeed - processorComp.bonusFromLastTick); + processorComp.bonusFromLastTick = 0; /** @type {Array<{item: BaseItem, requiredSlot?: number, preferredSlot?: number}>} */ const outItems = []; diff --git a/src/js/game/systems/miner.js b/src/js/game/systems/miner.js index deff1557..9f966306 100644 --- a/src/js/game/systems/miner.js +++ b/src/js/game/systems/miner.js @@ -1,140 +1,144 @@ -import { globalConfig } from "../../core/config"; -import { DrawParameters } from "../../core/draw_parameters"; -import { enumDirectionToVector } from "../../core/vector"; -import { BaseItem } from "../base_item"; -import { MinerComponent } from "../components/miner"; -import { Entity } from "../entity"; -import { GameSystemWithFilter } from "../game_system_with_filter"; -import { MapChunkView } from "../map_chunk_view"; - -export class MinerSystem extends GameSystemWithFilter { - constructor(root) { - super(root, [MinerComponent]); - } - - update() { - let miningSpeed = this.root.hubGoals.getMinerBaseSpeed(); - if (G_IS_DEV && globalConfig.debug.instantMiners) { - miningSpeed *= 100; - } - - for (let i = 0; i < this.allEntities.length; ++i) { - const entity = this.allEntities[i]; - - // Check if miner is above an actual tile - - const minerComp = entity.components.Miner; - - if (!minerComp.cachedMinedItem) { - const staticComp = entity.components.StaticMapEntity; - const tileBelow = this.root.map.getLowerLayerContentXY( - staticComp.origin.x, - staticComp.origin.y - ); - if (!tileBelow) { - continue; - } - minerComp.cachedMinedItem = tileBelow; - } - - // First, try to get rid of chained items - if (minerComp.itemChainBuffer.length > 0) { - if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) { - minerComp.itemChainBuffer.shift(); - continue; - } - } - - if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) { - if (this.tryPerformMinerEject(entity, minerComp.cachedMinedItem)) { - // Analytics hook - this.root.signals.itemProduced.dispatch(minerComp.cachedMinedItem); - - // Actually mine - minerComp.lastMiningTime = this.root.time.now(); - } - } - } - } - - /** - * - * @param {Entity} entity - * @param {BaseItem} item - */ - tryPerformMinerEject(entity, item) { - const minerComp = entity.components.Miner; - const ejectComp = entity.components.ItemEjector; - const staticComp = entity.components.StaticMapEntity; - - // Check if we are a chained miner - if (minerComp.chainable) { - const ejectingSlot = ejectComp.slots[0]; - const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos); - const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction); - - const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]); - const targetContents = this.root.map.getTileContent(targetTile, "regular"); - - // Check if we are connected to another miner and thus do not eject directly - if (targetContents) { - const targetMinerComp = targetContents.components.Miner; - if (targetMinerComp) { - if (targetMinerComp.tryAcceptChainedItem(item)) { - return true; - } else { - return false; - } - } - } - } - - // Seems we are a regular miner or at the end of a row, try actually ejecting - if (ejectComp.tryEject(0, item)) { - return true; - } - return false; - } - - /** - * - * @param {DrawParameters} parameters - * @param {MapChunkView} chunk - */ - drawChunk(parameters, chunk) { - const contents = chunk.containedEntitiesByLayer.regular; - - for (let i = 0; i < contents.length; ++i) { - const entity = contents[i]; - const minerComp = entity.components.Miner; - if (!minerComp) { - continue; - } - - const staticComp = entity.components.StaticMapEntity; - if (!minerComp.cachedMinedItem) { - continue; - } - - // Draw the item background - this is to hide the ejected item animation from - // the item ejecto - - const padding = 3; - const destX = staticComp.origin.x * globalConfig.tileSize + padding; - const destY = staticComp.origin.y * globalConfig.tileSize + padding; - const dimensions = globalConfig.tileSize - 2 * padding; - - if (parameters.visibleRect.containsRect4Params(destX, destY, dimensions, dimensions)) { - parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource(); - parameters.context.fillRect(destX, destY, dimensions, dimensions); - } - - minerComp.cachedMinedItem.drawItemCenteredClipped( - (0.5 + staticComp.origin.x) * globalConfig.tileSize, - (0.5 + staticComp.origin.y) * globalConfig.tileSize, - parameters, - globalConfig.defaultItemDiameter - ); - } - } -} +import { globalConfig } from "../../core/config"; +import { DrawParameters } from "../../core/draw_parameters"; +import { enumDirectionToVector } from "../../core/vector"; +import { BaseItem } from "../base_item"; +import { MinerComponent } from "../components/miner"; +import { Entity } from "../entity"; +import { GameSystemWithFilter } from "../game_system_with_filter"; +import { MapChunkView } from "../map_chunk_view"; + +export class MinerSystem extends GameSystemWithFilter { + constructor(root) { + super(root, [MinerComponent]); + } + + update() { + let miningSpeed = this.root.hubGoals.getMinerBaseSpeed(); + if (G_IS_DEV && globalConfig.debug.instantMiners) { + miningSpeed *= 100; + } + + for (let i = 0; i < this.allEntities.length; ++i) { + const entity = this.allEntities[i]; + + // Check if miner is above an actual tile + + const minerComp = entity.components.Miner; + + if (!minerComp.cachedMinedItem) { + const staticComp = entity.components.StaticMapEntity; + const tileBelow = this.root.map.getLowerLayerContentXY( + staticComp.origin.x, + staticComp.origin.y + ); + if (!tileBelow) { + continue; + } + minerComp.cachedMinedItem = tileBelow; + } + + // First, try to get rid of chained items + if (minerComp.itemChainBuffer.length > 0) { + if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) { + minerComp.itemChainBuffer.shift(); + continue; + } + } + + const mineDuration = 1 / miningSpeed; + const timeSinceMine = this.root.time.now() - minerComp.lastMiningTime; + if (timeSinceMine > mineDuration) { + // Store how much we overflowed + const buffer = Math.min(timeSinceMine - mineDuration, this.root.dynamicTickrate.deltaSeconds); + + if (this.tryPerformMinerEject(entity, minerComp.cachedMinedItem)) { + // Analytics hook + this.root.signals.itemProduced.dispatch(minerComp.cachedMinedItem); + // Store mining time + minerComp.lastMiningTime = this.root.time.now() - buffer; + } + } + } + } + + /** + * + * @param {Entity} entity + * @param {BaseItem} item + */ + tryPerformMinerEject(entity, item) { + const minerComp = entity.components.Miner; + const ejectComp = entity.components.ItemEjector; + const staticComp = entity.components.StaticMapEntity; + + // Check if we are a chained miner + if (minerComp.chainable) { + const ejectingSlot = ejectComp.slots[0]; + const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos); + const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction); + + const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]); + const targetContents = this.root.map.getTileContent(targetTile, "regular"); + + // Check if we are connected to another miner and thus do not eject directly + if (targetContents) { + const targetMinerComp = targetContents.components.Miner; + if (targetMinerComp) { + if (targetMinerComp.tryAcceptChainedItem(item)) { + return true; + } else { + return false; + } + } + } + } + + // Seems we are a regular miner or at the end of a row, try actually ejecting + if (ejectComp.tryEject(0, item)) { + return true; + } + return false; + } + + /** + * + * @param {DrawParameters} parameters + * @param {MapChunkView} chunk + */ + drawChunk(parameters, chunk) { + const contents = chunk.containedEntitiesByLayer.regular; + + for (let i = 0; i < contents.length; ++i) { + const entity = contents[i]; + const minerComp = entity.components.Miner; + if (!minerComp) { + continue; + } + + const staticComp = entity.components.StaticMapEntity; + if (!minerComp.cachedMinedItem) { + continue; + } + + // Draw the item background - this is to hide the ejected item animation from + // the item ejecto + + const padding = 3; + const destX = staticComp.origin.x * globalConfig.tileSize + padding; + const destY = staticComp.origin.y * globalConfig.tileSize + padding; + const dimensions = globalConfig.tileSize - 2 * padding; + + if (parameters.visibleRect.containsRect4Params(destX, destY, dimensions, dimensions)) { + parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource(); + parameters.context.fillRect(destX, destY, dimensions, dimensions); + } + + minerComp.cachedMinedItem.drawItemCenteredClipped( + (0.5 + staticComp.origin.x) * globalConfig.tileSize, + (0.5 + staticComp.origin.y) * globalConfig.tileSize, + parameters, + globalConfig.defaultItemDiameter + ); + } + } +} diff --git a/src/js/game/time/game_time.js b/src/js/game/time/game_time.js index 9b418d4c..07b224a7 100644 --- a/src/js/game/time/game_time.js +++ b/src/js/game/time/game_time.js @@ -1,214 +1,200 @@ -/* typehints:start */ -import { GameRoot } from "../root"; -/* typehints:end */ - -import { types, BasicSerializableObject } from "../../savegame/serialization"; -import { RegularGameSpeed } from "./regular_game_speed"; -import { BaseGameSpeed } from "./base_game_speed"; -import { PausedGameSpeed } from "./paused_game_speed"; -import { FastForwardGameSpeed } from "./fast_forward_game_speed"; -import { gGameSpeedRegistry } from "../../core/global_registries"; -import { globalConfig } from "../../core/config"; -import { checkTimerExpired, quantizeFloat } from "../../core/utils"; -import { createLogger } from "../../core/logging"; - -const logger = createLogger("game_time"); - -export class GameTime extends BasicSerializableObject { - /** - * @param {GameRoot} root - */ - constructor(root) { - super(); - this.root = root; - - // Current ingame time seconds, not incremented while paused - this.timeSeconds = 0; - - // Current "realtime", a timer which always is incremented no matter whether the game is paused or no - this.realtimeSeconds = 0; - - // The adjustment, used when loading savegames so we can continue where we were - this.realtimeAdjust = 0; - - /** @type {BaseGameSpeed} */ - this.speed = new RegularGameSpeed(this.root); - - // Store how much time we have in bucket - this.logicTimeBudget = 0; - } - - static getId() { - return "GameTime"; - } - - static getSchema() { - return { - timeSeconds: types.float, - speed: types.obj(gGameSpeedRegistry), - realtimeSeconds: types.float, - }; - } - - /** - * Fetches the new "real" time, called from the core once per frame, since performance now() is kinda slow - */ - updateRealtimeNow() { - this.realtimeSeconds = performance.now() / 1000.0 + this.realtimeAdjust; - } - - /** - * Returns the ingame time in milliseconds - */ - getTimeMs() { - return this.timeSeconds * 1000.0; - } - - /** - * Safe check to check if a timer is expired. quantizes numbers - * @param {number} lastTick Last tick of the timer - * @param {number} tickRateSeconds Interval of the timer in seconds - */ - isIngameTimerExpired(lastTick, tickRateSeconds) { - return checkTimerExpired(this.timeSeconds, lastTick, tickRateSeconds); - } - - /** - * Returns how many seconds we are in the grace period - * @returns {number} - */ - getRemainingGracePeriodSeconds() { - return 0; - } - - /** - * Returns if we are currently in the grace period - * @returns {boolean} - */ - getIsWithinGracePeriod() { - return this.getRemainingGracePeriodSeconds() > 0; - } - - /** - * Internal method to generate new logic time budget - * @param {number} deltaMs - */ - internalAddDeltaToBudget(deltaMs) { - // Only update if game is supposed to update - if (this.root.hud.shouldPauseGame()) { - this.logicTimeBudget = 0; - } else { - const multiplier = this.getSpeed().getTimeMultiplier(); - this.logicTimeBudget += deltaMs * multiplier; - } - - // Check for too big pile of updates -> reduce it to 1 - let maxLogicSteps = Math.max( - 3, - (this.speed.getMaxLogicStepsInQueue() * this.root.dynamicTickrate.currentTickRate) / 60 - ); - if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) { - maxLogicSteps *= 1 + globalConfig.debug.framePausesBetweenTicks; - } - - if (this.logicTimeBudget > this.root.dynamicTickrate.deltaMs * maxLogicSteps) { - this.logicTimeBudget = this.root.dynamicTickrate.deltaMs * maxLogicSteps; - } - } - - /** - * Performs update ticks based on the queued logic budget - * @param {number} deltaMs - * @param {function():boolean} updateMethod - */ - performTicks(deltaMs, updateMethod) { - this.internalAddDeltaToBudget(deltaMs); - - const speedAtStart = this.root.time.getSpeed(); - - let effectiveDelta = this.root.dynamicTickrate.deltaMs; - if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) { - effectiveDelta += globalConfig.debug.framePausesBetweenTicks * this.root.dynamicTickrate.deltaMs; - } - - // Update physics & logic - while (this.logicTimeBudget >= effectiveDelta) { - this.logicTimeBudget -= effectiveDelta; - - if (!updateMethod()) { - // Gameover happened or so, do not update anymore - return; - } - - // Step game time - this.timeSeconds = quantizeFloat(this.timeSeconds + this.root.dynamicTickrate.deltaSeconds); - - // Game time speed changed, need to abort since our logic steps are no longer valid - if (speedAtStart.getId() !== this.speed.getId()) { - logger.warn( - "Skipping update because speed changed from", - speedAtStart.getId(), - "to", - this.speed.getId() - ); - break; - } - } - } - - /** - * Returns ingame time in seconds - * @returns {number} seconds - */ - now() { - return this.timeSeconds; - } - - /** - * Returns "real" time in seconds - * @returns {number} seconds - */ - realtimeNow() { - return this.realtimeSeconds; - } - - /** - * Returns "real" time in seconds - * @returns {number} seconds - */ - systemNow() { - return (this.realtimeSeconds - this.realtimeAdjust) * 1000.0; - } - - getIsPaused() { - return this.speed.getId() === PausedGameSpeed.getId(); - } - - getSpeed() { - return this.speed; - } - - setSpeed(speed) { - assert(speed instanceof BaseGameSpeed, "Not a valid game speed"); - if (this.speed.getId() === speed.getId()) { - logger.warn("Same speed set than current one:", speed.constructor.getId()); - } - this.speed = speed; - } - - deserialize(data) { - const errorCode = super.deserialize(data); - if (errorCode) { - return errorCode; - } - - // Adjust realtime now difference so they match - this.realtimeAdjust = this.realtimeSeconds - performance.now() / 1000.0; - this.updateRealtimeNow(); - - // Make sure we have a quantizied time - this.timeSeconds = quantizeFloat(this.timeSeconds); - - this.speed.initializeAfterDeserialize(this.root); - } -} +/* typehints:start */ +import { GameRoot } from "../root"; +/* typehints:end */ + +import { types, BasicSerializableObject } from "../../savegame/serialization"; +import { RegularGameSpeed } from "./regular_game_speed"; +import { BaseGameSpeed } from "./base_game_speed"; +import { PausedGameSpeed } from "./paused_game_speed"; +import { gGameSpeedRegistry } from "../../core/global_registries"; +import { globalConfig } from "../../core/config"; +import { createLogger } from "../../core/logging"; + +const logger = createLogger("game_time"); + +export class GameTime extends BasicSerializableObject { + /** + * @param {GameRoot} root + */ + constructor(root) { + super(); + this.root = root; + + // Current ingame time seconds, not incremented while paused + this.timeSeconds = 0; + + // Current "realtime", a timer which always is incremented no matter whether the game is paused or no + this.realtimeSeconds = 0; + + // The adjustment, used when loading savegames so we can continue where we were + this.realtimeAdjust = 0; + + /** @type {BaseGameSpeed} */ + this.speed = new RegularGameSpeed(this.root); + + // Store how much time we have in bucket + this.logicTimeBudget = 0; + } + + static getId() { + return "GameTime"; + } + + static getSchema() { + return { + timeSeconds: types.float, + speed: types.obj(gGameSpeedRegistry), + realtimeSeconds: types.float, + }; + } + + /** + * Fetches the new "real" time, called from the core once per frame, since performance now() is kinda slow + */ + updateRealtimeNow() { + this.realtimeSeconds = performance.now() / 1000.0 + this.realtimeAdjust; + } + + /** + * Returns the ingame time in milliseconds + */ + getTimeMs() { + return this.timeSeconds * 1000.0; + } + + /** + * Returns how many seconds we are in the grace period + * @returns {number} + */ + getRemainingGracePeriodSeconds() { + return 0; + } + + /** + * Returns if we are currently in the grace period + * @returns {boolean} + */ + getIsWithinGracePeriod() { + return this.getRemainingGracePeriodSeconds() > 0; + } + + /** + * Internal method to generate new logic time budget + * @param {number} deltaMs + */ + internalAddDeltaToBudget(deltaMs) { + // Only update if game is supposed to update + if (this.root.hud.shouldPauseGame()) { + this.logicTimeBudget = 0; + } else { + const multiplier = this.getSpeed().getTimeMultiplier(); + this.logicTimeBudget += deltaMs * multiplier; + } + + // Check for too big pile of updates -> reduce it to 1 + let maxLogicSteps = Math.max( + 3, + (this.speed.getMaxLogicStepsInQueue() * this.root.dynamicTickrate.currentTickRate) / 60 + ); + if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) { + maxLogicSteps *= 1 + globalConfig.debug.framePausesBetweenTicks; + } + + if (this.logicTimeBudget > this.root.dynamicTickrate.deltaMs * maxLogicSteps) { + this.logicTimeBudget = this.root.dynamicTickrate.deltaMs * maxLogicSteps; + } + } + + /** + * Performs update ticks based on the queued logic budget + * @param {number} deltaMs + * @param {function():boolean} updateMethod + */ + performTicks(deltaMs, updateMethod) { + this.internalAddDeltaToBudget(deltaMs); + + const speedAtStart = this.root.time.getSpeed(); + + let effectiveDelta = this.root.dynamicTickrate.deltaMs; + if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) { + effectiveDelta += globalConfig.debug.framePausesBetweenTicks * this.root.dynamicTickrate.deltaMs; + } + + // Update physics & logic + while (this.logicTimeBudget >= effectiveDelta) { + this.logicTimeBudget -= effectiveDelta; + + if (!updateMethod()) { + // Gameover happened or so, do not update anymore + return; + } + + // Step game time + this.timeSeconds += this.root.dynamicTickrate.deltaSeconds; + + // Game time speed changed, need to abort since our logic steps are no longer valid + if (speedAtStart.getId() !== this.speed.getId()) { + logger.warn( + "Skipping update because speed changed from", + speedAtStart.getId(), + "to", + this.speed.getId() + ); + break; + } + } + } + + /** + * Returns ingame time in seconds + * @returns {number} seconds + */ + now() { + return this.timeSeconds; + } + + /** + * Returns "real" time in seconds + * @returns {number} seconds + */ + realtimeNow() { + return this.realtimeSeconds; + } + + /** + * Returns "real" time in seconds + * @returns {number} seconds + */ + systemNow() { + return (this.realtimeSeconds - this.realtimeAdjust) * 1000.0; + } + + getIsPaused() { + return this.speed.getId() === PausedGameSpeed.getId(); + } + + getSpeed() { + return this.speed; + } + + setSpeed(speed) { + assert(speed instanceof BaseGameSpeed, "Not a valid game speed"); + if (this.speed.getId() === speed.getId()) { + logger.warn("Same speed set than current one:", speed.constructor.getId()); + } + this.speed = speed; + } + + deserialize(data) { + const errorCode = super.deserialize(data); + if (errorCode) { + return errorCode; + } + + // Adjust realtime now difference so they match + this.realtimeAdjust = this.realtimeSeconds - performance.now() / 1000.0; + this.updateRealtimeNow(); + + this.speed.initializeAfterDeserialize(this.root); + } +} diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index 6a2a68a6..cfbf56e8 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -126,6 +126,9 @@ export const autosaveIntervals = [ const refreshRateOptions = ["60", "75", "100", "120", "144", "165", "250", "500"]; if (G_IS_DEV) { + refreshRateOptions.unshift("30"); + refreshRateOptions.unshift("10"); + refreshRateOptions.unshift("5"); refreshRateOptions.push("1000"); refreshRateOptions.push("2000"); refreshRateOptions.push("5000");