Fix buildings not working at their advertised speed, closes #440, closes #442, closes #437, closes #449

pull/609/head
tobspr 4 years ago
parent 12892dcf54
commit 78fe34840a

@ -10,7 +10,7 @@
}, },
"sprites/belt/built/forward_1.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -18,7 +18,7 @@
}, },
"sprites/belt/built/forward_2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -26,7 +26,7 @@
}, },
"sprites/belt/built/forward_3.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -34,7 +34,7 @@
}, },
"sprites/belt/built/forward_4.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -42,7 +42,7 @@
}, },
"sprites/belt/built/forward_5.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -50,7 +50,7 @@
}, },
"sprites/belt/built/forward_6.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -58,7 +58,7 @@
}, },
"sprites/belt/built/forward_7.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -66,7 +66,7 @@
}, },
"sprites/belt/built/forward_8.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -74,7 +74,7 @@
}, },
"sprites/belt/built/forward_9.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -82,7 +82,7 @@
}, },
"sprites/belt/built/forward_10.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -90,7 +90,7 @@
}, },
"sprites/belt/built/forward_11.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -98,7 +98,7 @@
}, },
"sprites/belt/built/forward_12.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -106,7 +106,7 @@
}, },
"sprites/belt/built/forward_13.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -114,7 +114,7 @@
}, },
"sprites/belt/built/left_0.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -122,7 +122,7 @@
}, },
"sprites/belt/built/left_1.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -130,7 +130,7 @@
}, },
"sprites/belt/built/left_2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -138,7 +138,7 @@
}, },
"sprites/belt/built/left_3.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -146,7 +146,7 @@
}, },
"sprites/belt/built/left_4.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -154,7 +154,7 @@
}, },
"sprites/belt/built/left_5.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -162,7 +162,7 @@
}, },
"sprites/belt/built/left_6.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -170,7 +170,7 @@
}, },
"sprites/belt/built/left_7.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -178,7 +178,7 @@
}, },
"sprites/belt/built/left_8.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -186,7 +186,7 @@
}, },
"sprites/belt/built/left_9.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -194,7 +194,7 @@
}, },
"sprites/belt/built/left_10.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -202,7 +202,7 @@
}, },
"sprites/belt/built/left_11.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -210,7 +210,7 @@
}, },
"sprites/belt/built/left_12.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -218,7 +218,7 @@
}, },
"sprites/belt/built/left_13.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -226,7 +226,7 @@
}, },
"sprites/belt/built/right_0.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -234,7 +234,7 @@
}, },
"sprites/belt/built/right_1.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -242,7 +242,7 @@
}, },
"sprites/belt/built/right_2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -250,7 +250,7 @@
}, },
"sprites/belt/built/right_3.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -258,7 +258,7 @@
}, },
"sprites/belt/built/right_4.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -266,7 +266,7 @@
}, },
"sprites/belt/built/right_5.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -274,7 +274,7 @@
}, },
"sprites/belt/built/right_6.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -282,7 +282,7 @@
}, },
"sprites/belt/built/right_7.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -290,7 +290,7 @@
}, },
"sprites/belt/built/right_8.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -298,7 +298,7 @@
}, },
"sprites/belt/built/right_9.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -306,7 +306,7 @@
}, },
"sprites/belt/built/right_10.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -314,7 +314,7 @@
}, },
"sprites/belt/built/right_11.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -322,7 +322,7 @@
}, },
"sprites/belt/built/right_12.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -330,7 +330,7 @@
}, },
"sprites/belt/built/right_13.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -338,7 +338,7 @@
}, },
"sprites/blueprints/belt_left.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -346,7 +346,7 @@
}, },
"sprites/blueprints/belt_right.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -354,7 +354,7 @@
}, },
"sprites/blueprints/belt_top.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@ -386,7 +386,7 @@
}, },
"sprites/blueprints/display.png": "sprites/blueprints/display.png":
{ {
"frame": {"x":955,"y":1564,"w":128,"h":136}, "frame": {"x":1916,"y":1553,"w":128,"h":136},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":8,"y":8,"w":128,"h":136}, "spriteSourceSize": {"x":8,"y":8,"w":128,"h":136},
@ -418,7 +418,7 @@
}, },
"sprites/blueprints/logic_gate-or.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":123}, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":123},
@ -434,7 +434,7 @@
}, },
"sprites/blueprints/logic_gate-xor.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":143}, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":143},
@ -442,7 +442,7 @@
}, },
"sprites/blueprints/logic_gate.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":133}, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
@ -450,7 +450,7 @@
}, },
"sprites/blueprints/miner-chainable.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
@ -458,7 +458,7 @@
}, },
"sprites/blueprints/miner.png": "sprites/blueprints/miner.png":
{ {
"frame": {"x":723,"y":1718,"w":136,"h":143}, "frame": {"x":1513,"y":1689,"w":136,"h":143},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
@ -506,15 +506,15 @@
}, },
"sprites/blueprints/reader.png": "sprites/blueprints/reader.png":
{ {
"frame": {"x":1241,"y":1253,"w":142,"h":144}, "frame": {"x":1086,"y":1313,"w":141,"h":144},
"rotated": false, "rotated": false,
"trimmed": true, "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} "sourceSize": {"w":144,"h":144}
}, },
"sprites/blueprints/rotater-ccw.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@ -522,7 +522,7 @@
}, },
"sprites/blueprints/rotater-fl.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":142,"h":144}, "spriteSourceSize": {"x":0,"y":0,"w":142,"h":144},
@ -530,7 +530,7 @@
}, },
"sprites/blueprints/rotater.png": "sprites/blueprints/rotater.png":
{ {
"frame": {"x":813,"y":1033,"w":143,"h":144}, "frame": {"x":1390,"y":1126,"w":143,"h":144},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@ -538,7 +538,7 @@
}, },
"sprites/blueprints/splitter-compact-inverse.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
@ -546,7 +546,7 @@
}, },
"sprites/blueprints/splitter-compact-merge-inverse.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
@ -554,7 +554,7 @@
}, },
"sprites/blueprints/splitter-compact-merge.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
@ -562,7 +562,7 @@
}, },
"sprites/blueprints/splitter-compact.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
@ -602,7 +602,7 @@
}, },
"sprites/blueprints/underground_belt_entry-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":19,"w":138,"h":125}, "spriteSourceSize": {"x":4,"y":19,"w":138,"h":125},
@ -610,7 +610,7 @@
}, },
"sprites/blueprints/underground_belt_entry.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":32,"w":138,"h":112}, "spriteSourceSize": {"x":4,"y":32,"w":138,"h":112},
@ -618,7 +618,7 @@
}, },
"sprites/blueprints/underground_belt_exit-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":139,"h":112}, "spriteSourceSize": {"x":4,"y":0,"w":139,"h":112},
@ -626,7 +626,7 @@
}, },
"sprites/blueprints/underground_belt_exit.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":138,"h":112}, "spriteSourceSize": {"x":4,"y":0,"w":138,"h":112},
@ -642,7 +642,7 @@
}, },
"sprites/blueprints/virtual_processor-rotater.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":118,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":118,"h":144},
@ -650,7 +650,7 @@
}, },
"sprites/blueprints/virtual_processor-shapecompare.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":133}, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
@ -666,7 +666,7 @@
}, },
"sprites/blueprints/virtual_processor.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":144,"h":141}, "spriteSourceSize": {"x":0,"y":3,"w":144,"h":141},
@ -682,7 +682,7 @@
}, },
"sprites/blueprints/wire-split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":62,"w":144,"h":82}, "spriteSourceSize": {"x":0,"y":62,"w":144,"h":82},
@ -690,7 +690,7 @@
}, },
"sprites/blueprints/wire-turn.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":62,"y":62,"w":82,"h":82}, "spriteSourceSize": {"x":62,"y":62,"w":82,"h":82},
@ -706,15 +706,15 @@
}, },
"sprites/blueprints/wire_tunnel-coating.png": "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, "rotated": false,
"trimmed": true, "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} "sourceSize": {"w":144,"h":144}
}, },
"sprites/blueprints/wire_tunnel.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":138,"h":135}, "spriteSourceSize": {"x":4,"y":4,"w":138,"h":135},
@ -722,7 +722,7 @@
}, },
"sprites/buildings/belt_left.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@ -730,7 +730,7 @@
}, },
"sprites/buildings/belt_right.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@ -810,7 +810,7 @@
}, },
"sprites/buildings/logic_gate-or.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":123}, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":123},
@ -826,7 +826,7 @@
}, },
"sprites/buildings/logic_gate-xor.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":143}, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":143},
@ -834,7 +834,7 @@
}, },
"sprites/buildings/logic_gate.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":132}, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":132},
@ -842,7 +842,7 @@
}, },
"sprites/buildings/miner-chainable.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
@ -850,7 +850,7 @@
}, },
"sprites/buildings/miner.png": "sprites/buildings/miner.png":
{ {
"frame": {"x":863,"y":1718,"w":136,"h":142}, "frame": {"x":405,"y":1736,"w":136,"h":142},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
@ -898,7 +898,7 @@
}, },
"sprites/buildings/reader.png": "sprites/buildings/reader.png":
{ {
"frame": {"x":285,"y":1324,"w":141,"h":144}, "frame": {"x":937,"y":1315,"w":141,"h":144},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":144}, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":144},
@ -906,7 +906,7 @@
}, },
"sprites/buildings/rotater-ccw.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@ -914,7 +914,7 @@
}, },
"sprites/buildings/rotater-fl.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":141,"h":143}, "spriteSourceSize": {"x":1,"y":0,"w":141,"h":143},
@ -922,7 +922,7 @@
}, },
"sprites/buildings/rotater.png": "sprites/buildings/rotater.png":
{ {
"frame": {"x":936,"y":1301,"w":141,"h":143}, "frame": {"x":1657,"y":1345,"w":141,"h":143},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@ -930,7 +930,7 @@
}, },
"sprites/buildings/splitter-compact-inverse.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":141,"h":136}, "spriteSourceSize": {"x":0,"y":3,"w":141,"h":136},
@ -938,7 +938,7 @@
}, },
"sprites/buildings/splitter-compact-merge-inverse.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":142,"h":136}, "spriteSourceSize": {"x":0,"y":3,"w":142,"h":136},
@ -946,7 +946,7 @@
}, },
"sprites/buildings/splitter-compact-merge.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
@ -954,7 +954,7 @@
}, },
"sprites/buildings/splitter-compact.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
@ -994,7 +994,7 @@
}, },
"sprites/buildings/underground_belt_entry-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":20,"w":137,"h":124}, "spriteSourceSize": {"x":5,"y":20,"w":137,"h":124},
@ -1002,7 +1002,7 @@
}, },
"sprites/buildings/underground_belt_entry.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":33,"w":137,"h":111}, "spriteSourceSize": {"x":5,"y":33,"w":137,"h":111},
@ -1010,7 +1010,7 @@
}, },
"sprites/buildings/underground_belt_exit-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
@ -1018,7 +1018,7 @@
}, },
"sprites/buildings/underground_belt_exit.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
@ -1034,7 +1034,7 @@
}, },
"sprites/buildings/virtual_processor-rotater.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":117,"h":144}, "spriteSourceSize": {"x":14,"y":0,"w":117,"h":144},
@ -1042,7 +1042,7 @@
}, },
"sprites/buildings/virtual_processor-shapecompare.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":133}, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":133},
@ -1058,7 +1058,7 @@
}, },
"sprites/buildings/virtual_processor.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":144,"h":140}, "spriteSourceSize": {"x":0,"y":4,"w":144,"h":140},
@ -1074,7 +1074,7 @@
}, },
"sprites/buildings/wire-split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
@ -1098,15 +1098,15 @@
}, },
"sprites/buildings/wire_tunnel-coating.png": "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, "rotated": false,
"trimmed": true, "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} "sourceSize": {"w":144,"h":144}
}, },
"sprites/buildings/wire_tunnel.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":5,"w":137,"h":134}, "spriteSourceSize": {"x":5,"y":5,"w":137,"h":134},
@ -1138,7 +1138,7 @@
}, },
"sprites/misc/processor_disabled.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":10,"y":10,"w":78,"h":81}, "spriteSourceSize": {"x":10,"y":10,"w":78,"h":81},
@ -1178,7 +1178,7 @@
}, },
"sprites/misc/storage_overlay.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":89,"h":44}, "spriteSourceSize": {"x":1,"y":1,"w":89,"h":44},
@ -1186,7 +1186,7 @@
}, },
"sprites/misc/waypoint.png": "sprites/misc/waypoint.png":
{ {
"frame": {"x":893,"y":1328,"w":38,"h":48}, "frame": {"x":292,"y":1834,"w":38,"h":48},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48},
@ -1194,7 +1194,7 @@
}, },
"sprites/wires/boolean_false.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":9,"y":5,"w":31,"h":41}, "spriteSourceSize": {"x":9,"y":5,"w":31,"h":41},
@ -1250,7 +1250,7 @@
}, },
"sprites/wires/display/white.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@ -1258,7 +1258,7 @@
}, },
"sprites/wires/display/yellow.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@ -1290,7 +1290,7 @@
}, },
"sprites/wires/network_conflict.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":2,"w":47,"h":44}, "spriteSourceSize": {"x":1,"y":2,"w":47,"h":44},
@ -1298,7 +1298,7 @@
}, },
"sprites/wires/network_empty.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":41,"h":48}, "spriteSourceSize": {"x":5,"y":0,"w":41,"h":48},
@ -1306,7 +1306,7 @@
}, },
"sprites/wires/overlay_tile.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@ -1330,7 +1330,7 @@
}, },
"sprites/wires/sets/color_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
@ -1338,7 +1338,7 @@
}, },
"sprites/wires/sets/color_turn.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":63,"y":63,"w":81,"h":81}, "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
@ -1362,7 +1362,7 @@
}, },
"sprites/wires/sets/conflict_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
@ -1370,7 +1370,7 @@
}, },
"sprites/wires/sets/conflict_turn.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":63,"y":63,"w":81,"h":81}, "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
@ -1394,7 +1394,7 @@
}, },
"sprites/wires/sets/regular_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
@ -1426,7 +1426,7 @@
}, },
"sprites/wires/sets/shape_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":63,"w":144,"h":81}, "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
@ -1434,7 +1434,7 @@
}, },
"sprites/wires/sets/shape_turn.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":63,"y":63,"w":81,"h":81}, "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
@ -1455,6 +1455,6 @@
"format": "RGBA8888", "format": "RGBA8888",
"size": {"w":2048,"h":2048}, "size": {"w":2048,"h":2048},
"scale": "0.75", "scale": "0.75",
"smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$" "smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

