diff --git a/res/ui/building_icons/belt.png b/res/ui/building_icons/belt.png new file mode 100644 index 00000000..d0f5e11b Binary files /dev/null and b/res/ui/building_icons/belt.png differ diff --git a/res/ui/building_icons/cutter.png b/res/ui/building_icons/cutter.png new file mode 100644 index 00000000..ab69cfbd Binary files /dev/null and b/res/ui/building_icons/cutter.png differ diff --git a/res/ui/building_icons/miner.png b/res/ui/building_icons/miner.png new file mode 100644 index 00000000..0e5c209c Binary files /dev/null and b/res/ui/building_icons/miner.png differ diff --git a/res/ui/building_icons/mixer.png b/res/ui/building_icons/mixer.png new file mode 100644 index 00000000..62e15780 Binary files /dev/null and b/res/ui/building_icons/mixer.png differ diff --git a/res/ui/building_icons/painter.png b/res/ui/building_icons/painter.png new file mode 100644 index 00000000..60a1c784 Binary files /dev/null and b/res/ui/building_icons/painter.png differ diff --git a/res/ui/building_icons/rotater.png b/res/ui/building_icons/rotater.png new file mode 100644 index 00000000..fe0b2186 Binary files /dev/null and b/res/ui/building_icons/rotater.png differ diff --git a/res/ui/building_icons/splitter.png b/res/ui/building_icons/splitter.png new file mode 100644 index 00000000..29ea7123 Binary files /dev/null and b/res/ui/building_icons/splitter.png differ diff --git a/res/ui/building_icons/stacker.png b/res/ui/building_icons/stacker.png new file mode 100644 index 00000000..3098ae3e Binary files /dev/null and b/res/ui/building_icons/stacker.png differ diff --git a/res/ui/building_icons/trash.png b/res/ui/building_icons/trash.png new file mode 100644 index 00000000..8f094f2e Binary files /dev/null and b/res/ui/building_icons/trash.png differ diff --git a/res/ui/building_icons/underground_belt.png b/res/ui/building_icons/underground_belt.png new file mode 100644 index 00000000..4a4c2dc5 Binary files /dev/null and b/res/ui/building_icons/underground_belt.png differ diff --git a/res/ui/building_tutorials/painter.png b/res/ui/building_tutorials/painter.png index 16fb4850..8791082f 100644 Binary files a/res/ui/building_tutorials/painter.png and b/res/ui/building_tutorials/painter.png differ diff --git a/res/ui/upgrades/belt.png b/res/ui/upgrades/belt.png deleted file mode 100644 index a1a9b716..00000000 Binary files a/res/ui/upgrades/belt.png and /dev/null differ diff --git a/res/ui/upgrades/miner.png b/res/ui/upgrades/miner.png deleted file mode 100644 index 535edc06..00000000 Binary files a/res/ui/upgrades/miner.png and /dev/null differ diff --git a/res/ui/upgrades/painting.png b/res/ui/upgrades/painting.png deleted file mode 100644 index 03749952..00000000 Binary files a/res/ui/upgrades/painting.png and /dev/null differ diff --git a/res/ui/upgrades/processors.png b/res/ui/upgrades/processors.png deleted file mode 100644 index 5d785baa..00000000 Binary files a/res/ui/upgrades/processors.png and /dev/null differ diff --git a/res_built/atlas/atlas0_10.json b/res_built/atlas/atlas0_10.json index e30d4b64..45f42389 100644 --- a/res_built/atlas/atlas0_10.json +++ b/res_built/atlas/atlas0_10.json @@ -2,7 +2,7 @@ "sprites/belt/forward_0.png": { - "frame": {"x":67,"y":115,"w":13,"h":13}, + "frame": {"x":231,"y":23,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -10,7 +10,7 @@ }, "sprites/belt/forward_1.png": { - "frame": {"x":90,"y":95,"w":13,"h":13}, + "frame": {"x":215,"y":69,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -18,7 +18,7 @@ }, "sprites/belt/forward_2.png": { - "frame": {"x":67,"y":132,"w":13,"h":13}, + "frame": {"x":250,"y":3,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -26,7 +26,7 @@ }, "sprites/belt/forward_3.png": { - "frame": {"x":67,"y":149,"w":13,"h":13}, + "frame": {"x":267,"y":3,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -34,7 +34,7 @@ }, "sprites/belt/forward_4.png": { - "frame": {"x":67,"y":166,"w":13,"h":13}, + "frame": {"x":250,"y":20,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -42,7 +42,7 @@ }, "sprites/belt/forward_5.png": { - "frame": {"x":67,"y":183,"w":13,"h":13}, + "frame": {"x":267,"y":20,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -50,7 +50,7 @@ }, "sprites/belt/left_0.png": { - "frame": {"x":67,"y":200,"w":13,"h":13}, + "frame": {"x":248,"y":37,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -58,7 +58,7 @@ }, "sprites/belt/left_1.png": { - "frame": {"x":72,"y":217,"w":13,"h":13}, + "frame": {"x":265,"y":37,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -66,7 +66,7 @@ }, "sprites/belt/left_2.png": { - "frame": {"x":84,"y":115,"w":13,"h":13}, + "frame": {"x":217,"y":86,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -74,7 +74,7 @@ }, "sprites/belt/left_3.png": { - "frame": {"x":84,"y":132,"w":13,"h":13}, + "frame": {"x":232,"y":69,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -82,7 +82,7 @@ }, "sprites/belt/left_4.png": { - "frame": {"x":84,"y":149,"w":13,"h":13}, + "frame": {"x":217,"y":103,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -90,7 +90,7 @@ }, "sprites/belt/left_5.png": { - "frame": {"x":84,"y":166,"w":13,"h":13}, + "frame": {"x":249,"y":54,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -98,7 +98,7 @@ }, "sprites/belt/right_0.png": { - "frame": {"x":84,"y":183,"w":13,"h":13}, + "frame": {"x":266,"y":54,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -106,7 +106,7 @@ }, "sprites/belt/right_1.png": { - "frame": {"x":84,"y":200,"w":13,"h":13}, + "frame": {"x":249,"y":71,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -114,7 +114,7 @@ }, "sprites/belt/right_2.png": { - "frame": {"x":89,"y":217,"w":13,"h":13}, + "frame": {"x":266,"y":71,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -122,7 +122,7 @@ }, "sprites/belt/right_3.png": { - "frame": {"x":101,"y":112,"w":13,"h":13}, + "frame": {"x":234,"y":88,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -130,7 +130,7 @@ }, "sprites/belt/right_4.png": { - "frame": {"x":101,"y":129,"w":13,"h":13}, + "frame": {"x":234,"y":105,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -138,7 +138,7 @@ }, "sprites/belt/right_5.png": { - "frame": {"x":101,"y":146,"w":13,"h":13}, + "frame": {"x":251,"y":88,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -146,7 +146,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":101,"y":163,"w":13,"h":13}, + "frame": {"x":268,"y":88,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -154,7 +154,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":101,"y":180,"w":13,"h":13}, + "frame": {"x":251,"y":105,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -162,7 +162,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":101,"y":197,"w":13,"h":13}, + "frame": {"x":268,"y":105,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -170,15 +170,23 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":82,"y":3,"w":36,"h":19}, + "frame": {"x":133,"y":95,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, "sourceSize": {"w":38,"h":19} }, +"sprites/blueprints/miner-chainable.png": +{ + "frame": {"x":164,"y":26,"w":19,"h":19}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, + "sourceSize": {"w":19,"h":19} +}, "sprites/blueprints/miner.png": { - "frame": {"x":44,"y":83,"w":19,"h":19}, + "frame": {"x":164,"y":49,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -186,31 +194,47 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":3,"y":83,"w":37,"h":19}, + "frame": {"x":82,"y":49,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, "sourceSize": {"w":38,"h":19} }, +"sprites/blueprints/painter-double.png": +{ + "frame": {"x":3,"y":83,"w":38,"h":38}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":38,"h":38}, + "sourceSize": {"w":38,"h":38} +}, "sprites/blueprints/painter.png": { - "frame": {"x":3,"y":106,"w":37,"h":19}, + "frame": {"x":82,"y":3,"w":38,"h":19}, "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":38,"h":19}, "sourceSize": {"w":38,"h":19} }, "sprites/blueprints/rotater.png": { - "frame": {"x":44,"y":106,"w":19,"h":19}, + "frame": {"x":169,"y":72,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, "sourceSize": {"w":19,"h":19} }, +"sprites/blueprints/splitter-compact.png": +{ + "frame": {"x":196,"y":95,"w":17,"h":19}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":2,"y":0,"w":17,"h":19}, + "sourceSize": {"w":19,"h":19} +}, "sprites/blueprints/splitter.png": { - "frame": {"x":82,"y":26,"w":36,"h":19}, + "frame": {"x":124,"y":3,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -218,7 +242,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":3,"y":129,"w":37,"h":19}, + "frame": {"x":87,"y":82,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, @@ -226,7 +250,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":44,"y":129,"w":19,"h":19}, + "frame": {"x":173,"y":95,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -234,7 +258,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":3,"y":221,"w":19,"h":16}, + "frame": {"x":87,"y":105,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":19,"h":16}, @@ -242,7 +266,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":26,"y":221,"w":19,"h":16}, + "frame": {"x":110,"y":105,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":16}, @@ -250,7 +274,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":67,"y":200,"w":13,"h":13}, + "frame": {"x":248,"y":37,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -258,7 +282,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":84,"y":183,"w":13,"h":13}, + "frame": {"x":266,"y":54,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -266,7 +290,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":67,"y":115,"w":13,"h":13}, + "frame": {"x":231,"y":23,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -274,7 +298,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":82,"y":49,"w":36,"h":19}, + "frame": {"x":124,"y":26,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -288,9 +312,17 @@ "spriteSourceSize": {"x":1,"y":1,"w":75,"h":76}, "sourceSize": {"w":77,"h":77} }, +"sprites/buildings/miner-chainable.png": +{ + "frame": {"x":187,"y":26,"w":19,"h":19}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, + "sourceSize": {"w":19,"h":19} +}, "sprites/buildings/miner.png": { - "frame": {"x":44,"y":152,"w":19,"h":19}, + "frame": {"x":204,"y":3,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -298,31 +330,47 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":3,"y":152,"w":37,"h":19}, + "frame": {"x":123,"y":49,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, "sourceSize": {"w":38,"h":19} }, +"sprites/buildings/painter-double.png": +{ + "frame": {"x":45,"y":83,"w":38,"h":38}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":38,"h":38}, + "sourceSize": {"w":38,"h":38} +}, "sprites/buildings/painter.png": { - "frame": {"x":3,"y":175,"w":37,"h":19}, + "frame": {"x":82,"y":26,"w":38,"h":19}, "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":38,"h":19}, "sourceSize": {"w":38,"h":19} }, "sprites/buildings/rotater.png": { - "frame": {"x":44,"y":175,"w":19,"h":19}, + "frame": {"x":187,"y":49,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, "sourceSize": {"w":19,"h":19} }, +"sprites/buildings/splitter-compact.png": +{ + "frame": {"x":210,"y":26,"w":17,"h":19}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":2,"y":0,"w":17,"h":19}, + "sourceSize": {"w":19,"h":19} +}, "sprites/buildings/splitter.png": { - "frame": {"x":82,"y":72,"w":36,"h":19}, + "frame": {"x":164,"y":3,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -330,7 +378,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":3,"y":198,"w":37,"h":19}, + "frame": {"x":128,"y":72,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, @@ -338,7 +386,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":44,"y":198,"w":19,"h":19}, + "frame": {"x":192,"y":72,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -346,7 +394,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":49,"y":221,"w":19,"h":16}, + "frame": {"x":227,"y":3,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":19,"h":16}, @@ -354,7 +402,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":67,"y":95,"w":19,"h":16}, + "frame": {"x":210,"y":49,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":16}, @@ -362,7 +410,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":67,"y":83,"w":6,"h":6}, + "frame": {"x":82,"y":72,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -370,7 +418,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":106,"y":228,"w":6,"h":6}, + "frame": {"x":92,"y":72,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -378,7 +426,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":72,"y":234,"w":3,"h":3}, + "frame": {"x":102,"y":72,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -386,7 +434,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":79,"y":234,"w":3,"h":3}, + "frame": {"x":109,"y":72,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -394,7 +442,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":86,"y":234,"w":3,"h":3}, + "frame": {"x":116,"y":72,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -402,7 +450,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":107,"y":95,"w":10,"h":10}, + "frame": {"x":233,"y":40,"w":10,"h":10}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":10,"h":10}, @@ -410,7 +458,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":107,"y":95,"w":10,"h":10}, + "frame": {"x":233,"y":40,"w":10,"h":10}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":10,"h":10}, @@ -418,7 +466,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":106,"y":214,"w":10,"h":10}, + "frame": {"x":233,"y":54,"w":10,"h":10}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":10,"h":10}, @@ -429,8 +477,8 @@ "version": "1.0", "image": "atlas0_10.png", "format": "RGBA8888", - "size": {"w":121,"h":240}, + "size": {"w":284,"h":124}, "scale": "0.1", - "smartupdate": "$TexturePacker:SmartUpdate:6f541b04fa898735b7720261181cc97b:b18d1c683463edcbb86f64fc0c0cfac0:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:f63fd65ef73974465324213239ca32e1:fb51df0c27e5bdac60799c0e88f833c7:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_10.png b/res_built/atlas/atlas0_10.png index 31b3a557..6374e56c 100644 Binary files a/res_built/atlas/atlas0_10.png and b/res_built/atlas/atlas0_10.png differ diff --git a/res_built/atlas/atlas0_100.json b/res_built/atlas/atlas0_100.json index 4343866f..d061c98b 100644 --- a/res_built/atlas/atlas0_100.json +++ b/res_built/atlas/atlas0_100.json @@ -2,7 +2,7 @@ "sprites/belt/forward_0.png": { - "frame": {"x":109,"y":1839,"w":100,"h":126}, + "frame": {"x":2371,"y":329,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -10,7 +10,7 @@ }, "sprites/belt/forward_1.png": { - "frame": {"x":213,"y":1839,"w":100,"h":126}, + "frame": {"x":1797,"y":587,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -18,7 +18,7 @@ }, "sprites/belt/forward_2.png": { - "frame": {"x":317,"y":1839,"w":100,"h":126}, + "frame": {"x":1838,"y":717,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -26,7 +26,7 @@ }, "sprites/belt/forward_3.png": { - "frame": {"x":346,"y":1709,"w":100,"h":126}, + "frame": {"x":1901,"y":585,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -34,7 +34,7 @@ }, "sprites/belt/forward_4.png": { - "frame": {"x":421,"y":1839,"w":100,"h":126}, + "frame": {"x":2005,"y":585,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -42,7 +42,7 @@ }, "sprites/belt/forward_5.png": { - "frame": {"x":450,"y":1709,"w":100,"h":126}, + "frame": {"x":1942,"y":715,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -50,7 +50,7 @@ }, "sprites/belt/left_0.png": { - "frame": {"x":891,"y":783,"w":113,"h":113}, + "frame": {"x":2186,"y":502,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -58,7 +58,7 @@ }, "sprites/belt/left_1.png": { - "frame": {"x":891,"y":900,"w":113,"h":113}, + "frame": {"x":2303,"y":502,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -66,7 +66,7 @@ }, "sprites/belt/left_2.png": { - "frame": {"x":889,"y":1254,"w":113,"h":113}, + "frame": {"x":1838,"y":847,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -74,7 +74,7 @@ }, "sprites/belt/left_3.png": { - "frame": {"x":888,"y":1371,"w":113,"h":113}, + "frame": {"x":1955,"y":845,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -82,7 +82,7 @@ }, "sprites/belt/left_4.png": { - "frame": {"x":882,"y":1488,"w":113,"h":113}, + "frame": {"x":2046,"y":715,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -90,7 +90,7 @@ }, "sprites/belt/left_5.png": { - "frame": {"x":873,"y":1605,"w":113,"h":113}, + "frame": {"x":2072,"y":832,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -98,7 +98,7 @@ }, "sprites/belt/right_0.png": { - "frame": {"x":873,"y":1722,"w":113,"h":113}, + "frame": {"x":2163,"y":619,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -106,7 +106,7 @@ }, "sprites/belt/right_1.png": { - "frame": {"x":3,"y":1710,"w":113,"h":113}, + "frame": {"x":2280,"y":619,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -114,7 +114,7 @@ }, "sprites/belt/right_2.png": { - "frame": {"x":120,"y":1710,"w":113,"h":113}, + "frame": {"x":2189,"y":736,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -122,7 +122,7 @@ }, "sprites/belt/right_3.png": { - "frame": {"x":525,"y":1839,"w":113,"h":113}, + "frame": {"x":2189,"y":853,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -130,7 +130,7 @@ }, "sprites/belt/right_4.png": { - "frame": {"x":554,"y":1709,"w":113,"h":113}, + "frame": {"x":2306,"y":736,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -138,7 +138,7 @@ }, "sprites/belt/right_5.png": { - "frame": {"x":642,"y":1839,"w":113,"h":113}, + "frame": {"x":2306,"y":853,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -146,7 +146,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":889,"y":1136,"w":114,"h":114}, + "frame": {"x":2048,"y":316,"w":114,"h":114}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":12,"w":114,"h":114}, @@ -154,7 +154,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":889,"y":1017,"w":114,"h":115}, + "frame": {"x":2048,"y":197,"w":114,"h":115}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":12,"y":11,"w":114,"h":115}, @@ -162,7 +162,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":3,"y":1839,"w":102,"h":126}, + "frame": {"x":2352,"y":199,"w":102,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":12,"y":0,"w":102,"h":126}, @@ -170,15 +170,23 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":352,"y":1320,"w":341,"h":191}, + "frame": {"x":391,"y":737,"w":341,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":341,"h":191}, "sourceSize": {"w":384,"h":192} }, +"sprites/blueprints/miner-chainable.png": +{ + "frame": {"x":1466,"y":778,"w":182,"h":190}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":6,"y":0,"w":182,"h":190}, + "sourceSize": {"w":192,"h":192} +}, "sprites/blueprints/miner.png": { - "frame": {"x":705,"y":783,"w":182,"h":190}, + "frame": {"x":1652,"y":771,"w":182,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":182,"h":190}, @@ -186,31 +194,47 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":3,"y":737,"w":347,"h":191}, + "frame": {"x":1123,"y":388,"w":347,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":18,"y":0,"w":347,"h":191}, "sourceSize": {"w":384,"h":192} }, -"sprites/blueprints/painter.png": +"sprites/blueprints/painter-double.png": { - "frame": {"x":354,"y":737,"w":347,"h":191}, + "frame": {"x":735,"y":3,"w":384,"h":382}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":18,"y":0,"w":347,"h":191}, + "spriteSourceSize": {"x":0,"y":0,"w":384,"h":382}, + "sourceSize": {"w":384,"h":384} +}, +"sprites/blueprints/painter.png": +{ + "frame": {"x":3,"y":737,"w":384,"h":192}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":384,"h":192}, "sourceSize": {"w":384,"h":192} }, "sprites/blueprints/rotater.png": { - "frame": {"x":735,"y":394,"w":189,"h":191}, + "frame": {"x":1275,"y":583,"w":189,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":189,"h":191}, "sourceSize": {"w":192,"h":192} }, +"sprites/blueprints/splitter-compact.png": +{ + "frame": {"x":1468,"y":587,"w":161,"h":182}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":31,"y":4,"w":161,"h":182}, + "sourceSize": {"w":192,"h":192} +}, "sprites/blueprints/splitter.png": { - "frame": {"x":3,"y":1321,"w":340,"h":191}, + "frame": {"x":1474,"y":392,"w":340,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":340,"h":191}, @@ -218,7 +242,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":3,"y":932,"w":347,"h":191}, + "frame": {"x":1511,"y":3,"w":347,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":18,"y":0,"w":347,"h":191}, @@ -226,7 +250,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":735,"y":3,"w":192,"h":192}, + "frame": {"x":2211,"y":3,"w":192,"h":192}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":192}, @@ -234,7 +258,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":703,"y":977,"w":182,"h":148}, + "frame": {"x":1862,"y":197,"w":182,"h":148}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":44,"w":182,"h":148}, @@ -242,7 +266,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":703,"y":1129,"w":182,"h":148}, + "frame": {"x":2166,"y":199,"w":182,"h":148}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":182,"h":148}, @@ -250,7 +274,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":891,"y":783,"w":113,"h":113}, + "frame": {"x":2186,"y":502,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -258,7 +282,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":873,"y":1722,"w":113,"h":113}, + "frame": {"x":2163,"y":619,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -266,7 +290,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":109,"y":1839,"w":100,"h":126}, + "frame": {"x":2371,"y":329,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -274,7 +298,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":347,"y":1515,"w":339,"h":190}, + "frame": {"x":736,"y":584,"w":339,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":24,"y":0,"w":339,"h":190}, @@ -288,9 +312,17 @@ "spriteSourceSize": {"x":20,"y":22,"w":728,"h":730}, "sourceSize": {"w":768,"h":768} }, +"sprites/buildings/miner-chainable.png": +{ + "frame": {"x":1818,"y":392,"w":179,"h":188}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":8,"y":1,"w":179,"h":188}, + "sourceSize": {"w":192,"h":192} +}, "sprites/buildings/miner.png": { - "frame": {"x":690,"y":1583,"w":179,"h":189}, + "frame": {"x":1079,"y":779,"w":179,"h":189}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":179,"h":189}, @@ -298,31 +330,47 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":354,"y":932,"w":345,"h":190}, + "frame": {"x":1862,"y":3,"w":345,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":19,"y":0,"w":345,"h":190}, "sourceSize": {"w":384,"h":192} }, -"sprites/buildings/painter.png": +"sprites/buildings/painter-double.png": { - "frame": {"x":354,"y":1126,"w":345,"h":190}, + "frame": {"x":1123,"y":3,"w":384,"h":381}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":19,"y":0,"w":345,"h":190}, + "spriteSourceSize": {"x":0,"y":0,"w":384,"h":381}, + "sourceSize": {"w":384,"h":384} +}, +"sprites/buildings/painter.png": +{ + "frame": {"x":735,"y":389,"w":384,"h":191}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":0,"y":0,"w":384,"h":191}, "sourceSize": {"w":384,"h":192} }, "sprites/buildings/rotater.png": { - "frame": {"x":735,"y":589,"w":187,"h":190}, + "frame": {"x":1275,"y":778,"w":187,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":187,"h":190}, "sourceSize": {"w":192,"h":192} }, +"sprites/buildings/splitter-compact.png": +{ + "frame": {"x":1633,"y":587,"w":160,"h":180}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":32,"y":5,"w":160,"h":180}, + "sourceSize": {"w":192,"h":192} +}, "sprites/buildings/splitter.png": { - "frame": {"x":3,"y":1516,"w":339,"h":190}, + "frame": {"x":736,"y":778,"w":339,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":24,"y":0,"w":339,"h":190}, @@ -330,7 +378,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":3,"y":1127,"w":345,"h":190}, + "frame": {"x":1511,"y":198,"w":345,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":19,"y":0,"w":345,"h":190}, @@ -338,7 +386,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":735,"y":199,"w":192,"h":191}, + "frame": {"x":1079,"y":584,"w":192,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":192,"h":191}, @@ -346,7 +394,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":703,"y":1281,"w":181,"h":147}, + "frame": {"x":2001,"y":434,"w":181,"h":147}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":45,"w":181,"h":147}, @@ -354,7 +402,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":697,"y":1432,"w":181,"h":147}, + "frame": {"x":2186,"y":351,"w":181,"h":147}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":181,"h":147}, @@ -362,7 +410,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":931,"y":3,"w":50,"h":64}, + "frame": {"x":2109,"y":585,"w":50,"h":64}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":50,"h":64}, @@ -370,7 +418,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":931,"y":71,"w":50,"h":64}, + "frame": {"x":2397,"y":619,"w":50,"h":64}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":50,"h":64}, @@ -378,7 +426,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":931,"y":171,"w":24,"h":32}, + "frame": {"x":3,"y":933,"w":24,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":24,"h":32}, @@ -386,7 +434,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":931,"y":139,"w":28,"h":28}, + "frame": {"x":2371,"y":459,"w":28,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":28,"h":28}, @@ -394,7 +442,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":963,"y":139,"w":28,"h":28}, + "frame": {"x":1797,"y":717,"w":28,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":28,"h":28}, @@ -402,7 +450,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":237,"y":1710,"w":82,"h":82}, + "frame": {"x":2407,"y":103,"w":82,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":7,"w":82,"h":82}, @@ -410,7 +458,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":237,"y":1710,"w":82,"h":82}, + "frame": {"x":2407,"y":103,"w":82,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":7,"w":82,"h":82}, @@ -418,7 +466,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":759,"y":1776,"w":80,"h":96}, + "frame": {"x":2407,"y":3,"w":80,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":80,"h":96}, @@ -429,8 +477,8 @@ "version": "1.0", "image": "atlas0_100.png", "format": "RGBA8888", - "size": {"w":1007,"h":1968}, + "size": {"w":2492,"h":971}, "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:6f541b04fa898735b7720261181cc97b:b18d1c683463edcbb86f64fc0c0cfac0:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:f63fd65ef73974465324213239ca32e1:fb51df0c27e5bdac60799c0e88f833c7:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_100.png b/res_built/atlas/atlas0_100.png index 8feb3613..18496463 100644 Binary files a/res_built/atlas/atlas0_100.png and b/res_built/atlas/atlas0_100.png differ diff --git a/res_built/atlas/atlas0_25.json b/res_built/atlas/atlas0_25.json index 576ad18f..d679d112 100644 --- a/res_built/atlas/atlas0_25.json +++ b/res_built/atlas/atlas0_25.json @@ -2,7 +2,7 @@ "sprites/belt/forward_0.png": { - "frame": {"x":425,"y":55,"w":28,"h":32}, + "frame": {"x":393,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -10,7 +10,7 @@ }, "sprites/belt/forward_1.png": { - "frame": {"x":425,"y":91,"w":28,"h":32}, + "frame": {"x":425,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -18,7 +18,7 @@ }, "sprites/belt/forward_2.png": { - "frame": {"x":425,"y":127,"w":28,"h":32}, + "frame": {"x":457,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -26,7 +26,7 @@ }, "sprites/belt/forward_3.png": { - "frame": {"x":425,"y":163,"w":28,"h":32}, + "frame": {"x":489,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -34,7 +34,7 @@ }, "sprites/belt/forward_4.png": { - "frame": {"x":437,"y":199,"w":28,"h":32}, + "frame": {"x":521,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -42,7 +42,7 @@ }, "sprites/belt/forward_5.png": { - "frame": {"x":457,"y":89,"w":28,"h":32}, + "frame": {"x":553,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -50,7 +50,7 @@ }, "sprites/belt/left_0.png": { - "frame": {"x":469,"y":55,"w":30,"h":30}, + "frame": {"x":589,"y":142,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -58,7 +58,7 @@ }, "sprites/belt/left_1.png": { - "frame": {"x":503,"y":55,"w":30,"h":30}, + "frame": {"x":628,"y":3,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -66,7 +66,7 @@ }, "sprites/belt/left_2.png": { - "frame": {"x":537,"y":55,"w":30,"h":30}, + "frame": {"x":662,"y":3,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -74,7 +74,7 @@ }, "sprites/belt/left_3.png": { - "frame": {"x":457,"y":161,"w":30,"h":30}, + "frame": {"x":628,"y":37,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -82,7 +82,7 @@ }, "sprites/belt/left_4.png": { - "frame": {"x":469,"y":195,"w":30,"h":30}, + "frame": {"x":662,"y":37,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -90,7 +90,7 @@ }, "sprites/belt/left_5.png": { - "frame": {"x":489,"y":89,"w":30,"h":30}, + "frame": {"x":617,"y":71,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -98,7 +98,7 @@ }, "sprites/belt/right_0.png": { - "frame": {"x":489,"y":123,"w":30,"h":30}, + "frame": {"x":617,"y":105,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -106,7 +106,7 @@ }, "sprites/belt/right_1.png": { - "frame": {"x":491,"y":157,"w":30,"h":30}, + "frame": {"x":651,"y":71,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -114,7 +114,7 @@ }, "sprites/belt/right_2.png": { - "frame": {"x":503,"y":191,"w":30,"h":30}, + "frame": {"x":651,"y":105,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -122,7 +122,7 @@ }, "sprites/belt/right_3.png": { - "frame": {"x":537,"y":89,"w":30,"h":30}, + "frame": {"x":623,"y":139,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -130,7 +130,7 @@ }, "sprites/belt/right_4.png": { - "frame": {"x":523,"y":123,"w":30,"h":30}, + "frame": {"x":657,"y":139,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -138,7 +138,7 @@ }, "sprites/belt/right_5.png": { - "frame": {"x":525,"y":157,"w":30,"h":30}, + "frame": {"x":623,"y":173,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -146,7 +146,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":557,"y":123,"w":30,"h":30}, + "frame": {"x":657,"y":173,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -154,7 +154,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":537,"y":191,"w":30,"h":30}, + "frame": {"x":630,"y":207,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -162,7 +162,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":457,"y":125,"w":28,"h":32}, + "frame": {"x":585,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -170,15 +170,23 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":282,"y":159,"w":87,"h":48}, + "frame": {"x":383,"y":3,"w":87,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, "sourceSize": {"w":96,"h":48} }, +"sprites/blueprints/miner-chainable.png": +{ + "frame": {"x":526,"y":3,"w":47,"h":48}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, + "sourceSize": {"w":48,"h":48} +}, "sprites/blueprints/miner.png": { - "frame": {"x":541,"y":3,"w":47,"h":48}, + "frame": {"x":577,"y":3,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -186,31 +194,47 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":3,"y":192,"w":89,"h":48}, + "frame": {"x":191,"y":103,"w":89,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":89,"h":48}, "sourceSize": {"w":96,"h":48} }, +"sprites/blueprints/painter-double.png": +{ + "frame": {"x":191,"y":3,"w":96,"h":96}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, + "sourceSize": {"w":96,"h":96} +}, "sprites/blueprints/painter.png": { - "frame": {"x":96,"y":192,"w":89,"h":48}, + "frame": {"x":3,"y":192,"w":96,"h":48}, "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":89,"h":48}, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":96,"h":48}, "sourceSize": {"w":96,"h":48} }, "sprites/blueprints/rotater.png": { - "frame": {"x":373,"y":159,"w":48,"h":48}, + "frame": {"x":474,"y":3,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "sourceSize": {"w":48,"h":48} }, +"sprites/blueprints/splitter-compact.png": +{ + "frame": {"x":572,"y":91,"w":41,"h":47}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":7,"y":0,"w":41,"h":47}, + "sourceSize": {"w":48,"h":48} +}, "sprites/blueprints/splitter.png": { - "frame": {"x":283,"y":3,"w":87,"h":48}, + "frame": {"x":377,"y":97,"w":87,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, @@ -218,7 +242,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":189,"y":192,"w":89,"h":48}, + "frame": {"x":284,"y":103,"w":89,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":89,"h":48}, @@ -226,7 +250,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":437,"y":3,"w":48,"h":48}, + "frame": {"x":468,"y":91,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -234,7 +258,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":282,"y":211,"w":48,"h":38}, + "frame": {"x":303,"y":207,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":10,"w":48,"h":38}, @@ -242,7 +266,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":334,"y":211,"w":48,"h":38}, + "frame": {"x":355,"y":207,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, @@ -250,7 +274,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":469,"y":55,"w":30,"h":30}, + "frame": {"x":589,"y":142,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -258,7 +282,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":489,"y":123,"w":30,"h":30}, + "frame": {"x":617,"y":105,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -266,7 +290,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":425,"y":55,"w":28,"h":32}, + "frame": {"x":393,"y":55,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -274,7 +298,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":283,"y":55,"w":87,"h":48}, + "frame": {"x":395,"y":149,"w":87,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, @@ -288,9 +312,17 @@ "spriteSourceSize": {"x":4,"y":4,"w":184,"h":185}, "sourceSize": {"w":192,"h":192} }, +"sprites/buildings/miner-chainable.png": +{ + "frame": {"x":498,"y":195,"w":47,"h":48}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, + "sourceSize": {"w":48,"h":48} +}, "sprites/buildings/miner.png": { - "frame": {"x":374,"y":55,"w":47,"h":48}, + "frame": {"x":538,"y":143,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -298,31 +330,47 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":191,"y":3,"w":88,"h":48}, + "frame": {"x":303,"y":155,"w":88,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":88,"h":48}, "sourceSize": {"w":96,"h":48} }, +"sprites/buildings/painter-double.png": +{ + "frame": {"x":203,"y":155,"w":96,"h":96}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, + "sourceSize": {"w":96,"h":96} +}, "sprites/buildings/painter.png": { - "frame": {"x":191,"y":55,"w":88,"h":48}, + "frame": {"x":103,"y":192,"w":96,"h":48}, "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":88,"h":48}, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":96,"h":48}, "sourceSize": {"w":96,"h":48} }, "sprites/buildings/rotater.png": { - "frame": {"x":374,"y":3,"w":48,"h":48}, + "frame": {"x":486,"y":143,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, "sourceSize": {"w":48,"h":48} }, +"sprites/buildings/splitter-compact.png": +{ + "frame": {"x":549,"y":195,"w":41,"h":47}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":7,"y":0,"w":41,"h":47}, + "sourceSize": {"w":48,"h":48} +}, "sprites/buildings/splitter.png": { - "frame": {"x":283,"y":107,"w":87,"h":48}, + "frame": {"x":407,"y":201,"w":87,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, @@ -330,7 +378,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":191,"y":107,"w":88,"h":48}, + "frame": {"x":291,"y":3,"w":88,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":88,"h":48}, @@ -338,7 +386,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":489,"y":3,"w":48,"h":48}, + "frame": {"x":520,"y":91,"w":48,"h":48}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, @@ -346,7 +394,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":386,"y":211,"w":47,"h":38}, + "frame": {"x":291,"y":55,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":10,"w":47,"h":38}, @@ -354,7 +402,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":374,"y":107,"w":47,"h":38}, + "frame": {"x":342,"y":55,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, @@ -362,7 +410,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":243,"y":159,"w":14,"h":16}, + "frame": {"x":594,"y":230,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -370,7 +418,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":261,"y":159,"w":14,"h":16}, + "frame": {"x":612,"y":230,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -378,7 +426,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":243,"y":179,"w":8,"h":8}, + "frame": {"x":191,"y":155,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -386,7 +434,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":255,"y":179,"w":8,"h":8}, + "frame": {"x":191,"y":167,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -394,7 +442,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":267,"y":179,"w":8,"h":8}, + "frame": {"x":191,"y":179,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -402,7 +450,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":217,"y":159,"w":22,"h":22}, + "frame": {"x":594,"y":204,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":22,"h":22}, @@ -410,7 +458,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":217,"y":159,"w":22,"h":22}, + "frame": {"x":594,"y":204,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":22,"h":22}, @@ -418,7 +466,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":191,"y":159,"w":22,"h":24}, + "frame": {"x":594,"y":176,"w":22,"h":24}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":22,"h":24}, @@ -429,8 +477,8 @@ "version": "1.0", "image": "atlas0_25.png", "format": "RGBA8888", - "size": {"w":591,"h":252}, + "size": {"w":695,"h":254}, "scale": "0.25", - "smartupdate": "$TexturePacker:SmartUpdate:6f541b04fa898735b7720261181cc97b:b18d1c683463edcbb86f64fc0c0cfac0:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:f63fd65ef73974465324213239ca32e1:fb51df0c27e5bdac60799c0e88f833c7:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_25.png b/res_built/atlas/atlas0_25.png index 16b22bc4..6373f673 100644 Binary files a/res_built/atlas/atlas0_25.png and b/res_built/atlas/atlas0_25.png differ diff --git a/res_built/atlas/atlas0_50.json b/res_built/atlas/atlas0_50.json index abc8121a..2350e1ee 100644 --- a/res_built/atlas/atlas0_50.json +++ b/res_built/atlas/atlas0_50.json @@ -2,7 +2,7 @@ "sprites/belt/forward_0.png": { - "frame": {"x":609,"y":381,"w":51,"h":63}, + "frame": {"x":873,"y":398,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -10,7 +10,7 @@ }, "sprites/belt/forward_1.png": { - "frame": {"x":969,"y":364,"w":51,"h":63}, + "frame": {"x":1111,"y":365,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -18,7 +18,7 @@ }, "sprites/belt/forward_2.png": { - "frame": {"x":796,"y":426,"w":51,"h":63}, + "frame": {"x":1166,"y":370,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -26,7 +26,7 @@ }, "sprites/belt/forward_3.png": { - "frame": {"x":851,"y":425,"w":51,"h":63}, + "frame": {"x":1221,"y":370,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -34,7 +34,7 @@ }, "sprites/belt/forward_4.png": { - "frame": {"x":906,"y":425,"w":51,"h":63}, + "frame": {"x":1111,"y":432,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -42,7 +42,7 @@ }, "sprites/belt/forward_5.png": { - "frame": {"x":961,"y":431,"w":51,"h":63}, + "frame": {"x":1166,"y":437,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -50,7 +50,7 @@ }, "sprites/belt/left_0.png": { - "frame": {"x":787,"y":303,"w":57,"h":57}, + "frame": {"x":568,"y":378,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -58,7 +58,7 @@ }, "sprites/belt/left_1.png": { - "frame": {"x":848,"y":303,"w":57,"h":57}, + "frame": {"x":1148,"y":303,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -66,7 +66,7 @@ }, "sprites/belt/left_2.png": { - "frame": {"x":909,"y":303,"w":57,"h":57}, + "frame": {"x":629,"y":397,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -74,7 +74,7 @@ }, "sprites/belt/left_3.png": { - "frame": {"x":552,"y":449,"w":57,"h":57}, + "frame": {"x":568,"y":439,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -82,7 +82,7 @@ }, "sprites/belt/left_4.png": { - "frame": {"x":613,"y":448,"w":57,"h":57}, + "frame": {"x":690,"y":400,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -90,7 +90,7 @@ }, "sprites/belt/left_5.png": { - "frame": {"x":664,"y":365,"w":57,"h":57}, + "frame": {"x":751,"y":400,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -98,7 +98,7 @@ }, "sprites/belt/right_0.png": { - "frame": {"x":725,"y":365,"w":57,"h":57}, + "frame": {"x":812,"y":398,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -106,7 +106,7 @@ }, "sprites/belt/right_1.png": { - "frame": {"x":674,"y":426,"w":57,"h":57}, + "frame": {"x":928,"y":381,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -114,7 +114,7 @@ }, "sprites/belt/right_2.png": { - "frame": {"x":735,"y":426,"w":57,"h":57}, + "frame": {"x":989,"y":381,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -122,7 +122,7 @@ }, "sprites/belt/right_3.png": { - "frame": {"x":786,"y":365,"w":57,"h":57}, + "frame": {"x":1050,"y":381,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -130,7 +130,7 @@ }, "sprites/belt/right_4.png": { - "frame": {"x":847,"y":364,"w":57,"h":57}, + "frame": {"x":928,"y":442,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -138,7 +138,7 @@ }, "sprites/belt/right_5.png": { - "frame": {"x":908,"y":364,"w":57,"h":57}, + "frame": {"x":989,"y":442,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -146,7 +146,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":663,"y":303,"w":58,"h":58}, + "frame": {"x":373,"y":299,"w":58,"h":58}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":5,"w":58,"h":58}, @@ -154,7 +154,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":725,"y":303,"w":58,"h":58}, + "frame": {"x":1086,"y":303,"w":58,"h":58}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":58,"h":58}, @@ -162,7 +162,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":552,"y":382,"w":53,"h":63}, + "frame": {"x":1209,"y":303,"w":53,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":53,"h":63}, @@ -170,15 +170,23 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":551,"y":103,"w":172,"h":96}, + "frame": {"x":765,"y":103,"w":172,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":172,"h":96}, "sourceSize": {"w":192,"h":96} }, +"sprites/blueprints/miner-chainable.png": +{ + "frame": {"x":1147,"y":203,"w":92,"h":96}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, + "sourceSize": {"w":96,"h":96} +}, "sprites/blueprints/miner.png": { - "frame": {"x":925,"y":203,"w":92,"h":96}, + "frame": {"x":377,"y":378,"w":92,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, @@ -186,31 +194,47 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":3,"y":374,"w":175,"h":96}, + "frame": {"x":569,"y":198,"w":175,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, "sourceSize": {"w":192,"h":96} }, +"sprites/blueprints/painter-double.png": +{ + "frame": {"x":373,"y":3,"w":192,"h":192}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":192,"h":192}, + "sourceSize": {"w":192,"h":192} +}, "sprites/blueprints/painter.png": { - "frame": {"x":373,"y":3,"w":175,"h":96}, + "frame": {"x":3,"y":374,"w":192,"h":96}, "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, "sourceSize": {"w":192,"h":96} }, "sprites/blueprints/rotater.png": { - "frame": {"x":905,"y":3,"w":96,"h":96}, + "frame": {"x":748,"y":203,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, "sourceSize": {"w":96,"h":96} }, +"sprites/blueprints/splitter-compact.png": +{ + "frame": {"x":724,"y":303,"w":81,"h":93}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":15,"y":1,"w":81,"h":93}, + "sourceSize": {"w":96,"h":96} +}, "sprites/blueprints/splitter.png": { - "frame": {"x":730,"y":3,"w":171,"h":96}, + "frame": {"x":1122,"y":3,"w":171,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, @@ -218,7 +242,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":182,"y":374,"w":175,"h":96}, + "frame": {"x":765,"y":3,"w":175,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, @@ -226,7 +250,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":726,"y":203,"w":96,"h":96}, + "frame": {"x":848,"y":203,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -234,7 +258,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":373,"y":303,"w":93,"h":75}, + "frame": {"x":435,"y":299,"w":93,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":21,"w":93,"h":75}, @@ -242,7 +266,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":470,"y":303,"w":93,"h":75}, + "frame": {"x":532,"y":299,"w":93,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":93,"h":75}, @@ -250,7 +274,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":787,"y":303,"w":57,"h":57}, + "frame": {"x":568,"y":378,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -258,7 +282,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":725,"y":365,"w":57,"h":57}, + "frame": {"x":812,"y":398,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -266,7 +290,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":609,"y":381,"w":51,"h":63}, + "frame": {"x":873,"y":398,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -274,7 +298,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":551,"y":203,"w":171,"h":96}, + "frame": {"x":941,"y":103,"w":171,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, @@ -288,9 +312,17 @@ "spriteSourceSize": {"x":9,"y":10,"w":366,"h":367}, "sourceSize": {"w":384,"h":384} }, +"sprites/buildings/miner-chainable.png": +{ + "frame": {"x":473,"y":378,"w":91,"h":95}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, + "sourceSize": {"w":96,"h":96} +}, "sprites/buildings/miner.png": { - "frame": {"x":361,"y":382,"w":91,"h":95}, + "frame": {"x":629,"y":298,"w":91,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, @@ -298,31 +330,47 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":373,"y":103,"w":174,"h":96}, + "frame": {"x":944,"y":3,"w":174,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, "sourceSize": {"w":192,"h":96} }, -"sprites/buildings/painter.png": +"sprites/buildings/painter-double.png": { - "frame": {"x":552,"y":3,"w":174,"h":96}, + "frame": {"x":569,"y":3,"w":192,"h":191}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, + "spriteSourceSize": {"x":0,"y":0,"w":192,"h":191}, + "sourceSize": {"w":192,"h":192} +}, +"sprites/buildings/painter.png": +{ + "frame": {"x":373,"y":199,"w":192,"h":96}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, "sourceSize": {"w":192,"h":96} }, "sprites/buildings/rotater.png": { - "frame": {"x":826,"y":203,"w":95,"h":96}, + "frame": {"x":1048,"y":203,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, "sourceSize": {"w":96,"h":96} }, +"sprites/buildings/splitter-compact.png": +{ + "frame": {"x":809,"y":303,"w":81,"h":91}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":15,"y":2,"w":81,"h":91}, + "sourceSize": {"w":96,"h":96} +}, "sprites/buildings/splitter.png": { - "frame": {"x":727,"y":103,"w":171,"h":96}, + "frame": {"x":1116,"y":103,"w":171,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, @@ -330,7 +378,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":373,"y":203,"w":174,"h":96}, + "frame": {"x":199,"y":374,"w":174,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, @@ -338,7 +386,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":902,"y":103,"w":96,"h":96}, + "frame": {"x":948,"y":203,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -346,7 +394,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":567,"y":303,"w":92,"h":74}, + "frame": {"x":894,"y":303,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":22,"w":92,"h":74}, @@ -354,7 +402,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":456,"y":382,"w":92,"h":74}, + "frame": {"x":990,"y":303,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, @@ -362,7 +410,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":3,"y":474,"w":26,"h":32}, + "frame": {"x":1243,"y":255,"w":26,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":26,"h":32}, @@ -370,7 +418,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":33,"y":474,"w":26,"h":32}, + "frame": {"x":1050,"y":442,"w":26,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":26,"h":32}, @@ -378,7 +426,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":63,"y":474,"w":14,"h":16}, + "frame": {"x":3,"y":474,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -386,7 +434,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":1005,"y":3,"w":15,"h":15}, + "frame": {"x":1221,"y":437,"w":15,"h":15}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":15,"h":15}, @@ -394,7 +442,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":1005,"y":22,"w":15,"h":15}, + "frame": {"x":1050,"y":478,"w":15,"h":15}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":15,"h":15}, @@ -402,7 +450,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":456,"y":460,"w":42,"h":42}, + "frame": {"x":629,"y":458,"w":42,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":3,"w":42,"h":42}, @@ -410,7 +458,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":456,"y":460,"w":42,"h":42}, + "frame": {"x":629,"y":458,"w":42,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":3,"w":42,"h":42}, @@ -418,7 +466,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":970,"y":303,"w":42,"h":48}, + "frame": {"x":1243,"y":203,"w":42,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":42,"h":48}, @@ -429,8 +477,8 @@ "version": "1.0", "image": "atlas0_50.png", "format": "RGBA8888", - "size": {"w":1023,"h":509}, + "size": {"w":1296,"h":503}, "scale": "0.5", - "smartupdate": "$TexturePacker:SmartUpdate:6f541b04fa898735b7720261181cc97b:b18d1c683463edcbb86f64fc0c0cfac0:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:f63fd65ef73974465324213239ca32e1:fb51df0c27e5bdac60799c0e88f833c7:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_50.png b/res_built/atlas/atlas0_50.png index 4116a654..393d79d8 100644 Binary files a/res_built/atlas/atlas0_50.png and b/res_built/atlas/atlas0_50.png differ diff --git a/res_built/atlas/atlas0_75.json b/res_built/atlas/atlas0_75.json index b3551c3e..b5985131 100644 --- a/res_built/atlas/atlas0_75.json +++ b/res_built/atlas/atlas0_75.json @@ -2,7 +2,7 @@ "sprites/belt/forward_0.png": { - "frame": {"x":882,"y":800,"w":77,"h":95}, + "frame": {"x":842,"y":800,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -10,7 +10,7 @@ }, "sprites/belt/forward_1.png": { - "frame": {"x":882,"y":899,"w":77,"h":95}, + "frame": {"x":923,"y":799,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -18,7 +18,7 @@ }, "sprites/belt/forward_2.png": { - "frame": {"x":963,"y":800,"w":77,"h":95}, + "frame": {"x":1286,"y":588,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -26,7 +26,7 @@ }, "sprites/belt/forward_3.png": { - "frame": {"x":1044,"y":800,"w":77,"h":95}, + "frame": {"x":932,"y":898,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -34,7 +34,7 @@ }, "sprites/belt/forward_4.png": { - "frame": {"x":963,"y":899,"w":77,"h":95}, + "frame": {"x":1286,"y":687,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -42,7 +42,7 @@ }, "sprites/belt/forward_5.png": { - "frame": {"x":1044,"y":899,"w":77,"h":95}, + "frame": {"x":1004,"y":799,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -50,7 +50,7 @@ }, "sprites/belt/left_0.png": { - "frame": {"x":820,"y":445,"w":86,"h":86}, + "frame": {"x":1106,"y":593,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -58,7 +58,7 @@ }, "sprites/belt/left_1.png": { - "frame": {"x":960,"y":3,"w":86,"h":86}, + "frame": {"x":915,"y":709,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -66,7 +66,7 @@ }, "sprites/belt/left_2.png": { - "frame": {"x":991,"y":145,"w":86,"h":86}, + "frame": {"x":1005,"y":708,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -74,7 +74,7 @@ }, "sprites/belt/left_3.png": { - "frame": {"x":932,"y":530,"w":86,"h":86}, + "frame": {"x":1196,"y":593,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -82,7 +82,7 @@ }, "sprites/belt/left_4.png": { - "frame": {"x":1022,"y":530,"w":86,"h":86}, + "frame": {"x":842,"y":899,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -90,7 +90,7 @@ }, "sprites/belt/left_5.png": { - "frame": {"x":932,"y":620,"w":86,"h":86}, + "frame": {"x":1106,"y":683,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -98,7 +98,7 @@ }, "sprites/belt/right_0.png": { - "frame": {"x":1022,"y":620,"w":86,"h":86}, + "frame": {"x":1196,"y":683,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -106,7 +106,7 @@ }, "sprites/belt/right_1.png": { - "frame": {"x":792,"y":690,"w":86,"h":86}, + "frame": {"x":1013,"y":898,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -114,7 +114,7 @@ }, "sprites/belt/right_2.png": { - "frame": {"x":882,"y":710,"w":86,"h":86}, + "frame": {"x":1095,"y":773,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -122,7 +122,7 @@ }, "sprites/belt/right_3.png": { - "frame": {"x":792,"y":780,"w":86,"h":86}, + "frame": {"x":1185,"y":773,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -130,7 +130,7 @@ }, "sprites/belt/right_4.png": { - "frame": {"x":972,"y":710,"w":86,"h":86}, + "frame": {"x":1275,"y":786,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -138,7 +138,7 @@ }, "sprites/belt/right_5.png": { - "frame": {"x":792,"y":870,"w":86,"h":86}, + "frame": {"x":1103,"y":863,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -146,7 +146,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":555,"y":446,"w":87,"h":87}, + "frame": {"x":697,"y":588,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":8,"w":87,"h":87}, @@ -154,7 +154,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":646,"y":446,"w":87,"h":87}, + "frame": {"x":824,"y":709,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":8,"w":87,"h":87}, @@ -162,7 +162,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":737,"y":445,"w":79,"h":95}, + "frame": {"x":1290,"y":298,"w":79,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":79,"h":95}, @@ -170,15 +170,23 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":532,"y":556,"w":256,"h":144}, + "frame": {"x":295,"y":556,"w":256,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":144}, "sourceSize": {"w":288,"h":144} }, +"sprites/blueprints/miner-chainable.png": +{ + "frame": {"x":559,"y":704,"w":136,"h":143}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, + "sourceSize": {"w":144,"h":144} +}, "sprites/blueprints/miner.png": { - "frame": {"x":703,"y":298,"w":136,"h":143}, + "frame": {"x":819,"y":447,"w":136,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, @@ -186,31 +194,47 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":3,"y":556,"w":261,"h":144}, + "frame": {"x":847,"y":3,"w":261,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, "sourceSize": {"w":288,"h":144} }, -"sprites/blueprints/painter.png": +"sprites/blueprints/painter-double.png": { - "frame": {"x":3,"y":704,"w":261,"h":144}, + "frame": {"x":3,"y":556,"w":288,"h":287}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, + "spriteSourceSize": {"x":0,"y":0,"w":288,"h":287}, + "sourceSize": {"w":288,"h":288} +}, +"sprites/blueprints/painter.png": +{ + "frame": {"x":3,"y":847,"w":288,"h":144}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, "sourceSize": {"w":288,"h":144} }, "sprites/blueprints/rotater.png": { - "frame": {"x":703,"y":150,"w":143,"h":144}, + "frame": {"x":1143,"y":298,"w":143,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, "sourceSize": {"w":144,"h":144} }, +"sprites/blueprints/splitter-compact.png": +{ + "frame": {"x":1239,"y":446,"w":121,"h":138}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":23,"y":2,"w":121,"h":138}, + "sourceSize": {"w":144,"h":144} +}, "sprites/blueprints/splitter.png": { - "frame": {"x":532,"y":704,"w":256,"h":144}, + "frame": {"x":1112,"y":3,"w":256,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":144}, @@ -218,7 +242,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":3,"y":852,"w":261,"h":144}, + "frame": {"x":847,"y":151,"w":261,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, @@ -226,7 +250,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":555,"y":150,"w":144,"h":144}, + "frame": {"x":847,"y":299,"w":144,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, @@ -234,7 +258,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":843,"y":298,"w":138,"h":112}, + "frame": {"x":555,"y":588,"w":138,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":32,"w":138,"h":112}, @@ -242,7 +266,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":919,"y":414,"w":138,"h":112}, + "frame": {"x":700,"y":819,"w":138,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":138,"h":112}, @@ -250,7 +274,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":820,"y":445,"w":86,"h":86}, + "frame": {"x":1106,"y":593,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -258,7 +282,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":1022,"y":620,"w":86,"h":86}, + "frame": {"x":1196,"y":683,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -266,7 +290,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":882,"y":800,"w":77,"h":95}, + "frame": {"x":842,"y":800,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -274,7 +298,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":532,"y":852,"w":256,"h":143}, + "frame": {"x":1112,"y":151,"w":256,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":143}, @@ -288,9 +312,17 @@ "spriteSourceSize": {"x":14,"y":16,"w":548,"h":549}, "sourceSize": {"w":576,"h":576} }, +"sprites/buildings/miner-chainable.png": +{ + "frame": {"x":959,"y":447,"w":136,"h":142}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, + "sourceSize": {"w":144,"h":144} +}, "sprites/buildings/miner.png": { - "frame": {"x":792,"y":544,"w":136,"h":142}, + "frame": {"x":1099,"y":447,"w":136,"h":142}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, @@ -298,31 +330,47 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":268,"y":556,"w":260,"h":143}, + "frame": {"x":555,"y":441,"w":260,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, "sourceSize": {"w":288,"h":144} }, -"sprites/buildings/painter.png": +"sprites/buildings/painter-double.png": { - "frame": {"x":268,"y":703,"w":260,"h":143}, + "frame": {"x":555,"y":3,"w":288,"h":286}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, + "spriteSourceSize": {"x":0,"y":0,"w":288,"h":286}, + "sourceSize": {"w":288,"h":288} +}, +"sprites/buildings/painter.png": +{ + "frame": {"x":555,"y":293,"w":288,"h":144}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, "sourceSize": {"w":288,"h":144} }, "sprites/buildings/rotater.png": { - "frame": {"x":815,"y":3,"w":141,"h":143}, + "frame": {"x":555,"y":851,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, "sourceSize": {"w":144,"h":144} }, +"sprites/buildings/splitter-compact.png": +{ + "frame": {"x":699,"y":679,"w":121,"h":136}, + "rotated": false, + "trimmed": true, + "spriteSourceSize": {"x":23,"y":3,"w":121,"h":136}, + "sourceSize": {"w":144,"h":144} +}, "sprites/buildings/splitter.png": { - "frame": {"x":555,"y":3,"w":256,"h":143}, + "frame": {"x":295,"y":851,"w":256,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":143}, @@ -330,7 +378,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":268,"y":850,"w":260,"h":143}, + "frame": {"x":295,"y":704,"w":260,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, @@ -338,7 +386,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":555,"y":298,"w":144,"h":144}, + "frame": {"x":995,"y":299,"w":144,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, @@ -346,7 +394,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":850,"y":150,"w":137,"h":111}, + "frame": {"x":824,"y":594,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":33,"w":137,"h":111}, @@ -354,7 +402,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":985,"y":265,"w":137,"h":111}, + "frame": {"x":965,"y":593,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, @@ -362,7 +410,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":960,"y":93,"w":38,"h":48}, + "frame": {"x":700,"y":935,"w":38,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, @@ -370,7 +418,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":1002,"y":93,"w":38,"h":48}, + "frame": {"x":742,"y":935,"w":38,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, @@ -378,7 +426,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":895,"y":414,"w":20,"h":24}, + "frame": {"x":1290,"y":397,"w":20,"h":24}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":20,"h":24}, @@ -386,7 +434,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":843,"y":414,"w":22,"h":22}, + "frame": {"x":788,"y":588,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":22,"h":22}, @@ -394,7 +442,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":869,"y":414,"w":22,"h":22}, + "frame": {"x":1103,"y":953,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":22,"h":22}, @@ -402,7 +450,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":1050,"y":79,"w":62,"h":62}, + "frame": {"x":1259,"y":876,"w":62,"h":62}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":62,"h":62}, @@ -410,7 +458,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":1050,"y":79,"w":62,"h":62}, + "frame": {"x":1259,"y":876,"w":62,"h":62}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":62,"h":62}, @@ -418,7 +466,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":1050,"y":3,"w":62,"h":72}, + "frame": {"x":1193,"y":863,"w":62,"h":72}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":62,"h":72}, @@ -429,8 +477,8 @@ "version": "1.0", "image": "atlas0_75.png", "format": "RGBA8888", - "size": {"w":1125,"h":999}, + "size": {"w":1372,"h":997}, "scale": "0.75", - "smartupdate": "$TexturePacker:SmartUpdate:6f541b04fa898735b7720261181cc97b:b18d1c683463edcbb86f64fc0c0cfac0:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:f63fd65ef73974465324213239ca32e1:fb51df0c27e5bdac60799c0e88f833c7:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_75.png b/res_built/atlas/atlas0_75.png index 63a12a6d..89bb599c 100644 Binary files a/res_built/atlas/atlas0_75.png and b/res_built/atlas/atlas0_75.png differ diff --git a/res_raw/sprites/blueprints/miner-chainable.png b/res_raw/sprites/blueprints/miner-chainable.png new file mode 100644 index 00000000..11b633ed Binary files /dev/null and b/res_raw/sprites/blueprints/miner-chainable.png differ diff --git a/res_raw/sprites/blueprints/painter-double.png b/res_raw/sprites/blueprints/painter-double.png new file mode 100644 index 00000000..0fe1d913 Binary files /dev/null and b/res_raw/sprites/blueprints/painter-double.png differ diff --git a/res_raw/sprites/blueprints/painter.png b/res_raw/sprites/blueprints/painter.png index 4feefe33..c2326268 100644 Binary files a/res_raw/sprites/blueprints/painter.png and b/res_raw/sprites/blueprints/painter.png differ diff --git a/res_raw/sprites/blueprints/splitter-compact.png b/res_raw/sprites/blueprints/splitter-compact.png new file mode 100644 index 00000000..e08f75f0 Binary files /dev/null and b/res_raw/sprites/blueprints/splitter-compact.png differ diff --git a/res_raw/sprites/buildings/miner-chainable.png b/res_raw/sprites/buildings/miner-chainable.png new file mode 100644 index 00000000..d14d0299 Binary files /dev/null and b/res_raw/sprites/buildings/miner-chainable.png differ diff --git a/res_raw/sprites/buildings/painter-double.png b/res_raw/sprites/buildings/painter-double.png new file mode 100644 index 00000000..0d909786 Binary files /dev/null and b/res_raw/sprites/buildings/painter-double.png differ diff --git a/res_raw/sprites/buildings/painter.png b/res_raw/sprites/buildings/painter.png index 2eb883d3..1ebca21f 100644 Binary files a/res_raw/sprites/buildings/painter.png and b/res_raw/sprites/buildings/painter.png differ diff --git a/res_raw/sprites/buildings/splitter-compact.png b/res_raw/sprites/buildings/splitter-compact.png new file mode 100644 index 00000000..d6a03a9a Binary files /dev/null and b/res_raw/sprites/buildings/splitter-compact.png differ diff --git a/src/css/icons.scss b/src/css/icons.scss index 4e6e779b..36165c35 100644 --- a/src/css/icons.scss +++ b/src/css/icons.scss @@ -1,23 +1,11 @@ -// $icons: ; - -// @each $icon in $icons { -// [data-icon="#{$icon}"] { -// background-image: uiResource("res/ui/#{$icon}"); -// } -// } - $buildings: belt, cutter, miner, mixer, painter, rotater, splitter, stacker, trash, underground_belt; @each $building in $buildings { [data-icon="building_tutorials/#{$building}.png"] { background-image: uiResource("res/ui/building_tutorials/#{$building}.png") !important; } -} - -$upgrades: belt, miner, painting, processors; -@each $upgrade in $upgrades { - [data-icon="upgrades/#{$upgrade}.png"] { - background-image: uiResource("res/ui/upgrades/#{$upgrade}.png") !important; + [data-icon="building_icons/#{$building}.png"] { + background-image: uiResource("res/ui/building_icons/#{$building}.png") !important; } } diff --git a/src/css/ingame_hud/building_placer.scss b/src/css/ingame_hud/building_placer.scss index 689ac598..b874ec3c 100644 --- a/src/css/ingame_hud/building_placer.scss +++ b/src/css/ingame_hud/building_placer.scss @@ -1,6 +1,6 @@ -#ingame_HUD_building_placer { +#ingame_HUD_PlacementHints { position: fixed; - @include S(top, 40px); + @include S(top, 60px); @include S(right, 10px); display: grid; @@ -54,3 +54,60 @@ display: none !important; } } + +#ingame_HUD_PlacerVariants { + position: absolute; + @include S(left, 10px); + @include S(bottom, 80px); + display: grid; + grid-auto-flow: row; + @include S(grid-gap, 5px); + + .explanation { + @include PlainText; + .keybinding { + position: relative; + } + } + + .variant { + @include S(border-radius, 4px); + background: rgba(0, 10, 20, 0.1); + display: grid; + position: relative; + grid-template-columns: auto 1fr; + align-items: center; + @include S(padding, 5px); + @include S(grid-gap, 10px); + + &.active { + background-color: rgba(74, 163, 223, 0.6); + } + + $iconSize: 25px; + + .iconWrap { + grid-column: 1 / 2; + grid-row: 1 / 2; + position: relative; + @include S(width, $iconSize); + @include S(height, $iconSize); + background: center center / contain no-repeat; + + &[data-tile-w="2"] { + @include S(width, 2 * $iconSize); + } + + &[data-tile-h="2"] { + @include S(height, 2 * $iconSize); + } + } + + .label { + grid-column: 2 / 3; + grid-row: 1 / 2; + @include PlainText; + color: #fff; + } + } +} diff --git a/src/css/ingame_hud/buildings_toolbar.scss b/src/css/ingame_hud/buildings_toolbar.scss index ff4d7793..e3ba48e0 100644 --- a/src/css/ingame_hud/buildings_toolbar.scss +++ b/src/css/ingame_hud/buildings_toolbar.scss @@ -22,7 +22,7 @@ .buildings { display: grid; grid-auto-flow: column; - @include S(padding, 0, 5px); + @include S(margin-bottom, 2px); .building { color: $accentColorDark; @@ -33,19 +33,17 @@ justify-content: center; @include S(padding, 5px); @include S(padding-bottom, 1px); - $buildingIconSize: 32px; + @include S(width, 35px); + @include S(height, 40px); + + background: center center / 70% no-repeat; &:not(.unlocked) { @include S(width, 30px); - .tooltip { - display: none !important; - } - .keybinding, - .iconWrap { - opacity: 0.01; - } + opacity: 0.8; + background-image: none !important; + &::before { - opacity: 0.5; content: " "; background: uiResource("locked_building.png") center center / #{D(20px)} #{D(20px)} no-repeat; @@ -58,8 +56,10 @@ } } + @include S(border-radius, 4px); + &.selected { - background: rgba(74, 163, 223, 0.3) !important; + background-color: rgba(74, 163, 223, 0.3) !important; transform: scale(1.05); .keybinding { color: #111; @@ -69,35 +69,11 @@ pointer-events: all; transition: all 0.05s ease-in-out; transition-property: background-color, transform; + &.unlocked:hover { - background: rgba($accentColorDark, 0.1); + background-color: rgba($accentColorDark, 0.1); cursor: pointer; } - - .iconWrap { - position: relative; - @include S(width, $buildingIconSize); - @include S(height, $buildingIconSize); - @include S(margin-top, 3px); - @include S(margin-bottom, 6px); - } - - .label { - @include SuperSmallText; - display: none; - font-weight: bold; - text-transform: uppercase; - } - - &[data-tilewidth="2"] { - .iconWrap { - @include S(width, 2 * $buildingIconSize); - } - } - - &:last-child { - border: none; - } } } } diff --git a/src/css/ingame_hud/mass_selector.scss b/src/css/ingame_hud/mass_selector.scss index 91a0820b..0e8bdcb2 100644 --- a/src/css/ingame_hud/mass_selector.scss +++ b/src/css/ingame_hud/mass_selector.scss @@ -8,8 +8,11 @@ @include S(padding, 9px); @include PlainText; color: #fff; + display: flex; + align-items: center; .keybinding { + @include S(margin, 0, 4px); position: relative; top: unset; left: unset; diff --git a/src/css/ingame_hud/pinned_shapes.scss b/src/css/ingame_hud/pinned_shapes.scss index e8ac43c2..4947db29 100644 --- a/src/css/ingame_hud/pinned_shapes.scss +++ b/src/css/ingame_hud/pinned_shapes.scss @@ -1,7 +1,7 @@ #ingame_HUD_PinnedShapes { position: absolute; @include S(left, 9px); - @include S(top, 120px); + @include S(top, 150px); @include PlainText; display: flex; flex-direction: column; diff --git a/src/css/ingame_hud/shop.scss b/src/css/ingame_hud/shop.scss index 2e79341d..cba6eb33 100644 --- a/src/css/ingame_hud/shop.scss +++ b/src/css/ingame_hud/shop.scss @@ -101,7 +101,7 @@ display: flex; flex-direction: column; align-items: center; - @include S(width, 65px); + @include S(width, 75px); button.pin { @include S(width, 12px); diff --git a/src/css/ingame_hud/statistics.scss b/src/css/ingame_hud/statistics.scss index a431c012..f646badd 100644 --- a/src/css/ingame_hud/statistics.scss +++ b/src/css/ingame_hud/statistics.scss @@ -148,11 +148,13 @@ grid-column: 3 / 4; grid-row: 1 / 2; @include Heading; + align-self: center; + text-align: right; color: #55595a; } canvas.graph { - @include S(width, 300px); + @include S(width, 270px); @include S(height, 40px); @include S(border-radius, 0, 0, 2px, 2px); $color: rgba(0, 10, 20, 0.04); diff --git a/src/css/main.scss b/src/css/main.scss index f6692cde..a974e2e0 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -39,11 +39,32 @@ @import "ingame_hud/notifications"; @import "ingame_hud/settings_menu"; -// Z-Index -$elements: ingame_Canvas, ingame_VignetteOverlay, ingame_HUD_building_placer, ingame_HUD_PinnedShapes, - ingame_HUD_buildings_toolbar, ingame_HUD_GameMenu, ingame_HUD_KeybindingOverlay, ingame_HUD_Notifications, - ingame_HUD_Shop, ingame_HUD_Statistics, ingame_HUD_BetaOverlay, ingame_HUD_MassSelector, - ingame_HUD_UnlockNotification, ingame_HUD_SettingsMenu; +// prettier-ignore +$elements: +// Base +ingame_Canvas, +ingame_VignetteOverlay, + +// Ingame overlays +ingame_HUD_PlacementHints, +ingame_HUD_PlacerVariants, + +// Regular hud +ingame_HUD_PinnedShapes, +ingame_HUD_buildings_toolbar, +ingame_HUD_GameMenu, +ingame_HUD_KeybindingOverlay, +ingame_HUD_MassSelector, +ingame_HUD_Notifications, + +// Overlays +ingame_HUD_BetaOverlay, + +// Dialogs +ingame_HUD_Shop, +ingame_HUD_Statistics, +ingame_HUD_UnlockNotification, +ingame_HUD_SettingsMenu; $zindex: 100; @@ -57,7 +78,7 @@ $zindex: 100; body.uiHidden { #ingame_HUD_buildings_toolbar, - #ingame_HUD_building_placer, + #ingame_HUD_PlacementHints, #ingame_HUD_GameMenu, #ingame_HUD_MassSelector, #ingame_HUD_PinnedShapes, diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index b75d3580..1a4147f6 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -144,6 +144,15 @@ width: 100%; box-sizing: border-box; + .browserWarning { + @include S(margin-bottom, 10px); + background-color: $colorRedBright; + @include PlainText; + color: #fff; + @include S(border-radius, 4px); + @include S(padding, 5px); + } + .playButton { @include SuperHeading; @include S(width, 130px); diff --git a/src/js/core/config.js b/src/js/core/config.js index 5413f91c..2100ae8c 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -28,7 +28,8 @@ export const globalConfig = { physicsDeltaSeconds: 0, // Update physics at N fps, independent of rendering - physicsUpdateRate: 55, + // physicsUpdateRate: 55, + physicsUpdateRate: 120, // Map mapChunkSize: 32, @@ -47,6 +48,7 @@ export const globalConfig = { cutter: 1 / 4, rotater: 1 / 1, painter: 1 / 3, + painterDouble: 1 / 3, mixer: 1 / 2, stacker: 1 / 5, }, @@ -71,7 +73,7 @@ export const globalConfig = { debug: { /* dev:start */ - // fastGameEnter: true, + fastGameEnter: true, noArtificialDelays: true, // disableSavegameWrite: true, showEntityBounds: false, diff --git a/src/js/core/utils.js b/src/js/core/utils.js index fe869920..61e72890 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -750,15 +750,6 @@ export function checkTimerExpired(now, lastTick, tickRate) { * Returns if the game supports this browser */ export function isSupportedBrowser() { - if (navigator.userAgent.toLowerCase().indexOf("firefox") >= 0) { - return true; - } - - return isSupportedBrowserForMultiplayer(); -} - -// https://stackoverflow.com/questions/4565112/javascript-how-to-find-out-if-the-user-browser-is-chrome/13348618#13348618 -export function isSupportedBrowserForMultiplayer() { // please note, // that IE11 now returns undefined again for window.chrome // and new Opera 30 outputs true for window.chrome @@ -776,7 +767,6 @@ export function isSupportedBrowserForMultiplayer() { var winNav = window.navigator; var vendorName = winNav.vendor; // @ts-ignore - var isOpera = typeof window.opr !== "undefined"; var isIEedge = winNav.userAgent.indexOf("Edge") > -1; var isIOSChrome = winNav.userAgent.match("CriOS"); diff --git a/src/js/game/base_item.js b/src/js/game/base_item.js index c974315d..e70263df 100644 --- a/src/js/game/base_item.js +++ b/src/js/game/base_item.js @@ -30,5 +30,6 @@ export class BaseItem extends BasicSerializableObject { getBackgroundColorAsResource() { abstract; + return ""; } } diff --git a/src/js/game/buildings/miner.js b/src/js/game/buildings/miner.js index 5503ddac..54277f7f 100644 --- a/src/js/game/buildings/miner.js +++ b/src/js/game/buildings/miner.js @@ -2,7 +2,11 @@ import { enumDirection, Vector } from "../../core/vector"; import { ItemEjectorComponent } from "../components/item_ejector"; import { MinerComponent } from "../components/miner"; import { Entity } from "../entity"; -import { MetaBuilding } from "../meta_building"; +import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; +import { GameRoot } from "../root"; + +/** @enum {string} */ +export const enumMinerVariants = { chainable: "chainable" }; export class MetaMinerBuilding extends MetaBuilding { constructor() { @@ -21,16 +25,46 @@ export class MetaMinerBuilding extends MetaBuilding { return "Place over a shape or color to extract it. Six extractors fill exactly one belt."; } + getAvailableVariants(root) { + return [defaultBuildingVariant, enumMinerVariants.chainable]; + } + + /** + * @param {GameRoot} root + * @param {object} param0 + * @param {Vector} param0.origin + * @param {number} param0.rotation + * @param {number} param0.rotationVariant + * @param {string} param0.variant + */ + performAdditionalPlacementChecks(root, { origin, rotation, rotationVariant, variant }) { + // Make sure its placed above a resource + const lowerLayer = root.map.getLowerLayerContentXY(origin.x, origin.y); + if (!lowerLayer) { + return false; + } + return true; + } + /** * Creates the entity at the given location * @param {Entity} entity */ setupEntityComponents(entity) { - entity.addComponent(new MinerComponent()); + entity.addComponent(new MinerComponent({})); entity.addComponent( new ItemEjectorComponent({ slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], }) ); } + + /** + * + * @param {Entity} entity + * @param {*} variant + */ + updateVariant(entity, variant) { + entity.components.Miner.chainable = variant === enumMinerVariants.chainable; + } } diff --git a/src/js/game/buildings/painter.js b/src/js/game/buildings/painter.js index 746f9070..a6165bb2 100644 --- a/src/js/game/buildings/painter.js +++ b/src/js/game/buildings/painter.js @@ -4,17 +4,27 @@ import { enumItemAcceptorItemFilter, ItemAcceptorComponent } from "../components import { ItemEjectorComponent } from "../components/item_ejector"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; import { Entity } from "../entity"; -import { MetaBuilding } from "../meta_building"; +import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; import { enumHubGoalRewards } from "../tutorial_goals"; import { GameRoot } from "../root"; +/** @enum {string} */ +export const enumPainterVariants = { double: "double" }; + export class MetaPainterBuilding extends MetaBuilding { constructor() { super("painter"); } - getDimensions() { - return new Vector(2, 1); + getDimensions(variant) { + switch (variant) { + case defaultBuildingVariant: + return new Vector(2, 1); + case enumPainterVariants.double: + return new Vector(2, 2); + default: + assertAlways(false, "Unknown painter variant: " + variant); + } } getName() { @@ -29,6 +39,10 @@ export class MetaPainterBuilding extends MetaBuilding { return "#cd9b7d"; } + getAvailableVariants(root) { + return [defaultBuildingVariant, enumPainterVariants.double]; + } + /** * @param {GameRoot} root */ @@ -41,16 +55,11 @@ export class MetaPainterBuilding extends MetaBuilding { * @param {Entity} entity */ setupEntityComponents(entity) { - entity.addComponent( - new ItemProcessorComponent({ - inputsPerCharge: 2, - processorType: enumItemProcessorTypes.painter, - }) - ); + entity.addComponent(new ItemProcessorComponent({})); entity.addComponent( new ItemEjectorComponent({ - slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], + slots: [{ pos: new Vector(1, 0), direction: enumDirection.right }], }) ); entity.addComponent( @@ -58,16 +67,69 @@ export class MetaPainterBuilding extends MetaBuilding { slots: [ { pos: new Vector(0, 0), - directions: [enumDirection.bottom], + directions: [enumDirection.left], filter: enumItemAcceptorItemFilter.shape, }, { pos: new Vector(1, 0), - directions: [enumDirection.bottom], + directions: [enumDirection.top], filter: enumItemAcceptorItemFilter.color, }, ], }) ); } + + /** + * + * @param {Entity} entity + * @param {string} variant + */ + updateVariant(entity, variant) { + switch (variant) { + case defaultBuildingVariant: { + entity.components.ItemAcceptor.setSlots([ + { + pos: new Vector(0, 0), + directions: [enumDirection.left], + filter: enumItemAcceptorItemFilter.shape, + }, + { + pos: new Vector(1, 0), + directions: [enumDirection.top], + filter: enumItemAcceptorItemFilter.color, + }, + ]); + + entity.components.ItemProcessor.type = enumItemProcessorTypes.painter; + entity.components.ItemProcessor.inputsPerCharge = 2; + break; + } + case enumPainterVariants.double: { + entity.components.ItemAcceptor.setSlots([ + { + pos: new Vector(0, 0), + directions: [enumDirection.left], + filter: enumItemAcceptorItemFilter.shape, + }, + { + pos: new Vector(0, 1), + directions: [enumDirection.left], + filter: enumItemAcceptorItemFilter.shape, + }, + { + pos: new Vector(1, 0), + directions: [enumDirection.top], + filter: enumItemAcceptorItemFilter.color, + }, + ]); + + entity.components.ItemProcessor.type = enumItemProcessorTypes.painterDouble; + entity.components.ItemProcessor.inputsPerCharge = 3; + break; + } + default: + assertAlways(false, "Unknown painter variant: " + variant); + } + } } diff --git a/src/js/game/buildings/splitter.js b/src/js/game/buildings/splitter.js index 5b5aa27b..bdd52638 100644 --- a/src/js/game/buildings/splitter.js +++ b/src/js/game/buildings/splitter.js @@ -4,17 +4,27 @@ import { ItemAcceptorComponent } from "../components/item_acceptor"; import { ItemEjectorComponent } from "../components/item_ejector"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; import { Entity } from "../entity"; -import { MetaBuilding } from "../meta_building"; +import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; import { GameRoot } from "../root"; import { enumHubGoalRewards } from "../tutorial_goals"; +/** @enum {string} */ +export const enumSplitterVariants = { compact: "compact" }; + export class MetaSplitterBuilding extends MetaBuilding { constructor() { super("splitter"); } - getDimensions() { - return new Vector(2, 1); + getDimensions(variant) { + switch (variant) { + case defaultBuildingVariant: + return new Vector(2, 1); + case enumSplitterVariants.compact: + return new Vector(1, 1); + default: + assertAlways(false, "Unknown splitter variant: " + variant); + } } getName() { @@ -29,6 +39,10 @@ export class MetaSplitterBuilding extends MetaBuilding { return "Multifunctional - Evenly distributes all inputs onto all outputs."; } + getAvailableVariants(root) { + return [defaultBuildingVariant, enumSplitterVariants.compact]; + } + /** * @param {GameRoot} root */ @@ -60,11 +74,6 @@ export class MetaSplitterBuilding extends MetaBuilding { new ItemProcessorComponent({ inputsPerCharge: 1, processorType: enumItemProcessorTypes.splitter, - - beltUnderlays: [ - { pos: new Vector(0, 0), direction: enumDirection.top }, - { pos: new Vector(1, 0), direction: enumDirection.top }, - ], }) ); @@ -77,4 +86,62 @@ export class MetaSplitterBuilding extends MetaBuilding { }) ); } + + /** + * + * @param {Entity} entity + * @param {string} variant + */ + updateVariant(entity, variant) { + switch (variant) { + case defaultBuildingVariant: { + entity.components.ItemAcceptor.setSlots([ + { + pos: new Vector(0, 0), + directions: [enumDirection.bottom], + }, + { + pos: new Vector(1, 0), + directions: [enumDirection.bottom], + }, + ]); + + entity.components.ItemEjector.setSlots([ + { pos: new Vector(0, 0), direction: enumDirection.top }, + { pos: new Vector(1, 0), direction: enumDirection.top }, + ]); + + entity.components.ItemProcessor.beltUnderlays = [ + { pos: new Vector(0, 0), direction: enumDirection.top }, + { pos: new Vector(1, 0), direction: enumDirection.top }, + ]; + + break; + } + case enumSplitterVariants.compact: { + entity.components.ItemAcceptor.setSlots([ + { + pos: new Vector(0, 0), + directions: [enumDirection.bottom], + }, + { + pos: new Vector(0, 0), + directions: [enumDirection.right], + }, + ]); + + entity.components.ItemEjector.setSlots([ + { pos: new Vector(0, 0), direction: enumDirection.top }, + ]); + + entity.components.ItemProcessor.beltUnderlays = [ + { pos: new Vector(0, 0), direction: enumDirection.top }, + ]; + + break; + } + default: + assertAlways(false, "Unknown painter variant: " + variant); + } + } } diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 83e8e9b3..9c0559e8 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -44,7 +44,7 @@ export class Camera extends BasicSerializableObject { this.clampZoomLevel(); /** @type {Vector} */ - this.center = new Vector(0, 0); + this.center = new Vector(2 * globalConfig.tileSize, 2 * globalConfig.tileSize); // Input handling this.currentlyMoving = false; @@ -150,8 +150,7 @@ export class Camera extends BasicSerializableObject { * Finds a good initial zoom level */ findInitialZoom() { - return 3; - const desiredWorldSpaceWidth = 20 * globalConfig.tileSize; + const desiredWorldSpaceWidth = 15 * globalConfig.tileSize; const zoomLevelX = this.root.gameWidth / desiredWorldSpaceWidth; const zoomLevelY = this.root.gameHeight / desiredWorldSpaceWidth; @@ -327,7 +326,11 @@ export class Camera extends BasicSerializableObject { mapper.getBinding("map_move_right").add(() => (this.keyboardForce.x = 1)); mapper.getBinding("map_move_left").add(() => (this.keyboardForce.x = -1)); - mapper.getBinding("center_map").add(() => (this.desiredCenter = new Vector(0, 0))); + mapper.getBinding("center_map").add(() => this.centerOnMap()); + } + + centerOnMap() { + this.desiredCenter = new Vector(0, 0); } /** diff --git a/src/js/game/components/item_processor.js b/src/js/game/components/item_processor.js index c2da74e1..98d421b3 100644 --- a/src/js/game/components/item_processor.js +++ b/src/js/game/components/item_processor.js @@ -13,6 +13,7 @@ export const enumItemProcessorTypes = { trash: "trash", mixer: "mixer", painter: "painter", + painterDouble: "painterDouble", hub: "hub", }; @@ -60,12 +61,16 @@ export class ItemProcessorComponent extends Component { /** * * @param {object} param0 - * @param {enumItemProcessorTypes} param0.processorType Which type of processor this is - * @param {number} param0.inputsPerCharge How many items this machine needs until it can start working + * @param {enumItemProcessorTypes=} param0.processorType Which type of processor this is + * @param {number=} param0.inputsPerCharge How many items this machine needs until it can start working * @param {Array<{pos: Vector, direction: enumDirection}>=} param0.beltUnderlays Where to render belt underlays * */ - constructor({ processorType = enumItemProcessorTypes.splitter, inputsPerCharge, beltUnderlays = [] }) { + constructor({ + processorType = enumItemProcessorTypes.splitter, + inputsPerCharge = 1, + beltUnderlays = [], + }) { super(); // Which slot to emit next, this is only a preference and if it can't emit diff --git a/src/js/game/components/miner.js b/src/js/game/components/miner.js index 2e5ef0df..81086b14 100644 --- a/src/js/game/components/miner.js +++ b/src/js/game/components/miner.js @@ -1,6 +1,10 @@ import { globalConfig } from "../../core/config"; import { types } from "../../savegame/serialization"; import { Component } from "../component"; +import { BaseItem } from "../base_item"; +import { gItemRegistry } from "../../core/global_registries"; + +const chainBufferSize = 10; export class MinerComponent extends Component { static getId() { @@ -10,13 +14,37 @@ export class MinerComponent extends Component { static getSchema() { return { lastMiningTime: types.ufloat, + chainable: types.bool, + itemChainBuffer: types.array(types.obj(gItemRegistry)), }; } /** */ - constructor() { + constructor({ chainable = false }) { super(); this.lastMiningTime = 0; + this.chainable = chainable; + + /** + * Stores items from other miners which were chained to this + * miner. + * @type {Array} + */ + this.itemChainBuffer = []; + } + + /** + * + * @param {BaseItem} item + */ + tryAcceptChainedItem(item) { + if (this.itemChainBuffer.length > chainBufferSize) { + // Well, this one is full + return false; + } + + this.itemChainBuffer.push(item); + return true; } } diff --git a/src/js/game/core.js b/src/js/game/core.js index be8e5c6e..db577110 100644 --- a/src/js/game/core.js +++ b/src/js/game/core.js @@ -31,6 +31,7 @@ import { SoundProxy } from "./sound_proxy"; import { GameTime } from "./time/game_time"; import { ProductionAnalytics } from "./production_analytics"; import { randomInt } from "../core/utils"; +import { defaultBuildingVariant } from "./meta_building"; const logger = createLogger("ingame/core"); @@ -143,6 +144,7 @@ export class GameCore { rotation: 0, originalRotation: 0, rotationVariant: 0, + variant: defaultBuildingVariant, }); } diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index 270fee85..0b250591 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -387,6 +387,11 @@ export class HubGoals extends BasicSerializableObject { case enumItemProcessorTypes.stacker: case enumItemProcessorTypes.mixer: case enumItemProcessorTypes.painter: + case enumItemProcessorTypes.painterDouble: + assert( + globalConfig.buildingSpeeds[processorType], + "Processor type has no speed set in globalConfig.buildingSpeeds: " + processorType + ); return ( globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.processors * diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index 4d2f2268..d4331eb4 100644 --- a/src/js/game/hud/parts/building_placer.js +++ b/src/js/game/hud/parts/building_placer.js @@ -1,5 +1,5 @@ import { BaseHUDPart } from "../base_hud_part"; -import { MetaBuilding } from "../../meta_building"; +import { MetaBuilding, defaultBuildingVariant } from "../../meta_building"; import { DrawParameters } from "../../../core/draw_parameters"; import { globalConfig } from "../../../core/config"; import { StaticMapEntityComponent } from "../../components/static_map_entity"; @@ -10,7 +10,7 @@ import { enumInvertedDirections, enumDirectionToVector, } from "../../../core/vector"; -import { pulseAnimation, makeDiv } from "../../../core/utils"; +import { pulseAnimation, makeDiv, removeAllChildren } from "../../../core/utils"; import { DynamicDomAttach } from "../dynamic_dom_attach"; import { TrackedState } from "../../../core/tracked_state"; import { Math_abs, Math_radians, Math_degrees } from "../../../core/builtins"; @@ -32,6 +32,7 @@ export class HUDBuildingPlacer extends BaseHUDPart { keyActionMapper.getBinding("back").add(this.abortPlacement, this); keyActionMapper.getBinding("rotate_while_placing").add(this.tryRotate, this); + keyActionMapper.getBinding("cycle_variants").add(this.cycleVariants, this); this.domAttach = new DynamicDomAttach(this.root, this.element, {}); @@ -40,6 +41,15 @@ export class HUDBuildingPlacer extends BaseHUDPart { this.root.camera.upPostHandler.add(this.abortDragging, this); this.currentlyDragging = false; + this.currentVariant = new TrackedState(this.rerenderVariants, this); + + this.variantsAttach = new DynamicDomAttach(this.root, this.variantsElement, {}); + + /** + * Stores which variants for each building we prefer, this is based on what + * the user last selected + */ + this.preferredVariants = {}; /** * The tile we last dragged onto @@ -55,7 +65,7 @@ export class HUDBuildingPlacer extends BaseHUDPart { } createElements(parent) { - this.element = makeDiv(parent, "ingame_HUD_building_placer", [], ``); + this.element = makeDiv(parent, "ingame_HUD_PlacementHints", [], ``); this.buildingInfoElements = {}; this.buildingInfoElements.label = makeDiv(this.element, null, ["buildingLabel"], "Extract"); @@ -63,6 +73,8 @@ export class HUDBuildingPlacer extends BaseHUDPart { this.buildingInfoElements.descText = makeDiv(this.buildingInfoElements.desc, null, ["text"], ""); this.buildingInfoElements.hotkey = makeDiv(this.buildingInfoElements.desc, null, ["hotkey"], ""); this.buildingInfoElements.tutorialImage = makeDiv(this.element, null, ["buildingImage"]); + + this.variantsElement = makeDiv(parent, "ingame_HUD_PlacerVariants"); } abortPlacement() { @@ -106,8 +118,17 @@ export class HUDBuildingPlacer extends BaseHUDPart { const oldPos = this.lastDragTile; const newPos = this.root.camera.screenToWorld(pos).toTileSpace(); + if (this.root.camera.desiredCenter) { + // Camera is moving + this.lastDragTile = newPos; + return; + } + if (!oldPos.equals(newPos)) { - if (metaBuilding.getRotateAutomaticallyWhilePlacing()) { + if ( + metaBuilding.getRotateAutomaticallyWhilePlacing(this.currentVariant.get()) && + !this.root.app.inputMgr.ctrlIsDown + ) { const delta = newPos.sub(oldPos); const angleDeg = Math_degrees(delta.angle()); this.currentBaseRotation = (Math.round(angleDeg / 90) * 90 + 360) % 360; @@ -177,7 +198,6 @@ export class HUDBuildingPlacer extends BaseHUDPart { } /** - * * @param {MetaBuilding} metaBuilding */ onSelectedMetaBuildingChanged(metaBuilding) { @@ -189,16 +209,18 @@ export class HUDBuildingPlacer extends BaseHUDPart { const binding = this.root.gameState.keyActionMapper.getBinding( "building_" + metaBuilding.getId() ); - this.buildingInfoElements.hotkey.innerHTML = "Hotkey: " + binding.getKeyCodeString(); + const variant = this.preferredVariants[metaBuilding.getId()] || defaultBuildingVariant; + this.currentVariant.set(variant); + this.fakeEntity = new Entity(null); - metaBuilding.setupEntityComponents(this.fakeEntity, null); + metaBuilding.setupEntityComponents(this.fakeEntity, null, variant); this.fakeEntity.addComponent( new StaticMapEntityComponent({ origin: new Vector(0, 0), rotation: 0, - tileSize: metaBuilding.getDimensions().copy(), + tileSize: metaBuilding.getDimensions(this.currentVariant.get()).copy(), }) ); @@ -210,6 +232,74 @@ export class HUDBuildingPlacer extends BaseHUDPart { this.currentlyDragging = false; this.fakeEntity = null; } + + // Since it depends on both, rerender twice + this.rerenderVariants(); + } + + rerenderVariants() { + removeAllChildren(this.variantsElement); + + const metaBuilding = this.currentMetaBuilding.get(); + + if (!metaBuilding) { + return; + } + const availableVariants = metaBuilding.getAvailableVariants(this.root); + if (availableVariants.length === 1) { + return; + } + + makeDiv( + this.variantsElement, + null, + ["explanation"], + ` + Press ${this.root.gameState.keyActionMapper + .getBinding("cycle_variants") + .getKeyCodeString()} to cycle variants. + ` + ); + + for (let i = 0; i < availableVariants.length; ++i) { + const variant = availableVariants[i]; + + const element = makeDiv(this.variantsElement, null, ["variant"]); + element.classList.toggle("active", variant === this.currentVariant.get()); + makeDiv(element, null, ["label"], variant); + + const iconSize = 64; + + const dimensions = metaBuilding.getDimensions(variant); + const sprite = metaBuilding.getPreviewSprite(0, variant); + const spriteWrapper = makeDiv(element, null, ["iconWrap"]); + spriteWrapper.setAttribute("data-tile-w", dimensions.x); + spriteWrapper.setAttribute("data-tile-h", dimensions.y); + + spriteWrapper.innerHTML = sprite.getAsHTML(iconSize * dimensions.x, iconSize * dimensions.y); + } + } + + /** + * Cycles through the variants + */ + cycleVariants() { + const metaBuilding = this.currentMetaBuilding.get(); + if (!metaBuilding) { + this.currentVariant.set(defaultBuildingVariant); + } else { + const availableVariants = metaBuilding.getAvailableVariants(this.root); + const index = availableVariants.indexOf(this.currentVariant.get()); + assert( + index >= 0, + "Current variant was invalid: " + this.currentVariant.get() + " out of " + availableVariants + ); + const newIndex = (index + 1) % availableVariants.length; + const newVariant = availableVariants[newIndex]; + this.currentVariant.set(newVariant); + + this.preferredVariants[metaBuilding.getId()] = newVariant; + } } /** @@ -290,6 +380,7 @@ export class HUDBuildingPlacer extends BaseHUDPart { rotationVariant, originalRotation: this.currentBaseRotation, building: this.currentMetaBuilding.get(), + variant: this.currentVariant.get(), }) ) { // Succesfully placed @@ -317,10 +408,12 @@ export class HUDBuildingPlacer extends BaseHUDPart { if (this.root.camera.zoomLevel < globalConfig.mapChunkOverviewMinZoom) { // Dont allow placing in overview mode this.domAttach.update(false); + this.variantsAttach.update(false); return; } this.domAttach.update(this.currentMetaBuilding.get()); + this.variantsAttach.update(this.currentMetaBuilding.get()); const metaBuilding = this.currentMetaBuilding.get(); if (!metaBuilding) { @@ -382,7 +475,9 @@ export class HUDBuildingPlacer extends BaseHUDPart { const staticComp = this.fakeEntity.components.StaticMapEntity; staticComp.origin = tile; staticComp.rotation = rotation; + staticComp.tileSize = metaBuilding.getDimensions(this.currentVariant.get()); metaBuilding.updateRotationVariant(this.fakeEntity, rotationVariant); + metaBuilding.updateVariant(this.fakeEntity, this.currentVariant.get()); // Check if we could place the buildnig const canBuild = this.root.logic.checkCanPlaceBuilding({ @@ -390,6 +485,7 @@ export class HUDBuildingPlacer extends BaseHUDPart { rotation, rotationVariant, building: metaBuilding, + variant: this.currentVariant.get(), }); // Fade in / out @@ -419,7 +515,7 @@ export class HUDBuildingPlacer extends BaseHUDPart { parameters.context.globalAlpha = 1; // HACK to draw the entity sprite - const previewSprite = metaBuilding.getBlueprintSprite(rotationVariant); + const previewSprite = metaBuilding.getBlueprintSprite(rotationVariant, this.currentVariant.get()); staticComp.origin = worldPos.divideScalar(globalConfig.tileSize).subScalars(0.5, 0.5); staticComp.drawSpriteOnFullEntityBounds(parameters, previewSprite); staticComp.origin = tile; diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js index 02590005..4965a0da 100644 --- a/src/js/game/hud/parts/buildings_toolbar.js +++ b/src/js/game/hud/parts/buildings_toolbar.js @@ -57,24 +57,14 @@ export class HUDBuildingsToolbar extends BaseHUDPart { const actionMapper = this.root.gameState.keyActionMapper; const items = makeDiv(this.element, null, ["buildings"]); - const iconSize = 32; for (let i = 0; i < toolbarBuildings.length; ++i) { const metaBuilding = gMetaBuildingRegistry.findByClass(toolbarBuildings[i]); const binding = actionMapper.getBinding("building_" + metaBuilding.getId()); - const dimensions = metaBuilding.getDimensions(); const itemContainer = makeDiv(items, null, ["building"]); - itemContainer.setAttribute("data-tilewidth", dimensions.x); - itemContainer.setAttribute("data-tileheight", dimensions.y); + itemContainer.setAttribute("data-icon", "building_icons/" + metaBuilding.getId() + ".png"); - const label = makeDiv(itemContainer, null, ["label"]); - label.innerText = metaBuilding.getName(); - - const sprite = metaBuilding.getPreviewSprite(0); - - const spriteWrapper = makeDiv(itemContainer, null, ["iconWrap"]); - spriteWrapper.innerHTML = sprite.getAsHTML(iconSize * dimensions.x, iconSize * dimensions.y); binding.add(() => this.selectBuildingForPlacement(metaBuilding)); this.trackClicks(itemContainer, () => this.selectBuildingForPlacement(metaBuilding), { diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 373dabc6..cb9e8b20 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -72,6 +72,11 @@ export class HUDKeybindingOverlay extends BaseHUDPart { ALT + +
+ CTRL + +
` + (queryParamOptions.betaMode ? ` diff --git a/src/js/game/hud/parts/modal_dialogs.js b/src/js/game/hud/parts/modal_dialogs.js index e163d551..6b2cf587 100644 --- a/src/js/game/hud/parts/modal_dialogs.js +++ b/src/js/game/hud/parts/modal_dialogs.js @@ -5,12 +5,7 @@ import { Application } from "../../../application"; import { SOUNDS } from "../../../platform/sound"; import { DynamicDomAttach } from "../dynamic_dom_attach"; import { BaseHUDPart } from "../base_hud_part"; -import { - Dialog, - DialogLoading, - DialogVideoTutorial, - DialogOptionChooser, -} from "../../../core/modal_dialog_elements"; +import { Dialog, DialogLoading, DialogOptionChooser } from "../../../core/modal_dialog_elements"; import { makeDiv } from "../../../core/utils"; export class HUDModalDialogs extends BaseHUDPart { diff --git a/src/js/game/hud/parts/statistics_handle.js b/src/js/game/hud/parts/statistics_handle.js index b39eeff8..85d5b00f 100644 --- a/src/js/game/hud/parts/statistics_handle.js +++ b/src/js/game/hud/parts/statistics_handle.js @@ -94,7 +94,7 @@ export class HUDShapeStatisticsHandle { if (displayMode === enumDisplayMode.detailed) { const graphDpi = globalConfig.statisticsGraphDpi; - const w = 300; + const w = 270; const h = 40; if (!this.graphCanvas) { diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index fdadfb99..d5972820 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -48,6 +48,8 @@ export const defaultKeybindings = { building_abort_placement: { keyCode: key("Q") }, rotate_while_placing: { keyCode: key("R") }, + + cycle_variants: { keyCode: key("T") }, }, }; diff --git a/src/js/game/logic.js b/src/js/game/logic.js index e02b1938..c96364da 100644 --- a/src/js/game/logic.js +++ b/src/js/game/logic.js @@ -51,13 +51,14 @@ export class GameLogic { * @param {Vector} param0.origin * @param {number} param0.rotation * @param {number} param0.rotationVariant + * @param {string} param0.variant * @param {MetaBuilding} param0.building * @returns {boolean} */ - isAreaFreeToBuild({ origin, rotation, rotationVariant, building }) { + isAreaFreeToBuild({ origin, rotation, rotationVariant, variant, building }) { const checker = new StaticMapEntityComponent({ origin, - tileSize: building.getDimensions(), + tileSize: building.getDimensions(variant), rotation, }); @@ -122,16 +123,30 @@ export class GameLogic { * @param {Vector} param0.origin * @param {number} param0.rotation * @param {number} param0.rotationVariant + * @param {string} param0.variant * @param {MetaBuilding} param0.building */ - checkCanPlaceBuilding({ origin, rotation, rotationVariant, building }) { + checkCanPlaceBuilding({ origin, rotation, rotationVariant, variant, building }) { if (!building.getIsUnlocked(this.root)) { return false; } + + if ( + !building.performAdditionalPlacementChecks(this.root, { + origin, + rotation, + rotationVariant, + variant, + }) + ) { + return false; + } + return this.isAreaFreeToBuild({ origin, rotation, rotationVariant, + variant, building, }); } @@ -143,14 +158,15 @@ export class GameLogic { * @param {number} param0.rotation * @param {number} param0.originalRotation * @param {number} param0.rotationVariant + * @param {string} param0.variant * @param {MetaBuilding} param0.building */ - tryPlaceBuilding({ origin, rotation, rotationVariant, originalRotation, building }) { - if (this.checkCanPlaceBuilding({ origin, rotation, rotationVariant, building })) { + tryPlaceBuilding({ origin, rotation, rotationVariant, originalRotation, variant, building }) { + if (this.checkCanPlaceBuilding({ origin, rotation, rotationVariant, variant, building })) { // Remove any removeable entities below const checker = new StaticMapEntityComponent({ origin, - tileSize: building.getDimensions(), + tileSize: building.getDimensions(variant), rotation, }); @@ -174,6 +190,7 @@ export class GameLogic { rotation, rotationVariant, originalRotation, + variant, }); this.root.soundProxy.playUi(building.getPlacementSound()); diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 2bc8dffd..d3edbca4 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -6,6 +6,8 @@ import { Entity } from "./entity"; import { StaticMapEntityComponent } from "./components/static_map_entity"; import { SOUNDS } from "../platform/sound"; +export const defaultBuildingVariant = "default"; + export class MetaBuilding { /** * @@ -25,7 +27,7 @@ export class MetaBuilding { /** * Should return the dimensions of the building */ - getDimensions() { + getDimensions(variant = defaultBuildingVariant) { return new Vector(1, 1); } @@ -60,8 +62,9 @@ export class MetaBuilding { /** * Whether to rotate automatically in the dragging direction while placing + * @param {string} variant */ - getRotateAutomaticallyWhilePlacing() { + getRotateAutomaticallyWhilePlacing(variant) { return false; } @@ -73,20 +76,37 @@ export class MetaBuilding { return SOUNDS.placeBuilding; } + /** + * @param {GameRoot} root + */ + getAvailableVariants(root) { + return [defaultBuildingVariant]; + } + /** * Returns a preview sprite * @returns {AtlasSprite} */ - getPreviewSprite(rotationVariant = 0) { - return Loader.getSprite("sprites/buildings/" + this.id + ".png"); + getPreviewSprite(rotationVariant = 0, variant = defaultBuildingVariant) { + return Loader.getSprite( + "sprites/buildings/" + + this.id + + (variant === defaultBuildingVariant ? "" : "-" + variant) + + ".png" + ); } /** * Returns a sprite for blueprints * @returns {AtlasSprite} */ - getBlueprintSprite(rotationVariant = 0) { - return Loader.getSprite("sprites/blueprints/" + this.id + ".png"); + getBlueprintSprite(rotationVariant = 0, variant = defaultBuildingVariant) { + return Loader.getSprite( + "sprites/blueprints/" + + this.id + + (variant === defaultBuildingVariant ? "" : "-" + variant) + + ".png" + ); } /** @@ -112,30 +132,49 @@ export class MetaBuilding { return null; } + /** + * Should perform additional placement checks + * @param {GameRoot} root + * @param {object} param0 + * @param {Vector} param0.origin + * @param {number} param0.rotation + * @param {number} param0.rotationVariant + * @param {string} param0.variant + */ + performAdditionalPlacementChecks(root, { origin, rotation, rotationVariant, variant }) { + return true; + } + /** * Creates the entity at the given location * @param {object} param0 * @param {GameRoot} param0.root * @param {Vector} param0.origin Origin tile * @param {number=} param0.rotation Rotation - * @param {number=} param0.originalRotation Original Rotation - * @param {number=} param0.rotationVariant Rotation variant + * @param {number} param0.originalRotation Original Rotation + * @param {number} param0.rotationVariant Rotation variant + * @param {string} param0.variant */ - createAndPlaceEntity({ root, origin, rotation = 0, originalRotation = 0, rotationVariant = 0 }) { + createAndPlaceEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { const entity = new Entity(root); entity.addComponent( new StaticMapEntityComponent({ - spriteKey: "sprites/buildings/" + this.id + ".png", + spriteKey: + "sprites/buildings/" + + this.id + + (variant === defaultBuildingVariant ? "" : "-" + variant) + + ".png", origin: new Vector(origin.x, origin.y), rotation, originalRotation, - tileSize: this.getDimensions().copy(), + tileSize: this.getDimensions(variant).copy(), silhouetteColor: this.getSilhouetteColor(), }) ); this.setupEntityComponents(entity, root); this.updateRotationVariant(entity, rotationVariant); + this.updateVariant(entity, variant); root.map.placeStaticEntity(entity); root.entityMgr.registerEntity(entity); @@ -169,6 +208,13 @@ export class MetaBuilding { */ updateRotationVariant(entity, rotationVariant) {} + /** + * Should update the entity to match the given variant + * @param {Entity} entity + * @param {string} variant + */ + updateVariant(entity, variant) {} + // PRIVATE INTERFACE /** diff --git a/src/js/game/systems/belt.js b/src/js/game/systems/belt.js index 00fa4803..9bd7842a 100644 --- a/src/js/game/systems/belt.js +++ b/src/js/game/systems/belt.js @@ -63,6 +63,10 @@ export class BeltSystem extends GameSystemWithFilter { * @param {Entity} entity */ updateSurroundingBeltPlacement(entity) { + if (!this.root.gameInitialized) { + return; + } + const staticComp = entity.components.StaticMapEntity; if (!staticComp) { return; diff --git a/src/js/game/systems/item_processor.js b/src/js/game/systems/item_processor.js index 2d36ae06..91b04c24 100644 --- a/src/js/game/systems/item_processor.js +++ b/src/js/game/systems/item_processor.js @@ -16,11 +16,6 @@ export class ItemProcessorSystem extends GameSystemWithFilter { constructor(root) { super(root, [ItemProcessorComponent]); - this.sprites = {}; - for (const key in enumItemProcessorTypes) { - this.sprites[key] = Loader.getSprite("sprites/buildings/" + key + ".png"); - } - this.underlayBeltSprites = [ Loader.getSprite("sprites/belt/forward_0.png"), Loader.getSprite("sprites/belt/forward_1.png"), @@ -121,6 +116,12 @@ export class ItemProcessorSystem extends GameSystemWithFilter { const items = processorComp.inputSlots; processorComp.inputSlots = []; + /** @type {Object.} */ + const itemsBySlot = {}; + for (let i = 0; i < items.length; ++i) { + itemsBySlot[items[i].sourceSlot] = items[i]; + } + const baseSpeed = this.root.hubGoals.getProcessorBaseSpeed(processorComp.type); processorComp.secondsUntilEject = 1 / baseSpeed; @@ -185,11 +186,9 @@ export class ItemProcessorSystem extends GameSystemWithFilter { // STACKER case enumItemProcessorTypes.stacker: { - const item1 = items[0]; - const item2 = items[1]; + const lowerItem = /** @type {ShapeItem} */ (itemsBySlot[0].item); + const upperItem = /** @type {ShapeItem} */ (itemsBySlot[1].item); - const lowerItem = /** @type {ShapeItem} */ (item1.sourceSlot === 0 ? item1.item : item2.item); - const upperItem = /** @type {ShapeItem} */ (item1.sourceSlot === 1 ? item1.item : item2.item); assert(lowerItem instanceof ShapeItem, "Input for lower stack is not a shape"); assert(upperItem instanceof ShapeItem, "Input for upper stack is not a shape"); @@ -238,11 +237,8 @@ export class ItemProcessorSystem extends GameSystemWithFilter { // PAINTER case enumItemProcessorTypes.painter: { - const item1 = items[0]; - const item2 = items[1]; - - const shapeItem = /** @type {ShapeItem} */ (item1.sourceSlot === 0 ? item1.item : item2.item); - const colorItem = /** @type {ColorItem} */ (item1.sourceSlot === 1 ? item1.item : item2.item); + const shapeItem = /** @type {ShapeItem} */ (itemsBySlot[0].item); + const colorItem = /** @type {ColorItem} */ (itemsBySlot[1].item); const colorizedDefinition = this.root.shapeDefinitionMgr.shapeActionPaintWith( shapeItem.definition, @@ -256,6 +252,38 @@ export class ItemProcessorSystem extends GameSystemWithFilter { break; } + // PAINTER (DOUBLE) + + case enumItemProcessorTypes.painterDouble: { + console.log("YUP"); + const shapeItem1 = /** @type {ShapeItem} */ (itemsBySlot[0].item); + const shapeItem2 = /** @type {ShapeItem} */ (itemsBySlot[1].item); + const colorItem = /** @type {ColorItem} */ (itemsBySlot[2].item); + + assert(shapeItem1 instanceof ShapeItem, "Input for painter is not a shape"); + assert(shapeItem2 instanceof ShapeItem, "Input for painter is not a shape"); + assert(colorItem instanceof ColorItem, "Input for painter is not a color"); + + const colorizedDefinition1 = this.root.shapeDefinitionMgr.shapeActionPaintWith( + shapeItem1.definition, + colorItem.color + ); + + const colorizedDefinition2 = this.root.shapeDefinitionMgr.shapeActionPaintWith( + shapeItem2.definition, + colorItem.color + ); + outItems.push({ + item: new ShapeItem(colorizedDefinition1), + }); + + outItems.push({ + item: new ShapeItem(colorizedDefinition2), + }); + + break; + } + // HUB case enumItemProcessorTypes.hub: { diff --git a/src/js/game/systems/miner.js b/src/js/game/systems/miner.js index 626378f2..dcf1c7bd 100644 --- a/src/js/game/systems/miner.js +++ b/src/js/game/systems/miner.js @@ -4,6 +4,9 @@ import { MinerComponent } from "../components/miner"; import { GameSystemWithFilter } from "../game_system_with_filter"; import { MapChunkView } from "../map_chunk_view"; import { ShapeItem } from "../items/shape_item"; +import { enumDirectionToVector } from "../../core/vector"; +import { Entity } from "../entity"; +import { BaseItem } from "../base_item"; export class MinerSystem extends GameSystemWithFilter { constructor(root) { @@ -19,35 +22,76 @@ export class MinerSystem extends GameSystemWithFilter { const staticComp = entity.components.StaticMapEntity; const ejectComp = entity.components.ItemEjector; - if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) { - if (!ejectComp.canEjectOnSlot(0)) { - // We can't eject further + // First, try to get rid of chained items + if (minerComp.itemChainBuffer.length > 0) { + if (this.tryPerformMinerEject(entity, minerComp.itemChainBuffer[0])) { + minerComp.itemChainBuffer.shift(); continue; } + } - // Actually mine - minerComp.lastMiningTime = this.root.time.now(); - + if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) { const lowerLayerItem = this.root.map.getLowerLayerContentXY( staticComp.origin.x, staticComp.origin.y ); + + // TODO: Should not be required actually if (!lowerLayerItem) { // Nothing below; continue; } - // Analytics hook - this.root.signals.itemProduced.dispatch(lowerLayerItem); + if (this.tryPerformMinerEject(entity, lowerLayerItem)) { + // Analytics hook + this.root.signals.itemProduced.dispatch(lowerLayerItem); - // Try actually ejecting - if (!ejectComp.tryEject(0, lowerLayerItem)) { - assert(false, "Failed to eject"); + // Actually mine + minerComp.lastMiningTime = this.root.time.now(); } } } } + /** + * + * @param {Entity} entity + * @param {BaseItem} item + */ + tryPerformMinerEject(entity, item) { + const minerComp = entity.components.Miner; + const ejectComp = entity.components.ItemEjector; + const staticComp = entity.components.StaticMapEntity; + + // Check if we are a chained miner + if (minerComp.chainable) { + const ejectingSlot = ejectComp.slots[0]; + const ejectingPos = staticComp.localTileToWorld(ejectingSlot.pos); + const ejectingDirection = staticComp.localDirectionToWorld(ejectingSlot.direction); + + const targetTile = ejectingPos.add(enumDirectionToVector[ejectingDirection]); + const targetContents = this.root.map.getTileContent(targetTile); + + // Check if we are connected to another miner and thus do not eject directly + if (targetContents) { + const targetMinerComp = targetContents.components.Miner; + if (targetMinerComp) { + if (targetMinerComp.tryAcceptChainedItem(item)) { + return true; + } else { + return false; + } + } + } + } + + // Seems we are a regular miner or at the end of a row, try actually ejecting + if (ejectComp.tryEject(0, item)) { + return true; + } + return false; + } + /** * * @param {DrawParameters} parameters diff --git a/src/js/game/tutorial_goals.js b/src/js/game/tutorial_goals.js index bc404873..88c0e967 100644 --- a/src/js/game/tutorial_goals.js +++ b/src/js/game/tutorial_goals.js @@ -118,13 +118,13 @@ export const tutorialGoals = [ // Stacker { - shape: "CcCcRgRg", + shape: "CgScScCg", required: 3000, reward: enumHubGoalRewards.no_reward, }, { - shape: "RgRgRgRg:CcCcCcCc", + shape: "RpRpRpRp:CcCcCcCc", required: 4000, reward: enumHubGoalRewards.no_reward, }, diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index efaba60b..8ed310e2 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -5,8 +5,8 @@ import { makeDiv, formatSecondsToTimeAgo, generateFileDownload, - removeAllChildren, waitNextFrame, + isSupportedBrowser, } from "../core/utils"; import { ReadWriteProxy } from "../core/read_write_proxy"; import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs"; @@ -61,6 +61,14 @@ export class MainMenuState extends GameState { ` }
+ ${ + isSupportedBrowser() + ? "" + : ` +
This game is optimized for Google Chrome. Your browser is not supported or slow!
+ ` + } +