Add support for different building variants
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/belt.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/cutter.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/miner.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/mixer.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/painter.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/rotater.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/splitter.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/stacker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/trash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res/ui/building_icons/underground_belt.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.6 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 42 KiB | 
| Before Width: | Height: | Size: 3.1 KiB | 
| Before Width: | Height: | Size: 940 B | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 1.8 KiB | 
| @ -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$" | ||||
| } | ||||
| } | ||||
|  | ||||
| Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 33 KiB | 
| @ -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$" | ||||
| } | ||||
| } | ||||
|  | ||||
| Before Width: | Height: | Size: 390 KiB After Width: | Height: | Size: 530 KiB | 
| @ -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$" | ||||
| } | ||||
| } | ||||
|  | ||||
| Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 106 KiB | 
| @ -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$" | ||||
| } | ||||
| } | ||||
|  | ||||
| Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 255 KiB | 
| @ -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$" | ||||
| } | ||||
| } | ||||
|  | ||||
| Before Width: | Height: | Size: 402 KiB After Width: | Height: | Size: 496 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res_raw/sprites/blueprints/miner-chainable.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 11 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res_raw/sprites/blueprints/painter-double.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 22 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res_raw/sprites/blueprints/splitter-compact.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res_raw/sprites/buildings/miner-chainable.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res_raw/sprites/buildings/painter-double.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								res_raw/sprites/buildings/splitter-compact.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 8.3 KiB | 
| @ -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; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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, | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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, | ||||
|  | ||||
| @ -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"); | ||||
| 
 | ||||
|  | ||||
| @ -30,5 +30,6 @@ export class BaseItem extends BasicSerializableObject { | ||||
| 
 | ||||
|     getBackgroundColorAsResource() { | ||||
|         abstract; | ||||
|         return ""; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -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
 | ||||
|  | ||||
| @ -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<BaseItem>} | ||||
|          */ | ||||
|         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; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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, | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -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 * | ||||
|  | ||||
| @ -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 <code class='keybinding'>${this.root.gameState.keyActionMapper | ||||
|                 .getBinding("cycle_variants") | ||||
|                 .getKeyCodeString()}</code> 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; | ||||
|  | ||||
| @ -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), { | ||||
|  | ||||
| @ -72,6 +72,11 @@ export class HUDKeybindingOverlay extends BaseHUDPart { | ||||
|                 <code class="keybinding shift">ALT</code> | ||||
|                 <label>Reverse orientation</label> | ||||
|             </div> | ||||
| 
 | ||||
|             <div class="binding placementOnly"> | ||||
|                 <code class="keybinding shift">CTRL</code> | ||||
|                 <label>Disable auto orientation</label> | ||||
|             </div> | ||||
|         ` +
 | ||||
|                 (queryParamOptions.betaMode | ||||
|                     ? ` | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
| @ -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) { | ||||
|  | ||||
| @ -48,6 +48,8 @@ export const defaultKeybindings = { | ||||
|         building_abort_placement: { keyCode: key("Q") }, | ||||
| 
 | ||||
|         rotate_while_placing: { keyCode: key("R") }, | ||||
| 
 | ||||
|         cycle_variants: { keyCode: key("T") }, | ||||
|     }, | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -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()); | ||||
|  | ||||
| @ -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
 | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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.<string, { item: BaseItem, sourceSlot: number }>} */ | ||||
|         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: { | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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, | ||||
|     }, | ||||
|  | ||||
| @ -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 { | ||||
|             ` | ||||
|             }     | ||||
|                 <div class="mainContainer"> | ||||
|             ${ | ||||
|                 isSupportedBrowser() | ||||
|                     ? "" | ||||
|                     : ` | ||||
|                 <div class="browserWarning">This game is optimized for Google Chrome. Your browser is not supported or slow!</div> | ||||
|             ` | ||||
|             } | ||||
| 
 | ||||
|                     <button class="playButton styledButton">Play</button> | ||||
|                     <button class="importButton styledButton">Import savegame</button> | ||||
|                 </div> | ||||
|  | ||||
 tobspr
						tobspr