@ -10,7 +10,7 @@
}, },
"sprites/belt/built/forward_1.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -18,7 +18,7 @@
}, },
"sprites/belt/built/forward_2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -26,7 +26,7 @@
}, },
"sprites/belt/built/forward_3.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -34,7 +34,7 @@
}, },
"sprites/belt/built/forward_4.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -42,7 +42,7 @@
}, },
"sprites/belt/built/forward_5.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -50,7 +50,7 @@
}, },
"sprites/belt/built/forward_6.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -58,7 +58,7 @@
}, },
"sprites/belt/built/forward_7.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -66,7 +66,7 @@
}, },
"sprites/belt/built/forward_8.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -74,7 +74,7 @@
}, },
"sprites/belt/built/forward_9.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -82,7 +82,7 @@
}, },
"sprites/belt/built/forward_10.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -90,7 +90,7 @@
}, },
"sprites/belt/built/forward_11.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -98,7 +98,7 @@
}, },
"sprites/belt/built/forward_12.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -106,7 +106,7 @@
}, },
"sprites/belt/built/forward_13.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -154,7 +154,7 @@
}, },
"sprites/belt/built/left_5.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@ -162,7 +162,7 @@
}, },
"sprites/belt/built/left_6.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@ -170,7 +170,7 @@
}, },
"sprites/belt/built/left_7.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@ -178,7 +178,7 @@
}, },
"sprites/belt/built/left_8.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@ -186,7 +186,7 @@
}, },
"sprites/belt/built/left_9.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@ -226,7 +226,7 @@
}, },
"sprites/belt/built/right_0.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -234,7 +234,7 @@
}, },
"sprites/belt/built/right_1.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -242,7 +242,7 @@
}, },
"sprites/belt/built/right_2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -250,7 +250,7 @@
}, },
"sprites/belt/built/right_3.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -258,7 +258,7 @@
}, },
"sprites/belt/built/right_4.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -266,7 +266,7 @@
}, },
"sprites/belt/built/right_5.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -274,7 +274,7 @@
}, },
"sprites/belt/built/right_6.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -282,7 +282,7 @@
}, },
"sprites/belt/built/right_7.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -290,7 +290,7 @@
}, },
"sprites/belt/built/right_8.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -298,7 +298,7 @@
}, },
"sprites/belt/built/right_9.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -306,7 +306,7 @@
}, },
"sprites/belt/built/right_10.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -314,7 +314,7 @@
}, },
"sprites/belt/built/right_11.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -322,7 +322,7 @@
}, },
"sprites/belt/built/right_12.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -330,7 +330,7 @@
}, },
"sprites/belt/built/right_13.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -338,7 +338,7 @@
}, },
"sprites/blueprints/belt_left.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@ -346,7 +346,7 @@
}, },
"sprites/blueprints/belt_right.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -354,7 +354,7 @@
}, },
"sprites/blueprints/belt_top.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@ -418,7 +418,7 @@
}, },
"sprites/blueprints/logic_gate-or.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":42}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":42},
@ -442,7 +442,7 @@
}, },
"sprites/blueprints/logic_gate.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
@ -450,7 +450,7 @@
}, },
"sprites/blueprints/miner-chainable.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@ -458,7 +458,7 @@
}, },
"sprites/blueprints/miner.png": "sprites/blueprints/miner.png":
{ {
"frame": {"x":3,"y":689,"w":47,"h":48}, "frame": {"x":55,"y":672,"w":47,"h":48},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@ -554,7 +554,7 @@
}, },
"sprites/blueprints/splitter-compact-merge.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@ -562,7 +562,7 @@
}, },
"sprites/blueprints/splitter-compact.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@ -602,7 +602,7 @@
}, },
"sprites/blueprints/underground_belt_entry-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":5,"w":48,"h":43}, "spriteSourceSize": {"x":0,"y":5,"w":48,"h":43},
@ -610,7 +610,7 @@
}, },
"sprites/blueprints/underground_belt_entry.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":10,"w":48,"h":38}, "spriteSourceSize": {"x":0,"y":10,"w":48,"h":38},
@ -618,7 +618,7 @@
}, },
"sprites/blueprints/underground_belt_exit-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
@ -626,7 +626,7 @@
}, },
"sprites/blueprints/underground_belt_exit.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
@ -650,7 +650,7 @@
}, },
"sprites/blueprints/virtual_processor-shapecompare.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
@ -698,7 +698,7 @@
}, },
"sprites/blueprints/wire.png": "sprites/blueprints/wire.png":
{ {
"frame": {"x":437,"y":722,"w":8,"h":48}, "frame": {"x":159,"y":520,"w":8,"h":48},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
@ -706,15 +706,15 @@
}, },
"sprites/blueprints/wire_tunnel-coating.png": "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, "rotated": false,
"trimmed": true, "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} "sourceSize": {"w":48,"h":48}
}, },
"sprites/blueprints/wire_tunnel.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
@ -730,7 +730,7 @@
}, },
"sprites/buildings/belt_right.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@ -810,7 +810,7 @@
}, },
"sprites/buildings/logic_gate-or.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":42}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":42},
@ -834,7 +834,7 @@
}, },
"sprites/buildings/logic_gate.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
@ -842,7 +842,7 @@
}, },
"sprites/buildings/miner-chainable.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@ -850,7 +850,7 @@
}, },
"sprites/buildings/miner.png": "sprites/buildings/miner.png":
{ {
"frame": {"x":106,"y":710,"w":47,"h":48}, "frame": {"x":158,"y":671,"w":47,"h":48},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@ -930,7 +930,7 @@
}, },
"sprites/buildings/splitter-compact-inverse.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
@ -946,7 +946,7 @@
}, },
"sprites/buildings/splitter-compact-merge.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@ -954,7 +954,7 @@
}, },
"sprites/buildings/splitter-compact.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@ -994,7 +994,7 @@
}, },
"sprites/buildings/underground_belt_entry-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":6,"w":47,"h":42}, "spriteSourceSize": {"x":1,"y":6,"w":47,"h":42},
@ -1002,7 +1002,7 @@
}, },
"sprites/buildings/underground_belt_entry.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":10,"w":47,"h":38}, "spriteSourceSize": {"x":1,"y":10,"w":47,"h":38},
@ -1010,7 +1010,7 @@
}, },
"sprites/buildings/underground_belt_exit-tier2.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
@ -1018,7 +1018,7 @@
}, },
"sprites/buildings/underground_belt_exit.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
@ -1042,7 +1042,7 @@
}, },
"sprites/buildings/virtual_processor-shapecompare.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
@ -1066,7 +1066,7 @@
}, },
"sprites/buildings/wire-cross.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@ -1074,7 +1074,7 @@
}, },
"sprites/buildings/wire-split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
@ -1090,7 +1090,7 @@
}, },
"sprites/buildings/wire.png": "sprites/buildings/wire.png":
{ {
"frame": {"x":501,"y":771,"w":8,"h":48}, "frame": {"x":159,"y":572,"w":8,"h":48},
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
@ -1098,7 +1098,7 @@
}, },
"sprites/buildings/wire_tunnel-coating.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":18,"y":1,"w":12,"h":46}, "spriteSourceSize": {"x":18,"y":1,"w":12,"h":46},
@ -1106,7 +1106,7 @@
}, },
"sprites/buildings/wire_tunnel.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":46}, "spriteSourceSize": {"x":1,"y":1,"w":47,"h":46},
@ -1162,7 +1162,7 @@
}, },
"sprites/misc/slot_bad_arrow.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@ -1170,7 +1170,7 @@
}, },
"sprites/misc/slot_good_arrow.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@ -1194,7 +1194,7 @@
}, },
"sprites/wires/boolean_false.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":2,"y":1,"w":12,"h":15}, "spriteSourceSize": {"x":2,"y":1,"w":12,"h":15},
@ -1202,7 +1202,7 @@
}, },
"sprites/wires/boolean_true.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":3,"y":1,"w":9,"h":15}, "spriteSourceSize": {"x":3,"y":1,"w":9,"h":15},
@ -1314,7 +1314,7 @@
}, },
"sprites/wires/sets/color_cross.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@ -1322,7 +1322,7 @@
}, },
"sprites/wires/sets/color_forward.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
@ -1330,7 +1330,7 @@
}, },
"sprites/wires/sets/color_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
@ -1346,7 +1346,7 @@
}, },
"sprites/wires/sets/conflict_cross.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@ -1354,7 +1354,7 @@
}, },
"sprites/wires/sets/conflict_forward.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
@ -1362,7 +1362,7 @@
}, },
"sprites/wires/sets/conflict_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
@ -1378,7 +1378,7 @@
}, },
"sprites/wires/sets/regular_cross.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@ -1386,7 +1386,7 @@
}, },
"sprites/wires/sets/regular_forward.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
@ -1394,7 +1394,7 @@
}, },
"sprites/wires/sets/regular_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
@ -1410,7 +1410,7 @@
}, },
"sprites/wires/sets/shape_cross.png": "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, "rotated": false,
"trimmed": false, "trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@ -1418,7 +1418,7 @@
}, },
"sprites/wires/sets/shape_forward.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":8,"h":48}, "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
@ -1426,7 +1426,7 @@
}, },
"sprites/wires/sets/shape_split.png": "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, "rotated": false,
"trimmed": true, "trimmed": true,
"spriteSourceSize": {"x":0,"y":20,"w":48,"h":28}, "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
@ -1455,6 +1455,6 @@
"format": "RGBA8888", "format": "RGBA8888",
"size": {"w":512,"h":1024}, "size": {"w":512,"h":1024},
"scale": "0.25", "scale": "0.25",
"smartupdate": "$TexturePacker:SmartUpdate:276f2044dea94b0977ef8f929d93d3db:fe07471c4d8352b4586f9103e9e8f916:908b89f5ca8ff73e331a35a3b14d0604$" "smartupdate": "$TexturePacker:SmartUpdate:26af492934beffa75e19b73e6d9eba56:d408ec7454e52a9384f80985bf14db9c:908b89f5ca8ff73e331a35a3b14d0604$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 277 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 KiB

After

Width:  |  Height:  |  Size: 658 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

@ -61,7 +61,7 @@ export const globalConfig = {
undergroundBeltMaxTilesByTier: [5, 8], undergroundBeltMaxTilesByTier: [5, 8],
readerAnalyzeIntervalSeconds: 10, readerAnalyzeIntervalSeconds: G_IS_DEV ? 3 : 10,
buildingSpeeds: { buildingSpeeds: {
cutter: 1 / 4, cutter: 1 / 4,

@ -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 * Returns if the game supports this browser
*/ */

@ -109,6 +109,11 @@ export class ItemProcessorComponent extends Component {
* How long it takes until we are done with the current items * How long it takes until we are done with the current items
*/ */
this.secondsUntilEject = 0; this.secondsUntilEject = 0;
/**
* How much processing time we have lest from the last tick
*/
this.bonusFromLastTick = 0;
} }
/** /**

@ -1,58 +1,58 @@
import { types } from "../../savegame/serialization"; import { types } from "../../savegame/serialization";
import { BaseItem } from "../base_item"; import { BaseItem } from "../base_item";
import { Component } from "../component"; import { Component } from "../component";
import { typeItemSingleton } from "../item_resolver"; import { typeItemSingleton } from "../item_resolver";
const chainBufferSize = 3; const chainBufferSize = 6;
export class MinerComponent extends Component { export class MinerComponent extends Component {
static getId() { static getId() {
return "Miner"; return "Miner";
} }
static getSchema() { static getSchema() {
// cachedMinedItem is not serialized. // cachedMinedItem is not serialized.
return { return {
lastMiningTime: types.ufloat, lastMiningTime: types.ufloat,
itemChainBuffer: types.array(typeItemSingleton), itemChainBuffer: types.array(typeItemSingleton),
}; };
} }
duplicateWithoutContents() { duplicateWithoutContents() {
return new MinerComponent({ return new MinerComponent({
chainable: this.chainable, chainable: this.chainable,
}); });
} }
constructor({ chainable = false }) { constructor({ chainable = false }) {
super(); super();
this.lastMiningTime = 0; this.lastMiningTime = 0;
this.chainable = chainable; this.chainable = chainable;
/** /**
* Stores items from other miners which were chained to this * Stores items from other miners which were chained to this
* miner. * miner.
* @type {Array<BaseItem>} * @type {Array<BaseItem>}
*/ */
this.itemChainBuffer = []; this.itemChainBuffer = [];
/** /**
* @type {BaseItem} * @type {BaseItem}
*/ */
this.cachedMinedItem = null; this.cachedMinedItem = null;
} }
/** /**
* *
* @param {BaseItem} item * @param {BaseItem} item
*/ */
tryAcceptChainedItem(item) { tryAcceptChainedItem(item) {
if (this.itemChainBuffer.length > chainBufferSize) { if (this.itemChainBuffer.length > chainBufferSize) {
// Well, this one is full // Well, this one is full
return false; return false;
} }
this.itemChainBuffer.push(item); this.itemChainBuffer.push(item);
return true; return true;
} }
} }

@ -25,10 +25,14 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
const ejectorComp = entity.components.ItemEjector; const ejectorComp = entity.components.ItemEjector;
// First of all, process the current recipe // First of all, process the current recipe
processorComp.secondsUntilEject = Math.max( const newSecondsUntilEject =
0, processorComp.secondsUntilEject - this.root.dynamicTickrate.deltaSeconds;
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) { if (G_IS_DEV && globalConfig.debug.instantProcessors) {
processorComp.secondsUntilEject = 0; processorComp.secondsUntilEject = 0;
@ -233,7 +237,10 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
} }
const baseSpeed = this.root.hubGoals.getProcessorBaseSpeed(processorComp.type); 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}>} */ /** @type {Array<{item: BaseItem, requiredSlot?: number, preferredSlot?: number}>} */
const outItems = []; const outItems = [];

@ -1,140 +1,144 @@
import { globalConfig } from "../../core/config"; import { globalConfig } from "../../core/config";
import { DrawParameters } from "../../core/draw_parameters"; import { DrawParameters } from "../../core/draw_parameters";
import { enumDirectionToVector } from "../../core/vector"; import { enumDirectionToVector } from "../../core/vector";
import { BaseItem } from "../base_item"; import { BaseItem } from "../base_item";
import { MinerComponent } from "../components/miner"; import { MinerComponent } from "../components/miner";
import { Entity } from "../entity"; import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter"; import { GameSystemWithFilter } from "../game_system_with_filter";
import { MapChunkView } from "../map_chunk_view"; import { MapChunkView } from "../map_chunk_view";
export class MinerSystem extends GameSystemWithFilter { export class MinerSystem extends GameSystemWithFilter {
constructor(root) { constructor(root) {
super(root, [MinerComponent]); super(root, [MinerComponent]);
} }
update() { update() {
let miningSpeed = this.root.hubGoals.getMinerBaseSpeed(); let miningSpeed = this.root.hubGoals.getMinerBaseSpeed();
if (G_IS_DEV && globalConfig.debug.instantMiners) { if (G_IS_DEV && globalConfig.debug.instantMiners) {
miningSpeed *= 100; miningSpeed *= 100;
} }
for (let i = 0; i < this.allEntities.length; ++i) { for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i]; const entity = this.allEntities[i];
// Check if miner is above an actual tile // Check if miner is above an actual tile
const minerComp = entity.components.Miner; const minerComp = entity.components.Miner;
if (!minerComp.cachedMinedItem) { if (!minerComp.cachedMinedItem) {
const staticComp = entity.components.StaticMapEntity; const staticComp = entity.components.StaticMapEntity;
const tileBelow = this.root.map.getLowerLayerContentXY( const tileBelow = this.root.map.getLowerLayerContentXY(
staticComp.origin.x, staticComp.origin.x,
staticComp.origin.y staticComp.origin.y
); );
if (!tileBelow) { if (!tileBelow) {
continue; continue;
} }
minerComp.cachedMinedItem = tileBelow; minerComp.cachedMinedItem = tileBelow;
} }
// First, try to get rid of chained items // First, try to get rid of chained items
if (minerComp.itemChainBuffer.length > 0) { if (minerComp.itemChainBuffer.length > 0) {
if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) { if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) {
minerComp.itemChainBuffer.shift(); minerComp.itemChainBuffer.shift();
continue; continue;
} }
} }
if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) { const mineDuration = 1 / miningSpeed;
if (this.tryPerformMinerEject(entity, minerComp.cachedMinedItem)) { const timeSinceMine = this.root.time.now() - minerComp.lastMiningTime;
// Analytics hook if (timeSinceMine > mineDuration) {
this.root.signals.itemProduced.dispatch(minerComp.cachedMinedItem); // Store how much we overflowed
const buffer = Math.min(timeSinceMine - mineDuration, this.root.dynamicTickrate.deltaSeconds);
// Actually mine
minerComp.lastMiningTime = this.root.time.now(); 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; * @param {Entity} entity
const ejectComp = entity.components.ItemEjector; * @param {BaseItem} item
const staticComp = entity.components.StaticMapEntity; */
tryPerformMinerEject(entity, item) {
// Check if we are a chained miner const minerComp = entity.components.Miner;
if (minerComp.chainable) { const ejectComp = entity.components.ItemEjector;
const ejectingSlot = ejectComp.slots[0]; const staticComp = entity.components.StaticMapEntity;
const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos);
const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction); // Check if we are a chained miner
if (minerComp.chainable) {
const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]); const ejectingSlot = ejectComp.slots[0];
const targetContents = this.root.map.getTileContent(targetTile, "regular"); const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos);
const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction);
// Check if we are connected to another miner and thus do not eject directly
if (targetContents) { const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]);
const targetMinerComp = targetContents.components.Miner; const targetContents = this.root.map.getTileContent(targetTile, "regular");
if (targetMinerComp) {
if (targetMinerComp.tryAcceptChainedItem(item)) { // Check if we are connected to another miner and thus do not eject directly
return true; if (targetContents) {
} else { const targetMinerComp = targetContents.components.Miner;
return false; 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; // 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; * @param {DrawParameters} parameters
* @param {MapChunkView} chunk
for (let i = 0; i < contents.length; ++i) { */
const entity = contents[i]; drawChunk(parameters, chunk) {
const minerComp = entity.components.Miner; const contents = chunk.containedEntitiesByLayer.regular;
if (!minerComp) {
continue; for (let i = 0; i < contents.length; ++i) {
} const entity = contents[i];
const minerComp = entity.components.Miner;
const staticComp = entity.components.StaticMapEntity; if (!minerComp) {
if (!minerComp.cachedMinedItem) { continue;
continue; }
}
const staticComp = entity.components.StaticMapEntity;
// Draw the item background - this is to hide the ejected item animation from if (!minerComp.cachedMinedItem) {
// the item ejecto continue;
}
const padding = 3;
const destX = staticComp.origin.x * globalConfig.tileSize + padding; // Draw the item background - this is to hide the ejected item animation from
const destY = staticComp.origin.y * globalConfig.tileSize + padding; // the item ejecto
const dimensions = globalConfig.tileSize - 2 * padding;
const padding = 3;
if (parameters.visibleRect.containsRect4Params(destX, destY, dimensions, dimensions)) { const destX = staticComp.origin.x * globalConfig.tileSize + padding;
parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource(); const destY = staticComp.origin.y * globalConfig.tileSize + padding;
parameters.context.fillRect(destX, destY, dimensions, dimensions); const dimensions = globalConfig.tileSize - 2 * padding;
}
if (parameters.visibleRect.containsRect4Params(destX, destY, dimensions, dimensions)) {
minerComp.cachedMinedItem.drawItemCenteredClipped( parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource();
(0.5 + staticComp.origin.x) * globalConfig.tileSize, parameters.context.fillRect(destX, destY, dimensions, dimensions);
(0.5 + staticComp.origin.y) * globalConfig.tileSize, }
parameters,
globalConfig.defaultItemDiameter minerComp.cachedMinedItem.drawItemCenteredClipped(
); (0.5 + staticComp.origin.x) * globalConfig.tileSize,
} (0.5 + staticComp.origin.y) * globalConfig.tileSize,
} parameters,
} globalConfig.defaultItemDiameter
);
}
}
}

@ -1,214 +1,200 @@
/* typehints:start */ /* typehints:start */
import { GameRoot } from "../root"; import { GameRoot } from "../root";
/* typehints:end */ /* typehints:end */
import { types, BasicSerializableObject } from "../../savegame/serialization"; import { types, BasicSerializableObject } from "../../savegame/serialization";
import { RegularGameSpeed } from "./regular_game_speed"; import { RegularGameSpeed } from "./regular_game_speed";
import { BaseGameSpeed } from "./base_game_speed"; import { BaseGameSpeed } from "./base_game_speed";
import { PausedGameSpeed } from "./paused_game_speed"; import { PausedGameSpeed } from "./paused_game_speed";
import { FastForwardGameSpeed } from "./fast_forward_game_speed"; import { gGameSpeedRegistry } from "../../core/global_registries";
import { gGameSpeedRegistry } from "../../core/global_registries"; import { globalConfig } from "../../core/config";
import { globalConfig } from "../../core/config"; import { createLogger } from "../../core/logging";
import { checkTimerExpired, quantizeFloat } from "../../core/utils";
import { createLogger } from "../../core/logging"; const logger = createLogger("game_time");
const logger = createLogger("game_time"); export class GameTime extends BasicSerializableObject {
/**
export class GameTime extends BasicSerializableObject { * @param {GameRoot} root
/** */
* @param {GameRoot} root constructor(root) {
*/ super();
constructor(root) { this.root = root;
super();
this.root = root; // Current ingame time seconds, not incremented while paused
this.timeSeconds = 0;
// 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;
// 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;
// The adjustment, used when loading savegames so we can continue where we were
this.realtimeAdjust = 0; /** @type {BaseGameSpeed} */
this.speed = new RegularGameSpeed(this.root);
/** @type {BaseGameSpeed} */
this.speed = new RegularGameSpeed(this.root); // Store how much time we have in bucket
this.logicTimeBudget = 0;
// Store how much time we have in bucket }
this.logicTimeBudget = 0;
} static getId() {
return "GameTime";
static getId() { }
return "GameTime";
} static getSchema() {
return {
static getSchema() { timeSeconds: types.float,
return { speed: types.obj(gGameSpeedRegistry),
timeSeconds: types.float, realtimeSeconds: 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
/** */
* 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;
updateRealtimeNow() { }
this.realtimeSeconds = performance.now() / 1000.0 + this.realtimeAdjust;
} /**
* Returns the ingame time in milliseconds
/** */
* Returns the ingame time in milliseconds getTimeMs() {
*/ return this.timeSeconds * 1000.0;
getTimeMs() { }
return this.timeSeconds * 1000.0;
} /**
* Returns how many seconds we are in the grace period
/** * @returns {number}
* Safe check to check if a timer is expired. quantizes numbers */
* @param {number} lastTick Last tick of the timer getRemainingGracePeriodSeconds() {
* @param {number} tickRateSeconds Interval of the timer in seconds return 0;
*/ }
isIngameTimerExpired(lastTick, tickRateSeconds) {
return checkTimerExpired(this.timeSeconds, lastTick, tickRateSeconds); /**
} * Returns if we are currently in the grace period
* @returns {boolean}
/** */
* Returns how many seconds we are in the grace period getIsWithinGracePeriod() {
* @returns {number} return this.getRemainingGracePeriodSeconds() > 0;
*/ }
getRemainingGracePeriodSeconds() {
return 0; /**
} * Internal method to generate new logic time budget
* @param {number} deltaMs
/** */
* Returns if we are currently in the grace period internalAddDeltaToBudget(deltaMs) {
* @returns {boolean} // Only update if game is supposed to update
*/ if (this.root.hud.shouldPauseGame()) {
getIsWithinGracePeriod() { this.logicTimeBudget = 0;
return this.getRemainingGracePeriodSeconds() > 0; } else {
} const multiplier = this.getSpeed().getTimeMultiplier();
this.logicTimeBudget += deltaMs * multiplier;
/** }
* Internal method to generate new logic time budget
* @param {number} deltaMs // Check for too big pile of updates -> reduce it to 1
*/ let maxLogicSteps = Math.max(
internalAddDeltaToBudget(deltaMs) { 3,
// Only update if game is supposed to update (this.speed.getMaxLogicStepsInQueue() * this.root.dynamicTickrate.currentTickRate) / 60
if (this.root.hud.shouldPauseGame()) { );
this.logicTimeBudget = 0; if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) {
} else { maxLogicSteps *= 1 + globalConfig.debug.framePausesBetweenTicks;
const multiplier = this.getSpeed().getTimeMultiplier(); }
this.logicTimeBudget += deltaMs * multiplier;
} if (this.logicTimeBudget > this.root.dynamicTickrate.deltaMs * maxLogicSteps) {
this.logicTimeBudget = this.root.dynamicTickrate.deltaMs * maxLogicSteps;
// Check for too big pile of updates -> reduce it to 1 }
let maxLogicSteps = Math.max( }
3,
(this.speed.getMaxLogicStepsInQueue() * this.root.dynamicTickrate.currentTickRate) / 60 /**
); * Performs update ticks based on the queued logic budget
if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) { * @param {number} deltaMs
maxLogicSteps *= 1 + globalConfig.debug.framePausesBetweenTicks; * @param {function():boolean} updateMethod
} */
performTicks(deltaMs, updateMethod) {
if (this.logicTimeBudget > this.root.dynamicTickrate.deltaMs * maxLogicSteps) { this.internalAddDeltaToBudget(deltaMs);
this.logicTimeBudget = this.root.dynamicTickrate.deltaMs * maxLogicSteps;
} const speedAtStart = this.root.time.getSpeed();
}
let effectiveDelta = this.root.dynamicTickrate.deltaMs;
/** if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) {
* Performs update ticks based on the queued logic budget effectiveDelta += globalConfig.debug.framePausesBetweenTicks * this.root.dynamicTickrate.deltaMs;
* @param {number} deltaMs }
* @param {function():boolean} updateMethod
*/ // Update physics & logic
performTicks(deltaMs, updateMethod) { while (this.logicTimeBudget >= effectiveDelta) {
this.internalAddDeltaToBudget(deltaMs); this.logicTimeBudget -= effectiveDelta;
const speedAtStart = this.root.time.getSpeed(); if (!updateMethod()) {
// Gameover happened or so, do not update anymore
let effectiveDelta = this.root.dynamicTickrate.deltaMs; return;
if (G_IS_DEV && globalConfig.debug.framePausesBetweenTicks) { }
effectiveDelta += globalConfig.debug.framePausesBetweenTicks * this.root.dynamicTickrate.deltaMs;
} // Step game time
this.timeSeconds += this.root.dynamicTickrate.deltaSeconds;
// Update physics & logic
while (this.logicTimeBudget >= effectiveDelta) { // Game time speed changed, need to abort since our logic steps are no longer valid
this.logicTimeBudget -= effectiveDelta; if (speedAtStart.getId() !== this.speed.getId()) {
logger.warn(
if (!updateMethod()) { "Skipping update because speed changed from",
// Gameover happened or so, do not update anymore speedAtStart.getId(),
return; "to",
} this.speed.getId()
);
// Step game time break;
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", * Returns ingame time in seconds
speedAtStart.getId(), * @returns {number} seconds
"to", */
this.speed.getId() now() {
); return this.timeSeconds;
break; }
}
} /**
} * Returns "real" time in seconds
* @returns {number} seconds
/** */
* Returns ingame time in seconds realtimeNow() {
* @returns {number} seconds return this.realtimeSeconds;
*/ }
now() {
return this.timeSeconds; /**
} * Returns "real" time in seconds
* @returns {number} seconds
/** */
* Returns "real" time in seconds systemNow() {
* @returns {number} seconds return (this.realtimeSeconds - this.realtimeAdjust) * 1000.0;
*/ }
realtimeNow() {
return this.realtimeSeconds; getIsPaused() {
} return this.speed.getId() === PausedGameSpeed.getId();
}
/**
* Returns "real" time in seconds getSpeed() {
* @returns {number} seconds return this.speed;
*/ }
systemNow() {
return (this.realtimeSeconds - this.realtimeAdjust) * 1000.0; setSpeed(speed) {
} assert(speed instanceof BaseGameSpeed, "Not a valid game speed");
if (this.speed.getId() === speed.getId()) {
getIsPaused() { logger.warn("Same speed set than current one:", speed.constructor.getId());
return this.speed.getId() === PausedGameSpeed.getId(); }
} this.speed = speed;
}
getSpeed() {
return this.speed; deserialize(data) {
} const errorCode = super.deserialize(data);
if (errorCode) {
setSpeed(speed) { return errorCode;
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()); // Adjust realtime now difference so they match
} this.realtimeAdjust = this.realtimeSeconds - performance.now() / 1000.0;
this.speed = speed; this.updateRealtimeNow();
}
this.speed.initializeAfterDeserialize(this.root);
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);
}
}

@ -126,6 +126,9 @@ export const autosaveIntervals = [
const refreshRateOptions = ["60", "75", "100", "120", "144", "165", "250", "500"]; const refreshRateOptions = ["60", "75", "100", "120", "144", "165", "250", "500"];
if (G_IS_DEV) { if (G_IS_DEV) {
refreshRateOptions.unshift("30");
refreshRateOptions.unshift("10");
refreshRateOptions.unshift("5");
refreshRateOptions.push("1000"); refreshRateOptions.push("1000");
refreshRateOptions.push("2000"); refreshRateOptions.push("2000");
refreshRateOptions.push("5000"); refreshRateOptions.push("5000");

Loading…
Cancel
Save