mindustry logic execution, map- and schematic- parsing and rendering
-rw-r--r--.github/example.pngbin6866 -> 33317 bytes
-rw-r--r--.gitignore5
-rw-r--r--Cargo.toml46
-rw-r--r--LICENSE.txt (renamed from mindus/LICENSE.txt)0
-rw-r--r--README.md20
-rw-r--r--assets/blocks/campaign/interplanetary-accelerator.pngbin0 -> 2696 bytes
-rw-r--r--assets/blocks/campaign/launch-pad.png (renamed from mindus/assets/blocks/campaign/launch-pad.png)bin741 -> 741 bytes
-rw-r--r--assets/blocks/campaign/launchpod.pngbin0 -> 735 bytes
-rw-r--r--assets/blocks/defense/barrier-projector-team.pngbin0 -> 482 bytes
-rw-r--r--assets/blocks/defense/barrier-projector.pngbin0 -> 831 bytes
-rw-r--r--assets/blocks/defense/build-tower.pngbin0 -> 1093 bytes
-rw-r--r--assets/blocks/defense/force-projector-team.png (renamed from mindus/assets/blocks/defense/force-projector-team.png)bin482 -> 482 bytes
-rw-r--r--assets/blocks/defense/force-projector.pngbin0 -> 829 bytes
-rw-r--r--assets/blocks/defense/large-shield-projector-team.pngbin0 -> 839 bytes
-rw-r--r--assets/blocks/defense/large-shield-projector.pngbin0 -> 1172 bytes
-rw-r--r--assets/blocks/defense/mend-projector.pngbin0 -> 520 bytes
-rw-r--r--assets/blocks/defense/mender.pngbin0 -> 262 bytes
-rw-r--r--assets/blocks/defense/overdrive-dome.pngbin0 -> 1105 bytes
-rw-r--r--assets/blocks/defense/overdrive-projector.pngbin0 -> 520 bytes
-rw-r--r--assets/blocks/defense/radar.png (renamed from mindus/assets/blocks/defense/radar.png)bin301 -> 301 bytes
-rw-r--r--assets/blocks/defense/regen-projector.pngbin0 -> 1072 bytes
-rw-r--r--assets/blocks/defense/shield-projector-team.png (renamed from mindus/assets/blocks/defense/shield-projector-team.png)bin482 -> 482 bytes
-rw-r--r--assets/blocks/defense/shield-projector.pngbin0 -> 882 bytes
-rw-r--r--assets/blocks/defense/shock-mine-team-top.pngbin0 -> 140 bytes
-rw-r--r--assets/blocks/defense/shock-mine.png (renamed from mindus/assets/blocks/defense/shock-mine.png)bin217 -> 217 bytes
-rw-r--r--assets/blocks/defense/shockwave-tower.pngbin0 -> 1144 bytes
-rw-r--r--assets/blocks/distribution/bridge-arrow.pngbin0 -> 130 bytes
-rw-r--r--assets/blocks/distribution/bridge-conveyor-arrow.pngbin0 -> 128 bytes
-rw-r--r--assets/blocks/distribution/bridge-conveyor-bridge.pngbin0 -> 116 bytes
-rw-r--r--assets/blocks/distribution/bridge-conveyor-end.pngbin0 -> 147 bytes
-rw-r--r--assets/blocks/distribution/bridge-conveyor.pngbin0 -> 219 bytes
-rw-r--r--assets/blocks/distribution/center.pngbin0 -> 114 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-0-0.pngbin0 -> 272 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-0-1.pngbin0 -> 361 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-0-2.pngbin0 -> 342 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-0-3.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.pngbin0 -> 422 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-0.pngbin0 -> 430 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.pngbin0 -> 418 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.pngbin0 -> 423 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-1.pngbin0 -> 417 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-2.pngbin0 -> 418 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-1-3.pngbin0 -> 423 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.pngbin0 -> 366 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.pngbin0 -> 376 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-0.pngbin0 -> 290 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.pngbin0 -> 375 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-1.pngbin0 -> 371 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-2.pngbin0 -> 371 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.pngbin0 -> 369 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-2-3.pngbin0 -> 372 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.pngbin0 -> 318 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-3-0.pngbin0 -> 187 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-3-1.pngbin0 -> 324 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-3-3.pngbin0 -> 324 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-4-0.pngbin0 -> 258 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-4-1.pngbin0 -> 359 bytes
-rw-r--r--assets/blocks/distribution/conveyors/armored-conveyor-4-3.pngbin0 -> 361 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-0-0.pngbin0 -> 145 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-0-1.pngbin0 -> 272 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-0-2.pngbin0 -> 276 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-0-3.pngbin0 -> 271 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-0-h.pngbin0 -> 366 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-0.pngbin0 -> 263 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-1-h.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-1-v.pngbin0 -> 365 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-1.pngbin0 -> 361 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-2.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-1-3.png (renamed from mindus/assets/blocks/distribution/conveyors/conveyor-1-3.png)bin362 -> 362 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-0-h.pngbin0 -> 313 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-0-v.pngbin0 -> 315 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-0.pngbin0 -> 182 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-1-h.pngbin0 -> 307 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-1.pngbin0 -> 307 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-2.pngbin0 -> 315 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-3-h.pngbin0 -> 303 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-2-3.pngbin0 -> 309 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-3-0-h.pngbin0 -> 318 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-3-0.pngbin0 -> 188 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-3-1.pngbin0 -> 327 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-3-3.pngbin0 -> 326 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-4-0.png (renamed from mindus/assets/blocks/distribution/conveyors/conveyor-4-0.png)bin172 -> 172 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-4-1.pngbin0 -> 307 bytes
-rw-r--r--assets/blocks/distribution/conveyors/conveyor-4-3.pngbin0 -> 308 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-0-0.pngbin0 -> 152 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-0-1.pngbin0 -> 278 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-0-2.pngbin0 -> 285 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-0-3.pngbin0 -> 278 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png)bin375 -> 375 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-0.pngbin0 -> 275 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png)bin376 -> 376 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.pngbin0 -> 382 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png)bin375 -> 375 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-2.pngbin0 -> 380 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-1-3.pngbin0 -> 379 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.pngbin0 -> 321 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.pngbin0 -> 324 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-0.pngbin0 -> 188 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png)bin312 -> 312 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png)bin311 -> 311 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-2.pngbin0 -> 323 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png)bin310 -> 310 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-2-3.pngbin0 -> 315 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.pngbin0 -> 318 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-3-0.pngbin0 -> 188 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-3-1.pngbin0 -> 327 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-3-3.pngbin0 -> 326 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png (renamed from mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png)bin177 -> 177 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-4-1.pngbin0 -> 315 bytes
-rw-r--r--assets/blocks/distribution/conveyors/titanium-conveyor-4-3.pngbin0 -> 315 bytes
-rw-r--r--assets/blocks/distribution/distributor.png (renamed from mindus/assets/blocks/distribution/distributor.png)bin318 -> 318 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-0-0.pngbin0 -> 298 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-0-1.pngbin0 -> 335 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-0-2.pngbin0 -> 301 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-0-3.pngbin0 -> 342 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-0-h.pngbin0 -> 376 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-0.pngbin0 -> 375 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-1-h.pngbin0 -> 372 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-1-v.pngbin0 -> 375 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-1.pngbin0 -> 369 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-2.pngbin0 -> 374 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-1-3.pngbin0 -> 377 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-0-h.pngbin0 -> 312 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-0-v.pngbin0 -> 316 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-0.pngbin0 -> 312 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-1-h.pngbin0 -> 351 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-1.pngbin0 -> 351 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-2.pngbin0 -> 315 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-3-h.pngbin0 -> 354 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-2-3.pngbin0 -> 351 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-3-0-h.pngbin0 -> 313 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-3-0.pngbin0 -> 312 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-3-1.pngbin0 -> 340 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-3-3.pngbin0 -> 345 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-4-0.png (renamed from mindus/assets/blocks/distribution/ducts/armored-duct-4-0.png)bin331 -> 331 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-4-1.pngbin0 -> 339 bytes
-rw-r--r--assets/blocks/distribution/ducts/armored-duct-4-3.pngbin0 -> 340 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-0-0.pngbin0 -> 290 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-0-1.pngbin0 -> 307 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-0-2.pngbin0 -> 292 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-0-3.pngbin0 -> 306 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-0-h.pngbin0 -> 340 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-0.pngbin0 -> 345 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-1-h.pngbin0 -> 337 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-1-v.pngbin0 -> 341 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-1.pngbin0 -> 344 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-2.pngbin0 -> 341 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-1-3.pngbin0 -> 338 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-0-h.pngbin0 -> 305 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-0-v.pngbin0 -> 308 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-0.pngbin0 -> 305 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-1-h.pngbin0 -> 318 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-1.pngbin0 -> 320 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-2.pngbin0 -> 305 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-3-h.pngbin0 -> 320 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-2-3.pngbin0 -> 322 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-3-0-h.pngbin0 -> 306 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-3-0.pngbin0 -> 303 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-3-1.pngbin0 -> 326 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-3-3.pngbin0 -> 325 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-4-0.pngbin0 -> 312 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-4-1.pngbin0 -> 323 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-4-3.pngbin0 -> 322 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-base.pngbin0 -> 251 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-bridge-arrow.pngbin0 -> 134 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.pngbin0 -> 115 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-bridge-bridge.pngbin0 -> 131 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-bridge-dir.pngbin0 -> 141 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-bridge.pngbin0 -> 203 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-router.pngbin0 -> 203 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-unloader-top.pngbin0 -> 393 bytes
-rw-r--r--assets/blocks/distribution/ducts/duct-unloader.pngbin0 -> 226 bytes
-rw-r--r--assets/blocks/distribution/ducts/overflow-duct.png (renamed from mindus/assets/blocks/distribution/ducts/overflow-duct.png)bin134 -> 134 bytes
-rw-r--r--assets/blocks/distribution/ducts/surge-router.pngbin0 -> 260 bytes
-rw-r--r--assets/blocks/distribution/ducts/top.pngbin0 -> 155 bytes
-rw-r--r--assets/blocks/distribution/ducts/underflow-duct.png (renamed from mindus/assets/blocks/distribution/ducts/underflow-duct.png)bin166 -> 166 bytes
-rw-r--r--assets/blocks/distribution/inverted-sorter.pngbin0 -> 370 bytes
-rw-r--r--assets/blocks/distribution/item-source.pngbin0 -> 324 bytes
-rw-r--r--assets/blocks/distribution/item-void.pngbin0 -> 223 bytes
-rw-r--r--assets/blocks/distribution/junction.png (renamed from mindus/assets/blocks/distribution/junction.png)bin196 -> 196 bytes
-rw-r--r--assets/blocks/distribution/mass-driver-base.pngbin0 -> 840 bytes
-rw-r--r--assets/blocks/distribution/mass-driver.pngbin0 -> 1023 bytes
-rw-r--r--assets/blocks/distribution/overflow-gate.pngbin0 -> 179 bytes
-rw-r--r--assets/blocks/distribution/phase-conveyor-arrow.pngbin0 -> 128 bytes
-rw-r--r--assets/blocks/distribution/phase-conveyor-bridge.pngbin0 -> 116 bytes
-rw-r--r--assets/blocks/distribution/phase-conveyor-end.pngbin0 -> 101 bytes
-rw-r--r--assets/blocks/distribution/phase-conveyor.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/distribution/router.png (renamed from mindus/assets/blocks/distribution/router.png)bin153 -> 153 bytes
-rw-r--r--assets/blocks/distribution/sorter.pngbin0 -> 316 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.pngbin0 -> 165 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.pngbin0 -> 1640 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.pngbin0 -> 1678 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.pngbin0 -> 567 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.pngbin0 -> 1120 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.pngbin0 -> 1127 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.pngbin0 -> 1120 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png (renamed from mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png)bin1349 -> 1370 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-0.pngbin0 -> 198 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-1.pngbin0 -> 579 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.pngbin0 -> 545 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.pngbin0 -> 1100 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.pngbin0 -> 1105 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.pngbin0 -> 1110 bytes
-rw-r--r--assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.pngbin0 -> 190 bytes
-rw-r--r--assets/blocks/distribution/underflow-gate.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/distribution/unit-cargo-unload-point-top.pngbin0 -> 143 bytes
-rw-r--r--assets/blocks/distribution/unit-cargo-unload-point.pngbin0 -> 586 bytes
-rw-r--r--assets/blocks/drills/blast-drill.pngbin0 -> 1285 bytes
-rw-r--r--assets/blocks/drills/cliff-crusher-rotator.pngbin0 -> 216 bytes
-rw-r--r--assets/blocks/drills/cliff-crusher-top.png (renamed from mindus/assets/blocks/drills/cliff-crusher-top.png)bin214 -> 214 bytes
-rw-r--r--assets/blocks/drills/cliff-crusher.pngbin0 -> 688 bytes
-rw-r--r--assets/blocks/drills/eruption-drill.pngbin0 -> 2257 bytes
-rw-r--r--assets/blocks/drills/impact-drill.pngbin0 -> 1770 bytes
-rw-r--r--assets/blocks/drills/large-plasma-bore-top.pngbin0 -> 432 bytes
-rw-r--r--assets/blocks/drills/large-plasma-bore.pngbin0 -> 1060 bytes
-rw-r--r--assets/blocks/drills/laser-drill.pngbin0 -> 912 bytes
-rw-r--r--assets/blocks/drills/mechanical-drill.pngbin0 -> 706 bytes
-rw-r--r--assets/blocks/drills/oil-extractor.pngbin0 -> 1065 bytes
-rw-r--r--assets/blocks/drills/plasma-bore-top.pngbin0 -> 382 bytes
-rw-r--r--assets/blocks/drills/plasma-bore.pngbin0 -> 674 bytes
-rw-r--r--assets/blocks/drills/pneumatic-drill.pngbin0 -> 666 bytes
-rw-r--r--assets/blocks/drills/vent-condenser.pngbin0 -> 1408 bytes
-rw-r--r--assets/blocks/drills/water-extractor.pngbin0 -> 714 bytes
-rw-r--r--assets/blocks/environment/arkycite-floor.pngbin0 -> 175 bytes
-rw-r--r--assets/blocks/environment/arkyic-boulder.pngbin0 -> 443 bytes
-rw-r--r--assets/blocks/environment/arkyic-stone.pngbin0 -> 175 bytes
-rw-r--r--assets/blocks/environment/arkyic-vent.pngbin0 -> 946 bytes
-rw-r--r--assets/blocks/environment/arkyic-wall-large.pngbin0 -> 527 bytes
-rw-r--r--assets/blocks/environment/arkyic-wall.pngbin0 -> 194 bytes
-rw-r--r--assets/blocks/environment/basalt-boulder.pngbin0 -> 494 bytes
-rw-r--r--assets/blocks/environment/basalt.pngbin0 -> 155 bytes
-rw-r--r--assets/blocks/environment/beryllic-boulder.pngbin0 -> 472 bytes
-rw-r--r--assets/blocks/environment/beryllic-stone-wall-large.pngbin0 -> 538 bytes
-rw-r--r--assets/blocks/environment/beryllic-stone-wall.pngbin0 -> 210 bytes
-rw-r--r--assets/blocks/environment/beryllic-stone.pngbin0 -> 178 bytes
-rw-r--r--assets/blocks/environment/bluemat.pngbin0 -> 157 bytes
-rw-r--r--assets/blocks/environment/boulder.pngbin0 -> 382 bytes
-rw-r--r--assets/blocks/environment/carbon-boulder.pngbin0 -> 485 bytes
-rw-r--r--assets/blocks/environment/carbon-stone.pngbin0 -> 301 bytes
-rw-r--r--assets/blocks/environment/carbon-vent.pngbin0 -> 923 bytes
-rw-r--r--assets/blocks/environment/carbon-wall-large.pngbin0 -> 559 bytes
-rw-r--r--assets/blocks/environment/carbon-wall.pngbin0 -> 343 bytes
-rw-r--r--assets/blocks/environment/char.pngbin0 -> 221 bytes
-rw-r--r--assets/blocks/environment/core-zone.pngbin0 -> 172 bytes
-rw-r--r--assets/blocks/environment/crater-stone.pngbin0 -> 213 bytes
-rw-r--r--assets/blocks/environment/crystal-blocks.pngbin0 -> 1023 bytes
-rw-r--r--assets/blocks/environment/crystal-cluster.pngbin0 -> 2417 bytes
-rw-r--r--assets/blocks/environment/crystal-floor.png (renamed from mindus/assets/blocks/environment/crystal-floor1.png)bin180 -> 180 bytes
-rw-r--r--assets/blocks/environment/crystal-orbs.pngbin0 -> 929 bytes
-rw-r--r--assets/blocks/environment/crystalline-boulder.pngbin0 -> 458 bytes
-rw-r--r--assets/blocks/environment/crystalline-stone-wall-large.pngbin0 -> 555 bytes
-rw-r--r--assets/blocks/environment/crystalline-stone-wall.pngbin0 -> 190 bytes
-rw-r--r--assets/blocks/environment/crystalline-stone.pngbin0 -> 165 bytes
-rw-r--r--assets/blocks/environment/crystalline-vent.pngbin0 -> 942 bytes
-rw-r--r--assets/blocks/environment/dacite-boulder.pngbin0 -> 494 bytes
-rw-r--r--assets/blocks/environment/dacite-wall-large.pngbin0 -> 497 bytes
-rw-r--r--assets/blocks/environment/dacite-wall.pngbin0 -> 205 bytes
-rw-r--r--assets/blocks/environment/dacite.pngbin0 -> 172 bytes
-rw-r--r--assets/blocks/environment/dark-metal-large.pngbin0 -> 413 bytes
-rw-r--r--assets/blocks/environment/dark-metal.pngbin0 -> 262 bytes
-rw-r--r--assets/blocks/environment/dark-panel-1.pngbin0 -> 187 bytes
-rw-r--r--assets/blocks/environment/dark-panel-2.pngbin0 -> 227 bytes
-rw-r--r--assets/blocks/environment/dark-panel-3.pngbin0 -> 158 bytes
-rw-r--r--assets/blocks/environment/dark-panel-4.pngbin0 -> 210 bytes
-rw-r--r--assets/blocks/environment/dark-panel-5.png (renamed from mindus/assets/blocks/environment/dark-panel-5.png)bin196 -> 196 bytes
-rw-r--r--assets/blocks/environment/dark-panel-6.pngbin0 -> 174 bytes
-rw-r--r--assets/blocks/environment/darksand-tainted-water.pngbin0 -> 313 bytes
-rw-r--r--assets/blocks/environment/darksand-water.pngbin0 -> 313 bytes
-rw-r--r--assets/blocks/environment/darksand.pngbin0 -> 157 bytes
-rw-r--r--assets/blocks/environment/deep-tainted-water.pngbin0 -> 172 bytes
-rw-r--r--assets/blocks/environment/deep-water.pngbin0 -> 172 bytes
-rw-r--r--assets/blocks/environment/dense-red-stone.pngbin0 -> 200 bytes
-rw-r--r--assets/blocks/environment/dirt-wall-large.pngbin0 -> 480 bytes
-rw-r--r--assets/blocks/environment/dirt-wall.png (renamed from mindus/assets/blocks/environment/dirt-wall2.png)bin197 -> 197 bytes
-rw-r--r--assets/blocks/environment/dirt.pngbin0 -> 143 bytes
-rw-r--r--assets/blocks/environment/dune-wall-large.pngbin0 -> 647 bytes
-rw-r--r--assets/blocks/environment/dune-wall.pngbin0 -> 230 bytes
-rw-r--r--assets/blocks/environment/ferric-boulder.pngbin0 -> 421 bytes
-rw-r--r--assets/blocks/environment/ferric-craters.pngbin0 -> 216 bytes
-rw-r--r--assets/blocks/environment/ferric-stone-wall-large.pngbin0 -> 500 bytes
-rw-r--r--assets/blocks/environment/ferric-stone-wall.png (renamed from mindus/assets/blocks/environment/ferric-stone-wall2.png)bin193 -> 193 bytes
-rw-r--r--assets/blocks/environment/ferric-stone.pngbin0 -> 154 bytes
-rw-r--r--assets/blocks/environment/graphitic-wall-large.pngbin0 -> 759 bytes
-rw-r--r--assets/blocks/environment/graphitic-wall.pngbin0 -> 384 bytes
-rw-r--r--assets/blocks/environment/grass.pngbin0 -> 152 bytes
-rw-r--r--assets/blocks/environment/hotrock.pngbin0 -> 225 bytes
-rw-r--r--assets/blocks/environment/ice-snow.pngbin0 -> 363 bytes
-rw-r--r--assets/blocks/environment/ice-wall-large.pngbin0 -> 418 bytes
-rw-r--r--assets/blocks/environment/ice-wall.pngbin0 -> 235 bytes
-rw-r--r--assets/blocks/environment/ice.pngbin0 -> 184 bytes
-rw-r--r--assets/blocks/environment/magmarock.pngbin0 -> 262 bytes
-rw-r--r--assets/blocks/environment/metal-floor-2.pngbin0 -> 131 bytes
-rw-r--r--assets/blocks/environment/metal-floor-3.pngbin0 -> 150 bytes
-rw-r--r--assets/blocks/environment/metal-floor-4.png (renamed from mindus/assets/blocks/environment/metal-floor-4.png)bin184 -> 184 bytes
-rw-r--r--assets/blocks/environment/metal-floor-5.pngbin0 -> 162 bytes
-rw-r--r--assets/blocks/environment/metal-floor-damaged.pngbin0 -> 216 bytes
-rw-r--r--assets/blocks/environment/metal-floor.pngbin0 -> 175 bytes
-rw-r--r--assets/blocks/environment/molten-slag.pngbin0 -> 1279 bytes
-rw-r--r--assets/blocks/environment/moss.pngbin0 -> 167 bytes
-rw-r--r--assets/blocks/environment/mud.pngbin0 -> 1297 bytes
-rw-r--r--assets/blocks/environment/ore-beryllium.pngbin0 -> 203 bytes
-rw-r--r--assets/blocks/environment/ore-coal.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/environment/ore-copper.pngbin0 -> 293 bytes
-rw-r--r--assets/blocks/environment/ore-crystal-thorium.pngbin0 -> 208 bytes
-rw-r--r--assets/blocks/environment/ore-lead.pngbin0 -> 255 bytes
-rw-r--r--assets/blocks/environment/ore-scrap.pngbin0 -> 290 bytes
-rw-r--r--assets/blocks/environment/ore-thorium.pngbin0 -> 255 bytes
-rw-r--r--assets/blocks/environment/ore-titanium.pngbin0 -> 255 bytes
-rw-r--r--assets/blocks/environment/ore-tungsten.pngbin0 -> 202 bytes
-rw-r--r--assets/blocks/environment/ore-wall-beryllium.pngbin0 -> 196 bytes
-rw-r--r--assets/blocks/environment/ore-wall-thorium.pngbin0 -> 211 bytes
-rw-r--r--assets/blocks/environment/ore-wall-tungsten.pngbin0 -> 219 bytes
-rw-r--r--assets/blocks/environment/pebbles.pngbin0 -> 224 bytes
-rw-r--r--assets/blocks/environment/pine.pngbin0 -> 523 bytes
-rw-r--r--assets/blocks/environment/pooled-cryofluid.pngbin0 -> 1311 bytes
-rw-r--r--assets/blocks/environment/pur-bush.pngbin0 -> 287 bytes
-rw-r--r--assets/blocks/environment/red-diamond-wall.pngbin0 -> 508 bytes
-rw-r--r--assets/blocks/environment/red-ice-boulder.pngbin0 -> 501 bytes
-rw-r--r--assets/blocks/environment/red-ice-wall-large.pngbin0 -> 563 bytes
-rw-r--r--assets/blocks/environment/red-ice-wall.pngbin0 -> 246 bytes
-rw-r--r--assets/blocks/environment/red-ice.pngbin0 -> 200 bytes
-rw-r--r--assets/blocks/environment/red-stone-boulder.pngbin0 -> 419 bytes
-rw-r--r--assets/blocks/environment/red-stone-vent.pngbin0 -> 944 bytes
-rw-r--r--assets/blocks/environment/red-stone-wall-large.pngbin0 -> 598 bytes
-rw-r--r--assets/blocks/environment/red-stone-wall.png (renamed from mindus/assets/blocks/environment/red-stone-wall3.png)bin194 -> 194 bytes
-rw-r--r--assets/blocks/environment/red-stone.pngbin0 -> 181 bytes
-rw-r--r--assets/blocks/environment/redmat.pngbin0 -> 159 bytes
-rw-r--r--assets/blocks/environment/redweed.pngbin0 -> 248 bytes
-rw-r--r--assets/blocks/environment/regolith-wall-large.pngbin0 -> 609 bytes
-rw-r--r--assets/blocks/environment/regolith-wall.pngbin0 -> 228 bytes
-rw-r--r--assets/blocks/environment/regolith.pngbin0 -> 164 bytes
-rw-r--r--assets/blocks/environment/rhyolite-boulder.pngbin0 -> 460 bytes
-rw-r--r--assets/blocks/environment/rhyolite-crater.pngbin0 -> 607 bytes
-rw-r--r--assets/blocks/environment/rhyolite-vent.pngbin0 -> 890 bytes
-rw-r--r--assets/blocks/environment/rhyolite-wall-large.pngbin0 -> 609 bytes
-rw-r--r--assets/blocks/environment/rhyolite-wall.pngbin0 -> 236 bytes
-rw-r--r--assets/blocks/environment/rhyolite.pngbin0 -> 576 bytes
-rw-r--r--assets/blocks/environment/rough-rhyolite.pngbin0 -> 163 bytes
-rw-r--r--assets/blocks/environment/salt-wall-large.png (renamed from mindus/assets/blocks/environment/salt-wall-large.png)bin357 -> 357 bytes
-rw-r--r--assets/blocks/environment/salt-wall.pngbin0 -> 203 bytes
-rw-r--r--assets/blocks/environment/salt.pngbin0 -> 186 bytes
-rw-r--r--assets/blocks/environment/sand-boulder.pngbin0 -> 264 bytes
-rw-r--r--assets/blocks/environment/sand-floor.pngbin0 -> 156 bytes
-rw-r--r--assets/blocks/environment/sand-wall-large.pngbin0 -> 503 bytes
-rw-r--r--assets/blocks/environment/sand-wall.pngbin0 -> 216 bytes
-rw-r--r--assets/blocks/environment/sand-water.pngbin0 -> 314 bytes
-rw-r--r--assets/blocks/environment/shale-boulder.pngbin0 -> 264 bytes
-rw-r--r--assets/blocks/environment/shale-wall-large.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/environment/shale-wall.pngbin0 -> 187 bytes
-rw-r--r--assets/blocks/environment/shale.pngbin0 -> 175 bytes
-rw-r--r--assets/blocks/environment/shallow-water.pngbin0 -> 172 bytes
-rw-r--r--assets/blocks/environment/shrubs-large.pngbin0 -> 366 bytes
-rw-r--r--assets/blocks/environment/shrubs.pngbin0 -> 217 bytes
-rw-r--r--assets/blocks/environment/snow-boulder.pngbin0 -> 398 bytes
-rw-r--r--assets/blocks/environment/snow-pine.pngbin0 -> 518 bytes
-rw-r--r--assets/blocks/environment/snow-wall-large.pngbin0 -> 366 bytes
-rw-r--r--assets/blocks/environment/snow-wall.pngbin0 -> 196 bytes
-rw-r--r--assets/blocks/environment/snow.pngbin0 -> 189 bytes
-rw-r--r--assets/blocks/environment/space.png (renamed from mindus/assets/blocks/environment/space.png)bin96 -> 96 bytes
-rw-r--r--assets/blocks/environment/spawn.pngbin0 -> 236 bytes
-rw-r--r--assets/blocks/environment/spore-cluster.pngbin0 -> 261 bytes
-rw-r--r--assets/blocks/environment/spore-moss.pngbin0 -> 211 bytes
-rw-r--r--assets/blocks/environment/spore-pine.pngbin0 -> 523 bytes
-rw-r--r--assets/blocks/environment/spore-wall-large.pngbin0 -> 359 bytes
-rw-r--r--assets/blocks/environment/spore-wall.pngbin0 -> 168 bytes
-rw-r--r--assets/blocks/environment/stone-wall-large.pngbin0 -> 284 bytes
-rw-r--r--assets/blocks/environment/stone-wall.pngbin0 -> 174 bytes
-rw-r--r--assets/blocks/environment/stone.pngbin0 -> 154 bytes
-rw-r--r--assets/blocks/environment/tainted-water.pngbin0 -> 172 bytes
-rw-r--r--assets/blocks/environment/tar.png (renamed from mindus/assets/blocks/environment/tar.png)bin96 -> 96 bytes
-rw-r--r--assets/blocks/environment/tendrils.pngbin0 -> 232 bytes
-rw-r--r--assets/blocks/environment/vibrant-crystal-cluster.pngbin0 -> 960 bytes
-rw-r--r--assets/blocks/environment/white-tree-dead.pngbin0 -> 4947 bytes
-rw-r--r--assets/blocks/environment/white-tree.png (renamed from mindus/assets/blocks/environment/white-tree.png)bin4220 -> 4231 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-boulder.pngbin0 -> 465 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-plates.png (renamed from mindus/assets/blocks/environment/yellow-stone-plates3.png)bin179 -> 179 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-vent.pngbin0 -> 942 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-wall-large.pngbin0 -> 488 bytes
-rw-r--r--assets/blocks/environment/yellow-stone-wall.png (renamed from mindus/assets/blocks/environment/yellow-stone-wall2.png)bin196 -> 196 bytes
-rw-r--r--assets/blocks/environment/yellow-stone.pngbin0 -> 153 bytes
-rw-r--r--assets/blocks/environment/yellowcoral.pngbin0 -> 432 bytes
-rw-r--r--assets/blocks/liquid/bridge-conduit-arrow.pngbin0 -> 128 bytes
-rw-r--r--assets/blocks/liquid/bridge-conduit-bridge.pngbin0 -> 116 bytes
-rw-r--r--assets/blocks/liquid/bridge-conduit-end.pngbin0 -> 148 bytes
-rw-r--r--assets/blocks/liquid/bridge-conduit.pngbin0 -> 234 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-0-0.pngbin0 -> 185 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-0-1.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-0-1.png)bin303 -> 303 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-0-2.pngbin0 -> 300 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-0-3.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-0-3.png)bin305 -> 305 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-0-h.pngbin0 -> 356 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-0.pngbin0 -> 243 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-1-h.pngbin0 -> 358 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-1-v.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-1.pngbin0 -> 354 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-2.pngbin0 -> 355 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-1-3.pngbin0 -> 356 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-0-h.pngbin0 -> 329 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-0-v.pngbin0 -> 323 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-0.pngbin0 -> 215 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-1-h.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-2-1-h.png)bin329 -> 329 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-1.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-2-1.png)bin327 -> 327 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-2.pngbin0 -> 327 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-3-h.pngbin0 -> 330 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-2-3.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-2-3.png)bin331 -> 331 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-3-0-h.pngbin0 -> 328 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-3-0.pngbin0 -> 212 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-3-1.pngbin0 -> 343 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-3-3.pngbin0 -> 343 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-4-0.pngbin0 -> 202 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-4-1.pngbin0 -> 334 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-4-3.pngbin0 -> 326 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-bottom-0.pngbin0 -> 134 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-bottom-1.pngbin0 -> 177 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-bottom-2.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-bottom-2.png)bin71 -> 71 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-bottom-3.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-bottom-3.png)bin71 -> 71 bytes
-rw-r--r--assets/blocks/liquid/conduits/conduit-bottom-4.png (renamed from mindus/assets/blocks/liquid/conduits/conduit-bottom-4.png)bin71 -> 71 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-0-0.pngbin0 -> 210 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-0-1.pngbin0 -> 367 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-0-2.pngbin0 -> 333 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-0-3.pngbin0 -> 368 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-0-h.pngbin0 -> 409 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-0.pngbin0 -> 272 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-1-h.pngbin0 -> 402 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-1-v.pngbin0 -> 417 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-1.pngbin0 -> 394 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-2.pngbin0 -> 399 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-1-3.pngbin0 -> 409 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-0-h.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-0-v.pngbin0 -> 364 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-0.pngbin0 -> 227 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-1-h.pngbin0 -> 373 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-1.png (renamed from mindus/assets/blocks/liquid/conduits/plated-conduit-2-1.png)bin370 -> 370 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-2.pngbin0 -> 363 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-3-h.pngbin0 -> 373 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-2-3.png (renamed from mindus/assets/blocks/liquid/conduits/plated-conduit-2-3.png)bin371 -> 371 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-3-0-h.pngbin0 -> 342 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-3-0.pngbin0 -> 215 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-3-1.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-3-3.pngbin0 -> 360 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-4-0.png (renamed from mindus/assets/blocks/liquid/conduits/plated-conduit-4-0.png)bin228 -> 228 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-4-1.pngbin0 -> 359 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-4-3.pngbin0 -> 361 bytes
-rw-r--r--assets/blocks/liquid/conduits/plated-conduit-cap.png (renamed from mindus/assets/blocks/liquid/conduits/plated-conduit-cap.png)bin1169 -> 1169 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-0-0.pngbin0 -> 223 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-0-1.png (renamed from mindus/assets/blocks/liquid/conduits/pulse-conduit-0-1.png)bin360 -> 360 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-0-2.pngbin0 -> 333 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-0-3.pngbin0 -> 363 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-0-h.pngbin0 -> 409 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-0.pngbin0 -> 297 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-1-h.pngbin0 -> 402 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-1-v.pngbin0 -> 417 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-1.pngbin0 -> 394 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-2.pngbin0 -> 399 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-1-3.pngbin0 -> 409 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-0-h.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-0-v.pngbin0 -> 364 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-0.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-1-h.pngbin0 -> 373 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-1.png (renamed from mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1.png)bin370 -> 370 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-2.pngbin0 -> 363 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-3-h.pngbin0 -> 373 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-2-3.png (renamed from mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3.png)bin371 -> 371 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-3-0-h.pngbin0 -> 342 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-3-0.pngbin0 -> 263 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-3-1.pngbin0 -> 362 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-3-3.pngbin0 -> 360 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-4-0.pngbin0 -> 235 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-4-1.pngbin0 -> 359 bytes
-rw-r--r--assets/blocks/liquid/conduits/pulse-conduit-4-3.pngbin0 -> 357 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-0-0.pngbin0 -> 218 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-0-1.pngbin0 -> 364 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-0-2.pngbin0 -> 340 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-0-3.pngbin0 -> 363 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.pngbin0 -> 395 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-0.pngbin0 -> 257 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.pngbin0 -> 400 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.pngbin0 -> 404 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-1.pngbin0 -> 385 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-2.pngbin0 -> 396 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-1-3.pngbin0 -> 394 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.pngbin0 -> 346 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.pngbin0 -> 340 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-0.pngbin0 -> 219 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.pngbin0 -> 354 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-1.pngbin0 -> 348 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-2.pngbin0 -> 339 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.pngbin0 -> 350 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-2-3.pngbin0 -> 348 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.pngbin0 -> 306 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-3-0.pngbin0 -> 195 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-3-1.pngbin0 -> 318 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-3-3.pngbin0 -> 316 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-4-0.pngbin0 -> 244 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-4-1.pngbin0 -> 348 bytes
-rw-r--r--assets/blocks/liquid/conduits/reinforced-conduit-4-3.pngbin0 -> 346 bytes
-rw-r--r--assets/blocks/liquid/impulse-pump-liquid.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/liquid/impulse-pump.pngbin0 -> 1007 bytes
-rw-r--r--assets/blocks/liquid/liquid-container-bottom.png (renamed from mindus/assets/blocks/liquid/liquid-container-bottom.png)bin99 -> 99 bytes
-rw-r--r--assets/blocks/liquid/liquid-container.pngbin0 -> 540 bytes
-rw-r--r--assets/blocks/liquid/liquid-junction.pngbin0 -> 216 bytes
-rw-r--r--assets/blocks/liquid/liquid-router-bottom.png (renamed from mindus/assets/blocks/liquid/liquid-router-bottom.png)bin96 -> 96 bytes
-rw-r--r--assets/blocks/liquid/liquid-router.pngbin0 -> 222 bytes
-rw-r--r--assets/blocks/liquid/liquid-source.pngbin0 -> 339 bytes
-rw-r--r--assets/blocks/liquid/liquid-tank-bottom.pngbin0 -> 233 bytes
-rw-r--r--assets/blocks/liquid/liquid-tank.pngbin0 -> 945 bytes
-rw-r--r--assets/blocks/liquid/liquid-void.pngbin0 -> 222 bytes
-rw-r--r--assets/blocks/liquid/mechanical-pump-liquid.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/liquid/mechanical-pump.pngbin0 -> 302 bytes
-rw-r--r--assets/blocks/liquid/phase-conduit-arrow.pngbin0 -> 128 bytes
-rw-r--r--assets/blocks/liquid/phase-conduit-bridge.pngbin0 -> 117 bytes
-rw-r--r--assets/blocks/liquid/phase-conduit-end.pngbin0 -> 105 bytes
-rw-r--r--assets/blocks/liquid/phase-conduit.pngbin0 -> 235 bytes
-rw-r--r--assets/blocks/liquid/reinforced-bridge-conduit-arrow.pngbin0 -> 129 bytes
-rw-r--r--assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.pngbin0 -> 111 bytes
-rw-r--r--assets/blocks/liquid/reinforced-bridge-conduit-bridge.pngbin0 -> 136 bytes
-rw-r--r--assets/blocks/liquid/reinforced-bridge-conduit-dir.pngbin0 -> 141 bytes
-rw-r--r--assets/blocks/liquid/reinforced-bridge-conduit-liquid.pngbin0 -> 129 bytes
-rw-r--r--assets/blocks/liquid/reinforced-bridge-conduit.pngbin0 -> 257 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-container-bottom.png (renamed from mindus/assets/blocks/liquid/reinforced-liquid-container-bottom.png)bin182 -> 182 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-container.pngbin0 -> 659 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-junction.pngbin0 -> 377 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-router-bottom.png (renamed from mindus/assets/blocks/liquid/reinforced-liquid-router-bottom.png)bin137 -> 137 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-router.png (renamed from mindus/assets/blocks/liquid/reinforced-liquid-router.png)bin285 -> 285 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-tank-bottom.pngbin0 -> 324 bytes
-rw-r--r--assets/blocks/liquid/reinforced-liquid-tank.png (renamed from mindus/assets/blocks/liquid/reinforced-liquid-tank.png)bin954 -> 954 bytes
-rw-r--r--assets/blocks/liquid/reinforced-pump-liquid.pngbin0 -> 142 bytes
-rw-r--r--assets/blocks/liquid/reinforced-pump.pngbin0 -> 684 bytes
-rw-r--r--assets/blocks/liquid/rotary-pump-liquid.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/liquid/rotary-pump.pngbin0 -> 700 bytes
-rw-r--r--assets/blocks/logic/canvas.pngbin0 -> 429 bytes
-rw-r--r--assets/blocks/logic/hyper-processor.pngbin0 -> 1212 bytes
-rw-r--r--assets/blocks/logic/large-logic-display.pngbin0 -> 578 bytes
-rw-r--r--assets/blocks/logic/logic-display.pngbin0 -> 481 bytes
-rw-r--r--assets/blocks/logic/logic-processor.pngbin0 -> 800 bytes
-rw-r--r--assets/blocks/logic/memory-bank.pngbin0 -> 502 bytes
-rw-r--r--assets/blocks/logic/memory-cell.pngbin0 -> 220 bytes
-rw-r--r--assets/blocks/logic/message.pngbin0 -> 205 bytes
-rw-r--r--assets/blocks/logic/micro-processor.pngbin0 -> 454 bytes
-rw-r--r--assets/blocks/logic/reinforced-message.pngbin0 -> 205 bytes
-rw-r--r--assets/blocks/logic/switch-on.pngbin0 -> 527 bytes
-rw-r--r--assets/blocks/logic/switch.pngbin0 -> 615 bytes
-rw-r--r--assets/blocks/logic/world-cell.pngbin0 -> 221 bytes
-rw-r--r--assets/blocks/logic/world-message.pngbin0 -> 205 bytes
-rw-r--r--assets/blocks/logic/world-processor.pngbin0 -> 454 bytes
-rw-r--r--assets/blocks/payload/constructor-top.pngbin0 -> 1001 bytes
-rw-r--r--assets/blocks/payload/constructor.pngbin0 -> 876 bytes
-rw-r--r--assets/blocks/payload/deconstructor-top.pngbin0 -> 1389 bytes
-rw-r--r--assets/blocks/payload/deconstructor.pngbin0 -> 1871 bytes
-rw-r--r--assets/blocks/payload/factory-in-3-dark.pngbin0 -> 392 bytes
-rw-r--r--assets/blocks/payload/factory-in-3.pngbin0 -> 427 bytes
-rw-r--r--assets/blocks/payload/factory-in-5-dark.pngbin0 -> 625 bytes
-rw-r--r--assets/blocks/payload/factory-in-5.pngbin0 -> 645 bytes
-rw-r--r--assets/blocks/payload/factory-in-7.png (renamed from mindus/assets/blocks/payload/factory-in-7.png)bin1061 -> 1077 bytes
-rw-r--r--assets/blocks/payload/factory-in-9.png (renamed from mindus/assets/blocks/payload/factory-in-9.png)bin1247 -> 1263 bytes
-rw-r--r--assets/blocks/payload/factory-out-3-dark.pngbin0 -> 393 bytes
-rw-r--r--assets/blocks/payload/factory-out-3.pngbin0 -> 442 bytes
-rw-r--r--assets/blocks/payload/factory-out-5-dark.pngbin0 -> 614 bytes
-rw-r--r--assets/blocks/payload/factory-out-5.pngbin0 -> 749 bytes
-rw-r--r--assets/blocks/payload/factory-out-7.pngbin0 -> 901 bytes
-rw-r--r--assets/blocks/payload/factory-out-9.pngbin0 -> 1143 bytes
-rw-r--r--assets/blocks/payload/factory-top-3.pngbin0 -> 604 bytes
-rw-r--r--assets/blocks/payload/large-constructor-top.pngbin0 -> 1747 bytes
-rw-r--r--assets/blocks/payload/large-constructor.pngbin0 -> 1861 bytes
-rw-r--r--assets/blocks/payload/large-payload-mass-driver.pngbin0 -> 2509 bytes
-rw-r--r--assets/blocks/payload/payload-conveyor.pngbin0 -> 390 bytes
-rw-r--r--assets/blocks/payload/payload-loader-top.pngbin0 -> 626 bytes
-rw-r--r--assets/blocks/payload/payload-loader.pngbin0 -> 800 bytes
-rw-r--r--assets/blocks/payload/payload-mass-driver.pngbin0 -> 1219 bytes
-rw-r--r--assets/blocks/payload/payload-router-over.png (renamed from mindus/assets/blocks/payload/payload-router-over.png)bin440 -> 440 bytes
-rw-r--r--assets/blocks/payload/payload-router.pngbin0 -> 307 bytes
-rw-r--r--assets/blocks/payload/payload-source-top.pngbin0 -> 675 bytes
-rw-r--r--assets/blocks/payload/payload-source.png (renamed from mindus/assets/blocks/payload/payload-source.png)bin6987 -> 7026 bytes
-rw-r--r--assets/blocks/payload/payload-unloader-top.pngbin0 -> 626 bytes
-rw-r--r--assets/blocks/payload/payload-unloader.pngbin0 -> 800 bytes
-rw-r--r--assets/blocks/payload/payload-void-top.pngbin0 -> 685 bytes
-rw-r--r--assets/blocks/payload/payload-void.pngbin0 -> 1033 bytes
-rw-r--r--assets/blocks/payload/reinforced-payload-conveyor.pngbin0 -> 442 bytes
-rw-r--r--assets/blocks/payload/reinforced-payload-router-over.png (renamed from mindus/assets/blocks/payload/reinforced-payload-router-over.png)bin573 -> 573 bytes
-rw-r--r--assets/blocks/payload/reinforced-payload-router.pngbin0 -> 300 bytes
-rw-r--r--assets/blocks/payload/small-deconstructor-top.pngbin0 -> 735 bytes
-rw-r--r--assets/blocks/payload/small-deconstructor.pngbin0 -> 897 bytes
-rw-r--r--assets/blocks/power/battery-large.pngbin0 -> 868 bytes
-rw-r--r--assets/blocks/power/battery.pngbin0 -> 2540 bytes
-rw-r--r--assets/blocks/power/beam-link.pngbin0 -> 1234 bytes
-rw-r--r--assets/blocks/power/beam-node.pngbin0 -> 450 bytes
-rw-r--r--assets/blocks/power/beam-tower.pngbin0 -> 1125 bytes
-rw-r--r--assets/blocks/power/chemical-combustion-chamber.pngbin0 -> 1136 bytes
-rw-r--r--assets/blocks/power/combustion-generator.pngbin0 -> 250 bytes
-rw-r--r--assets/blocks/power/differential-generator-liquid.pngbin0 -> 771 bytes
-rw-r--r--assets/blocks/power/differential-generator.pngbin0 -> 982 bytes
-rw-r--r--assets/blocks/power/diode-arrow.pngbin0 -> 151 bytes
-rw-r--r--assets/blocks/power/diode.pngbin0 -> 222 bytes
-rw-r--r--assets/blocks/power/flux-reactor-bottom.pngbin0 -> 241 bytes
-rw-r--r--assets/blocks/power/flux-reactor-mid.pngbin0 -> 334 bytes
-rw-r--r--assets/blocks/power/flux-reactor.pngbin0 -> 2141 bytes
-rw-r--r--assets/blocks/power/illuminator.pngbin0 -> 262 bytes
-rw-r--r--assets/blocks/power/impact-reactor-bottom.pngbin0 -> 240 bytes
-rw-r--r--assets/blocks/power/impact-reactor.pngbin0 -> 1380 bytes
-rw-r--r--assets/blocks/power/neoplasia-reactor-bottom.pngbin0 -> 398 bytes
-rw-r--r--assets/blocks/power/neoplasia-reactor-center.pngbin0 -> 335 bytes
-rw-r--r--assets/blocks/power/neoplasia-reactor-top1.png (renamed from mindus/assets/blocks/power/neoplasia-reactor-top1.png)bin295 -> 295 bytes
-rw-r--r--assets/blocks/power/neoplasia-reactor-top2.png (renamed from mindus/assets/blocks/power/neoplasia-reactor-top2.png)bin297 -> 297 bytes
-rw-r--r--assets/blocks/power/neoplasia-reactor.pngbin0 -> 2384 bytes
-rw-r--r--assets/blocks/power/power-node-large.pngbin0 -> 341 bytes
-rw-r--r--assets/blocks/power/power-node.pngbin0 -> 236 bytes
-rw-r--r--assets/blocks/power/power-source.pngbin0 -> 416 bytes
-rw-r--r--assets/blocks/power/power-void.pngbin0 -> 410 bytes
-rw-r--r--assets/blocks/power/pyrolysis-generator.pngbin0 -> 1294 bytes
-rw-r--r--assets/blocks/power/rtg-generator.pngbin0 -> 772 bytes
-rw-r--r--assets/blocks/power/solar-panel-large.pngbin0 -> 860 bytes
-rw-r--r--assets/blocks/power/solar-panel.pngbin0 -> 585 bytes
-rw-r--r--assets/blocks/power/steam-generator-liquid.pngbin0 -> 619 bytes
-rw-r--r--assets/blocks/power/steam-generator.pngbin0 -> 690 bytes
-rw-r--r--assets/blocks/power/surge-tower.png (renamed from mindus/assets/blocks/power/surge-tower.png)bin405 -> 405 bytes
-rw-r--r--assets/blocks/power/thermal-generator.pngbin0 -> 638 bytes
-rw-r--r--assets/blocks/power/thorium-reactor.pngbin0 -> 878 bytes
-rw-r--r--assets/blocks/power/turbine-condenser.pngbin0 -> 1297 bytes
-rw-r--r--assets/blocks/production/atmospheric-concentrator-bottom.pngbin0 -> 334 bytes
-rw-r--r--assets/blocks/production/atmospheric-concentrator.pngbin0 -> 970 bytes
-rw-r--r--assets/blocks/production/blast-mixer.pngbin0 -> 678 bytes
-rw-r--r--assets/blocks/production/carbide-crucible-bottom.pngbin0 -> 233 bytes
-rw-r--r--assets/blocks/production/carbide-crucible.pngbin0 -> 1222 bytes
-rw-r--r--assets/blocks/production/coal-centrifuge.pngbin0 -> 519 bytes
-rw-r--r--assets/blocks/production/cryofluid-mixer-bottom.png (renamed from mindus/assets/blocks/production/cryofluid-mixer-bottom.png)bin99 -> 99 bytes
-rw-r--r--assets/blocks/production/cryofluid-mixer.pngbin0 -> 696 bytes
-rw-r--r--assets/blocks/production/cultivator.pngbin0 -> 655 bytes
-rw-r--r--assets/blocks/production/cyanogen-synthesizer-bottom.pngbin0 -> 334 bytes
-rw-r--r--assets/blocks/production/cyanogen-synthesizer.pngbin0 -> 1100 bytes
-rw-r--r--assets/blocks/production/disassembler-bottom.pngbin0 -> 233 bytes
-rw-r--r--assets/blocks/production/disassembler.pngbin0 -> 1118 bytes
-rw-r--r--assets/blocks/production/electric-heater-top1.pngbin0 -> 370 bytes
-rw-r--r--assets/blocks/production/electric-heater-top2.pngbin0 -> 370 bytes
-rw-r--r--assets/blocks/production/electric-heater.pngbin0 -> 671 bytes
-rw-r--r--assets/blocks/production/electrolyzer-bottom.pngbin0 -> 334 bytes
-rw-r--r--assets/blocks/production/electrolyzer-hydrogen-output1.png (renamed from mindus/assets/blocks/production/electrolyzer-hydrogen-output1.png)bin446 -> 446 bytes
-rw-r--r--assets/blocks/production/electrolyzer-hydrogen-output2.png (renamed from mindus/assets/blocks/production/electrolyzer-hydrogen-output2.png)bin447 -> 447 bytes
-rw-r--r--assets/blocks/production/electrolyzer-ozone-output1.png (renamed from mindus/assets/blocks/production/electrolyzer-ozone-output1.png)bin446 -> 446 bytes
-rw-r--r--assets/blocks/production/electrolyzer-ozone-output2.png (renamed from mindus/assets/blocks/production/electrolyzer-ozone-output2.png)bin447 -> 447 bytes
-rw-r--r--assets/blocks/production/electrolyzer.pngbin0 -> 1050 bytes
-rw-r--r--assets/blocks/production/graphite-press.png (renamed from mindus/assets/blocks/production/graphite-press.png)bin637 -> 653 bytes
-rw-r--r--assets/blocks/production/heat-redirector-top1.png (renamed from mindus/assets/blocks/production/heat-redirector-top1.png)bin459 -> 475 bytes
-rw-r--r--assets/blocks/production/heat-redirector-top2.pngbin0 -> 474 bytes
-rw-r--r--assets/blocks/production/heat-redirector.pngbin0 -> 985 bytes
-rw-r--r--assets/blocks/production/heat-router-top1.pngbin0 -> 307 bytes
-rw-r--r--assets/blocks/production/heat-router-top2.png (renamed from mindus/assets/blocks/production/heat-router-top2.png)bin317 -> 317 bytes
-rw-r--r--assets/blocks/production/heat-router.pngbin0 -> 959 bytes
-rw-r--r--assets/blocks/production/heat-source-top1.png (renamed from mindus/assets/blocks/production/heat-source-top1.png)bin130 -> 130 bytes
-rw-r--r--assets/blocks/production/heat-source-top2.png (renamed from mindus/assets/blocks/production/heat-source-top2.png)bin130 -> 130 bytes
-rw-r--r--assets/blocks/production/heat-source.pngbin0 -> 410 bytes
-rw-r--r--assets/blocks/production/incinerator.pngbin0 -> 213 bytes
-rw-r--r--assets/blocks/production/kiln.pngbin0 -> 652 bytes
-rw-r--r--assets/blocks/production/melter-bottom.png (renamed from mindus/assets/blocks/production/melter-bottom.png)bin96 -> 96 bytes
-rw-r--r--assets/blocks/production/melter.pngbin0 -> 303 bytes
-rw-r--r--assets/blocks/production/multi-press.pngbin0 -> 843 bytes
-rw-r--r--assets/blocks/production/oxidation-chamber-liquid.png (renamed from mindus/assets/blocks/production/oxidation-chamber-liquid.png)bin430 -> 430 bytes
-rw-r--r--assets/blocks/production/oxidation-chamber-top1.pngbin0 -> 455 bytes
-rw-r--r--assets/blocks/production/oxidation-chamber-top2.pngbin0 -> 455 bytes
-rw-r--r--assets/blocks/production/oxidation-chamber.pngbin0 -> 1214 bytes
-rw-r--r--assets/blocks/production/phase-heater-top1.pngbin0 -> 392 bytes
-rw-r--r--assets/blocks/production/phase-heater-top2.pngbin0 -> 392 bytes
-rw-r--r--assets/blocks/production/phase-heater.pngbin0 -> 673 bytes
-rw-r--r--assets/blocks/production/phase-synthesizer.pngbin0 -> 1200 bytes
-rw-r--r--assets/blocks/production/phase-weaver.pngbin0 -> 665 bytes
-rw-r--r--assets/blocks/production/plastanium-compressor.pngbin0 -> 576 bytes
-rw-r--r--assets/blocks/production/pulverizer.pngbin0 -> 234 bytes
-rw-r--r--assets/blocks/production/pyratite-mixer.pngbin0 -> 529 bytes
-rw-r--r--assets/blocks/production/separator.pngbin0 -> 586 bytes
-rw-r--r--assets/blocks/production/silicon-arc-furnace.pngbin0 -> 1221 bytes
-rw-r--r--assets/blocks/production/silicon-crucible.pngbin0 -> 1032 bytes
-rw-r--r--assets/blocks/production/silicon-smelter.pngbin0 -> 642 bytes
-rw-r--r--assets/blocks/production/slag-heater-bottom.pngbin0 -> 233 bytes
-rw-r--r--assets/blocks/production/slag-heater-top1.png (renamed from mindus/assets/blocks/production/slag-heater-top1.png)bin305 -> 305 bytes
-rw-r--r--assets/blocks/production/slag-heater-top2.png (renamed from mindus/assets/blocks/production/slag-heater-top2.png)bin305 -> 305 bytes
-rw-r--r--assets/blocks/production/slag-heater.pngbin0 -> 1067 bytes
-rw-r--r--assets/blocks/production/slag-incinerator-liquid.pngbin0 -> 132 bytes
-rw-r--r--assets/blocks/production/slag-incinerator.pngbin0 -> 370 bytes
-rw-r--r--assets/blocks/production/spore-press.pngbin0 -> 666 bytes
-rw-r--r--assets/blocks/production/surge-crucible-bottom.pngbin0 -> 334 bytes
-rw-r--r--assets/blocks/production/surge-crucible-liquid.pngbin0 -> 178 bytes
-rw-r--r--assets/blocks/production/surge-crucible.pngbin0 -> 1173 bytes
-rw-r--r--assets/blocks/production/surge-smelter.pngbin0 -> 1051 bytes
-rw-r--r--assets/blocks/storage/container-team.png (renamed from mindus/assets/blocks/storage/container-team.png)bin438 -> 438 bytes
-rw-r--r--assets/blocks/storage/container.png (renamed from mindus/assets/blocks/storage/container.png)bin486 -> 486 bytes
-rw-r--r--assets/blocks/storage/core-acropolis-team.pngbin0 -> 2012 bytes
-rw-r--r--assets/blocks/storage/core-acropolis.pngbin0 -> 3026 bytes
-rw-r--r--assets/blocks/storage/core-bastion-team.pngbin0 -> 1048 bytes
-rw-r--r--assets/blocks/storage/core-bastion.pngbin0 -> 1624 bytes
-rw-r--r--assets/blocks/storage/core-citadel-team.pngbin0 -> 1556 bytes
-rw-r--r--assets/blocks/storage/core-citadel.pngbin0 -> 2273 bytes
-rw-r--r--assets/blocks/storage/core-foundation-team.pngbin0 -> 996 bytes
-rw-r--r--assets/blocks/storage/core-foundation.pngbin0 -> 1170 bytes
-rw-r--r--assets/blocks/storage/core-nucleus-team.pngbin0 -> 1197 bytes
-rw-r--r--assets/blocks/storage/core-nucleus.png (renamed from mindus/assets/blocks/storage/core-nucleus.png)bin1520 -> 1520 bytes
-rw-r--r--assets/blocks/storage/core-shard-team.pngbin0 -> 654 bytes
-rw-r--r--assets/blocks/storage/core-shard.pngbin0 -> 771 bytes
-rw-r--r--assets/blocks/storage/reinforced-container-team.pngbin0 -> 428 bytes
-rw-r--r--assets/blocks/storage/reinforced-container.pngbin0 -> 601 bytes
-rw-r--r--assets/blocks/storage/reinforced-vault-team.png (renamed from mindus/assets/blocks/storage/reinforced-vault-team.png)bin511 -> 511 bytes
-rw-r--r--assets/blocks/storage/reinforced-vault.pngbin0 -> 902 bytes
-rw-r--r--assets/blocks/storage/unloader-center.pngbin0 -> 267 bytes
-rw-r--r--assets/blocks/storage/unloader.pngbin0 -> 253 bytes
-rw-r--r--assets/blocks/storage/vault-team.pngbin0 -> 526 bytes
-rw-r--r--assets/blocks/storage/vault.png (renamed from mindus/assets/blocks/storage/vault.png)bin771 -> 771 bytes
-rw-r--r--assets/blocks/turrets/afflict.pngbin0 -> 1913 bytes
-rw-r--r--assets/blocks/turrets/arc.pngbin0 -> 415 bytes
-rw-r--r--assets/blocks/turrets/breach.pngbin0 -> 1248 bytes
-rw-r--r--assets/blocks/turrets/cyclone.pngbin0 -> 1020 bytes
-rw-r--r--assets/blocks/turrets/diffuse.pngbin0 -> 1390 bytes
-rw-r--r--assets/blocks/turrets/disperse.pngbin0 -> 1628 bytes
-rw-r--r--assets/blocks/turrets/duo.pngbin0 -> 419 bytes
-rw-r--r--assets/blocks/turrets/foreshadow.pngbin0 -> 1506 bytes
-rw-r--r--assets/blocks/turrets/fuse.pngbin0 -> 1302 bytes
-rw-r--r--assets/blocks/turrets/hail.pngbin0 -> 432 bytes
-rw-r--r--assets/blocks/turrets/lancer.pngbin0 -> 739 bytes
-rw-r--r--assets/blocks/turrets/lustre.pngbin0 -> 1737 bytes
-rw-r--r--assets/blocks/turrets/malign.pngbin0 -> 2473 bytes
-rw-r--r--assets/blocks/turrets/meltdown.pngbin0 -> 1567 bytes
-rw-r--r--assets/blocks/turrets/parallax.pngbin0 -> 717 bytes
-rw-r--r--assets/blocks/turrets/ripple.pngbin0 -> 1051 bytes
-rw-r--r--assets/blocks/turrets/salvo.pngbin0 -> 795 bytes
-rw-r--r--assets/blocks/turrets/scathe.pngbin0 -> 1636 bytes
-rw-r--r--assets/blocks/turrets/scatter.pngbin0 -> 697 bytes
-rw-r--r--assets/blocks/turrets/scorch.pngbin0 -> 411 bytes
-rw-r--r--assets/blocks/turrets/segment.pngbin0 -> 700 bytes
-rw-r--r--assets/blocks/turrets/smite.pngbin0 -> 2350 bytes
-rw-r--r--assets/blocks/turrets/spectre.pngbin0 -> 1511 bytes
-rw-r--r--assets/blocks/turrets/sublimate.pngbin0 -> 1325 bytes
-rw-r--r--assets/blocks/turrets/swarmer.pngbin0 -> 727 bytes
-rw-r--r--assets/blocks/turrets/titan.pngbin0 -> 1557 bytes
-rw-r--r--assets/blocks/turrets/tsunami.pngbin0 -> 1144 bytes
-rw-r--r--assets/blocks/turrets/wave.pngbin0 -> 793 bytes
-rw-r--r--assets/blocks/units/additive-reconstructor-top.pngbin0 -> 807 bytes
-rw-r--r--assets/blocks/units/additive-reconstructor.pngbin0 -> 749 bytes
-rw-r--r--assets/blocks/units/air-factory.pngbin0 -> 766 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module-side1.pngbin0 -> 969 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module-side2.pngbin0 -> 1091 bytes
-rw-r--r--assets/blocks/units/basic-assembler-module.pngbin0 -> 1515 bytes
-rw-r--r--assets/blocks/units/exponential-reconstructor-top.pngbin0 -> 1745 bytes
-rw-r--r--assets/blocks/units/exponential-reconstructor.pngbin0 -> 2353 bytes
-rw-r--r--assets/blocks/units/ground-factory.pngbin0 -> 766 bytes
-rw-r--r--assets/blocks/units/mech-assembler-side1.pngbin0 -> 764 bytes
-rw-r--r--assets/blocks/units/mech-assembler-side2.pngbin0 -> 767 bytes
-rw-r--r--assets/blocks/units/mech-assembler-top.pngbin0 -> 1607 bytes
-rw-r--r--assets/blocks/units/mech-assembler.pngbin0 -> 1443 bytes
-rw-r--r--assets/blocks/units/mech-fabricator-top.pngbin0 -> 848 bytes
-rw-r--r--assets/blocks/units/mech-fabricator.pngbin0 -> 872 bytes
-rw-r--r--assets/blocks/units/mech-refabricator-top.pngbin0 -> 968 bytes
-rw-r--r--assets/blocks/units/mech-refabricator.pngbin0 -> 729 bytes
-rw-r--r--assets/blocks/units/multiplicative-reconstructor-top.pngbin0 -> 1240 bytes
-rw-r--r--assets/blocks/units/multiplicative-reconstructor.pngbin0 -> 1432 bytes
-rw-r--r--assets/blocks/units/naval-factory.pngbin0 -> 762 bytes
-rw-r--r--assets/blocks/units/prime-refabricator-top.pngbin0 -> 1723 bytes
-rw-r--r--assets/blocks/units/prime-refabricator.pngbin0 -> 1464 bytes
-rw-r--r--assets/blocks/units/repair-point.pngbin0 -> 398 bytes
-rw-r--r--assets/blocks/units/repair-turret.pngbin0 -> 761 bytes
-rw-r--r--assets/blocks/units/ship-assembler-side1.pngbin0 -> 770 bytes
-rw-r--r--assets/blocks/units/ship-assembler-side2.pngbin0 -> 772 bytes
-rw-r--r--assets/blocks/units/ship-assembler-top.pngbin0 -> 1608 bytes
-rw-r--r--assets/blocks/units/ship-assembler.pngbin0 -> 1443 bytes
-rw-r--r--assets/blocks/units/ship-fabricator-top.pngbin0 -> 849 bytes
-rw-r--r--assets/blocks/units/ship-fabricator.pngbin0 -> 872 bytes
-rw-r--r--assets/blocks/units/ship-refabricator-top.pngbin0 -> 967 bytes
-rw-r--r--assets/blocks/units/ship-refabricator.pngbin0 -> 729 bytes
-rw-r--r--assets/blocks/units/tank-assembler-side1.pngbin0 -> 765 bytes
-rw-r--r--assets/blocks/units/tank-assembler-side2.pngbin0 -> 765 bytes
-rw-r--r--assets/blocks/units/tank-assembler-top.pngbin0 -> 1607 bytes
-rw-r--r--assets/blocks/units/tank-assembler.pngbin0 -> 1443 bytes
-rw-r--r--assets/blocks/units/tank-fabricator-top.pngbin0 -> 848 bytes
-rw-r--r--assets/blocks/units/tank-fabricator.pngbin0 -> 872 bytes
-rw-r--r--assets/blocks/units/tank-refabricator-top.pngbin0 -> 968 bytes
-rw-r--r--assets/blocks/units/tank-refabricator.pngbin0 -> 729 bytes
-rw-r--r--assets/blocks/units/tetrative-reconstructor-top.pngbin0 -> 2221 bytes
-rw-r--r--assets/blocks/units/tetrative-reconstructor.pngbin0 -> 4025 bytes
-rw-r--r--assets/blocks/units/unit-cargo-loader.pngbin0 -> 1055 bytes
-rw-r--r--assets/blocks/units/unit-repair-tower.pngbin0 -> 761 bytes
-rw-r--r--assets/blocks/walls/beryllium-wall-large.pngbin0 -> 516 bytes
-rw-r--r--assets/blocks/walls/beryllium-wall.pngbin0 -> 184 bytes
-rw-r--r--assets/blocks/walls/blast-door-open.pngbin0 -> 537 bytes
-rw-r--r--assets/blocks/walls/blast-door.pngbin0 -> 639 bytes
-rw-r--r--assets/blocks/walls/carbide-wall-large.pngbin0 -> 533 bytes
-rw-r--r--assets/blocks/walls/carbide-wall.pngbin0 -> 194 bytes
-rw-r--r--assets/blocks/walls/copper-wall-large.png (renamed from mindus/assets/blocks/walls/copper-wall-large.png)bin448 -> 448 bytes
-rw-r--r--assets/blocks/walls/copper-wall.pngbin0 -> 163 bytes
-rw-r--r--assets/blocks/walls/door-large-open.pngbin0 -> 512 bytes
-rw-r--r--assets/blocks/walls/door-large.pngbin0 -> 453 bytes
-rw-r--r--assets/blocks/walls/door-open.pngbin0 -> 264 bytes
-rw-r--r--assets/blocks/walls/door.pngbin0 -> 224 bytes
-rw-r--r--assets/blocks/walls/phase-wall-large.pngbin0 -> 411 bytes
-rw-r--r--assets/blocks/walls/phase-wall.pngbin0 -> 176 bytes
-rw-r--r--assets/blocks/walls/plastanium-wall-large.pngbin0 -> 411 bytes
-rw-r--r--assets/blocks/walls/plastanium-wall.pngbin0 -> 176 bytes
-rw-r--r--assets/blocks/walls/reinforced-surge-wall-large.pngbin0 -> 533 bytes
-rw-r--r--assets/blocks/walls/reinforced-surge-wall.pngbin0 -> 194 bytes
-rw-r--r--assets/blocks/walls/scrap-wall-gigantic.png (renamed from mindus/assets/blocks/walls/scrap-wall-gigantic.png)bin672 -> 672 bytes
-rw-r--r--assets/blocks/walls/scrap-wall-huge.pngbin0 -> 550 bytes
-rw-r--r--assets/blocks/walls/scrap-wall-large.pngbin0 -> 381 bytes
-rw-r--r--assets/blocks/walls/scrap-wall.pngbin0 -> 213 bytes
-rw-r--r--assets/blocks/walls/shielded-wall.png (renamed from mindus/assets/blocks/walls/shielded-wall.png)bin588 -> 588 bytes
-rw-r--r--assets/blocks/walls/surge-wall-large.pngbin0 -> 554 bytes
-rw-r--r--assets/blocks/walls/surge-wall.pngbin0 -> 202 bytes
-rw-r--r--assets/blocks/walls/thorium-wall-large.png (renamed from mindus/assets/blocks/walls/thorium-wall-large.png)bin535 -> 535 bytes
-rw-r--r--assets/blocks/walls/thorium-wall.pngbin0 -> 202 bytes
-rw-r--r--assets/blocks/walls/thruster-top.pngbin0 -> 525 bytes
-rw-r--r--assets/blocks/walls/thruster.png (renamed from mindus/assets/blocks/walls/thruster.png)bin531 -> 531 bytes
-rw-r--r--assets/blocks/walls/titanium-wall-large.png (renamed from mindus/assets/blocks/walls/titanium-wall-large.png)bin448 -> 448 bytes
-rw-r--r--assets/blocks/walls/titanium-wall.pngbin0 -> 163 bytes
-rw-r--r--assets/blocks/walls/tungsten-wall-large.pngbin0 -> 516 bytes
-rw-r--r--assets/blocks/walls/tungsten-wall.pngbin0 -> 184 bytes
-rw-r--r--build.rs115
-rw-r--r--items.py (renamed from mindus/items.py)0
-rw-r--r--lemu/.gitignore1
-rw-r--r--lemu/Cargo.toml36
-rw-r--r--lemu/LICENSE21
-rw-r--r--lemu/README.md11
-rw-r--r--lemu/rust-toolchain.toml2
-rw-r--r--lemu/rustfmt.toml1
-rw-r--r--lemu/speed.mlog7
-rw-r--r--lemu/src/celliterate.mlog3
-rw-r--r--lemu/src/code.rs62
-rw-r--r--lemu/src/debug/info.rs58
-rw-r--r--lemu/src/debug/mod.rs24
-rw-r--r--lemu/src/debug/printable.rs7
-rw-r--r--lemu/src/executor/builder.rs159
-rw-r--r--lemu/src/executor/mod.rs320
-rw-r--r--lemu/src/fib.mlog15
-rw-r--r--lemu/src/hello.mlog2
-rw-r--r--lemu/src/instructions/cop.rs40
-rw-r--r--lemu/src/instructions/draw.rs601
-rw-r--r--lemu/src/instructions/io.rs90
-rw-r--r--lemu/src/instructions/mod.rs500
-rw-r--r--lemu/src/instructions/mop.rs79
-rw-r--r--lemu/src/instructions/mop2.rs140
-rw-r--r--lemu/src/lexer.rs213
-rw-r--r--lemu/src/lib.rs185
-rw-r--r--lemu/src/main.rs34
-rw-r--r--lemu/src/memory.rs185
-rw-r--r--lemu/src/numbers.mlog4
-rw-r--r--lemu/src/parser/error.rs442
-rw-r--r--lemu/src/parser/mod.rs856
-rw-r--r--lemu/src/primes.mlog21
-rw-r--r--lemu/yes.mlog4
-rw-r--r--mindus/Cargo.toml63
-rw-r--r--mindus/README.md18
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-0.pngbin114 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-1.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-10.pngbin110 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-11.pngbin108 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-12.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-13.pngbin71 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-14.pngbin89 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-15.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-16.pngbin125 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-17.pngbin124 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-18.pngbin96 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-19.pngbin96 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-2.pngbin114 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-20.pngbin98 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-21.pngbin100 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-22.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-23.pngbin108 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-24.pngbin114 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-25.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-26.pngbin113 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-27.pngbin123 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-28.pngbin107 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-29.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-3.pngbin128 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-30.pngbin99 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-31.pngbin98 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-32.pngbin103 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-33.pngbin101 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-34.pngbin99 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-35.pngbin107 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-36.pngbin122 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-37.pngbin93 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-38.pngbin122 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-39.pngbin136 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-4.pngbin124 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-40.pngbin106 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-41.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-42.pngbin99 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-43.pngbin101 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-44.pngbin102 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-45.pngbin101 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-46.pngbin109 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-5.pngbin124 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-6.pngbin95 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-7.pngbin95 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-8.pngbin100 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-floor-9.pngbin99 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-0.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-1.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-10.pngbin166 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-11.pngbin145 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-12.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-13.pngbin83 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-14.pngbin89 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-15.pngbin97 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-16.pngbin135 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-17.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-18.pngbin97 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-19.pngbin126 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-2.pngbin121 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-20.pngbin129 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-21.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-22.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-23.pngbin159 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-24.pngbin121 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-25.pngbin90 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-26.pngbin169 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-27.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-28.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-29.pngbin143 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-3.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-30.pngbin129 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-31.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-32.pngbin135 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-33.pngbin137 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-34.pngbin115 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-35.pngbin145 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-36.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-37.pngbin98 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-38.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-39.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-4.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-40.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-41.pngbin142 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-42.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-43.pngbin131 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-44.pngbin137 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-45.pngbin137 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-46.pngbin159 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-5.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-6.pngbin125 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-7.pngbin96 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-8.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/colored-wall-9.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-0.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-1.pngbin147 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-10.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-11.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-12.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-13.pngbin162 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-14.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-15.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-16.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-17.pngbin236 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-18.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-19.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-2.pngbin242 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-20.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-21.pngbin153 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-22.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-23.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-24.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-25.pngbin154 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-26.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-27.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-28.pngbin167 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-29.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-3.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-30.pngbin166 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-31.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-32.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-33.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-34.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-35.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-36.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-37.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-38.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-39.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-4.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-40.pngbin202 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-41.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-42.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-43.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-44.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-45.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-46.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-5.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-6.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-7.pngbin170 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-8.pngbin152 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-1-9.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-0.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-1.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-10.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-11.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-12.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-13.pngbin213 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-14.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-15.pngbin147 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-16.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-17.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-18.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-19.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-2.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-20.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-21.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-22.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-23.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-24.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-25.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-26.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-27.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-28.pngbin171 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-29.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-3.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-30.pngbin171 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-31.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-32.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-33.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-34.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-35.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-36.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-37.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-38.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-39.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-4.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-40.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-41.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-42.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-43.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-44.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-45.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-46.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-5.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-6.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-7.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-8.pngbin171 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-10-9.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-0.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-1.pngbin150 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-10.pngbin266 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-11.pngbin268 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-12.pngbin122 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-13.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-14.pngbin170 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-15.pngbin171 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-16.pngbin251 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-17.pngbin230 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-18.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-19.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-2.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-20.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-21.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-22.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-23.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-24.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-25.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-26.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-27.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-28.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-29.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-3.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-30.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-31.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-32.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-33.pngbin170 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-34.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-35.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-36.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-37.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-38.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-39.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-4.pngbin229 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-40.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-41.pngbin234 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-42.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-43.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-44.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-45.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-46.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-5.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-6.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-7.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-8.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-11-9.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-0.pngbin613 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-1.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-10.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-11.pngbin352 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-12.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-13.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-14.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-15.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-16.pngbin430 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-17.pngbin452 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-18.pngbin311 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-19.pngbin314 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-2.pngbin703 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-20.pngbin322 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-21.pngbin350 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-22.pngbin372 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-23.pngbin343 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-24.pngbin696 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-25.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-26.pngbin721 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-27.pngbin1177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-28.pngbin288 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-29.pngbin344 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-3.pngbin972 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-30.pngbin347 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-31.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-32.pngbin309 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-33.pngbin280 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-34.pngbin346 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-35.pngbin338 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-36.pngbin1130 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-37.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-38.pngbin972 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-39.pngbin537 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-4.pngbin400 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-40.pngbin290 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-41.pngbin356 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-42.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-43.pngbin350 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-44.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-45.pngbin294 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-46.pngbin376 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-5.pngbin433 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-6.pngbin320 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-7.pngbin318 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-8.pngbin330 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-12-9.pngbin356 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-0.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-1.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-10.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-11.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-12.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-13.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-14.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-15.pngbin167 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-16.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-17.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-18.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-19.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-2.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-20.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-21.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-22.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-23.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-24.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-25.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-26.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-27.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-28.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-29.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-3.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-30.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-31.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-32.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-33.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-34.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-35.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-36.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-37.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-38.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-39.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-4.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-40.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-41.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-42.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-43.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-44.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-45.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-46.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-5.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-6.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-7.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-8.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-13-9.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-0.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-1.pngbin158 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-10.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-11.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-12.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-13.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-14.pngbin171 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-15.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-16.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-17.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-18.pngbin159 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-19.pngbin170 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-2.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-20.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-21.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-22.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-23.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-24.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-25.pngbin159 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-26.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-27.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-28.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-29.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-3.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-30.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-31.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-32.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-33.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-34.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-35.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-36.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-37.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-38.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-39.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-4.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-40.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-41.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-42.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-43.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-44.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-45.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-46.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-5.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-6.pngbin158 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-7.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-8.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-2-9.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-0.pngbin262 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-1.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-10.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-11.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-12.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-13.pngbin162 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-14.pngbin232 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-15.pngbin252 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-16.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-17.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-18.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-19.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-2.pngbin252 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-20.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-21.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-22.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-23.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-24.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-25.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-26.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-27.pngbin284 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-28.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-29.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-3.pngbin288 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-30.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-31.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-32.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-33.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-34.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-35.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-36.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-37.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-38.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-39.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-4.pngbin262 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-40.pngbin249 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-41.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-42.pngbin250 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-43.pngbin202 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-44.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-45.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-46.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-5.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-6.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-7.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-8.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-3-9.pngbin242 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-0.pngbin265 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-1.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-10.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-11.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-12.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-13.pngbin162 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-14.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-15.pngbin252 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-16.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-17.pngbin259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-18.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-19.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-2.pngbin252 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-20.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-21.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-22.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-23.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-24.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-25.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-26.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-27.pngbin284 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-28.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-29.pngbin248 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-3.pngbin292 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-30.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-31.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-32.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-33.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-34.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-35.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-36.pngbin268 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-37.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-38.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-39.pngbin295 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-4.pngbin267 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-40.pngbin249 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-41.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-42.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-43.pngbin202 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-44.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-45.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-46.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-5.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-6.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-7.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-8.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-4-9.pngbin242 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-0.pngbin269 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-1.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-10.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-11.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-12.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-13.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-14.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-15.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-16.pngbin236 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-17.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-18.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-19.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-2.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-20.pngbin229 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-21.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-22.pngbin245 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-23.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-24.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-25.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-26.pngbin276 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-27.pngbin265 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-28.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-29.pngbin247 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-3.pngbin277 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-30.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-31.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-32.pngbin241 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-33.pngbin247 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-34.pngbin234 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-35.pngbin250 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-36.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-37.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-38.pngbin274 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-39.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-4.pngbin259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-40.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-41.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-42.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-43.pngbin234 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-44.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-45.pngbin248 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-46.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-5.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-6.pngbin259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-7.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-8.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-5-9.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-0.pngbin1134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-1.pngbin1068 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-10.pngbin865 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-11.pngbin1016 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-12.pngbin817 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-13.pngbin749 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-14.pngbin884 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-15.pngbin846 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-16.pngbin1007 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-17.pngbin1024 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-18.pngbin1066 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-19.pngbin1060 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-2.pngbin1194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-20.pngbin985 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-21.pngbin1029 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-22.pngbin960 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-23.pngbin1040 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-24.pngbin1175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-25.pngbin1083 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-26.pngbin1208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-27.pngbin1078 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-28.pngbin952 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-29.pngbin973 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-3.pngbin1062 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-30.pngbin1011 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-31.pngbin1026 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-32.pngbin1117 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-33.pngbin838 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-34.pngbin886 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-35.pngbin1002 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-36.pngbin948 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-37.pngbin706 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-38.pngbin1007 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-39.pngbin1071 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-4.pngbin967 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-40.pngbin955 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-41.pngbin992 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-42.pngbin982 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-43.pngbin1011 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-44.pngbin899 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-45.pngbin1022 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-46.pngbin1013 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-5.pngbin1011 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-6.pngbin1151 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-7.pngbin1057 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-8.pngbin990 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-6-9.pngbin1009 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-0.pngbin215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-1.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-10.pngbin202 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-11.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-12.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-13.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-14.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-15.pngbin130 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-16.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-17.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-18.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-19.pngbin236 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-2.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-20.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-21.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-22.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-23.pngbin248 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-24.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-25.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-26.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-27.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-28.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-29.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-3.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-30.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-31.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-32.pngbin234 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-33.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-34.pngbin245 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-35.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-36.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-37.pngbin130 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-38.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-39.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-4.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-40.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-41.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-42.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-43.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-44.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-45.pngbin228 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-46.pngbin229 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-5.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-6.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-7.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-8.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-7-9.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-0.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-1.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-10.pngbin263 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-11.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-12.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-13.pngbin270 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-14.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-15.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-16.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-17.pngbin250 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-18.pngbin271 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-19.pngbin298 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-2.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-20.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-21.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-22.pngbin314 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-23.pngbin298 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-24.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-25.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-26.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-27.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-28.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-29.pngbin241 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-3.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-30.pngbin252 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-31.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-32.pngbin277 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-33.pngbin286 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-34.pngbin259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-35.pngbin276 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-36.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-37.pngbin152 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-38.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-39.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-4.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-40.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-41.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-42.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-43.pngbin251 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-44.pngbin274 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-45.pngbin276 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-46.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-5.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-6.pngbin284 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-7.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-8.pngbin215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-8-9.pngbin248 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-0.pngbin325 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-1.pngbin169 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-10.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-11.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-12.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-13.pngbin136 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-14.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-15.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-16.pngbin228 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-17.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-18.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-19.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-2.pngbin317 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-20.pngbin228 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-21.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-22.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-23.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-24.pngbin295 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-25.pngbin169 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-26.pngbin289 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-27.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-28.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-29.pngbin245 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-3.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-30.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-31.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-32.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-33.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-34.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-35.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-36.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-37.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-38.pngbin215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-39.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-4.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-40.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-41.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-42.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-43.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-44.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-45.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-46.pngbin215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-5.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-6.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-7.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-8.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-tiles-9-9.pngbin234 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-0.pngbin286 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-1.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-10.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-11.pngbin246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-12.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-13.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-14.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-15.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-16.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-17.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-18.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-19.pngbin279 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-2.pngbin247 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-20.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-21.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-22.pngbin272 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-23.pngbin246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-24.pngbin252 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-25.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-26.pngbin293 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-27.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-28.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-29.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-3.pngbin263 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-30.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-31.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-32.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-33.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-34.pngbin248 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-35.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-36.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-37.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-38.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-39.pngbin270 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-4.pngbin232 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-40.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-41.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-42.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-43.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-44.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-45.pngbin236 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-46.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-5.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-6.pngbin280 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-7.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-8.pngbin215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-1-9.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-0.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-1.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-10.pngbin251 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-11.pngbin277 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-12.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-13.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-14.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-15.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-16.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-17.pngbin266 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-18.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-19.pngbin271 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-2.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-20.pngbin274 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-21.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-22.pngbin299 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-23.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-24.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-25.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-26.pngbin261 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-27.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-28.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-29.pngbin234 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-3.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-30.pngbin259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-31.pngbin276 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-32.pngbin265 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-33.pngbin261 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-34.pngbin261 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-35.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-36.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-37.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-38.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-39.pngbin262 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-4.pngbin265 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-40.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-41.pngbin241 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-42.pngbin250 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-43.pngbin281 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-44.pngbin241 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-45.pngbin246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-46.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-5.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-6.pngbin270 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-7.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-8.pngbin270 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-2-9.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-0.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-1.pngbin154 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-10.pngbin267 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-11.pngbin232 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-12.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-13.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-14.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-15.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-16.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-17.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-18.pngbin157 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-19.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-2.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-20.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-21.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-22.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-23.pngbin249 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-24.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-25.pngbin155 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-26.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-27.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-28.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-29.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-3.pngbin246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-30.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-31.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-32.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-33.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-34.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-35.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-36.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-37.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-38.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-39.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-4.pngbin247 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-40.pngbin247 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-41.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-42.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-43.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-44.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-45.pngbin218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-46.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-5.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-6.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-7.pngbin154 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-8.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/autotiles/metal-wall-3-9.pngbin229 -> 0 bytes
-rw-r--r--mindus/assets/blocks/campaign/advanced-launch-pad.pngbin6246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/campaign/interplanetary-accelerator.pngbin2550 -> 0 bytes
-rw-r--r--mindus/assets/blocks/campaign/landing-pad.pngbin1215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay0.pngbin171 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay1.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay10.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay11.pngbin109 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay12.pngbin170 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay13.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay14.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay15.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay16.pngbin267 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay17.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay18.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay19.pngbin110 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay2.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay20.pngbin165 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay21.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay22.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay23.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay24.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay25.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay26.pngbin112 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay27.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay28.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay29.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay3.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay30.pngbin147 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay31.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay32.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay33.pngbin323 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay34.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay35.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay36.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay37.pngbin107 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay38.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay39.pngbin98 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay4.pngbin115 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay40.pngbin106 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay41.pngbin114 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay42.pngbin107 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay43.pngbin161 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay44.pngbin167 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay45.pngbin109 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay46.pngbin110 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay47.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay48.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay49.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay5.pngbin112 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay50.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay51.pngbin101 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay52.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay53.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay54.pngbin165 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay55.pngbin149 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay56.pngbin99 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay57.pngbin274 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay58.pngbin110 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay59.pngbin107 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay6.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay60.pngbin114 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay61.pngbin100 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay62.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay63.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay7.pngbin112 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay8.pngbin112 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/character-overlay9.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux0.pngbin366 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux1.pngbin322 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux10.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux100.pngbin263 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux101.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux102.pngbin250 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux103.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux104.pngbin321 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux105.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux106.pngbin325 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux107.pngbin263 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux108.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux11.pngbin364 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux12.pngbin360 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux13.pngbin316 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux14.pngbin339 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux15.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux16.pngbin331 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux17.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux18.pngbin323 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux19.pngbin335 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux2.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux20.pngbin334 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux21.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux22.pngbin353 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux23.pngbin321 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux24.pngbin334 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux25.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux26.pngbin362 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux27.pngbin314 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux28.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux29.pngbin307 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux3.pngbin370 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux30.pngbin305 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux31.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux32.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux33.pngbin306 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux34.pngbin338 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux35.pngbin340 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux36.pngbin333 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux37.pngbin337 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux38.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux39.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux4.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux40.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux41.pngbin343 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux42.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux43.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux44.pngbin321 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux45.pngbin309 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux46.pngbin311 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux47.pngbin338 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux48.pngbin363 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux49.pngbin310 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux5.pngbin307 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux50.pngbin333 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux51.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux52.pngbin335 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux53.pngbin315 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux54.pngbin331 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux55.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux56.pngbin322 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux57.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux58.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux59.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux6.pngbin335 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux60.pngbin349 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux61.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux62.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux63.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux64.pngbin316 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux65.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux66.pngbin318 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux67.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux68.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux69.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux7.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux70.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux71.pngbin339 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux72.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux73.pngbin309 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux74.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux75.pngbin318 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux76.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux77.pngbin336 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux78.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux79.pngbin327 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux8.pngbin307 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux80.pngbin251 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux81.pngbin330 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux82.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux83.pngbin327 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux84.pngbin324 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux85.pngbin318 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux86.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux87.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux88.pngbin254 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux89.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux9.pngbin330 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux90.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux91.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux92.pngbin227 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux93.pngbin259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux94.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux95.pngbin322 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux96.pngbin318 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux97.pngbin249 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux98.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay-crux99.pngbin257 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay0.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay1.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay10.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay100.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay101.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay102.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay103.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay104.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay105.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay106.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay107.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay108.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay11.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay12.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay13.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay14.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay15.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay16.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay17.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay18.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay19.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay2.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay20.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay21.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay22.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay23.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay24.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay25.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay26.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay27.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay28.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay29.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay3.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay30.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay31.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay32.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay33.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay34.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay35.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay36.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay37.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay38.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay39.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay4.pngbin169 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay40.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay41.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay42.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay43.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay44.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay45.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay46.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay47.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay48.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay49.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay5.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay50.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay51.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay52.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay53.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay54.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay55.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay56.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay57.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay58.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay59.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay6.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay60.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay61.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay62.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay63.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay64.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay65.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay66.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay67.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay68.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay69.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay7.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay70.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay71.pngbin192 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay72.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay73.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay74.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay75.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay76.pngbin169 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay77.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay78.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay79.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay8.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay80.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay81.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay82.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay83.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay84.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay85.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay86.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay87.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay88.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay89.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay9.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay90.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay91.pngbin172 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay92.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay93.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay94.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay95.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay96.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay97.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay98.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/characters/rune-overlay99.pngbin187 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/build-tower.pngbin1018 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/force-projector.pngbin809 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/large-shield-projector-team.pngbin799 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/large-shield-projector.pngbin1130 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/mend-projector.pngbin490 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/mender.pngbin246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/overdrive-dome.pngbin1020 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/overdrive-projector.pngbin490 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/regen-projector.pngbin984 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/shield-projector.pngbin849 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/shock-mine-team-top.pngbin121 -> 0 bytes
-rw-r--r--mindus/assets/blocks/defense/shockwave-tower.pngbin1033 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/bridge-arrow.pngbin125 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/bridge-conveyor-arrow.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/bridge-conveyor-bridge.pngbin144 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/bridge-conveyor-end.pngbin143 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/bridge-conveyor.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/center.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.pngbin343 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.pngbin307 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.pngbin336 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.pngbin390 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.pngbin398 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.pngbin389 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.pngbin387 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.pngbin387 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2-h.pngbin387 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.pngbin385 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.pngbin381 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.pngbin322 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.pngbin347 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.pngbin346 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.pngbin348 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.pngbin344 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.pngbin301 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.pngbin305 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.pngbin296 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.pngbin244 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.pngbin322 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-0-0.pngbin138 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-0-1.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-0-2.pngbin253 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-0-3.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.pngbin341 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-0.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.pngbin343 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-1.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.pngbin341 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-1-2.pngbin341 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-0.pngbin165 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-1.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-2.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.pngbin288 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-2-3.pngbin293 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.pngbin301 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-3-0.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-3-1.pngbin302 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-3-3.pngbin296 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-4-1.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/conveyor-4-3.pngbin279 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.pngbin144 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.pngbin262 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.pngbin262 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.pngbin268 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.pngbin354 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2-h.pngbin352 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.pngbin356 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.pngbin357 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.pngbin289 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.pngbin292 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.pngbin297 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.pngbin301 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.pngbin302 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.pngbin296 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.pngbin290 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-0-0.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-0-1.pngbin316 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-0-2.pngbin264 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-0-3.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-0-h.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-0.pngbin345 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-1-h.pngbin337 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-1-v.pngbin341 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-1.pngbin339 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-2-h.pngbin339 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-2.pngbin339 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-1-3.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-0-h.pngbin276 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-0-v.pngbin277 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-0.pngbin275 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-1-h.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-1.pngbin334 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-2.pngbin278 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-3-h.pngbin329 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-2-3.pngbin327 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-3-0-h.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-3-0.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-3-1.pngbin314 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-3-3.pngbin315 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-4-1.pngbin302 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/armored-duct-4-3.pngbin304 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-0-0.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-0-1.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-0-2.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-0-3.pngbin290 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-0-h.pngbin309 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-0.pngbin312 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-1-h.pngbin309 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-1-v.pngbin316 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-1.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-2-h.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-2.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-1-3.pngbin313 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-0-h.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-0-v.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-0.pngbin262 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-1-h.pngbin302 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-1.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-2.pngbin260 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-3-h.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-2-3.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-3-0-h.pngbin270 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-3-0.pngbin270 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-3-1.pngbin293 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-3-3.pngbin295 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-4-0.pngbin297 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-4-1.pngbin288 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-4-3.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-base.pngbin232 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.pngbin89 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.pngbin103 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-bridge-dir.pngbin131 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-bridge.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-router.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-unloader-top.pngbin272 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/duct-unloader.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/surge-router.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/ducts/top.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/inverted-sorter.pngbin336 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/item-source.pngbin302 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/item-void.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/mass-driver-base.pngbin795 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/mass-driver.pngbin933 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/overflow-gate.pngbin170 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/phase-conveyor-arrow.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/phase-conveyor-bridge.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/phase-conveyor-end.pngbin98 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/phase-conveyor.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/sorter.pngbin295 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.pngbin153 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.pngbin1618 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.pngbin1651 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.pngbin549 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.pngbin1092 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.pngbin1099 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.pngbin1092 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.pngbin546 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.pngbin525 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.pngbin1072 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.pngbin1076 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.pngbin1069 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/underflow-gate.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/unit-cargo-unload-point-top.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/distribution/unit-cargo-unload-point.pngbin543 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/blast-drill.pngbin1226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/cliff-crusher-rotator.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/cliff-crusher.pngbin635 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/eruption-drill.pngbin2034 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/impact-drill.pngbin1635 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/large-cliff-crusher-top.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/large-cliff-crusher.pngbin925 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/large-plasma-bore-top.pngbin417 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/large-plasma-bore.pngbin968 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/laser-drill.pngbin864 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/mechanical-drill.pngbin660 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/oil-extractor.pngbin987 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/plasma-bore-top.pngbin353 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/plasma-bore.pngbin606 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/pneumatic-drill.pngbin618 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/vent-condenser.pngbin1238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/drills/water-extractor.pngbin657 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkycite-floor.pngbin167 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-boulder1.pngbin405 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-boulder2.pngbin390 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-boulder3.pngbin357 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-stone1.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-stone2.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-stone3.pngbin177 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-vent1.pngbin856 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-vent2.pngbin822 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-wall-large.pngbin528 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-wall1.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-wall2.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/arkyic-wall3.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/basalt-boulder1.pngbin439 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/basalt-boulder2.pngbin443 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/basalt-vent1.pngbin709 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/basalt1.pngbin150 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/basalt2.pngbin144 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/basalt3.pngbin154 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-boulder1.pngbin436 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-boulder2.pngbin436 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone-wall-large.pngbin522 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone-wall1.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone-wall2.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone1.pngbin167 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone2.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone3.pngbin119 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/beryllic-stone4.pngbin145 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/bluemat1.pngbin142 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/bluemat2.pngbin161 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/bluemat3.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/boulder1.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/boulder2.pngbin330 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-boulder1.pngbin445 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-boulder2.pngbin437 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-stone1.pngbin275 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-stone2.pngbin127 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-stone3.pngbin121 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-stone4.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-vent.pngbin591 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-vent1.pngbin826 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-vent2.pngbin782 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-wall-large.pngbin544 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-wall1.pngbin324 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/carbon-wall2.pngbin327 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/char1.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/char2.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/char3.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/core-zone.pngbin138 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crater-stone1.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crater-stone2.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crater-stone3.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crater-stone4.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crater-stone5.pngbin126 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crater-stone6.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-blocks1.pngbin1502 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-blocks2.pngbin1139 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-blocks3.pngbin869 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-cluster1.pngbin2165 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-cluster2.pngbin1207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-cluster3.pngbin1075 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-floor2.pngbin157 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-floor3.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-floor4.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-orbs1.pngbin1025 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-orbs2.pngbin854 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystal-orbs3.pngbin845 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-boulder1.pngbin415 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-boulder2.pngbin425 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone-wall-large.pngbin540 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone-wall1.pngbin323 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone-wall2.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone-wall3.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone-wall4.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone1.pngbin149 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone2.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone3.pngbin139 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone4.pngbin133 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-stone5.pngbin147 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-vent.pngbin632 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-vent1.pngbin854 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/crystalline-vent2.pngbin826 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite-boulder1.pngbin439 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite-boulder2.pngbin443 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite-wall-large.pngbin481 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite-wall1.pngbin199 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite-wall2.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite1.pngbin161 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite2.pngbin135 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dacite3.pngbin157 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-metal-large.pngbin412 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-metal1.pngbin159 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-metal2.pngbin263 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-panel-1.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-panel-2.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-panel-3.pngbin139 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-panel-4.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dark-panel-6.pngbin172 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/darksand-tainted-water.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/darksand-water.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/darksand1.pngbin129 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/darksand2.pngbin149 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/darksand3.pngbin133 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/deep-tainted-water.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/deep-water.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dense-red-stone1.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dense-red-stone2.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dense-red-stone3.pngbin198 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dense-red-stone4.pngbin157 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dirt-wall-large.pngbin464 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dirt-wall1.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dirt1.pngbin136 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dirt2.pngbin145 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dirt3.pngbin503 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dune-wall-large.pngbin584 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dune-wall1.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/dune-wall2.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/edge-stencil.pngbin1845 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/edge.pngbin415 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/env-error.pngbin168 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-boulder1.pngbin385 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-boulder2.pngbin387 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-craters1.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-craters2.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-craters3.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-stone-wall-large.pngbin484 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-stone-wall1.pngbin205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-stone1.pngbin148 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-stone2.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-stone3.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ferric-stone4.pngbin147 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/graphitic-wall-large.pngbin740 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/graphitic-wall1.pngbin378 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/graphitic-wall2.pngbin381 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/graphitic-wall3.pngbin350 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/grass1.pngbin135 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/grass2.pngbin122 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/grass3.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/hotrock1.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/hotrock2.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/hotrock3.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice-snow1.pngbin373 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice-snow2.pngbin382 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice-snow3.pngbin359 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice-wall-large.pngbin373 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice-wall1.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice-wall2.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice1.pngbin145 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice2.pngbin149 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ice3.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/magmarock1.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/magmarock2.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/magmarock3.pngbin228 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor-2.pngbin117 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor-3.pngbin147 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor-5.pngbin128 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor-damaged1.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor-damaged2.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor-damaged3.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/metal-floor.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/molten-slag1.pngbin1259 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/moss1.pngbin155 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/moss2.pngbin154 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/moss3.pngbin153 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/mud1.pngbin1278 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/mud2.pngbin1265 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/mud3.pngbin1277 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-beryllium1.pngbin189 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-beryllium2.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-beryllium3.pngbin182 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-coal1.pngbin274 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-coal2.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-coal3.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-copper1.pngbin261 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-copper2.pngbin272 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-copper3.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-crystal-thorium1.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-crystal-thorium2.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-crystal-thorium3.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-lead1.pngbin246 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-lead2.pngbin241 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-lead3.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-scrap1.pngbin263 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-scrap2.pngbin275 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-scrap3.pngbin258 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-thorium1.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-thorium2.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-thorium3.pngbin235 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-titanium1.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-titanium2.pngbin286 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-titanium3.pngbin239 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-tungsten1.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-tungsten2.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-tungsten3.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-beryllium1.pngbin212 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-beryllium2.pngbin176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-beryllium3.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-graphite1.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-graphite2.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-graphite3.pngbin148 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-thorium1.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-thorium2.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-thorium3.pngbin197 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-tungsten1.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-tungsten2.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-tungsten3.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/pebbles1.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/pebbles2.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/pebbles3.pngbin221 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/pine.pngbin465 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/pooled-cryofluid.pngbin1276 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/pur-bush.pngbin265 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-diamond-wall1.pngbin449 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-diamond-wall2.pngbin442 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-diamond-wall3.pngbin456 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice-boulder1.pngbin446 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice-boulder2.pngbin428 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice-boulder3.pngbin407 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice-wall-large.pngbin500 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice-wall1.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice-wall2.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice1.pngbin179 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice2.pngbin167 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-ice3.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-boulder1.pngbin380 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-boulder2.pngbin385 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-boulder3.pngbin385 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-boulder4.pngbin410 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-vent1.pngbin854 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-vent2.pngbin826 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-wall-large.pngbin583 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-wall1.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone-wall2.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone1.pngbin162 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone2.pngbin156 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone3.pngbin137 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/red-stone4.pngbin146 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/redmat1.pngbin142 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/redmat2.pngbin161 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/redmat3.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/redweed1.pngbin366 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/redweed2.pngbin174 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/redweed3.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/regolith-wall-large.pngbin561 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/regolith-wall1.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/regolith-wall2.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/regolith1.pngbin136 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/regolith2.pngbin164 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/regolith3.pngbin154 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-boulder1.pngbin417 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-boulder2.pngbin396 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-boulder3.pngbin396 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-crater1.pngbin572 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-crater2.pngbin563 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-crater3.pngbin575 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-vent.pngbin600 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-vent1.pngbin808 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-vent2.pngbin793 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-wall-large.pngbin559 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-wall1.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite-wall2.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite1.pngbin540 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite2.pngbin532 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rhyolite3.pngbin536 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rough-rhyolite1.pngbin151 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rough-rhyolite2.pngbin139 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rough-rhyolite3.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/rough-rhyolite4.pngbin151 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/salt-wall1.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/salt-wall2.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/salt1.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-boulder1.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-boulder2.pngbin249 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-floor1.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-floor2.pngbin146 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-floor3.pngbin129 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-wall-large.pngbin456 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-wall1.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-wall2.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/sand-water.pngbin306 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale-boulder1.pngbin237 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale-boulder2.pngbin249 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale-wall-large.pngbin342 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale-wall1.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale-wall2.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale1.pngbin156 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale2.pngbin158 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shale3.pngbin166 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shallow-water.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shrubs-large.pngbin365 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shrubs1.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/shrubs2.pngbin210 -> 0 bytes
l---------mindus/assets/blocks/environment/single/colored-floor.png1
l---------mindus/assets/blocks/environment/single/colored-wall.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-1.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-10.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-11.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-12.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-2.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-3.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-4.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-5.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-6.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-7.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-8.png1
l---------mindus/assets/blocks/environment/single/metal-tiles-9.png1
-rw-r--r--mindus/assets/blocks/environment/single/metal-wall-1.pngbin368 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/single/metal-wall-2.pngbin337 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/single/metal-wall-3.pngbin290 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow-boulder1.pngbin340 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow-boulder2.pngbin337 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow-pine.pngbin462 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow-wall-large.pngbin340 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow-wall1.pngbin194 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow-wall2.pngbin195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow1.pngbin172 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow2.pngbin148 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/snow3.pngbin213 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spawn.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-cluster1.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-cluster2.pngbin279 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-cluster3.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-moss1.pngbin184 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-moss2.pngbin185 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-moss3.pngbin186 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-pine.pngbin460 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-wall-large.pngbin349 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-wall1.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/spore-wall2.pngbin165 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone-vent.pngbin641 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone-wall-large.pngbin283 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone-wall1.pngbin178 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone-wall2.pngbin172 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone1.pngbin142 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone2.pngbin139 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/stone3.pngbin143 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/tainted-water.pngbin160 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/tendrils1.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/tendrils2.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/tendrils3.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/vibrant-crystal-cluster1.pngbin875 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/vibrant-crystal-cluster2.pngbin1217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/vibrant-crystal-cluster3.pngbin1331 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/white-tree-dead.pngbin4700 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-boulder1.pngbin423 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-boulder2.pngbin436 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-plates1.pngbin180 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-plates2.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-vent1.pngbin841 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-vent2.pngbin794 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-wall-large.pngbin472 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone-wall1.pngbin208 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone1.pngbin138 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone2.pngbin150 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellow-stone3.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/environment/yellowcoral.pngbin437 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/bridge-conduit-arrow.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/bridge-conduit-bridge.pngbin144 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/bridge-conduit-end.pngbin144 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/bridge-conduit.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-0-0.pngbin172 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-0-2.pngbin274 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-0-h.pngbin334 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-0.pngbin233 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-1-h.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-1-v.pngbin335 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-1.pngbin331 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-2-h.pngbin331 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-2.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-1-3.pngbin334 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-2-0-h.pngbin299 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-2-0-v.pngbin299 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-2-0.pngbin196 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-2-2.pngbin300 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-2-3-h.pngbin315 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-3-0-h.pngbin301 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-3-0.pngbin206 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-3-1.pngbin327 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-3-3.pngbin317 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-4-0.pngbin201 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-4-1.pngbin301 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-4-3.pngbin301 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-bottom-0.pngbin118 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/conduit-bottom-1.pngbin152 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.pngbin202 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.pngbin348 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.pngbin348 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-0-h.pngbin373 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.pngbin268 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-h.pngbin372 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-v.pngbin370 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.pngbin371 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-2-h.pngbin371 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.pngbin372 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.pngbin373 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-h.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-v.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-2-1-h.pngbin349 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-2-3-h.pngbin357 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-3-0-h.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.pngbin209 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.pngbin323 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.pngbin325 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.pngbin202 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.pngbin303 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.pngbin348 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.pngbin373 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.pngbin268 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.pngbin372 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.pngbin370 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.pngbin371 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2-h.pngbin371 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.pngbin372 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.pngbin373 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.pngbin326 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.pngbin349 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.pngbin357 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.pngbin308 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.pngbin240 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.pngbin332 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.pngbin222 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.pngbin323 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.pngbin324 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.pngbin343 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.pngbin307 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.pngbin341 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.pngbin357 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.pngbin255 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.pngbin354 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.pngbin358 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.pngbin356 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2-h.pngbin352 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.pngbin356 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.pngbin358 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.pngbin306 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.pngbin305 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.pngbin330 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.pngbin333 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.pngbin306 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.pngbin328 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.pngbin282 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.pngbin181 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.pngbin293 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.pngbin291 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.pngbin214 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.pngbin310 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.pngbin312 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/impulse-pump-liquid.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/impulse-pump.pngbin936 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-container.pngbin493 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-junction.pngbin210 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-router.pngbin211 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-source.pngbin312 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-tank-bottom.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-tank.pngbin877 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/liquid-void.pngbin200 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/mechanical-pump-liquid.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/mechanical-pump.pngbin280 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/phase-conduit-arrow.pngbin193 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/phase-conduit-bridge.pngbin141 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/phase-conduit-end.pngbin103 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/phase-conduit.pngbin203 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.pngbin105 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.pngbin101 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.pngbin103 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.pngbin115 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.pngbin113 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-bridge-conduit.pngbin256 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-liquid-container.pngbin598 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-liquid-junction.pngbin354 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.pngbin309 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-pump-liquid.pngbin139 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/reinforced-pump.pngbin600 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/rotary-pump-liquid.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/liquid/rotary-pump.pngbin641 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/canvas.pngbin393 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/hyper-processor.pngbin1093 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/large-logic-display.pngbin562 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/logic-display.pngbin464 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/logic-processor.pngbin728 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/memory-bank.pngbin460 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/memory-cell.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/message.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/micro-processor.pngbin410 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/reinforced-message.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/switch-on.pngbin503 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/switch.pngbin583 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tile-logic-display.pngbin96 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-0.pngbin130 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-1.pngbin104 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-10.pngbin144 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-11.pngbin133 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-12.pngbin108 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-13.pngbin80 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-14.pngbin107 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-15.pngbin112 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-16.pngbin124 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-17.pngbin149 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-18.pngbin108 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-19.pngbin119 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-2.pngbin114 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-20.pngbin125 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-21.pngbin117 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-22.pngbin136 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-23.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-24.pngbin115 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-25.pngbin102 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-26.pngbin131 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-27.pngbin133 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-28.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-29.pngbin133 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-3.pngbin133 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-30.pngbin127 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-31.pngbin116 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-32.pngbin124 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-33.pngbin127 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-34.pngbin118 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-35.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-36.pngbin136 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-37.pngbin109 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-38.pngbin135 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-39.pngbin150 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-4.pngbin146 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-40.pngbin132 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-41.pngbin134 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-42.pngbin117 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-43.pngbin128 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-44.pngbin126 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-45.pngbin125 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-46.pngbin140 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-5.pngbin121 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-6.pngbin117 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-7.pngbin106 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-8.pngbin116 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/tiled-display/tile-logic-display-9.pngbin127 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/world-cell.pngbin216 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/world-message.pngbin191 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/world-processor.pngbin410 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/world-switch-on.pngbin143 -> 0 bytes
-rw-r--r--mindus/assets/blocks/logic/world-switch.pngbin223 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/constructor-top.pngbin902 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/constructor.pngbin816 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/deconstructor-top.pngbin1294 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/deconstructor.pngbin1714 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-in-3-dark.pngbin376 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-in-3.pngbin411 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-in-5-dark.pngbin611 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-in-5.pngbin630 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-out-3-dark.pngbin377 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-out-3.pngbin426 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-out-5-dark.pngbin600 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-out-5.pngbin684 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-out-7.pngbin859 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-out-9.pngbin1086 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/factory-top-3.pngbin562 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/large-constructor-top.pngbin1604 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/large-constructor.pngbin1683 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/large-payload-mass-driver.pngbin2298 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-conveyor.pngbin302 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-loader-top.pngbin573 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-loader.pngbin753 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-mass-driver.pngbin1122 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-router.pngbin220 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-source-top.pngbin637 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-unloader-top.pngbin573 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-unloader.pngbin753 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-void-top.pngbin634 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/payload-void.pngbin1030 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/reinforced-payload-conveyor.pngbin350 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/reinforced-payload-router.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/small-deconstructor-top.pngbin690 -> 0 bytes
-rw-r--r--mindus/assets/blocks/payload/small-deconstructor.pngbin830 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/battery-large.pngbin824 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/battery.pngbin2495 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/beam-link.pngbin1121 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/beam-node.pngbin409 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/beam-tower.pngbin1056 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/chemical-combustion-chamber.pngbin1050 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/combustion-generator.pngbin238 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/differential-generator-liquid.pngbin712 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/differential-generator.pngbin956 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/diode-arrow.pngbin148 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/diode.pngbin204 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/flux-reactor-bottom.pngbin225 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/flux-reactor-mid.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/flux-reactor.pngbin1961 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/illuminator.pngbin236 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/impact-reactor-bottom.pngbin224 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/impact-reactor.pngbin1281 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/neoplasia-reactor-bottom.pngbin382 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/neoplasia-reactor-center.pngbin320 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/neoplasia-reactor.pngbin2163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/power-node-large.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/power-node.pngbin215 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/power-source.pngbin383 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/power-void.pngbin372 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/pyrolysis-generator.pngbin1176 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/rtg-generator.pngbin710 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/solar-panel-large.pngbin770 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/solar-panel.pngbin559 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/steam-generator-liquid.pngbin564 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/steam-generator.pngbin625 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/thermal-generator.pngbin565 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/thorium-reactor.pngbin797 -> 0 bytes
-rw-r--r--mindus/assets/blocks/power/turbine-condenser.pngbin1163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/atmospheric-concentrator-bottom.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/atmospheric-concentrator.pngbin864 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/blast-mixer.pngbin619 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/carbide-crucible-bottom.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/carbide-crucible.pngbin1119 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/coal-centrifuge.pngbin485 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/cryofluid-mixer.pngbin654 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/cultivator.pngbin605 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/cyanogen-synthesizer-bottom.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/cyanogen-synthesizer.pngbin1096 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/disassembler-bottom.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/disassembler.pngbin1033 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/electric-heater-top1.pngbin355 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/electric-heater-top2.pngbin355 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/electric-heater.pngbin625 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/electrolyzer-bottom.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/electrolyzer.pngbin1049 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-reactor-top1.pngbin358 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-reactor-top2.pngbin359 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-reactor.pngbin897 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-redirector-top2.pngbin458 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-redirector.pngbin929 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-router-top1.pngbin305 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-router.pngbin939 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/heat-source.pngbin374 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/incinerator.pngbin183 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/kiln.pngbin598 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/melter.pngbin299 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/multi-press.pngbin795 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/oxidation-chamber-top1.pngbin512 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/oxidation-chamber-top2.pngbin511 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/oxidation-chamber.pngbin1096 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/phase-heater-top1.pngbin361 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/phase-heater-top2.pngbin361 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/phase-heater.pngbin604 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/phase-synthesizer.pngbin1101 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/phase-weaver.pngbin594 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/plastanium-compressor.pngbin529 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/pulverizer.pngbin219 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/pyratite-mixer.pngbin496 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/separator.pngbin547 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/silicon-arc-furnace.pngbin1218 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/silicon-crucible.pngbin921 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/silicon-smelter.pngbin588 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/slag-heater-bottom.pngbin217 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/slag-heater.pngbin976 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/slag-incinerator-liquid.pngbin111 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/slag-incinerator.pngbin334 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/small-heat-redirector-top1.pngbin231 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/small-heat-redirector-top2.pngbin232 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/small-heat-redirector.pngbin522 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/spore-press.pngbin619 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/surge-crucible-bottom.pngbin319 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/surge-crucible-liquid.pngbin163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/surge-crucible.pngbin1066 -> 0 bytes
-rw-r--r--mindus/assets/blocks/production/surge-smelter.pngbin996 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-acropolis-team.pngbin1837 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-acropolis.pngbin2829 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-bastion-team.pngbin1047 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-bastion.pngbin1529 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-citadel-team.pngbin1401 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-citadel.pngbin2078 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-foundation-team.pngbin897 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-foundation.pngbin1163 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-nucleus-team.pngbin1195 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-shard-team.pngbin604 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/core-shard.pngbin766 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/reinforced-container-team.pngbin401 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/reinforced-container.pngbin559 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/reinforced-vault.pngbin864 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/unloader-center.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/unloader.pngbin226 -> 0 bytes
-rw-r--r--mindus/assets/blocks/storage/vault-team.pngbin525 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/afflict.pngbin1801 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/arc.pngbin377 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/breach.pngbin1152 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/cyclone.pngbin920 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/diffuse.pngbin1273 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/disperse.pngbin1553 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/duo.pngbin375 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/foreshadow.pngbin1379 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/fuse.pngbin1169 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/hail.pngbin382 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/lancer.pngbin697 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/lustre.pngbin1629 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/malign.pngbin2245 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/meltdown.pngbin1471 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/parallax.pngbin659 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/ripple.pngbin986 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/salvo.pngbin700 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/scathe.pngbin1645 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/scatter.pngbin653 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/scorch.pngbin374 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/segment.pngbin635 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/smite.pngbin2205 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/spectre.pngbin1365 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/sublimate.pngbin1150 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/swarmer.pngbin641 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/titan.pngbin1450 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/tsunami.pngbin1024 -> 0 bytes
-rw-r--r--mindus/assets/blocks/turrets/wave.pngbin709 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/additive-reconstructor-top.pngbin719 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/additive-reconstructor.pngbin728 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/air-factory.pngbin746 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/basic-assembler-module-side1.pngbin547 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/basic-assembler-module-side2.pngbin587 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/basic-assembler-module.pngbin1402 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/exponential-reconstructor-top.pngbin1590 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/exponential-reconstructor.pngbin2325 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ground-factory.pngbin746 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-assembler-side1.pngbin489 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-assembler-side2.pngbin492 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-assembler-top.pngbin1441 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-assembler.pngbin1287 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-fabricator-top.pngbin770 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-fabricator.pngbin854 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-refabricator-top.pngbin891 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/mech-refabricator.pngbin673 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/multiplicative-reconstructor-top.pngbin1162 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/multiplicative-reconstructor.pngbin1360 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/naval-factory.pngbin746 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/prime-refabricator-top.pngbin1576 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/prime-refabricator.pngbin1356 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/repair-point.pngbin367 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/repair-turret.pngbin715 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-assembler-side1.pngbin489 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-assembler-side2.pngbin492 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-assembler-top.pngbin1441 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-assembler.pngbin1287 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-fabricator-top.pngbin770 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-fabricator.pngbin853 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-refabricator-top.pngbin891 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/ship-refabricator.pngbin673 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-assembler-side1.pngbin489 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-assembler-side2.pngbin492 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-assembler-top.pngbin1441 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-assembler.pngbin1287 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-fabricator-top.pngbin770 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-fabricator.pngbin854 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-refabricator-top.pngbin891 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tank-refabricator.pngbin673 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tetrative-reconstructor-top.pngbin2052 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/tetrative-reconstructor.pngbin3982 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/unit-cargo-loader.pngbin966 -> 0 bytes
-rw-r--r--mindus/assets/blocks/units/unit-repair-tower.pngbin689 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/beryllium-wall-large.pngbin500 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/beryllium-wall.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/blast-door-open.pngbin486 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/blast-door.pngbin591 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/carbide-wall-large.pngbin498 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/carbide-wall.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/copper-wall.pngbin157 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/door-large-open.pngbin473 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/door-large.pngbin418 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/door-open.pngbin243 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/door.pngbin213 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/phase-wall-large.pngbin409 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/phase-wall.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/plastanium-wall-large.pngbin409 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/plastanium-wall.pngbin173 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/reinforced-surge-wall-large.pngbin498 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/reinforced-surge-wall.pngbin188 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/scrap-wall-huge.pngbin547 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/scrap-wall-large.pngbin358 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/scrap-wall.pngbin207 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/surge-wall-large.pngbin537 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/surge-wall.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/thorium-wall.pngbin190 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/thruster-top.pngbin511 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/titanium-wall.pngbin157 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/tungsten-wall-large.pngbin500 -> 0 bytes
-rw-r--r--mindus/assets/blocks/walls/tungsten-wall.pngbin175 -> 0 bytes
-rw-r--r--mindus/assets/units/aegires.pngbin7623 -> 0 bytes
-rw-r--r--mindus/assets/units/alpha.pngbin889 -> 0 bytes
-rw-r--r--mindus/assets/units/anthicus-missile.pngbin575 -> 0 bytes
-rw-r--r--mindus/assets/units/anthicus.pngbin2700 -> 0 bytes
-rw-r--r--mindus/assets/units/antumbra.pngbin7955 -> 0 bytes
-rw-r--r--mindus/assets/units/arkyid.pngbin4028 -> 0 bytes
-rw-r--r--mindus/assets/units/assembly-drone.pngbin972 -> 0 bytes
-rw-r--r--mindus/assets/units/atrax.pngbin1593 -> 0 bytes
-rw-r--r--mindus/assets/units/avert.pngbin2079 -> 0 bytes
-rw-r--r--mindus/assets/units/beta.pngbin1173 -> 0 bytes
-rw-r--r--mindus/assets/units/bryde.pngbin3457 -> 0 bytes
-rw-r--r--mindus/assets/units/cleroi.pngbin1968 -> 0 bytes
-rw-r--r--mindus/assets/units/collaris.pngbin6204 -> 0 bytes
-rw-r--r--mindus/assets/units/conquer.pngbin8398 -> 0 bytes
-rw-r--r--mindus/assets/units/corvus.pngbin4019 -> 0 bytes
-rw-r--r--mindus/assets/units/crawler.pngbin549 -> 0 bytes
-rw-r--r--mindus/assets/units/cyerce.pngbin4018 -> 0 bytes
-rw-r--r--mindus/assets/units/dagger.pngbin781 -> 0 bytes
-rw-r--r--mindus/assets/units/disrupt-missile.pngbin840 -> 0 bytes
-rw-r--r--mindus/assets/units/disrupt.pngbin7062 -> 0 bytes
-rw-r--r--mindus/assets/units/eclipse.pngbin12373 -> 0 bytes
-rw-r--r--mindus/assets/units/elude.pngbin1197 -> 0 bytes
-rw-r--r--mindus/assets/units/emanate.pngbin1760 -> 0 bytes
-rw-r--r--mindus/assets/units/evoke.pngbin1108 -> 0 bytes
-rw-r--r--mindus/assets/units/flare.pngbin802 -> 0 bytes
-rw-r--r--mindus/assets/units/fortress.pngbin1640 -> 0 bytes
-rw-r--r--mindus/assets/units/gamma.pngbin1375 -> 0 bytes
-rw-r--r--mindus/assets/units/horizon.pngbin1282 -> 0 bytes
-rw-r--r--mindus/assets/units/incite.pngbin1465 -> 0 bytes
-rw-r--r--mindus/assets/units/latum.pngbin7320 -> 0 bytes
-rw-r--r--mindus/assets/units/locus.pngbin2344 -> 0 bytes
-rw-r--r--mindus/assets/units/mace.pngbin1148 -> 0 bytes
-rw-r--r--mindus/assets/units/manifold.pngbin1483 -> 0 bytes
-rw-r--r--mindus/assets/units/mega.pngbin2145 -> 0 bytes
-rw-r--r--mindus/assets/units/merui.pngbin1028 -> 0 bytes
-rw-r--r--mindus/assets/units/minke.pngbin2169 -> 0 bytes
-rw-r--r--mindus/assets/units/mono.pngbin783 -> 0 bytes
-rw-r--r--mindus/assets/units/navanax.pngbin13437 -> 0 bytes
-rw-r--r--mindus/assets/units/nova.pngbin1034 -> 0 bytes
-rw-r--r--mindus/assets/units/obviate.pngbin3010 -> 0 bytes
-rw-r--r--mindus/assets/units/oct.pngbin11016 -> 0 bytes
-rw-r--r--mindus/assets/units/omura.pngbin10487 -> 0 bytes
-rw-r--r--mindus/assets/units/oxynoe.pngbin2369 -> 0 bytes
-rw-r--r--mindus/assets/units/poly.pngbin1232 -> 0 bytes
-rw-r--r--mindus/assets/units/precept.pngbin4039 -> 0 bytes
-rw-r--r--mindus/assets/units/pulsar.pngbin1517 -> 0 bytes
-rw-r--r--mindus/assets/units/quad.pngbin5661 -> 0 bytes
-rw-r--r--mindus/assets/units/quasar.pngbin1982 -> 0 bytes
-rw-r--r--mindus/assets/units/quell-missile.pngbin723 -> 0 bytes
-rw-r--r--mindus/assets/units/quell.pngbin4089 -> 0 bytes
-rw-r--r--mindus/assets/units/reign.pngbin4992 -> 0 bytes
-rw-r--r--mindus/assets/units/renale.pngbin993 -> 0 bytes
-rw-r--r--mindus/assets/units/retusa.pngbin1509 -> 0 bytes
-rw-r--r--mindus/assets/units/risso.pngbin1602 -> 0 bytes
-rw-r--r--mindus/assets/units/scathe-missile.pngbin1184 -> 0 bytes
-rw-r--r--mindus/assets/units/scepter.pngbin4260 -> 0 bytes
-rw-r--r--mindus/assets/units/sei.pngbin6565 -> 0 bytes
-rw-r--r--mindus/assets/units/spiroct.pngbin2256 -> 0 bytes
-rw-r--r--mindus/assets/units/stell.pngbin1516 -> 0 bytes
-rw-r--r--mindus/assets/units/tecta.pngbin4429 -> 0 bytes
-rw-r--r--mindus/assets/units/toxopid.pngbin5412 -> 0 bytes
-rw-r--r--mindus/assets/units/vanquish.pngbin4996 -> 0 bytes
-rw-r--r--mindus/assets/units/vela.pngbin3390 -> 0 bytes
-rw-r--r--mindus/assets/units/zenith.pngbin3066 -> 0 bytes
-rw-r--r--mindus/build.rs187
-rw-r--r--mindus/src/block/content.rs453
-rw-r--r--mindus/src/block/defense.rs20
-rw-r--r--mindus/src/block/drills.rs31
-rw-r--r--mindus/src/block/liquid.rs128
-rw-r--r--mindus/src/block/mod.rs1067
-rw-r--r--mindus/src/block/payload.rs272
-rw-r--r--mindus/src/block/power.rs213
-rw-r--r--mindus/src/block/production.rs98
-rw-r--r--mindus/src/block/ratios.rs265
-rw-r--r--mindus/src/block/turrets.rs49
-rw-r--r--mindus/src/block/units.rs341
-rw-r--r--mindus/src/block/walls.rs79
-rw-r--r--mindus/src/block/x.rs18
-rw-r--r--mindus/src/color_mapped390
-rw-r--r--mindus/src/color_mapping.rs3
-rw-r--r--mindus/src/colorsbin768 -> 0 bytes
-rw-r--r--mindus/src/content.rs210
-rw-r--r--mindus/src/data/command.rs7
-rw-r--r--mindus/src/data/entity_mapping.rs31
-rw-r--r--mindus/src/data/map.rs1021
-rw-r--r--mindus/src/data/mod.rs499
-rw-r--r--mindus/src/data/renderer.rs853
-rw-r--r--mindus/src/exe/draw.rs41
-rw-r--r--mindus/src/exe/map.rs32
-rw-r--r--mindus/src/item/storage.rs442
-rw-r--r--mindus/src/lib.rs39
-rw-r--r--mindus/src/unit.rs430
-rw-r--r--mindus/src/utils/image/holder.rs48
-rw-r--r--mindus/src/utils/image/mod.rs72
-rw-r--r--mindus/src/utils/mod.rs3
-rw-r--r--p2s/.gitignore1
-rw-r--r--p2s/Cargo.toml11
-rw-r--r--p2s/README.md4
-rw-r--r--p2s/src/main.rs101
-rw-r--r--res/team_names.txt (renamed from mindus/res/team_names.txt)0
-rw-r--r--src/block/campaign.rs7
-rw-r--r--src/block/content.rs420
-rw-r--r--src/block/defense.rs37
-rw-r--r--src/block/distribution.rs (renamed from mindus/src/block/distribution.rs)119
-rw-r--r--src/block/drills.rs44
-rw-r--r--src/block/environment.rs192
-rw-r--r--src/block/liquid.rs158
-rw-r--r--src/block/logic.rs (renamed from mindus/src/block/logic.rs)124
-rw-r--r--src/block/mod.rs642
-rw-r--r--src/block/payload.rs324
-rw-r--r--src/block/power.rs251
-rw-r--r--src/block/production.rs120
-rw-r--r--src/block/simple.rs (renamed from mindus/src/block/simple.rs)24
-rw-r--r--src/block/storage.rs16
-rw-r--r--src/block/turrets.rs82
-rw-r--r--src/block/units.rs380
-rw-r--r--src/block/walls.rs118
-rw-r--r--src/content.rs179
-rw-r--r--src/data/autotile.rs (renamed from mindus/src/data/autotile.rs)90
-rw-r--r--src/data/base64.rs (renamed from mindus/src/data/base64.rs)0
-rw-r--r--src/data/command.rs7
-rw-r--r--src/data/dynamic.rs (renamed from mindus/src/data/dynamic.rs)130
-rw-r--r--src/data/map.rs696
-rw-r--r--src/data/mod.rs530
-rw-r--r--src/data/planet.rs (renamed from mindus/src/data/planet.rs)0
-rw-r--r--src/data/renderer.rs296
-rw-r--r--src/data/schematic.rs (renamed from mindus/src/data/schematic.rs)274
-rw-r--r--src/data/sector.rs (renamed from mindus/src/data/sector.rs)0
-rw-r--r--src/data/weather.rs (renamed from mindus/src/data/weather.rs)0
-rw-r--r--src/exe/draw.rs24
-rw-r--r--src/exe/map.rs48
-rw-r--r--src/exe/mod.rs (renamed from mindus/src/exe/mod.rs)0
-rw-r--r--src/fluid/mod.rs (renamed from mindus/src/fluid.rs)0
-rw-r--r--src/item/mod.rs (renamed from mindus/src/item/mod.rs)0
-rw-r--r--src/item/storage.rs425
-rw-r--r--src/lib.rs32
-rw-r--r--src/logic/mod.rs76
-rw-r--r--src/modifier.rs (renamed from mindus/src/modifier.rs)6
-rw-r--r--src/registry.rs51
-rw-r--r--src/team.rs (renamed from mindus/src/team.rs)40
-rw-r--r--src/unit/mod.rs75
-rw-r--r--src/utils/array.rs (renamed from mindus/src/utils/array.rs)2
-rw-r--r--src/utils/image.rs728
-rw-r--r--src/utils/mod.rs3
3107 files changed, 6588 insertions, 12045 deletions
diff --git a/.github/example.png b/.github/example.png
index d19d4d5..2197fd0 100644
--- a/.github/example.png
+++ b/.github/example.png
Binary files differ
diff --git a/.gitignore b/.gitignore
index e4a6c59..43a3eb2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
# rustc/cargo outputs
-Cargo.lock
-target
-rustc-ice-*.txt
+/Cargo.lock
+/target
# Visual Studio Code
/.vscode
diff --git a/Cargo.toml b/Cargo.toml
index 69ed9e4..6a873c1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,43 @@
-[workspace]
-members = ["mindus", "lemu", "p2s"]
-resolver = "2"
+[package]
+name = "mindus"
+version = "4.0.3"
+edition = "2021"
+description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
+authors = [
+ "KosmosPrime <[email protected]>",
+ "bend-n <[email protected]>",
+]
+repository = "https://github.com/bend-n/mindus.git"
+license = "GPL-3.0"
+exclude = [".github/", "items.py"]
+
+[dependencies]
+flate2 = { version = "1.0", features = ["zlib"], default-features = false }
+base64 = "0.21"
+paste = "1.0"
+strconv = "0.1"
+image = { version = "0.24", features = [], default-features = false, optional = true }
+color-hex = "0.2"
+thiserror = "1.0"
+bobbin-bits = "0.1"
+blurslice = { version = "0.1" }
+enum_dispatch = "0.3"
+fast_image_resize = "2.7.3"
+rayon = "1.7.0"
+
+[features]
+bin = ["image/png"]
+default = ["bin"]
+
+[build-dependencies]
+image = { version = "0.24", features = ["png"], default-features = false }
+walkdir = "2"
+
+[[bin]]
+name = "mindus"
+doc = false
+required-features = ["bin"]
+path = "src/exe/mod.rs"
[profile.release]
debug = 2
@@ -13,3 +50,6 @@ opt-level = 3
[profile.release.build-override]
opt-level = 3
+
+[dev-dependencies]
+diff = "0.1"
diff --git a/mindus/LICENSE.txt b/LICENSE.txt
index f288702..f288702 100644
--- a/mindus/LICENSE.txt
+++ b/LICENSE.txt
diff --git a/README.md b/README.md
index f08c5b1..9aa8287 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,20 @@
# mindus
-- see the [mindus](mindus/) folder for schematic and map rendering and deserializing
-- see the [lemu](lemu/) folder for mlog execution \ No newline at end of file
+![msrv](https://img.shields.io/badge/msrv-nightly-blue?style=for-the-badge&logo=rust)
+
+Mindus is a library for working with [Mindustry](https://github.com/Anuken/Mindustry) formats.
+
+## Usage
+
+```rs
+use mindus::*;
+let reg = build_registry();
+let mut ss = SchematicSerializer(&reg);
+let s = ss.deserialize_base64("bXNjaAF4nD3SQW6DMBBA0bE94wF104vkDr1H1QVtWUQioTL0/oFJ/Fl9GXiy5ZFBhiJ6n26zvE9tv7T1f5/bZbtNyyJvv/P2065/+3W9i0hdpu952SR/fiWp29qOL4/lDzkfExkiEpWPGqMKpZRRlT/8VQkv4aXwnlUopYw6vRTVvRzeGJVYy1ShlDKqezk8O8+DV/AKXgkvRSllvK2sdU/xFE/xFE/xFE/xNLzxeRlU9wzPOK9xXsMzPMOr3EcNL0VlqlBKGVWpfh+O5+zPmRdnXpx5cebFmRd/eQ9KIReL")?;
+let output = s.render();
+output.save("output.png");
+```
+
+This produces:
+
+![image](https://raw.githubusercontent.com/bend-n/mindus/master/.github/example.png)
diff --git a/assets/blocks/campaign/interplanetary-accelerator.png b/assets/blocks/campaign/interplanetary-accelerator.png
new file mode 100644
index 0000000..78f302b
--- /dev/null
+++ b/assets/blocks/campaign/interplanetary-accelerator.png
Binary files differ
diff --git a/mindus/assets/blocks/campaign/launch-pad.png b/assets/blocks/campaign/launch-pad.png
index 3dcca24..3dcca24 100644
--- a/mindus/assets/blocks/campaign/launch-pad.png
+++ b/assets/blocks/campaign/launch-pad.png
Binary files differ
diff --git a/assets/blocks/campaign/launchpod.png b/assets/blocks/campaign/launchpod.png
new file mode 100644
index 0000000..1697897
--- /dev/null
+++ b/assets/blocks/campaign/launchpod.png
Binary files differ
diff --git a/assets/blocks/defense/barrier-projector-team.png b/assets/blocks/defense/barrier-projector-team.png
new file mode 100644
index 0000000..9c0d534
--- /dev/null
+++ b/assets/blocks/defense/barrier-projector-team.png
Binary files differ
diff --git a/assets/blocks/defense/barrier-projector.png b/assets/blocks/defense/barrier-projector.png
new file mode 100644
index 0000000..0b72218
--- /dev/null
+++ b/assets/blocks/defense/barrier-projector.png
Binary files differ
diff --git a/assets/blocks/defense/build-tower.png b/assets/blocks/defense/build-tower.png
new file mode 100644
index 0000000..cec7847
--- /dev/null
+++ b/assets/blocks/defense/build-tower.png
Binary files differ
diff --git a/mindus/assets/blocks/defense/force-projector-team.png b/assets/blocks/defense/force-projector-team.png
index 86614cb..86614cb 100644
--- a/mindus/assets/blocks/defense/force-projector-team.png
+++ b/assets/blocks/defense/force-projector-team.png
Binary files differ
diff --git a/assets/blocks/defense/force-projector.png b/assets/blocks/defense/force-projector.png
new file mode 100644
index 0000000..72bd63e
--- /dev/null
+++ b/assets/blocks/defense/force-projector.png
Binary files differ
diff --git a/assets/blocks/defense/large-shield-projector-team.png b/assets/blocks/defense/large-shield-projector-team.png
new file mode 100644
index 0000000..b43d7d5
--- /dev/null
+++ b/assets/blocks/defense/large-shield-projector-team.png
Binary files differ
diff --git a/assets/blocks/defense/large-shield-projector.png b/assets/blocks/defense/large-shield-projector.png
new file mode 100644
index 0000000..ec01b32
--- /dev/null
+++ b/assets/blocks/defense/large-shield-projector.png
Binary files differ
diff --git a/assets/blocks/defense/mend-projector.png b/assets/blocks/defense/mend-projector.png
new file mode 100644
index 0000000..0b70091
--- /dev/null
+++ b/assets/blocks/defense/mend-projector.png
Binary files differ
diff --git a/assets/blocks/defense/mender.png b/assets/blocks/defense/mender.png
new file mode 100644
index 0000000..669378b
--- /dev/null
+++ b/assets/blocks/defense/mender.png
Binary files differ
diff --git a/assets/blocks/defense/overdrive-dome.png b/assets/blocks/defense/overdrive-dome.png
new file mode 100644
index 0000000..c52221e
--- /dev/null
+++ b/assets/blocks/defense/overdrive-dome.png
Binary files differ
diff --git a/assets/blocks/defense/overdrive-projector.png b/assets/blocks/defense/overdrive-projector.png
new file mode 100644
index 0000000..55fb163
--- /dev/null
+++ b/assets/blocks/defense/overdrive-projector.png
Binary files differ
diff --git a/mindus/assets/blocks/defense/radar.png b/assets/blocks/defense/radar.png
index 701beac..701beac 100644
--- a/mindus/assets/blocks/defense/radar.png
+++ b/assets/blocks/defense/radar.png
Binary files differ
diff --git a/assets/blocks/defense/regen-projector.png b/assets/blocks/defense/regen-projector.png
new file mode 100644
index 0000000..7bc0fd4
--- /dev/null
+++ b/assets/blocks/defense/regen-projector.png
Binary files differ
diff --git a/mindus/assets/blocks/defense/shield-projector-team.png b/assets/blocks/defense/shield-projector-team.png
index fdc00a2..fdc00a2 100644
--- a/mindus/assets/blocks/defense/shield-projector-team.png
+++ b/assets/blocks/defense/shield-projector-team.png
Binary files differ
diff --git a/assets/blocks/defense/shield-projector.png b/assets/blocks/defense/shield-projector.png
new file mode 100644
index 0000000..43717ca
--- /dev/null
+++ b/assets/blocks/defense/shield-projector.png
Binary files differ
diff --git a/assets/blocks/defense/shock-mine-team-top.png b/assets/blocks/defense/shock-mine-team-top.png
new file mode 100644
index 0000000..4ee60bc
--- /dev/null
+++ b/assets/blocks/defense/shock-mine-team-top.png
Binary files differ
diff --git a/mindus/assets/blocks/defense/shock-mine.png b/assets/blocks/defense/shock-mine.png
index 2f18055..2f18055 100644
--- a/mindus/assets/blocks/defense/shock-mine.png
+++ b/assets/blocks/defense/shock-mine.png
Binary files differ
diff --git a/assets/blocks/defense/shockwave-tower.png b/assets/blocks/defense/shockwave-tower.png
new file mode 100644
index 0000000..f6780d8
--- /dev/null
+++ b/assets/blocks/defense/shockwave-tower.png
Binary files differ
diff --git a/assets/blocks/distribution/bridge-arrow.png b/assets/blocks/distribution/bridge-arrow.png
new file mode 100644
index 0000000..e6c8859
--- /dev/null
+++ b/assets/blocks/distribution/bridge-arrow.png
Binary files differ
diff --git a/assets/blocks/distribution/bridge-conveyor-arrow.png b/assets/blocks/distribution/bridge-conveyor-arrow.png
new file mode 100644
index 0000000..b8b62bc
--- /dev/null
+++ b/assets/blocks/distribution/bridge-conveyor-arrow.png
Binary files differ
diff --git a/assets/blocks/distribution/bridge-conveyor-bridge.png b/assets/blocks/distribution/bridge-conveyor-bridge.png
new file mode 100644
index 0000000..947e48d
--- /dev/null
+++ b/assets/blocks/distribution/bridge-conveyor-bridge.png
Binary files differ
diff --git a/assets/blocks/distribution/bridge-conveyor-end.png b/assets/blocks/distribution/bridge-conveyor-end.png
new file mode 100644
index 0000000..48d3f85
--- /dev/null
+++ b/assets/blocks/distribution/bridge-conveyor-end.png
Binary files differ
diff --git a/assets/blocks/distribution/bridge-conveyor.png b/assets/blocks/distribution/bridge-conveyor.png
new file mode 100644
index 0000000..608ce88
--- /dev/null
+++ b/assets/blocks/distribution/bridge-conveyor.png
Binary files differ
diff --git a/assets/blocks/distribution/center.png b/assets/blocks/distribution/center.png
new file mode 100644
index 0000000..19def6b
--- /dev/null
+++ b/assets/blocks/distribution/center.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png
new file mode 100644
index 0000000..9becfdf
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png
new file mode 100644
index 0000000..4685ab6
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png
new file mode 100644
index 0000000..f10b176
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png
new file mode 100644
index 0000000..9c002ed
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png
new file mode 100644
index 0000000..25835e4
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png
new file mode 100644
index 0000000..21ed583
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png
new file mode 100644
index 0000000..f7c2705
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png
new file mode 100644
index 0000000..c31f105
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png
new file mode 100644
index 0000000..be087fa
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png
new file mode 100644
index 0000000..5c7a30a
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png
new file mode 100644
index 0000000..32bf421
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png
new file mode 100644
index 0000000..f2c6105
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png
new file mode 100644
index 0000000..04e8329
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png
new file mode 100644
index 0000000..72eba5c
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png
new file mode 100644
index 0000000..def3ab3
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png
new file mode 100644
index 0000000..efc9937
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png
new file mode 100644
index 0000000..7a70978
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png
new file mode 100644
index 0000000..b491de9
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png
new file mode 100644
index 0000000..5e846e8
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png
new file mode 100644
index 0000000..a5692f9
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png
new file mode 100644
index 0000000..7754791
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png
new file mode 100644
index 0000000..7b72bf6
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png
new file mode 100644
index 0000000..ce0d878
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png
new file mode 100644
index 0000000..741bfdb
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png
new file mode 100644
index 0000000..d4893ef
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png
new file mode 100644
index 0000000..e0539ef
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-0-0.png b/assets/blocks/distribution/conveyors/conveyor-0-0.png
new file mode 100644
index 0000000..4de81c8
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-0-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-0-1.png b/assets/blocks/distribution/conveyors/conveyor-0-1.png
new file mode 100644
index 0000000..e83ade5
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-0-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-0-2.png b/assets/blocks/distribution/conveyors/conveyor-0-2.png
new file mode 100644
index 0000000..3855016
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-0-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-0-3.png b/assets/blocks/distribution/conveyors/conveyor-0-3.png
new file mode 100644
index 0000000..5d0b247
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-0-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-1-0-h.png b/assets/blocks/distribution/conveyors/conveyor-1-0-h.png
new file mode 100644
index 0000000..75b477d
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-1-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-1-0.png b/assets/blocks/distribution/conveyors/conveyor-1-0.png
new file mode 100644
index 0000000..a8cfa5d
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-1-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-1-1-h.png b/assets/blocks/distribution/conveyors/conveyor-1-1-h.png
new file mode 100644
index 0000000..8e6eb5f
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-1-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-1-1-v.png b/assets/blocks/distribution/conveyors/conveyor-1-1-v.png
new file mode 100644
index 0000000..d78d194
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-1-1-v.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-1-1.png b/assets/blocks/distribution/conveyors/conveyor-1-1.png
new file mode 100644
index 0000000..90220b5
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-1-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-1-2.png b/assets/blocks/distribution/conveyors/conveyor-1-2.png
new file mode 100644
index 0000000..923223b
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-1-2.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-3.png b/assets/blocks/distribution/conveyors/conveyor-1-3.png
index 2905d1a..2905d1a 100644
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-3.png
+++ b/assets/blocks/distribution/conveyors/conveyor-1-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-0-h.png b/assets/blocks/distribution/conveyors/conveyor-2-0-h.png
new file mode 100644
index 0000000..6649a28
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-0-v.png b/assets/blocks/distribution/conveyors/conveyor-2-0-v.png
new file mode 100644
index 0000000..4a266b0
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-0-v.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-0.png b/assets/blocks/distribution/conveyors/conveyor-2-0.png
new file mode 100644
index 0000000..5d9eb5e
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-1-h.png b/assets/blocks/distribution/conveyors/conveyor-2-1-h.png
new file mode 100644
index 0000000..7e8d16f
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-1.png b/assets/blocks/distribution/conveyors/conveyor-2-1.png
new file mode 100644
index 0000000..798f6a6
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-2.png b/assets/blocks/distribution/conveyors/conveyor-2-2.png
new file mode 100644
index 0000000..14a9d78
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-3-h.png b/assets/blocks/distribution/conveyors/conveyor-2-3-h.png
new file mode 100644
index 0000000..07176a5
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-3-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-2-3.png b/assets/blocks/distribution/conveyors/conveyor-2-3.png
new file mode 100644
index 0000000..abcbebc
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-2-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-3-0-h.png b/assets/blocks/distribution/conveyors/conveyor-3-0-h.png
new file mode 100644
index 0000000..0ca52ba
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-3-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-3-0.png b/assets/blocks/distribution/conveyors/conveyor-3-0.png
new file mode 100644
index 0000000..6e38bc2
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-3-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-3-1.png b/assets/blocks/distribution/conveyors/conveyor-3-1.png
new file mode 100644
index 0000000..ebfd3ee
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-3-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-3-3.png b/assets/blocks/distribution/conveyors/conveyor-3-3.png
new file mode 100644
index 0000000..4abdb24
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-3-3.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-4-0.png b/assets/blocks/distribution/conveyors/conveyor-4-0.png
index b788db9..b788db9 100644
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-4-0.png
+++ b/assets/blocks/distribution/conveyors/conveyor-4-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-4-1.png b/assets/blocks/distribution/conveyors/conveyor-4-1.png
new file mode 100644
index 0000000..cf0ba78
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-4-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/conveyor-4-3.png b/assets/blocks/distribution/conveyors/conveyor-4-3.png
new file mode 100644
index 0000000..84cbd2d
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/conveyor-4-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png
new file mode 100644
index 0000000..bb2b4b2
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png
new file mode 100644
index 0000000..bd17828
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png
new file mode 100644
index 0000000..3de01c0
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png
new file mode 100644
index 0000000..5073271
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png
index 99602c3..99602c3 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png
new file mode 100644
index 0000000..749b079
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png
index e02adb4..e02adb4 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png
new file mode 100644
index 0000000..bc8ed5e
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png
index b50f7cf..b50f7cf 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png
new file mode 100644
index 0000000..368e08f
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png
new file mode 100644
index 0000000..d17a367
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png
new file mode 100644
index 0000000..3775277
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png
new file mode 100644
index 0000000..fd4c2fb
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png
new file mode 100644
index 0000000..f5ba433
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png
index 0ba3653..0ba3653 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png
index 4f5b154..4f5b154 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png
new file mode 100644
index 0000000..39379a8
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png
index 3bd7270..3bd7270 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png
new file mode 100644
index 0000000..546bd31
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png
new file mode 100644
index 0000000..09f7114
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png
new file mode 100644
index 0000000..24525f2
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png
new file mode 100644
index 0000000..2ef4cdf
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png
new file mode 100644
index 0000000..4877112
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png
index 079d383..079d383 100644
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png
new file mode 100644
index 0000000..e2b9517
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png
Binary files differ
diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png
new file mode 100644
index 0000000..2a1ca44
--- /dev/null
+++ b/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/distributor.png b/assets/blocks/distribution/distributor.png
index e4445dd..e4445dd 100644
--- a/mindus/assets/blocks/distribution/distributor.png
+++ b/assets/blocks/distribution/distributor.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-0-0.png b/assets/blocks/distribution/ducts/armored-duct-0-0.png
new file mode 100644
index 0000000..7cdf0be
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-0-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-0-1.png b/assets/blocks/distribution/ducts/armored-duct-0-1.png
new file mode 100644
index 0000000..9a5cd4d
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-0-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-0-2.png b/assets/blocks/distribution/ducts/armored-duct-0-2.png
new file mode 100644
index 0000000..793a84b
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-0-2.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-0-3.png b/assets/blocks/distribution/ducts/armored-duct-0-3.png
new file mode 100644
index 0000000..94aca00
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-0-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-0-h.png b/assets/blocks/distribution/ducts/armored-duct-1-0-h.png
new file mode 100644
index 0000000..d9a6ca8
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-0.png b/assets/blocks/distribution/ducts/armored-duct-1-0.png
new file mode 100644
index 0000000..4c02046
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-1-h.png b/assets/blocks/distribution/ducts/armored-duct-1-1-h.png
new file mode 100644
index 0000000..220ea63
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-1-v.png b/assets/blocks/distribution/ducts/armored-duct-1-1-v.png
new file mode 100644
index 0000000..107e5e1
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-1-v.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-1.png b/assets/blocks/distribution/ducts/armored-duct-1-1.png
new file mode 100644
index 0000000..ba68180
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-2.png b/assets/blocks/distribution/ducts/armored-duct-1-2.png
new file mode 100644
index 0000000..102b6c4
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-2.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-1-3.png b/assets/blocks/distribution/ducts/armored-duct-1-3.png
new file mode 100644
index 0000000..d5c7688
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-1-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-0-h.png b/assets/blocks/distribution/ducts/armored-duct-2-0-h.png
new file mode 100644
index 0000000..e2b75b7
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-0-v.png b/assets/blocks/distribution/ducts/armored-duct-2-0-v.png
new file mode 100644
index 0000000..51690bf
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-0-v.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-0.png b/assets/blocks/distribution/ducts/armored-duct-2-0.png
new file mode 100644
index 0000000..fd0c731
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-1-h.png b/assets/blocks/distribution/ducts/armored-duct-2-1-h.png
new file mode 100644
index 0000000..209c984
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-1.png b/assets/blocks/distribution/ducts/armored-duct-2-1.png
new file mode 100644
index 0000000..ab5b160
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-2.png b/assets/blocks/distribution/ducts/armored-duct-2-2.png
new file mode 100644
index 0000000..3a1d156
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-2.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-3-h.png b/assets/blocks/distribution/ducts/armored-duct-2-3-h.png
new file mode 100644
index 0000000..018ebc1
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-3-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-2-3.png b/assets/blocks/distribution/ducts/armored-duct-2-3.png
new file mode 100644
index 0000000..ee904a0
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-2-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-3-0-h.png b/assets/blocks/distribution/ducts/armored-duct-3-0-h.png
new file mode 100644
index 0000000..0a384b3
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-3-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-3-0.png b/assets/blocks/distribution/ducts/armored-duct-3-0.png
new file mode 100644
index 0000000..9371f1c
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-3-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-3-1.png b/assets/blocks/distribution/ducts/armored-duct-3-1.png
new file mode 100644
index 0000000..2a82680
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-3-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-3-3.png b/assets/blocks/distribution/ducts/armored-duct-3-3.png
new file mode 100644
index 0000000..d4ef678
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-3-3.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-4-0.png b/assets/blocks/distribution/ducts/armored-duct-4-0.png
index 985626c..985626c 100644
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-4-0.png
+++ b/assets/blocks/distribution/ducts/armored-duct-4-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-4-1.png b/assets/blocks/distribution/ducts/armored-duct-4-1.png
new file mode 100644
index 0000000..44f767f
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-4-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/armored-duct-4-3.png b/assets/blocks/distribution/ducts/armored-duct-4-3.png
new file mode 100644
index 0000000..4024c61
--- /dev/null
+++ b/assets/blocks/distribution/ducts/armored-duct-4-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-0-0.png b/assets/blocks/distribution/ducts/duct-0-0.png
new file mode 100644
index 0000000..3cec9b5
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-0-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-0-1.png b/assets/blocks/distribution/ducts/duct-0-1.png
new file mode 100644
index 0000000..2db5439
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-0-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-0-2.png b/assets/blocks/distribution/ducts/duct-0-2.png
new file mode 100644
index 0000000..6dac9e5
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-0-2.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-0-3.png b/assets/blocks/distribution/ducts/duct-0-3.png
new file mode 100644
index 0000000..e25d7bb
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-0-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-0-h.png b/assets/blocks/distribution/ducts/duct-1-0-h.png
new file mode 100644
index 0000000..11e4482
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-0.png b/assets/blocks/distribution/ducts/duct-1-0.png
new file mode 100644
index 0000000..6adcdeb
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-1-h.png b/assets/blocks/distribution/ducts/duct-1-1-h.png
new file mode 100644
index 0000000..1461ef0
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-1-v.png b/assets/blocks/distribution/ducts/duct-1-1-v.png
new file mode 100644
index 0000000..50bdb4f
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-1-v.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-1.png b/assets/blocks/distribution/ducts/duct-1-1.png
new file mode 100644
index 0000000..093189f
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-2.png b/assets/blocks/distribution/ducts/duct-1-2.png
new file mode 100644
index 0000000..5b7aae2
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-2.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-1-3.png b/assets/blocks/distribution/ducts/duct-1-3.png
new file mode 100644
index 0000000..cb72859
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-1-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-0-h.png b/assets/blocks/distribution/ducts/duct-2-0-h.png
new file mode 100644
index 0000000..4ddb3d1
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-0-v.png b/assets/blocks/distribution/ducts/duct-2-0-v.png
new file mode 100644
index 0000000..f841ec1
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-0-v.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-0.png b/assets/blocks/distribution/ducts/duct-2-0.png
new file mode 100644
index 0000000..c0afcfb
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-1-h.png b/assets/blocks/distribution/ducts/duct-2-1-h.png
new file mode 100644
index 0000000..b40e77e
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-1-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-1.png b/assets/blocks/distribution/ducts/duct-2-1.png
new file mode 100644
index 0000000..09eb774
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-2.png b/assets/blocks/distribution/ducts/duct-2-2.png
new file mode 100644
index 0000000..4da21f8
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-2.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-3-h.png b/assets/blocks/distribution/ducts/duct-2-3-h.png
new file mode 100644
index 0000000..1506bac
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-3-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-2-3.png b/assets/blocks/distribution/ducts/duct-2-3.png
new file mode 100644
index 0000000..0dd6aa3
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-2-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-3-0-h.png b/assets/blocks/distribution/ducts/duct-3-0-h.png
new file mode 100644
index 0000000..4b51f6d
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-3-0-h.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-3-0.png b/assets/blocks/distribution/ducts/duct-3-0.png
new file mode 100644
index 0000000..d1a331c
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-3-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-3-1.png b/assets/blocks/distribution/ducts/duct-3-1.png
new file mode 100644
index 0000000..6b20424
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-3-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-3-3.png b/assets/blocks/distribution/ducts/duct-3-3.png
new file mode 100644
index 0000000..e457a4c
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-3-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-4-0.png b/assets/blocks/distribution/ducts/duct-4-0.png
new file mode 100644
index 0000000..d490c36
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-4-0.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-4-1.png b/assets/blocks/distribution/ducts/duct-4-1.png
new file mode 100644
index 0000000..ea57f4a
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-4-1.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-4-3.png b/assets/blocks/distribution/ducts/duct-4-3.png
new file mode 100644
index 0000000..50eef92
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-4-3.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-base.png b/assets/blocks/distribution/ducts/duct-base.png
new file mode 100644
index 0000000..6aa0df3
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-base.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-bridge-arrow.png b/assets/blocks/distribution/ducts/duct-bridge-arrow.png
new file mode 100644
index 0000000..a00c8e9
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-bridge-arrow.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png b/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png
new file mode 100644
index 0000000..1625679
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-bridge-bridge.png b/assets/blocks/distribution/ducts/duct-bridge-bridge.png
new file mode 100644
index 0000000..533f3c3
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-bridge-bridge.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-bridge-dir.png b/assets/blocks/distribution/ducts/duct-bridge-dir.png
new file mode 100644
index 0000000..edca5f1
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-bridge-dir.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-bridge.png b/assets/blocks/distribution/ducts/duct-bridge.png
new file mode 100644
index 0000000..2448bc8
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-bridge.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-router.png b/assets/blocks/distribution/ducts/duct-router.png
new file mode 100644
index 0000000..2448bc8
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-router.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-unloader-top.png b/assets/blocks/distribution/ducts/duct-unloader-top.png
new file mode 100644
index 0000000..781bea4
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-unloader-top.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/duct-unloader.png b/assets/blocks/distribution/ducts/duct-unloader.png
new file mode 100644
index 0000000..b9ba79c
--- /dev/null
+++ b/assets/blocks/distribution/ducts/duct-unloader.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/overflow-duct.png b/assets/blocks/distribution/ducts/overflow-duct.png
index 6b3e6d0..6b3e6d0 100644
--- a/mindus/assets/blocks/distribution/ducts/overflow-duct.png
+++ b/assets/blocks/distribution/ducts/overflow-duct.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/surge-router.png b/assets/blocks/distribution/ducts/surge-router.png
new file mode 100644
index 0000000..c1cf722
--- /dev/null
+++ b/assets/blocks/distribution/ducts/surge-router.png
Binary files differ
diff --git a/assets/blocks/distribution/ducts/top.png b/assets/blocks/distribution/ducts/top.png
new file mode 100644
index 0000000..c7f9cd6
--- /dev/null
+++ b/assets/blocks/distribution/ducts/top.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/underflow-duct.png b/assets/blocks/distribution/ducts/underflow-duct.png
index f36bc41..f36bc41 100644
--- a/mindus/assets/blocks/distribution/ducts/underflow-duct.png
+++ b/assets/blocks/distribution/ducts/underflow-duct.png
Binary files differ
diff --git a/assets/blocks/distribution/inverted-sorter.png b/assets/blocks/distribution/inverted-sorter.png
new file mode 100644
index 0000000..2a75d17
--- /dev/null
+++ b/assets/blocks/distribution/inverted-sorter.png
Binary files differ
diff --git a/assets/blocks/distribution/item-source.png b/assets/blocks/distribution/item-source.png
new file mode 100644
index 0000000..d38ce01
--- /dev/null
+++ b/assets/blocks/distribution/item-source.png
Binary files differ
diff --git a/assets/blocks/distribution/item-void.png b/assets/blocks/distribution/item-void.png
new file mode 100644
index 0000000..0ef9612
--- /dev/null
+++ b/assets/blocks/distribution/item-void.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/junction.png b/assets/blocks/distribution/junction.png
index 0cdb020..0cdb020 100644
--- a/mindus/assets/blocks/distribution/junction.png
+++ b/assets/blocks/distribution/junction.png
Binary files differ
diff --git a/assets/blocks/distribution/mass-driver-base.png b/assets/blocks/distribution/mass-driver-base.png
new file mode 100644
index 0000000..23ad8cc
--- /dev/null
+++ b/assets/blocks/distribution/mass-driver-base.png
Binary files differ
diff --git a/assets/blocks/distribution/mass-driver.png b/assets/blocks/distribution/mass-driver.png
new file mode 100644
index 0000000..6c65bf1
--- /dev/null
+++ b/assets/blocks/distribution/mass-driver.png
Binary files differ
diff --git a/assets/blocks/distribution/overflow-gate.png b/assets/blocks/distribution/overflow-gate.png
new file mode 100644
index 0000000..534859f
--- /dev/null
+++ b/assets/blocks/distribution/overflow-gate.png
Binary files differ
diff --git a/assets/blocks/distribution/phase-conveyor-arrow.png b/assets/blocks/distribution/phase-conveyor-arrow.png
new file mode 100644
index 0000000..22198e8
--- /dev/null
+++ b/assets/blocks/distribution/phase-conveyor-arrow.png
Binary files differ
diff --git a/assets/blocks/distribution/phase-conveyor-bridge.png b/assets/blocks/distribution/phase-conveyor-bridge.png
new file mode 100644
index 0000000..176c3fc
--- /dev/null
+++ b/assets/blocks/distribution/phase-conveyor-bridge.png
Binary files differ
diff --git a/assets/blocks/distribution/phase-conveyor-end.png b/assets/blocks/distribution/phase-conveyor-end.png
new file mode 100644
index 0000000..090155a
--- /dev/null
+++ b/assets/blocks/distribution/phase-conveyor-end.png
Binary files differ
diff --git a/assets/blocks/distribution/phase-conveyor.png b/assets/blocks/distribution/phase-conveyor.png
new file mode 100644
index 0000000..6911b37
--- /dev/null
+++ b/assets/blocks/distribution/phase-conveyor.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/router.png b/assets/blocks/distribution/router.png
index c45605f..c45605f 100644
--- a/mindus/assets/blocks/distribution/router.png
+++ b/assets/blocks/distribution/router.png
Binary files differ
diff --git a/assets/blocks/distribution/sorter.png b/assets/blocks/distribution/sorter.png
new file mode 100644
index 0000000..9345206
--- /dev/null
+++ b/assets/blocks/distribution/sorter.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
new file mode 100644
index 0000000..2dc44db
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
new file mode 100644
index 0000000..e6d57f6
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
new file mode 100644
index 0000000..5c0272b
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png
new file mode 100644
index 0000000..7057c6c
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png
new file mode 100644
index 0000000..cc9890d
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png
new file mode 100644
index 0000000..0abdfc5
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png
new file mode 100644
index 0000000..34924be
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png
index dd3cd77..a0e5afe 100644
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png
+++ b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
new file mode 100644
index 0000000..67e479f
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
new file mode 100644
index 0000000..3f3cf2d
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png
new file mode 100644
index 0000000..5ef6959
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png
new file mode 100644
index 0000000..ccc72e5
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png
new file mode 100644
index 0000000..05d6385
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png
new file mode 100644
index 0000000..8ae4559
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png
Binary files differ
diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
new file mode 100644
index 0000000..3e82595
--- /dev/null
+++ b/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
Binary files differ
diff --git a/assets/blocks/distribution/underflow-gate.png b/assets/blocks/distribution/underflow-gate.png
new file mode 100644
index 0000000..92b6f26
--- /dev/null
+++ b/assets/blocks/distribution/underflow-gate.png
Binary files differ
diff --git a/assets/blocks/distribution/unit-cargo-unload-point-top.png b/assets/blocks/distribution/unit-cargo-unload-point-top.png
new file mode 100644
index 0000000..f447882
--- /dev/null
+++ b/assets/blocks/distribution/unit-cargo-unload-point-top.png
Binary files differ
diff --git a/assets/blocks/distribution/unit-cargo-unload-point.png b/assets/blocks/distribution/unit-cargo-unload-point.png
new file mode 100644
index 0000000..24cae6c
--- /dev/null
+++ b/assets/blocks/distribution/unit-cargo-unload-point.png
Binary files differ
diff --git a/assets/blocks/drills/blast-drill.png b/assets/blocks/drills/blast-drill.png
new file mode 100644
index 0000000..13ff22b
--- /dev/null
+++ b/assets/blocks/drills/blast-drill.png
Binary files differ
diff --git a/assets/blocks/drills/cliff-crusher-rotator.png b/assets/blocks/drills/cliff-crusher-rotator.png
new file mode 100644
index 0000000..6db2c8b
--- /dev/null
+++ b/assets/blocks/drills/cliff-crusher-rotator.png
Binary files differ
diff --git a/mindus/assets/blocks/drills/cliff-crusher-top.png b/assets/blocks/drills/cliff-crusher-top.png
index d883816..d883816 100644
--- a/mindus/assets/blocks/drills/cliff-crusher-top.png
+++ b/assets/blocks/drills/cliff-crusher-top.png
Binary files differ
diff --git a/assets/blocks/drills/cliff-crusher.png b/assets/blocks/drills/cliff-crusher.png
new file mode 100644
index 0000000..3c82a82
--- /dev/null
+++ b/assets/blocks/drills/cliff-crusher.png
Binary files differ
diff --git a/assets/blocks/drills/eruption-drill.png b/assets/blocks/drills/eruption-drill.png
new file mode 100644
index 0000000..0b43aa7
--- /dev/null
+++ b/assets/blocks/drills/eruption-drill.png
Binary files differ
diff --git a/assets/blocks/drills/impact-drill.png b/assets/blocks/drills/impact-drill.png
new file mode 100644
index 0000000..62be316
--- /dev/null
+++ b/assets/blocks/drills/impact-drill.png
Binary files differ
diff --git a/assets/blocks/drills/large-plasma-bore-top.png b/assets/blocks/drills/large-plasma-bore-top.png
new file mode 100644
index 0000000..6bc63a7
--- /dev/null
+++ b/assets/blocks/drills/large-plasma-bore-top.png
Binary files differ
diff --git a/assets/blocks/drills/large-plasma-bore.png b/assets/blocks/drills/large-plasma-bore.png
new file mode 100644
index 0000000..704a773
--- /dev/null
+++ b/assets/blocks/drills/large-plasma-bore.png
Binary files differ
diff --git a/assets/blocks/drills/laser-drill.png b/assets/blocks/drills/laser-drill.png
new file mode 100644
index 0000000..b0f94cb
--- /dev/null
+++ b/assets/blocks/drills/laser-drill.png
Binary files differ
diff --git a/assets/blocks/drills/mechanical-drill.png b/assets/blocks/drills/mechanical-drill.png
new file mode 100644
index 0000000..354b9b0
--- /dev/null
+++ b/assets/blocks/drills/mechanical-drill.png
Binary files differ
diff --git a/assets/blocks/drills/oil-extractor.png b/assets/blocks/drills/oil-extractor.png
new file mode 100644
index 0000000..18e84d7
--- /dev/null
+++ b/assets/blocks/drills/oil-extractor.png
Binary files differ
diff --git a/assets/blocks/drills/plasma-bore-top.png b/assets/blocks/drills/plasma-bore-top.png
new file mode 100644
index 0000000..c6cffe7
--- /dev/null
+++ b/assets/blocks/drills/plasma-bore-top.png
Binary files differ
diff --git a/assets/blocks/drills/plasma-bore.png b/assets/blocks/drills/plasma-bore.png
new file mode 100644
index 0000000..3fb5950
--- /dev/null
+++ b/assets/blocks/drills/plasma-bore.png
Binary files differ
diff --git a/assets/blocks/drills/pneumatic-drill.png b/assets/blocks/drills/pneumatic-drill.png
new file mode 100644
index 0000000..3bbada9
--- /dev/null
+++ b/assets/blocks/drills/pneumatic-drill.png
Binary files differ
diff --git a/assets/blocks/drills/vent-condenser.png b/assets/blocks/drills/vent-condenser.png
new file mode 100644
index 0000000..ed715bd
--- /dev/null
+++ b/assets/blocks/drills/vent-condenser.png
Binary files differ
diff --git a/assets/blocks/drills/water-extractor.png b/assets/blocks/drills/water-extractor.png
new file mode 100644
index 0000000..3579707
--- /dev/null
+++ b/assets/blocks/drills/water-extractor.png
Binary files differ
diff --git a/assets/blocks/environment/arkycite-floor.png b/assets/blocks/environment/arkycite-floor.png
new file mode 100644
index 0000000..5ae0096
--- /dev/null
+++ b/assets/blocks/environment/arkycite-floor.png
Binary files differ
diff --git a/assets/blocks/environment/arkyic-boulder.png b/assets/blocks/environment/arkyic-boulder.png
new file mode 100644
index 0000000..de89b97
--- /dev/null
+++ b/assets/blocks/environment/arkyic-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/arkyic-stone.png b/assets/blocks/environment/arkyic-stone.png
new file mode 100644
index 0000000..5f396a8
--- /dev/null
+++ b/assets/blocks/environment/arkyic-stone.png
Binary files differ
diff --git a/assets/blocks/environment/arkyic-vent.png b/assets/blocks/environment/arkyic-vent.png
new file mode 100644
index 0000000..f67cbe3
--- /dev/null
+++ b/assets/blocks/environment/arkyic-vent.png
Binary files differ
diff --git a/assets/blocks/environment/arkyic-wall-large.png b/assets/blocks/environment/arkyic-wall-large.png
new file mode 100644
index 0000000..6e1f48a
--- /dev/null
+++ b/assets/blocks/environment/arkyic-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/arkyic-wall.png b/assets/blocks/environment/arkyic-wall.png
new file mode 100644
index 0000000..2977b20
--- /dev/null
+++ b/assets/blocks/environment/arkyic-wall.png
Binary files differ
diff --git a/assets/blocks/environment/basalt-boulder.png b/assets/blocks/environment/basalt-boulder.png
new file mode 100644
index 0000000..6f4ce91
--- /dev/null
+++ b/assets/blocks/environment/basalt-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/basalt.png b/assets/blocks/environment/basalt.png
new file mode 100644
index 0000000..93ee858
--- /dev/null
+++ b/assets/blocks/environment/basalt.png
Binary files differ
diff --git a/assets/blocks/environment/beryllic-boulder.png b/assets/blocks/environment/beryllic-boulder.png
new file mode 100644
index 0000000..a039a47
--- /dev/null
+++ b/assets/blocks/environment/beryllic-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/beryllic-stone-wall-large.png b/assets/blocks/environment/beryllic-stone-wall-large.png
new file mode 100644
index 0000000..4f6eccf
--- /dev/null
+++ b/assets/blocks/environment/beryllic-stone-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/beryllic-stone-wall.png b/assets/blocks/environment/beryllic-stone-wall.png
new file mode 100644
index 0000000..081d262
--- /dev/null
+++ b/assets/blocks/environment/beryllic-stone-wall.png
Binary files differ
diff --git a/assets/blocks/environment/beryllic-stone.png b/assets/blocks/environment/beryllic-stone.png
new file mode 100644
index 0000000..6a6720a
--- /dev/null
+++ b/assets/blocks/environment/beryllic-stone.png
Binary files differ
diff --git a/assets/blocks/environment/bluemat.png b/assets/blocks/environment/bluemat.png
new file mode 100644
index 0000000..e15530a
--- /dev/null
+++ b/assets/blocks/environment/bluemat.png
Binary files differ
diff --git a/assets/blocks/environment/boulder.png b/assets/blocks/environment/boulder.png
new file mode 100644
index 0000000..a9bf280
--- /dev/null
+++ b/assets/blocks/environment/boulder.png
Binary files differ
diff --git a/assets/blocks/environment/carbon-boulder.png b/assets/blocks/environment/carbon-boulder.png
new file mode 100644
index 0000000..48c8efc
--- /dev/null
+++ b/assets/blocks/environment/carbon-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/carbon-stone.png b/assets/blocks/environment/carbon-stone.png
new file mode 100644
index 0000000..76bde92
--- /dev/null
+++ b/assets/blocks/environment/carbon-stone.png
Binary files differ
diff --git a/assets/blocks/environment/carbon-vent.png b/assets/blocks/environment/carbon-vent.png
new file mode 100644
index 0000000..d3e2570
--- /dev/null
+++ b/assets/blocks/environment/carbon-vent.png
Binary files differ
diff --git a/assets/blocks/environment/carbon-wall-large.png b/assets/blocks/environment/carbon-wall-large.png
new file mode 100644
index 0000000..653ae35
--- /dev/null
+++ b/assets/blocks/environment/carbon-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/carbon-wall.png b/assets/blocks/environment/carbon-wall.png
new file mode 100644
index 0000000..92a5e81
--- /dev/null
+++ b/assets/blocks/environment/carbon-wall.png
Binary files differ
diff --git a/assets/blocks/environment/char.png b/assets/blocks/environment/char.png
new file mode 100644
index 0000000..c6340ed
--- /dev/null
+++ b/assets/blocks/environment/char.png
Binary files differ
diff --git a/assets/blocks/environment/core-zone.png b/assets/blocks/environment/core-zone.png
new file mode 100644
index 0000000..0a7bf40
--- /dev/null
+++ b/assets/blocks/environment/core-zone.png
Binary files differ
diff --git a/assets/blocks/environment/crater-stone.png b/assets/blocks/environment/crater-stone.png
new file mode 100644
index 0000000..9cfc92f
--- /dev/null
+++ b/assets/blocks/environment/crater-stone.png
Binary files differ
diff --git a/assets/blocks/environment/crystal-blocks.png b/assets/blocks/environment/crystal-blocks.png
new file mode 100644
index 0000000..0acc3d3
--- /dev/null
+++ b/assets/blocks/environment/crystal-blocks.png
Binary files differ
diff --git a/assets/blocks/environment/crystal-cluster.png b/assets/blocks/environment/crystal-cluster.png
new file mode 100644
index 0000000..b3454ef
--- /dev/null
+++ b/assets/blocks/environment/crystal-cluster.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-floor1.png b/assets/blocks/environment/crystal-floor.png
index 4ff6b86..4ff6b86 100644
--- a/mindus/assets/blocks/environment/crystal-floor1.png
+++ b/assets/blocks/environment/crystal-floor.png
Binary files differ
diff --git a/assets/blocks/environment/crystal-orbs.png b/assets/blocks/environment/crystal-orbs.png
new file mode 100644
index 0000000..4055f3b
--- /dev/null
+++ b/assets/blocks/environment/crystal-orbs.png
Binary files differ
diff --git a/assets/blocks/environment/crystalline-boulder.png b/assets/blocks/environment/crystalline-boulder.png
new file mode 100644
index 0000000..462dccd
--- /dev/null
+++ b/assets/blocks/environment/crystalline-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/crystalline-stone-wall-large.png b/assets/blocks/environment/crystalline-stone-wall-large.png
new file mode 100644
index 0000000..17962ee
--- /dev/null
+++ b/assets/blocks/environment/crystalline-stone-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/crystalline-stone-wall.png b/assets/blocks/environment/crystalline-stone-wall.png
new file mode 100644
index 0000000..427bf7f
--- /dev/null
+++ b/assets/blocks/environment/crystalline-stone-wall.png
Binary files differ
diff --git a/assets/blocks/environment/crystalline-stone.png b/assets/blocks/environment/crystalline-stone.png
new file mode 100644
index 0000000..01fe740
--- /dev/null
+++ b/assets/blocks/environment/crystalline-stone.png
Binary files differ
diff --git a/assets/blocks/environment/crystalline-vent.png b/assets/blocks/environment/crystalline-vent.png
new file mode 100644
index 0000000..2de8864
--- /dev/null
+++ b/assets/blocks/environment/crystalline-vent.png
Binary files differ
diff --git a/assets/blocks/environment/dacite-boulder.png b/assets/blocks/environment/dacite-boulder.png
new file mode 100644
index 0000000..1a550b2
--- /dev/null
+++ b/assets/blocks/environment/dacite-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/dacite-wall-large.png b/assets/blocks/environment/dacite-wall-large.png
new file mode 100644
index 0000000..a1d94c5
--- /dev/null
+++ b/assets/blocks/environment/dacite-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/dacite-wall.png b/assets/blocks/environment/dacite-wall.png
new file mode 100644
index 0000000..23ef79d
--- /dev/null
+++ b/assets/blocks/environment/dacite-wall.png
Binary files differ
diff --git a/assets/blocks/environment/dacite.png b/assets/blocks/environment/dacite.png
new file mode 100644
index 0000000..470473a
--- /dev/null
+++ b/assets/blocks/environment/dacite.png
Binary files differ
diff --git a/assets/blocks/environment/dark-metal-large.png b/assets/blocks/environment/dark-metal-large.png
new file mode 100644
index 0000000..aba348c
--- /dev/null
+++ b/assets/blocks/environment/dark-metal-large.png
Binary files differ
diff --git a/assets/blocks/environment/dark-metal.png b/assets/blocks/environment/dark-metal.png
new file mode 100644
index 0000000..2adeae1
--- /dev/null
+++ b/assets/blocks/environment/dark-metal.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-1.png b/assets/blocks/environment/dark-panel-1.png
new file mode 100644
index 0000000..04e6b15
--- /dev/null
+++ b/assets/blocks/environment/dark-panel-1.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-2.png b/assets/blocks/environment/dark-panel-2.png
new file mode 100644
index 0000000..adbc44f
--- /dev/null
+++ b/assets/blocks/environment/dark-panel-2.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-3.png b/assets/blocks/environment/dark-panel-3.png
new file mode 100644
index 0000000..7a3c38e
--- /dev/null
+++ b/assets/blocks/environment/dark-panel-3.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-4.png b/assets/blocks/environment/dark-panel-4.png
new file mode 100644
index 0000000..3030229
--- /dev/null
+++ b/assets/blocks/environment/dark-panel-4.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-panel-5.png b/assets/blocks/environment/dark-panel-5.png
index c956695..c956695 100644
--- a/mindus/assets/blocks/environment/dark-panel-5.png
+++ b/assets/blocks/environment/dark-panel-5.png
Binary files differ
diff --git a/assets/blocks/environment/dark-panel-6.png b/assets/blocks/environment/dark-panel-6.png
new file mode 100644
index 0000000..d7d3ba2
--- /dev/null
+++ b/assets/blocks/environment/dark-panel-6.png
Binary files differ
diff --git a/assets/blocks/environment/darksand-tainted-water.png b/assets/blocks/environment/darksand-tainted-water.png
new file mode 100644
index 0000000..7f74cca
--- /dev/null
+++ b/assets/blocks/environment/darksand-tainted-water.png
Binary files differ
diff --git a/assets/blocks/environment/darksand-water.png b/assets/blocks/environment/darksand-water.png
new file mode 100644
index 0000000..61c769d
--- /dev/null
+++ b/assets/blocks/environment/darksand-water.png
Binary files differ
diff --git a/assets/blocks/environment/darksand.png b/assets/blocks/environment/darksand.png
new file mode 100644
index 0000000..ef61797
--- /dev/null
+++ b/assets/blocks/environment/darksand.png
Binary files differ
diff --git a/assets/blocks/environment/deep-tainted-water.png b/assets/blocks/environment/deep-tainted-water.png
new file mode 100644
index 0000000..e06ab6a
--- /dev/null
+++ b/assets/blocks/environment/deep-tainted-water.png
Binary files differ
diff --git a/assets/blocks/environment/deep-water.png b/assets/blocks/environment/deep-water.png
new file mode 100644
index 0000000..ff4ee69
--- /dev/null
+++ b/assets/blocks/environment/deep-water.png
Binary files differ
diff --git a/assets/blocks/environment/dense-red-stone.png b/assets/blocks/environment/dense-red-stone.png
new file mode 100644
index 0000000..40d1694
--- /dev/null
+++ b/assets/blocks/environment/dense-red-stone.png
Binary files differ
diff --git a/assets/blocks/environment/dirt-wall-large.png b/assets/blocks/environment/dirt-wall-large.png
new file mode 100644
index 0000000..7e5f8f0
--- /dev/null
+++ b/assets/blocks/environment/dirt-wall-large.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/dirt-wall2.png b/assets/blocks/environment/dirt-wall.png
index f76d30d..f76d30d 100644
--- a/mindus/assets/blocks/environment/dirt-wall2.png
+++ b/assets/blocks/environment/dirt-wall.png
Binary files differ
diff --git a/assets/blocks/environment/dirt.png b/assets/blocks/environment/dirt.png
new file mode 100644
index 0000000..1f2b788
--- /dev/null
+++ b/assets/blocks/environment/dirt.png
Binary files differ
diff --git a/assets/blocks/environment/dune-wall-large.png b/assets/blocks/environment/dune-wall-large.png
new file mode 100644
index 0000000..737b09d
--- /dev/null
+++ b/assets/blocks/environment/dune-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/dune-wall.png b/assets/blocks/environment/dune-wall.png
new file mode 100644
index 0000000..22341de
--- /dev/null
+++ b/assets/blocks/environment/dune-wall.png
Binary files differ
diff --git a/assets/blocks/environment/ferric-boulder.png b/assets/blocks/environment/ferric-boulder.png
new file mode 100644
index 0000000..e7221a8
--- /dev/null
+++ b/assets/blocks/environment/ferric-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/ferric-craters.png b/assets/blocks/environment/ferric-craters.png
new file mode 100644
index 0000000..83155f5
--- /dev/null
+++ b/assets/blocks/environment/ferric-craters.png
Binary files differ
diff --git a/assets/blocks/environment/ferric-stone-wall-large.png b/assets/blocks/environment/ferric-stone-wall-large.png
new file mode 100644
index 0000000..a0bbb83
--- /dev/null
+++ b/assets/blocks/environment/ferric-stone-wall-large.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone-wall2.png b/assets/blocks/environment/ferric-stone-wall.png
index fac2fcc..fac2fcc 100644
--- a/mindus/assets/blocks/environment/ferric-stone-wall2.png
+++ b/assets/blocks/environment/ferric-stone-wall.png
Binary files differ
diff --git a/assets/blocks/environment/ferric-stone.png b/assets/blocks/environment/ferric-stone.png
new file mode 100644
index 0000000..2dabf3d
--- /dev/null
+++ b/assets/blocks/environment/ferric-stone.png
Binary files differ
diff --git a/assets/blocks/environment/graphitic-wall-large.png b/assets/blocks/environment/graphitic-wall-large.png
new file mode 100644
index 0000000..0148959
--- /dev/null
+++ b/assets/blocks/environment/graphitic-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/graphitic-wall.png b/assets/blocks/environment/graphitic-wall.png
new file mode 100644
index 0000000..0d5bbfa
--- /dev/null
+++ b/assets/blocks/environment/graphitic-wall.png
Binary files differ
diff --git a/assets/blocks/environment/grass.png b/assets/blocks/environment/grass.png
new file mode 100644
index 0000000..662dc7b
--- /dev/null
+++ b/assets/blocks/environment/grass.png
Binary files differ
diff --git a/assets/blocks/environment/hotrock.png b/assets/blocks/environment/hotrock.png
new file mode 100644
index 0000000..1aa6bb3
--- /dev/null
+++ b/assets/blocks/environment/hotrock.png
Binary files differ
diff --git a/assets/blocks/environment/ice-snow.png b/assets/blocks/environment/ice-snow.png
new file mode 100644
index 0000000..3711749
--- /dev/null
+++ b/assets/blocks/environment/ice-snow.png
Binary files differ
diff --git a/assets/blocks/environment/ice-wall-large.png b/assets/blocks/environment/ice-wall-large.png
new file mode 100644
index 0000000..e0ffd14
--- /dev/null
+++ b/assets/blocks/environment/ice-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/ice-wall.png b/assets/blocks/environment/ice-wall.png
new file mode 100644
index 0000000..3e38dbc
--- /dev/null
+++ b/assets/blocks/environment/ice-wall.png
Binary files differ
diff --git a/assets/blocks/environment/ice.png b/assets/blocks/environment/ice.png
new file mode 100644
index 0000000..664678d
--- /dev/null
+++ b/assets/blocks/environment/ice.png
Binary files differ
diff --git a/assets/blocks/environment/magmarock.png b/assets/blocks/environment/magmarock.png
new file mode 100644
index 0000000..45626c1
--- /dev/null
+++ b/assets/blocks/environment/magmarock.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-2.png b/assets/blocks/environment/metal-floor-2.png
new file mode 100644
index 0000000..4b0569e
--- /dev/null
+++ b/assets/blocks/environment/metal-floor-2.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-3.png b/assets/blocks/environment/metal-floor-3.png
new file mode 100644
index 0000000..38ecedb
--- /dev/null
+++ b/assets/blocks/environment/metal-floor-3.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-4.png b/assets/blocks/environment/metal-floor-4.png
index 6c17203..6c17203 100644
--- a/mindus/assets/blocks/environment/metal-floor-4.png
+++ b/assets/blocks/environment/metal-floor-4.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-5.png b/assets/blocks/environment/metal-floor-5.png
new file mode 100644
index 0000000..ae13ed0
--- /dev/null
+++ b/assets/blocks/environment/metal-floor-5.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor-damaged.png b/assets/blocks/environment/metal-floor-damaged.png
new file mode 100644
index 0000000..5f60992
--- /dev/null
+++ b/assets/blocks/environment/metal-floor-damaged.png
Binary files differ
diff --git a/assets/blocks/environment/metal-floor.png b/assets/blocks/environment/metal-floor.png
new file mode 100644
index 0000000..c8483c7
--- /dev/null
+++ b/assets/blocks/environment/metal-floor.png
Binary files differ
diff --git a/assets/blocks/environment/molten-slag.png b/assets/blocks/environment/molten-slag.png
new file mode 100644
index 0000000..1d41627
--- /dev/null
+++ b/assets/blocks/environment/molten-slag.png
Binary files differ
diff --git a/assets/blocks/environment/moss.png b/assets/blocks/environment/moss.png
new file mode 100644
index 0000000..a835175
--- /dev/null
+++ b/assets/blocks/environment/moss.png
Binary files differ
diff --git a/assets/blocks/environment/mud.png b/assets/blocks/environment/mud.png
new file mode 100644
index 0000000..834c1ee
--- /dev/null
+++ b/assets/blocks/environment/mud.png
Binary files differ
diff --git a/assets/blocks/environment/ore-beryllium.png b/assets/blocks/environment/ore-beryllium.png
new file mode 100644
index 0000000..f44c8aa
--- /dev/null
+++ b/assets/blocks/environment/ore-beryllium.png
Binary files differ
diff --git a/assets/blocks/environment/ore-coal.png b/assets/blocks/environment/ore-coal.png
new file mode 100644
index 0000000..1c81d5f
--- /dev/null
+++ b/assets/blocks/environment/ore-coal.png
Binary files differ
diff --git a/assets/blocks/environment/ore-copper.png b/assets/blocks/environment/ore-copper.png
new file mode 100644
index 0000000..2bc09fb
--- /dev/null
+++ b/assets/blocks/environment/ore-copper.png
Binary files differ
diff --git a/assets/blocks/environment/ore-crystal-thorium.png b/assets/blocks/environment/ore-crystal-thorium.png
new file mode 100644
index 0000000..82bd3f2
--- /dev/null
+++ b/assets/blocks/environment/ore-crystal-thorium.png
Binary files differ
diff --git a/assets/blocks/environment/ore-lead.png b/assets/blocks/environment/ore-lead.png
new file mode 100644
index 0000000..0058d07
--- /dev/null
+++ b/assets/blocks/environment/ore-lead.png
Binary files differ
diff --git a/assets/blocks/environment/ore-scrap.png b/assets/blocks/environment/ore-scrap.png
new file mode 100644
index 0000000..27f40ac
--- /dev/null
+++ b/assets/blocks/environment/ore-scrap.png
Binary files differ
diff --git a/assets/blocks/environment/ore-thorium.png b/assets/blocks/environment/ore-thorium.png
new file mode 100644
index 0000000..f374c01
--- /dev/null
+++ b/assets/blocks/environment/ore-thorium.png
Binary files differ
diff --git a/assets/blocks/environment/ore-titanium.png b/assets/blocks/environment/ore-titanium.png
new file mode 100644
index 0000000..944c4ff
--- /dev/null
+++ b/assets/blocks/environment/ore-titanium.png
Binary files differ
diff --git a/assets/blocks/environment/ore-tungsten.png b/assets/blocks/environment/ore-tungsten.png
new file mode 100644
index 0000000..10d2923
--- /dev/null
+++ b/assets/blocks/environment/ore-tungsten.png
Binary files differ
diff --git a/assets/blocks/environment/ore-wall-beryllium.png b/assets/blocks/environment/ore-wall-beryllium.png
new file mode 100644
index 0000000..a1116d2
--- /dev/null
+++ b/assets/blocks/environment/ore-wall-beryllium.png
Binary files differ
diff --git a/assets/blocks/environment/ore-wall-thorium.png b/assets/blocks/environment/ore-wall-thorium.png
new file mode 100644
index 0000000..32b255a
--- /dev/null
+++ b/assets/blocks/environment/ore-wall-thorium.png
Binary files differ
diff --git a/assets/blocks/environment/ore-wall-tungsten.png b/assets/blocks/environment/ore-wall-tungsten.png
new file mode 100644
index 0000000..8c1b599
--- /dev/null
+++ b/assets/blocks/environment/ore-wall-tungsten.png
Binary files differ
diff --git a/assets/blocks/environment/pebbles.png b/assets/blocks/environment/pebbles.png
new file mode 100644
index 0000000..03b56d6
--- /dev/null
+++ b/assets/blocks/environment/pebbles.png
Binary files differ
diff --git a/assets/blocks/environment/pine.png b/assets/blocks/environment/pine.png
new file mode 100644
index 0000000..dd252cc
--- /dev/null
+++ b/assets/blocks/environment/pine.png
Binary files differ
diff --git a/assets/blocks/environment/pooled-cryofluid.png b/assets/blocks/environment/pooled-cryofluid.png
new file mode 100644
index 0000000..aa36067
--- /dev/null
+++ b/assets/blocks/environment/pooled-cryofluid.png
Binary files differ
diff --git a/assets/blocks/environment/pur-bush.png b/assets/blocks/environment/pur-bush.png
new file mode 100644
index 0000000..24fee97
--- /dev/null
+++ b/assets/blocks/environment/pur-bush.png
Binary files differ
diff --git a/assets/blocks/environment/red-diamond-wall.png b/assets/blocks/environment/red-diamond-wall.png
new file mode 100644
index 0000000..b751674
--- /dev/null
+++ b/assets/blocks/environment/red-diamond-wall.png
Binary files differ
diff --git a/assets/blocks/environment/red-ice-boulder.png b/assets/blocks/environment/red-ice-boulder.png
new file mode 100644
index 0000000..4ad47a5
--- /dev/null
+++ b/assets/blocks/environment/red-ice-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/red-ice-wall-large.png b/assets/blocks/environment/red-ice-wall-large.png
new file mode 100644
index 0000000..7fe0b04
--- /dev/null
+++ b/assets/blocks/environment/red-ice-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/red-ice-wall.png b/assets/blocks/environment/red-ice-wall.png
new file mode 100644
index 0000000..048c572
--- /dev/null
+++ b/assets/blocks/environment/red-ice-wall.png
Binary files differ
diff --git a/assets/blocks/environment/red-ice.png b/assets/blocks/environment/red-ice.png
new file mode 100644
index 0000000..d54cf8a
--- /dev/null
+++ b/assets/blocks/environment/red-ice.png
Binary files differ
diff --git a/assets/blocks/environment/red-stone-boulder.png b/assets/blocks/environment/red-stone-boulder.png
new file mode 100644
index 0000000..2770255
--- /dev/null
+++ b/assets/blocks/environment/red-stone-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/red-stone-vent.png b/assets/blocks/environment/red-stone-vent.png
new file mode 100644
index 0000000..b71ab18
--- /dev/null
+++ b/assets/blocks/environment/red-stone-vent.png
Binary files differ
diff --git a/assets/blocks/environment/red-stone-wall-large.png b/assets/blocks/environment/red-stone-wall-large.png
new file mode 100644
index 0000000..1cb7808
--- /dev/null
+++ b/assets/blocks/environment/red-stone-wall-large.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-wall3.png b/assets/blocks/environment/red-stone-wall.png
index 9c9182c..9c9182c 100644
--- a/mindus/assets/blocks/environment/red-stone-wall3.png
+++ b/assets/blocks/environment/red-stone-wall.png
Binary files differ
diff --git a/assets/blocks/environment/red-stone.png b/assets/blocks/environment/red-stone.png
new file mode 100644
index 0000000..66e5b06
--- /dev/null
+++ b/assets/blocks/environment/red-stone.png
Binary files differ
diff --git a/assets/blocks/environment/redmat.png b/assets/blocks/environment/redmat.png
new file mode 100644
index 0000000..f9df183
--- /dev/null
+++ b/assets/blocks/environment/redmat.png
Binary files differ
diff --git a/assets/blocks/environment/redweed.png b/assets/blocks/environment/redweed.png
new file mode 100644
index 0000000..2ac97d5
--- /dev/null
+++ b/assets/blocks/environment/redweed.png
Binary files differ
diff --git a/assets/blocks/environment/regolith-wall-large.png b/assets/blocks/environment/regolith-wall-large.png
new file mode 100644
index 0000000..271ed82
--- /dev/null
+++ b/assets/blocks/environment/regolith-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/regolith-wall.png b/assets/blocks/environment/regolith-wall.png
new file mode 100644
index 0000000..a8b0ec4
--- /dev/null
+++ b/assets/blocks/environment/regolith-wall.png
Binary files differ
diff --git a/assets/blocks/environment/regolith.png b/assets/blocks/environment/regolith.png
new file mode 100644
index 0000000..cb318b5
--- /dev/null
+++ b/assets/blocks/environment/regolith.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-boulder.png b/assets/blocks/environment/rhyolite-boulder.png
new file mode 100644
index 0000000..26bb4e4
--- /dev/null
+++ b/assets/blocks/environment/rhyolite-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-crater.png b/assets/blocks/environment/rhyolite-crater.png
new file mode 100644
index 0000000..e35a1b3
--- /dev/null
+++ b/assets/blocks/environment/rhyolite-crater.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-vent.png b/assets/blocks/environment/rhyolite-vent.png
new file mode 100644
index 0000000..d7b7ed0
--- /dev/null
+++ b/assets/blocks/environment/rhyolite-vent.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-wall-large.png b/assets/blocks/environment/rhyolite-wall-large.png
new file mode 100644
index 0000000..187550b
--- /dev/null
+++ b/assets/blocks/environment/rhyolite-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite-wall.png b/assets/blocks/environment/rhyolite-wall.png
new file mode 100644
index 0000000..5b84e45
--- /dev/null
+++ b/assets/blocks/environment/rhyolite-wall.png
Binary files differ
diff --git a/assets/blocks/environment/rhyolite.png b/assets/blocks/environment/rhyolite.png
new file mode 100644
index 0000000..37fba67
--- /dev/null
+++ b/assets/blocks/environment/rhyolite.png
Binary files differ
diff --git a/assets/blocks/environment/rough-rhyolite.png b/assets/blocks/environment/rough-rhyolite.png
new file mode 100644
index 0000000..9700fff
--- /dev/null
+++ b/assets/blocks/environment/rough-rhyolite.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/salt-wall-large.png b/assets/blocks/environment/salt-wall-large.png
index 48aa491..48aa491 100644
--- a/mindus/assets/blocks/environment/salt-wall-large.png
+++ b/assets/blocks/environment/salt-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/salt-wall.png b/assets/blocks/environment/salt-wall.png
new file mode 100644
index 0000000..037a1ce
--- /dev/null
+++ b/assets/blocks/environment/salt-wall.png
Binary files differ
diff --git a/assets/blocks/environment/salt.png b/assets/blocks/environment/salt.png
new file mode 100644
index 0000000..a693c13
--- /dev/null
+++ b/assets/blocks/environment/salt.png
Binary files differ
diff --git a/assets/blocks/environment/sand-boulder.png b/assets/blocks/environment/sand-boulder.png
new file mode 100644
index 0000000..3019018
--- /dev/null
+++ b/assets/blocks/environment/sand-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/sand-floor.png b/assets/blocks/environment/sand-floor.png
new file mode 100644
index 0000000..9c5f4e9
--- /dev/null
+++ b/assets/blocks/environment/sand-floor.png
Binary files differ
diff --git a/assets/blocks/environment/sand-wall-large.png b/assets/blocks/environment/sand-wall-large.png
new file mode 100644
index 0000000..eed7bc9
--- /dev/null
+++ b/assets/blocks/environment/sand-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/sand-wall.png b/assets/blocks/environment/sand-wall.png
new file mode 100644
index 0000000..a67d570
--- /dev/null
+++ b/assets/blocks/environment/sand-wall.png
Binary files differ
diff --git a/assets/blocks/environment/sand-water.png b/assets/blocks/environment/sand-water.png
new file mode 100644
index 0000000..0ff663c
--- /dev/null
+++ b/assets/blocks/environment/sand-water.png
Binary files differ
diff --git a/assets/blocks/environment/shale-boulder.png b/assets/blocks/environment/shale-boulder.png
new file mode 100644
index 0000000..b12a026
--- /dev/null
+++ b/assets/blocks/environment/shale-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/shale-wall-large.png b/assets/blocks/environment/shale-wall-large.png
new file mode 100644
index 0000000..0bdf3e2
--- /dev/null
+++ b/assets/blocks/environment/shale-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/shale-wall.png b/assets/blocks/environment/shale-wall.png
new file mode 100644
index 0000000..a102590
--- /dev/null
+++ b/assets/blocks/environment/shale-wall.png
Binary files differ
diff --git a/assets/blocks/environment/shale.png b/assets/blocks/environment/shale.png
new file mode 100644
index 0000000..a0469bc
--- /dev/null
+++ b/assets/blocks/environment/shale.png
Binary files differ
diff --git a/assets/blocks/environment/shallow-water.png b/assets/blocks/environment/shallow-water.png
new file mode 100644
index 0000000..16dc4d0
--- /dev/null
+++ b/assets/blocks/environment/shallow-water.png
Binary files differ
diff --git a/assets/blocks/environment/shrubs-large.png b/assets/blocks/environment/shrubs-large.png
new file mode 100644
index 0000000..26fb5d3
--- /dev/null
+++ b/assets/blocks/environment/shrubs-large.png
Binary files differ
diff --git a/assets/blocks/environment/shrubs.png b/assets/blocks/environment/shrubs.png
new file mode 100644
index 0000000..635a0d2
--- /dev/null
+++ b/assets/blocks/environment/shrubs.png
Binary files differ
diff --git a/assets/blocks/environment/snow-boulder.png b/assets/blocks/environment/snow-boulder.png
new file mode 100644
index 0000000..f0cd270
--- /dev/null
+++ b/assets/blocks/environment/snow-boulder.png
Binary files differ
diff --git a/assets/blocks/environment/snow-pine.png b/assets/blocks/environment/snow-pine.png
new file mode 100644
index 0000000..bb2d115
--- /dev/null
+++ b/assets/blocks/environment/snow-pine.png
Binary files differ
diff --git a/assets/blocks/environment/snow-wall-large.png b/assets/blocks/environment/snow-wall-large.png
new file mode 100644
index 0000000..d597a66
--- /dev/null
+++ b/assets/blocks/environment/snow-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/snow-wall.png b/assets/blocks/environment/snow-wall.png
new file mode 100644
index 0000000..718cff7
--- /dev/null
+++ b/assets/blocks/environment/snow-wall.png
Binary files differ
diff --git a/assets/blocks/environment/snow.png b/assets/blocks/environment/snow.png
new file mode 100644
index 0000000..afad902
--- /dev/null
+++ b/assets/blocks/environment/snow.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/space.png b/assets/blocks/environment/space.png
index bccf464..bccf464 100644
--- a/mindus/assets/blocks/environment/space.png
+++ b/assets/blocks/environment/space.png
Binary files differ
diff --git a/assets/blocks/environment/spawn.png b/assets/blocks/environment/spawn.png
new file mode 100644
index 0000000..01da5b5
--- /dev/null
+++ b/assets/blocks/environment/spawn.png
Binary files differ
diff --git a/assets/blocks/environment/spore-cluster.png b/assets/blocks/environment/spore-cluster.png
new file mode 100644
index 0000000..4b272a3
--- /dev/null
+++ b/assets/blocks/environment/spore-cluster.png
Binary files differ
diff --git a/assets/blocks/environment/spore-moss.png b/assets/blocks/environment/spore-moss.png
new file mode 100644
index 0000000..3661e8b
--- /dev/null
+++ b/assets/blocks/environment/spore-moss.png
Binary files differ
diff --git a/assets/blocks/environment/spore-pine.png b/assets/blocks/environment/spore-pine.png
new file mode 100644
index 0000000..14f6f59
--- /dev/null
+++ b/assets/blocks/environment/spore-pine.png
Binary files differ
diff --git a/assets/blocks/environment/spore-wall-large.png b/assets/blocks/environment/spore-wall-large.png
new file mode 100644
index 0000000..3e5b976
--- /dev/null
+++ b/assets/blocks/environment/spore-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/spore-wall.png b/assets/blocks/environment/spore-wall.png
new file mode 100644
index 0000000..b2dec36
--- /dev/null
+++ b/assets/blocks/environment/spore-wall.png
Binary files differ
diff --git a/assets/blocks/environment/stone-wall-large.png b/assets/blocks/environment/stone-wall-large.png
new file mode 100644
index 0000000..26173e9
--- /dev/null
+++ b/assets/blocks/environment/stone-wall-large.png
Binary files differ
diff --git a/assets/blocks/environment/stone-wall.png b/assets/blocks/environment/stone-wall.png
new file mode 100644
index 0000000..39c0d9c
--- /dev/null
+++ b/assets/blocks/environment/stone-wall.png
Binary files differ
diff --git a/assets/blocks/environment/stone.png b/assets/blocks/environment/stone.png
new file mode 100644
index 0000000..9fdeff0
--- /dev/null
+++ b/assets/blocks/environment/stone.png
Binary files differ
diff --git a/assets/blocks/environment/tainted-water.png b/assets/blocks/environment/tainted-water.png
new file mode 100644
index 0000000..244610a
--- /dev/null
+++ b/assets/blocks/environment/tainted-water.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/tar.png b/assets/blocks/environment/tar.png
index a9bafc3..a9bafc3 100644
--- a/mindus/assets/blocks/environment/tar.png
+++ b/assets/blocks/environment/tar.png
Binary files differ
diff --git a/assets/blocks/environment/tendrils.png b/assets/blocks/environment/tendrils.png
new file mode 100644
index 0000000..31727ee
--- /dev/null
+++ b/assets/blocks/environment/tendrils.png
Binary files differ
diff --git a/assets/blocks/environment/vibrant-crystal-cluster.png b/assets/blocks/environment/vibrant-crystal-cluster.png
new file mode 100644
index 0000000..0f61531
--- /dev/null
+++ b/assets/blocks/environment/vibrant-crystal-cluster.png
Binary files differ
diff --git a/assets/blocks/environment/white-tree-dead.png b/assets/blocks/environment/white-tree-dead.png
new file mode 100644
index 0000000..f313de4
--- /dev/null
+++ b/assets/blocks/environment/white-tree-dead.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/white-tree.png b/assets/blocks/environment/white-tree.png
index 7daea26..7e6b30e 100644
--- a/mindus/assets/blocks/environment/white-tree.png
+++ b/assets/blocks/environment/white-tree.png
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone-boulder.png b/assets/blocks/environment/yellow-stone-boulder.png
new file mode 100644
index 0000000..bafe3b5
--- /dev/null
+++ b/assets/blocks/environment/yellow-stone-boulder.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-plates3.png b/assets/blocks/environment/yellow-stone-plates.png
index 9f8a04b..9f8a04b 100644
--- a/mindus/assets/blocks/environment/yellow-stone-plates3.png
+++ b/assets/blocks/environment/yellow-stone-plates.png
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone-vent.png b/assets/blocks/environment/yellow-stone-vent.png
new file mode 100644
index 0000000..effb1ca
--- /dev/null
+++ b/assets/blocks/environment/yellow-stone-vent.png
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone-wall-large.png b/assets/blocks/environment/yellow-stone-wall-large.png
new file mode 100644
index 0000000..d3189b2
--- /dev/null
+++ b/assets/blocks/environment/yellow-stone-wall-large.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-wall2.png b/assets/blocks/environment/yellow-stone-wall.png
index dc91f82..dc91f82 100644
--- a/mindus/assets/blocks/environment/yellow-stone-wall2.png
+++ b/assets/blocks/environment/yellow-stone-wall.png
Binary files differ
diff --git a/assets/blocks/environment/yellow-stone.png b/assets/blocks/environment/yellow-stone.png
new file mode 100644
index 0000000..fb0c640
--- /dev/null
+++ b/assets/blocks/environment/yellow-stone.png
Binary files differ
diff --git a/assets/blocks/environment/yellowcoral.png b/assets/blocks/environment/yellowcoral.png
new file mode 100644
index 0000000..5e3d6cc
--- /dev/null
+++ b/assets/blocks/environment/yellowcoral.png
Binary files differ
diff --git a/assets/blocks/liquid/bridge-conduit-arrow.png b/assets/blocks/liquid/bridge-conduit-arrow.png
new file mode 100644
index 0000000..b8b62bc
--- /dev/null
+++ b/assets/blocks/liquid/bridge-conduit-arrow.png
Binary files differ
diff --git a/assets/blocks/liquid/bridge-conduit-bridge.png b/assets/blocks/liquid/bridge-conduit-bridge.png
new file mode 100644
index 0000000..5f23ff3
--- /dev/null
+++ b/assets/blocks/liquid/bridge-conduit-bridge.png
Binary files differ
diff --git a/assets/blocks/liquid/bridge-conduit-end.png b/assets/blocks/liquid/bridge-conduit-end.png
new file mode 100644
index 0000000..844be19
--- /dev/null
+++ b/assets/blocks/liquid/bridge-conduit-end.png
Binary files differ
diff --git a/assets/blocks/liquid/bridge-conduit.png b/assets/blocks/liquid/bridge-conduit.png
new file mode 100644
index 0000000..d57c2bb
--- /dev/null
+++ b/assets/blocks/liquid/bridge-conduit.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-0-0.png b/assets/blocks/liquid/conduits/conduit-0-0.png
new file mode 100644
index 0000000..89e0a19
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-0-0.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-0-1.png b/assets/blocks/liquid/conduits/conduit-0-1.png
index 163d8c1..163d8c1 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-0-1.png
+++ b/assets/blocks/liquid/conduits/conduit-0-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-0-2.png b/assets/blocks/liquid/conduits/conduit-0-2.png
new file mode 100644
index 0000000..96b202c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-0-2.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-0-3.png b/assets/blocks/liquid/conduits/conduit-0-3.png
index 02eaeb8..02eaeb8 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-0-3.png
+++ b/assets/blocks/liquid/conduits/conduit-0-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-0-h.png b/assets/blocks/liquid/conduits/conduit-1-0-h.png
new file mode 100644
index 0000000..90ef53c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-0.png b/assets/blocks/liquid/conduits/conduit-1-0.png
new file mode 100644
index 0000000..dc86dd4
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-1-h.png b/assets/blocks/liquid/conduits/conduit-1-1-h.png
new file mode 100644
index 0000000..3e2dec1
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-1-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-1-v.png b/assets/blocks/liquid/conduits/conduit-1-1-v.png
new file mode 100644
index 0000000..ed292b3
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-1-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-1.png b/assets/blocks/liquid/conduits/conduit-1-1.png
new file mode 100644
index 0000000..678f81a
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-2.png b/assets/blocks/liquid/conduits/conduit-1-2.png
new file mode 100644
index 0000000..69c4473
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-1-3.png b/assets/blocks/liquid/conduits/conduit-1-3.png
new file mode 100644
index 0000000..90ef53c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-1-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-2-0-h.png b/assets/blocks/liquid/conduits/conduit-2-0-h.png
new file mode 100644
index 0000000..d30d5f4
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-2-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-2-0-v.png b/assets/blocks/liquid/conduits/conduit-2-0-v.png
new file mode 100644
index 0000000..67d0833
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-2-0-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-2-0.png b/assets/blocks/liquid/conduits/conduit-2-0.png
new file mode 100644
index 0000000..e8a7bb0
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-2-0.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-1-h.png b/assets/blocks/liquid/conduits/conduit-2-1-h.png
index 8122549..8122549 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-1-h.png
+++ b/assets/blocks/liquid/conduits/conduit-2-1-h.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-1.png b/assets/blocks/liquid/conduits/conduit-2-1.png
index 92f8b2a..92f8b2a 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-1.png
+++ b/assets/blocks/liquid/conduits/conduit-2-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-2-2.png b/assets/blocks/liquid/conduits/conduit-2-2.png
new file mode 100644
index 0000000..a3bbaab
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-2-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-2-3-h.png b/assets/blocks/liquid/conduits/conduit-2-3-h.png
new file mode 100644
index 0000000..6815dd9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-2-3-h.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-3.png b/assets/blocks/liquid/conduits/conduit-2-3.png
index 9759bb9..9759bb9 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-3.png
+++ b/assets/blocks/liquid/conduits/conduit-2-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-3-0-h.png b/assets/blocks/liquid/conduits/conduit-3-0-h.png
new file mode 100644
index 0000000..31a4dec
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-3-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-3-0.png b/assets/blocks/liquid/conduits/conduit-3-0.png
new file mode 100644
index 0000000..d27ac67
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-3-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-3-1.png b/assets/blocks/liquid/conduits/conduit-3-1.png
new file mode 100644
index 0000000..0911857
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-3-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-3-3.png b/assets/blocks/liquid/conduits/conduit-3-3.png
new file mode 100644
index 0000000..0f57eef
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-3-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-4-0.png b/assets/blocks/liquid/conduits/conduit-4-0.png
new file mode 100644
index 0000000..3d0f869
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-4-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-4-1.png b/assets/blocks/liquid/conduits/conduit-4-1.png
new file mode 100644
index 0000000..37cd8a9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-4-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-4-3.png b/assets/blocks/liquid/conduits/conduit-4-3.png
new file mode 100644
index 0000000..76501b4
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-4-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-bottom-0.png b/assets/blocks/liquid/conduits/conduit-bottom-0.png
new file mode 100644
index 0000000..b5f2d11
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-bottom-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/conduit-bottom-1.png b/assets/blocks/liquid/conduits/conduit-bottom-1.png
new file mode 100644
index 0000000..82bcbcb
--- /dev/null
+++ b/assets/blocks/liquid/conduits/conduit-bottom-1.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-2.png b/assets/blocks/liquid/conduits/conduit-bottom-2.png
index 0d9e7e3..0d9e7e3 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-bottom-2.png
+++ b/assets/blocks/liquid/conduits/conduit-bottom-2.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-3.png b/assets/blocks/liquid/conduits/conduit-bottom-3.png
index 0d9e7e3..0d9e7e3 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-bottom-3.png
+++ b/assets/blocks/liquid/conduits/conduit-bottom-3.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-4.png b/assets/blocks/liquid/conduits/conduit-bottom-4.png
index 0d9e7e3..0d9e7e3 100644
--- a/mindus/assets/blocks/liquid/conduits/conduit-bottom-4.png
+++ b/assets/blocks/liquid/conduits/conduit-bottom-4.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-0.png b/assets/blocks/liquid/conduits/plated-conduit-0-0.png
new file mode 100644
index 0000000..9b1dcd0
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-0-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-1.png b/assets/blocks/liquid/conduits/plated-conduit-0-1.png
new file mode 100644
index 0000000..6363f68
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-0-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-2.png b/assets/blocks/liquid/conduits/plated-conduit-0-2.png
new file mode 100644
index 0000000..2450421
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-0-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-3.png b/assets/blocks/liquid/conduits/plated-conduit-0-3.png
new file mode 100644
index 0000000..e3f2046
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-0-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png b/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png
new file mode 100644
index 0000000..deb7005
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-0.png b/assets/blocks/liquid/conduits/plated-conduit-1-0.png
new file mode 100644
index 0000000..201ffa2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png b/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png
new file mode 100644
index 0000000..4bef575
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png b/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png
new file mode 100644
index 0000000..ffb6987
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-1.png b/assets/blocks/liquid/conduits/plated-conduit-1-1.png
new file mode 100644
index 0000000..6d6733a
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-2.png b/assets/blocks/liquid/conduits/plated-conduit-1-2.png
new file mode 100644
index 0000000..8cff629
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-3.png b/assets/blocks/liquid/conduits/plated-conduit-1-3.png
new file mode 100644
index 0000000..deb7005
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-1-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png b/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png
new file mode 100644
index 0000000..8f2ce35
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png b/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png
new file mode 100644
index 0000000..222edf9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-0.png b/assets/blocks/liquid/conduits/plated-conduit-2-0.png
new file mode 100644
index 0000000..4a32d66
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png b/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png
new file mode 100644
index 0000000..67385d9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1.png b/assets/blocks/liquid/conduits/plated-conduit-2-1.png
index 8130059..8130059 100644
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1.png
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-2.png b/assets/blocks/liquid/conduits/plated-conduit-2-2.png
new file mode 100644
index 0000000..334adad
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png b/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png
new file mode 100644
index 0000000..416a574
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3.png b/assets/blocks/liquid/conduits/plated-conduit-2-3.png
index acd19b0..acd19b0 100644
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3.png
+++ b/assets/blocks/liquid/conduits/plated-conduit-2-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png b/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png
new file mode 100644
index 0000000..cdff048
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-0.png b/assets/blocks/liquid/conduits/plated-conduit-3-0.png
new file mode 100644
index 0000000..ea24f9a
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-3-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-1.png b/assets/blocks/liquid/conduits/plated-conduit-3-1.png
new file mode 100644
index 0000000..a13c498
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-3-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-3.png b/assets/blocks/liquid/conduits/plated-conduit-3-3.png
new file mode 100644
index 0000000..a78f468
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-3-3.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-0.png b/assets/blocks/liquid/conduits/plated-conduit-4-0.png
index 5fd7ae2..5fd7ae2 100644
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-0.png
+++ b/assets/blocks/liquid/conduits/plated-conduit-4-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-4-1.png b/assets/blocks/liquid/conduits/plated-conduit-4-1.png
new file mode 100644
index 0000000..70e0859
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-4-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/plated-conduit-4-3.png b/assets/blocks/liquid/conduits/plated-conduit-4-3.png
new file mode 100644
index 0000000..8c0c95f
--- /dev/null
+++ b/assets/blocks/liquid/conduits/plated-conduit-4-3.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-cap.png b/assets/blocks/liquid/conduits/plated-conduit-cap.png
index 6a9f67d..6a9f67d 100644
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-cap.png
+++ b/assets/blocks/liquid/conduits/plated-conduit-cap.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-0.png b/assets/blocks/liquid/conduits/pulse-conduit-0-0.png
new file mode 100644
index 0000000..09ee3e3
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-0-0.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-1.png b/assets/blocks/liquid/conduits/pulse-conduit-0-1.png
index 36053a8..36053a8 100644
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-1.png
+++ b/assets/blocks/liquid/conduits/pulse-conduit-0-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-2.png b/assets/blocks/liquid/conduits/pulse-conduit-0-2.png
new file mode 100644
index 0000000..875ebfa
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-0-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-3.png b/assets/blocks/liquid/conduits/pulse-conduit-0-3.png
new file mode 100644
index 0000000..b641d4d
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-0-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png b/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png
new file mode 100644
index 0000000..2f57ce8
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-0.png b/assets/blocks/liquid/conduits/pulse-conduit-1-0.png
new file mode 100644
index 0000000..170ffc9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png b/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png
new file mode 100644
index 0000000..7d7acf2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png b/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png
new file mode 100644
index 0000000..ab23178
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-1.png b/assets/blocks/liquid/conduits/pulse-conduit-1-1.png
new file mode 100644
index 0000000..fbbbc9c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-2.png b/assets/blocks/liquid/conduits/pulse-conduit-1-2.png
new file mode 100644
index 0000000..ff58bf2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-3.png b/assets/blocks/liquid/conduits/pulse-conduit-1-3.png
new file mode 100644
index 0000000..2f57ce8
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-1-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png b/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png
new file mode 100644
index 0000000..6e2f52b
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png b/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png
new file mode 100644
index 0000000..7ee5d5d
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-0.png b/assets/blocks/liquid/conduits/pulse-conduit-2-0.png
new file mode 100644
index 0000000..35d1735
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png b/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png
new file mode 100644
index 0000000..b2978fb
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1.png b/assets/blocks/liquid/conduits/pulse-conduit-2-1.png
index 31d5bed..31d5bed 100644
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1.png
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-2.png b/assets/blocks/liquid/conduits/pulse-conduit-2-2.png
new file mode 100644
index 0000000..831d55e
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png b/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png
new file mode 100644
index 0000000..56a7446
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3.png b/assets/blocks/liquid/conduits/pulse-conduit-2-3.png
index 82de4d3..82de4d3 100644
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3.png
+++ b/assets/blocks/liquid/conduits/pulse-conduit-2-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png b/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png
new file mode 100644
index 0000000..6527245
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-0.png b/assets/blocks/liquid/conduits/pulse-conduit-3-0.png
new file mode 100644
index 0000000..b7a411b
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-3-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-1.png b/assets/blocks/liquid/conduits/pulse-conduit-3-1.png
new file mode 100644
index 0000000..ffb0e87
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-3-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-3.png b/assets/blocks/liquid/conduits/pulse-conduit-3-3.png
new file mode 100644
index 0000000..cf614d2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-3-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-4-0.png b/assets/blocks/liquid/conduits/pulse-conduit-4-0.png
new file mode 100644
index 0000000..7958647
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-4-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-4-1.png b/assets/blocks/liquid/conduits/pulse-conduit-4-1.png
new file mode 100644
index 0000000..d4a5e50
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-4-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/pulse-conduit-4-3.png b/assets/blocks/liquid/conduits/pulse-conduit-4-3.png
new file mode 100644
index 0000000..949c1e2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/pulse-conduit-4-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png
new file mode 100644
index 0000000..6280303
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png
new file mode 100644
index 0000000..033767c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png
new file mode 100644
index 0000000..ec838d6
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png
new file mode 100644
index 0000000..f795439
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png
new file mode 100644
index 0000000..5fb892c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png
new file mode 100644
index 0000000..e393c9c
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png
new file mode 100644
index 0000000..2f4f9e9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png
new file mode 100644
index 0000000..c303f7d
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png
new file mode 100644
index 0000000..2dce114
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png
new file mode 100644
index 0000000..115b526
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png
new file mode 100644
index 0000000..95c1d9f
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png
new file mode 100644
index 0000000..eb069a9
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png
new file mode 100644
index 0000000..c6b9470
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png
new file mode 100644
index 0000000..5099798
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png
new file mode 100644
index 0000000..35606ba
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png
new file mode 100644
index 0000000..8037de2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png
new file mode 100644
index 0000000..3402395
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png
new file mode 100644
index 0000000..32a2fd2
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png
new file mode 100644
index 0000000..80ce744
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png
new file mode 100644
index 0000000..f2ef533
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png
new file mode 100644
index 0000000..2ed95f1
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png
new file mode 100644
index 0000000..e52c759
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png
new file mode 100644
index 0000000..3e6195d
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png
new file mode 100644
index 0000000..46deb70
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png
new file mode 100644
index 0000000..14845e4
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png
Binary files differ
diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png
new file mode 100644
index 0000000..4901d38
--- /dev/null
+++ b/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png
Binary files differ
diff --git a/assets/blocks/liquid/impulse-pump-liquid.png b/assets/blocks/liquid/impulse-pump-liquid.png
new file mode 100644
index 0000000..bd62682
--- /dev/null
+++ b/assets/blocks/liquid/impulse-pump-liquid.png
Binary files differ
diff --git a/assets/blocks/liquid/impulse-pump.png b/assets/blocks/liquid/impulse-pump.png
new file mode 100644
index 0000000..7f41faf
--- /dev/null
+++ b/assets/blocks/liquid/impulse-pump.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-container-bottom.png b/assets/blocks/liquid/liquid-container-bottom.png
index 46f2081..46f2081 100644
--- a/mindus/assets/blocks/liquid/liquid-container-bottom.png
+++ b/assets/blocks/liquid/liquid-container-bottom.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-container.png b/assets/blocks/liquid/liquid-container.png
new file mode 100644
index 0000000..5336e28
--- /dev/null
+++ b/assets/blocks/liquid/liquid-container.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-junction.png b/assets/blocks/liquid/liquid-junction.png
new file mode 100644
index 0000000..0c92792
--- /dev/null
+++ b/assets/blocks/liquid/liquid-junction.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-router-bottom.png b/assets/blocks/liquid/liquid-router-bottom.png
index 977f5d8..977f5d8 100644
--- a/mindus/assets/blocks/liquid/liquid-router-bottom.png
+++ b/assets/blocks/liquid/liquid-router-bottom.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-router.png b/assets/blocks/liquid/liquid-router.png
new file mode 100644
index 0000000..75adcb1
--- /dev/null
+++ b/assets/blocks/liquid/liquid-router.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-source.png b/assets/blocks/liquid/liquid-source.png
new file mode 100644
index 0000000..3f230be
--- /dev/null
+++ b/assets/blocks/liquid/liquid-source.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-tank-bottom.png b/assets/blocks/liquid/liquid-tank-bottom.png
new file mode 100644
index 0000000..5133507
--- /dev/null
+++ b/assets/blocks/liquid/liquid-tank-bottom.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-tank.png b/assets/blocks/liquid/liquid-tank.png
new file mode 100644
index 0000000..f4e9396
--- /dev/null
+++ b/assets/blocks/liquid/liquid-tank.png
Binary files differ
diff --git a/assets/blocks/liquid/liquid-void.png b/assets/blocks/liquid/liquid-void.png
new file mode 100644
index 0000000..34b20dd
--- /dev/null
+++ b/assets/blocks/liquid/liquid-void.png
Binary files differ
diff --git a/assets/blocks/liquid/mechanical-pump-liquid.png b/assets/blocks/liquid/mechanical-pump-liquid.png
new file mode 100644
index 0000000..bd62682
--- /dev/null
+++ b/assets/blocks/liquid/mechanical-pump-liquid.png
Binary files differ
diff --git a/assets/blocks/liquid/mechanical-pump.png b/assets/blocks/liquid/mechanical-pump.png
new file mode 100644
index 0000000..771d52d
--- /dev/null
+++ b/assets/blocks/liquid/mechanical-pump.png
Binary files differ
diff --git a/assets/blocks/liquid/phase-conduit-arrow.png b/assets/blocks/liquid/phase-conduit-arrow.png
new file mode 100644
index 0000000..62bcb0c
--- /dev/null
+++ b/assets/blocks/liquid/phase-conduit-arrow.png
Binary files differ
diff --git a/assets/blocks/liquid/phase-conduit-bridge.png b/assets/blocks/liquid/phase-conduit-bridge.png
new file mode 100644
index 0000000..fcdef72
--- /dev/null
+++ b/assets/blocks/liquid/phase-conduit-bridge.png
Binary files differ
diff --git a/assets/blocks/liquid/phase-conduit-end.png b/assets/blocks/liquid/phase-conduit-end.png
new file mode 100644
index 0000000..cdcc522
--- /dev/null
+++ b/assets/blocks/liquid/phase-conduit-end.png
Binary files differ
diff --git a/assets/blocks/liquid/phase-conduit.png b/assets/blocks/liquid/phase-conduit.png
new file mode 100644
index 0000000..a571e30
--- /dev/null
+++ b/assets/blocks/liquid/phase-conduit.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png b/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png
new file mode 100644
index 0000000..5309b37
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png b/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png
new file mode 100644
index 0000000..afef676
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png b/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png
new file mode 100644
index 0000000..12c5bde
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-dir.png b/assets/blocks/liquid/reinforced-bridge-conduit-dir.png
new file mode 100644
index 0000000..233e43a
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-bridge-conduit-dir.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png b/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png
new file mode 100644
index 0000000..6c42419
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-bridge-conduit.png b/assets/blocks/liquid/reinforced-bridge-conduit.png
new file mode 100644
index 0000000..9e694e0
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-bridge-conduit.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-container-bottom.png b/assets/blocks/liquid/reinforced-liquid-container-bottom.png
index 85194f9..85194f9 100644
--- a/mindus/assets/blocks/liquid/reinforced-liquid-container-bottom.png
+++ b/assets/blocks/liquid/reinforced-liquid-container-bottom.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-liquid-container.png b/assets/blocks/liquid/reinforced-liquid-container.png
new file mode 100644
index 0000000..b769691
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-liquid-container.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-liquid-junction.png b/assets/blocks/liquid/reinforced-liquid-junction.png
new file mode 100644
index 0000000..778c5a6
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-liquid-junction.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-router-bottom.png b/assets/blocks/liquid/reinforced-liquid-router-bottom.png
index 3b2c81c..3b2c81c 100644
--- a/mindus/assets/blocks/liquid/reinforced-liquid-router-bottom.png
+++ b/assets/blocks/liquid/reinforced-liquid-router-bottom.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-router.png b/assets/blocks/liquid/reinforced-liquid-router.png
index 0fdb7ba..0fdb7ba 100644
--- a/mindus/assets/blocks/liquid/reinforced-liquid-router.png
+++ b/assets/blocks/liquid/reinforced-liquid-router.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-liquid-tank-bottom.png b/assets/blocks/liquid/reinforced-liquid-tank-bottom.png
new file mode 100644
index 0000000..9b95d26
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-liquid-tank-bottom.png
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-tank.png b/assets/blocks/liquid/reinforced-liquid-tank.png
index 94cbfe1..94cbfe1 100644
--- a/mindus/assets/blocks/liquid/reinforced-liquid-tank.png
+++ b/assets/blocks/liquid/reinforced-liquid-tank.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-pump-liquid.png b/assets/blocks/liquid/reinforced-pump-liquid.png
new file mode 100644
index 0000000..25f07b0
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-pump-liquid.png
Binary files differ
diff --git a/assets/blocks/liquid/reinforced-pump.png b/assets/blocks/liquid/reinforced-pump.png
new file mode 100644
index 0000000..22f25d4
--- /dev/null
+++ b/assets/blocks/liquid/reinforced-pump.png
Binary files differ
diff --git a/assets/blocks/liquid/rotary-pump-liquid.png b/assets/blocks/liquid/rotary-pump-liquid.png
new file mode 100644
index 0000000..bd62682
--- /dev/null
+++ b/assets/blocks/liquid/rotary-pump-liquid.png
Binary files differ
diff --git a/assets/blocks/liquid/rotary-pump.png b/assets/blocks/liquid/rotary-pump.png
new file mode 100644
index 0000000..0b94fea
--- /dev/null
+++ b/assets/blocks/liquid/rotary-pump.png
Binary files differ
diff --git a/assets/blocks/logic/canvas.png b/assets/blocks/logic/canvas.png
new file mode 100644
index 0000000..8f05174
--- /dev/null
+++ b/assets/blocks/logic/canvas.png
Binary files differ
diff --git a/assets/blocks/logic/hyper-processor.png b/assets/blocks/logic/hyper-processor.png
new file mode 100644
index 0000000..7976567
--- /dev/null
+++ b/assets/blocks/logic/hyper-processor.png
Binary files differ
diff --git a/assets/blocks/logic/large-logic-display.png b/assets/blocks/logic/large-logic-display.png
new file mode 100644
index 0000000..28c8c75
--- /dev/null
+++ b/assets/blocks/logic/large-logic-display.png
Binary files differ
diff --git a/assets/blocks/logic/logic-display.png b/assets/blocks/logic/logic-display.png
new file mode 100644
index 0000000..5d38ebe
--- /dev/null
+++ b/assets/blocks/logic/logic-display.png
Binary files differ
diff --git a/assets/blocks/logic/logic-processor.png b/assets/blocks/logic/logic-processor.png
new file mode 100644
index 0000000..85dffe9
--- /dev/null
+++ b/assets/blocks/logic/logic-processor.png
Binary files differ
diff --git a/assets/blocks/logic/memory-bank.png b/assets/blocks/logic/memory-bank.png
new file mode 100644
index 0000000..f4a4b48
--- /dev/null
+++ b/assets/blocks/logic/memory-bank.png
Binary files differ
diff --git a/assets/blocks/logic/memory-cell.png b/assets/blocks/logic/memory-cell.png
new file mode 100644
index 0000000..a8a5343
--- /dev/null
+++ b/assets/blocks/logic/memory-cell.png
Binary files differ
diff --git a/assets/blocks/logic/message.png b/assets/blocks/logic/message.png
new file mode 100644
index 0000000..0e7b631
--- /dev/null
+++ b/assets/blocks/logic/message.png
Binary files differ
diff --git a/assets/blocks/logic/micro-processor.png b/assets/blocks/logic/micro-processor.png
new file mode 100644
index 0000000..9995834
--- /dev/null
+++ b/assets/blocks/logic/micro-processor.png
Binary files differ
diff --git a/assets/blocks/logic/reinforced-message.png b/assets/blocks/logic/reinforced-message.png
new file mode 100644
index 0000000..7ed093c
--- /dev/null
+++ b/assets/blocks/logic/reinforced-message.png
Binary files differ
diff --git a/assets/blocks/logic/switch-on.png b/assets/blocks/logic/switch-on.png
new file mode 100644
index 0000000..5560abf
--- /dev/null
+++ b/assets/blocks/logic/switch-on.png
Binary files differ
diff --git a/assets/blocks/logic/switch.png b/assets/blocks/logic/switch.png
new file mode 100644
index 0000000..37a1c02
--- /dev/null
+++ b/assets/blocks/logic/switch.png
Binary files differ
diff --git a/assets/blocks/logic/world-cell.png b/assets/blocks/logic/world-cell.png
new file mode 100644
index 0000000..4397cb2
--- /dev/null
+++ b/assets/blocks/logic/world-cell.png
Binary files differ
diff --git a/assets/blocks/logic/world-message.png b/assets/blocks/logic/world-message.png
new file mode 100644
index 0000000..6fa79f9
--- /dev/null
+++ b/assets/blocks/logic/world-message.png
Binary files differ
diff --git a/assets/blocks/logic/world-processor.png b/assets/blocks/logic/world-processor.png
new file mode 100644
index 0000000..7638016
--- /dev/null
+++ b/assets/blocks/logic/world-processor.png
Binary files differ
diff --git a/assets/blocks/payload/constructor-top.png b/assets/blocks/payload/constructor-top.png
new file mode 100644
index 0000000..ca8288c
--- /dev/null
+++ b/assets/blocks/payload/constructor-top.png
Binary files differ
diff --git a/assets/blocks/payload/constructor.png b/assets/blocks/payload/constructor.png
new file mode 100644
index 0000000..c982f18
--- /dev/null
+++ b/assets/blocks/payload/constructor.png
Binary files differ
diff --git a/assets/blocks/payload/deconstructor-top.png b/assets/blocks/payload/deconstructor-top.png
new file mode 100644
index 0000000..102c5fb
--- /dev/null
+++ b/assets/blocks/payload/deconstructor-top.png
Binary files differ
diff --git a/assets/blocks/payload/deconstructor.png b/assets/blocks/payload/deconstructor.png
new file mode 100644
index 0000000..f2dd416
--- /dev/null
+++ b/assets/blocks/payload/deconstructor.png
Binary files differ
diff --git a/assets/blocks/payload/factory-in-3-dark.png b/assets/blocks/payload/factory-in-3-dark.png
new file mode 100644
index 0000000..c7a3c0e
--- /dev/null
+++ b/assets/blocks/payload/factory-in-3-dark.png
Binary files differ
diff --git a/assets/blocks/payload/factory-in-3.png b/assets/blocks/payload/factory-in-3.png
new file mode 100644
index 0000000..19f0b7d
--- /dev/null
+++ b/assets/blocks/payload/factory-in-3.png
Binary files differ
diff --git a/assets/blocks/payload/factory-in-5-dark.png b/assets/blocks/payload/factory-in-5-dark.png
new file mode 100644
index 0000000..c6eb89b
--- /dev/null
+++ b/assets/blocks/payload/factory-in-5-dark.png
Binary files differ
diff --git a/assets/blocks/payload/factory-in-5.png b/assets/blocks/payload/factory-in-5.png
new file mode 100644
index 0000000..1a65fed
--- /dev/null
+++ b/assets/blocks/payload/factory-in-5.png
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-in-7.png b/assets/blocks/payload/factory-in-7.png
index d67986a..e7f4f07 100644
--- a/mindus/assets/blocks/payload/factory-in-7.png
+++ b/assets/blocks/payload/factory-in-7.png
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-in-9.png b/assets/blocks/payload/factory-in-9.png
index 6f7dc51..75638ba 100644
--- a/mindus/assets/blocks/payload/factory-in-9.png
+++ b/assets/blocks/payload/factory-in-9.png
Binary files differ
diff --git a/assets/blocks/payload/factory-out-3-dark.png b/assets/blocks/payload/factory-out-3-dark.png
new file mode 100644
index 0000000..11d66aa
--- /dev/null
+++ b/assets/blocks/payload/factory-out-3-dark.png
Binary files differ
diff --git a/assets/blocks/payload/factory-out-3.png b/assets/blocks/payload/factory-out-3.png
new file mode 100644
index 0000000..da9153d
--- /dev/null
+++ b/assets/blocks/payload/factory-out-3.png
Binary files differ
diff --git a/assets/blocks/payload/factory-out-5-dark.png b/assets/blocks/payload/factory-out-5-dark.png
new file mode 100644
index 0000000..40a3ed8
--- /dev/null
+++ b/assets/blocks/payload/factory-out-5-dark.png
Binary files differ
diff --git a/assets/blocks/payload/factory-out-5.png b/assets/blocks/payload/factory-out-5.png
new file mode 100644
index 0000000..3a8d9ed
--- /dev/null
+++ b/assets/blocks/payload/factory-out-5.png
Binary files differ
diff --git a/assets/blocks/payload/factory-out-7.png b/assets/blocks/payload/factory-out-7.png
new file mode 100644
index 0000000..c1fcf4b
--- /dev/null
+++ b/assets/blocks/payload/factory-out-7.png
Binary files differ
diff --git a/assets/blocks/payload/factory-out-9.png b/assets/blocks/payload/factory-out-9.png
new file mode 100644
index 0000000..007369a
--- /dev/null
+++ b/assets/blocks/payload/factory-out-9.png
Binary files differ
diff --git a/assets/blocks/payload/factory-top-3.png b/assets/blocks/payload/factory-top-3.png
new file mode 100644
index 0000000..2b69b0a
--- /dev/null
+++ b/assets/blocks/payload/factory-top-3.png
Binary files differ
diff --git a/assets/blocks/payload/large-constructor-top.png b/assets/blocks/payload/large-constructor-top.png
new file mode 100644
index 0000000..ef4e9fc
--- /dev/null
+++ b/assets/blocks/payload/large-constructor-top.png
Binary files differ
diff --git a/assets/blocks/payload/large-constructor.png b/assets/blocks/payload/large-constructor.png
new file mode 100644
index 0000000..b45e650
--- /dev/null
+++ b/assets/blocks/payload/large-constructor.png
Binary files differ
diff --git a/assets/blocks/payload/large-payload-mass-driver.png b/assets/blocks/payload/large-payload-mass-driver.png
new file mode 100644
index 0000000..42e9350
--- /dev/null
+++ b/assets/blocks/payload/large-payload-mass-driver.png
Binary files differ
diff --git a/assets/blocks/payload/payload-conveyor.png b/assets/blocks/payload/payload-conveyor.png
new file mode 100644
index 0000000..ea511d4
--- /dev/null
+++ b/assets/blocks/payload/payload-conveyor.png
Binary files differ
diff --git a/assets/blocks/payload/payload-loader-top.png b/assets/blocks/payload/payload-loader-top.png
new file mode 100644
index 0000000..3612bef
--- /dev/null
+++ b/assets/blocks/payload/payload-loader-top.png
Binary files differ
diff --git a/assets/blocks/payload/payload-loader.png b/assets/blocks/payload/payload-loader.png
new file mode 100644
index 0000000..acbb9a6
--- /dev/null
+++ b/assets/blocks/payload/payload-loader.png
Binary files differ
diff --git a/assets/blocks/payload/payload-mass-driver.png b/assets/blocks/payload/payload-mass-driver.png
new file mode 100644
index 0000000..df38883
--- /dev/null
+++ b/assets/blocks/payload/payload-mass-driver.png
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-router-over.png b/assets/blocks/payload/payload-router-over.png
index 5166951..5166951 100644
--- a/mindus/assets/blocks/payload/payload-router-over.png
+++ b/assets/blocks/payload/payload-router-over.png
Binary files differ
diff --git a/assets/blocks/payload/payload-router.png b/assets/blocks/payload/payload-router.png
new file mode 100644
index 0000000..43e4c68
--- /dev/null
+++ b/assets/blocks/payload/payload-router.png
Binary files differ
diff --git a/assets/blocks/payload/payload-source-top.png b/assets/blocks/payload/payload-source-top.png
new file mode 100644
index 0000000..6b54ca6
--- /dev/null
+++ b/assets/blocks/payload/payload-source-top.png
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-source.png b/assets/blocks/payload/payload-source.png
index cf0844c..1c4585b 100644
--- a/mindus/assets/blocks/payload/payload-source.png
+++ b/assets/blocks/payload/payload-source.png
Binary files differ
diff --git a/assets/blocks/payload/payload-unloader-top.png b/assets/blocks/payload/payload-unloader-top.png
new file mode 100644
index 0000000..caad844
--- /dev/null
+++ b/assets/blocks/payload/payload-unloader-top.png
Binary files differ
diff --git a/assets/blocks/payload/payload-unloader.png b/assets/blocks/payload/payload-unloader.png
new file mode 100644
index 0000000..9b564db
--- /dev/null
+++ b/assets/blocks/payload/payload-unloader.png
Binary files differ
diff --git a/assets/blocks/payload/payload-void-top.png b/assets/blocks/payload/payload-void-top.png
new file mode 100644
index 0000000..8725a43
--- /dev/null
+++ b/assets/blocks/payload/payload-void-top.png
Binary files differ
diff --git a/assets/blocks/payload/payload-void.png b/assets/blocks/payload/payload-void.png
new file mode 100644
index 0000000..a2390c4
--- /dev/null
+++ b/assets/blocks/payload/payload-void.png
Binary files differ
diff --git a/assets/blocks/payload/reinforced-payload-conveyor.png b/assets/blocks/payload/reinforced-payload-conveyor.png
new file mode 100644
index 0000000..ee67544
--- /dev/null
+++ b/assets/blocks/payload/reinforced-payload-conveyor.png
Binary files differ
diff --git a/mindus/assets/blocks/payload/reinforced-payload-router-over.png b/assets/blocks/payload/reinforced-payload-router-over.png
index 14dda8a..14dda8a 100644
--- a/mindus/assets/blocks/payload/reinforced-payload-router-over.png
+++ b/assets/blocks/payload/reinforced-payload-router-over.png
Binary files differ
diff --git a/assets/blocks/payload/reinforced-payload-router.png b/assets/blocks/payload/reinforced-payload-router.png
new file mode 100644
index 0000000..4d426a9
--- /dev/null
+++ b/assets/blocks/payload/reinforced-payload-router.png
Binary files differ
diff --git a/assets/blocks/payload/small-deconstructor-top.png b/assets/blocks/payload/small-deconstructor-top.png
new file mode 100644
index 0000000..e9b25ed
--- /dev/null
+++ b/assets/blocks/payload/small-deconstructor-top.png
Binary files differ
diff --git a/assets/blocks/payload/small-deconstructor.png b/assets/blocks/payload/small-deconstructor.png
new file mode 100644
index 0000000..c04f6d4
--- /dev/null
+++ b/assets/blocks/payload/small-deconstructor.png
Binary files differ
diff --git a/assets/blocks/power/battery-large.png b/assets/blocks/power/battery-large.png
new file mode 100644
index 0000000..bc90f9c
--- /dev/null
+++ b/assets/blocks/power/battery-large.png
Binary files differ
diff --git a/assets/blocks/power/battery.png b/assets/blocks/power/battery.png
new file mode 100644
index 0000000..66aea4b
--- /dev/null
+++ b/assets/blocks/power/battery.png
Binary files differ
diff --git a/assets/blocks/power/beam-link.png b/assets/blocks/power/beam-link.png
new file mode 100644
index 0000000..1804555
--- /dev/null
+++ b/assets/blocks/power/beam-link.png
Binary files differ
diff --git a/assets/blocks/power/beam-node.png b/assets/blocks/power/beam-node.png
new file mode 100644
index 0000000..67c3a94
--- /dev/null
+++ b/assets/blocks/power/beam-node.png
Binary files differ
diff --git a/assets/blocks/power/beam-tower.png b/assets/blocks/power/beam-tower.png
new file mode 100644
index 0000000..f86568c
--- /dev/null
+++ b/assets/blocks/power/beam-tower.png
Binary files differ
diff --git a/assets/blocks/power/chemical-combustion-chamber.png b/assets/blocks/power/chemical-combustion-chamber.png
new file mode 100644
index 0000000..9d25357
--- /dev/null
+++ b/assets/blocks/power/chemical-combustion-chamber.png
Binary files differ
diff --git a/assets/blocks/power/combustion-generator.png b/assets/blocks/power/combustion-generator.png
new file mode 100644
index 0000000..dcf2039
--- /dev/null
+++ b/assets/blocks/power/combustion-generator.png
Binary files differ
diff --git a/assets/blocks/power/differential-generator-liquid.png b/assets/blocks/power/differential-generator-liquid.png
new file mode 100644
index 0000000..83eb5ca
--- /dev/null
+++ b/assets/blocks/power/differential-generator-liquid.png
Binary files differ
diff --git a/assets/blocks/power/differential-generator.png b/assets/blocks/power/differential-generator.png
new file mode 100644
index 0000000..a4986a6
--- /dev/null
+++ b/assets/blocks/power/differential-generator.png
Binary files differ
diff --git a/assets/blocks/power/diode-arrow.png b/assets/blocks/power/diode-arrow.png
new file mode 100644
index 0000000..91b3090
--- /dev/null
+++ b/assets/blocks/power/diode-arrow.png
Binary files differ
diff --git a/assets/blocks/power/diode.png b/assets/blocks/power/diode.png
new file mode 100644
index 0000000..3963401
--- /dev/null
+++ b/assets/blocks/power/diode.png
Binary files differ
diff --git a/assets/blocks/power/flux-reactor-bottom.png b/assets/blocks/power/flux-reactor-bottom.png
new file mode 100644
index 0000000..31b441e
--- /dev/null
+++ b/assets/blocks/power/flux-reactor-bottom.png
Binary files differ
diff --git a/assets/blocks/power/flux-reactor-mid.png b/assets/blocks/power/flux-reactor-mid.png
new file mode 100644
index 0000000..25c0b27
--- /dev/null
+++ b/assets/blocks/power/flux-reactor-mid.png
Binary files differ
diff --git a/assets/blocks/power/flux-reactor.png b/assets/blocks/power/flux-reactor.png
new file mode 100644
index 0000000..5cbbb43
--- /dev/null
+++ b/assets/blocks/power/flux-reactor.png
Binary files differ
diff --git a/assets/blocks/power/illuminator.png b/assets/blocks/power/illuminator.png
new file mode 100644
index 0000000..5c7607d
--- /dev/null
+++ b/assets/blocks/power/illuminator.png
Binary files differ
diff --git a/assets/blocks/power/impact-reactor-bottom.png b/assets/blocks/power/impact-reactor-bottom.png
new file mode 100644
index 0000000..40d985c
--- /dev/null
+++ b/assets/blocks/power/impact-reactor-bottom.png
Binary files differ
diff --git a/assets/blocks/power/impact-reactor.png b/assets/blocks/power/impact-reactor.png
new file mode 100644
index 0000000..1f3d2dd
--- /dev/null
+++ b/assets/blocks/power/impact-reactor.png
Binary files differ
diff --git a/assets/blocks/power/neoplasia-reactor-bottom.png b/assets/blocks/power/neoplasia-reactor-bottom.png
new file mode 100644
index 0000000..25cd97e
--- /dev/null
+++ b/assets/blocks/power/neoplasia-reactor-bottom.png
Binary files differ
diff --git a/assets/blocks/power/neoplasia-reactor-center.png b/assets/blocks/power/neoplasia-reactor-center.png
new file mode 100644
index 0000000..7336772
--- /dev/null
+++ b/assets/blocks/power/neoplasia-reactor-center.png
Binary files differ
diff --git a/mindus/assets/blocks/power/neoplasia-reactor-top1.png b/assets/blocks/power/neoplasia-reactor-top1.png
index 73ecc4d..73ecc4d 100644
--- a/mindus/assets/blocks/power/neoplasia-reactor-top1.png
+++ b/assets/blocks/power/neoplasia-reactor-top1.png
Binary files differ
diff --git a/mindus/assets/blocks/power/neoplasia-reactor-top2.png b/assets/blocks/power/neoplasia-reactor-top2.png
index 08a24c4..08a24c4 100644
--- a/mindus/assets/blocks/power/neoplasia-reactor-top2.png
+++ b/assets/blocks/power/neoplasia-reactor-top2.png
Binary files differ
diff --git a/assets/blocks/power/neoplasia-reactor.png b/assets/blocks/power/neoplasia-reactor.png
new file mode 100644
index 0000000..3376dec
--- /dev/null
+++ b/assets/blocks/power/neoplasia-reactor.png
Binary files differ
diff --git a/assets/blocks/power/power-node-large.png b/assets/blocks/power/power-node-large.png
new file mode 100644
index 0000000..a5ebe5e
--- /dev/null
+++ b/assets/blocks/power/power-node-large.png
Binary files differ
diff --git a/assets/blocks/power/power-node.png b/assets/blocks/power/power-node.png
new file mode 100644
index 0000000..3d98ab0
--- /dev/null
+++ b/assets/blocks/power/power-node.png
Binary files differ
diff --git a/assets/blocks/power/power-source.png b/assets/blocks/power/power-source.png
new file mode 100644
index 0000000..9d5c8ed
--- /dev/null
+++ b/assets/blocks/power/power-source.png
Binary files differ
diff --git a/assets/blocks/power/power-void.png b/assets/blocks/power/power-void.png
new file mode 100644
index 0000000..5fd2c22
--- /dev/null
+++ b/assets/blocks/power/power-void.png
Binary files differ
diff --git a/assets/blocks/power/pyrolysis-generator.png b/assets/blocks/power/pyrolysis-generator.png
new file mode 100644
index 0000000..5f6556d
--- /dev/null
+++ b/assets/blocks/power/pyrolysis-generator.png
Binary files differ
diff --git a/assets/blocks/power/rtg-generator.png b/assets/blocks/power/rtg-generator.png
new file mode 100644
index 0000000..3578bbc
--- /dev/null
+++ b/assets/blocks/power/rtg-generator.png
Binary files differ
diff --git a/assets/blocks/power/solar-panel-large.png b/assets/blocks/power/solar-panel-large.png
new file mode 100644
index 0000000..a994aaf
--- /dev/null
+++ b/assets/blocks/power/solar-panel-large.png
Binary files differ
diff --git a/assets/blocks/power/solar-panel.png b/assets/blocks/power/solar-panel.png
new file mode 100644
index 0000000..af53536
--- /dev/null
+++ b/assets/blocks/power/solar-panel.png
Binary files differ
diff --git a/assets/blocks/power/steam-generator-liquid.png b/assets/blocks/power/steam-generator-liquid.png
new file mode 100644
index 0000000..da16999
--- /dev/null
+++ b/assets/blocks/power/steam-generator-liquid.png
Binary files differ
diff --git a/assets/blocks/power/steam-generator.png b/assets/blocks/power/steam-generator.png
new file mode 100644
index 0000000..3b2bcd6
--- /dev/null
+++ b/assets/blocks/power/steam-generator.png
Binary files differ
diff --git a/mindus/assets/blocks/power/surge-tower.png b/assets/blocks/power/surge-tower.png
index abf3ce1..abf3ce1 100644
--- a/mindus/assets/blocks/power/surge-tower.png
+++ b/assets/blocks/power/surge-tower.png
Binary files differ
diff --git a/assets/blocks/power/thermal-generator.png b/assets/blocks/power/thermal-generator.png
new file mode 100644
index 0000000..6700994
--- /dev/null
+++ b/assets/blocks/power/thermal-generator.png
Binary files differ
diff --git a/assets/blocks/power/thorium-reactor.png b/assets/blocks/power/thorium-reactor.png
new file mode 100644
index 0000000..f7dfb2e
--- /dev/null
+++ b/assets/blocks/power/thorium-reactor.png
Binary files differ
diff --git a/assets/blocks/power/turbine-condenser.png b/assets/blocks/power/turbine-condenser.png
new file mode 100644
index 0000000..3c29973
--- /dev/null
+++ b/assets/blocks/power/turbine-condenser.png
Binary files differ
diff --git a/assets/blocks/production/atmospheric-concentrator-bottom.png b/assets/blocks/production/atmospheric-concentrator-bottom.png
new file mode 100644
index 0000000..61dde0d
--- /dev/null
+++ b/assets/blocks/production/atmospheric-concentrator-bottom.png
Binary files differ
diff --git a/assets/blocks/production/atmospheric-concentrator.png b/assets/blocks/production/atmospheric-concentrator.png
new file mode 100644
index 0000000..f535fde
--- /dev/null
+++ b/assets/blocks/production/atmospheric-concentrator.png
Binary files differ
diff --git a/assets/blocks/production/blast-mixer.png b/assets/blocks/production/blast-mixer.png
new file mode 100644
index 0000000..81e8d86
--- /dev/null
+++ b/assets/blocks/production/blast-mixer.png
Binary files differ
diff --git a/assets/blocks/production/carbide-crucible-bottom.png b/assets/blocks/production/carbide-crucible-bottom.png
new file mode 100644
index 0000000..3fcb6ab
--- /dev/null
+++ b/assets/blocks/production/carbide-crucible-bottom.png
Binary files differ
diff --git a/assets/blocks/production/carbide-crucible.png b/assets/blocks/production/carbide-crucible.png
new file mode 100644
index 0000000..309d70f
--- /dev/null
+++ b/assets/blocks/production/carbide-crucible.png
Binary files differ
diff --git a/assets/blocks/production/coal-centrifuge.png b/assets/blocks/production/coal-centrifuge.png
new file mode 100644
index 0000000..10265b6
--- /dev/null
+++ b/assets/blocks/production/coal-centrifuge.png
Binary files differ
diff --git a/mindus/assets/blocks/production/cryofluid-mixer-bottom.png b/assets/blocks/production/cryofluid-mixer-bottom.png
index 6e5ed2c..6e5ed2c 100644
--- a/mindus/assets/blocks/production/cryofluid-mixer-bottom.png
+++ b/assets/blocks/production/cryofluid-mixer-bottom.png
Binary files differ
diff --git a/assets/blocks/production/cryofluid-mixer.png b/assets/blocks/production/cryofluid-mixer.png
new file mode 100644
index 0000000..e9e4ecb
--- /dev/null
+++ b/assets/blocks/production/cryofluid-mixer.png
Binary files differ
diff --git a/assets/blocks/production/cultivator.png b/assets/blocks/production/cultivator.png
new file mode 100644
index 0000000..5d7e152
--- /dev/null
+++ b/assets/blocks/production/cultivator.png
Binary files differ
diff --git a/assets/blocks/production/cyanogen-synthesizer-bottom.png b/assets/blocks/production/cyanogen-synthesizer-bottom.png
new file mode 100644
index 0000000..3452f9d
--- /dev/null
+++ b/assets/blocks/production/cyanogen-synthesizer-bottom.png
Binary files differ
diff --git a/assets/blocks/production/cyanogen-synthesizer.png b/assets/blocks/production/cyanogen-synthesizer.png
new file mode 100644
index 0000000..b67f16f
--- /dev/null
+++ b/assets/blocks/production/cyanogen-synthesizer.png
Binary files differ
diff --git a/assets/blocks/production/disassembler-bottom.png b/assets/blocks/production/disassembler-bottom.png
new file mode 100644
index 0000000..87f0295
--- /dev/null
+++ b/assets/blocks/production/disassembler-bottom.png
Binary files differ
diff --git a/assets/blocks/production/disassembler.png b/assets/blocks/production/disassembler.png
new file mode 100644
index 0000000..9860ac0
--- /dev/null
+++ b/assets/blocks/production/disassembler.png
Binary files differ
diff --git a/assets/blocks/production/electric-heater-top1.png b/assets/blocks/production/electric-heater-top1.png
new file mode 100644
index 0000000..b807ab9
--- /dev/null
+++ b/assets/blocks/production/electric-heater-top1.png
Binary files differ
diff --git a/assets/blocks/production/electric-heater-top2.png b/assets/blocks/production/electric-heater-top2.png
new file mode 100644
index 0000000..78c0e49
--- /dev/null
+++ b/assets/blocks/production/electric-heater-top2.png
Binary files differ
diff --git a/assets/blocks/production/electric-heater.png b/assets/blocks/production/electric-heater.png
new file mode 100644
index 0000000..62ca7c7
--- /dev/null
+++ b/assets/blocks/production/electric-heater.png
Binary files differ
diff --git a/assets/blocks/production/electrolyzer-bottom.png b/assets/blocks/production/electrolyzer-bottom.png
new file mode 100644
index 0000000..bb2d46e
--- /dev/null
+++ b/assets/blocks/production/electrolyzer-bottom.png
Binary files differ
diff --git a/mindus/assets/blocks/production/electrolyzer-hydrogen-output1.png b/assets/blocks/production/electrolyzer-hydrogen-output1.png
index defb12c..defb12c 100644
--- a/mindus/assets/blocks/production/electrolyzer-hydrogen-output1.png
+++ b/assets/blocks/production/electrolyzer-hydrogen-output1.png
Binary files differ
diff --git a/mindus/assets/blocks/production/electrolyzer-hydrogen-output2.png b/assets/blocks/production/electrolyzer-hydrogen-output2.png
index b62e50c..b62e50c 100644
--- a/mindus/assets/blocks/production/electrolyzer-hydrogen-output2.png
+++ b/assets/blocks/production/electrolyzer-hydrogen-output2.png
Binary files differ
diff --git a/mindus/assets/blocks/production/electrolyzer-ozone-output1.png b/assets/blocks/production/electrolyzer-ozone-output1.png
index 6601210..6601210 100644
--- a/mindus/assets/blocks/production/electrolyzer-ozone-output1.png
+++ b/assets/blocks/production/electrolyzer-ozone-output1.png
Binary files differ
diff --git a/mindus/assets/blocks/production/electrolyzer-ozone-output2.png b/assets/blocks/production/electrolyzer-ozone-output2.png
index f8a5a9b..f8a5a9b 100644
--- a/mindus/assets/blocks/production/electrolyzer-ozone-output2.png
+++ b/assets/blocks/production/electrolyzer-ozone-output2.png
Binary files differ
diff --git a/assets/blocks/production/electrolyzer.png b/assets/blocks/production/electrolyzer.png
new file mode 100644
index 0000000..c8d66e4
--- /dev/null
+++ b/assets/blocks/production/electrolyzer.png
Binary files differ
diff --git a/mindus/assets/blocks/production/graphite-press.png b/assets/blocks/production/graphite-press.png
index 6f965a0..a356104 100644
--- a/mindus/assets/blocks/production/graphite-press.png
+++ b/assets/blocks/production/graphite-press.png
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-redirector-top1.png b/assets/blocks/production/heat-redirector-top1.png
index 70fd7f6..b0610a9 100644
--- a/mindus/assets/blocks/production/heat-redirector-top1.png
+++ b/assets/blocks/production/heat-redirector-top1.png
Binary files differ
diff --git a/assets/blocks/production/heat-redirector-top2.png b/assets/blocks/production/heat-redirector-top2.png
new file mode 100644
index 0000000..2f6fc72
--- /dev/null
+++ b/assets/blocks/production/heat-redirector-top2.png
Binary files differ
diff --git a/assets/blocks/production/heat-redirector.png b/assets/blocks/production/heat-redirector.png
new file mode 100644
index 0000000..fd7dc0b
--- /dev/null
+++ b/assets/blocks/production/heat-redirector.png
Binary files differ
diff --git a/assets/blocks/production/heat-router-top1.png b/assets/blocks/production/heat-router-top1.png
new file mode 100644
index 0000000..75a62a4
--- /dev/null
+++ b/assets/blocks/production/heat-router-top1.png
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-router-top2.png b/assets/blocks/production/heat-router-top2.png
index c592618..c592618 100644
--- a/mindus/assets/blocks/production/heat-router-top2.png
+++ b/assets/blocks/production/heat-router-top2.png
Binary files differ
diff --git a/assets/blocks/production/heat-router.png b/assets/blocks/production/heat-router.png
new file mode 100644
index 0000000..7f71e4d
--- /dev/null
+++ b/assets/blocks/production/heat-router.png
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-source-top1.png b/assets/blocks/production/heat-source-top1.png
index 3f53d54..3f53d54 100644
--- a/mindus/assets/blocks/production/heat-source-top1.png
+++ b/assets/blocks/production/heat-source-top1.png
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-source-top2.png b/assets/blocks/production/heat-source-top2.png
index 523d20f..523d20f 100644
--- a/mindus/assets/blocks/production/heat-source-top2.png
+++ b/assets/blocks/production/heat-source-top2.png
Binary files differ
diff --git a/assets/blocks/production/heat-source.png b/assets/blocks/production/heat-source.png
new file mode 100644
index 0000000..b4f09d9
--- /dev/null
+++ b/assets/blocks/production/heat-source.png
Binary files differ
diff --git a/assets/blocks/production/incinerator.png b/assets/blocks/production/incinerator.png
new file mode 100644
index 0000000..ae6a34f
--- /dev/null
+++ b/assets/blocks/production/incinerator.png
Binary files differ
diff --git a/assets/blocks/production/kiln.png b/assets/blocks/production/kiln.png
new file mode 100644
index 0000000..4180563
--- /dev/null
+++ b/assets/blocks/production/kiln.png
Binary files differ
diff --git a/mindus/assets/blocks/production/melter-bottom.png b/assets/blocks/production/melter-bottom.png
index 380776f..380776f 100644
--- a/mindus/assets/blocks/production/melter-bottom.png
+++ b/assets/blocks/production/melter-bottom.png
Binary files differ
diff --git a/assets/blocks/production/melter.png b/assets/blocks/production/melter.png
new file mode 100644
index 0000000..97b0278
--- /dev/null
+++ b/assets/blocks/production/melter.png
Binary files differ
diff --git a/assets/blocks/production/multi-press.png b/assets/blocks/production/multi-press.png
new file mode 100644
index 0000000..d8874fd
--- /dev/null
+++ b/assets/blocks/production/multi-press.png
Binary files differ
diff --git a/mindus/assets/blocks/production/oxidation-chamber-liquid.png b/assets/blocks/production/oxidation-chamber-liquid.png
index 84098de..84098de 100644
--- a/mindus/assets/blocks/production/oxidation-chamber-liquid.png
+++ b/assets/blocks/production/oxidation-chamber-liquid.png
Binary files differ
diff --git a/assets/blocks/production/oxidation-chamber-top1.png b/assets/blocks/production/oxidation-chamber-top1.png
new file mode 100644
index 0000000..580c74b
--- /dev/null
+++ b/assets/blocks/production/oxidation-chamber-top1.png
Binary files differ
diff --git a/assets/blocks/production/oxidation-chamber-top2.png b/assets/blocks/production/oxidation-chamber-top2.png
new file mode 100644
index 0000000..9e5489f
--- /dev/null
+++ b/assets/blocks/production/oxidation-chamber-top2.png
Binary files differ
diff --git a/assets/blocks/production/oxidation-chamber.png b/assets/blocks/production/oxidation-chamber.png
new file mode 100644
index 0000000..55ce729
--- /dev/null
+++ b/assets/blocks/production/oxidation-chamber.png
Binary files differ
diff --git a/assets/blocks/production/phase-heater-top1.png b/assets/blocks/production/phase-heater-top1.png
new file mode 100644
index 0000000..2374f39
--- /dev/null
+++ b/assets/blocks/production/phase-heater-top1.png
Binary files differ
diff --git a/assets/blocks/production/phase-heater-top2.png b/assets/blocks/production/phase-heater-top2.png
new file mode 100644
index 0000000..750434c
--- /dev/null
+++ b/assets/blocks/production/phase-heater-top2.png
Binary files differ
diff --git a/assets/blocks/production/phase-heater.png b/assets/blocks/production/phase-heater.png
new file mode 100644
index 0000000..28302b2
--- /dev/null
+++ b/assets/blocks/production/phase-heater.png
Binary files differ
diff --git a/assets/blocks/production/phase-synthesizer.png b/assets/blocks/production/phase-synthesizer.png
new file mode 100644
index 0000000..8081f6d
--- /dev/null
+++ b/assets/blocks/production/phase-synthesizer.png
Binary files differ
diff --git a/assets/blocks/production/phase-weaver.png b/assets/blocks/production/phase-weaver.png
new file mode 100644
index 0000000..576fa32
--- /dev/null
+++ b/assets/blocks/production/phase-weaver.png
Binary files differ
diff --git a/assets/blocks/production/plastanium-compressor.png b/assets/blocks/production/plastanium-compressor.png
new file mode 100644
index 0000000..2556143
--- /dev/null
+++ b/assets/blocks/production/plastanium-compressor.png
Binary files differ
diff --git a/assets/blocks/production/pulverizer.png b/assets/blocks/production/pulverizer.png
new file mode 100644
index 0000000..0d5d93a
--- /dev/null
+++ b/assets/blocks/production/pulverizer.png
Binary files differ
diff --git a/assets/blocks/production/pyratite-mixer.png b/assets/blocks/production/pyratite-mixer.png
new file mode 100644
index 0000000..206a970
--- /dev/null
+++ b/assets/blocks/production/pyratite-mixer.png
Binary files differ
diff --git a/assets/blocks/production/separator.png b/assets/blocks/production/separator.png
new file mode 100644
index 0000000..7c72cc3
--- /dev/null
+++ b/assets/blocks/production/separator.png
Binary files differ
diff --git a/assets/blocks/production/silicon-arc-furnace.png b/assets/blocks/production/silicon-arc-furnace.png
new file mode 100644
index 0000000..6d4f0b5
--- /dev/null
+++ b/assets/blocks/production/silicon-arc-furnace.png
Binary files differ
diff --git a/assets/blocks/production/silicon-crucible.png b/assets/blocks/production/silicon-crucible.png
new file mode 100644
index 0000000..2efe121
--- /dev/null
+++ b/assets/blocks/production/silicon-crucible.png
Binary files differ
diff --git a/assets/blocks/production/silicon-smelter.png b/assets/blocks/production/silicon-smelter.png
new file mode 100644
index 0000000..4cb470e
--- /dev/null
+++ b/assets/blocks/production/silicon-smelter.png
Binary files differ
diff --git a/assets/blocks/production/slag-heater-bottom.png b/assets/blocks/production/slag-heater-bottom.png
new file mode 100644
index 0000000..836d531
--- /dev/null
+++ b/assets/blocks/production/slag-heater-bottom.png
Binary files differ
diff --git a/mindus/assets/blocks/production/slag-heater-top1.png b/assets/blocks/production/slag-heater-top1.png
index 72ab2df..72ab2df 100644
--- a/mindus/assets/blocks/production/slag-heater-top1.png
+++ b/assets/blocks/production/slag-heater-top1.png
Binary files differ
diff --git a/mindus/assets/blocks/production/slag-heater-top2.png b/assets/blocks/production/slag-heater-top2.png
index 4d21c9e..4d21c9e 100644
--- a/mindus/assets/blocks/production/slag-heater-top2.png
+++ b/assets/blocks/production/slag-heater-top2.png
Binary files differ
diff --git a/assets/blocks/production/slag-heater.png b/assets/blocks/production/slag-heater.png
new file mode 100644
index 0000000..4709577
--- /dev/null
+++ b/assets/blocks/production/slag-heater.png
Binary files differ
diff --git a/assets/blocks/production/slag-incinerator-liquid.png b/assets/blocks/production/slag-incinerator-liquid.png
new file mode 100644
index 0000000..618be80
--- /dev/null
+++ b/assets/blocks/production/slag-incinerator-liquid.png
Binary files differ
diff --git a/assets/blocks/production/slag-incinerator.png b/assets/blocks/production/slag-incinerator.png
new file mode 100644
index 0000000..8cb0be7
--- /dev/null
+++ b/assets/blocks/production/slag-incinerator.png
Binary files differ
diff --git a/assets/blocks/production/spore-press.png b/assets/blocks/production/spore-press.png
new file mode 100644
index 0000000..6d9271c
--- /dev/null
+++ b/assets/blocks/production/spore-press.png
Binary files differ
diff --git a/assets/blocks/production/surge-crucible-bottom.png b/assets/blocks/production/surge-crucible-bottom.png
new file mode 100644
index 0000000..302d76b
--- /dev/null
+++ b/assets/blocks/production/surge-crucible-bottom.png
Binary files differ
diff --git a/assets/blocks/production/surge-crucible-liquid.png b/assets/blocks/production/surge-crucible-liquid.png
new file mode 100644
index 0000000..e628a34
--- /dev/null
+++ b/assets/blocks/production/surge-crucible-liquid.png
Binary files differ
diff --git a/assets/blocks/production/surge-crucible.png b/assets/blocks/production/surge-crucible.png
new file mode 100644
index 0000000..33af200
--- /dev/null
+++ b/assets/blocks/production/surge-crucible.png
Binary files differ
diff --git a/assets/blocks/production/surge-smelter.png b/assets/blocks/production/surge-smelter.png
new file mode 100644
index 0000000..a0f863b
--- /dev/null
+++ b/assets/blocks/production/surge-smelter.png
Binary files differ
diff --git a/mindus/assets/blocks/storage/container-team.png b/assets/blocks/storage/container-team.png
index 3aa6105..3aa6105 100644
--- a/mindus/assets/blocks/storage/container-team.png
+++ b/assets/blocks/storage/container-team.png
Binary files differ
diff --git a/mindus/assets/blocks/storage/container.png b/assets/blocks/storage/container.png
index ff346df..ff346df 100644
--- a/mindus/assets/blocks/storage/container.png
+++ b/assets/blocks/storage/container.png
Binary files differ
diff --git a/assets/blocks/storage/core-acropolis-team.png b/assets/blocks/storage/core-acropolis-team.png
new file mode 100644
index 0000000..1c7a3f0
--- /dev/null
+++ b/assets/blocks/storage/core-acropolis-team.png
Binary files differ
diff --git a/assets/blocks/storage/core-acropolis.png b/assets/blocks/storage/core-acropolis.png
new file mode 100644
index 0000000..5ad4e3e
--- /dev/null
+++ b/assets/blocks/storage/core-acropolis.png
Binary files differ
diff --git a/assets/blocks/storage/core-bastion-team.png b/assets/blocks/storage/core-bastion-team.png
new file mode 100644
index 0000000..8848dff
--- /dev/null
+++ b/assets/blocks/storage/core-bastion-team.png
Binary files differ
diff --git a/assets/blocks/storage/core-bastion.png b/assets/blocks/storage/core-bastion.png
new file mode 100644
index 0000000..0e8f6e5
--- /dev/null
+++ b/assets/blocks/storage/core-bastion.png
Binary files differ
diff --git a/assets/blocks/storage/core-citadel-team.png b/assets/blocks/storage/core-citadel-team.png
new file mode 100644
index 0000000..1df2773
--- /dev/null
+++ b/assets/blocks/storage/core-citadel-team.png
Binary files differ
diff --git a/assets/blocks/storage/core-citadel.png b/assets/blocks/storage/core-citadel.png
new file mode 100644
index 0000000..9451f70
--- /dev/null
+++ b/assets/blocks/storage/core-citadel.png
Binary files differ
diff --git a/assets/blocks/storage/core-foundation-team.png b/assets/blocks/storage/core-foundation-team.png
new file mode 100644
index 0000000..d8a5374
--- /dev/null
+++ b/assets/blocks/storage/core-foundation-team.png
Binary files differ
diff --git a/assets/blocks/storage/core-foundation.png b/assets/blocks/storage/core-foundation.png
new file mode 100644
index 0000000..8c02e4f
--- /dev/null
+++ b/assets/blocks/storage/core-foundation.png
Binary files differ
diff --git a/assets/blocks/storage/core-nucleus-team.png b/assets/blocks/storage/core-nucleus-team.png
new file mode 100644
index 0000000..0b9533d
--- /dev/null
+++ b/assets/blocks/storage/core-nucleus-team.png
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-nucleus.png b/assets/blocks/storage/core-nucleus.png
index 59394e4..59394e4 100644
--- a/mindus/assets/blocks/storage/core-nucleus.png
+++ b/assets/blocks/storage/core-nucleus.png
Binary files differ
diff --git a/assets/blocks/storage/core-shard-team.png b/assets/blocks/storage/core-shard-team.png
new file mode 100644
index 0000000..d8cef0e
--- /dev/null
+++ b/assets/blocks/storage/core-shard-team.png
Binary files differ
diff --git a/assets/blocks/storage/core-shard.png b/assets/blocks/storage/core-shard.png
new file mode 100644
index 0000000..f6ce140
--- /dev/null
+++ b/assets/blocks/storage/core-shard.png
Binary files differ
diff --git a/assets/blocks/storage/reinforced-container-team.png b/assets/blocks/storage/reinforced-container-team.png
new file mode 100644
index 0000000..9283811
--- /dev/null
+++ b/assets/blocks/storage/reinforced-container-team.png
Binary files differ
diff --git a/assets/blocks/storage/reinforced-container.png b/assets/blocks/storage/reinforced-container.png
new file mode 100644
index 0000000..2c52768
--- /dev/null
+++ b/assets/blocks/storage/reinforced-container.png
Binary files differ
diff --git a/mindus/assets/blocks/storage/reinforced-vault-team.png b/assets/blocks/storage/reinforced-vault-team.png
index 429e1e3..429e1e3 100644
--- a/mindus/assets/blocks/storage/reinforced-vault-team.png
+++ b/assets/blocks/storage/reinforced-vault-team.png
Binary files differ
diff --git a/assets/blocks/storage/reinforced-vault.png b/assets/blocks/storage/reinforced-vault.png
new file mode 100644
index 0000000..82afb8c
--- /dev/null
+++ b/assets/blocks/storage/reinforced-vault.png
Binary files differ
diff --git a/assets/blocks/storage/unloader-center.png b/assets/blocks/storage/unloader-center.png
new file mode 100644
index 0000000..847b884
--- /dev/null
+++ b/assets/blocks/storage/unloader-center.png
Binary files differ
diff --git a/assets/blocks/storage/unloader.png b/assets/blocks/storage/unloader.png
new file mode 100644
index 0000000..e5f891e
--- /dev/null
+++ b/assets/blocks/storage/unloader.png
Binary files differ
diff --git a/assets/blocks/storage/vault-team.png b/assets/blocks/storage/vault-team.png
new file mode 100644
index 0000000..be63faf
--- /dev/null
+++ b/assets/blocks/storage/vault-team.png
Binary files differ
diff --git a/mindus/assets/blocks/storage/vault.png b/assets/blocks/storage/vault.png
index 43eda41..43eda41 100644
--- a/mindus/assets/blocks/storage/vault.png
+++ b/assets/blocks/storage/vault.png
Binary files differ
diff --git a/assets/blocks/turrets/afflict.png b/assets/blocks/turrets/afflict.png
new file mode 100644
index 0000000..7b37826
--- /dev/null
+++ b/assets/blocks/turrets/afflict.png
Binary files differ
diff --git a/assets/blocks/turrets/arc.png b/assets/blocks/turrets/arc.png
new file mode 100644
index 0000000..be61590
--- /dev/null
+++ b/assets/blocks/turrets/arc.png
Binary files differ
diff --git a/assets/blocks/turrets/breach.png b/assets/blocks/turrets/breach.png
new file mode 100644
index 0000000..e9a490c
--- /dev/null
+++ b/assets/blocks/turrets/breach.png
Binary files differ
diff --git a/assets/blocks/turrets/cyclone.png b/assets/blocks/turrets/cyclone.png
new file mode 100644
index 0000000..96cabd4
--- /dev/null
+++ b/assets/blocks/turrets/cyclone.png
Binary files differ
diff --git a/assets/blocks/turrets/diffuse.png b/assets/blocks/turrets/diffuse.png
new file mode 100644
index 0000000..3475747
--- /dev/null
+++ b/assets/blocks/turrets/diffuse.png
Binary files differ
diff --git a/assets/blocks/turrets/disperse.png b/assets/blocks/turrets/disperse.png
new file mode 100644
index 0000000..641ae4b
--- /dev/null
+++ b/assets/blocks/turrets/disperse.png
Binary files differ
diff --git a/assets/blocks/turrets/duo.png b/assets/blocks/turrets/duo.png
new file mode 100644
index 0000000..2f7e385
--- /dev/null
+++ b/assets/blocks/turrets/duo.png
Binary files differ
diff --git a/assets/blocks/turrets/foreshadow.png b/assets/blocks/turrets/foreshadow.png
new file mode 100644
index 0000000..381a2fe
--- /dev/null
+++ b/assets/blocks/turrets/foreshadow.png
Binary files differ
diff --git a/assets/blocks/turrets/fuse.png b/assets/blocks/turrets/fuse.png
new file mode 100644
index 0000000..bb9a0b6
--- /dev/null
+++ b/assets/blocks/turrets/fuse.png
Binary files differ
diff --git a/assets/blocks/turrets/hail.png b/assets/blocks/turrets/hail.png
new file mode 100644
index 0000000..8250d37
--- /dev/null
+++ b/assets/blocks/turrets/hail.png
Binary files differ
diff --git a/assets/blocks/turrets/lancer.png b/assets/blocks/turrets/lancer.png
new file mode 100644
index 0000000..9fff5ba
--- /dev/null
+++ b/assets/blocks/turrets/lancer.png
Binary files differ
diff --git a/assets/blocks/turrets/lustre.png b/assets/blocks/turrets/lustre.png
new file mode 100644
index 0000000..e436f52
--- /dev/null
+++ b/assets/blocks/turrets/lustre.png
Binary files differ
diff --git a/assets/blocks/turrets/malign.png b/assets/blocks/turrets/malign.png
new file mode 100644
index 0000000..03e692f
--- /dev/null
+++ b/assets/blocks/turrets/malign.png
Binary files differ
diff --git a/assets/blocks/turrets/meltdown.png b/assets/blocks/turrets/meltdown.png
new file mode 100644
index 0000000..d63c8fb
--- /dev/null
+++ b/assets/blocks/turrets/meltdown.png
Binary files differ
diff --git a/assets/blocks/turrets/parallax.png b/assets/blocks/turrets/parallax.png
new file mode 100644
index 0000000..4d581dd
--- /dev/null
+++ b/assets/blocks/turrets/parallax.png
Binary files differ
diff --git a/assets/blocks/turrets/ripple.png b/assets/blocks/turrets/ripple.png
new file mode 100644
index 0000000..507f0b6
--- /dev/null
+++ b/assets/blocks/turrets/ripple.png
Binary files differ
diff --git a/assets/blocks/turrets/salvo.png b/assets/blocks/turrets/salvo.png
new file mode 100644
index 0000000..09136e0
--- /dev/null
+++ b/assets/blocks/turrets/salvo.png
Binary files differ
diff --git a/assets/blocks/turrets/scathe.png b/assets/blocks/turrets/scathe.png
new file mode 100644
index 0000000..897532a
--- /dev/null
+++ b/assets/blocks/turrets/scathe.png
Binary files differ
diff --git a/assets/blocks/turrets/scatter.png b/assets/blocks/turrets/scatter.png
new file mode 100644
index 0000000..1cc620a
--- /dev/null
+++ b/assets/blocks/turrets/scatter.png
Binary files differ
diff --git a/assets/blocks/turrets/scorch.png b/assets/blocks/turrets/scorch.png
new file mode 100644
index 0000000..473e8d3
--- /dev/null
+++ b/assets/blocks/turrets/scorch.png
Binary files differ
diff --git a/assets/blocks/turrets/segment.png b/assets/blocks/turrets/segment.png
new file mode 100644
index 0000000..c34929c
--- /dev/null
+++ b/assets/blocks/turrets/segment.png
Binary files differ
diff --git a/assets/blocks/turrets/smite.png b/assets/blocks/turrets/smite.png
new file mode 100644
index 0000000..3402149
--- /dev/null
+++ b/assets/blocks/turrets/smite.png
Binary files differ
diff --git a/assets/blocks/turrets/spectre.png b/assets/blocks/turrets/spectre.png
new file mode 100644
index 0000000..811ef6e
--- /dev/null
+++ b/assets/blocks/turrets/spectre.png
Binary files differ
diff --git a/assets/blocks/turrets/sublimate.png b/assets/blocks/turrets/sublimate.png
new file mode 100644
index 0000000..5155235
--- /dev/null
+++ b/assets/blocks/turrets/sublimate.png
Binary files differ
diff --git a/assets/blocks/turrets/swarmer.png b/assets/blocks/turrets/swarmer.png
new file mode 100644
index 0000000..1680beb
--- /dev/null
+++ b/assets/blocks/turrets/swarmer.png
Binary files differ
diff --git a/assets/blocks/turrets/titan.png b/assets/blocks/turrets/titan.png
new file mode 100644
index 0000000..e781843
--- /dev/null
+++ b/assets/blocks/turrets/titan.png
Binary files differ
diff --git a/assets/blocks/turrets/tsunami.png b/assets/blocks/turrets/tsunami.png
new file mode 100644
index 0000000..6f72793
--- /dev/null
+++ b/assets/blocks/turrets/tsunami.png
Binary files differ
diff --git a/assets/blocks/turrets/wave.png b/assets/blocks/turrets/wave.png
new file mode 100644
index 0000000..360994d
--- /dev/null
+++ b/assets/blocks/turrets/wave.png
Binary files differ
diff --git a/assets/blocks/units/additive-reconstructor-top.png b/assets/blocks/units/additive-reconstructor-top.png
new file mode 100644
index 0000000..235e672
--- /dev/null
+++ b/assets/blocks/units/additive-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/additive-reconstructor.png b/assets/blocks/units/additive-reconstructor.png
new file mode 100644
index 0000000..fbc893b
--- /dev/null
+++ b/assets/blocks/units/additive-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/air-factory.png b/assets/blocks/units/air-factory.png
new file mode 100644
index 0000000..0644c21
--- /dev/null
+++ b/assets/blocks/units/air-factory.png
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module-side1.png b/assets/blocks/units/basic-assembler-module-side1.png
new file mode 100644
index 0000000..2bc2f85
--- /dev/null
+++ b/assets/blocks/units/basic-assembler-module-side1.png
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module-side2.png b/assets/blocks/units/basic-assembler-module-side2.png
new file mode 100644
index 0000000..6ac7279
--- /dev/null
+++ b/assets/blocks/units/basic-assembler-module-side2.png
Binary files differ
diff --git a/assets/blocks/units/basic-assembler-module.png b/assets/blocks/units/basic-assembler-module.png
new file mode 100644
index 0000000..328c982
--- /dev/null
+++ b/assets/blocks/units/basic-assembler-module.png
Binary files differ
diff --git a/assets/blocks/units/exponential-reconstructor-top.png b/assets/blocks/units/exponential-reconstructor-top.png
new file mode 100644
index 0000000..fb14b35
--- /dev/null
+++ b/assets/blocks/units/exponential-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/exponential-reconstructor.png b/assets/blocks/units/exponential-reconstructor.png
new file mode 100644
index 0000000..d448f39
--- /dev/null
+++ b/assets/blocks/units/exponential-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/ground-factory.png b/assets/blocks/units/ground-factory.png
new file mode 100644
index 0000000..4897ec4
--- /dev/null
+++ b/assets/blocks/units/ground-factory.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-side1.png b/assets/blocks/units/mech-assembler-side1.png
new file mode 100644
index 0000000..bfa591c
--- /dev/null
+++ b/assets/blocks/units/mech-assembler-side1.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-side2.png b/assets/blocks/units/mech-assembler-side2.png
new file mode 100644
index 0000000..9cd4cde
--- /dev/null
+++ b/assets/blocks/units/mech-assembler-side2.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler-top.png b/assets/blocks/units/mech-assembler-top.png
new file mode 100644
index 0000000..eaeb699
--- /dev/null
+++ b/assets/blocks/units/mech-assembler-top.png
Binary files differ
diff --git a/assets/blocks/units/mech-assembler.png b/assets/blocks/units/mech-assembler.png
new file mode 100644
index 0000000..d49f5a2
--- /dev/null
+++ b/assets/blocks/units/mech-assembler.png
Binary files differ
diff --git a/assets/blocks/units/mech-fabricator-top.png b/assets/blocks/units/mech-fabricator-top.png
new file mode 100644
index 0000000..d4e4d62
--- /dev/null
+++ b/assets/blocks/units/mech-fabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/mech-fabricator.png b/assets/blocks/units/mech-fabricator.png
new file mode 100644
index 0000000..2556a96
--- /dev/null
+++ b/assets/blocks/units/mech-fabricator.png
Binary files differ
diff --git a/assets/blocks/units/mech-refabricator-top.png b/assets/blocks/units/mech-refabricator-top.png
new file mode 100644
index 0000000..48446c0
--- /dev/null
+++ b/assets/blocks/units/mech-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/mech-refabricator.png b/assets/blocks/units/mech-refabricator.png
new file mode 100644
index 0000000..5d89f8f
--- /dev/null
+++ b/assets/blocks/units/mech-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/multiplicative-reconstructor-top.png b/assets/blocks/units/multiplicative-reconstructor-top.png
new file mode 100644
index 0000000..e319530
--- /dev/null
+++ b/assets/blocks/units/multiplicative-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/multiplicative-reconstructor.png b/assets/blocks/units/multiplicative-reconstructor.png
new file mode 100644
index 0000000..5ea5f9f
--- /dev/null
+++ b/assets/blocks/units/multiplicative-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/naval-factory.png b/assets/blocks/units/naval-factory.png
new file mode 100644
index 0000000..f022ba2
--- /dev/null
+++ b/assets/blocks/units/naval-factory.png
Binary files differ
diff --git a/assets/blocks/units/prime-refabricator-top.png b/assets/blocks/units/prime-refabricator-top.png
new file mode 100644
index 0000000..675639a
--- /dev/null
+++ b/assets/blocks/units/prime-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/prime-refabricator.png b/assets/blocks/units/prime-refabricator.png
new file mode 100644
index 0000000..d48e63c
--- /dev/null
+++ b/assets/blocks/units/prime-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/repair-point.png b/assets/blocks/units/repair-point.png
new file mode 100644
index 0000000..1f81c2c
--- /dev/null
+++ b/assets/blocks/units/repair-point.png
Binary files differ
diff --git a/assets/blocks/units/repair-turret.png b/assets/blocks/units/repair-turret.png
new file mode 100644
index 0000000..f410dbf
--- /dev/null
+++ b/assets/blocks/units/repair-turret.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-side1.png b/assets/blocks/units/ship-assembler-side1.png
new file mode 100644
index 0000000..ec57520
--- /dev/null
+++ b/assets/blocks/units/ship-assembler-side1.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-side2.png b/assets/blocks/units/ship-assembler-side2.png
new file mode 100644
index 0000000..5bac81c
--- /dev/null
+++ b/assets/blocks/units/ship-assembler-side2.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler-top.png b/assets/blocks/units/ship-assembler-top.png
new file mode 100644
index 0000000..c055289
--- /dev/null
+++ b/assets/blocks/units/ship-assembler-top.png
Binary files differ
diff --git a/assets/blocks/units/ship-assembler.png b/assets/blocks/units/ship-assembler.png
new file mode 100644
index 0000000..1617c27
--- /dev/null
+++ b/assets/blocks/units/ship-assembler.png
Binary files differ
diff --git a/assets/blocks/units/ship-fabricator-top.png b/assets/blocks/units/ship-fabricator-top.png
new file mode 100644
index 0000000..b120238
--- /dev/null
+++ b/assets/blocks/units/ship-fabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/ship-fabricator.png b/assets/blocks/units/ship-fabricator.png
new file mode 100644
index 0000000..3f02145
--- /dev/null
+++ b/assets/blocks/units/ship-fabricator.png
Binary files differ
diff --git a/assets/blocks/units/ship-refabricator-top.png b/assets/blocks/units/ship-refabricator-top.png
new file mode 100644
index 0000000..aa8cc85
--- /dev/null
+++ b/assets/blocks/units/ship-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/ship-refabricator.png b/assets/blocks/units/ship-refabricator.png
new file mode 100644
index 0000000..1c921a4
--- /dev/null
+++ b/assets/blocks/units/ship-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-side1.png b/assets/blocks/units/tank-assembler-side1.png
new file mode 100644
index 0000000..6ea0859
--- /dev/null
+++ b/assets/blocks/units/tank-assembler-side1.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-side2.png b/assets/blocks/units/tank-assembler-side2.png
new file mode 100644
index 0000000..c549831
--- /dev/null
+++ b/assets/blocks/units/tank-assembler-side2.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler-top.png b/assets/blocks/units/tank-assembler-top.png
new file mode 100644
index 0000000..1478f2c
--- /dev/null
+++ b/assets/blocks/units/tank-assembler-top.png
Binary files differ
diff --git a/assets/blocks/units/tank-assembler.png b/assets/blocks/units/tank-assembler.png
new file mode 100644
index 0000000..74e2017
--- /dev/null
+++ b/assets/blocks/units/tank-assembler.png
Binary files differ
diff --git a/assets/blocks/units/tank-fabricator-top.png b/assets/blocks/units/tank-fabricator-top.png
new file mode 100644
index 0000000..18ef34f
--- /dev/null
+++ b/assets/blocks/units/tank-fabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/tank-fabricator.png b/assets/blocks/units/tank-fabricator.png
new file mode 100644
index 0000000..91eec5d
--- /dev/null
+++ b/assets/blocks/units/tank-fabricator.png
Binary files differ
diff --git a/assets/blocks/units/tank-refabricator-top.png b/assets/blocks/units/tank-refabricator-top.png
new file mode 100644
index 0000000..f57933e
--- /dev/null
+++ b/assets/blocks/units/tank-refabricator-top.png
Binary files differ
diff --git a/assets/blocks/units/tank-refabricator.png b/assets/blocks/units/tank-refabricator.png
new file mode 100644
index 0000000..3d73664
--- /dev/null
+++ b/assets/blocks/units/tank-refabricator.png
Binary files differ
diff --git a/assets/blocks/units/tetrative-reconstructor-top.png b/assets/blocks/units/tetrative-reconstructor-top.png
new file mode 100644
index 0000000..9db3308
--- /dev/null
+++ b/assets/blocks/units/tetrative-reconstructor-top.png
Binary files differ
diff --git a/assets/blocks/units/tetrative-reconstructor.png b/assets/blocks/units/tetrative-reconstructor.png
new file mode 100644
index 0000000..391f483
--- /dev/null
+++ b/assets/blocks/units/tetrative-reconstructor.png
Binary files differ
diff --git a/assets/blocks/units/unit-cargo-loader.png b/assets/blocks/units/unit-cargo-loader.png
new file mode 100644
index 0000000..6b8de38
--- /dev/null
+++ b/assets/blocks/units/unit-cargo-loader.png
Binary files differ
diff --git a/assets/blocks/units/unit-repair-tower.png b/assets/blocks/units/unit-repair-tower.png
new file mode 100644
index 0000000..59530d8
--- /dev/null
+++ b/assets/blocks/units/unit-repair-tower.png
Binary files differ
diff --git a/assets/blocks/walls/beryllium-wall-large.png b/assets/blocks/walls/beryllium-wall-large.png
new file mode 100644
index 0000000..6280f13
--- /dev/null
+++ b/assets/blocks/walls/beryllium-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/beryllium-wall.png b/assets/blocks/walls/beryllium-wall.png
new file mode 100644
index 0000000..575bfe0
--- /dev/null
+++ b/assets/blocks/walls/beryllium-wall.png
Binary files differ
diff --git a/assets/blocks/walls/blast-door-open.png b/assets/blocks/walls/blast-door-open.png
new file mode 100644
index 0000000..ba18d5a
--- /dev/null
+++ b/assets/blocks/walls/blast-door-open.png
Binary files differ
diff --git a/assets/blocks/walls/blast-door.png b/assets/blocks/walls/blast-door.png
new file mode 100644
index 0000000..088eed5
--- /dev/null
+++ b/assets/blocks/walls/blast-door.png
Binary files differ
diff --git a/assets/blocks/walls/carbide-wall-large.png b/assets/blocks/walls/carbide-wall-large.png
new file mode 100644
index 0000000..959b005
--- /dev/null
+++ b/assets/blocks/walls/carbide-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/carbide-wall.png b/assets/blocks/walls/carbide-wall.png
new file mode 100644
index 0000000..98ea5f4
--- /dev/null
+++ b/assets/blocks/walls/carbide-wall.png
Binary files differ
diff --git a/mindus/assets/blocks/walls/copper-wall-large.png b/assets/blocks/walls/copper-wall-large.png
index 3d4286e..3d4286e 100644
--- a/mindus/assets/blocks/walls/copper-wall-large.png
+++ b/assets/blocks/walls/copper-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/copper-wall.png b/assets/blocks/walls/copper-wall.png
new file mode 100644
index 0000000..04d0cf8
--- /dev/null
+++ b/assets/blocks/walls/copper-wall.png
Binary files differ
diff --git a/assets/blocks/walls/door-large-open.png b/assets/blocks/walls/door-large-open.png
new file mode 100644
index 0000000..bd1a2b1
--- /dev/null
+++ b/assets/blocks/walls/door-large-open.png
Binary files differ
diff --git a/assets/blocks/walls/door-large.png b/assets/blocks/walls/door-large.png
new file mode 100644
index 0000000..3527334
--- /dev/null
+++ b/assets/blocks/walls/door-large.png
Binary files differ
diff --git a/assets/blocks/walls/door-open.png b/assets/blocks/walls/door-open.png
new file mode 100644
index 0000000..78e5708
--- /dev/null
+++ b/assets/blocks/walls/door-open.png
Binary files differ
diff --git a/assets/blocks/walls/door.png b/assets/blocks/walls/door.png
new file mode 100644
index 0000000..63d2431
--- /dev/null
+++ b/assets/blocks/walls/door.png
Binary files differ
diff --git a/assets/blocks/walls/phase-wall-large.png b/assets/blocks/walls/phase-wall-large.png
new file mode 100644
index 0000000..c571315
--- /dev/null
+++ b/assets/blocks/walls/phase-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/phase-wall.png b/assets/blocks/walls/phase-wall.png
new file mode 100644
index 0000000..ffd84f0
--- /dev/null
+++ b/assets/blocks/walls/phase-wall.png
Binary files differ
diff --git a/assets/blocks/walls/plastanium-wall-large.png b/assets/blocks/walls/plastanium-wall-large.png
new file mode 100644
index 0000000..3c61d22
--- /dev/null
+++ b/assets/blocks/walls/plastanium-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/plastanium-wall.png b/assets/blocks/walls/plastanium-wall.png
new file mode 100644
index 0000000..2278aa3
--- /dev/null
+++ b/assets/blocks/walls/plastanium-wall.png
Binary files differ
diff --git a/assets/blocks/walls/reinforced-surge-wall-large.png b/assets/blocks/walls/reinforced-surge-wall-large.png
new file mode 100644
index 0000000..626dc9e
--- /dev/null
+++ b/assets/blocks/walls/reinforced-surge-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/reinforced-surge-wall.png b/assets/blocks/walls/reinforced-surge-wall.png
new file mode 100644
index 0000000..2268733
--- /dev/null
+++ b/assets/blocks/walls/reinforced-surge-wall.png
Binary files differ
diff --git a/mindus/assets/blocks/walls/scrap-wall-gigantic.png b/assets/blocks/walls/scrap-wall-gigantic.png
index c503468..c503468 100644
--- a/mindus/assets/blocks/walls/scrap-wall-gigantic.png
+++ b/assets/blocks/walls/scrap-wall-gigantic.png
Binary files differ
diff --git a/assets/blocks/walls/scrap-wall-huge.png b/assets/blocks/walls/scrap-wall-huge.png
new file mode 100644
index 0000000..d5c5822
--- /dev/null
+++ b/assets/blocks/walls/scrap-wall-huge.png
Binary files differ
diff --git a/assets/blocks/walls/scrap-wall-large.png b/assets/blocks/walls/scrap-wall-large.png
new file mode 100644
index 0000000..5785da4
--- /dev/null
+++ b/assets/blocks/walls/scrap-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/scrap-wall.png b/assets/blocks/walls/scrap-wall.png
new file mode 100644
index 0000000..49ac797
--- /dev/null
+++ b/assets/blocks/walls/scrap-wall.png
Binary files differ
diff --git a/mindus/assets/blocks/walls/shielded-wall.png b/assets/blocks/walls/shielded-wall.png
index 1c6f453..1c6f453 100644
--- a/mindus/assets/blocks/walls/shielded-wall.png
+++ b/assets/blocks/walls/shielded-wall.png
Binary files differ
diff --git a/assets/blocks/walls/surge-wall-large.png b/assets/blocks/walls/surge-wall-large.png
new file mode 100644
index 0000000..6ecdbfa
--- /dev/null
+++ b/assets/blocks/walls/surge-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/surge-wall.png b/assets/blocks/walls/surge-wall.png
new file mode 100644
index 0000000..5a24918
--- /dev/null
+++ b/assets/blocks/walls/surge-wall.png
Binary files differ
diff --git a/mindus/assets/blocks/walls/thorium-wall-large.png b/assets/blocks/walls/thorium-wall-large.png
index 551f775..551f775 100644
--- a/mindus/assets/blocks/walls/thorium-wall-large.png
+++ b/assets/blocks/walls/thorium-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/thorium-wall.png b/assets/blocks/walls/thorium-wall.png
new file mode 100644
index 0000000..6e10b09
--- /dev/null
+++ b/assets/blocks/walls/thorium-wall.png
Binary files differ
diff --git a/assets/blocks/walls/thruster-top.png b/assets/blocks/walls/thruster-top.png
new file mode 100644
index 0000000..4b8e315
--- /dev/null
+++ b/assets/blocks/walls/thruster-top.png
Binary files differ
diff --git a/mindus/assets/blocks/walls/thruster.png b/assets/blocks/walls/thruster.png
index ec800a0..ec800a0 100644
--- a/mindus/assets/blocks/walls/thruster.png
+++ b/assets/blocks/walls/thruster.png
Binary files differ
diff --git a/mindus/assets/blocks/walls/titanium-wall-large.png b/assets/blocks/walls/titanium-wall-large.png
index 6573133..6573133 100644
--- a/mindus/assets/blocks/walls/titanium-wall-large.png
+++ b/assets/blocks/walls/titanium-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/titanium-wall.png b/assets/blocks/walls/titanium-wall.png
new file mode 100644
index 0000000..d712b42
--- /dev/null
+++ b/assets/blocks/walls/titanium-wall.png
Binary files differ
diff --git a/assets/blocks/walls/tungsten-wall-large.png b/assets/blocks/walls/tungsten-wall-large.png
new file mode 100644
index 0000000..8f10e22
--- /dev/null
+++ b/assets/blocks/walls/tungsten-wall-large.png
Binary files differ
diff --git a/assets/blocks/walls/tungsten-wall.png b/assets/blocks/walls/tungsten-wall.png
new file mode 100644
index 0000000..d8d7615
--- /dev/null
+++ b/assets/blocks/walls/tungsten-wall.png
Binary files differ
diff --git a/build.rs b/build.rs
new file mode 100644
index 0000000..94230a4
--- /dev/null
+++ b/build.rs
@@ -0,0 +1,115 @@
+#![feature(let_chains)]
+use image::codecs::png::PngDecoder;
+use image::DynamicImage;
+use std::fs::File;
+use std::io::{BufReader, Write as _};
+use std::iter::Iterator;
+use std::path::Path;
+use walkdir::WalkDir;
+
+macro_rules! wr {
+ ($dst:expr => $($arg:tt)*) => { writeln!($dst, $($arg)*).unwrap() };
+}
+
+fn kebab2bigsnek(kebab: &str) -> String {
+ let mut n = String::new();
+ n.reserve(kebab.len());
+ for c in kebab.chars() {
+ if c == '-' {
+ n.push('_');
+ } else {
+ n.push(c.to_ascii_uppercase());
+ }
+ }
+ n
+}
+
+fn main() {
+ let _ = std::fs::remove_dir_all("target/out");
+ let walkdir = WalkDir::new("assets");
+ println!("cargo:rerun-if-changed=assets/");
+ println!("cargo:rerun-if-changed=build.rs");
+ let o = std::env::var("OUT_DIR").unwrap();
+ let o = Path::new(&o);
+ let mut full = File::create(o.join("full.rs")).unwrap();
+ // let mut half = File::create(o.join("half.rs")).unwrap();
+ let mut quar = File::create(o.join("quar.rs")).unwrap();
+ let mut eigh = File::create(o.join("eigh.rs")).unwrap();
+ let mut n = 22usize;
+
+ wr!(full => "pub mod full {{");
+ wr!(full => "pub static EMPTY: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(32) }}, &[0; 32 * 32 * 4]);");
+
+ wr!(quar => "pub mod quar {{");
+ // forced to do this because try_into isnt const
+ wr!(quar => "pub static EMPTY: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(8) }}, &[0; 8 * 8 * 4]);");
+
+ wr!(eigh => "pub mod eigh {{");
+ wr!(eigh => "pub static EMPTY: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, unsafe {{ std::num::NonZeroU32::new_unchecked(4) }}, &[0; 4 * 4 * 4]);");
+
+ for mut file in [&full, &quar, &eigh] {
+ wr!(file => "use crate::utils::Image;");
+ wr!(file => "pub static CLIFF: Image<&[u8], 4> = EMPTY.copy();");
+ for i in 1..=16 {
+ wr!(file => "pub static BUILD{}: Image<&[u8], 4> = EMPTY.copy();", i);
+ }
+ }
+ for e in walkdir.into_iter().filter_map(Result::ok) {
+ let path = e.path();
+ if path.is_file() && let Some(e) = path.extension() && e == "png" {
+ let p = DynamicImage::from_decoder(PngDecoder::new(BufReader::new(File::open(path).unwrap())).unwrap()).unwrap().into_rgba8();
+ if path.file_name().unwrap().to_str().unwrap().contains("-liquid.png") {
+ continue
+ }
+ let f = path.file_name().unwrap().to_str().unwrap();
+ if f.contains("bottom") || f.contains("-team") || f.contains("-end") || f.contains("stack") {
+ continue;
+ }
+ let path = kebab2bigsnek(path.with_extension("").file_name().unwrap().to_str().unwrap());
+ if matches!(path.as_str(), "CLIFF_CRUSHER_ROTATOR" | "NEOPLASIA_REACTOR_CENTER" | "FLUX_REACTOR_MID" | "EDGE" | "PHASE_CONVEYOR_BRIDGE" | "BRIDGE_ARROW" | "DUCT_BRIDGE_BRIDGE" | "DUCT_BRIDGE_ARROW" | "LAUNCHPOD" | "BRIDGE_CONVEYOR_BRIDGE" | "BRIDGE_CONVEYOR_ARROW" | "PHASE_CONVEYOR_ARROW" | "REINFORCED_BRIDGE_CONDUIT_ARROW" | "REINFORCED_BRIDGE_CONDUIT_BRIDGE" | "PHASE_CONDUIT_BRIDGE" | "BRIDGE_CONDUIT_ARROW" | "PHASE_CONDUIT_ARROW" | "BRIDGE_CONDUIT_BRIDGE" | "PLATED_CONDUIT_CAP") {
+ continue
+ }
+ macro_rules! writ {
+ ($ext:ident / $scale:literal) => {
+ let mut buf = File::create(o.join(n.to_string() + "-" + stringify!($ext))).unwrap();
+ let new = if $scale == 1 {
+ p.clone()
+ } else {
+ // boulders
+ let (mx, my) = if p.width() + p.height() == 48+48 {
+ (32, 32)
+ // vents (dont match VENT_CONDENSER, do match (RHYOLITE_VENT)
+ } else if path.contains("_VENT")
+ // talls
+ || matches!(path.as_str(), "YELLOWCORAL" | "WHITE_TREE" | "WHITE_TREE_DEAD" | "REDWEED" | "SPORE_CLUSTER" | "CRYSTAL_BLOCKS" | "CRYSTAL_CLUSTER" | "VIBRANT_CRYSTAL_CLUSTER" | "CRYSTAL_ORBS") {
+ (32, 32)
+ } else {
+ (p.height(), p.height())
+ };
+ image::imageops::resize(
+ &p,
+ mx / $scale,
+ my / $scale,
+ image::imageops::Nearest,
+ )
+ };
+ let x = new.width();
+ let y = new.height();
+ buf.write_all(&new.into_raw()).unwrap();
+ wr!($ext =>
+ r#"pub(crate) static {path}: Image<&[u8], 4> = Image::new(unsafe {{ std::num::NonZeroU32::new_unchecked( {x} ) }}, unsafe {{ std::num::NonZeroU32::new_unchecked( {y} ) }}, include_bytes!(concat!(env!("OUT_DIR"), "/{n}-{}")));"#,
+ stringify!($ext)
+ );
+ };
+ }
+ writ!(full / 1);
+ // writ!(half + 0.5);
+ writ!(quar / 4);
+ writ!(eigh / 8);
+ n += 1;
+ }
+ }
+ for mut f in [full, eigh, quar] {
+ f.write_all(b"}").unwrap();
+ }
+}
diff --git a/mindus/items.py b/items.py
index 922cc30..922cc30 100644
--- a/mindus/items.py
+++ b/items.py
diff --git a/lemu/.gitignore b/lemu/.gitignore
deleted file mode 100644
index 53739ff..0000000
--- a/lemu/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-image*.png
diff --git a/lemu/Cargo.toml b/lemu/Cargo.toml
deleted file mode 100644
index 551d41f..0000000
--- a/lemu/Cargo.toml
+++ /dev/null
@@ -1,36 +0,0 @@
-[package]
-name = "lemu"
-version = "0.2.22"
-edition = "2024"
-description = "M-LOG runner"
-authors = ["bend-n <[email protected]>"]
-repository = "https://github.com/bend-n/mindus.git"
-license = "MIT"
-readme = "README.md"
-keywords = ["mindustry", "logic", "emulator", "executor"]
-
-[dependencies]
-thiserror = "1.0"
-enum_dispatch = "0.3"
-fimg = { version = "0.4.52", default-features = false }
-logos = "0.14.0"
-rust-fuzzy-search = { version = "0.1.1", optional = true }
-beef = "0.5"
-lerr = { version = "0.1.5", optional = true }
-comat = { version = "0.1.2", optional = true }
-vecto = "0.1.1"
-phf = { version = "0.12.1", features = ["macros"] }
-atools = "0.1.7"
-car = "0.1.2"
-
-[features]
-debug = ["comat"]
-bin = ["fimg/save", "diagnose"]
-diagnose = ["rust-fuzzy-search", "lerr", "comat"]
-default = ["bin"]
-
-[[bin]]
-name = "lemu"
-doc = false
-required-features = ["bin"]
-path = "src/main.rs"
diff --git a/lemu/LICENSE b/lemu/LICENSE
deleted file mode 100644
index 8c33164..0000000
--- a/lemu/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2026 bendn
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/lemu/README.md b/lemu/README.md
deleted file mode 100644
index 34044f9..0000000
--- a/lemu/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# lemu
-
-mindustry Logic EMUlator.
-
-## Usage
-
-```rust
-use lemu::Executor;
-let mut lex = Executor::with_output(std::io::stdout()).program(r#"print "hello world""#).expect("program ok");
-lex.run();
-``` \ No newline at end of file
diff --git a/lemu/rust-toolchain.toml b/lemu/rust-toolchain.toml
deleted file mode 100644
index 5d56faf..0000000
--- a/lemu/rust-toolchain.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[toolchain]
-channel = "nightly"
diff --git a/lemu/rustfmt.toml b/lemu/rustfmt.toml
deleted file mode 100644
index d4d3d50..0000000
--- a/lemu/rustfmt.toml
+++ /dev/null
@@ -1 +0,0 @@
-version = "Two" \ No newline at end of file
diff --git a/lemu/speed.mlog b/lemu/speed.mlog
deleted file mode 100644
index 3931523..0000000
--- a/lemu/speed.mlog
+++ /dev/null
@@ -1,7 +0,0 @@
-set n 10000000
-loop:
- jump ret lessThanEq n 0
- op sub n n 1
- jump loop always
-ret:
- end
diff --git a/lemu/src/celliterate.mlog b/lemu/src/celliterate.mlog
deleted file mode 100644
index d0a53ec..0000000
--- a/lemu/src/celliterate.mlog
+++ /dev/null
@@ -1,3 +0,0 @@
-read result cell1 0
-op add result result 1
-write result cell1 0
diff --git a/lemu/src/code.rs b/lemu/src/code.rs
deleted file mode 100644
index b57cb55..0000000
--- a/lemu/src/code.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-use crate::debug::{info::DebugInfo, printable::Printable};
-
-use super::{
- instructions::{DrawInstr, Instr},
- lexer::Token,
-};
-
-#[derive(Debug)]
-pub enum PInstr<'s> {
- Instr(Instr),
- Draw(DrawInstr),
- Code(Box<[Token<'s>]>),
- Comment(&'s str),
-}
-
-impl Printable for PInstr<'_> {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl std::fmt::Write) -> std::fmt::Result {
- match self {
- Self::Instr(i) => i.print(info, f),
- Self::Draw(i) => i.print(info, f),
- Self::Code(c) => {
- let mut toks = c.iter();
- if let Some(t) = toks.next() {
- write!(f, "{t}")?;
- }
- for token in toks {
- write!(f, " {token}")?;
- }
- Ok(())
- }
- Self::Comment(c) => write!(f, "{c}"),
- }
- }
-}
-
-impl Printable for Code<'_> {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl std::fmt::Write) -> std::fmt::Result {
- for instr in &*self.0 {
- instr.print(info, f)?;
- writeln!(f)?;
- }
- Ok(())
- }
-}
-
-#[repr(transparent)]
-#[derive(Debug)]
-pub struct Code<'s>(Box<[PInstr<'s>]>);
-
-// Pin requires
-impl<'s> std::ops::Deref for Code<'s> {
- type Target = [PInstr<'s>];
-
- fn deref(&self) -> &Self::Target {
- &self.0
- }
-}
-impl<'s> Code<'s> {
- pub(crate) fn new(code: Box<[PInstr<'s>]>) -> Self {
- Self(code)
- }
-}
diff --git a/lemu/src/debug/info.rs b/lemu/src/debug/info.rs
deleted file mode 100644
index e23f23b..0000000
--- a/lemu/src/debug/info.rs
+++ /dev/null
@@ -1,58 +0,0 @@
-use std::ops::Range;
-
-use crate::{
- executor::Instruction,
- memory::{LAddress, LVar},
-};
-
-pub struct DebugInfo<'s> {
- pub variables: Box<[VarInfo<'s>]>,
- /// maps "start" to 0
- pub labels: Vec<(&'s str, Instruction)>,
-}
-
-impl<'s> Default for DebugInfo<'s> {
- fn default() -> Self {
- Self {
- variables: vec![].into(),
- labels: vec![],
- }
- }
-}
-
-impl<'s> DebugInfo<'s> {
- pub fn label(&self, of: Instruction) -> Option<&'s str> {
- self.labels.iter().find(|(_, i)| *i == of).map(|&(x, _)| x)
- }
-}
-
-impl<'s> std::ops::Index<LAddress> for DebugInfo<'s> {
- type Output = VarData<'s>;
-
- fn index(&self, index: LAddress) -> &Self::Output {
- &self.variables[index.address as usize].data
- }
-}
-
-#[derive(Clone, Debug)]
-pub struct VarInfo<'s> {
- pub data: VarData<'s>,
- #[allow(dead_code)]
- pub span: Range<usize>,
-}
-
-#[derive(Clone, Debug)]
-pub enum VarData<'s> {
- Variable(&'s str),
- // not necessary, but convenient.
- Constant(LVar<'s>),
-}
-
-impl std::fmt::Display for VarData<'_> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match self {
- VarData::Variable(name) => f.write_str(name),
- VarData::Constant(c) => write!(f, "{c}"),
- }
- }
-}
diff --git a/lemu/src/debug/mod.rs b/lemu/src/debug/mod.rs
deleted file mode 100644
index 4d7ba0a..0000000
--- a/lemu/src/debug/mod.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-pub mod info;
-pub mod printable;
-
-/// kill me
-pub fn ff(f: f64) -> String {
- let mut s = f.to_string().into_bytes();
- if let Some((dot, _)) = s.iter().enumerate().find(|&(_, b)| *b == b'.') {
- let mut real = 0;
- for b in &mut s[dot..].iter_mut().skip(1) {
- match b {
- _ if real > 4 => {
- s.truncate(dot + real);
- break;
- }
- b'1'..=b'9' => real += 1,
- _ => {
- s.truncate(dot + real);
- break;
- }
- }
- }
- }
- String::from_utf8(s).unwrap()
-}
diff --git a/lemu/src/debug/printable.rs b/lemu/src/debug/printable.rs
deleted file mode 100644
index 243da57..0000000
--- a/lemu/src/debug/printable.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-use std::fmt::{Debug, Result, Write};
-
-use super::info::DebugInfo;
-
-pub trait Printable: Debug {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl Write) -> Result;
-}
diff --git a/lemu/src/executor/builder.rs b/lemu/src/executor/builder.rs
deleted file mode 100644
index 83bec1e..0000000
--- a/lemu/src/executor/builder.rs
+++ /dev/null
@@ -1,159 +0,0 @@
-use fimg::Image;
-use std::{collections::VecDeque, io::Write as Wr};
-
-use super::{
- BANK_SIZE, CELL_SIZE, Display, DisplayState, Drawing, Executor, ExecutorContext, Instruction,
- Limit, Memory, PInstr, UPInstr,
-};
-use crate::{
- code::Code,
- debug::info::DebugInfo,
- instructions::{DrawInstr, Instr},
- lexer::Token,
- memory::{LRegistry, LVar},
-};
-
-/// for internal use by [parser](crate::parser) only
-pub struct ExecutorBuilderInternal<'v, W: Wr> {
- displays: Box<[(Image<Vec<u8>, 4>, DisplayState)]>,
- pub(crate) program: Vec<UPInstr<'v>>,
- output: Option<W>,
- banks: Vec<f64>,
- cells: Vec<f64>,
- iteration_limit: Limit,
- instruction_limit: Limit,
- pub(crate) mem: Vec<LVar<'v>>,
- pub(crate) debug_info: DebugInfo<'v>,
-}
-
-impl<'s, W: Wr> ExecutorBuilderInternal<'s, W> {
- pub(crate) fn new(w: Option<W>, d: Vec<Image<Vec<u8>, 4>>) -> Self {
- Self {
- output: w,
- displays: d
- .into_iter()
- .map(|d| (d, DisplayState::default()))
- .collect(),
- program: vec![],
- banks: vec![],
- cells: vec![],
- iteration_limit: Limit::limited(1),
- instruction_limit: Limit::Unlimited,
- mem: Vec::with_capacity(64),
- debug_info: DebugInfo::default(),
- }
- }
-
- pub(crate) fn inslimit(&mut self, ilimit: Limit) -> &mut Self {
- self.instruction_limit = ilimit;
- self
- }
-
- pub(crate) fn itrlimit(&mut self, ilimit: Limit) -> &mut Self {
- self.iteration_limit = ilimit;
- self
- }
-
- pub(crate) fn jmp(&mut self) {
- self.program.push(UPInstr::UnfinishedJump);
- }
-
- pub(crate) fn code(&mut self, v: Box<[Token<'s>]>) {
- self.program.push(UPInstr::Code(v));
- }
-
- pub(crate) fn bank(&mut self, n: usize) -> Memory {
- assert!(n != 0);
- if n * BANK_SIZE > self.banks.len() {
- self.banks.resize(n * BANK_SIZE, 0.0);
- println!("resized");
- }
- Memory::Bank(((self.banks.len() - BANK_SIZE) / BANK_SIZE) as u8)
- }
-
- pub(crate) fn cell(&mut self, n: usize) -> Memory {
- assert!(n != 0);
- if n * CELL_SIZE > self.cells.len() {
- self.cells.resize(n * CELL_SIZE, 0.0);
- }
- Memory::Cell(((self.cells.len() - CELL_SIZE) / CELL_SIZE) as u8)
- }
-
- pub(crate) fn next(&self) -> Instruction {
- Instruction(self.program.len())
- }
-
- pub(crate) fn last(&self) -> Instruction {
- Instruction(self.program.len() - 1)
- }
-
- pub(crate) fn add(&mut self, i: impl Into<Instr>) {
- self.program.push(UPInstr::Instr(i.into()));
- }
-
- pub(crate) fn draw(&mut self, i: impl Into<DrawInstr>) {
- self.program.push(UPInstr::Draw(i.into()));
- }
-
- pub(crate) fn valid(&self, Instruction(i): Instruction) -> bool {
- self.program.len() > i
- }
-
- pub(crate) fn display(&mut self, n: usize) -> Result<Display, usize> {
- self.displays
- .get(n.checked_sub(1).ok_or(n)?)
- .map(|_| Display(n - 1))
- .ok_or(n)
- }
-
- pub(crate) fn finish(self) -> Executor<'s, W> {
- fn cst<const N: usize>(a: Vec<f64>) -> Box<[[f64; N]]> {
- let len = a.len();
- let ptr: *mut [f64] = Box::into_raw(a.into());
- let ptr: *mut [[f64; N]] =
- core::ptr::slice_from_raw_parts_mut(ptr.cast::<[f64; N]>(), len / N);
- unsafe { Box::from_raw(ptr) }
- }
- let program = Code::new(
- self.program
- .into_iter()
- .map(|v| match v {
- UPInstr::Instr(i) => PInstr::Instr(i),
- UPInstr::Draw(i) => PInstr::Draw(i),
- UPInstr::Comment(c) => PInstr::Comment(c),
- UPInstr::UnfinishedJump => panic!("all jumps should have finished"),
- UPInstr::Code(c) => PInstr::Code(c),
- })
- .collect::<Box<[PInstr]>>(),
- );
- let Self {
- instruction_limit,
- iteration_limit,
- displays,
- output,
- banks,
- debug_info,
- cells,
- mem,
- ..
- } = self;
- Executor {
- instruction_limit,
- iteration_limit,
- inner: ExecutorContext {
- cells: cst::<CELL_SIZE>(cells),
- banks: cst::<BANK_SIZE>(banks),
- memory: LRegistry(mem.into()),
- iterations: 0,
- display: Drawing {
- displays,
- buffer: VecDeque::new(),
- },
- output,
- },
- instructions_ran: 0,
- debug_info,
- program,
- }
- }
-}
diff --git a/lemu/src/executor/mod.rs b/lemu/src/executor/mod.rs
deleted file mode 100644
index 0989bc0..0000000
--- a/lemu/src/executor/mod.rs
+++ /dev/null
@@ -1,320 +0,0 @@
-mod builder;
-const COUNTER: LAddress = unsafe { LAddress::addr(0) };
-use crate::{
- debug::{info::DebugInfo, printable::Printable},
- instructions::draw::Drawn,
-};
-
-use super::{
- code::{Code, PInstr},
- instructions::{DrawInstr, Flow, Frozen, Instr, LInstruction},
- lexer::Token,
- memory::{LAddress, LRegistry, LVar},
-};
-pub use builder::ExecutorBuilderInternal;
-use fimg::Image;
-use std::{collections::VecDeque, io::Write, num::NonZeroUsize};
-
-#[derive(Debug, Copy, Clone, Default)]
-pub struct Display(pub usize);
-
-impl std::fmt::Display for Display {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "display{}", self.0 + 1)
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub enum Memory {
- Cell(u8),
- Bank(u8),
-}
-
-impl Memory {
- pub(crate) const fn fits(self, i: usize) -> bool {
- match self {
- Self::Bank(_) => i < BANK_SIZE,
- Self::Cell(_) => i < CELL_SIZE,
- }
- }
-
- pub(crate) const fn size(&self) -> usize {
- match self {
- Self::Bank(_) => BANK_SIZE,
- Self::Cell(_) => CELL_SIZE,
- }
- }
-}
-
-impl std::fmt::Display for Memory {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match self {
- Self::Bank(n) => write!(f, "bank{}", n + 1),
- Self::Cell(n) => write!(f, "cell{}", n + 1),
- }
- }
-}
-
-pub const BANK_SIZE: usize = 512;
-pub const CELL_SIZE: usize = 64;
-
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct Instruction(usize);
-
-impl Instruction {
- /// # Safety
- /// verify n is valid.
- pub const unsafe fn new(n: usize) -> Self {
- Self(n)
- }
-
- pub const fn get(self) -> usize {
- self.0
- }
-}
-
-impl std::fmt::Debug for Instruction {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "Instruction#{}", self.0)
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub enum Limit {
- /// limited to n
- Limited(NonZeroUsize),
- /// unlimited
- Unlimited,
-}
-
-impl Limit {
- /// panics if n != 0
- pub fn limited(n: usize) -> Self {
- Self::Limited(n.try_into().expect("nonzero"))
- }
-}
-
-impl Limit {
- pub(crate) const fn reached(self, n: usize) -> bool {
- match self {
- Self::Limited(v) => v.get() <= n,
- Self::Unlimited => false,
- }
- }
-}
-
-/// One time use logic executor.
-pub struct Executor<'varnames, W: Write> {
- /// if limited, will run n instructions before exiting.
- pub instruction_limit: Limit,
- /// if limtited, will loop(go from a end to the start) n times before exiting
- /// both unlimited does not mean this function will never return;
- /// a `Stop` instruction will break the loop.
- pub iteration_limit: Limit,
- pub(crate) inner: ExecutorContext<'varnames, W>,
- /// gets pointed to by drawbuf (pls no move)
- pub(crate) program: Code<'varnames>,
- /// Counter for the number of instructions we have run so far.
- pub instructions_ran: usize,
- debug_info: DebugInfo<'varnames>,
-}
-
-impl<W: Write> std::fmt::Display for Executor<'_, W> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- self.program.print(&self.debug_info, f)
- }
-}
-
-#[derive(Debug)]
-pub enum UPInstr<'s> {
- Instr(Instr),
- Draw(DrawInstr),
- UnfinishedJump,
- Code(Box<[Token<'s>]>),
- Comment(&'s str),
-}
-
-pub struct Drawing {
- pub displays: Box<[(fimg::Image<Vec<u8>, 4>, DisplayState)]>,
- pub buffer: VecDeque<Drawn>,
-}
-
-impl Drawing {
- fn buffer(&mut self, i: Drawn) {
- self.buffer.push_back(i);
- }
-}
-pub struct ExecutorContext<'strings, W: Write> {
- // maximum of 128 elements, so can use ~60KB
- pub cells: Box<[[f64; CELL_SIZE]]>, // screw world cells
- // maximum of 127 elements, so can use ~500KB
- pub banks: Box<[[f64; BANK_SIZE]]>,
- pub memory: LRegistry<'strings>,
- pub display: Drawing,
- pub output: Option<W>,
- /// Counter for the number of iterations we have run so far.
- pub iterations: usize,
-}
-
-/// State of a display.
-#[derive(Debug)]
-pub struct DisplayState {
- /// Color to draw
- pub color: (u8, u8, u8, u8),
- /// Stroke to draw
- pub stroke: f64,
-}
-
-impl DisplayState {
- pub const fn col(&self) -> [u8; 4] {
- [self.color.0, self.color.1, self.color.2, self.color.3]
- }
-}
-
-impl Default for DisplayState {
- fn default() -> Self {
- Self {
- color: Default::default(),
- stroke: 5.0,
- }
- }
-}
-
-impl<'s, W: Write> ExecutorContext<'s, W> {
- pub fn flush(&mut self, to: Display) {
- let (img, state) = &mut self.display.displays[to.0];
- while let Some(d) = self.display.buffer.pop_front() {
- use crate::instructions::draw::Apply;
- #[cfg(feature = "debug")]
- comat::cprintln!("{d:blue}");
- d.apply(img.as_mut(), state);
- }
- }
-
- pub fn mem(&mut self, m: Memory) -> &mut [f64] {
- match m {
- Memory::Bank(m) => &mut self.banks[m as usize],
- Memory::Cell(m) => &mut self.cells[m as usize],
- }
- }
-
- pub fn set(&mut self, a: LAddress, b: LAddress) {
- self.memory[a] = self.memory[b].clone();
- }
-
- pub fn get_mut(&mut self, a: LAddress) -> &mut LVar<'s> {
- &mut self.memory[a]
- }
-
- pub fn jump(&mut self, Instruction(n): Instruction) {
- *self.counter() = n as f64;
- }
-
- pub fn counter(&mut self) -> &mut f64 {
- unsafe {
- self.memory
- .0
- .get_unchecked_mut(0)
- .num_mut()
- .unwrap_unchecked()
- }
- }
-
- pub fn get<'a>(&'a self, a: LAddress) -> &LVar<'s> {
- &self.memory[a]
- }
-}
-
-/// Returned by the [`output`](Executor::output).function.
-pub struct Output<W: Write> {
- /// Everything created by a `print` instruction.
- pub output: Option<W>,
- /// Logic displays that were drawn with `draw` instructions.
- pub displays: Box<[(Image<Vec<u8>, 4>, DisplayState)]>,
- /// Memory banks, written to with the `write`/`read` instructions
- pub cells: Box<[[f64; CELL_SIZE]]>,
- /// Memory cells, written to with the `write`/`read` instructions
- pub banks: Box<[[f64; BANK_SIZE]]>,
-}
-
-impl<'s, W: Write> Executor<'s, W> {
- /// Consume this executor, returning all output.
- pub fn output(mut self) -> Output<W> {
- for (display, _) in &mut *self.inner.display.displays {
- // TODO make the instructions draw flipped-ly
- display.flip_v();
- }
- Output {
- output: self.inner.output,
- displays: self.inner.display.displays,
- cells: self.inner.cells,
- banks: self.inner.banks,
- }
- }
-
- /// # Safety
- ///
- /// `counter` *must* be in bounds.
- unsafe fn run_current(&mut self) -> Flow {
- // SAFETY: yee
- let c = self.inner.counter();
- let i = unsafe { self.program.get_unchecked(*c as usize) };
- *c += 1.0;
- match i {
- PInstr::Instr(i) => {
- #[cfg(feature = "debug")]
- {
- let mut instr = String::new();
- i.print(&self.debug_info, &mut instr).unwrap();
- let mut mem = String::new();
- self.inner.memory.print(&self.debug_info, &mut mem).unwrap();
- comat::cprintln!(
- "{black}{:0<2} | {green}{instr} {black}({mem}){reset}",
- self.inner.counter(),
- );
- }
-
- i.run(&mut self.inner)
- }
- PInstr::Draw(i) => {
- if let Some(i) = i.freeze(&self.inner.memory) {
- #[cfg(feature = "debug")]
- {
- let mut mem = String::new();
- self.inner.memory.print(&self.debug_info, &mut mem).unwrap();
- comat::cprintln!(
- "{black}{:0<2} | {magenta}{i} {black}({mem}){reset}",
- self.inner.counter()
- );
- }
- self.inner.display.buffer(i)
- }
- Flow::Continue
- }
- _ => Flow::Continue,
- }
- }
-
- /// Begin code execution.
- pub fn run(&mut self) {
- while !self.instruction_limit.reached(self.instructions_ran)
- && !self.iteration_limit.reached(self.inner.iterations)
- {
- // SAFETY: we have a check
- match unsafe { self.run_current() } {
- Flow::Continue => {}
- Flow::Exit => break,
- Flow::Stay => {
- self.instructions_ran += 1;
- continue;
- }
- };
- self.instructions_ran += 1;
- let c = self.inner.counter();
- if *c as usize >= self.program.len() {
- *c = 0.0;
- self.inner.iterations += 1;
- }
- }
- }
-}
diff --git a/lemu/src/fib.mlog b/lemu/src/fib.mlog
deleted file mode 100644
index 6c09c3e..0000000
--- a/lemu/src/fib.mlog
+++ /dev/null
@@ -1,15 +0,0 @@
- set n 50
- set previous 0
- set fib 1
- op add end n 1
- set i 2
-loop:
- jump ret greaterThanEq i end
- op add tmp previous fib
- set previous fib
- set fib tmp
- op add i i 1
- jump loop always
-ret:
- print fib
- stop \ No newline at end of file
diff --git a/lemu/src/hello.mlog b/lemu/src/hello.mlog
deleted file mode 100644
index 3aac8c4..0000000
--- a/lemu/src/hello.mlog
+++ /dev/null
@@ -1,2 +0,0 @@
-print "hello world"
-stop
diff --git a/lemu/src/instructions/cop.rs b/lemu/src/instructions/cop.rs
deleted file mode 100644
index 0079bfa..0000000
--- a/lemu/src/instructions/cop.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-use crate::{lexer::Token, memory::LVar};
-
-super::op_enum! { pub enum ConditionOp {
- Equal,
- NotEqual,
- LessThan,
- LessThanEq,
- GreaterThan,
- GreaterThanEq,
- StrictEqual,
-} }
-
-macro_rules! op {
- ($name: ident $op:tt ) => {
- fn $name<'v>(a: &LVar<'v>, b: &LVar<'v>) -> bool {
- if let &LVar::Num(a) = a && let &LVar::Num(b) = b { a $op b } else { false }
- }
- };
-}
-
-fn eq<'v>(a: &LVar<'v>, b: &LVar<'v>) -> bool {
- a == b
-}
-fn ne<'v>(a: &LVar<'v>, b: &LVar<'v>) -> bool {
- a != b
-}
-op!(lt <);
-op!(gt >);
-op!(le <=);
-op!(ge >=);
-
-super::op_impl!(ConditionOp, ptr type = for<'f> fn(&LVar<'f>, &LVar<'f>) -> bool {
- Equal => eq,
- StrictEqual => eq,
- NotEqual => ne,
- LessThan => lt,
- GreaterThan => gt,
- LessThanEq => le,
- GreaterThanEq => ge,
-});
diff --git a/lemu/src/instructions/draw.rs b/lemu/src/instructions/draw.rs
deleted file mode 100644
index 1644da0..0000000
--- a/lemu/src/instructions/draw.rs
+++ /dev/null
@@ -1,601 +0,0 @@
-use super::{Flow, LInstruction, get_num};
-use crate::{
- debug::{info::DebugInfo, printable::Printable},
- executor::{Display, DisplayState, ExecutorContext},
- memory::{LAddress, LRegistry, LVar},
-};
-use enum_dispatch::enum_dispatch;
-use fimg::Image;
-use std::fmt::{self, Display as Disp};
-use vecto::Vec2;
-
-pub const INSTRS: &[&str] = &[
- "clear", "color", "col", "stroke", "line", "rect", "lineRect", "triangle", "poly", "linePoly",
-];
-
-#[enum_dispatch]
-pub trait Apply: Disp {
- fn apply(self, image: Image<&mut [u8], 4>, state: &mut DisplayState);
-}
-
-#[derive(Debug)]
-#[enum_dispatch(Apply)]
-pub enum Drawn {
- Line(LineD),
- RectBordered(RectBorderedD),
- RectFilled(RectFilledD),
- Triangle(TriangleD),
- Clear(ClearD),
- SetColor(SetColorD),
- SetStroke(SetStrokeD),
- Poly(PolyD),
- LinePoly(LinePolyD),
-}
-
-impl std::fmt::Display for Drawn {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- match self {
- Self::Line(i) => write!(f, "{i}"),
- Self::RectBordered(i) => write!(f, "{i}"),
- Self::RectFilled(i) => write!(f, "{i}"),
- Self::Triangle(i) => write!(f, "{i}"),
- Self::Clear(i) => write!(f, "{i}"),
- Self::SetColor(i) => write!(f, "{i}"),
- Self::SetStroke(i) => write!(f, "{i}"),
- Self::Poly(i) => write!(f, "{i}"),
- Self::LinePoly(i) => write!(f, "{i}"),
- }
- }
-}
-
-pub trait Frozen<A: Apply>: Printable {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<A>;
-}
-
-macro_rules! dinstr {
- [$($x:ident),+] => {
- #[derive(Debug, Copy, Clone)]
- pub enum DrawInstr {
- $($x($x),)+
- }
-
- $(impl From<$x> for DrawInstr {
- fn from(v: $x) -> Self { Self::$x(v) }
- })+
-
- impl Frozen<Drawn> for DrawInstr {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<Drawn> {
- Some(match self {
- $(Self::$x(i) => Drawn::from(i.freeze(mem)?),)+
- })
- }
- }
- impl Printable for DrawInstr {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- match self {
- $(Self::$x(i) => i.print(info, f)),+
- }
- }
- }
- }
-}
-
-dinstr! {
- Line,
- RectBordered,
- RectFilled,
- Triangle,
- Clear,
- SetColor,
- SetCol,
- SetStroke,
- Poly,
- LinePoly
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct Clear {
- pub r: LAddress,
- pub g: LAddress,
- pub b: LAddress,
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct ClearD((u8, u8, u8));
-
-impl Apply for ClearD {
- fn apply(self, mut image: Image<&mut [u8], 4>, _: &mut DisplayState) {
- let (r, g, b) = self.0;
- for [r2, g2, b2, a2] in image.chunked_mut() {
- (*r2, *b2, *g2, *a2) = (r, g, b, 255);
- }
- }
-}
-
-macro_rules! u8 {
- ($self:ident, $mem:expr, $($v:ident)+) => {
- ($(match $mem.get($self.$v) {
- LVar::Num(n) => n.round() as u8,
- _ => return None,
- },)+)
- };
-}
-
-impl Frozen<ClearD> for Clear {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<ClearD> {
- Some(ClearD(u8!(self, mem, r g b)))
- }
-}
-
-impl Printable for Clear {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw clear {} {} {}",
- info[self.r], info[self.g], info[self.b]
- )
- }
-}
-
-impl Disp for ClearD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "draw clear {} {} {}", self.0.0, self.0.1, self.0.2)
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct SetColorD((u8, u8, u8, u8));
-
-impl Apply for SetColorD {
- fn apply(self, _: Image<&mut [u8], 4>, state: &mut DisplayState) {
- state.color = self.0;
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct SetColor {
- pub r: LAddress,
- pub g: LAddress,
- pub b: LAddress,
- pub a: LAddress,
-}
-
-impl Frozen<SetColorD> for SetColor {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<SetColorD> {
- Some(SetColorD(u8!(self, mem, r g b a)))
- }
-}
-
-impl Printable for SetColor {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw color {} {} {} {}",
- info[self.r], info[self.g], info[self.b], info[self.a]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct SetCol {
- pub col: LAddress,
-}
-
-impl Printable for SetCol {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "draw col ")?;
- match &info[self.col] {
- crate::debug::info::VarData::Variable(v) => write!(f, "{v}"),
- crate::debug::info::VarData::Constant(c) => match c {
- LVar::Num(n) => write!(f, "0x{:0<6x}", *n as u32),
- LVar::String(s) => write!(f, r#""{s}""#),
- },
- }
- }
-}
-
-impl Frozen<SetColorD> for SetCol {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<SetColorD> {
- let [r, g, b, a] = fimg::Pack::unpack(mem.get(self.col).num()? as u32);
- Some(SetColorD((r, g, b, a)))
- }
-}
-
-impl Disp for SetColorD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(
- f,
- "draw color {} {} {} {}",
- self.0.0, self.0.1, self.0.2, self.0.3
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct SetStroke {
- pub size: LAddress,
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct SetStrokeD(f64);
-
-impl Apply for SetStrokeD {
- fn apply(self, _: Image<&mut [u8], 4>, state: &mut DisplayState) {
- state.stroke = self.0;
- }
-}
-
-impl Frozen<SetStrokeD> for SetStroke {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<SetStrokeD> {
- mem.get(self.size).num().map(SetStrokeD)
- }
-}
-
-impl Disp for SetStrokeD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "draw stroke {}", self.0)
- }
-}
-
-impl Printable for SetStroke {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "draw stroke {}", info[self.size])
- }
-}
-
-pub type Point = (LAddress, LAddress);
-#[rustfmt::skip]
-macro_rules! point {
- ($mem:ident@$point:expr) => {
- ($mem.get($point.0).num()?, $mem.get($point.1).num()?)
- }
-}
-
-macro_rules! map {
- ($tup:expr, $fn:expr) => {{
- let (a, b) = $tup;
- ($fn(a), $fn(b))
- }};
-}
-#[derive(Debug, Copy, Clone)]
-
-pub struct Line {
- pub point_a: Point,
- pub point_b: Point,
-}
-
-#[derive(Debug)]
-pub struct LineD(Vec2, Vec2);
-
-impl Apply for LineD {
- fn apply(self, mut image: Image<&mut [u8], 4>, state: &mut DisplayState) {
- image.thick_line(self.0, self.1, state.stroke as f32, state.col());
- }
-}
-
-impl Frozen<LineD> for Line {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<LineD> {
- Some(LineD(
- map!(point!([email protected]_a), |n| n as f32).into(),
- map!(point!([email protected]_b), |n| n as f32).into(),
- ))
- }
-}
-
-impl Disp for LineD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(
- f,
- "draw line {} {} {} {}",
- self.0.x, self.0.y, self.1.x, self.1.y
- )
- }
-}
-
-impl Printable for Line {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw line {} {} {} {}",
- info[self.point_a.0], info[self.point_a.1], info[self.point_b.0], info[self.point_b.1]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct RectFilled {
- pub position: Point,
- pub width: LAddress,
- pub height: LAddress,
-}
-
-#[derive(Debug)]
-pub struct RectFilledD((u32, u32), (u32, u32));
-
-impl Apply for RectFilledD {
- fn apply(self, mut image: Image<&mut [u8], 4>, state: &mut DisplayState) {
- image.filled_box(self.0, self.1.0, self.1.1, state.col());
- }
-}
-
-impl Frozen<RectFilledD> for RectFilled {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<RectFilledD> {
- Some(RectFilledD(
- map!(point!([email protected]), |n| n as u32),
- (
- get_num!(mem.get(self.width)) as u32,
- get_num!(mem.get(self.height)) as u32,
- ),
- ))
- }
-}
-
-impl Disp for RectFilledD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(
- f,
- "draw rect {} {} {} {}",
- self.0.0, self.0.1, self.1.0, self.1.1
- )
- }
-}
-
-impl Printable for RectFilled {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw rect {} {} {} {}",
- info[self.position.0], info[self.position.1], info[self.width], info[self.height]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct RectBordered {
- pub position: Point,
- pub width: LAddress,
- pub height: LAddress,
-}
-
-impl Disp for RectBorderedD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(
- f,
- "draw lineRect {} {} {} {}",
- self.0.0, self.0.1, self.1.0, self.1.1
- )
- }
-}
-
-impl Printable for RectBordered {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw lineRect {} {} {} {}",
- info[self.position.0], info[self.position.1], info[self.width], info[self.height]
- )
- }
-}
-
-#[derive(Debug)]
-pub struct RectBorderedD((u32, u32), (u32, u32));
-
-impl Apply for RectBorderedD {
- fn apply(self, mut image: Image<&mut [u8], 4>, state: &mut DisplayState) {
- image.stroked_box(
- self.0,
- self.1.0,
- self.1.1,
- state.stroke.round() as u32,
- state.col(),
- );
- }
-}
-
-impl Frozen<RectBorderedD> for RectBordered {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<RectBorderedD> {
- Some(RectBorderedD(
- map!(point!([email protected]), |n| n as u32),
- (
- get_num!(mem.get(self.width)) as u32,
- get_num!(mem.get(self.height)) as u32,
- ),
- ))
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct Triangle {
- pub points: (Point, Point, Point),
-}
-
-#[derive(Debug)]
-pub struct TriangleD(Vec2, Vec2, Vec2);
-
-impl Apply for TriangleD {
- fn apply(self, mut image: Image<&mut [u8], 4>, state: &mut DisplayState) {
- image.tri::<f32>(self.0, self.1, self.2, state.col());
- }
-}
-
-impl Frozen<TriangleD> for Triangle {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<TriangleD> {
- Some(TriangleD(
- map!(point!([email protected]), |n| n as f32).into(),
- map!(point!([email protected]), |n| n as f32).into(),
- map!(point!([email protected]), |n| n as f32).into(),
- ))
- }
-}
-
-impl Disp for TriangleD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(
- f,
- "draw triangle {} {} {} {} {} {}",
- self.0.x, self.0.y, self.1.x, self.1.y, self.2.x, self.2.y
- )
- }
-}
-
-impl Printable for Triangle {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw triangle {} {} {} {} {} {}",
- info[self.points.0.0],
- info[self.points.0.1],
- info[self.points.1.0],
- info[self.points.1.1],
- info[self.points.2.0],
- info[self.points.2.1]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct Poly {
- pub(crate) pos: Point,
- pub(crate) sides: LAddress,
- pub(crate) radius: LAddress,
- pub(crate) rot: LAddress,
-}
-
-#[derive(Debug)]
-pub enum PolyD {
- Poly(Vec2, usize, f32, f32),
- Circle((i32, i32), i32),
-}
-
-impl Apply for PolyD {
- fn apply(self, mut image: Image<&mut [u8], 4>, state: &mut DisplayState) {
- match self {
- PolyD::Poly(pos, sides, radius, rotation) => {
- image.poly(pos, sides, radius, rotation, state.col())
- }
- PolyD::Circle(pos, radius) => image.circle(pos, radius, state.col()),
- }
- }
-}
-
-impl Frozen<PolyD> for Poly {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<PolyD> {
- let sides = get_num!(mem.get(self.sides)).round() as usize;
- Some(if sides < 90 {
- PolyD::Poly(
- map!(point!([email protected]), |n| n as f32).into(),
- sides,
- get_num!(mem.get(self.radius)) as f32,
- get_num!(mem.get(self.rot)) as f32,
- )
- } else {
- PolyD::Circle(
- map!(point!([email protected]), |n: f64| n.round() as i32),
- get_num!(mem.get(self.radius)).round() as i32,
- )
- })
- }
-}
-
-impl Disp for PolyD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- match self {
- PolyD::Poly(Vec2 { x, y }, sides, radius, rot) => {
- write!(f, "draw poly {x} {y} {sides} {radius} {rot}")
- }
- PolyD::Circle((x, y), sides) => write!(f, "draw poly {x} {y} {sides}"),
- }
- }
-}
-
-impl Printable for Poly {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw poly {} {} {} {} {}",
- info[self.pos.0], info[self.pos.1], info[self.sides], info[self.radius], info[self.rot],
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct LinePoly {
- pub(crate) pos: Point,
- pub(crate) sides: LAddress,
- pub(crate) radius: LAddress,
- pub(crate) rot: LAddress,
-}
-
-#[derive(Debug)]
-/// border_Circle doesnt let you specify a stroke
-pub struct LinePolyD(Vec2, usize, f32, f32);
-
-impl Apply for LinePolyD {
- fn apply(self, mut image: Image<&mut [u8], 4>, state: &mut DisplayState) {
- image.border_poly(
- self.0,
- self.1,
- self.2,
- self.3,
- state.stroke as f32,
- state.col(),
- )
- }
-}
-
-impl Frozen<LinePolyD> for LinePoly {
- fn freeze(&self, mem: &LRegistry<'_>) -> Option<LinePolyD> {
- Some(LinePolyD(
- map!(point!([email protected]), |n| n as f32).into(),
- get_num!(mem.get(self.sides)).round() as usize,
- get_num!(mem.get(self.radius)) as f32,
- get_num!(mem.get(self.rot)) as f32,
- ))
- }
-}
-
-impl Disp for LinePolyD {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(
- f,
- "draw linePoly {} {} {} {} {}",
- self.0.x, self.0.y, self.1, self.2, self.3
- )
- }
-}
-
-impl Printable for LinePoly {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "draw linePoly {} {} {} {} {}",
- info[self.pos.0], info[self.pos.1], info[self.sides], info[self.radius], info[self.rot],
- )
- }
-}
-
-#[derive(Debug, Copy, Clone, Default)]
-
-pub struct Flush {
- pub(crate) display: Display,
-}
-impl LInstruction for Flush {
- fn run<W: std::io::Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- exec.flush(self.display);
- Flow::Continue
- }
-}
-
-impl Printable for Flush {
- fn print(&self, _: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "drawflush {}", self.display)
- }
-}
diff --git a/lemu/src/instructions/io.rs b/lemu/src/instructions/io.rs
deleted file mode 100644
index 22d1b52..0000000
--- a/lemu/src/instructions/io.rs
+++ /dev/null
@@ -1,90 +0,0 @@
-use super::{get_num, Flow, LInstruction};
-use crate::{
- debug::{info::DebugInfo, printable::Printable},
- executor::{ExecutorContext, Memory},
- memory::{LAddress, LVar},
-};
-use std::{fmt, io::Write as Wr};
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct Read {
- pub(crate) index: LAddress,
- pub(crate) output: LAddress,
- pub(crate) container: Memory,
-}
-
-impl LInstruction for Read {
- fn run<W: Wr>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- let i = get_num!(exec.get(self.index)).round() as usize;
- if let Some(&n) = exec.mem(self.container).get(i) {
- *exec.get_mut(self.output) = LVar::from(n);
- };
- Flow::Continue
- }
-}
-
-impl Printable for Read {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "read {} {} {}",
- info[self.output], self.container, info[self.index]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct Write {
- pub(crate) index: LAddress,
- pub(crate) set: LAddress,
- pub(crate) container: Memory,
-}
-
-impl LInstruction for Write {
- fn run<W: Wr>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- let i = get_num!(exec.get(self.index)).round() as usize;
- if let &LVar::Num(b) = exec.get(self.set) {
- if let Some(a) = exec.mem(self.container).get_mut(i) {
- *a = b;
- }
- }
- Flow::Continue
- }
-}
-
-impl Printable for Write {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "write {} {} {}",
- info[self.set], self.container, info[self.index]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-
-pub struct Print {
- pub(crate) val: LAddress,
-}
-impl LInstruction for Print {
- fn run<W: Wr>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- let v = exec.get(self.val).clone();
- if let Some(o) = &mut exec.output {
- match v {
- LVar::Num(n) => write!(o, "{n}"),
- LVar::String(s) => write!(o, r#"{s}"#),
- }
- .unwrap();
- }
- Flow::Continue
- }
-}
-// haha
-impl Printable for Print {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "print {}", info[self.val])
- }
-}
diff --git a/lemu/src/instructions/mod.rs b/lemu/src/instructions/mod.rs
deleted file mode 100644
index 6724ed1..0000000
--- a/lemu/src/instructions/mod.rs
+++ /dev/null
@@ -1,500 +0,0 @@
-//! supported instrs
-//!
-//! ```text
-//! jump
-//! op
-//! stop
-//! end
-//! set
-//! read
-//! write
-//! print
-//! packcolor
-//!
-//! draw {color, col, flush, line, rect, lineRect, triangle, stroke, clear}
-//! ```
-mod cop;
-pub mod draw;
-pub mod io;
-mod mop;
-mod mop2;
-
-pub use cop::ConditionOp;
-pub use draw::{DrawInstr, Frozen};
-use enum_dispatch::enum_dispatch;
-pub use mop::MathOp1;
-pub use mop2::MathOp2;
-use std::{fmt, io::Write};
-
-use crate::debug::{info::DebugInfo, printable::Printable};
-
-use super::{
- executor::{ExecutorContext, Instruction},
- memory::{LAddress, LVar},
-};
-
-pub const OPS: &[&str] = &[
- "equal",
- "notEqual",
- "lessThan",
- "lessThanEq",
- "greaterThan",
- "greaterThanEq",
- "strictEqual",
- "always",
- "add",
- "sub",
- "mul",
- "div",
- "idiv",
- "mod",
- "pow",
- "land",
- "not",
- "shl",
- "shr",
- "or",
- "and",
- "xor",
- "max",
- "min",
- "angle",
- "angleDiff",
- "len",
- "noise",
- "abs",
- "log",
- "log10",
- "floor",
- "ceil",
- "sqrt",
- "rand",
- "sin",
- "cos",
- "tan",
- "asin",
- "acos",
- "atan",
-];
-
-#[must_use = "to change control flow"]
-#[derive(Default)]
-pub enum Flow {
- #[default]
- Continue,
- Stay,
- Exit,
-}
-
-#[enum_dispatch]
-pub trait LInstruction: Printable {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow;
-}
-
-#[derive(Debug, Copy, Clone)]
-#[enum_dispatch(LInstruction)]
-pub enum Instr {
- Op2(Op2),
- Jump(Jump),
- AlwaysJump(AlwaysJump),
- Set(Set),
- Op1(Op1),
- Read(io::Read),
- Write(io::Write),
- DrawFlush(draw::Flush),
- DynJump(DynJump),
- Print(io::Print),
- Stop(Stop),
- PackColor(PackColor),
- Select(Select),
- Noop(Noop),
- End(End),
-}
-
-impl Printable for Instr {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- match self {
- Self::Op2(i) => i.print(info, f),
- Self::Jump(i) => i.print(info, f),
- Self::AlwaysJump(i) => i.print(info, f),
- Self::Set(i) => i.print(info, f),
- Self::Op1(i) => i.print(info, f),
- Self::Read(i) => i.print(info, f),
- Self::Write(i) => i.print(info, f),
- Self::DrawFlush(i) => i.print(info, f),
- Self::DynJump(i) => i.print(info, f),
- Self::Print(i) => i.print(info, f),
- Self::Stop(i) => i.print(info, f),
- Self::End(i) => i.print(info, f),
- Self::PackColor(i) => i.print(info, f),
- Self::Select(i) => i.print(info, f),
- Self::Noop(i) => i.print(info, f),
- }
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct Set {
- pub(crate) from: LAddress,
- pub(crate) to: LAddress,
-}
-impl LInstruction for Set {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- exec.set(self.from, self.to);
- Flow::Continue
- }
-}
-
-impl Printable for Set {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "set {} {}", info[self.from], info[self.to])
- }
-}
-
-macro_rules! op_enum {
- ($v:vis enum $name:ident {
- $($variant:ident),+ $(,)?
- }) => {
- #[derive(Debug, Copy, Clone, Eq, PartialEq)]
- $v enum $name {
- $($variant),+
- }
-
- impl<'a> TryFrom<Token<'a>> for $name {
- type Error = Token<'a>;
- fn try_from(value: Token<'a>) -> Result<Self, Self::Error> {
- match value {
- $(Token::$variant => Ok(Self::$variant),)+
- v => Err(v)
- }
- }
- }
-
- impl std::fmt::Display for $name {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
- write!(f, "{}", Token::from(*self))
- }
- }
-
- impl<'a> From<$name> for Token<'a> {
- fn from(value: $name) -> Self {
- match value {
- $($name::$variant => Self::$variant,)+
- }
- }
- }
- }
-}
-use op_enum;
-
-// not part of op_enum due to rem
-macro_rules! op_impl {
- ($name:ident, ptr type = $ptr:ty { $($own:ident => $fn:ident,)+ }) => {
- impl $name {
- pub const fn get_fn(self) -> $ptr {
- match self {
- $(Self::$own => $fn,)+
- }
- }
- }
-
- impl TryFrom<$ptr> for $name {
- type Error = ();
- fn try_from(f:$ptr) -> Result<Self, ()> {
- match f {
- $(f if f == $fn => Ok(Self::$own),)+
- _ => Err(()),
- }
- }
- }
- }
-}
-use op_impl;
-
-macro_rules! get_num {
- ($x:expr) => {
- match $x {
- LVar::Num(x) => *x,
- _ => return Default::default(),
- }
- };
-}
-use get_num;
-
-#[derive(Debug, Copy, Clone)]
-pub struct Op1 {
- op: for<'v> fn(&LVar<'v>) -> f64,
- x: LAddress,
- out: LAddress,
-}
-impl Op1 {
- pub(crate) const fn new(op: MathOp1, x: LAddress, out: LAddress) -> Self {
- Self {
- op: op.get_fn(),
- x,
- out,
- }
- }
-}
-
-impl LInstruction for Op1 {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- let x = (self.op)(exec.get(self.x));
- *exec.get_mut(self.out) = LVar::Num(x);
- Flow::Continue
- }
-}
-
-impl Printable for Op1 {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- let op = mop::MathOp1::try_from(self.op).unwrap();
- write!(f, "op {op} {} {}", info[self.out], info[self.x])
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct Op2 {
- op: for<'v> fn(&LVar<'v>, &LVar<'v>) -> f64,
- a: LAddress,
- b: LAddress,
- out: LAddress,
-}
-impl Op2 {
- pub(crate) const fn new(op: MathOp2, a: LAddress, b: LAddress, out: LAddress) -> Self {
- Self {
- op: op.get_fn(),
- a,
- b,
- out,
- }
- }
-}
-
-impl LInstruction for Op2 {
- #[inline]
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- let x = (self.op)(exec.get(self.a), exec.get(self.b));
- exec.memory[self.out] = LVar::Num(x);
- Flow::Continue
- }
-}
-
-impl Printable for Op2 {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- let op = mop2::MathOp2::try_from(self.op).unwrap();
- write!(
- f,
- "op {op} {} {} {}",
- info[self.out], info[self.a], info[self.b]
- )
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct End {}
-
-impl LInstruction for End {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- exec.iterations += 1;
- // SAFETY: if we exist, 0 exists.
- unsafe { exec.jump(Instruction::new(0)) };
- Flow::Stay
- }
-}
-
-impl Printable for End {
- fn print(&self, _: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "end")
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct Noop {}
-
-impl LInstruction for Noop {
- fn run<W: Write>(&self, _: &mut ExecutorContext<'_, W>) -> Flow {
- Flow::Continue
- }
-}
-
-impl Printable for Noop {
- fn print(&self, _: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "noop")
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct AlwaysJump {
- pub(crate) to: Instruction,
-}
-impl LInstruction for AlwaysJump {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- exec.jump(self.to);
- Flow::Stay
- }
-}
-
-impl Printable for AlwaysJump {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "jump ")?;
- match info.label(self.to) {
- Some(l) => f.write_str(l)?,
- None => write!(f, "{}", self.to.get())?,
- }
- write!(f, " always")
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct Jump {
- op: for<'v> fn(&LVar<'v>, &LVar<'v>) -> bool,
- pub(crate) to: Instruction,
- a: LAddress,
- b: LAddress,
-}
-impl Jump {
- pub fn new(op: ConditionOp, to: Instruction, a: LAddress, b: LAddress) -> Self {
- Self {
- op: op.get_fn(),
- to,
- a,
- b,
- }
- }
-}
-
-impl LInstruction for Jump {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- if (self.op)(exec.get(self.a), exec.get(self.b)) {
- exec.jump(self.to);
- Flow::Stay
- } else {
- Flow::Continue
- }
- }
-}
-
-impl Printable for Jump {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- let op = ConditionOp::try_from(self.op).unwrap();
- write!(f, "jump {op} ")?;
- match info.label(self.to) {
- Some(l) => f.write_str(l)?,
- None => write!(f, "{}", self.to.get())?,
- };
- write!(f, " {} {}", info[self.a], info[self.b])
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct DynJump {
- pub to: LAddress,
- pub proglen: usize,
-}
-
-impl LInstruction for DynJump {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- if let &LVar::Num(n) = exec.get(self.to) {
- let i = n.round() as usize;
- if i < self.proglen {
- // SAFETY: just checked bounds
- exec.jump(unsafe { Instruction::new(i) });
- return Flow::Stay;
- }
- }
- Flow::Continue
- }
-}
-
-impl Printable for DynJump {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "set @counter {}", info[self.to])
- }
-}
-
-#[derive(Debug, Copy, Clone)]
-pub struct Stop {}
-impl LInstruction for Stop {
- fn run<W: Write>(&self, _: &mut ExecutorContext<'_, W>) -> Flow {
- Flow::Exit
- }
-}
-
-impl Printable for Stop {
- fn print(&self, _: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(f, "stop")
- }
-}
-
-#[derive(Copy, Clone, Debug)]
-pub struct PackColor {
- pub out: LAddress,
- pub r: LAddress,
- pub g: LAddress,
- pub b: LAddress,
- pub a: LAddress,
-}
-
-impl LInstruction for PackColor {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- macro_rules! num {
- ($($n:ident)+) => {
- ($(match exec.memory[self.$n] {
- LVar::Num(n) => (n.clamp(0.0, 1.0) * 255.0) as u8,
- _ => 255,
- },)+)
- };
- }
- let (r, g, b, a) = num!(r g b a);
- exec.memory[self.out] = LVar::from(fimg::Pack::pack(&[r, g, b, a]) as f64);
- Flow::Continue
- }
-}
-
-impl Printable for PackColor {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "packcolor {} {} {} {} {}",
- info[self.out], info[self.r], info[self.g], info[self.b], info[self.a]
- )
- }
-}
-#[derive(Debug, Copy, Clone)]
-pub struct Select {
- pub op: for<'v> fn(&LVar<'v>, &LVar<'v>) -> bool,
- pub(crate) to: LAddress,
-
- pub x: LAddress,
- pub y: LAddress,
-
- pub a: LAddress,
- pub b: LAddress,
-}
-
-impl LInstruction for Select {
- fn run<W: Write>(&self, exec: &mut ExecutorContext<'_, W>) -> Flow {
- *exec.get_mut(self.to) = if (self.op)(exec.get(self.x), exec.get(self.y)) {
- exec.get(self.a)
- } else {
- exec.get(self.b)
- }
- .clone();
- Flow::Continue
- }
-}
-
-impl Printable for Select {
- fn print(&self, info: &DebugInfo<'_>, f: &mut impl fmt::Write) -> fmt::Result {
- write!(
- f,
- "select {} {} {} {} {} {}",
- info[self.to],
- ConditionOp::try_from(self.op).unwrap(),
- info[self.x],
- info[self.y],
- info[self.a],
- info[self.b]
- )
- }
-}
diff --git a/lemu/src/instructions/mop.rs b/lemu/src/instructions/mop.rs
deleted file mode 100644
index 715cd3d..0000000
--- a/lemu/src/instructions/mop.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-use super::get_num;
-use crate::{lexer::Token, memory::LVar};
-
-super::op_enum! { pub enum MathOp1 {
- Floor,
- Not,
- Log,
- Abs,
- Rand,
- Ceil,
- Sqrt,
- Sin,
- Cos,
- Tan,
- ASin,
- ACos,
- ATan,
- Log10,
-} }
-
-macro_rules! num {
- ($fn: ident $c:expr) => {
- fn $fn(x: &LVar<'_>) -> f64 {
- f64::from($c(get_num!(x)))
- }
- };
- (deg $fn: ident $c:expr) => {
- fn $fn(x: &LVar<'_>) -> f64 {
- f64::from($c(get_num!(x).to_radians()))
- }
- };
- (to_deg $fn: ident $c:expr) => {
- fn $fn(x: &LVar<'_>) -> f64 {
- f64::from($c(get_num!(x))).to_radians()
- }
- };
-}
-
-macro_rules! flbop {
- ($f: expr, $fn: expr) => {
- $fn($f as u64) as f64
- };
-}
-
-num!(floor f64::floor);
-fn not(x: &LVar<'_>) -> f64 {
- flbop!(get_num!(x), |n: u64| !n)
-}
-num!(log f64::ln);
-num!(abs f64::abs);
-const fn rand(_: &LVar<'_>) -> f64 {
- 4.0
-}
-num!(ceil f64::ceil);
-num!(sqrt f64::sqrt);
-num!(deg sin f64::sin);
-num!(deg cos f64::cos);
-num!(deg tan f64::tan);
-num!(to_deg asin f64::asin);
-num!(to_deg acos f64::acos);
-num!(to_deg atan f64::atan);
-num!(log10 f64::log10);
-
-super::op_impl!(MathOp1, ptr type = for<'v> fn(&LVar<'v>) -> f64 {
- Floor => floor,
- Not => not,
- Log => log,
- Abs => abs,
- Rand => rand,
- Ceil => ceil,
- Sqrt => sqrt,
- Sin => sin,
- Cos => cos,
- Tan => tan,
- ASin => asin,
- ACos => acos,
- ATan => atan,
- Log10 => log10,
-});
diff --git a/lemu/src/instructions/mop2.rs b/lemu/src/instructions/mop2.rs
deleted file mode 100644
index 7751736..0000000
--- a/lemu/src/instructions/mop2.rs
+++ /dev/null
@@ -1,140 +0,0 @@
-use super::get_num;
-use crate::{lexer::Token, memory::LVar};
-use std::f64::consts::PI;
-
-super::op_enum! { pub enum MathOp2 {
- Angle,
- Add,
- Sub,
- Mul,
- Div,
- IDiv,
- Mod,
- Pow,
- Equal,
- NotEqual,
- And,
- LessThan,
- LessThanEq,
- GreaterThan,
- GreaterThanEq,
- StrictEqual,
- ShiftLeft,
- ShiftRight,
- BitOr,
- BitAnd,
- ExclusiveOr,
- Max,
- Min,
- AngleDiff,
- Len,
- Noise, // unimplemented
-} }
-
-macro_rules! num {
- ($fn:ident $closure:expr) => {
- fn $fn<'v>(a: &LVar<'v>, b: &LVar<'v>) -> f64 {
- f64::from($closure(get_num!(a), get_num!(b)))
- }
- };
-}
-macro_rules! op {
- ($fn:ident $op:tt) => {
- fn $fn<'v>(a: &LVar<'v>, b: &LVar<'v>) -> f64 {
- f64::from(get_num!(a) $op get_num!(b))
- }
- }
-}
-macro_rules! bop {
- ($fn: ident $op: tt) => {
- fn $fn<'v>(a: &LVar<'v>, b:& LVar<'v>) -> f64 {
- f64::from(((get_num!(a) as u64) $op (get_num!(b) as u64)) as f64)
- }
- };
-}
-macro_rules! nofun {
- ($fn:ident $closure:expr) => {
- fn $fn<'v>(a: &LVar<'v>, b: &LVar<'v>) -> f64 {
- f64::from($closure(a, b))
- }
- };
-}
-nofun!(eq | a, b | a == b);
-nofun!(ne | a, b | a != b);
-num!(and | a, b | a != 0.0 && b != 0.0);
-#[rustfmt::skip]
-op!(add +);
-op!(sub -);
-op!(mul *);
-num!(idiv | a: f64 , b: f64 | (a / b).floor());
-op!(lt <);
-op!(le <=);
-op!(gt >);
-op!(ge >=);
-op!(div /);
-op!(rem %);
-num!(pow f64::powf);
-bop!(shl <<);
-bop!(shr >>);
-bop!(or |);
-bop!(band &);
-bop!(xor ^);
-num!(max f64::max);
-num!(min f64::min);
-#[rustfmt::skip]
-num!(angle_diff |a, b| {
- let a = a % (360.0 * PI);
- let b = b % (360.0 * PI);
- f64::min(
- if (a - b) < 0.0 { a - b + 360.0 } else { a - b },
- if (b - a) < 0.0 { b - a + 360.0 } else { b - a },
- )
-});
-num!(len f64::hypot);
-nofun!(noise | _, _ | 9.0);
-num!(angle |a: f64, b: f64| {
- let mut x = a.atan2(b) * (180.0 / PI);
- if x < 0.0 {
- x += 360.0;
- }
- x
-});
-
-super::op_impl!(MathOp2, ptr type = for<'f> fn(&LVar<'f>, &LVar<'f>) -> f64 {
- Equal => eq,
- StrictEqual => eq,
- NotEqual => ne,
- And => and,
- Add => add,
- Sub => sub,
- Mul => mul,
- IDiv => idiv,
- LessThan => lt,
- LessThanEq => le,
- GreaterThan => gt,
- GreaterThanEq => ge,
- Div => div,
- Mod => rem,
- Pow => pow,
- ShiftLeft => shl,
- ShiftRight => shr,
- BitOr => or,
- BitAnd => band,
- ExclusiveOr => xor,
- Max => max,
- Min => min,
- AngleDiff => angle_diff,
- Len => len,
- Noise => noise,
- Angle => angle,
-});
-
-// // no macro cuz funky rem
-// impl MathOp2 {
-// pub const fn get_fn(self) -> for<'f> fn(&LVar<'f>, &LVar<'f>) -> f64 {
-// match self {
-// // we kind of interpret strings as numbers so yeah
-
-// }
-// }
-// }
diff --git a/lemu/src/lexer.rs b/lemu/src/lexer.rs
deleted file mode 100644
index e6b85c6..0000000
--- a/lemu/src/lexer.rs
+++ /dev/null
@@ -1,213 +0,0 @@
-use atools::prelude::*;
-use beef::lean::Cow;
-use fimg::Pack;
-use logos::{Lexer as RealLexer, Logos, Span};
-
-macro_rules! instrs {
- ($($z:literal => $v:ident,)+) => {
- #[derive(Logos, Debug, PartialEq, Clone)]
- #[logos(skip r"[ \t]+")]
- pub enum Token<'strings> {
- #[token("\n")]
- #[token(";")]
- Newline,
- #[regex("#[^\n]+", priority = 8)]
- Comment(&'strings str),
- #[regex(r"-?[0-9]+(\.[0-9]+)?", |lex| lex.slice().parse().ok())]
- #[regex(r"(true)|(false)", |lex| lex.slice().parse::<bool>().ok().map(f64::from), priority = 10)]
- #[regex(r#"0[xX][0-9a-fA-F]+"#, |lex| u64::from_str_radix(&lex.slice()[2..], 16).map(|v| v as f64).ok())]
- #[regex(r#"0[bB][01]+"#, |lex| u64::from_str_radix(&lex.slice()[2..], 2).map(|v| v as f64).ok())]
- #[regex(r#""[0-9]+(\.[0-9]+)?""#, callback = |lex| lex.slice()[1..lex.slice().len()-1].parse().ok(), priority = 13)]
- #[regex(r#"%\[([a-z]+)\]"#, |lex| COLORS.get(dbg!(&lex.slice()[2..lex.slice().len()-1])).copied().unwrap_or_default().join(255).pack() as f64)]
- #[regex(r#"%[0-9a-fA-F]+"#, callback = |lex| {
- let mut x = lex.slice()[1..].bytes()
- .map(|b| (b & 0xF) + 9 * (b >> 6))
- .array_chunks::<2>()
- .map(|[a, b]| a * 16 + b);
- if lex.slice()[1..].len() == 6 { x.carr::<3>().join(255) }
- else if lex.slice()[1..].len() == 8 { x.carr::<4>() }
- else { [255; 4] }.pack() as f64
- })]
- Num(f64), // TODO have bool and integer tokens, and parser converts
- #[regex(r#""([^\\"\n])*""#, callback = |lex| Cow::from(&lex.slice()[1..lex.slice().len()-1]), priority = 12)]
- #[regex(r#"@[^ "\n]*"#, |lex| Cow::from(lex.slice()))]
- #[regex(r#""[^"]*""#, callback = |lex| Cow::from(lex.slice()[1..lex.slice().len()-1].replace(r"\n", "\n")), priority = 8)]
- String(Cow<'strings, str>),
- #[regex("[^%0-9- \t\n][^ \t\n]*", priority = 7)]
- Ident(&'strings str),
-
- $(#[token($z, priority = 8)] $v,)+
- }
-
- impl std::fmt::Display for Token<'_> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
- match self {
- $(Self::$v => write!(f, $z,),)+
- Self::Ident(s)| Self::Comment(s) => write!(f, "{s}"),
- Self::String(s) => write!(f, "{s}"),
- Self::Num(n) => write!(f, "{n}"),
- Self::Newline => write!(f, "\n"),
- }
- }
- }
- }
-}
-
-instrs! {
- "null" => Null,
- "read" => Read,
- "write" => Write,
- "set" => Set,
- "op" => Op,
- "end" => End,
- "packcolor" => PackColor,
- "drawflush" => DrawFlush,
- "draw" => Draw,
- "select" => Select,
- "print" => Print,
- "jump" => Jump,
- "stop" => Stop,
- "equal" => Equal,
- "notEqual" => NotEqual,
- "lessThan" => LessThan,
- "lessThanEq" => LessThanEq,
- "greaterThan" => GreaterThan,
- "greaterThanEq" => GreaterThanEq,
- "strictEqual" => StrictEqual,
- "always" => Always,
- "add" => Add,
- "sub" => Sub,
- "mul" => Mul,
- "div" => Div,
- "idiv" => IDiv,
- "mod" => Mod,
- "pow" => Pow,
- "land" => And,
- "not" => Not,
- "shl" => ShiftLeft,
- "shr" => ShiftRight,
- "or" => BitOr,
- "and" => BitAnd,
- "xor" => ExclusiveOr,
- "max" => Max,
- "min" => Min,
- "angle" => Angle,
- "angleDiff" => AngleDiff,
- "len" => Len,
- "noise" => Noise,
- "abs" => Abs,
- "log" => Log,
- "log10" => Log10,
- "floor" => Floor,
- "ceil" => Ceil,
- "sqrt" => Sqrt,
- "rand" => Rand,
- "sin" => Sin,
- "cos" => Cos,
- "tan" => Tan,
- "asin" => ASin,
- "acos" => ACos,
- "atan" => ATan,
-}
-
-pub fn lex(s: &str) -> Lexer<'_> {
- Lexer {
- inner: Token::lexer(s),
- }
-}
-
-pub struct Lexer<'s> {
- inner: RealLexer<'s, Token<'s>>,
-}
-
-impl<'s> Lexer<'s> {
- pub fn next(&mut self) -> Option<Token<'s>> {
- self.inner.find_map(Result::ok)
- }
-
- pub fn span(&self) -> Span {
- self.inner.span()
- }
-}
-
-#[allow(dead_code)]
-pub fn print_stream(mut stream: Lexer) {
- print!("[");
- let Some(tok) = stream.next() else {
- println!("]");
- return;
- };
- print!("{tok:?}");
- while let Some(tok) = stream.next() {
- print!(", {tok:?}");
- }
- println!("]");
-}
-
-#[test]
-fn lexer() {
- let mut lex = lex(r#"
- start:
- print "xd"
- jump start always
- set x "4""#);
- macro_rules! test {
- ($($tok:ident$(($var:literal))?),+ $(,)?) => {{
- $(assert_eq!(lex.next(), Some(Token::$tok$(($var.into()))?));)+
- assert_eq!(lex.next(), None);
- }}
- }
- test![
- Newline,
- Ident("start:"),
- Newline,
- Print,
- String("xd"),
- Newline,
- Jump,
- Ident("start"),
- Always,
- Newline,
- Set,
- Ident("x"),
- Num(4),
- ];
-}
-
-const COLORS: phf::Map<&str, [u8; 3]> = phf::phf_map! {
- "clear" => [0, 0, 0],
- "black" => [0, 0, 0],
- "white" => [255, 255, 255],
- "lightgray" => [191, 191, 191],
- "gray" => [127, 127, 127],
- "darkgray" => [63, 63, 63],
- "blue" => [0, 0, 255],
- "navy" => [0, 0, 128],
- "royal" => [65, 105, 225],
- "slate" => [112, 128, 144],
- "sky" => [135, 206, 235],
- "cyan" => [0, 255, 255],
- "teal" => [0, 128, 128],
- "green" => [0, 255, 0],
- "acid" => [127, 255, 0],
- "lime" => [50, 205, 50],
- "forest" => [34, 139, 34],
- "olive" => [107, 142, 35],
- "yellow" => [255, 255, 0],
- "gold" => [255, 215, 0],
- "goldenrod" => [218, 165, 32],
- "orange" => [255, 165, 0],
- "brown" => [139, 69, 19],
- "tan" => [210, 180, 140],
- "brick" => [178, 34, 34],
- "red" => [255, 0, 0],
- "scarlet" => [255, 52, 28],
- "coral" => [255, 127, 80],
- "salmon" => [250, 128, 114],
- "pink" => [255, 105, 180],
- "magenta" => [255, 0, 255],
- "purple" => [160, 32, 240],
- "violet" => [238, 130, 238],
- "maroon" => [176, 48, 96],
- "accent" => [255, 211, 127],
-};
diff --git a/lemu/src/lib.rs b/lemu/src/lib.rs
deleted file mode 100644
index 25d571b..0000000
--- a/lemu/src/lib.rs
+++ /dev/null
@@ -1,185 +0,0 @@
-//! crate for [MLOG](https://mindustrygame.github.io/wiki/logic/0-introduction/#what-is-mindustry-logic) emulation.
-#![allow(clippy::redundant_closure_call)]
-// yeah so like well you see i kinda well kinda have to yes but sorta
-#![allow(clippy::fn_address_comparisons)]
-#![feature(generic_const_exprs, iter_array_chunks)]
-#![warn(
- clippy::multiple_unsafe_ops_per_block,
- clippy::missing_const_for_fn,
- clippy::redundant_pub_crate,
- clippy::missing_safety_doc,
- clippy::imprecise_flops,
- unsafe_op_in_unsafe_fn,
- clippy::dbg_macro,
- missing_docs
-)]
-pub(crate) mod code;
-mod debug;
-mod executor;
-mod instructions;
-mod lexer;
-mod memory;
-mod parser;
-
-use std::io::Write;
-
-pub use executor::{Executor, Output};
-use executor::{ExecutorBuilderInternal, Limit};
-use fimg::Image;
-pub use parser::Error;
-
-impl<W: Write + Default> Executor<'_, W> {
- /// Create a new [`ExecutorBuilder`]
- pub fn build() -> ExecutorBuilder<W> {
- ExecutorBuilder::default()
- }
-}
-impl<W: Write> Executor<'_, W> {
- /// Create a new [`ExecutorBuilder`] with a output.
- ///
- /// Output simply must impement [`Write`], so this can be set to stdout.
- /// Or simply set it to [`Vec<u8>`].
- pub fn with_output(w: W) -> ExecutorBuilder<W> {
- ExecutorBuilder {
- displays: Vec::new(),
- output: Some(w),
- instruction_limit: Limit::Unlimited,
- iteration_limit: Limit::limited(1),
- }
- }
-}
-
-/// Builder for a [`Executor`].
-/// ```
-/// # use lemu::Executor;
-/// let mut lex = Executor::with_output(std::io::stdout()).program(r#"print "hello world""#).expect("program ok");
-/// lex.run();
-/// ```
-pub struct ExecutorBuilder<W: Write> {
- output: Option<W>,
- displays: Vec<Image<Vec<u8>, 4>>,
- instruction_limit: Limit,
- iteration_limit: Limit,
-}
-
-impl<W: Write> Default for ExecutorBuilder<W> {
- fn default() -> Self {
- Self {
- output: None,
- displays: Vec::new(),
- instruction_limit: Limit::Unlimited,
- iteration_limit: Limit::limited(1),
- }
- }
-}
-
-impl<W: Write> ExecutorBuilder<W> {
- /// Limit the number of iterations.
- pub fn limit_iterations(self, n: usize) -> Self {
- Self {
- iteration_limit: Limit::limited(n),
- ..self
- }
- }
-
- /// Unlimit the number of iterations.
- pub fn unlimit_iterations(self) -> Self {
- Self {
- iteration_limit: Limit::Unlimited,
- ..self
- }
- }
-
- /// Unlimit the number of instructions.
- /// Make sure to limit the number of the iterations, else it will possibly run forever.
- pub fn unlimit_instructions(self) -> Self {
- Self {
- iteration_limit: Limit::Unlimited,
- ..self
- }
- }
-
- /// Limit the number of processed instructions.
- ///
- /// Use this if you want it to *definetly finish*.
- pub fn limit_instructions(self, n: usize) -> Self {
- Self {
- instruction_limit: Limit::limited(n),
- ..self
- }
- }
-
- /// Add a small (`80x80`) logic display.
- pub fn display(self) -> Self {
- let mut d = self.displays;
- d.push(Image::alloc(80, 80));
- Self {
- displays: d,
- ..self
- }
- }
-
- /// Add a large (`176x176`) logic display.
- pub fn large_display(self) -> Self {
- let mut d = self.displays;
- d.push(Image::alloc(176, 176));
- Self {
- displays: d,
- ..self
- }
- }
-
- /// Build the [`Executor`] with this code.
- ///
- /// # Errors
- ///
- /// errors if the code is malformed.
- pub fn program(self, program: &str) -> Result<Executor<'_, W>, Error<'_>> {
- let Self {
- output,
- displays,
- instruction_limit,
- iteration_limit,
- } = self;
- let mut executor = ExecutorBuilderInternal::new(output, displays);
- executor
- .inslimit(instruction_limit)
- .itrlimit(iteration_limit);
- // #[cfg(debug_assertions)]
- // lexer::print_stream(lexer::lex(program));
- parser::parse(lexer::lex(program), &mut executor)?;
- Ok(executor.finish())
- }
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
-
- macro_rules! test {
- (run $fn:ident.mlog $($times:literal times)?;
- $(output = $to_be:literal $(;)?)?
- $(cell[$cell_n:literal][$cell_index:literal] = $what:literal $(;)?)?
- ) => {
- #[test]
- fn $fn() -> Result<(), Error<'static>> {
- let v = vec![];
- let mut lex = Executor::with_output(v)
- .unlimit_instructions()
- $(.limit_iterations($times))?
- .program(include_str!(concat!(stringify!($fn), ".mlog")))?;
- lex.run();
- let output = lex.output();
- $(assert_eq!(output.output.unwrap(), $to_be);)?
- $(assert_eq!(output.cells[$cell_n][$cell_index], $what);)?
- Ok(())
- }
- };
- }
-
- test!(run fib.mlog; output = b"12586269025");
- test!(run primes.mlog; output = b"2 | 3 | 5 | 7 | 11 | 13 | 17 | 19 | 23 | 29 | 31 | 37 | 41 | 43 | 47 | 53 | 59 | 61 | 67 | 71 | 73 | 79 | 83 | 89 | 97 | 101 | 103 | 107 | 109 | 113 | 127 | 131 | 137 | 139 | 149 | 151 | 157 | 163 | 167 | 173 | 179 | 181 | 191 | 193 | 197 | 199 | 211 | 223 | 227 | 229 | 233 | 239 | 241 | 251 | 257 | 263 | 269 | 271 | 277 | 281 | 283 | 293 | 307 | 311 | 313 | 317 | 331 | 337 | 347 | 349 | 353 | 359 | 367 | 373 | 379 | 383 | 389 | 397 | 401 | 409 | 419 | 421 | 431 | 433 | 439 | 443 | 449 | 457 | 461 | 463 | 467 | 479 | 487 | 491 | 499 | 503 | 509 | ");
- test!(run numbers.mlog; output = b"121212");
- test!(run celliterate.mlog 5 times; cell[0][0] = 5.0);
- test!(run hello.mlog; output = b"hello world");
-}
diff --git a/lemu/src/main.rs b/lemu/src/main.rs
deleted file mode 100644
index 36eb84f..0000000
--- a/lemu/src/main.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-use std::{
- io::{self, Stdout},
- process::ExitCode,
-};
-
-use lemu::{Executor, Output};
-
-fn main() -> ExitCode {
- let mut args = std::env::args();
- args.next().unwrap(); // path to executable
- for file in args {
- let f = std::fs::read_to_string(&file).unwrap();
- let mut lex: Executor<Stdout> = match Executor::with_output(io::stdout())
- .large_display()
- .program(&f)
- {
- Ok(x) => x,
- Err(e) => {
- eprint!("{}", e.diagnose(&f));
- return ExitCode::FAILURE;
- }
- };
- println!("{lex}");
- let now = std::time::Instant::now();
- lex.run();
- dbg!(now.elapsed());
- dbg!(lex.instructions_ran);
- let Output { displays, .. } = lex.output();
- for ((d, _), i) in displays.iter().zip(1..=displays.len()) {
- d.save(format!("image{i}.png"));
- }
- }
- ExitCode::SUCCESS
-}
diff --git a/lemu/src/memory.rs b/lemu/src/memory.rs
deleted file mode 100644
index bd9ca52..0000000
--- a/lemu/src/memory.rs
+++ /dev/null
@@ -1,185 +0,0 @@
-use beef::lean::Cow;
-
-use crate::debug::{info::VarData, printable::Printable};
-#[derive(Clone, Debug)]
-pub enum LVar<'string> {
- Num(f64),
- String(Cow<'string, str>),
-}
-
-impl PartialEq for LVar<'_> {
- fn eq(&self, other: &Self) -> bool {
- match (self, other) {
- (Self::Num(a), Self::Num(b)) => (a - b).abs() < 0.000_001,
- (Self::String(l0), Self::String(r0)) => l0 == r0,
- _ => false,
- }
- }
-}
-
-impl Default for LVar<'static> {
- fn default() -> Self {
- Self::Num(0.0)
- }
-}
-
-impl LVar<'_> {
- // get null
- pub const fn null() -> LVar<'static> {
- LVar::Num(0.0)
- }
-
- pub const fn num(&self) -> Option<f64> {
- match *self {
- Self::Num(n) => Some(n),
- Self::String(_) => None,
- }
- }
-
- pub const fn num_mut(&mut self) -> Option<&mut f64> {
- match self {
- LVar::Num(x) => Some(x),
- LVar::String(_) => None,
- }
- }
-}
-
-#[derive(Clone, Copy)]
-pub struct LAddress {
- pub address: u32,
-}
-
-impl LAddress {
- /// # Safety
- ///
- /// ensure that address is valid
- pub(crate) const unsafe fn addr(address: u32) -> Self {
- LAddress { address }
- }
-}
-
-#[derive(Copy, Clone)]
-pub struct Priv {
- _priv: (),
-}
-
-impl std::fmt::Debug for LAddress {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "{:x}", self.address)
- }
-}
-
-impl std::fmt::Display for LVar<'_> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match self {
- Self::Num(n) => write!(f, "{}", crate::debug::ff(*n)), // yeeeeahhhh
- Self::String(s) => write!(f, r#""{s}""#),
- }
- }
-}
-
-impl From<f64> for LVar<'_> {
- fn from(value: f64) -> Self {
- Self::Num(value)
- }
-}
-
-impl From<bool> for LVar<'_> {
- fn from(value: bool) -> Self {
- Self::Num(value.into())
- }
-}
-
-impl From<usize> for LVar<'_> {
- fn from(value: usize) -> Self {
- Self::Num(value as f64)
- }
-}
-
-impl<'s> From<&'s str> for LVar<'s> {
- fn from(value: &'s str) -> Self {
- Self::String(value.into())
- }
-}
-
-impl<'s> From<Cow<'s, str>> for LVar<'s> {
- fn from(value: Cow<'s, str>) -> Self {
- Self::String(value)
- }
-}
-
-#[derive(Debug)]
-pub struct LRegistry<'str>(pub Box<[LVar<'str>]>);
-
-impl<'s> std::ops::Index<LAddress> for LRegistry<'s> {
- type Output = LVar<'s>;
-
- fn index(&self, index: LAddress) -> &Self::Output {
- debug_assert!((index.address as usize) < self.0.len());
- // SAFETY: LAddress promises to be in our bounds.
- // lreg has no constructors, so unless you keep one around, grab a laddr, and use it on the old lreg,
- // this is safeish.
- // lreg is private to the outside world, so its ok
- unsafe { self.0.get_unchecked(index.address as usize) }
- }
-}
-
-impl<'s> std::ops::IndexMut<LAddress> for LRegistry<'s> {
- fn index_mut(&mut self, index: LAddress) -> &mut Self::Output {
- debug_assert!((index.address as usize) < self.0.len());
- // SAFETY: see above
- unsafe { self.0.get_unchecked_mut(index.address as usize) }
- }
-}
-
-impl std::fmt::Display for LRegistry<'_> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "R[")?;
- let mut iter = self
- .0
- .iter()
- .enumerate()
- .filter(|&(_, v)| v != &LVar::null());
- if let Some((i, v)) = iter.next() {
- write!(f, "{i}: {v}")?;
- }
- for (i, v) in iter {
- write!(f, ", {i}: {v}")?;
- }
- write!(f, "]")
- }
-}
-
-impl LRegistry<'_> {
- pub fn get(&self, a: LAddress) -> &LVar {
- &self[a]
- }
-}
-
-impl Printable for LRegistry<'_> {
- fn print(
- &self,
- info: &crate::debug::info::DebugInfo<'_>,
- f: &mut impl std::fmt::Write,
- ) -> std::fmt::Result {
- write!(f, "R[")?;
- let mut iter = self
- .0
- .iter()
- .zip(0..self.0.len() as u32)
- .filter(|&(v, _)| v != &LVar::null())
- // SAFETY: the address comes from me
- .map(|(v, i)| (&info[unsafe { LAddress::addr(i) }], v))
- .filter_map(|(d, v)| match d {
- VarData::Variable(d) => Some((*d, v)),
- VarData::Constant(_) => None,
- });
- if let Some((i, v)) = iter.next() {
- write!(f, "{i}: {v}")?;
- }
- for (i, v) in iter {
- write!(f, ", {i}: {v}")?;
- }
- write!(f, "]")
- }
-}
diff --git a/lemu/src/numbers.mlog b/lemu/src/numbers.mlog
deleted file mode 100644
index 120ae6d..0000000
--- a/lemu/src/numbers.mlog
+++ /dev/null
@@ -1,4 +0,0 @@
-print 0b1100
-print 0xc
-print 12
-stop \ No newline at end of file
diff --git a/lemu/src/parser/error.rs b/lemu/src/parser/error.rs
deleted file mode 100644
index c2b053b..0000000
--- a/lemu/src/parser/error.rs
+++ /dev/null
@@ -1,442 +0,0 @@
-use super::tokstr;
-use crate::executor::Instruction;
-use crate::lexer::Token;
-use logos::Span;
-
-/// Errors returned when parsing fails.
-#[derive(thiserror::Error, Debug)]
-pub enum Error<'s> {
- /// Occurs from eg `set x`. (needs a value to set to)
- #[error("unexpected end of stream")]
- UnexpectedEof,
- /// Occurs from eg `op add\n...` (needs a variable)
- #[error("expected variable, got {0:?}")]
- ExpectedVar(Token<'s>, Span),
- /// Occurs from eg `draw 4` (needs a ident of the type of drawing)
- #[error("expected identifier, got {0:?}")]
- ExpectedIdent(Token<'s>, Span),
- /// Occurs from eg `jump house` (assuming house isnt a label).
- #[error("expected jump target, got {0:?}")]
- ExpectedJump(Token<'s>, Span),
- /// Occurs from eg `op add "three" "four"`
- #[error("expected number, got {0:?}")]
- ExpectedNum(Token<'s>, Span),
- /// Occurs from eg `op 4` (4 is not add/mul/...)
- #[error("expected operator, got {0:?}")]
- ExpectedOp(Token<'s>, Span),
- /// Occurs from eg `write cell1 5.5` (5.5 is not int)
- #[error("expected integer, got {0:?}")]
- ExpectedInt(Token<'s>, Span),
- /// Occurs from eg `control shootp building 4`
- #[error("expected string, got {0:?}")]
- ExpectedString(Token<'s>, Span),
- /// Occurs from `status not_a_bool`
- #[error("expected bool, got {0:?}")]
- ExpectedBool(Token<'s>, Span),
- /// Occurs from eg `4.0 add 5.0`
- #[error("expected instruction, got {0:?}")]
- ExpectedInstr(Token<'s>, Span),
- /// Occurs from eg
- /// ```text
- /// lable:
- /// jump label always
- /// ```
- /// (typo: lable not label)
- #[error("unable to find label {0}")]
- LabelNotFound(&'s str, Span),
- /// Occurs from eg `jump 4910294029 always`
- #[error("unable to jump to instruction {0:?}")]
- InvalidJump(Instruction, Span),
- /// Occurs from eg `read bank9223372036854775807 5` (only `126` banks can exist)
- #[error("cannot get cell>{0}")]
- MemoryTooFar(usize, Span),
- /// Occurs from eg `read bank1 512`
- #[error("index {0} out of bounds ({1} max)")]
- IndexOutOfBounds(usize, usize, Span),
- /// Occurs from `read register1`
- #[error("unknown memory type {0:?}, expected (cell)|(bank)")]
- InvalidMemoryType(&'s str, Span),
- /// Occurs from `drawflush bank1`
- #[error("unknown display type {0}, expected 'display'")]
- InvalidDisplayType(&'s str, Span),
- /// Occurs from `draw house` (or `draw image`, a valid but unsupported instruction here)
- #[error("unknown image operation {0}")]
- UnsupportedImageOp(&'s str, Span),
- /// Occurs from `control what`
- #[error("unknown control operation {0}")]
- UnknownControlOp(&'s str, Span),
- /// Occurs from `ucontrol kill`
- #[error("unknown ucontrol operation {0}")]
- UnknownUnitControlOp(&'s str, Span),
- /// Occurs from `ulocate five`
- #[error("unknown ulocate operation {0}")]
- UnknownUnitLocateOp(&'s str, Span),
- /// Occurs from `getblock core`
- #[error("unknown getblock operation {0}")]
- UnknownGetBlockOp(&'s str, Span),
- /// Occurs from `setblock unit`
- #[error("unknown setblock operation {0}")]
- UnknownSetBlockOp(&'s str, Span),
- /// Occurs from `setrule hello`
- #[error("unknown rule {0}")]
- UnknownRule(&'s str, Span),
- /// Occurs from `cutscene begin`
- #[error("unknown cutscene {0}")]
- UnknownCutscene(&'s str, Span),
- /// Occurs from `fetch hostages`
- #[error("unknown fetch operation {0}")]
- UnknownFetchOp(&'s str, Span),
- #[error("couldnt get display #{0:?}.")]
- /// Occurs from eg `display 50`.
- ///
- /// call `display` 50 more times to have more display options:
- /// ```rust,ignore
- /// executor
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display()
- /// .display();
- /// ```
- NoDisplay(usize, Span),
- /// We have a limit of [`u32::MAX`] variables.
- #[error("too many variables")]
- TooManyVariables(Span),
-}
-
-impl Error<'_> {
- /// Produces a [`Error`](lerr::Error) from this error.
- #[cfg(feature = "diagnose")]
- pub fn diagnose<'s>(&self, source: &'s str) -> lerr::Error<'s> {
- use comat::{cformat as cmt, cformat_args};
- use lerr::Error;
-
- let error = cformat_args!("{bold_red}error{reset}");
- let note = cformat_args!("{bold_blue}note{reset}");
- let help = cformat_args!("{bold_green}help{reset}");
- let mut e = Error::new(source);
- macro_rules! msg {
- ($ms:literal $(, $args:expr)* $(,)?) => {
- e.message(cmt!($ms $(, $args)*))
- };
- }
- macro_rules! op {
- ($op:ident, $ops:expr) => {{
- let mut out = String::from("{");
- let mut ops = $ops.iter();
- use std::fmt::Write;
- write!(out, "{}", ops.next().unwrap()).unwrap();
- for op in ops {
- write!(out, ", {}", op).unwrap();
- }
- out.write_char('}').unwrap();
- if let Some((mat, score)) =
- rust_fuzzy_search::fuzzy_search_best_n($op, $ops, 1).first()
- && *score > 0.5
- {
- e.note(cmt!("{help}: you may have meant {bold_green}{mat}{reset}"));
- }
- out
- }};
- }
- match self {
- Self::UnexpectedEof => {
- msg!("{error}: wasnt able to finish read, got newline").label((
- source.len()..source.len(),
- cmt!("there was supposed to be another token here"),
- ));
- }
- Self::ExpectedVar(t, s) => {
- msg!("{error}: expected variable, got {:?}", t)
- .label((s, cmt!("this was supposed to be a {blue}variable{reset} ({magenta}identifier{reset}, {magenta}number{reset}, or {magenta}string{reset})")));
- }
- Self::ExpectedIdent(_, s) => {
- msg!("{error}: expected identifier").label((
- s,
- cmt!("this was supposed to be a {bold_blue}identifier{reset} (eg. {magenta}name{reset})"),
- ));
- }
- Self::ExpectedJump(t, s) => {
- msg!("{error}: expected jump target")
- .label((s, cmt!("this was supposed to be a jump target")))
- .note(
- cmt!("{note}: a jump target is a {bold_blue}label{reset} ({magenta}ident{reset}, or {magenta}integer{reset})"),
- );
- if let Token::Num(n) = t {
- e.note(cmt!(
- "{help}: remove the fractional part: {bold_green}{n:.0}{reset}"
- ));
- }
- }
- Self::ExpectedNum(_, s) => {
- msg!("{error}: expected number")
- .label((s, cmt!("this was supposed to be a {bold_blue}number{reset} (eg. {magenta}3.14159{reset})")));
- }
- Self::ExpectedString(_, s) => {
- msg!("{error}: expected string").label((s, cmt!(r#"this was supposed to be a {bold_blue}string{reset} (eg. {magenta}"a cool string"{reset})"#)));
- }
- Self::ExpectedBool(_, s) => {
- msg!("{error}: expected bool").label((s, cmt!("this was supposed to be a {bold_blue}boolean{reset} (eg. {magenta}true{reset})")));
- }
- Self::ExpectedOp(t, s) => {
- msg!("{error}: expected operator")
- .label((s, cmt!("this was supposed to be a {bold_blue}operator{reset} (eg. {magenta}equal{reset})")));
- if let Some(i) = tokstr!(*t)
- && let Some((mat, score)) =
- rust_fuzzy_search::fuzzy_search_best_n(i, crate::instructions::OPS, 1)
- .first()
- && *score > 0.5
- {
- e.note(cmt!("{help}: maybe you meant {bold_green}{mat}{reset}"));
- }
- }
- Self::ExpectedInt(t, s) => {
- msg!("{error}: expected integer")
- .label((s, cmt!("this was supposed to be a {bold_blue}integer{reset} (eg. {magenta}4{reset})")));
- if let Token::Num(n) = t {
- e.note(cmt!(
- "{help}: remove the mantissa: {bold_green}{n:.0}{reset}"
- ));
- }
- }
- Self::ExpectedInstr(t, s) => {
- msg!("{error}: expected instruction")
- .label((s, cmt!("this was supposed to be a {bold_blue}instruction{reset} (eg. {magenta}print{reset})")));
- if let Some(i) = tokstr!(*t)
- && let Some((mat, score)) = rust_fuzzy_search::fuzzy_search_best_n(
- i,
- &[
- "getlink",
- "read",
- "write",
- "set",
- "op",
- "end",
- "drawflush",
- "draw",
- "print",
- "packcolor",
- "jump",
- "stop",
- "printflush",
- "control",
- "radar",
- "sensor",
- "wait",
- "lookup",
- "packcolor",
- "ubind",
- "ucontrol",
- "uradar",
- "ulocate",
- "getblock",
- "setblock",
- "spawn",
- "status",
- "spawnwave",
- "setrule",
- "cutscene",
- "explosion",
- "setrate",
- "fetch",
- "getflag",
- "setflag",
- "setprop",
- "effect",
- ],
- 1,
- )
- .first()
- && *score > 0.5
- {
- e.note(cmt!("{help}: maybe you meant {mat}"));
- }
- }
- Self::LabelNotFound(_, s) => {
- msg!("{error}: label not found").label((
- s,
- cmt!("this was supposed to be a (existing) {bold_blue}label{reset}"),
- )).note(cmt!("{help}: define a label with {yellow}`label_name:`{reset}, then you can {yellow}`jump label_name`{reset}."));
- }
- Self::InvalidJump(target, s) => {
- msg!("{error}: invalid jump")
- .label((
- s,
- cmt!(
- "line#{bold_red}{}{reset} is not in the program",
- target.get()
- ),
- ))
- .note(cmt!(
- "{help}: there are {bold_blue}{}{reset} available lines",
- source.lines().count()
- ));
- }
- Self::MemoryTooFar(b, s) => {
- msg!("{error}: invalid memory cell/bank")
- .label((s, cmt!("cant get cell/bank#{bold_red}{b}{reset}")))
- .note(cmt!(
- "{note}: only {blue}126{reset} cells/banks are allowed"
- ));
- }
- Self::InvalidMemoryType(t, s) => {
- msg!("{error}: invalid memory type {bold_red}{}{reset}", t)
- .label((s, "here"))
- .note(cmt!("{note}: only banks/cells are allowed"));
- }
- Self::InvalidDisplayType(disp, s) => {
- msg!("{error}: invalid display type {bold_red}{}{reset}", disp)
- .label((s, "here"))
- .note(cmt!("{help}: change this to {bold_green}'display'{reset}"));
- }
- Self::UnknownControlOp(op, s) => {
- let available = op!(op, &["enabled", "shoot", "shootp", "config", "color"]);
- msg!("{error}: invalid control op {}", op)
- .label((s, cmt!("must be one of {available}",)));
- }
- Self::UnknownUnitControlOp(op, s) => {
- let available = op!(
- op,
- &[
- "idle", "stop", "move", "approach", "boost", "pathfind", "target",
- "targetp", "itemDrop", "itemTake", "payDrop", "payEnter", "mine", "flag",
- "build", "getBlock", "within"
- ]
- );
- msg!("{error}: unknown unit control op {}", op)
- .label((s, cmt!("must be one of {available}",)));
- }
- Self::UnknownSetBlockOp(op, s) => {
- let available = op!(op, &["floor", "ore", "block"]);
- msg!("{error}: unknown set block op {}", op)
- .label((s, cmt!("must be one of {available}")));
- }
- Self::UnknownUnitLocateOp(op, s) => {
- let a = op!(op, &["ore", "spawn", "damaged", "building"]);
- msg!("{error}: unkown unit locate op {}", op)
- .label((s, cmt!("must be one of {a}",)));
- }
- Self::UnknownGetBlockOp(op, s) => {
- let a = op!(op, &["floor", "ore", "block", "building"]);
- msg!("{error}: unknown getblock op {}", op).label((s, cmt!("must be one of {a}",)));
- }
- Self::UnsupportedImageOp(op, s) => {
- let a = op!(op, crate::instructions::draw::INSTRS);
- msg!("{error}: invalid image op {}", op).label((s, cmt!("must be one of {a}")));
- }
- Self::UnknownRule(rule, s) => {
- let a = op!(
- rule,
- &[
- "currentWaveTime",
- "waveTimer",
- "waves",
- "wave",
- "waveSpacing",
- "waveSending",
- "attackMode",
- "enemyCoreBuildRadius",
- "dropZoneRadius",
- "unitCap",
- "wave",
- "lighting",
- "ambientLight",
- "solarMultiplier",
- "mapArea",
- "buildSpeed",
- "unitHealth",
- "unitBuildSpeed",
- "unitCost",
- "unitDamage",
- "blockHealth",
- "blockDamage",
- "rtsMinWeight",
- "rtsMinSquad",
- ]
- );
- msg!("{error}: invalid rule {}", rule).label((s, cmt!("must be one of {a}")));
- }
- Self::UnknownCutscene(op, s) => {
- let a = op!(op, &["pan", "zoom", "stop"]);
- msg!("{error}: invalid cutscene type {}", op)
- .label((s, cmt!("must be one of {a}")));
- }
- Self::UnknownFetchOp(op, s) => {
- let a = op!(
- op,
- &[
- "buildCount",
- "coreCount",
- "playerCount",
- "unitCount",
- "build",
- "core",
- "player",
- "unit"
- ]
- );
- msg!("{error}: invalid op {}", op).label((s, cmt!("must be one of {a}")));
- }
- Self::NoDisplay(disp, s) => {
- msg!("{error}: no display allocated")
- .label((s, cmt!("display#{bold_red}{disp}{reset} has not been created")))
- .note(cmt!("{note}: it is impossible for me to dynamically allocate displays, as {blue}'display1'{reset} could be large or small"));
- }
- Self::IndexOutOfBounds(index, size, s) => {
- msg!("{error}: {bold_red}index{reset} {} out of bounds", index)
- .label((s, cmt!("memory has only {magenta}{size}{reset} elements")));
- }
- Self::TooManyVariables(s) => {
- msg!("{error}: {bold_red}too many variables{reset}. ")
- .label((s, cmt!("we only have 65536 variable slots")))
- .note(cmt!("consider not using variables"));
- }
- };
- e
- }
-}
diff --git a/lemu/src/parser/mod.rs b/lemu/src/parser/mod.rs
deleted file mode 100644
index 0764189..0000000
--- a/lemu/src/parser/mod.rs
+++ /dev/null
@@ -1,856 +0,0 @@
-use std::io::Write as Wr;
-
-mod error;
-pub use error::Error;
-
-#[rustfmt::skip]
-macro_rules! three { ($a:expr) => { ($a, $a, $a) }; }
-#[rustfmt::skip]
-macro_rules! four { ($a:expr) => { ($a, $a, $a, $a) }; }
-#[rustfmt::skip]
-macro_rules! five { ($a:expr) => { ($a, $a, $a, $a, $a) }; }
-#[rustfmt::skip]
-macro_rules! six { ($a:expr) => { ($a, $a, $a, $a, $a, $a) }; }
-
-use super::{
- debug::info::{VarData, VarInfo},
- executor::{ExecutorBuilderInternal, Instruction, UPInstr},
- instructions::{
- AlwaysJump, ConditionOp, DynJump, End, Instr, Jump, MathOp1, MathOp2, Op1, Op2, PackColor,
- Select, Set, Stop,
- draw::{
- Clear, Flush, Line, LinePoly, Poly, RectBordered, RectFilled, SetCol, SetColor,
- SetStroke, Triangle,
- },
- io::{Print, Read, Write},
- },
- lexer::{Lexer, Token},
- memory::{LAddress, LVar},
-};
-
-macro_rules! tokstr {
- ($tok:expr) => {
- match $tok {
- Token::Ident(i) => Some(i),
- Token::PackColor => Some("packcolor"),
- Token::Null => Some("null"),
- Token::Read => Some("read"),
- Token::Write => Some("write"),
- Token::Set => Some("set"),
- Token::Op => Some("op"),
- Token::End => Some("end"),
- Token::Draw => Some("draw"),
- Token::DrawFlush => Some("drawflush"),
- Token::Print => Some("print"),
- Token::Jump => Some("jump"),
- Token::Stop => Some("stop"),
- Token::Equal => Some("equal"),
- Token::NotEqual => Some("notEqual"),
- Token::LessThan => Some("lessThan"),
- Token::LessThanEq => Some("lessThanEq"),
- Token::GreaterThan => Some("greaterThan"),
- Token::GreaterThanEq => Some("greaterThanEq"),
- Token::StrictEqual => Some("strictEqual"),
- Token::Always => Some("always"),
- Token::Add => Some("add"),
- Token::Sub => Some("sub"),
- Token::Mul => Some("mul"),
- Token::Div => Some("div"),
- Token::IDiv => Some("idiv"),
- Token::Mod => Some("mod"),
- Token::Pow => Some("pow"),
- Token::And => Some("land"),
- Token::Not => Some("not"),
- Token::ShiftLeft => Some("shl"),
- Token::ShiftRight => Some("shr"),
- Token::BitOr => Some("or"),
- Token::BitAnd => Some("and"),
- Token::ExclusiveOr => Some("xor"),
- Token::Max => Some("max"),
- Token::Min => Some("min"),
- Token::Angle => Some("angle"),
- Token::AngleDiff => Some("angleDiff"),
- Token::Len => Some("len"),
- Token::Noise => Some("noise"),
- Token::Abs => Some("abs"),
- Token::Log => Some("log"),
- Token::Log10 => Some("log10"),
- Token::Floor => Some("floor"),
- Token::Ceil => Some("ceil"),
- Token::Sqrt => Some("sqrt"),
- Token::Rand => Some("rand"),
- Token::Sin => Some("sin"),
- Token::Cos => Some("cos"),
- Token::Tan => Some("tan"),
- Token::ASin => Some("asin"),
- Token::ACos => Some("acos"),
- Token::ATan => Some("atan"),
- _ => None,
- }
- };
-}
-use tokstr;
-
-#[derive(Debug)]
-enum UJump {
- Sometimes {
- a: LAddress,
- b: LAddress,
- op: ConditionOp,
- },
- Always,
-}
-
-pub fn parse<'source, W: Wr>(
- mut tokens: Lexer<'source>,
- executor: &mut ExecutorBuilderInternal<'source, W>,
-) -> Result<(), Error<'source>> {
- let mut used = 0u32;
- let mut mem: Vec<Option<&str>> = Vec::with_capacity(64); // maps &str to usize
- let mut dbg_info: Vec<VarInfo> = Vec::with_capacity(64);
- macro_rules! push {
- // push a ident
- (const $var:expr) => {{
- let v = $var;
- dbg_info.push(VarInfo {
- data: VarData::Constant(v.clone().into()),
- span: tokens.span(),
- });
- executor.mem.push(LVar::from(v));
- mem.push(None);
- used = used
- .checked_add(1)
- .ok_or(Error::TooManyVariables(tokens.span()))?;
- unsafe { Ok(LAddress::addr(used - 1)) }
- }};
- ($var:expr) => {{
- let v = $var;
- dbg_info.push(VarInfo {
- data: VarData::Variable(v),
- span: tokens.span(),
- });
- executor.mem.push(LVar::null());
- mem.push(Some(v));
- used = used
- .checked_add(1)
- .ok_or(Error::TooManyVariables(tokens.span()))?;
- // SAFETY: just initialized executor.mem
- unsafe { Ok(LAddress::addr(used - 1)) }
- }};
- }
- push!("@counter")?;
- macro_rules! addr {
- ($val:expr) => {{
- let val = $val;
- match mem
- .iter()
- .zip(0..used)
- .find(|&(&v, _)| v == Some(val))
- .map(|(_, i)| i)
- {
- Some(n) => unsafe { Ok(LAddress::addr(n)) },
- None => push!(val),
- }
- }};
- }
-
- let mut unfinished_jumps = Vec::new();
- macro_rules! tok {
- () => {
- tokens.next().ok_or(Error::UnexpectedEof)
- };
- }
- macro_rules! err {
- ($e:ident($($stuff:expr),+)) => {
- Error::$e($($stuff,)+ tokens.span())
- }
- }
- macro_rules! yeet {
- ($e:ident($($stuff:expr),+)) => {
- return Err(Error::$e($($stuff,)+ tokens.span()))
- };
- }
- #[rustfmt::skip]
- macro_rules! nextline {
- () => {
- while let Some(tok) = tokens.next() && tok != Token::Newline { }
- };
- }
- macro_rules! take_int {
- ($tok:expr) => {
- match $tok {
- Token::Num(n) if n.fract() == 0.0 && n >= 0.0 => Ok(n as usize),
- t => Err(err!(ExpectedInt(t))),
- }
- };
- }
- macro_rules! take_memory {
- () => {{
- let t = tok!()?;
- let container = take_ident!(t.clone())?;
- let mut out = String::new();
- for ch in container.chars() {
- if matches!(ch, '0'..='9') {
- out.push(ch);
- continue;
- }
- if out.len() != 0 {
- yeet!(InvalidMemoryType(container));
- }
- }
- let container = &container[..container.len() - out.len()];
- let n_span = tokens.span().start + container.len()..tokens.span().end;
- let cell_n = out
- .parse::<usize>()
- .map_err(|_| Error::ExpectedInt(t, n_span.clone()))?;
- if cell_n > 126 || cell_n == 0 {
- return Err(Error::MemoryTooFar(cell_n, n_span));
- }
- match container {
- "bank" => executor.bank(cell_n),
- "cell" => executor.cell(cell_n),
- _ => {
- return Err(Error::InvalidMemoryType(
- container,
- tokens.span().start..tokens.span().end - out.len(),
- ));
- }
- }
- }};
- }
- macro_rules! take_ident {
- ($tok:expr) => {{
- let tok = $tok;
- tokstr!(tok).ok_or(err!(ExpectedIdent(tok)))
- }};
- }
- macro_rules! take_var {
- ($tok:expr) => {{
- let tok = $tok;
- if let Some(i) = tokstr!(tok) {
- addr!(i)
- } else {
- match tok {
- Token::Num(n) => push!(const n),
- Token::String(s) => push!(const s),
- t => Err(err!(ExpectedVar(t))),
- }
- }
- }};
- }
- macro_rules! take_numvar {
- ($tok:expr) => {{
- let tok = $tok;
- if let Some(i) = tokstr!(tok) {
- addr!(i)
- } else {
- match tok {
- Token::Num(n) => push!(const n),
- t => Err(err!(ExpectedNum(t))),
- }
- }
- }};
- }
- macro_rules! num_or_255 {
- ($tok:expr) => {
- match $tok {
- Ok(t) => match take_numvar!(t) {
- Err(_) => push!(const 255),
- n => n,
- },
- Err(_) => push!(const 255),
- }
- }
- }
- while let Some(token) = tokens.next() {
- match token {
- // # omg
- Token::Comment(c) => executor.program.push(UPInstr::Comment(c)),
- // label:
- Token::Ident(v) if v.ends_with(':') => executor
- .debug_info
- .labels
- .push((&v[..v.len() - 1], executor.next())),
- // print "5"
- Token::Print => {
- let val = take_var!(tok!()?)?;
- executor.add(Print { val });
- }
- // set x 4
- Token::Set => {
- let from = tok!()?;
- let from = addr!(take_ident!(from)?)?;
- let to = take_var!(tok!()?)?;
- executor.add(Set { from, to });
- }
- // stop
- Token::Stop => {
- executor.add(Stop {});
- }
- // jump start equal a b
- Token::Jump => {
- let tok = tok!()?;
- // label jump
- if let Some(i) = tokstr!(tok) {
- let span = tokens.span();
- let op = tok!()?;
- if op == Token::Always {
- executor.jmp();
- unfinished_jumps.push((UJump::Always, (i, span), executor.last()));
- } else {
- let op = op.try_into().map_err(|op| err!(ExpectedOp(op)))?;
- let a = take_var!(tok!()?)?;
- let b = take_var!(tok!()?)?;
- executor.jmp();
- unfinished_jumps.push((
- UJump::Sometimes { a, b, op },
- (i, span),
- executor.last(),
- ));
- }
- } else if let Ok(n) = take_int!(tok.clone()) {
- // SAFETY: we check at the end of the block that it is valid
- let to = unsafe { Instruction::new(n) };
- let op = tok!()?;
- if op == Token::Always {
- executor.add(AlwaysJump { to });
- } else {
- let op = op.try_into().map_err(|op| err!(ExpectedOp(op)))?;
- let a = take_var!(tok!()?)?;
- let b = take_var!(tok!()?)?;
- executor.add(Jump::new(op, to, a, b));
- }
- } else {
- yeet!(ExpectedJump(tok));
- };
- }
- // op add c 1 2
- Token::Op => {
- let op = tok!()?;
- if let Ok(op) = MathOp1::try_from(op.clone()) {
- // assigning to a var is useless but legal
- let out = take_numvar!(tok!()?)?;
- let x = take_numvar!(tok!()?)?;
- executor.add(Op1::new(op, x, out));
- } else if let Ok(op) = MathOp2::try_from(op.clone()) {
- let out = take_numvar!(tok!()?)?;
- let a = take_numvar!(tok!()?)?;
- let b = take_numvar!(tok!()?)?;
- executor.add(Op2::new(op, a, b, out));
- } else {
- yeet!(ExpectedOp(op));
- }
- }
- // write 5.0 bank1 4 (aka bank1[4] = 5.0)
- Token::Write => {
- let set = take_numvar!(tok!()?)?;
- let container = take_memory!();
- let index = take_numvar!(tok!()?)?;
- // this is the parser so i wont bother getting unchecked
- if let LVar::Num(v) = executor.mem[index.address as usize]
- && !container.fits(v.round() as usize)
- {
- yeet!(IndexOutOfBounds(v.round() as usize, container.size()));
- }
- executor.add(Write {
- index,
- set,
- container,
- });
- }
- // read result cell1 4 (aka result = cell1[4])
- Token::Read => {
- let output = take_var!(tok!()?)?;
- let container = take_memory!();
- let index = take_numvar!(tok!()?)?;
- if let LVar::Num(v) = executor.mem[index.address as usize]
- && !container.fits(v.round() as usize)
- {
- yeet!(IndexOutOfBounds(v.round() as usize, container.size()));
- }
- executor.add(Read {
- index,
- output,
- container,
- });
- }
- Token::Draw => {
- let dty = tok!()?;
- let Token::Ident(instr) = dty else {
- yeet!(ExpectedIdent(dty));
- };
- match instr {
- "clear" => {
- let (r, g, b) = three! { num_or_255!(tok!())? };
- executor.draw(Clear { r, g, b });
- }
- "color" => {
- let (r, g, b, a) = four! { num_or_255!(tok!())? };
- executor.draw(SetColor { r, g, b, a });
- }
- "col" => {
- let col = take_numvar!(tok!()?)?;
- executor.draw(SetCol { col });
- }
- "stroke" => {
- let size = take_numvar!(tok!()?)?;
- executor.draw(SetStroke { size });
- }
- "line" => {
- let (x, y, x2, y2) = four! { take_numvar!(tok!()?)? };
- executor.draw(Line {
- point_a: (x, y),
- point_b: (x2, y2),
- });
- }
- "rect" => {
- let (x, y, width, height) = four! { take_numvar!(tok!()?)? };
- executor.draw(RectFilled {
- position: (x, y),
- width,
- height,
- });
- }
- "lineRect" => {
- let (x, y, width, height) = four! { take_numvar!(tok!()?)? };
- executor.draw(RectBordered {
- position: (x, y),
- width,
- height,
- });
- }
- "triangle" => {
- let (x, y, x2, y2, x3, y3) = six! { take_numvar!(tok!()?)? };
- executor.draw(Triangle {
- points: ((x, y), (x2, y2), (x3, y3)),
- });
- }
- "poly" => {
- let (x, y, sides, radius, rot) = five! { take_numvar!(tok!()?)? };
- executor.draw(Poly {
- pos: (x, y),
- sides,
- radius,
- rot,
- })
- }
- "linePoly" => {
- let (x, y, sides, radius, rot) = five! { take_numvar!(tok!()?)? };
- executor.draw(LinePoly {
- pos: (x, y),
- sides,
- radius,
- rot,
- })
- }
- // image is WONTFIX
- i => yeet!(UnsupportedImageOp(i)),
- }
- }
- Token::PackColor => {
- let out = take_numvar!(tok!()?)?;
- let (r, g, b, a) = four! { take_numvar!(tok!()?)? };
- executor.add(PackColor { out, r, g, b, a });
- }
- Token::DrawFlush => {
- let t = tok!();
- if let Ok(t) = t
- && t != Token::Newline
- {
- let screen = take_ident!(t.clone())?;
- let mut out = String::new();
- for ch in screen.chars() {
- if ch.is_ascii_digit() {
- out.push(ch);
- continue;
- }
- if !out.is_empty() {
- yeet!(InvalidDisplayType(screen));
- }
- }
- let screen = &screen[..screen.len() - out.len()];
- if screen != "display" {
- yeet!(InvalidDisplayType(screen));
- }
- let n_span = tokens.span().start + screen.len()..tokens.span().end;
- let screen_n = out
- .parse::<usize>()
- .map_err(|_| Error::ExpectedInt(t, n_span.clone()))?;
- let display = executor
- .display(screen_n)
- .map_err(|n| Error::NoDisplay(n, n_span))?;
- executor.add(Flush { display });
- } else {
- executor.add(Flush::default())
- }
- }
- // end
- Token::End => {
- executor.add(End {});
- }
- Token::Select => {
- let to = addr!(take_ident!(tok!()?)?)?; // =
- // if
- let op: ConditionOp = tok!()?.try_into().map_err(|op| err!(ExpectedOp(op)))?;
-
- let x = take_var!(tok!()?)?;
- let y = take_var!(tok!()?)?;
-
- let a = take_var!(tok!()?)?; // then
- let b = take_var!(tok!()?)?; // else
-
- executor.add(Select {
- op: op.get_fn(),
- to,
- x,
- y,
- a,
- b,
- })
- }
- // starting newline, simply skip. continue, so as not to to trigger the nextline!()
- Token::Newline => continue,
- // unknown instruction
- Token::Ident(i) => {
- macro_rules! all {
- ($is:expr) => {
- |b| {
- for var in &mut *b {
- *var = $is;
- }
- Ok(())
- }
- };
- }
- macro_rules! take {
- (@ $b:ident $n:ident skip) => {
- $b[$n]=tok!()?;
-
- };
- (@ $b:ident $n:ident skip, $($rest:tt)*) => {
- $b[$n] = tok!()?;$n+=1; take!(@ $b $n $($rest)*);
- };
- (@ $b:ident $n:ident $v: expr) => {
- $b[$n] = $v;
- };
- (@ $b:ident $n:ident $v: expr, $($rest:tt)*) => {
- $b[$n] = $v;
- $n += 1;
- take!(@ $b $n $($rest)*);
- };
- [$($this:tt)*] => {
- |b| {
- let mut n = 0;
- take!(@ b n $($this)*);
- Ok(())
- }
- };
- }
- macro_rules! num {
- () => {{
- let tok = tok!()?;
- if let Some(i) = tokstr!(tok) {
- Token::Ident(i)
- } else {
- match tok {
- Token::Num(n) => Token::Num(n),
- t => yeet!(ExpectedNum(t)),
- }
- }
- }};
- }
- macro_rules! bool {
- () => {{
- let tok = tok!()?;
- if let Some(i) = tokstr!(tok) {
- Token::Ident(i)
- } else {
- match tok {
- Token::Num(n) => Token::Num(n),
- t => yeet!(ExpectedBool(t)),
- }
- }
- }};
- }
- macro_rules! ident {
- () => {
- take_ident!(tok!()?).map(|v| Token::Ident(v))?
- };
- }
- #[rustfmt::skip]
- macro_rules! build { () => { ident!() }}
- macro_rules! str {
- () => {
- match tok!()? {
- Token::String(s) => Token::String(s),
- t => yeet!(ExpectedString(t)),
- }
- };
- }
- macro_rules! var {
- () => {{
- let tok = tok!()?;
- if let Some(i) = tokstr!(tok) {
- Token::Ident(i)
- } else {
- match tok {
- Token::Num(n) => Token::Num(n),
- Token::String(s) => Token::String(s),
- t => yeet!(ExpectedVar(t)),
- }
- }
- }};
- }
- macro_rules! instr {
- (($argc:literal) => $block:expr) => {{
- let mut v: Box<[_; $argc + 1]> =
- Box::new(std::array::from_fn(|_| Token::Newline));
- v[0] = Token::Ident(i);
- const fn castor<
- 'source,
- F: FnMut(&mut [Token<'source>; $argc]) -> Result<(), Error<'source>>,
- >(
- f: F,
- ) -> F {
- f
- }
- castor($block)((&mut v[1..]).try_into().unwrap())?;
- executor.code(v as Box<[Token<'source>]>);
- nextline!();
- continue;
- }};
- }
- macro_rules! minstr {
- ($($sub:ident($argc:literal) => $block:expr)+ => $err:expr $(,)?) => {{
- let t = tok!()?;
- let idnt = take_ident!(t.clone())?;
- $(if idnt == stringify!($sub) {
- let mut v: Box<[_; $argc + 2]> = Box::new(std::array::from_fn(|_| Token::Newline));
- v[0]=Token::Ident(i);
- v[1]=Token::Ident(stringify!($sub));
- const fn castor<'source, F: FnMut(&mut [Token<'source>; $argc]) -> Result<(), Error<'source>>>(f: F) -> F { f }
- castor($block)((&mut v[2..]).try_into().unwrap())?;
- executor.code(v);
- nextline!();
- continue;
- })+
- return Err($err(idnt, t));
- }};
- }
- match i {
- "noop" => {
- // executor.program.push(UPInstr::Comment("a"));
- executor.add(crate::instructions::Noop {});
- }
- "printflush" => instr! {
- (1) => |b| {
- let t = tok!()?;
- if let Some(t) = tokstr!(t) {
- b[0] = Token::Ident(t);
- } else if t == Token::Null {
- b[0] = Token::Null;
- } else {
- b[0] = Token::Ident("message1");
- }
- Ok(())
- }
- },
- "getlink" => instr! { (2) => take![var!(), num!()] },
- "control" => minstr! {
- enabled(2) => take![build!(), bool!()]
- shoot(4) => take![build!(), num!(), num!(), bool!()]
- shootp(3) => take![build!(), str!(), bool!()]
- config(2) => take![build!(), tok!()?]
- color(4) => take![build!(), num!(), num!(), num!()]
- => |t, _| { err!(UnknownControlOp(t)) },
- },
- "radar" => {
- instr! { (7) => take![ident!(), ident!(), ident!(), ident!(), build!(), num!(), var!()] }
- }
- "sensor" => instr! { (3) => take![var!(), tok!()?, tok!()?] },
- "wait" => instr! { (1) => all!(num!()) },
- "lookup" => instr! { (3) => take![ident!(), var!(), num!()] },
- "packcolor" => instr! { (4) => all!(num!()) },
- "ubind" => instr! { (1) => |b| {
- let t = tok!()?;
- if tokstr!(t).is_some() || matches!(t, Token::Null) {
- b[0] = t;
- } else {
- yeet!(ExpectedString(t));
- };
- Ok(())
- } },
- "ucontrol" => minstr! {
- idle(0) => |_| Ok(())
- stop(0) => |_| Ok(())
- move(2) => all!(num!())
- approach(3) => all!(num!())
- boost(1) => all!(bool!())
- pathfind(2) => all!(num!())
- target(3) => take![num!(), num!(), bool!()]
- targetp(2) => take![str!(), bool!()]
- itemDrop(2) => take![build!(), num!()]
- itemTake(3) => take![build!(), str!(), num!()]
- payDrop(0) => |_| Ok(())
- payTake(1) => all!(bool!())
- payEnter(0) => |_| Ok(())
- mine(2) => all!(num!())
- flag(1) => all!(num!())
- build(5) => take![num!(), num!(), build!(), num!(), tok!()?]
- getBlock(4) => take![num!(), num!(), build!(), build!()]
- within(4) => take![num!(), num!(), num!(), var!()]
- => |t, _| { err!(UnknownUnitControlOp(t)) }
- },
- "uradar" => {
- instr! { (7) => take![ident!(), ident!(), ident!(), ident!(), build!(), num!(), var!()] }
- }
- "ulocate" => {
- minstr! {
- building(7) => take![build!(), bool!(), skip, num!(), num!(), bool!(), build!()]
- spawn(6) => take![skip, skip, skip, num!(), num!(), bool!()]
- damaged(7) => take![skip, skip, skip, num!(), num!(), var!(), var!()]
- ore(6) => take![skip, skip, tok!()?, num!(), num!(), bool!()]
- => |t, _| { err!(UnknownUnitLocateOp(t)) }
- }
- }
- "getblock" => minstr! {
- floor(3) => take![tok!()?, num!(), num!()]
- ore(3) => take![tok!()?, num!(), num!()]
- block(3) => take![tok!()?, num!(), num!()]
- building(3) => take![tok!()?, num!(), num!()]
- => |t, _| { err!(UnknownGetBlockOp(t)) }
- },
- "setblock" => minstr! {
- floor(3) => take![num!(), num!(), str!()]
- ore(3) => take![num!(), num!(), str!()]
- block(3) => take![num!(), num!(), str!(), str!(), num!()]
- => |t, _| { err!(UnknownSetBlockOp(t)) }
- },
- "spawn" => {
- instr! { (6) => take![str!(), num!(), num!(), num!(), str!(), var!()] }
- }
- "status" => minstr! {
- true(3) => take![ident!(), var!(), num!()]
- false(2) => take![ident!(), var!()]
- => |_, t| { err!(ExpectedBool(t)) }
- },
- "spawnwave" => instr! { (3) => take![num!(), num!(), bool!()] },
- "setrule" => {
- #[rustfmt::skip]
- macro_rules! rule { () => { take![num!(), str!()] }}
- minstr! {
- currentWaveTime(1) => all!(num!())
- waveTimer(1) => all!(num!())
- waves(1) => all!(num!())
- wave(1) => all!(num!())
- waveSpacing(1) => all!(num!())
- waveSending(1) => all!(num!())
- attackMode(1) => all!(num!())
- enemyCoreBuildRadius(1) => all!(num!())
- dropZoneRadius(1) => all!(num!())
- unitCap(1) => all!(num!())
- wave(1) => all!(num!())
- mapArea(4) => |b| {
- tok!()?;
- for var in &mut *b {
- *var = num!();
- }
- Ok(())
- }
- lighting(1) => all!(num!())
- ambientLight(1) => all!(num!())
- solarMultiplier(1) => all!(num!())
- buildSpeed(2) => rule!{}
- unitHealth(2) => rule!{}
- unitBuildSpeed(2) => rule!{}
- unitCost(2) => rule!{}
- unitDamage(2) => rule!{}
- blockHealth(2) => rule!{}
- blockDamage(2) => rule!{}
- rtsMinWeight(2) => rule!{}
- rtsMinSquad(2) => rule!{}
- => |t, _| { err!(UnknownRule(t)) }
- }
- }
- "cutscene" => minstr! {
- pan(3) => all!(num!())
- zoom(1) => all!(num!())
- stop(0) => |_| Ok(())
- => |t, _| { err!(UnknownCutscene(t)) }
- },
- "explosion" => {
- instr! { (8) => take![str!(), num!(), num!(), num!(), bool!(), bool!(), bool!()] }
- }
- "setrate" => instr! { (1) => all!(num!()) },
- "fetch" => minstr! {
- buildCount(4) => take![var!(), str!(), num!(), str!()] // useless 0
- unitCount(4) => take![var!(), str!()]
- playerCount(4) => take![var!(), str!()]
- coreCount(4) => take![var!(), str!()]
- unit(3) => take![var!(), str!(), num!()]
- player(3) => take![var!(), str!(), num!()]
- core(3) => take![var!(), str!(), num!()]
- build(3) => take![var!(), str!(), num!()]
- => |t, _| { err!(UnknownFetchOp(t)) }
- },
- "getflag" => instr! { (2) => take![bool!(), str!()] },
- "setflag" => instr! { (2) => take![str!(), bool!()] },
- "setprop" => instr! { (3) => take![str!(), var!(), tok!()?] },
- "effect" => {
- let mut v = Vec::with_capacity(6);
- v.push(Token::Ident("effect"));
- while let Some(tok) = tokens.next()
- && tok != Token::Newline
- {
- v.push(tok);
- }
- executor.code(v.into_boxed_slice());
- // we take the newline here
- continue;
- }
- t => yeet!(ExpectedInstr(Token::Ident(t))),
- }
- }
- t => yeet!(ExpectedInstr(t)),
- }
- nextline!();
- }
-
- for (j, (label, s), i) in unfinished_jumps {
- let to = executor
- .debug_info
- .labels
- .iter()
- .find(|(v, _)| v == &label)
- .ok_or_else(|| Error::LabelNotFound(label, s))?
- .1;
- executor.program[i.get()] = UPInstr::Instr(match j {
- UJump::Always => Instr::from(AlwaysJump { to }),
- UJump::Sometimes { a, b, op } => Instr::from(Jump::new(op, to, a, b)),
- });
- }
-
- // check jump validity
- for i in &executor.program {
- if let UPInstr::Instr(
- Instr::Jump(Jump { to, .. }) | Instr::AlwaysJump(AlwaysJump { to, .. }),
- ) = i
- {
- if !executor.valid(*to) {
- yeet!(InvalidJump(*to));
- }
- }
- }
-
- // set dynjumps
- let len = executor.program.len();
- for i in &mut executor.program {
- if let UPInstr::Instr(Instr::DynJump(DynJump { proglen, .. })) = i {
- *proglen = len;
- }
- }
-
- executor.debug_info.variables = dbg_info.into();
-
- Ok(())
-}
diff --git a/lemu/src/primes.mlog b/lemu/src/primes.mlog
deleted file mode 100644
index 67defe2..0000000
--- a/lemu/src/primes.mlog
+++ /dev/null
@@ -1,21 +0,0 @@
-set truth 0
-set:
- op add truth truth 1
- write true bank1 truth
- jump set lessThanEq truth 512
-set prime 1
-loop:
- op add prime prime 1
- jump end greaterThanEq prime 512
- read primality bank1 prime
- jump loop notEqual primality true
- print prime
- print " | "
- op mul multiple prime prime
- inner:
- write false bank1 multiple
- op add multiple multiple prime
- jump inner lessThanEq multiple 512
- jump loop always
-end:
- stop
diff --git a/lemu/yes.mlog b/lemu/yes.mlog
deleted file mode 100644
index 7186860..0000000
--- a/lemu/yes.mlog
+++ /dev/null
@@ -1,4 +0,0 @@
-set a 1
-select result notEqual x false a 2
-print result
-printflush message1
diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml
deleted file mode 100644
index e6976bc..0000000
--- a/mindus/Cargo.toml
+++ /dev/null
@@ -1,63 +0,0 @@
-[package]
-name = "mindus"
-version = "5.0.42"
-edition = "2024"
-description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
-authors = [
- "KosmosPrime <[email protected]>",
- "bend-n <[email protected]>",
-]
-repository = "https://git.bendn.org/mindus.git"
-license = "GPL-3.0"
-exclude = [".github/", "items.py"]
-readme = "README.md"
-keywords = ["mindustry", "format", "drawing"]
-rust-version = "1.85"
-
-[dependencies]
-flate2 = "1.0"
-base64 = "0.21"
-paste = "1.0"
-strconv = "0.1"
-amap = "0.1"
-color-hex = "0.2"
-thiserror = "1.0"
-bobbin-bits = "0.1"
-enum_dispatch = "0.3"
-phf = { version = "0.11", features = ["macros"] }
-fimg = { version = "0.4.52", features = [
- "scale",
- "blur",
- "save",
-], default-features = false }
-atools = "0.1.6"
-either = "1.15.0"
-implicit-fn = "0.1.0"
-lower = "0.2.0"
-car = "0.1.3"
-
-[features]
-bin = ["fimg/save"]
-square = []
-default = ["bin"]
-
-[build-dependencies]
-fimg = { version = "0.4.52", features = [
- "scale",
- "blur",
- "save",
-], default-features = false }
-walkdir = "2"
-rand = "0.9.2"
-
-[[bin]]
-name = "mindus"
-doc = false
-required-features = ["bin"]
-path = "src/exe/mod.rs"
-
-[dev-dependencies]
-diff = "0.1"
-
-[package.metadata.docs.rs]
-rustdoc-args = ["--generate-link-to-definition"]
diff --git a/mindus/README.md b/mindus/README.md
deleted file mode 100644
index 28e1a26..0000000
--- a/mindus/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# mindus
-
-![MSRV](https://img.shields.io/badge/msrv-nightly-blue?style=for-the-badge&logo=rust)
-
-Mindus is a library for working with [Mindustry](https://github.com/Anuken/Mindustry) formats.
-
-## Usage
-
-```rust
-use mindus::*;
-let s = Schematic::deserialize_base64("bXNjaAF4nD3SQW6DMBBA0bE94wF104vkDr1H1QVtWUQioTL0/oFJ/Fl9GXiy5ZFBhiJ6n26zvE9tv7T1f5/bZbtNyyJvv/P2065/+3W9i0hdpu952SR/fiWp29qOL4/lDzkfExkiEpWPGqMKpZRRlT/8VQkv4aXwnlUopYw6vRTVvRzeGJVYy1ShlDKqezk8O8+DV/AKXgkvRSllvK2sdU/xFE/xFE/xFE/xNLzxeRlU9wzPOK9xXsMzPMOr3EcNL0VlqlBKGVWpfh+O5+zPmRdnXpx5cebFmRd/eQ9KIReL").unwrap();
-let output = s.render();
-output.save("output.png");
-```
-
-This produces:
-
-![image](https://raw.githubusercontent.com/bend-n/mindus/master/.github/example.png)
diff --git a/mindus/assets/blocks/autotiles/colored-floor-0.png b/mindus/assets/blocks/autotiles/colored-floor-0.png
deleted file mode 100644
index 22cba9c..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-1.png b/mindus/assets/blocks/autotiles/colored-floor-1.png
deleted file mode 100644
index 496a56f..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-10.png b/mindus/assets/blocks/autotiles/colored-floor-10.png
deleted file mode 100644
index ee8388b..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-11.png b/mindus/assets/blocks/autotiles/colored-floor-11.png
deleted file mode 100644
index a2be8be..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-12.png b/mindus/assets/blocks/autotiles/colored-floor-12.png
deleted file mode 100644
index af62702..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-13.png b/mindus/assets/blocks/autotiles/colored-floor-13.png
deleted file mode 100644
index 0d9e7e3..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-14.png b/mindus/assets/blocks/autotiles/colored-floor-14.png
deleted file mode 100644
index 2b71568..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-15.png b/mindus/assets/blocks/autotiles/colored-floor-15.png
deleted file mode 100644
index 6013abb..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-16.png b/mindus/assets/blocks/autotiles/colored-floor-16.png
deleted file mode 100644
index 2e03b49..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-17.png b/mindus/assets/blocks/autotiles/colored-floor-17.png
deleted file mode 100644
index fc704f0..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-18.png b/mindus/assets/blocks/autotiles/colored-floor-18.png
deleted file mode 100644
index 9cae9d9..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-19.png b/mindus/assets/blocks/autotiles/colored-floor-19.png
deleted file mode 100644
index f27a86f..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-2.png b/mindus/assets/blocks/autotiles/colored-floor-2.png
deleted file mode 100644
index 8b2c939..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-20.png b/mindus/assets/blocks/autotiles/colored-floor-20.png
deleted file mode 100644
index 45988d0..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-21.png b/mindus/assets/blocks/autotiles/colored-floor-21.png
deleted file mode 100644
index 67efd86..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-22.png b/mindus/assets/blocks/autotiles/colored-floor-22.png
deleted file mode 100644
index a1ea3c2..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-23.png b/mindus/assets/blocks/autotiles/colored-floor-23.png
deleted file mode 100644
index 65842ba..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-24.png b/mindus/assets/blocks/autotiles/colored-floor-24.png
deleted file mode 100644
index a870b78..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-25.png b/mindus/assets/blocks/autotiles/colored-floor-25.png
deleted file mode 100644
index cef04bc..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-26.png b/mindus/assets/blocks/autotiles/colored-floor-26.png
deleted file mode 100644
index 825af4d..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-27.png b/mindus/assets/blocks/autotiles/colored-floor-27.png
deleted file mode 100644
index 49f3705..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-28.png b/mindus/assets/blocks/autotiles/colored-floor-28.png
deleted file mode 100644
index 80457c4..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-29.png b/mindus/assets/blocks/autotiles/colored-floor-29.png
deleted file mode 100644
index e1a7996..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-3.png b/mindus/assets/blocks/autotiles/colored-floor-3.png
deleted file mode 100644
index 8565698..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-30.png b/mindus/assets/blocks/autotiles/colored-floor-30.png
deleted file mode 100644
index 11a82b7..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-31.png b/mindus/assets/blocks/autotiles/colored-floor-31.png
deleted file mode 100644
index 2b7f223..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-32.png b/mindus/assets/blocks/autotiles/colored-floor-32.png
deleted file mode 100644
index 63fa0a3..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-33.png b/mindus/assets/blocks/autotiles/colored-floor-33.png
deleted file mode 100644
index 4e911e5..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-34.png b/mindus/assets/blocks/autotiles/colored-floor-34.png
deleted file mode 100644
index 7e6965e..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-35.png b/mindus/assets/blocks/autotiles/colored-floor-35.png
deleted file mode 100644
index 532bf65..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-36.png b/mindus/assets/blocks/autotiles/colored-floor-36.png
deleted file mode 100644
index 22ca968..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-37.png b/mindus/assets/blocks/autotiles/colored-floor-37.png
deleted file mode 100644
index 2ecd96d..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-38.png b/mindus/assets/blocks/autotiles/colored-floor-38.png
deleted file mode 100644
index d0b8c0a..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-39.png b/mindus/assets/blocks/autotiles/colored-floor-39.png
deleted file mode 100644
index 1b72549..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-4.png b/mindus/assets/blocks/autotiles/colored-floor-4.png
deleted file mode 100644
index caf12f3..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-40.png b/mindus/assets/blocks/autotiles/colored-floor-40.png
deleted file mode 100644
index ca27e4f..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-41.png b/mindus/assets/blocks/autotiles/colored-floor-41.png
deleted file mode 100644
index e0cc528..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-42.png b/mindus/assets/blocks/autotiles/colored-floor-42.png
deleted file mode 100644
index d508a2b..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-43.png b/mindus/assets/blocks/autotiles/colored-floor-43.png
deleted file mode 100644
index 25d0499..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-44.png b/mindus/assets/blocks/autotiles/colored-floor-44.png
deleted file mode 100644
index 52e5881..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-45.png b/mindus/assets/blocks/autotiles/colored-floor-45.png
deleted file mode 100644
index 82b0df7..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-46.png b/mindus/assets/blocks/autotiles/colored-floor-46.png
deleted file mode 100644
index 9afe451..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-5.png b/mindus/assets/blocks/autotiles/colored-floor-5.png
deleted file mode 100644
index 01c394c..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-6.png b/mindus/assets/blocks/autotiles/colored-floor-6.png
deleted file mode 100644
index 5a87652..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-7.png b/mindus/assets/blocks/autotiles/colored-floor-7.png
deleted file mode 100644
index 9b2725a..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-8.png b/mindus/assets/blocks/autotiles/colored-floor-8.png
deleted file mode 100644
index 5c55479..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-floor-9.png b/mindus/assets/blocks/autotiles/colored-floor-9.png
deleted file mode 100644
index e60dcad..0000000
--- a/mindus/assets/blocks/autotiles/colored-floor-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-0.png b/mindus/assets/blocks/autotiles/colored-wall-0.png
deleted file mode 100644
index 39f5afe..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-1.png b/mindus/assets/blocks/autotiles/colored-wall-1.png
deleted file mode 100644
index 2faa0ce..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-10.png b/mindus/assets/blocks/autotiles/colored-wall-10.png
deleted file mode 100644
index ac30b61..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-11.png b/mindus/assets/blocks/autotiles/colored-wall-11.png
deleted file mode 100644
index 953f79a..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-12.png b/mindus/assets/blocks/autotiles/colored-wall-12.png
deleted file mode 100644
index 2d15a99..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-13.png b/mindus/assets/blocks/autotiles/colored-wall-13.png
deleted file mode 100644
index 3f8fe05..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-14.png b/mindus/assets/blocks/autotiles/colored-wall-14.png
deleted file mode 100644
index b024a1e..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-15.png b/mindus/assets/blocks/autotiles/colored-wall-15.png
deleted file mode 100644
index a763093..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-16.png b/mindus/assets/blocks/autotiles/colored-wall-16.png
deleted file mode 100644
index 5ab4f5d..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-17.png b/mindus/assets/blocks/autotiles/colored-wall-17.png
deleted file mode 100644
index 015096a..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-18.png b/mindus/assets/blocks/autotiles/colored-wall-18.png
deleted file mode 100644
index 159f514..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-19.png b/mindus/assets/blocks/autotiles/colored-wall-19.png
deleted file mode 100644
index f5c0b66..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-2.png b/mindus/assets/blocks/autotiles/colored-wall-2.png
deleted file mode 100644
index 1637868..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-20.png b/mindus/assets/blocks/autotiles/colored-wall-20.png
deleted file mode 100644
index 0acb776..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-21.png b/mindus/assets/blocks/autotiles/colored-wall-21.png
deleted file mode 100644
index eb9ee89..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-22.png b/mindus/assets/blocks/autotiles/colored-wall-22.png
deleted file mode 100644
index 57b4256..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-23.png b/mindus/assets/blocks/autotiles/colored-wall-23.png
deleted file mode 100644
index 1c68e75..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-24.png b/mindus/assets/blocks/autotiles/colored-wall-24.png
deleted file mode 100644
index 85118cb..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-25.png b/mindus/assets/blocks/autotiles/colored-wall-25.png
deleted file mode 100644
index 14c7dec..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-26.png b/mindus/assets/blocks/autotiles/colored-wall-26.png
deleted file mode 100644
index 30d878f..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-27.png b/mindus/assets/blocks/autotiles/colored-wall-27.png
deleted file mode 100644
index f8aadb1..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-28.png b/mindus/assets/blocks/autotiles/colored-wall-28.png
deleted file mode 100644
index 8562d0e..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-29.png b/mindus/assets/blocks/autotiles/colored-wall-29.png
deleted file mode 100644
index 01db88b..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-3.png b/mindus/assets/blocks/autotiles/colored-wall-3.png
deleted file mode 100644
index be2b548..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-30.png b/mindus/assets/blocks/autotiles/colored-wall-30.png
deleted file mode 100644
index 9642c50..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-31.png b/mindus/assets/blocks/autotiles/colored-wall-31.png
deleted file mode 100644
index b620bf7..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-32.png b/mindus/assets/blocks/autotiles/colored-wall-32.png
deleted file mode 100644
index a023297..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-33.png b/mindus/assets/blocks/autotiles/colored-wall-33.png
deleted file mode 100644
index 07883ad..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-34.png b/mindus/assets/blocks/autotiles/colored-wall-34.png
deleted file mode 100644
index 2613d3f..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-35.png b/mindus/assets/blocks/autotiles/colored-wall-35.png
deleted file mode 100644
index 889550b..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-36.png b/mindus/assets/blocks/autotiles/colored-wall-36.png
deleted file mode 100644
index adaf0c6..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-37.png b/mindus/assets/blocks/autotiles/colored-wall-37.png
deleted file mode 100644
index 294c8df..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-38.png b/mindus/assets/blocks/autotiles/colored-wall-38.png
deleted file mode 100644
index 3f195d0..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-39.png b/mindus/assets/blocks/autotiles/colored-wall-39.png
deleted file mode 100644
index 214cea2..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-4.png b/mindus/assets/blocks/autotiles/colored-wall-4.png
deleted file mode 100644
index dae6d01..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-40.png b/mindus/assets/blocks/autotiles/colored-wall-40.png
deleted file mode 100644
index 2e8e172..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-41.png b/mindus/assets/blocks/autotiles/colored-wall-41.png
deleted file mode 100644
index 5935f75..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-42.png b/mindus/assets/blocks/autotiles/colored-wall-42.png
deleted file mode 100644
index 2710d91..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-43.png b/mindus/assets/blocks/autotiles/colored-wall-43.png
deleted file mode 100644
index 858b978..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-44.png b/mindus/assets/blocks/autotiles/colored-wall-44.png
deleted file mode 100644
index f89cc7b..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-45.png b/mindus/assets/blocks/autotiles/colored-wall-45.png
deleted file mode 100644
index ed8396e..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-46.png b/mindus/assets/blocks/autotiles/colored-wall-46.png
deleted file mode 100644
index ce677fc..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-5.png b/mindus/assets/blocks/autotiles/colored-wall-5.png
deleted file mode 100644
index 8375151..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-6.png b/mindus/assets/blocks/autotiles/colored-wall-6.png
deleted file mode 100644
index dad87ce..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-7.png b/mindus/assets/blocks/autotiles/colored-wall-7.png
deleted file mode 100644
index 244c1e8..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-8.png b/mindus/assets/blocks/autotiles/colored-wall-8.png
deleted file mode 100644
index b5e45d3..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/colored-wall-9.png b/mindus/assets/blocks/autotiles/colored-wall-9.png
deleted file mode 100644
index 12beb83..0000000
--- a/mindus/assets/blocks/autotiles/colored-wall-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-0.png b/mindus/assets/blocks/autotiles/metal-tiles-1-0.png
deleted file mode 100644
index a83370c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-1.png b/mindus/assets/blocks/autotiles/metal-tiles-1-1.png
deleted file mode 100644
index e53a55c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-10.png b/mindus/assets/blocks/autotiles/metal-tiles-1-10.png
deleted file mode 100644
index f6547c0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-11.png b/mindus/assets/blocks/autotiles/metal-tiles-1-11.png
deleted file mode 100644
index 3d93492..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-12.png b/mindus/assets/blocks/autotiles/metal-tiles-1-12.png
deleted file mode 100644
index 3b79fe6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-13.png b/mindus/assets/blocks/autotiles/metal-tiles-1-13.png
deleted file mode 100644
index 08176d1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-14.png b/mindus/assets/blocks/autotiles/metal-tiles-1-14.png
deleted file mode 100644
index 0396648..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-15.png b/mindus/assets/blocks/autotiles/metal-tiles-1-15.png
deleted file mode 100644
index a808501..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-16.png b/mindus/assets/blocks/autotiles/metal-tiles-1-16.png
deleted file mode 100644
index 3ac250e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-17.png b/mindus/assets/blocks/autotiles/metal-tiles-1-17.png
deleted file mode 100644
index d7567a9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-18.png b/mindus/assets/blocks/autotiles/metal-tiles-1-18.png
deleted file mode 100644
index 33297d6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-19.png b/mindus/assets/blocks/autotiles/metal-tiles-1-19.png
deleted file mode 100644
index 997c4f5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-2.png b/mindus/assets/blocks/autotiles/metal-tiles-1-2.png
deleted file mode 100644
index a9dd2e0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-20.png b/mindus/assets/blocks/autotiles/metal-tiles-1-20.png
deleted file mode 100644
index 461deeb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-21.png b/mindus/assets/blocks/autotiles/metal-tiles-1-21.png
deleted file mode 100644
index 20e80c5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-22.png b/mindus/assets/blocks/autotiles/metal-tiles-1-22.png
deleted file mode 100644
index 797209d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-23.png b/mindus/assets/blocks/autotiles/metal-tiles-1-23.png
deleted file mode 100644
index 7ec5230..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-24.png b/mindus/assets/blocks/autotiles/metal-tiles-1-24.png
deleted file mode 100644
index 315befc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-25.png b/mindus/assets/blocks/autotiles/metal-tiles-1-25.png
deleted file mode 100644
index 24b3f24..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-26.png b/mindus/assets/blocks/autotiles/metal-tiles-1-26.png
deleted file mode 100644
index 551ce8f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-27.png b/mindus/assets/blocks/autotiles/metal-tiles-1-27.png
deleted file mode 100644
index a4807ae..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-28.png b/mindus/assets/blocks/autotiles/metal-tiles-1-28.png
deleted file mode 100644
index 5007413..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-29.png b/mindus/assets/blocks/autotiles/metal-tiles-1-29.png
deleted file mode 100644
index be6a420..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-3.png b/mindus/assets/blocks/autotiles/metal-tiles-1-3.png
deleted file mode 100644
index 3c7e43d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-30.png b/mindus/assets/blocks/autotiles/metal-tiles-1-30.png
deleted file mode 100644
index a148a2f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-31.png b/mindus/assets/blocks/autotiles/metal-tiles-1-31.png
deleted file mode 100644
index df72b88..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-32.png b/mindus/assets/blocks/autotiles/metal-tiles-1-32.png
deleted file mode 100644
index 4ec33ff..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-33.png b/mindus/assets/blocks/autotiles/metal-tiles-1-33.png
deleted file mode 100644
index 3f42613..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-34.png b/mindus/assets/blocks/autotiles/metal-tiles-1-34.png
deleted file mode 100644
index 2637b42..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-35.png b/mindus/assets/blocks/autotiles/metal-tiles-1-35.png
deleted file mode 100644
index 9e9e603..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-36.png b/mindus/assets/blocks/autotiles/metal-tiles-1-36.png
deleted file mode 100644
index 1aec490..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-37.png b/mindus/assets/blocks/autotiles/metal-tiles-1-37.png
deleted file mode 100644
index 4142f49..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-38.png b/mindus/assets/blocks/autotiles/metal-tiles-1-38.png
deleted file mode 100644
index ab35995..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-39.png b/mindus/assets/blocks/autotiles/metal-tiles-1-39.png
deleted file mode 100644
index bf3f08d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-4.png b/mindus/assets/blocks/autotiles/metal-tiles-1-4.png
deleted file mode 100644
index affdc8e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-40.png b/mindus/assets/blocks/autotiles/metal-tiles-1-40.png
deleted file mode 100644
index c87e37d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-41.png b/mindus/assets/blocks/autotiles/metal-tiles-1-41.png
deleted file mode 100644
index e69c9f5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-42.png b/mindus/assets/blocks/autotiles/metal-tiles-1-42.png
deleted file mode 100644
index b3d26f6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-43.png b/mindus/assets/blocks/autotiles/metal-tiles-1-43.png
deleted file mode 100644
index 6ce4f3e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-44.png b/mindus/assets/blocks/autotiles/metal-tiles-1-44.png
deleted file mode 100644
index 091ac7a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-45.png b/mindus/assets/blocks/autotiles/metal-tiles-1-45.png
deleted file mode 100644
index d9eb3bf..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-46.png b/mindus/assets/blocks/autotiles/metal-tiles-1-46.png
deleted file mode 100644
index ab44352..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-5.png b/mindus/assets/blocks/autotiles/metal-tiles-1-5.png
deleted file mode 100644
index e65e1ec..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-6.png b/mindus/assets/blocks/autotiles/metal-tiles-1-6.png
deleted file mode 100644
index 9fab62b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-7.png b/mindus/assets/blocks/autotiles/metal-tiles-1-7.png
deleted file mode 100644
index bc34b3a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-8.png b/mindus/assets/blocks/autotiles/metal-tiles-1-8.png
deleted file mode 100644
index 01a866c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-9.png b/mindus/assets/blocks/autotiles/metal-tiles-1-9.png
deleted file mode 100644
index 41c7fd4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-1-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-0.png b/mindus/assets/blocks/autotiles/metal-tiles-10-0.png
deleted file mode 100644
index e9d0477..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-1.png b/mindus/assets/blocks/autotiles/metal-tiles-10-1.png
deleted file mode 100644
index a0ca0b1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-10.png b/mindus/assets/blocks/autotiles/metal-tiles-10-10.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-11.png b/mindus/assets/blocks/autotiles/metal-tiles-10-11.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-12.png b/mindus/assets/blocks/autotiles/metal-tiles-10-12.png
deleted file mode 100644
index fd71dc5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-13.png b/mindus/assets/blocks/autotiles/metal-tiles-10-13.png
deleted file mode 100644
index 28ee0f5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-14.png b/mindus/assets/blocks/autotiles/metal-tiles-10-14.png
deleted file mode 100644
index 98abbdb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-15.png b/mindus/assets/blocks/autotiles/metal-tiles-10-15.png
deleted file mode 100644
index 57e4557..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-16.png b/mindus/assets/blocks/autotiles/metal-tiles-10-16.png
deleted file mode 100644
index 906257e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-17.png b/mindus/assets/blocks/autotiles/metal-tiles-10-17.png
deleted file mode 100644
index 6a52c03..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-18.png b/mindus/assets/blocks/autotiles/metal-tiles-10-18.png
deleted file mode 100644
index 09b9a12..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-19.png b/mindus/assets/blocks/autotiles/metal-tiles-10-19.png
deleted file mode 100644
index 29628fd..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-2.png b/mindus/assets/blocks/autotiles/metal-tiles-10-2.png
deleted file mode 100644
index a77dafd..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-20.png b/mindus/assets/blocks/autotiles/metal-tiles-10-20.png
deleted file mode 100644
index c888c24..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-21.png b/mindus/assets/blocks/autotiles/metal-tiles-10-21.png
deleted file mode 100644
index b854935..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-22.png b/mindus/assets/blocks/autotiles/metal-tiles-10-22.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-23.png b/mindus/assets/blocks/autotiles/metal-tiles-10-23.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-24.png b/mindus/assets/blocks/autotiles/metal-tiles-10-24.png
deleted file mode 100644
index 95364a0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-25.png b/mindus/assets/blocks/autotiles/metal-tiles-10-25.png
deleted file mode 100644
index 1e4f75c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-26.png b/mindus/assets/blocks/autotiles/metal-tiles-10-26.png
deleted file mode 100644
index 2bcd97b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-27.png b/mindus/assets/blocks/autotiles/metal-tiles-10-27.png
deleted file mode 100644
index 032a8af..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-28.png b/mindus/assets/blocks/autotiles/metal-tiles-10-28.png
deleted file mode 100644
index 1b086b8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-29.png b/mindus/assets/blocks/autotiles/metal-tiles-10-29.png
deleted file mode 100644
index 82f3e1c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-3.png b/mindus/assets/blocks/autotiles/metal-tiles-10-3.png
deleted file mode 100644
index f08b31c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-30.png b/mindus/assets/blocks/autotiles/metal-tiles-10-30.png
deleted file mode 100644
index 1b086b8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-31.png b/mindus/assets/blocks/autotiles/metal-tiles-10-31.png
deleted file mode 100644
index 82f3e1c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-32.png b/mindus/assets/blocks/autotiles/metal-tiles-10-32.png
deleted file mode 100644
index cf94896..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-33.png b/mindus/assets/blocks/autotiles/metal-tiles-10-33.png
deleted file mode 100644
index 70f62ab..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-34.png b/mindus/assets/blocks/autotiles/metal-tiles-10-34.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-35.png b/mindus/assets/blocks/autotiles/metal-tiles-10-35.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-36.png b/mindus/assets/blocks/autotiles/metal-tiles-10-36.png
deleted file mode 100644
index 28baa1d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-37.png b/mindus/assets/blocks/autotiles/metal-tiles-10-37.png
deleted file mode 100644
index 4bf374c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-38.png b/mindus/assets/blocks/autotiles/metal-tiles-10-38.png
deleted file mode 100644
index 4e46578..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-39.png b/mindus/assets/blocks/autotiles/metal-tiles-10-39.png
deleted file mode 100644
index 6e7049e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-4.png b/mindus/assets/blocks/autotiles/metal-tiles-10-4.png
deleted file mode 100644
index 5cd68ff..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-40.png b/mindus/assets/blocks/autotiles/metal-tiles-10-40.png
deleted file mode 100644
index c888c24..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-41.png b/mindus/assets/blocks/autotiles/metal-tiles-10-41.png
deleted file mode 100644
index b854935..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-42.png b/mindus/assets/blocks/autotiles/metal-tiles-10-42.png
deleted file mode 100644
index c888c24..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-43.png b/mindus/assets/blocks/autotiles/metal-tiles-10-43.png
deleted file mode 100644
index b854935..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-44.png b/mindus/assets/blocks/autotiles/metal-tiles-10-44.png
deleted file mode 100644
index e888cb2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-45.png b/mindus/assets/blocks/autotiles/metal-tiles-10-45.png
deleted file mode 100644
index d384228..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-46.png b/mindus/assets/blocks/autotiles/metal-tiles-10-46.png
deleted file mode 100644
index 34d1f84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-5.png b/mindus/assets/blocks/autotiles/metal-tiles-10-5.png
deleted file mode 100644
index fe97ef0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-6.png b/mindus/assets/blocks/autotiles/metal-tiles-10-6.png
deleted file mode 100644
index cae903d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-7.png b/mindus/assets/blocks/autotiles/metal-tiles-10-7.png
deleted file mode 100644
index 65bb3d9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-8.png b/mindus/assets/blocks/autotiles/metal-tiles-10-8.png
deleted file mode 100644
index 1b086b8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-9.png b/mindus/assets/blocks/autotiles/metal-tiles-10-9.png
deleted file mode 100644
index 82f3e1c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-10-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-0.png b/mindus/assets/blocks/autotiles/metal-tiles-11-0.png
deleted file mode 100644
index bfd2d60..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-1.png b/mindus/assets/blocks/autotiles/metal-tiles-11-1.png
deleted file mode 100644
index be39313..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-10.png b/mindus/assets/blocks/autotiles/metal-tiles-11-10.png
deleted file mode 100644
index 4a3c2a0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-11.png b/mindus/assets/blocks/autotiles/metal-tiles-11-11.png
deleted file mode 100644
index d1db125..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-12.png b/mindus/assets/blocks/autotiles/metal-tiles-11-12.png
deleted file mode 100644
index 3528ba8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-13.png b/mindus/assets/blocks/autotiles/metal-tiles-11-13.png
deleted file mode 100644
index 65b69e6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-14.png b/mindus/assets/blocks/autotiles/metal-tiles-11-14.png
deleted file mode 100644
index 832e8f5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-15.png b/mindus/assets/blocks/autotiles/metal-tiles-11-15.png
deleted file mode 100644
index ef36066..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-16.png b/mindus/assets/blocks/autotiles/metal-tiles-11-16.png
deleted file mode 100644
index cac8453..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-17.png b/mindus/assets/blocks/autotiles/metal-tiles-11-17.png
deleted file mode 100644
index 8671dd2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-18.png b/mindus/assets/blocks/autotiles/metal-tiles-11-18.png
deleted file mode 100644
index 305acd1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-19.png b/mindus/assets/blocks/autotiles/metal-tiles-11-19.png
deleted file mode 100644
index 3e3e186..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-2.png b/mindus/assets/blocks/autotiles/metal-tiles-11-2.png
deleted file mode 100644
index 73f5b1f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-20.png b/mindus/assets/blocks/autotiles/metal-tiles-11-20.png
deleted file mode 100644
index 4e35692..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-21.png b/mindus/assets/blocks/autotiles/metal-tiles-11-21.png
deleted file mode 100644
index f11d990..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-22.png b/mindus/assets/blocks/autotiles/metal-tiles-11-22.png
deleted file mode 100644
index 53cb47f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-23.png b/mindus/assets/blocks/autotiles/metal-tiles-11-23.png
deleted file mode 100644
index 3888c61..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-24.png b/mindus/assets/blocks/autotiles/metal-tiles-11-24.png
deleted file mode 100644
index ab4a140..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-25.png b/mindus/assets/blocks/autotiles/metal-tiles-11-25.png
deleted file mode 100644
index f3fd1df..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-26.png b/mindus/assets/blocks/autotiles/metal-tiles-11-26.png
deleted file mode 100644
index 4020303..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-27.png b/mindus/assets/blocks/autotiles/metal-tiles-11-27.png
deleted file mode 100644
index 43ad8e5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-28.png b/mindus/assets/blocks/autotiles/metal-tiles-11-28.png
deleted file mode 100644
index e847622..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-29.png b/mindus/assets/blocks/autotiles/metal-tiles-11-29.png
deleted file mode 100644
index c6c6a83..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-3.png b/mindus/assets/blocks/autotiles/metal-tiles-11-3.png
deleted file mode 100644
index 95a795f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-30.png b/mindus/assets/blocks/autotiles/metal-tiles-11-30.png
deleted file mode 100644
index 4333147..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-31.png b/mindus/assets/blocks/autotiles/metal-tiles-11-31.png
deleted file mode 100644
index 2a46fe4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-32.png b/mindus/assets/blocks/autotiles/metal-tiles-11-32.png
deleted file mode 100644
index 9476b23..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-33.png b/mindus/assets/blocks/autotiles/metal-tiles-11-33.png
deleted file mode 100644
index fa3c88d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-34.png b/mindus/assets/blocks/autotiles/metal-tiles-11-34.png
deleted file mode 100644
index 22bbf43..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-35.png b/mindus/assets/blocks/autotiles/metal-tiles-11-35.png
deleted file mode 100644
index 0f18e6a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-36.png b/mindus/assets/blocks/autotiles/metal-tiles-11-36.png
deleted file mode 100644
index 10c825b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-37.png b/mindus/assets/blocks/autotiles/metal-tiles-11-37.png
deleted file mode 100644
index cc2cb5c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-38.png b/mindus/assets/blocks/autotiles/metal-tiles-11-38.png
deleted file mode 100644
index 62b20d8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-39.png b/mindus/assets/blocks/autotiles/metal-tiles-11-39.png
deleted file mode 100644
index c2e4f68..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-4.png b/mindus/assets/blocks/autotiles/metal-tiles-11-4.png
deleted file mode 100644
index 88e57c5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-40.png b/mindus/assets/blocks/autotiles/metal-tiles-11-40.png
deleted file mode 100644
index f019568..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-41.png b/mindus/assets/blocks/autotiles/metal-tiles-11-41.png
deleted file mode 100644
index b9e126c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-42.png b/mindus/assets/blocks/autotiles/metal-tiles-11-42.png
deleted file mode 100644
index 76e63e4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-43.png b/mindus/assets/blocks/autotiles/metal-tiles-11-43.png
deleted file mode 100644
index 3278744..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-44.png b/mindus/assets/blocks/autotiles/metal-tiles-11-44.png
deleted file mode 100644
index fb2acbc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-45.png b/mindus/assets/blocks/autotiles/metal-tiles-11-45.png
deleted file mode 100644
index 6ed640e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-46.png b/mindus/assets/blocks/autotiles/metal-tiles-11-46.png
deleted file mode 100644
index 248e481..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-5.png b/mindus/assets/blocks/autotiles/metal-tiles-11-5.png
deleted file mode 100644
index 0420352..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-6.png b/mindus/assets/blocks/autotiles/metal-tiles-11-6.png
deleted file mode 100644
index 18c94e3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-7.png b/mindus/assets/blocks/autotiles/metal-tiles-11-7.png
deleted file mode 100644
index 902c08a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-8.png b/mindus/assets/blocks/autotiles/metal-tiles-11-8.png
deleted file mode 100644
index dd7ebb3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-9.png b/mindus/assets/blocks/autotiles/metal-tiles-11-9.png
deleted file mode 100644
index ca97c56..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-11-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-0.png b/mindus/assets/blocks/autotiles/metal-tiles-12-0.png
deleted file mode 100644
index cf5cd97..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-1.png b/mindus/assets/blocks/autotiles/metal-tiles-12-1.png
deleted file mode 100644
index 92f79d4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-10.png b/mindus/assets/blocks/autotiles/metal-tiles-12-10.png
deleted file mode 100644
index c26b212..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-11.png b/mindus/assets/blocks/autotiles/metal-tiles-12-11.png
deleted file mode 100644
index 5e9a5cf..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-12.png b/mindus/assets/blocks/autotiles/metal-tiles-12-12.png
deleted file mode 100644
index d127031..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-13.png b/mindus/assets/blocks/autotiles/metal-tiles-12-13.png
deleted file mode 100644
index 65b69e6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-14.png b/mindus/assets/blocks/autotiles/metal-tiles-12-14.png
deleted file mode 100644
index 6616ee1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-15.png b/mindus/assets/blocks/autotiles/metal-tiles-12-15.png
deleted file mode 100644
index 75fc960..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-16.png b/mindus/assets/blocks/autotiles/metal-tiles-12-16.png
deleted file mode 100644
index 889bfa4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-17.png b/mindus/assets/blocks/autotiles/metal-tiles-12-17.png
deleted file mode 100644
index 0766e09..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-18.png b/mindus/assets/blocks/autotiles/metal-tiles-12-18.png
deleted file mode 100644
index 85010d7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-19.png b/mindus/assets/blocks/autotiles/metal-tiles-12-19.png
deleted file mode 100644
index b269ab5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-2.png b/mindus/assets/blocks/autotiles/metal-tiles-12-2.png
deleted file mode 100644
index 7c7a991..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-20.png b/mindus/assets/blocks/autotiles/metal-tiles-12-20.png
deleted file mode 100644
index 63717db..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-21.png b/mindus/assets/blocks/autotiles/metal-tiles-12-21.png
deleted file mode 100644
index 848afba..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-22.png b/mindus/assets/blocks/autotiles/metal-tiles-12-22.png
deleted file mode 100644
index b48307c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-23.png b/mindus/assets/blocks/autotiles/metal-tiles-12-23.png
deleted file mode 100644
index 33b462a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-24.png b/mindus/assets/blocks/autotiles/metal-tiles-12-24.png
deleted file mode 100644
index 54ea1a3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-25.png b/mindus/assets/blocks/autotiles/metal-tiles-12-25.png
deleted file mode 100644
index e936dae..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-26.png b/mindus/assets/blocks/autotiles/metal-tiles-12-26.png
deleted file mode 100644
index 1ac09d9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-27.png b/mindus/assets/blocks/autotiles/metal-tiles-12-27.png
deleted file mode 100644
index 37d0a65..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-28.png b/mindus/assets/blocks/autotiles/metal-tiles-12-28.png
deleted file mode 100644
index 9ec4070..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-29.png b/mindus/assets/blocks/autotiles/metal-tiles-12-29.png
deleted file mode 100644
index 8d219de..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-3.png b/mindus/assets/blocks/autotiles/metal-tiles-12-3.png
deleted file mode 100644
index fba8e12..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-30.png b/mindus/assets/blocks/autotiles/metal-tiles-12-30.png
deleted file mode 100644
index 7ae9281..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-31.png b/mindus/assets/blocks/autotiles/metal-tiles-12-31.png
deleted file mode 100644
index b7c9bee..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-32.png b/mindus/assets/blocks/autotiles/metal-tiles-12-32.png
deleted file mode 100644
index faef954..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-33.png b/mindus/assets/blocks/autotiles/metal-tiles-12-33.png
deleted file mode 100644
index dbc4e6c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-34.png b/mindus/assets/blocks/autotiles/metal-tiles-12-34.png
deleted file mode 100644
index 5989738..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-35.png b/mindus/assets/blocks/autotiles/metal-tiles-12-35.png
deleted file mode 100644
index 80b3d72..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-36.png b/mindus/assets/blocks/autotiles/metal-tiles-12-36.png
deleted file mode 100644
index 721eac2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-37.png b/mindus/assets/blocks/autotiles/metal-tiles-12-37.png
deleted file mode 100644
index a535792..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-38.png b/mindus/assets/blocks/autotiles/metal-tiles-12-38.png
deleted file mode 100644
index 37e0c53..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-39.png b/mindus/assets/blocks/autotiles/metal-tiles-12-39.png
deleted file mode 100644
index 98b5cf5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-4.png b/mindus/assets/blocks/autotiles/metal-tiles-12-4.png
deleted file mode 100644
index ad846b0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-40.png b/mindus/assets/blocks/autotiles/metal-tiles-12-40.png
deleted file mode 100644
index 78f14e2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-41.png b/mindus/assets/blocks/autotiles/metal-tiles-12-41.png
deleted file mode 100644
index a22f9bd..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-42.png b/mindus/assets/blocks/autotiles/metal-tiles-12-42.png
deleted file mode 100644
index 07ee905..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-43.png b/mindus/assets/blocks/autotiles/metal-tiles-12-43.png
deleted file mode 100644
index 36f2892..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-44.png b/mindus/assets/blocks/autotiles/metal-tiles-12-44.png
deleted file mode 100644
index 4987599..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-45.png b/mindus/assets/blocks/autotiles/metal-tiles-12-45.png
deleted file mode 100644
index a24214b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-46.png b/mindus/assets/blocks/autotiles/metal-tiles-12-46.png
deleted file mode 100644
index 8ff4705..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-5.png b/mindus/assets/blocks/autotiles/metal-tiles-12-5.png
deleted file mode 100644
index 6ed3b7e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-6.png b/mindus/assets/blocks/autotiles/metal-tiles-12-6.png
deleted file mode 100644
index 603498a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-7.png b/mindus/assets/blocks/autotiles/metal-tiles-12-7.png
deleted file mode 100644
index 27f2e1d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-8.png b/mindus/assets/blocks/autotiles/metal-tiles-12-8.png
deleted file mode 100644
index 14085b4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-9.png b/mindus/assets/blocks/autotiles/metal-tiles-12-9.png
deleted file mode 100644
index 35e059c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-12-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-0.png b/mindus/assets/blocks/autotiles/metal-tiles-13-0.png
deleted file mode 100644
index 3332ddc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-1.png b/mindus/assets/blocks/autotiles/metal-tiles-13-1.png
deleted file mode 100644
index ca7f99b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-10.png b/mindus/assets/blocks/autotiles/metal-tiles-13-10.png
deleted file mode 100644
index b9b6377..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-11.png b/mindus/assets/blocks/autotiles/metal-tiles-13-11.png
deleted file mode 100644
index f737cd3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-12.png b/mindus/assets/blocks/autotiles/metal-tiles-13-12.png
deleted file mode 100644
index 46f5c8a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-13.png b/mindus/assets/blocks/autotiles/metal-tiles-13-13.png
deleted file mode 100644
index 9b23b42..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-14.png b/mindus/assets/blocks/autotiles/metal-tiles-13-14.png
deleted file mode 100644
index fa894c7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-15.png b/mindus/assets/blocks/autotiles/metal-tiles-13-15.png
deleted file mode 100644
index 6141753..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-16.png b/mindus/assets/blocks/autotiles/metal-tiles-13-16.png
deleted file mode 100644
index f118cc9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-17.png b/mindus/assets/blocks/autotiles/metal-tiles-13-17.png
deleted file mode 100644
index f381884..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-18.png b/mindus/assets/blocks/autotiles/metal-tiles-13-18.png
deleted file mode 100644
index 5327c77..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-19.png b/mindus/assets/blocks/autotiles/metal-tiles-13-19.png
deleted file mode 100644
index 9cac53f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-2.png b/mindus/assets/blocks/autotiles/metal-tiles-13-2.png
deleted file mode 100644
index d9ee678..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-20.png b/mindus/assets/blocks/autotiles/metal-tiles-13-20.png
deleted file mode 100644
index 34a9b97..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-21.png b/mindus/assets/blocks/autotiles/metal-tiles-13-21.png
deleted file mode 100644
index c7d711a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-22.png b/mindus/assets/blocks/autotiles/metal-tiles-13-22.png
deleted file mode 100644
index f839f76..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-23.png b/mindus/assets/blocks/autotiles/metal-tiles-13-23.png
deleted file mode 100644
index a6dd10f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-24.png b/mindus/assets/blocks/autotiles/metal-tiles-13-24.png
deleted file mode 100644
index dc8ce47..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-25.png b/mindus/assets/blocks/autotiles/metal-tiles-13-25.png
deleted file mode 100644
index 351991c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-26.png b/mindus/assets/blocks/autotiles/metal-tiles-13-26.png
deleted file mode 100644
index 60e350a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-27.png b/mindus/assets/blocks/autotiles/metal-tiles-13-27.png
deleted file mode 100644
index 4ffdf70..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-28.png b/mindus/assets/blocks/autotiles/metal-tiles-13-28.png
deleted file mode 100644
index 5252471..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-29.png b/mindus/assets/blocks/autotiles/metal-tiles-13-29.png
deleted file mode 100644
index 03d8fad..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-3.png b/mindus/assets/blocks/autotiles/metal-tiles-13-3.png
deleted file mode 100644
index b8258ab..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-30.png b/mindus/assets/blocks/autotiles/metal-tiles-13-30.png
deleted file mode 100644
index 1ad7c5d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-31.png b/mindus/assets/blocks/autotiles/metal-tiles-13-31.png
deleted file mode 100644
index d489929..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-32.png b/mindus/assets/blocks/autotiles/metal-tiles-13-32.png
deleted file mode 100644
index ad62d60..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-33.png b/mindus/assets/blocks/autotiles/metal-tiles-13-33.png
deleted file mode 100644
index 1579858..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-34.png b/mindus/assets/blocks/autotiles/metal-tiles-13-34.png
deleted file mode 100644
index f9f1fd3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-35.png b/mindus/assets/blocks/autotiles/metal-tiles-13-35.png
deleted file mode 100644
index 408c336..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-36.png b/mindus/assets/blocks/autotiles/metal-tiles-13-36.png
deleted file mode 100644
index 4dbbaa3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-37.png b/mindus/assets/blocks/autotiles/metal-tiles-13-37.png
deleted file mode 100644
index 97ca011..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-38.png b/mindus/assets/blocks/autotiles/metal-tiles-13-38.png
deleted file mode 100644
index 3e81d7e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-39.png b/mindus/assets/blocks/autotiles/metal-tiles-13-39.png
deleted file mode 100644
index 4f1c6d9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-4.png b/mindus/assets/blocks/autotiles/metal-tiles-13-4.png
deleted file mode 100644
index e22663c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-40.png b/mindus/assets/blocks/autotiles/metal-tiles-13-40.png
deleted file mode 100644
index 4d4192b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-41.png b/mindus/assets/blocks/autotiles/metal-tiles-13-41.png
deleted file mode 100644
index 8fe32f0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-42.png b/mindus/assets/blocks/autotiles/metal-tiles-13-42.png
deleted file mode 100644
index 4a21be1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-43.png b/mindus/assets/blocks/autotiles/metal-tiles-13-43.png
deleted file mode 100644
index 7157336..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-44.png b/mindus/assets/blocks/autotiles/metal-tiles-13-44.png
deleted file mode 100644
index 871051a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-45.png b/mindus/assets/blocks/autotiles/metal-tiles-13-45.png
deleted file mode 100644
index b3af2f7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-46.png b/mindus/assets/blocks/autotiles/metal-tiles-13-46.png
deleted file mode 100644
index f5286b9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-5.png b/mindus/assets/blocks/autotiles/metal-tiles-13-5.png
deleted file mode 100644
index 237b627..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-6.png b/mindus/assets/blocks/autotiles/metal-tiles-13-6.png
deleted file mode 100644
index 49f5386..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-7.png b/mindus/assets/blocks/autotiles/metal-tiles-13-7.png
deleted file mode 100644
index 8ef2e71..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-8.png b/mindus/assets/blocks/autotiles/metal-tiles-13-8.png
deleted file mode 100644
index 47433e2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-9.png b/mindus/assets/blocks/autotiles/metal-tiles-13-9.png
deleted file mode 100644
index 6c47f48..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-13-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-0.png b/mindus/assets/blocks/autotiles/metal-tiles-2-0.png
deleted file mode 100644
index caeab95..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-1.png b/mindus/assets/blocks/autotiles/metal-tiles-2-1.png
deleted file mode 100644
index c4698a0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-10.png b/mindus/assets/blocks/autotiles/metal-tiles-2-10.png
deleted file mode 100644
index 1ba4986..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-11.png b/mindus/assets/blocks/autotiles/metal-tiles-2-11.png
deleted file mode 100644
index 097785d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-12.png b/mindus/assets/blocks/autotiles/metal-tiles-2-12.png
deleted file mode 100644
index f35577d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-13.png b/mindus/assets/blocks/autotiles/metal-tiles-2-13.png
deleted file mode 100644
index 9b51823..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-14.png b/mindus/assets/blocks/autotiles/metal-tiles-2-14.png
deleted file mode 100644
index e779740..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-15.png b/mindus/assets/blocks/autotiles/metal-tiles-2-15.png
deleted file mode 100644
index ba79b92..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-16.png b/mindus/assets/blocks/autotiles/metal-tiles-2-16.png
deleted file mode 100644
index 3c18fd3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-17.png b/mindus/assets/blocks/autotiles/metal-tiles-2-17.png
deleted file mode 100644
index 173cf84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-18.png b/mindus/assets/blocks/autotiles/metal-tiles-2-18.png
deleted file mode 100644
index d340820..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-19.png b/mindus/assets/blocks/autotiles/metal-tiles-2-19.png
deleted file mode 100644
index 32bd595..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-2.png b/mindus/assets/blocks/autotiles/metal-tiles-2-2.png
deleted file mode 100644
index d955dff..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-20.png b/mindus/assets/blocks/autotiles/metal-tiles-2-20.png
deleted file mode 100644
index 8e1d65d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-21.png b/mindus/assets/blocks/autotiles/metal-tiles-2-21.png
deleted file mode 100644
index 7dac136..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-22.png b/mindus/assets/blocks/autotiles/metal-tiles-2-22.png
deleted file mode 100644
index 029dc90..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-23.png b/mindus/assets/blocks/autotiles/metal-tiles-2-23.png
deleted file mode 100644
index 6263765..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-24.png b/mindus/assets/blocks/autotiles/metal-tiles-2-24.png
deleted file mode 100644
index b5ae8d3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-25.png b/mindus/assets/blocks/autotiles/metal-tiles-2-25.png
deleted file mode 100644
index 50e8f3d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-26.png b/mindus/assets/blocks/autotiles/metal-tiles-2-26.png
deleted file mode 100644
index f797daf..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-27.png b/mindus/assets/blocks/autotiles/metal-tiles-2-27.png
deleted file mode 100644
index 5ee3c8b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-28.png b/mindus/assets/blocks/autotiles/metal-tiles-2-28.png
deleted file mode 100644
index dc096ad..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-29.png b/mindus/assets/blocks/autotiles/metal-tiles-2-29.png
deleted file mode 100644
index 785e827..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-3.png b/mindus/assets/blocks/autotiles/metal-tiles-2-3.png
deleted file mode 100644
index 30131f2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-30.png b/mindus/assets/blocks/autotiles/metal-tiles-2-30.png
deleted file mode 100644
index eca0259..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-31.png b/mindus/assets/blocks/autotiles/metal-tiles-2-31.png
deleted file mode 100644
index 32cd971..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-32.png b/mindus/assets/blocks/autotiles/metal-tiles-2-32.png
deleted file mode 100644
index 1bc9a79..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-33.png b/mindus/assets/blocks/autotiles/metal-tiles-2-33.png
deleted file mode 100644
index 7669099..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-34.png b/mindus/assets/blocks/autotiles/metal-tiles-2-34.png
deleted file mode 100644
index f9811fc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-35.png b/mindus/assets/blocks/autotiles/metal-tiles-2-35.png
deleted file mode 100644
index 1e76135..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-36.png b/mindus/assets/blocks/autotiles/metal-tiles-2-36.png
deleted file mode 100644
index 779b2e6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-37.png b/mindus/assets/blocks/autotiles/metal-tiles-2-37.png
deleted file mode 100644
index bb687e2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-38.png b/mindus/assets/blocks/autotiles/metal-tiles-2-38.png
deleted file mode 100644
index 4cbc0a7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-39.png b/mindus/assets/blocks/autotiles/metal-tiles-2-39.png
deleted file mode 100644
index b52513d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-4.png b/mindus/assets/blocks/autotiles/metal-tiles-2-4.png
deleted file mode 100644
index 713c38d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-40.png b/mindus/assets/blocks/autotiles/metal-tiles-2-40.png
deleted file mode 100644
index b0eb224..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-41.png b/mindus/assets/blocks/autotiles/metal-tiles-2-41.png
deleted file mode 100644
index f96f95c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-42.png b/mindus/assets/blocks/autotiles/metal-tiles-2-42.png
deleted file mode 100644
index 76c52b9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-43.png b/mindus/assets/blocks/autotiles/metal-tiles-2-43.png
deleted file mode 100644
index ad5cdcf..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-44.png b/mindus/assets/blocks/autotiles/metal-tiles-2-44.png
deleted file mode 100644
index d06d356..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-45.png b/mindus/assets/blocks/autotiles/metal-tiles-2-45.png
deleted file mode 100644
index 52ef069..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-46.png b/mindus/assets/blocks/autotiles/metal-tiles-2-46.png
deleted file mode 100644
index 7330cc5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-5.png b/mindus/assets/blocks/autotiles/metal-tiles-2-5.png
deleted file mode 100644
index 4679da5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-6.png b/mindus/assets/blocks/autotiles/metal-tiles-2-6.png
deleted file mode 100644
index f63a416..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-7.png b/mindus/assets/blocks/autotiles/metal-tiles-2-7.png
deleted file mode 100644
index 0be8c91..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-8.png b/mindus/assets/blocks/autotiles/metal-tiles-2-8.png
deleted file mode 100644
index 311edc2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-9.png b/mindus/assets/blocks/autotiles/metal-tiles-2-9.png
deleted file mode 100644
index e2a0e42..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-2-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-0.png b/mindus/assets/blocks/autotiles/metal-tiles-3-0.png
deleted file mode 100644
index bdae22e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-1.png b/mindus/assets/blocks/autotiles/metal-tiles-3-1.png
deleted file mode 100644
index 7520c5a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-10.png b/mindus/assets/blocks/autotiles/metal-tiles-3-10.png
deleted file mode 100644
index c925ff0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-11.png b/mindus/assets/blocks/autotiles/metal-tiles-3-11.png
deleted file mode 100644
index 9a1a7c5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-12.png b/mindus/assets/blocks/autotiles/metal-tiles-3-12.png
deleted file mode 100644
index 15e6f17..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-13.png b/mindus/assets/blocks/autotiles/metal-tiles-3-13.png
deleted file mode 100644
index 85fd4fc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-14.png b/mindus/assets/blocks/autotiles/metal-tiles-3-14.png
deleted file mode 100644
index a322a5d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-15.png b/mindus/assets/blocks/autotiles/metal-tiles-3-15.png
deleted file mode 100644
index da52500..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-16.png b/mindus/assets/blocks/autotiles/metal-tiles-3-16.png
deleted file mode 100644
index d72d97b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-17.png b/mindus/assets/blocks/autotiles/metal-tiles-3-17.png
deleted file mode 100644
index 832b149..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-18.png b/mindus/assets/blocks/autotiles/metal-tiles-3-18.png
deleted file mode 100644
index 4379723..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-19.png b/mindus/assets/blocks/autotiles/metal-tiles-3-19.png
deleted file mode 100644
index 93b266a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-2.png b/mindus/assets/blocks/autotiles/metal-tiles-3-2.png
deleted file mode 100644
index 50cd686..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-20.png b/mindus/assets/blocks/autotiles/metal-tiles-3-20.png
deleted file mode 100644
index 0a72dad..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-21.png b/mindus/assets/blocks/autotiles/metal-tiles-3-21.png
deleted file mode 100644
index ce12293..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-22.png b/mindus/assets/blocks/autotiles/metal-tiles-3-22.png
deleted file mode 100644
index 902e067..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-23.png b/mindus/assets/blocks/autotiles/metal-tiles-3-23.png
deleted file mode 100644
index a4007b5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-24.png b/mindus/assets/blocks/autotiles/metal-tiles-3-24.png
deleted file mode 100644
index 755a3b6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-25.png b/mindus/assets/blocks/autotiles/metal-tiles-3-25.png
deleted file mode 100644
index a4445fb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-26.png b/mindus/assets/blocks/autotiles/metal-tiles-3-26.png
deleted file mode 100644
index 3f875f6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-27.png b/mindus/assets/blocks/autotiles/metal-tiles-3-27.png
deleted file mode 100644
index 4dac529..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-28.png b/mindus/assets/blocks/autotiles/metal-tiles-3-28.png
deleted file mode 100644
index 7321f5f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-29.png b/mindus/assets/blocks/autotiles/metal-tiles-3-29.png
deleted file mode 100644
index 2af14c9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-3.png b/mindus/assets/blocks/autotiles/metal-tiles-3-3.png
deleted file mode 100644
index 88d3a5c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-30.png b/mindus/assets/blocks/autotiles/metal-tiles-3-30.png
deleted file mode 100644
index bd38ece..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-31.png b/mindus/assets/blocks/autotiles/metal-tiles-3-31.png
deleted file mode 100644
index f4abdc5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-32.png b/mindus/assets/blocks/autotiles/metal-tiles-3-32.png
deleted file mode 100644
index b9cb1b4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-33.png b/mindus/assets/blocks/autotiles/metal-tiles-3-33.png
deleted file mode 100644
index fc69dba..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-34.png b/mindus/assets/blocks/autotiles/metal-tiles-3-34.png
deleted file mode 100644
index 711447f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-35.png b/mindus/assets/blocks/autotiles/metal-tiles-3-35.png
deleted file mode 100644
index 4655808..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-36.png b/mindus/assets/blocks/autotiles/metal-tiles-3-36.png
deleted file mode 100644
index 74c02f8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-37.png b/mindus/assets/blocks/autotiles/metal-tiles-3-37.png
deleted file mode 100644
index 1184018..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-38.png b/mindus/assets/blocks/autotiles/metal-tiles-3-38.png
deleted file mode 100644
index d551d84..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-39.png b/mindus/assets/blocks/autotiles/metal-tiles-3-39.png
deleted file mode 100644
index 87e8748..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-4.png b/mindus/assets/blocks/autotiles/metal-tiles-3-4.png
deleted file mode 100644
index 76e25a5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-40.png b/mindus/assets/blocks/autotiles/metal-tiles-3-40.png
deleted file mode 100644
index ff585e0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-41.png b/mindus/assets/blocks/autotiles/metal-tiles-3-41.png
deleted file mode 100644
index 44b13f1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-42.png b/mindus/assets/blocks/autotiles/metal-tiles-3-42.png
deleted file mode 100644
index 89b5b22..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-43.png b/mindus/assets/blocks/autotiles/metal-tiles-3-43.png
deleted file mode 100644
index 7dfc972..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-44.png b/mindus/assets/blocks/autotiles/metal-tiles-3-44.png
deleted file mode 100644
index bdca804..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-45.png b/mindus/assets/blocks/autotiles/metal-tiles-3-45.png
deleted file mode 100644
index eb5007e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-46.png b/mindus/assets/blocks/autotiles/metal-tiles-3-46.png
deleted file mode 100644
index 548e6f6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-5.png b/mindus/assets/blocks/autotiles/metal-tiles-3-5.png
deleted file mode 100644
index 72c9e0d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-6.png b/mindus/assets/blocks/autotiles/metal-tiles-3-6.png
deleted file mode 100644
index 11ee010..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-7.png b/mindus/assets/blocks/autotiles/metal-tiles-3-7.png
deleted file mode 100644
index 4170a58..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-8.png b/mindus/assets/blocks/autotiles/metal-tiles-3-8.png
deleted file mode 100644
index a9eefdc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-9.png b/mindus/assets/blocks/autotiles/metal-tiles-3-9.png
deleted file mode 100644
index 3a35a5d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-3-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-0.png b/mindus/assets/blocks/autotiles/metal-tiles-4-0.png
deleted file mode 100644
index 00b4ad8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-1.png b/mindus/assets/blocks/autotiles/metal-tiles-4-1.png
deleted file mode 100644
index 82275e2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-10.png b/mindus/assets/blocks/autotiles/metal-tiles-4-10.png
deleted file mode 100644
index 10c768e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-11.png b/mindus/assets/blocks/autotiles/metal-tiles-4-11.png
deleted file mode 100644
index b95958a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-12.png b/mindus/assets/blocks/autotiles/metal-tiles-4-12.png
deleted file mode 100644
index 35a4e45..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-13.png b/mindus/assets/blocks/autotiles/metal-tiles-4-13.png
deleted file mode 100644
index 6ae9f4a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-14.png b/mindus/assets/blocks/autotiles/metal-tiles-4-14.png
deleted file mode 100644
index 83747f9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-15.png b/mindus/assets/blocks/autotiles/metal-tiles-4-15.png
deleted file mode 100644
index c821401..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-16.png b/mindus/assets/blocks/autotiles/metal-tiles-4-16.png
deleted file mode 100644
index d529f3c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-17.png b/mindus/assets/blocks/autotiles/metal-tiles-4-17.png
deleted file mode 100644
index b6f09b7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-18.png b/mindus/assets/blocks/autotiles/metal-tiles-4-18.png
deleted file mode 100644
index d4a6738..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-19.png b/mindus/assets/blocks/autotiles/metal-tiles-4-19.png
deleted file mode 100644
index fa0d55b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-2.png b/mindus/assets/blocks/autotiles/metal-tiles-4-2.png
deleted file mode 100644
index 7449f92..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-20.png b/mindus/assets/blocks/autotiles/metal-tiles-4-20.png
deleted file mode 100644
index 2346538..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-21.png b/mindus/assets/blocks/autotiles/metal-tiles-4-21.png
deleted file mode 100644
index e232b9d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-22.png b/mindus/assets/blocks/autotiles/metal-tiles-4-22.png
deleted file mode 100644
index 4a0e524..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-23.png b/mindus/assets/blocks/autotiles/metal-tiles-4-23.png
deleted file mode 100644
index 74597c6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-24.png b/mindus/assets/blocks/autotiles/metal-tiles-4-24.png
deleted file mode 100644
index 60f97bd..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-25.png b/mindus/assets/blocks/autotiles/metal-tiles-4-25.png
deleted file mode 100644
index 6acc66c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-26.png b/mindus/assets/blocks/autotiles/metal-tiles-4-26.png
deleted file mode 100644
index e830d09..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-27.png b/mindus/assets/blocks/autotiles/metal-tiles-4-27.png
deleted file mode 100644
index 078e3de..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-28.png b/mindus/assets/blocks/autotiles/metal-tiles-4-28.png
deleted file mode 100644
index 9de1388..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-29.png b/mindus/assets/blocks/autotiles/metal-tiles-4-29.png
deleted file mode 100644
index 1810900..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-3.png b/mindus/assets/blocks/autotiles/metal-tiles-4-3.png
deleted file mode 100644
index 287abbf..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-30.png b/mindus/assets/blocks/autotiles/metal-tiles-4-30.png
deleted file mode 100644
index 7531ec6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-31.png b/mindus/assets/blocks/autotiles/metal-tiles-4-31.png
deleted file mode 100644
index e64da1a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-32.png b/mindus/assets/blocks/autotiles/metal-tiles-4-32.png
deleted file mode 100644
index c6264f0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-33.png b/mindus/assets/blocks/autotiles/metal-tiles-4-33.png
deleted file mode 100644
index 895288c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-34.png b/mindus/assets/blocks/autotiles/metal-tiles-4-34.png
deleted file mode 100644
index ff0557e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-35.png b/mindus/assets/blocks/autotiles/metal-tiles-4-35.png
deleted file mode 100644
index 9b2bceb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-36.png b/mindus/assets/blocks/autotiles/metal-tiles-4-36.png
deleted file mode 100644
index 8db4055..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-37.png b/mindus/assets/blocks/autotiles/metal-tiles-4-37.png
deleted file mode 100644
index 0182b7a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-38.png b/mindus/assets/blocks/autotiles/metal-tiles-4-38.png
deleted file mode 100644
index f7820a3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-39.png b/mindus/assets/blocks/autotiles/metal-tiles-4-39.png
deleted file mode 100644
index 3537e61..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-4.png b/mindus/assets/blocks/autotiles/metal-tiles-4-4.png
deleted file mode 100644
index cbaa305..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-40.png b/mindus/assets/blocks/autotiles/metal-tiles-4-40.png
deleted file mode 100644
index b21107f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-41.png b/mindus/assets/blocks/autotiles/metal-tiles-4-41.png
deleted file mode 100644
index 9c40fa8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-42.png b/mindus/assets/blocks/autotiles/metal-tiles-4-42.png
deleted file mode 100644
index cb814d3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-43.png b/mindus/assets/blocks/autotiles/metal-tiles-4-43.png
deleted file mode 100644
index bc1dbd5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-44.png b/mindus/assets/blocks/autotiles/metal-tiles-4-44.png
deleted file mode 100644
index 563fb3c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-45.png b/mindus/assets/blocks/autotiles/metal-tiles-4-45.png
deleted file mode 100644
index b4a3b75..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-46.png b/mindus/assets/blocks/autotiles/metal-tiles-4-46.png
deleted file mode 100644
index 4691589..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-5.png b/mindus/assets/blocks/autotiles/metal-tiles-4-5.png
deleted file mode 100644
index 9a9ff32..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-6.png b/mindus/assets/blocks/autotiles/metal-tiles-4-6.png
deleted file mode 100644
index 457ffa6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-7.png b/mindus/assets/blocks/autotiles/metal-tiles-4-7.png
deleted file mode 100644
index 49c18a5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-8.png b/mindus/assets/blocks/autotiles/metal-tiles-4-8.png
deleted file mode 100644
index 2ed38c4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-9.png b/mindus/assets/blocks/autotiles/metal-tiles-4-9.png
deleted file mode 100644
index a353fc2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-4-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-0.png b/mindus/assets/blocks/autotiles/metal-tiles-5-0.png
deleted file mode 100644
index 69467f2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-1.png b/mindus/assets/blocks/autotiles/metal-tiles-5-1.png
deleted file mode 100644
index 22ead22..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-10.png b/mindus/assets/blocks/autotiles/metal-tiles-5-10.png
deleted file mode 100644
index cf16663..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-11.png b/mindus/assets/blocks/autotiles/metal-tiles-5-11.png
deleted file mode 100644
index 95e9503..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-12.png b/mindus/assets/blocks/autotiles/metal-tiles-5-12.png
deleted file mode 100644
index f439d21..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-13.png b/mindus/assets/blocks/autotiles/metal-tiles-5-13.png
deleted file mode 100644
index 5798fae..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-14.png b/mindus/assets/blocks/autotiles/metal-tiles-5-14.png
deleted file mode 100644
index 0569883..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-15.png b/mindus/assets/blocks/autotiles/metal-tiles-5-15.png
deleted file mode 100644
index 62a79ae..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-16.png b/mindus/assets/blocks/autotiles/metal-tiles-5-16.png
deleted file mode 100644
index ee0235a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-17.png b/mindus/assets/blocks/autotiles/metal-tiles-5-17.png
deleted file mode 100644
index a15bbc9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-18.png b/mindus/assets/blocks/autotiles/metal-tiles-5-18.png
deleted file mode 100644
index c76569b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-19.png b/mindus/assets/blocks/autotiles/metal-tiles-5-19.png
deleted file mode 100644
index d54b262..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-2.png b/mindus/assets/blocks/autotiles/metal-tiles-5-2.png
deleted file mode 100644
index cd1f86a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-20.png b/mindus/assets/blocks/autotiles/metal-tiles-5-20.png
deleted file mode 100644
index a593240..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-21.png b/mindus/assets/blocks/autotiles/metal-tiles-5-21.png
deleted file mode 100644
index 13e19ce..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-22.png b/mindus/assets/blocks/autotiles/metal-tiles-5-22.png
deleted file mode 100644
index 5623e69..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-23.png b/mindus/assets/blocks/autotiles/metal-tiles-5-23.png
deleted file mode 100644
index 53c0630..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-24.png b/mindus/assets/blocks/autotiles/metal-tiles-5-24.png
deleted file mode 100644
index 7dbc8ae..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-25.png b/mindus/assets/blocks/autotiles/metal-tiles-5-25.png
deleted file mode 100644
index 79e5db2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-26.png b/mindus/assets/blocks/autotiles/metal-tiles-5-26.png
deleted file mode 100644
index d6bad14..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-27.png b/mindus/assets/blocks/autotiles/metal-tiles-5-27.png
deleted file mode 100644
index 70cbdee..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-28.png b/mindus/assets/blocks/autotiles/metal-tiles-5-28.png
deleted file mode 100644
index 2225801..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-29.png b/mindus/assets/blocks/autotiles/metal-tiles-5-29.png
deleted file mode 100644
index 4abb670..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-3.png b/mindus/assets/blocks/autotiles/metal-tiles-5-3.png
deleted file mode 100644
index ba62f58..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-30.png b/mindus/assets/blocks/autotiles/metal-tiles-5-30.png
deleted file mode 100644
index 53b87ce..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-31.png b/mindus/assets/blocks/autotiles/metal-tiles-5-31.png
deleted file mode 100644
index 06a4bf4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-32.png b/mindus/assets/blocks/autotiles/metal-tiles-5-32.png
deleted file mode 100644
index d79b4ef..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-33.png b/mindus/assets/blocks/autotiles/metal-tiles-5-33.png
deleted file mode 100644
index fcdc443..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-34.png b/mindus/assets/blocks/autotiles/metal-tiles-5-34.png
deleted file mode 100644
index 9a1e3e5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-35.png b/mindus/assets/blocks/autotiles/metal-tiles-5-35.png
deleted file mode 100644
index 59a4ec5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-36.png b/mindus/assets/blocks/autotiles/metal-tiles-5-36.png
deleted file mode 100644
index c1b25ae..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-37.png b/mindus/assets/blocks/autotiles/metal-tiles-5-37.png
deleted file mode 100644
index 4c6905d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-38.png b/mindus/assets/blocks/autotiles/metal-tiles-5-38.png
deleted file mode 100644
index 9888aec..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-39.png b/mindus/assets/blocks/autotiles/metal-tiles-5-39.png
deleted file mode 100644
index 95185ac..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-4.png b/mindus/assets/blocks/autotiles/metal-tiles-5-4.png
deleted file mode 100644
index e59e637..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-40.png b/mindus/assets/blocks/autotiles/metal-tiles-5-40.png
deleted file mode 100644
index c50d43e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-41.png b/mindus/assets/blocks/autotiles/metal-tiles-5-41.png
deleted file mode 100644
index 3298734..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-42.png b/mindus/assets/blocks/autotiles/metal-tiles-5-42.png
deleted file mode 100644
index c50d43e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-43.png b/mindus/assets/blocks/autotiles/metal-tiles-5-43.png
deleted file mode 100644
index a477f91..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-44.png b/mindus/assets/blocks/autotiles/metal-tiles-5-44.png
deleted file mode 100644
index d35790a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-45.png b/mindus/assets/blocks/autotiles/metal-tiles-5-45.png
deleted file mode 100644
index af47e8f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-46.png b/mindus/assets/blocks/autotiles/metal-tiles-5-46.png
deleted file mode 100644
index 3026e07..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-5.png b/mindus/assets/blocks/autotiles/metal-tiles-5-5.png
deleted file mode 100644
index 92aedb7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-6.png b/mindus/assets/blocks/autotiles/metal-tiles-5-6.png
deleted file mode 100644
index 64ed301..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-7.png b/mindus/assets/blocks/autotiles/metal-tiles-5-7.png
deleted file mode 100644
index 07fd707..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-8.png b/mindus/assets/blocks/autotiles/metal-tiles-5-8.png
deleted file mode 100644
index 339280d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-9.png b/mindus/assets/blocks/autotiles/metal-tiles-5-9.png
deleted file mode 100644
index 4fdbfde..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-5-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-0.png b/mindus/assets/blocks/autotiles/metal-tiles-6-0.png
deleted file mode 100644
index ad7d00d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-1.png b/mindus/assets/blocks/autotiles/metal-tiles-6-1.png
deleted file mode 100644
index 1f48765..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-10.png b/mindus/assets/blocks/autotiles/metal-tiles-6-10.png
deleted file mode 100644
index bb073b3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-11.png b/mindus/assets/blocks/autotiles/metal-tiles-6-11.png
deleted file mode 100644
index 42b80ef..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-12.png b/mindus/assets/blocks/autotiles/metal-tiles-6-12.png
deleted file mode 100644
index 8b7be57..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-13.png b/mindus/assets/blocks/autotiles/metal-tiles-6-13.png
deleted file mode 100644
index 6ef9434..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-14.png b/mindus/assets/blocks/autotiles/metal-tiles-6-14.png
deleted file mode 100644
index 61f2d64..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-15.png b/mindus/assets/blocks/autotiles/metal-tiles-6-15.png
deleted file mode 100644
index 26aae39..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-16.png b/mindus/assets/blocks/autotiles/metal-tiles-6-16.png
deleted file mode 100644
index b9030ed..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-17.png b/mindus/assets/blocks/autotiles/metal-tiles-6-17.png
deleted file mode 100644
index be1ef5c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-18.png b/mindus/assets/blocks/autotiles/metal-tiles-6-18.png
deleted file mode 100644
index 6af4202..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-19.png b/mindus/assets/blocks/autotiles/metal-tiles-6-19.png
deleted file mode 100644
index 2788249..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-2.png b/mindus/assets/blocks/autotiles/metal-tiles-6-2.png
deleted file mode 100644
index 8b88cf9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-20.png b/mindus/assets/blocks/autotiles/metal-tiles-6-20.png
deleted file mode 100644
index 5ac2000..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-21.png b/mindus/assets/blocks/autotiles/metal-tiles-6-21.png
deleted file mode 100644
index 6610907..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-22.png b/mindus/assets/blocks/autotiles/metal-tiles-6-22.png
deleted file mode 100644
index ef14ca5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-23.png b/mindus/assets/blocks/autotiles/metal-tiles-6-23.png
deleted file mode 100644
index 9f57666..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-24.png b/mindus/assets/blocks/autotiles/metal-tiles-6-24.png
deleted file mode 100644
index 5f8db4c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-25.png b/mindus/assets/blocks/autotiles/metal-tiles-6-25.png
deleted file mode 100644
index 696885b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-26.png b/mindus/assets/blocks/autotiles/metal-tiles-6-26.png
deleted file mode 100644
index b353e68..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-27.png b/mindus/assets/blocks/autotiles/metal-tiles-6-27.png
deleted file mode 100644
index c7c051e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-28.png b/mindus/assets/blocks/autotiles/metal-tiles-6-28.png
deleted file mode 100644
index d39925e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-29.png b/mindus/assets/blocks/autotiles/metal-tiles-6-29.png
deleted file mode 100644
index 6c8ce52..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-3.png b/mindus/assets/blocks/autotiles/metal-tiles-6-3.png
deleted file mode 100644
index 3a9e4c4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-30.png b/mindus/assets/blocks/autotiles/metal-tiles-6-30.png
deleted file mode 100644
index a6cb0e6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-31.png b/mindus/assets/blocks/autotiles/metal-tiles-6-31.png
deleted file mode 100644
index 92416de..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-32.png b/mindus/assets/blocks/autotiles/metal-tiles-6-32.png
deleted file mode 100644
index 194d2fa..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-33.png b/mindus/assets/blocks/autotiles/metal-tiles-6-33.png
deleted file mode 100644
index 65ac22d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-34.png b/mindus/assets/blocks/autotiles/metal-tiles-6-34.png
deleted file mode 100644
index 554f821..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-35.png b/mindus/assets/blocks/autotiles/metal-tiles-6-35.png
deleted file mode 100644
index eaafb33..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-36.png b/mindus/assets/blocks/autotiles/metal-tiles-6-36.png
deleted file mode 100644
index 4cfa1fb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-37.png b/mindus/assets/blocks/autotiles/metal-tiles-6-37.png
deleted file mode 100644
index 902f4f0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-38.png b/mindus/assets/blocks/autotiles/metal-tiles-6-38.png
deleted file mode 100644
index d6bd022..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-39.png b/mindus/assets/blocks/autotiles/metal-tiles-6-39.png
deleted file mode 100644
index 9d2985d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-4.png b/mindus/assets/blocks/autotiles/metal-tiles-6-4.png
deleted file mode 100644
index a88d5dd..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-40.png b/mindus/assets/blocks/autotiles/metal-tiles-6-40.png
deleted file mode 100644
index 9f48b4c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-41.png b/mindus/assets/blocks/autotiles/metal-tiles-6-41.png
deleted file mode 100644
index b0dac68..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-42.png b/mindus/assets/blocks/autotiles/metal-tiles-6-42.png
deleted file mode 100644
index 85efe7c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-43.png b/mindus/assets/blocks/autotiles/metal-tiles-6-43.png
deleted file mode 100644
index 5bc8a6d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-44.png b/mindus/assets/blocks/autotiles/metal-tiles-6-44.png
deleted file mode 100644
index b405c26..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-45.png b/mindus/assets/blocks/autotiles/metal-tiles-6-45.png
deleted file mode 100644
index 75c89f9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-46.png b/mindus/assets/blocks/autotiles/metal-tiles-6-46.png
deleted file mode 100644
index 76b180f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-5.png b/mindus/assets/blocks/autotiles/metal-tiles-6-5.png
deleted file mode 100644
index 3b271b8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-6.png b/mindus/assets/blocks/autotiles/metal-tiles-6-6.png
deleted file mode 100644
index 995d78d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-7.png b/mindus/assets/blocks/autotiles/metal-tiles-6-7.png
deleted file mode 100644
index bb96155..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-8.png b/mindus/assets/blocks/autotiles/metal-tiles-6-8.png
deleted file mode 100644
index 8880f0d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-9.png b/mindus/assets/blocks/autotiles/metal-tiles-6-9.png
deleted file mode 100644
index d76bf54..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-6-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-0.png b/mindus/assets/blocks/autotiles/metal-tiles-7-0.png
deleted file mode 100644
index 7ba2ee7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-1.png b/mindus/assets/blocks/autotiles/metal-tiles-7-1.png
deleted file mode 100644
index 7630513..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-10.png b/mindus/assets/blocks/autotiles/metal-tiles-7-10.png
deleted file mode 100644
index d83daa7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-11.png b/mindus/assets/blocks/autotiles/metal-tiles-7-11.png
deleted file mode 100644
index e008042..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-12.png b/mindus/assets/blocks/autotiles/metal-tiles-7-12.png
deleted file mode 100644
index 1db011b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-13.png b/mindus/assets/blocks/autotiles/metal-tiles-7-13.png
deleted file mode 100644
index a62e783..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-14.png b/mindus/assets/blocks/autotiles/metal-tiles-7-14.png
deleted file mode 100644
index 9006361..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-15.png b/mindus/assets/blocks/autotiles/metal-tiles-7-15.png
deleted file mode 100644
index 74e7dc8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-16.png b/mindus/assets/blocks/autotiles/metal-tiles-7-16.png
deleted file mode 100644
index b1e540d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-17.png b/mindus/assets/blocks/autotiles/metal-tiles-7-17.png
deleted file mode 100644
index 26292ea..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-18.png b/mindus/assets/blocks/autotiles/metal-tiles-7-18.png
deleted file mode 100644
index 79e5eba..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-19.png b/mindus/assets/blocks/autotiles/metal-tiles-7-19.png
deleted file mode 100644
index 0e066e6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-2.png b/mindus/assets/blocks/autotiles/metal-tiles-7-2.png
deleted file mode 100644
index e7fa6c3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-20.png b/mindus/assets/blocks/autotiles/metal-tiles-7-20.png
deleted file mode 100644
index 1f1755c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-21.png b/mindus/assets/blocks/autotiles/metal-tiles-7-21.png
deleted file mode 100644
index c6115d2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-22.png b/mindus/assets/blocks/autotiles/metal-tiles-7-22.png
deleted file mode 100644
index bc8db04..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-23.png b/mindus/assets/blocks/autotiles/metal-tiles-7-23.png
deleted file mode 100644
index 6b4e32b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-24.png b/mindus/assets/blocks/autotiles/metal-tiles-7-24.png
deleted file mode 100644
index 0352e7a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-25.png b/mindus/assets/blocks/autotiles/metal-tiles-7-25.png
deleted file mode 100644
index 8368129..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-26.png b/mindus/assets/blocks/autotiles/metal-tiles-7-26.png
deleted file mode 100644
index a8e5f4b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-27.png b/mindus/assets/blocks/autotiles/metal-tiles-7-27.png
deleted file mode 100644
index 7559e43..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-28.png b/mindus/assets/blocks/autotiles/metal-tiles-7-28.png
deleted file mode 100644
index 96acd2d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-29.png b/mindus/assets/blocks/autotiles/metal-tiles-7-29.png
deleted file mode 100644
index 36f0e81..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-3.png b/mindus/assets/blocks/autotiles/metal-tiles-7-3.png
deleted file mode 100644
index 388fd85..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-30.png b/mindus/assets/blocks/autotiles/metal-tiles-7-30.png
deleted file mode 100644
index 581bb1e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-31.png b/mindus/assets/blocks/autotiles/metal-tiles-7-31.png
deleted file mode 100644
index e92efb0..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-32.png b/mindus/assets/blocks/autotiles/metal-tiles-7-32.png
deleted file mode 100644
index 36f3ff9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-33.png b/mindus/assets/blocks/autotiles/metal-tiles-7-33.png
deleted file mode 100644
index b66baf7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-34.png b/mindus/assets/blocks/autotiles/metal-tiles-7-34.png
deleted file mode 100644
index 3c5c929..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-35.png b/mindus/assets/blocks/autotiles/metal-tiles-7-35.png
deleted file mode 100644
index 4e06511..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-36.png b/mindus/assets/blocks/autotiles/metal-tiles-7-36.png
deleted file mode 100644
index 1e7b97d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-37.png b/mindus/assets/blocks/autotiles/metal-tiles-7-37.png
deleted file mode 100644
index 54cd643..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-38.png b/mindus/assets/blocks/autotiles/metal-tiles-7-38.png
deleted file mode 100644
index 04940da..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-39.png b/mindus/assets/blocks/autotiles/metal-tiles-7-39.png
deleted file mode 100644
index c5398c2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-4.png b/mindus/assets/blocks/autotiles/metal-tiles-7-4.png
deleted file mode 100644
index 25211e9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-40.png b/mindus/assets/blocks/autotiles/metal-tiles-7-40.png
deleted file mode 100644
index 63407a9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-41.png b/mindus/assets/blocks/autotiles/metal-tiles-7-41.png
deleted file mode 100644
index 9d44b4b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-42.png b/mindus/assets/blocks/autotiles/metal-tiles-7-42.png
deleted file mode 100644
index 8bf50db..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-43.png b/mindus/assets/blocks/autotiles/metal-tiles-7-43.png
deleted file mode 100644
index ab97444..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-44.png b/mindus/assets/blocks/autotiles/metal-tiles-7-44.png
deleted file mode 100644
index 33f4f60..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-45.png b/mindus/assets/blocks/autotiles/metal-tiles-7-45.png
deleted file mode 100644
index 4b115a6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-46.png b/mindus/assets/blocks/autotiles/metal-tiles-7-46.png
deleted file mode 100644
index 9a3a890..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-5.png b/mindus/assets/blocks/autotiles/metal-tiles-7-5.png
deleted file mode 100644
index 51bf85b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-6.png b/mindus/assets/blocks/autotiles/metal-tiles-7-6.png
deleted file mode 100644
index bfeb5cc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-7.png b/mindus/assets/blocks/autotiles/metal-tiles-7-7.png
deleted file mode 100644
index ee557d8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-8.png b/mindus/assets/blocks/autotiles/metal-tiles-7-8.png
deleted file mode 100644
index 18aed09..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-9.png b/mindus/assets/blocks/autotiles/metal-tiles-7-9.png
deleted file mode 100644
index b9b2494..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-7-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-0.png b/mindus/assets/blocks/autotiles/metal-tiles-8-0.png
deleted file mode 100644
index 5daca87..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-1.png b/mindus/assets/blocks/autotiles/metal-tiles-8-1.png
deleted file mode 100644
index 3222ca6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-10.png b/mindus/assets/blocks/autotiles/metal-tiles-8-10.png
deleted file mode 100644
index 3d4f15a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-11.png b/mindus/assets/blocks/autotiles/metal-tiles-8-11.png
deleted file mode 100644
index 912ff0e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-12.png b/mindus/assets/blocks/autotiles/metal-tiles-8-12.png
deleted file mode 100644
index 72aee98..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-13.png b/mindus/assets/blocks/autotiles/metal-tiles-8-13.png
deleted file mode 100644
index 32fb643..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-14.png b/mindus/assets/blocks/autotiles/metal-tiles-8-14.png
deleted file mode 100644
index da69402..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-15.png b/mindus/assets/blocks/autotiles/metal-tiles-8-15.png
deleted file mode 100644
index 76f44f5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-16.png b/mindus/assets/blocks/autotiles/metal-tiles-8-16.png
deleted file mode 100644
index 4121ab6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-17.png b/mindus/assets/blocks/autotiles/metal-tiles-8-17.png
deleted file mode 100644
index ca7efdc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-18.png b/mindus/assets/blocks/autotiles/metal-tiles-8-18.png
deleted file mode 100644
index f2ca665..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-19.png b/mindus/assets/blocks/autotiles/metal-tiles-8-19.png
deleted file mode 100644
index eba78b2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-2.png b/mindus/assets/blocks/autotiles/metal-tiles-8-2.png
deleted file mode 100644
index 2860522..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-20.png b/mindus/assets/blocks/autotiles/metal-tiles-8-20.png
deleted file mode 100644
index 18923e5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-21.png b/mindus/assets/blocks/autotiles/metal-tiles-8-21.png
deleted file mode 100644
index e5d31bc..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-22.png b/mindus/assets/blocks/autotiles/metal-tiles-8-22.png
deleted file mode 100644
index 8ea22d4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-23.png b/mindus/assets/blocks/autotiles/metal-tiles-8-23.png
deleted file mode 100644
index f955a49..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-24.png b/mindus/assets/blocks/autotiles/metal-tiles-8-24.png
deleted file mode 100644
index e0af7c8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-25.png b/mindus/assets/blocks/autotiles/metal-tiles-8-25.png
deleted file mode 100644
index 29d1faa..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-26.png b/mindus/assets/blocks/autotiles/metal-tiles-8-26.png
deleted file mode 100644
index 466603a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-27.png b/mindus/assets/blocks/autotiles/metal-tiles-8-27.png
deleted file mode 100644
index a81a289..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-28.png b/mindus/assets/blocks/autotiles/metal-tiles-8-28.png
deleted file mode 100644
index 4a6c8ba..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-29.png b/mindus/assets/blocks/autotiles/metal-tiles-8-29.png
deleted file mode 100644
index 825cdd9..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-3.png b/mindus/assets/blocks/autotiles/metal-tiles-8-3.png
deleted file mode 100644
index 7c37a25..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-30.png b/mindus/assets/blocks/autotiles/metal-tiles-8-30.png
deleted file mode 100644
index 6c54357..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-31.png b/mindus/assets/blocks/autotiles/metal-tiles-8-31.png
deleted file mode 100644
index 3070669..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-32.png b/mindus/assets/blocks/autotiles/metal-tiles-8-32.png
deleted file mode 100644
index 5e1de66..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-33.png b/mindus/assets/blocks/autotiles/metal-tiles-8-33.png
deleted file mode 100644
index 602f00e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-34.png b/mindus/assets/blocks/autotiles/metal-tiles-8-34.png
deleted file mode 100644
index df9382a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-35.png b/mindus/assets/blocks/autotiles/metal-tiles-8-35.png
deleted file mode 100644
index e3be791..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-36.png b/mindus/assets/blocks/autotiles/metal-tiles-8-36.png
deleted file mode 100644
index e8c2913..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-37.png b/mindus/assets/blocks/autotiles/metal-tiles-8-37.png
deleted file mode 100644
index 88c2253..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-38.png b/mindus/assets/blocks/autotiles/metal-tiles-8-38.png
deleted file mode 100644
index 61eb19f..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-39.png b/mindus/assets/blocks/autotiles/metal-tiles-8-39.png
deleted file mode 100644
index ddb8223..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-4.png b/mindus/assets/blocks/autotiles/metal-tiles-8-4.png
deleted file mode 100644
index 852bfed..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-40.png b/mindus/assets/blocks/autotiles/metal-tiles-8-40.png
deleted file mode 100644
index 71b9e6d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-41.png b/mindus/assets/blocks/autotiles/metal-tiles-8-41.png
deleted file mode 100644
index a22f761..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-42.png b/mindus/assets/blocks/autotiles/metal-tiles-8-42.png
deleted file mode 100644
index cc9c418..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-43.png b/mindus/assets/blocks/autotiles/metal-tiles-8-43.png
deleted file mode 100644
index 142d834..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-44.png b/mindus/assets/blocks/autotiles/metal-tiles-8-44.png
deleted file mode 100644
index 2f263ef..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-45.png b/mindus/assets/blocks/autotiles/metal-tiles-8-45.png
deleted file mode 100644
index 203bc62..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-46.png b/mindus/assets/blocks/autotiles/metal-tiles-8-46.png
deleted file mode 100644
index d2fe08b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-5.png b/mindus/assets/blocks/autotiles/metal-tiles-8-5.png
deleted file mode 100644
index 7bdee26..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-6.png b/mindus/assets/blocks/autotiles/metal-tiles-8-6.png
deleted file mode 100644
index 1c564b6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-7.png b/mindus/assets/blocks/autotiles/metal-tiles-8-7.png
deleted file mode 100644
index 9211d7e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-8.png b/mindus/assets/blocks/autotiles/metal-tiles-8-8.png
deleted file mode 100644
index 7c76914..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-9.png b/mindus/assets/blocks/autotiles/metal-tiles-8-9.png
deleted file mode 100644
index 0c45540..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-8-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-0.png b/mindus/assets/blocks/autotiles/metal-tiles-9-0.png
deleted file mode 100644
index 24ee982..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-1.png b/mindus/assets/blocks/autotiles/metal-tiles-9-1.png
deleted file mode 100644
index 68e0d16..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-10.png b/mindus/assets/blocks/autotiles/metal-tiles-9-10.png
deleted file mode 100644
index 85c444e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-11.png b/mindus/assets/blocks/autotiles/metal-tiles-9-11.png
deleted file mode 100644
index 7187e7a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-12.png b/mindus/assets/blocks/autotiles/metal-tiles-9-12.png
deleted file mode 100644
index 26287cf..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-13.png b/mindus/assets/blocks/autotiles/metal-tiles-9-13.png
deleted file mode 100644
index 0ae157d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-14.png b/mindus/assets/blocks/autotiles/metal-tiles-9-14.png
deleted file mode 100644
index 9c0fc7c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-15.png b/mindus/assets/blocks/autotiles/metal-tiles-9-15.png
deleted file mode 100644
index e767068..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-16.png b/mindus/assets/blocks/autotiles/metal-tiles-9-16.png
deleted file mode 100644
index 90ae779..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-17.png b/mindus/assets/blocks/autotiles/metal-tiles-9-17.png
deleted file mode 100644
index f6b7c5a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-18.png b/mindus/assets/blocks/autotiles/metal-tiles-9-18.png
deleted file mode 100644
index 854d6b8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-19.png b/mindus/assets/blocks/autotiles/metal-tiles-9-19.png
deleted file mode 100644
index 89e0add..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-2.png b/mindus/assets/blocks/autotiles/metal-tiles-9-2.png
deleted file mode 100644
index 5860da6..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-20.png b/mindus/assets/blocks/autotiles/metal-tiles-9-20.png
deleted file mode 100644
index 35997e4..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-21.png b/mindus/assets/blocks/autotiles/metal-tiles-9-21.png
deleted file mode 100644
index 8de8ae8..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-22.png b/mindus/assets/blocks/autotiles/metal-tiles-9-22.png
deleted file mode 100644
index 92d6dc7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-23.png b/mindus/assets/blocks/autotiles/metal-tiles-9-23.png
deleted file mode 100644
index 5b488d7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-24.png b/mindus/assets/blocks/autotiles/metal-tiles-9-24.png
deleted file mode 100644
index 49591fb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-25.png b/mindus/assets/blocks/autotiles/metal-tiles-9-25.png
deleted file mode 100644
index 2f7299c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-26.png b/mindus/assets/blocks/autotiles/metal-tiles-9-26.png
deleted file mode 100644
index 5983f77..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-27.png b/mindus/assets/blocks/autotiles/metal-tiles-9-27.png
deleted file mode 100644
index e79bd60..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-28.png b/mindus/assets/blocks/autotiles/metal-tiles-9-28.png
deleted file mode 100644
index 99cdba3..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-29.png b/mindus/assets/blocks/autotiles/metal-tiles-9-29.png
deleted file mode 100644
index 220ea61..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-3.png b/mindus/assets/blocks/autotiles/metal-tiles-9-3.png
deleted file mode 100644
index 83235e5..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-30.png b/mindus/assets/blocks/autotiles/metal-tiles-9-30.png
deleted file mode 100644
index bd9f5ec..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-31.png b/mindus/assets/blocks/autotiles/metal-tiles-9-31.png
deleted file mode 100644
index aaffc8c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-32.png b/mindus/assets/blocks/autotiles/metal-tiles-9-32.png
deleted file mode 100644
index 021965b..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-33.png b/mindus/assets/blocks/autotiles/metal-tiles-9-33.png
deleted file mode 100644
index 334667d..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-34.png b/mindus/assets/blocks/autotiles/metal-tiles-9-34.png
deleted file mode 100644
index e4f3c9a..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-35.png b/mindus/assets/blocks/autotiles/metal-tiles-9-35.png
deleted file mode 100644
index 89ec484..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-36.png b/mindus/assets/blocks/autotiles/metal-tiles-9-36.png
deleted file mode 100644
index 14d5ada..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-37.png b/mindus/assets/blocks/autotiles/metal-tiles-9-37.png
deleted file mode 100644
index f33cf39..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-38.png b/mindus/assets/blocks/autotiles/metal-tiles-9-38.png
deleted file mode 100644
index 33f11e7..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-39.png b/mindus/assets/blocks/autotiles/metal-tiles-9-39.png
deleted file mode 100644
index aa9a2bb..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-4.png b/mindus/assets/blocks/autotiles/metal-tiles-9-4.png
deleted file mode 100644
index 13a2232..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-40.png b/mindus/assets/blocks/autotiles/metal-tiles-9-40.png
deleted file mode 100644
index 3f7d666..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-41.png b/mindus/assets/blocks/autotiles/metal-tiles-9-41.png
deleted file mode 100644
index b8b38e1..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-42.png b/mindus/assets/blocks/autotiles/metal-tiles-9-42.png
deleted file mode 100644
index 8a53630..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-43.png b/mindus/assets/blocks/autotiles/metal-tiles-9-43.png
deleted file mode 100644
index 8b06f92..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-44.png b/mindus/assets/blocks/autotiles/metal-tiles-9-44.png
deleted file mode 100644
index 5704e30..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-45.png b/mindus/assets/blocks/autotiles/metal-tiles-9-45.png
deleted file mode 100644
index bccab8c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-46.png b/mindus/assets/blocks/autotiles/metal-tiles-9-46.png
deleted file mode 100644
index 47e1dfe..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-5.png b/mindus/assets/blocks/autotiles/metal-tiles-9-5.png
deleted file mode 100644
index e3c1a9e..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-6.png b/mindus/assets/blocks/autotiles/metal-tiles-9-6.png
deleted file mode 100644
index e198733..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-7.png b/mindus/assets/blocks/autotiles/metal-tiles-9-7.png
deleted file mode 100644
index 470f4f2..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-8.png b/mindus/assets/blocks/autotiles/metal-tiles-9-8.png
deleted file mode 100644
index fb2c08c..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-9.png b/mindus/assets/blocks/autotiles/metal-tiles-9-9.png
deleted file mode 100644
index caa3924..0000000
--- a/mindus/assets/blocks/autotiles/metal-tiles-9-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-0.png b/mindus/assets/blocks/autotiles/metal-wall-1-0.png
deleted file mode 100644
index 640609b..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-1.png b/mindus/assets/blocks/autotiles/metal-wall-1-1.png
deleted file mode 100644
index a1e90f7..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-10.png b/mindus/assets/blocks/autotiles/metal-wall-1-10.png
deleted file mode 100644
index 52125b4..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-11.png b/mindus/assets/blocks/autotiles/metal-wall-1-11.png
deleted file mode 100644
index e8b1d7e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-12.png b/mindus/assets/blocks/autotiles/metal-wall-1-12.png
deleted file mode 100644
index 0073c49..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-13.png b/mindus/assets/blocks/autotiles/metal-wall-1-13.png
deleted file mode 100644
index d49c80a..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-14.png b/mindus/assets/blocks/autotiles/metal-wall-1-14.png
deleted file mode 100644
index d44aeb1..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-15.png b/mindus/assets/blocks/autotiles/metal-wall-1-15.png
deleted file mode 100644
index e631fec..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-16.png b/mindus/assets/blocks/autotiles/metal-wall-1-16.png
deleted file mode 100644
index 3676779..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-17.png b/mindus/assets/blocks/autotiles/metal-wall-1-17.png
deleted file mode 100644
index 268b491..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-18.png b/mindus/assets/blocks/autotiles/metal-wall-1-18.png
deleted file mode 100644
index 5dfa25a..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-19.png b/mindus/assets/blocks/autotiles/metal-wall-1-19.png
deleted file mode 100644
index 4b658c4..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-2.png b/mindus/assets/blocks/autotiles/metal-wall-1-2.png
deleted file mode 100644
index b9df68f..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-20.png b/mindus/assets/blocks/autotiles/metal-wall-1-20.png
deleted file mode 100644
index 4522fa3..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-21.png b/mindus/assets/blocks/autotiles/metal-wall-1-21.png
deleted file mode 100644
index d0f1a56..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-22.png b/mindus/assets/blocks/autotiles/metal-wall-1-22.png
deleted file mode 100644
index edf89f4..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-23.png b/mindus/assets/blocks/autotiles/metal-wall-1-23.png
deleted file mode 100644
index 040824c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-24.png b/mindus/assets/blocks/autotiles/metal-wall-1-24.png
deleted file mode 100644
index 6d0a49e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-25.png b/mindus/assets/blocks/autotiles/metal-wall-1-25.png
deleted file mode 100644
index 221364f..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-26.png b/mindus/assets/blocks/autotiles/metal-wall-1-26.png
deleted file mode 100644
index 4928345..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-27.png b/mindus/assets/blocks/autotiles/metal-wall-1-27.png
deleted file mode 100644
index eebb24b..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-28.png b/mindus/assets/blocks/autotiles/metal-wall-1-28.png
deleted file mode 100644
index e2fb598..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-29.png b/mindus/assets/blocks/autotiles/metal-wall-1-29.png
deleted file mode 100644
index 15a78d3..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-3.png b/mindus/assets/blocks/autotiles/metal-wall-1-3.png
deleted file mode 100644
index 41fab9c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-30.png b/mindus/assets/blocks/autotiles/metal-wall-1-30.png
deleted file mode 100644
index 0fba650..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-31.png b/mindus/assets/blocks/autotiles/metal-wall-1-31.png
deleted file mode 100644
index 98a9922..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-32.png b/mindus/assets/blocks/autotiles/metal-wall-1-32.png
deleted file mode 100644
index 5ab8034..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-33.png b/mindus/assets/blocks/autotiles/metal-wall-1-33.png
deleted file mode 100644
index 5a534cb..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-34.png b/mindus/assets/blocks/autotiles/metal-wall-1-34.png
deleted file mode 100644
index d87fe4d..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-35.png b/mindus/assets/blocks/autotiles/metal-wall-1-35.png
deleted file mode 100644
index 307ed89..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-36.png b/mindus/assets/blocks/autotiles/metal-wall-1-36.png
deleted file mode 100644
index 8c6515e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-37.png b/mindus/assets/blocks/autotiles/metal-wall-1-37.png
deleted file mode 100644
index 8a26104..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-38.png b/mindus/assets/blocks/autotiles/metal-wall-1-38.png
deleted file mode 100644
index de93d55..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-39.png b/mindus/assets/blocks/autotiles/metal-wall-1-39.png
deleted file mode 100644
index b28bd3f..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-4.png b/mindus/assets/blocks/autotiles/metal-wall-1-4.png
deleted file mode 100644
index 63d4abf..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-40.png b/mindus/assets/blocks/autotiles/metal-wall-1-40.png
deleted file mode 100644
index ba00ff4..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-41.png b/mindus/assets/blocks/autotiles/metal-wall-1-41.png
deleted file mode 100644
index eede726..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-42.png b/mindus/assets/blocks/autotiles/metal-wall-1-42.png
deleted file mode 100644
index 67ba1b8..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-43.png b/mindus/assets/blocks/autotiles/metal-wall-1-43.png
deleted file mode 100644
index 8f9ca02..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-44.png b/mindus/assets/blocks/autotiles/metal-wall-1-44.png
deleted file mode 100644
index e12b71e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-45.png b/mindus/assets/blocks/autotiles/metal-wall-1-45.png
deleted file mode 100644
index 5400826..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-46.png b/mindus/assets/blocks/autotiles/metal-wall-1-46.png
deleted file mode 100644
index ee1e6f6..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-5.png b/mindus/assets/blocks/autotiles/metal-wall-1-5.png
deleted file mode 100644
index ca1d63e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-6.png b/mindus/assets/blocks/autotiles/metal-wall-1-6.png
deleted file mode 100644
index 70c5a91..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-7.png b/mindus/assets/blocks/autotiles/metal-wall-1-7.png
deleted file mode 100644
index bab16a5..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-8.png b/mindus/assets/blocks/autotiles/metal-wall-1-8.png
deleted file mode 100644
index cf967dc..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-9.png b/mindus/assets/blocks/autotiles/metal-wall-1-9.png
deleted file mode 100644
index f84fa03..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-1-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-0.png b/mindus/assets/blocks/autotiles/metal-wall-2-0.png
deleted file mode 100644
index 04a0ae8..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-1.png b/mindus/assets/blocks/autotiles/metal-wall-2-1.png
deleted file mode 100644
index a8acbc3..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-10.png b/mindus/assets/blocks/autotiles/metal-wall-2-10.png
deleted file mode 100644
index 48e51ba..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-11.png b/mindus/assets/blocks/autotiles/metal-wall-2-11.png
deleted file mode 100644
index c15fa03..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-12.png b/mindus/assets/blocks/autotiles/metal-wall-2-12.png
deleted file mode 100644
index 33dc92e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-13.png b/mindus/assets/blocks/autotiles/metal-wall-2-13.png
deleted file mode 100644
index 4b78b5a..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-14.png b/mindus/assets/blocks/autotiles/metal-wall-2-14.png
deleted file mode 100644
index c00cc7d..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-15.png b/mindus/assets/blocks/autotiles/metal-wall-2-15.png
deleted file mode 100644
index fe7cd06..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-16.png b/mindus/assets/blocks/autotiles/metal-wall-2-16.png
deleted file mode 100644
index 3f56550..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-17.png b/mindus/assets/blocks/autotiles/metal-wall-2-17.png
deleted file mode 100644
index b80c98c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-18.png b/mindus/assets/blocks/autotiles/metal-wall-2-18.png
deleted file mode 100644
index bc0c112..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-19.png b/mindus/assets/blocks/autotiles/metal-wall-2-19.png
deleted file mode 100644
index 951f456..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-2.png b/mindus/assets/blocks/autotiles/metal-wall-2-2.png
deleted file mode 100644
index ce10177..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-20.png b/mindus/assets/blocks/autotiles/metal-wall-2-20.png
deleted file mode 100644
index a3ed77f..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-21.png b/mindus/assets/blocks/autotiles/metal-wall-2-21.png
deleted file mode 100644
index 397bd21..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-22.png b/mindus/assets/blocks/autotiles/metal-wall-2-22.png
deleted file mode 100644
index edfd93b..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-23.png b/mindus/assets/blocks/autotiles/metal-wall-2-23.png
deleted file mode 100644
index 7c2b2a2..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-24.png b/mindus/assets/blocks/autotiles/metal-wall-2-24.png
deleted file mode 100644
index 2298d69..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-25.png b/mindus/assets/blocks/autotiles/metal-wall-2-25.png
deleted file mode 100644
index a433744..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-26.png b/mindus/assets/blocks/autotiles/metal-wall-2-26.png
deleted file mode 100644
index 0f242fe..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-27.png b/mindus/assets/blocks/autotiles/metal-wall-2-27.png
deleted file mode 100644
index f9130e7..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-28.png b/mindus/assets/blocks/autotiles/metal-wall-2-28.png
deleted file mode 100644
index ae38e48..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-29.png b/mindus/assets/blocks/autotiles/metal-wall-2-29.png
deleted file mode 100644
index 7f9302d..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-3.png b/mindus/assets/blocks/autotiles/metal-wall-2-3.png
deleted file mode 100644
index 7ef2049..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-30.png b/mindus/assets/blocks/autotiles/metal-wall-2-30.png
deleted file mode 100644
index 5846ddf..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-31.png b/mindus/assets/blocks/autotiles/metal-wall-2-31.png
deleted file mode 100644
index ca9488e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-32.png b/mindus/assets/blocks/autotiles/metal-wall-2-32.png
deleted file mode 100644
index d5d7088..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-33.png b/mindus/assets/blocks/autotiles/metal-wall-2-33.png
deleted file mode 100644
index 11122b1..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-34.png b/mindus/assets/blocks/autotiles/metal-wall-2-34.png
deleted file mode 100644
index ece8ebb..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-35.png b/mindus/assets/blocks/autotiles/metal-wall-2-35.png
deleted file mode 100644
index de8930f..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-36.png b/mindus/assets/blocks/autotiles/metal-wall-2-36.png
deleted file mode 100644
index 02c4bba..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-37.png b/mindus/assets/blocks/autotiles/metal-wall-2-37.png
deleted file mode 100644
index adf0bfe..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-38.png b/mindus/assets/blocks/autotiles/metal-wall-2-38.png
deleted file mode 100644
index 4f72695..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-39.png b/mindus/assets/blocks/autotiles/metal-wall-2-39.png
deleted file mode 100644
index a913a43..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-4.png b/mindus/assets/blocks/autotiles/metal-wall-2-4.png
deleted file mode 100644
index 68f933c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-40.png b/mindus/assets/blocks/autotiles/metal-wall-2-40.png
deleted file mode 100644
index 9174e84..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-41.png b/mindus/assets/blocks/autotiles/metal-wall-2-41.png
deleted file mode 100644
index 4118b39..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-42.png b/mindus/assets/blocks/autotiles/metal-wall-2-42.png
deleted file mode 100644
index aad6bee..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-43.png b/mindus/assets/blocks/autotiles/metal-wall-2-43.png
deleted file mode 100644
index da630ff..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-44.png b/mindus/assets/blocks/autotiles/metal-wall-2-44.png
deleted file mode 100644
index a554111..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-45.png b/mindus/assets/blocks/autotiles/metal-wall-2-45.png
deleted file mode 100644
index 72ed549..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-46.png b/mindus/assets/blocks/autotiles/metal-wall-2-46.png
deleted file mode 100644
index 8f4ae93..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-5.png b/mindus/assets/blocks/autotiles/metal-wall-2-5.png
deleted file mode 100644
index eada091..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-6.png b/mindus/assets/blocks/autotiles/metal-wall-2-6.png
deleted file mode 100644
index afdfbfe..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-7.png b/mindus/assets/blocks/autotiles/metal-wall-2-7.png
deleted file mode 100644
index 7613a24..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-8.png b/mindus/assets/blocks/autotiles/metal-wall-2-8.png
deleted file mode 100644
index 162b264..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-9.png b/mindus/assets/blocks/autotiles/metal-wall-2-9.png
deleted file mode 100644
index 5062801..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-2-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-0.png b/mindus/assets/blocks/autotiles/metal-wall-3-0.png
deleted file mode 100644
index 3311205..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-1.png b/mindus/assets/blocks/autotiles/metal-wall-3-1.png
deleted file mode 100644
index 747d2cf..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-10.png b/mindus/assets/blocks/autotiles/metal-wall-3-10.png
deleted file mode 100644
index dc5ce4e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-11.png b/mindus/assets/blocks/autotiles/metal-wall-3-11.png
deleted file mode 100644
index f212f2d..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-12.png b/mindus/assets/blocks/autotiles/metal-wall-3-12.png
deleted file mode 100644
index ab7d94d..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-13.png b/mindus/assets/blocks/autotiles/metal-wall-3-13.png
deleted file mode 100644
index 7cdeb16..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-14.png b/mindus/assets/blocks/autotiles/metal-wall-3-14.png
deleted file mode 100644
index a04cb74..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-15.png b/mindus/assets/blocks/autotiles/metal-wall-3-15.png
deleted file mode 100644
index d57a07e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-16.png b/mindus/assets/blocks/autotiles/metal-wall-3-16.png
deleted file mode 100644
index 0653d44..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-17.png b/mindus/assets/blocks/autotiles/metal-wall-3-17.png
deleted file mode 100644
index c3e731d..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-18.png b/mindus/assets/blocks/autotiles/metal-wall-3-18.png
deleted file mode 100644
index 0726f83..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-19.png b/mindus/assets/blocks/autotiles/metal-wall-3-19.png
deleted file mode 100644
index 0c7b8c4..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-2.png b/mindus/assets/blocks/autotiles/metal-wall-3-2.png
deleted file mode 100644
index 6feccb1..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-20.png b/mindus/assets/blocks/autotiles/metal-wall-3-20.png
deleted file mode 100644
index fc1548c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-21.png b/mindus/assets/blocks/autotiles/metal-wall-3-21.png
deleted file mode 100644
index 45725bf..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-22.png b/mindus/assets/blocks/autotiles/metal-wall-3-22.png
deleted file mode 100644
index f781950..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-23.png b/mindus/assets/blocks/autotiles/metal-wall-3-23.png
deleted file mode 100644
index 1f7dabc..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-24.png b/mindus/assets/blocks/autotiles/metal-wall-3-24.png
deleted file mode 100644
index 45ec175..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-25.png b/mindus/assets/blocks/autotiles/metal-wall-3-25.png
deleted file mode 100644
index acd70e7..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-26.png b/mindus/assets/blocks/autotiles/metal-wall-3-26.png
deleted file mode 100644
index 9a8fcde..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-27.png b/mindus/assets/blocks/autotiles/metal-wall-3-27.png
deleted file mode 100644
index 506eef3..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-28.png b/mindus/assets/blocks/autotiles/metal-wall-3-28.png
deleted file mode 100644
index f1902d1..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-29.png b/mindus/assets/blocks/autotiles/metal-wall-3-29.png
deleted file mode 100644
index 5c21785..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-3.png b/mindus/assets/blocks/autotiles/metal-wall-3-3.png
deleted file mode 100644
index c6a8e8e..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-30.png b/mindus/assets/blocks/autotiles/metal-wall-3-30.png
deleted file mode 100644
index 0bbb313..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-31.png b/mindus/assets/blocks/autotiles/metal-wall-3-31.png
deleted file mode 100644
index 36351ab..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-32.png b/mindus/assets/blocks/autotiles/metal-wall-3-32.png
deleted file mode 100644
index e34b6ec..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-33.png b/mindus/assets/blocks/autotiles/metal-wall-3-33.png
deleted file mode 100644
index 0a3b85c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-34.png b/mindus/assets/blocks/autotiles/metal-wall-3-34.png
deleted file mode 100644
index 080c108..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-35.png b/mindus/assets/blocks/autotiles/metal-wall-3-35.png
deleted file mode 100644
index 72315a9..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-36.png b/mindus/assets/blocks/autotiles/metal-wall-3-36.png
deleted file mode 100644
index 099f81c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-37.png b/mindus/assets/blocks/autotiles/metal-wall-3-37.png
deleted file mode 100644
index 5801a27..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-38.png b/mindus/assets/blocks/autotiles/metal-wall-3-38.png
deleted file mode 100644
index a07afb9..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-39.png b/mindus/assets/blocks/autotiles/metal-wall-3-39.png
deleted file mode 100644
index 703fcd9..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-4.png b/mindus/assets/blocks/autotiles/metal-wall-3-4.png
deleted file mode 100644
index 1409b76..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-40.png b/mindus/assets/blocks/autotiles/metal-wall-3-40.png
deleted file mode 100644
index c77e1f2..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-41.png b/mindus/assets/blocks/autotiles/metal-wall-3-41.png
deleted file mode 100644
index 5261ec6..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-42.png b/mindus/assets/blocks/autotiles/metal-wall-3-42.png
deleted file mode 100644
index 2703bf2..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-43.png b/mindus/assets/blocks/autotiles/metal-wall-3-43.png
deleted file mode 100644
index 149b85c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-44.png b/mindus/assets/blocks/autotiles/metal-wall-3-44.png
deleted file mode 100644
index 92672ad..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-45.png b/mindus/assets/blocks/autotiles/metal-wall-3-45.png
deleted file mode 100644
index 94ccd2b..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-46.png b/mindus/assets/blocks/autotiles/metal-wall-3-46.png
deleted file mode 100644
index 29c6146..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-5.png b/mindus/assets/blocks/autotiles/metal-wall-3-5.png
deleted file mode 100644
index 57c6bb9..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-6.png b/mindus/assets/blocks/autotiles/metal-wall-3-6.png
deleted file mode 100644
index 726397c..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-7.png b/mindus/assets/blocks/autotiles/metal-wall-3-7.png
deleted file mode 100644
index dc4d5db..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-8.png b/mindus/assets/blocks/autotiles/metal-wall-3-8.png
deleted file mode 100644
index 151dbed..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-9.png b/mindus/assets/blocks/autotiles/metal-wall-3-9.png
deleted file mode 100644
index 9113075..0000000
--- a/mindus/assets/blocks/autotiles/metal-wall-3-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/campaign/advanced-launch-pad.png b/mindus/assets/blocks/campaign/advanced-launch-pad.png
deleted file mode 100644
index 1ead655..0000000
--- a/mindus/assets/blocks/campaign/advanced-launch-pad.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/campaign/interplanetary-accelerator.png b/mindus/assets/blocks/campaign/interplanetary-accelerator.png
deleted file mode 100644
index 7009ad1..0000000
--- a/mindus/assets/blocks/campaign/interplanetary-accelerator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/campaign/landing-pad.png b/mindus/assets/blocks/campaign/landing-pad.png
deleted file mode 100644
index 1978d09..0000000
--- a/mindus/assets/blocks/campaign/landing-pad.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay0.png b/mindus/assets/blocks/characters/character-overlay0.png
deleted file mode 100644
index ab31084..0000000
--- a/mindus/assets/blocks/characters/character-overlay0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay1.png b/mindus/assets/blocks/characters/character-overlay1.png
deleted file mode 100644
index 7b5b7bf..0000000
--- a/mindus/assets/blocks/characters/character-overlay1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay10.png b/mindus/assets/blocks/characters/character-overlay10.png
deleted file mode 100644
index 3bebe9f..0000000
--- a/mindus/assets/blocks/characters/character-overlay10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay11.png b/mindus/assets/blocks/characters/character-overlay11.png
deleted file mode 100644
index 8a360b8..0000000
--- a/mindus/assets/blocks/characters/character-overlay11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay12.png b/mindus/assets/blocks/characters/character-overlay12.png
deleted file mode 100644
index 2a57d8d..0000000
--- a/mindus/assets/blocks/characters/character-overlay12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay13.png b/mindus/assets/blocks/characters/character-overlay13.png
deleted file mode 100644
index 9c8d6de..0000000
--- a/mindus/assets/blocks/characters/character-overlay13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay14.png b/mindus/assets/blocks/characters/character-overlay14.png
deleted file mode 100644
index 6eaae36..0000000
--- a/mindus/assets/blocks/characters/character-overlay14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay15.png b/mindus/assets/blocks/characters/character-overlay15.png
deleted file mode 100644
index d0db8a5..0000000
--- a/mindus/assets/blocks/characters/character-overlay15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay16.png b/mindus/assets/blocks/characters/character-overlay16.png
deleted file mode 100644
index 59f71c7..0000000
--- a/mindus/assets/blocks/characters/character-overlay16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay17.png b/mindus/assets/blocks/characters/character-overlay17.png
deleted file mode 100644
index a61deb9..0000000
--- a/mindus/assets/blocks/characters/character-overlay17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay18.png b/mindus/assets/blocks/characters/character-overlay18.png
deleted file mode 100644
index f9b1c9b..0000000
--- a/mindus/assets/blocks/characters/character-overlay18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay19.png b/mindus/assets/blocks/characters/character-overlay19.png
deleted file mode 100644
index 3b4b4af..0000000
--- a/mindus/assets/blocks/characters/character-overlay19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay2.png b/mindus/assets/blocks/characters/character-overlay2.png
deleted file mode 100644
index d1fe91a..0000000
--- a/mindus/assets/blocks/characters/character-overlay2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay20.png b/mindus/assets/blocks/characters/character-overlay20.png
deleted file mode 100644
index 29e1154..0000000
--- a/mindus/assets/blocks/characters/character-overlay20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay21.png b/mindus/assets/blocks/characters/character-overlay21.png
deleted file mode 100644
index 796910f..0000000
--- a/mindus/assets/blocks/characters/character-overlay21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay22.png b/mindus/assets/blocks/characters/character-overlay22.png
deleted file mode 100644
index 092046c..0000000
--- a/mindus/assets/blocks/characters/character-overlay22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay23.png b/mindus/assets/blocks/characters/character-overlay23.png
deleted file mode 100644
index 3b83f8d..0000000
--- a/mindus/assets/blocks/characters/character-overlay23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay24.png b/mindus/assets/blocks/characters/character-overlay24.png
deleted file mode 100644
index f33968c..0000000
--- a/mindus/assets/blocks/characters/character-overlay24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay25.png b/mindus/assets/blocks/characters/character-overlay25.png
deleted file mode 100644
index 3240b77..0000000
--- a/mindus/assets/blocks/characters/character-overlay25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay26.png b/mindus/assets/blocks/characters/character-overlay26.png
deleted file mode 100644
index 226386a..0000000
--- a/mindus/assets/blocks/characters/character-overlay26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay27.png b/mindus/assets/blocks/characters/character-overlay27.png
deleted file mode 100644
index b5b478f..0000000
--- a/mindus/assets/blocks/characters/character-overlay27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay28.png b/mindus/assets/blocks/characters/character-overlay28.png
deleted file mode 100644
index 961b593..0000000
--- a/mindus/assets/blocks/characters/character-overlay28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay29.png b/mindus/assets/blocks/characters/character-overlay29.png
deleted file mode 100644
index c8b9ecc..0000000
--- a/mindus/assets/blocks/characters/character-overlay29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay3.png b/mindus/assets/blocks/characters/character-overlay3.png
deleted file mode 100644
index 36e9a5f..0000000
--- a/mindus/assets/blocks/characters/character-overlay3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay30.png b/mindus/assets/blocks/characters/character-overlay30.png
deleted file mode 100644
index 31827bd..0000000
--- a/mindus/assets/blocks/characters/character-overlay30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay31.png b/mindus/assets/blocks/characters/character-overlay31.png
deleted file mode 100644
index 2dc061c..0000000
--- a/mindus/assets/blocks/characters/character-overlay31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay32.png b/mindus/assets/blocks/characters/character-overlay32.png
deleted file mode 100644
index 1b199c4..0000000
--- a/mindus/assets/blocks/characters/character-overlay32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay33.png b/mindus/assets/blocks/characters/character-overlay33.png
deleted file mode 100644
index 82dd71b..0000000
--- a/mindus/assets/blocks/characters/character-overlay33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay34.png b/mindus/assets/blocks/characters/character-overlay34.png
deleted file mode 100644
index 3d4d52a..0000000
--- a/mindus/assets/blocks/characters/character-overlay34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay35.png b/mindus/assets/blocks/characters/character-overlay35.png
deleted file mode 100644
index e425182..0000000
--- a/mindus/assets/blocks/characters/character-overlay35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay36.png b/mindus/assets/blocks/characters/character-overlay36.png
deleted file mode 100644
index dbfeea3..0000000
--- a/mindus/assets/blocks/characters/character-overlay36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay37.png b/mindus/assets/blocks/characters/character-overlay37.png
deleted file mode 100644
index cd8e963..0000000
--- a/mindus/assets/blocks/characters/character-overlay37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay38.png b/mindus/assets/blocks/characters/character-overlay38.png
deleted file mode 100644
index 8c4b51e..0000000
--- a/mindus/assets/blocks/characters/character-overlay38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay39.png b/mindus/assets/blocks/characters/character-overlay39.png
deleted file mode 100644
index a5539d8..0000000
--- a/mindus/assets/blocks/characters/character-overlay39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay4.png b/mindus/assets/blocks/characters/character-overlay4.png
deleted file mode 100644
index 6925c6b..0000000
--- a/mindus/assets/blocks/characters/character-overlay4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay40.png b/mindus/assets/blocks/characters/character-overlay40.png
deleted file mode 100644
index 6dbf897..0000000
--- a/mindus/assets/blocks/characters/character-overlay40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay41.png b/mindus/assets/blocks/characters/character-overlay41.png
deleted file mode 100644
index 1cd03b9..0000000
--- a/mindus/assets/blocks/characters/character-overlay41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay42.png b/mindus/assets/blocks/characters/character-overlay42.png
deleted file mode 100644
index 2a1e1aa..0000000
--- a/mindus/assets/blocks/characters/character-overlay42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay43.png b/mindus/assets/blocks/characters/character-overlay43.png
deleted file mode 100644
index 3d7f4a6..0000000
--- a/mindus/assets/blocks/characters/character-overlay43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay44.png b/mindus/assets/blocks/characters/character-overlay44.png
deleted file mode 100644
index 8d8a8a2..0000000
--- a/mindus/assets/blocks/characters/character-overlay44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay45.png b/mindus/assets/blocks/characters/character-overlay45.png
deleted file mode 100644
index 54260f0..0000000
--- a/mindus/assets/blocks/characters/character-overlay45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay46.png b/mindus/assets/blocks/characters/character-overlay46.png
deleted file mode 100644
index 63f1212..0000000
--- a/mindus/assets/blocks/characters/character-overlay46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay47.png b/mindus/assets/blocks/characters/character-overlay47.png
deleted file mode 100644
index 0888925..0000000
--- a/mindus/assets/blocks/characters/character-overlay47.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay48.png b/mindus/assets/blocks/characters/character-overlay48.png
deleted file mode 100644
index 5284335..0000000
--- a/mindus/assets/blocks/characters/character-overlay48.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay49.png b/mindus/assets/blocks/characters/character-overlay49.png
deleted file mode 100644
index 02ea7c7..0000000
--- a/mindus/assets/blocks/characters/character-overlay49.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay5.png b/mindus/assets/blocks/characters/character-overlay5.png
deleted file mode 100644
index abf33bc..0000000
--- a/mindus/assets/blocks/characters/character-overlay5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay50.png b/mindus/assets/blocks/characters/character-overlay50.png
deleted file mode 100644
index eb59850..0000000
--- a/mindus/assets/blocks/characters/character-overlay50.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay51.png b/mindus/assets/blocks/characters/character-overlay51.png
deleted file mode 100644
index 4dbe595..0000000
--- a/mindus/assets/blocks/characters/character-overlay51.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay52.png b/mindus/assets/blocks/characters/character-overlay52.png
deleted file mode 100644
index bee0c72..0000000
--- a/mindus/assets/blocks/characters/character-overlay52.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay53.png b/mindus/assets/blocks/characters/character-overlay53.png
deleted file mode 100644
index e167b56..0000000
--- a/mindus/assets/blocks/characters/character-overlay53.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay54.png b/mindus/assets/blocks/characters/character-overlay54.png
deleted file mode 100644
index 81645eb..0000000
--- a/mindus/assets/blocks/characters/character-overlay54.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay55.png b/mindus/assets/blocks/characters/character-overlay55.png
deleted file mode 100644
index e297fff..0000000
--- a/mindus/assets/blocks/characters/character-overlay55.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay56.png b/mindus/assets/blocks/characters/character-overlay56.png
deleted file mode 100644
index 3c49de4..0000000
--- a/mindus/assets/blocks/characters/character-overlay56.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay57.png b/mindus/assets/blocks/characters/character-overlay57.png
deleted file mode 100644
index b7ffe02..0000000
--- a/mindus/assets/blocks/characters/character-overlay57.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay58.png b/mindus/assets/blocks/characters/character-overlay58.png
deleted file mode 100644
index 51f7496..0000000
--- a/mindus/assets/blocks/characters/character-overlay58.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay59.png b/mindus/assets/blocks/characters/character-overlay59.png
deleted file mode 100644
index ae66afc..0000000
--- a/mindus/assets/blocks/characters/character-overlay59.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay6.png b/mindus/assets/blocks/characters/character-overlay6.png
deleted file mode 100644
index 4f4d924..0000000
--- a/mindus/assets/blocks/characters/character-overlay6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay60.png b/mindus/assets/blocks/characters/character-overlay60.png
deleted file mode 100644
index 2581705..0000000
--- a/mindus/assets/blocks/characters/character-overlay60.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay61.png b/mindus/assets/blocks/characters/character-overlay61.png
deleted file mode 100644
index c983753..0000000
--- a/mindus/assets/blocks/characters/character-overlay61.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay62.png b/mindus/assets/blocks/characters/character-overlay62.png
deleted file mode 100644
index e4e32ed..0000000
--- a/mindus/assets/blocks/characters/character-overlay62.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay63.png b/mindus/assets/blocks/characters/character-overlay63.png
deleted file mode 100644
index 0194a9b..0000000
--- a/mindus/assets/blocks/characters/character-overlay63.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay7.png b/mindus/assets/blocks/characters/character-overlay7.png
deleted file mode 100644
index 68c0c61..0000000
--- a/mindus/assets/blocks/characters/character-overlay7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay8.png b/mindus/assets/blocks/characters/character-overlay8.png
deleted file mode 100644
index eff4986..0000000
--- a/mindus/assets/blocks/characters/character-overlay8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/character-overlay9.png b/mindus/assets/blocks/characters/character-overlay9.png
deleted file mode 100644
index ce4c494..0000000
--- a/mindus/assets/blocks/characters/character-overlay9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux0.png b/mindus/assets/blocks/characters/rune-overlay-crux0.png
deleted file mode 100644
index 6d2f70d..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux1.png b/mindus/assets/blocks/characters/rune-overlay-crux1.png
deleted file mode 100644
index b238f6f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux10.png b/mindus/assets/blocks/characters/rune-overlay-crux10.png
deleted file mode 100644
index 3cbf48a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux100.png b/mindus/assets/blocks/characters/rune-overlay-crux100.png
deleted file mode 100644
index 2ad0de1..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux100.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux101.png b/mindus/assets/blocks/characters/rune-overlay-crux101.png
deleted file mode 100644
index 1d8a7f5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux101.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux102.png b/mindus/assets/blocks/characters/rune-overlay-crux102.png
deleted file mode 100644
index 964b9cb..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux102.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux103.png b/mindus/assets/blocks/characters/rune-overlay-crux103.png
deleted file mode 100644
index 841b5ab..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux103.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux104.png b/mindus/assets/blocks/characters/rune-overlay-crux104.png
deleted file mode 100644
index e35b0af..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux104.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux105.png b/mindus/assets/blocks/characters/rune-overlay-crux105.png
deleted file mode 100644
index 67463a5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux105.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux106.png b/mindus/assets/blocks/characters/rune-overlay-crux106.png
deleted file mode 100644
index 376d8d2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux106.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux107.png b/mindus/assets/blocks/characters/rune-overlay-crux107.png
deleted file mode 100644
index bded9ae..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux107.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux108.png b/mindus/assets/blocks/characters/rune-overlay-crux108.png
deleted file mode 100644
index 68a9335..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux108.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux11.png b/mindus/assets/blocks/characters/rune-overlay-crux11.png
deleted file mode 100644
index 98f3dee..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux12.png b/mindus/assets/blocks/characters/rune-overlay-crux12.png
deleted file mode 100644
index 5d79d97..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux13.png b/mindus/assets/blocks/characters/rune-overlay-crux13.png
deleted file mode 100644
index 8a18c13..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux14.png b/mindus/assets/blocks/characters/rune-overlay-crux14.png
deleted file mode 100644
index a812a11..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux15.png b/mindus/assets/blocks/characters/rune-overlay-crux15.png
deleted file mode 100644
index 8933bca..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux16.png b/mindus/assets/blocks/characters/rune-overlay-crux16.png
deleted file mode 100644
index 006c9e7..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux17.png b/mindus/assets/blocks/characters/rune-overlay-crux17.png
deleted file mode 100644
index abdf83c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux18.png b/mindus/assets/blocks/characters/rune-overlay-crux18.png
deleted file mode 100644
index c4ee9ca..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux19.png b/mindus/assets/blocks/characters/rune-overlay-crux19.png
deleted file mode 100644
index 38e89db..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux2.png b/mindus/assets/blocks/characters/rune-overlay-crux2.png
deleted file mode 100644
index 8df495a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux20.png b/mindus/assets/blocks/characters/rune-overlay-crux20.png
deleted file mode 100644
index cdcee3a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux21.png b/mindus/assets/blocks/characters/rune-overlay-crux21.png
deleted file mode 100644
index af42b3d..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux22.png b/mindus/assets/blocks/characters/rune-overlay-crux22.png
deleted file mode 100644
index 2c6b962..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux23.png b/mindus/assets/blocks/characters/rune-overlay-crux23.png
deleted file mode 100644
index bc16215..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux24.png b/mindus/assets/blocks/characters/rune-overlay-crux24.png
deleted file mode 100644
index 8a08984..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux25.png b/mindus/assets/blocks/characters/rune-overlay-crux25.png
deleted file mode 100644
index a9aa34e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux26.png b/mindus/assets/blocks/characters/rune-overlay-crux26.png
deleted file mode 100644
index 77c447b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux27.png b/mindus/assets/blocks/characters/rune-overlay-crux27.png
deleted file mode 100644
index 99645a5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux28.png b/mindus/assets/blocks/characters/rune-overlay-crux28.png
deleted file mode 100644
index 50a45a7..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux29.png b/mindus/assets/blocks/characters/rune-overlay-crux29.png
deleted file mode 100644
index 3f3eb3e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux3.png b/mindus/assets/blocks/characters/rune-overlay-crux3.png
deleted file mode 100644
index 54cd8b2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux30.png b/mindus/assets/blocks/characters/rune-overlay-crux30.png
deleted file mode 100644
index 05c9b3e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux31.png b/mindus/assets/blocks/characters/rune-overlay-crux31.png
deleted file mode 100644
index 542ff0c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux32.png b/mindus/assets/blocks/characters/rune-overlay-crux32.png
deleted file mode 100644
index 30a8a5b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux33.png b/mindus/assets/blocks/characters/rune-overlay-crux33.png
deleted file mode 100644
index c273844..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux34.png b/mindus/assets/blocks/characters/rune-overlay-crux34.png
deleted file mode 100644
index a945709..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux35.png b/mindus/assets/blocks/characters/rune-overlay-crux35.png
deleted file mode 100644
index 1ae586e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux36.png b/mindus/assets/blocks/characters/rune-overlay-crux36.png
deleted file mode 100644
index 5d0fd51..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux37.png b/mindus/assets/blocks/characters/rune-overlay-crux37.png
deleted file mode 100644
index 0ea4d04..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux38.png b/mindus/assets/blocks/characters/rune-overlay-crux38.png
deleted file mode 100644
index e9b8f33..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux39.png b/mindus/assets/blocks/characters/rune-overlay-crux39.png
deleted file mode 100644
index 2dd308a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux4.png b/mindus/assets/blocks/characters/rune-overlay-crux4.png
deleted file mode 100644
index 7dc9fe6..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux40.png b/mindus/assets/blocks/characters/rune-overlay-crux40.png
deleted file mode 100644
index 60aa9b6..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux41.png b/mindus/assets/blocks/characters/rune-overlay-crux41.png
deleted file mode 100644
index d8a077c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux42.png b/mindus/assets/blocks/characters/rune-overlay-crux42.png
deleted file mode 100644
index e6bc7d6..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux43.png b/mindus/assets/blocks/characters/rune-overlay-crux43.png
deleted file mode 100644
index bc0fc4a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux44.png b/mindus/assets/blocks/characters/rune-overlay-crux44.png
deleted file mode 100644
index 06a57c6..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux45.png b/mindus/assets/blocks/characters/rune-overlay-crux45.png
deleted file mode 100644
index f262dcd..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux46.png b/mindus/assets/blocks/characters/rune-overlay-crux46.png
deleted file mode 100644
index 84505b7..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux47.png b/mindus/assets/blocks/characters/rune-overlay-crux47.png
deleted file mode 100644
index 8ebca6b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux47.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux48.png b/mindus/assets/blocks/characters/rune-overlay-crux48.png
deleted file mode 100644
index c483142..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux48.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux49.png b/mindus/assets/blocks/characters/rune-overlay-crux49.png
deleted file mode 100644
index 1cbbf74..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux49.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux5.png b/mindus/assets/blocks/characters/rune-overlay-crux5.png
deleted file mode 100644
index 2cc022b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux50.png b/mindus/assets/blocks/characters/rune-overlay-crux50.png
deleted file mode 100644
index d1e852d..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux50.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux51.png b/mindus/assets/blocks/characters/rune-overlay-crux51.png
deleted file mode 100644
index 0a013e9..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux51.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux52.png b/mindus/assets/blocks/characters/rune-overlay-crux52.png
deleted file mode 100644
index 4a9d262..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux52.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux53.png b/mindus/assets/blocks/characters/rune-overlay-crux53.png
deleted file mode 100644
index 1e0a7d6..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux53.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux54.png b/mindus/assets/blocks/characters/rune-overlay-crux54.png
deleted file mode 100644
index 672e194..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux54.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux55.png b/mindus/assets/blocks/characters/rune-overlay-crux55.png
deleted file mode 100644
index b96b760..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux55.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux56.png b/mindus/assets/blocks/characters/rune-overlay-crux56.png
deleted file mode 100644
index ef8ced4..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux56.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux57.png b/mindus/assets/blocks/characters/rune-overlay-crux57.png
deleted file mode 100644
index ec49477..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux57.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux58.png b/mindus/assets/blocks/characters/rune-overlay-crux58.png
deleted file mode 100644
index 66404b1..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux58.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux59.png b/mindus/assets/blocks/characters/rune-overlay-crux59.png
deleted file mode 100644
index 0457f94..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux59.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux6.png b/mindus/assets/blocks/characters/rune-overlay-crux6.png
deleted file mode 100644
index 7b7ff04..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux60.png b/mindus/assets/blocks/characters/rune-overlay-crux60.png
deleted file mode 100644
index b82a757..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux60.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux61.png b/mindus/assets/blocks/characters/rune-overlay-crux61.png
deleted file mode 100644
index d208652..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux61.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux62.png b/mindus/assets/blocks/characters/rune-overlay-crux62.png
deleted file mode 100644
index 49d3ec2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux62.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux63.png b/mindus/assets/blocks/characters/rune-overlay-crux63.png
deleted file mode 100644
index 1875a75..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux63.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux64.png b/mindus/assets/blocks/characters/rune-overlay-crux64.png
deleted file mode 100644
index 897c02c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux64.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux65.png b/mindus/assets/blocks/characters/rune-overlay-crux65.png
deleted file mode 100644
index d3889d7..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux65.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux66.png b/mindus/assets/blocks/characters/rune-overlay-crux66.png
deleted file mode 100644
index c42fa4b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux66.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux67.png b/mindus/assets/blocks/characters/rune-overlay-crux67.png
deleted file mode 100644
index 3cf7699..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux67.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux68.png b/mindus/assets/blocks/characters/rune-overlay-crux68.png
deleted file mode 100644
index 14f8025..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux68.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux69.png b/mindus/assets/blocks/characters/rune-overlay-crux69.png
deleted file mode 100644
index 7c6656a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux69.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux7.png b/mindus/assets/blocks/characters/rune-overlay-crux7.png
deleted file mode 100644
index 53060a0..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux70.png b/mindus/assets/blocks/characters/rune-overlay-crux70.png
deleted file mode 100644
index 2456468..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux70.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux71.png b/mindus/assets/blocks/characters/rune-overlay-crux71.png
deleted file mode 100644
index f7d1b12..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux71.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux72.png b/mindus/assets/blocks/characters/rune-overlay-crux72.png
deleted file mode 100644
index e3c6db3..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux72.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux73.png b/mindus/assets/blocks/characters/rune-overlay-crux73.png
deleted file mode 100644
index f63d4cc..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux73.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux74.png b/mindus/assets/blocks/characters/rune-overlay-crux74.png
deleted file mode 100644
index 6d6db43..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux74.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux75.png b/mindus/assets/blocks/characters/rune-overlay-crux75.png
deleted file mode 100644
index 0f39439..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux75.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux76.png b/mindus/assets/blocks/characters/rune-overlay-crux76.png
deleted file mode 100644
index 9e29658..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux76.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux77.png b/mindus/assets/blocks/characters/rune-overlay-crux77.png
deleted file mode 100644
index 82b4eaf..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux77.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux78.png b/mindus/assets/blocks/characters/rune-overlay-crux78.png
deleted file mode 100644
index 7e471b5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux78.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux79.png b/mindus/assets/blocks/characters/rune-overlay-crux79.png
deleted file mode 100644
index 4b887af..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux79.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux8.png b/mindus/assets/blocks/characters/rune-overlay-crux8.png
deleted file mode 100644
index bf6b5d5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux80.png b/mindus/assets/blocks/characters/rune-overlay-crux80.png
deleted file mode 100644
index 5fa1728..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux80.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux81.png b/mindus/assets/blocks/characters/rune-overlay-crux81.png
deleted file mode 100644
index 3567d7f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux81.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux82.png b/mindus/assets/blocks/characters/rune-overlay-crux82.png
deleted file mode 100644
index 7046d94..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux82.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux83.png b/mindus/assets/blocks/characters/rune-overlay-crux83.png
deleted file mode 100644
index 9bcab0e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux83.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux84.png b/mindus/assets/blocks/characters/rune-overlay-crux84.png
deleted file mode 100644
index 0cdfdee..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux84.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux85.png b/mindus/assets/blocks/characters/rune-overlay-crux85.png
deleted file mode 100644
index 338575b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux85.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux86.png b/mindus/assets/blocks/characters/rune-overlay-crux86.png
deleted file mode 100644
index 7ea4899..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux86.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux87.png b/mindus/assets/blocks/characters/rune-overlay-crux87.png
deleted file mode 100644
index e801acd..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux87.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux88.png b/mindus/assets/blocks/characters/rune-overlay-crux88.png
deleted file mode 100644
index cc76da4..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux88.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux89.png b/mindus/assets/blocks/characters/rune-overlay-crux89.png
deleted file mode 100644
index 7d1a220..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux89.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux9.png b/mindus/assets/blocks/characters/rune-overlay-crux9.png
deleted file mode 100644
index 9b1e288..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux90.png b/mindus/assets/blocks/characters/rune-overlay-crux90.png
deleted file mode 100644
index a47a233..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux90.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux91.png b/mindus/assets/blocks/characters/rune-overlay-crux91.png
deleted file mode 100644
index 24d03e3..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux91.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux92.png b/mindus/assets/blocks/characters/rune-overlay-crux92.png
deleted file mode 100644
index 67f103c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux92.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux93.png b/mindus/assets/blocks/characters/rune-overlay-crux93.png
deleted file mode 100644
index 25821bf..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux93.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux94.png b/mindus/assets/blocks/characters/rune-overlay-crux94.png
deleted file mode 100644
index aa7c7d1..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux94.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux95.png b/mindus/assets/blocks/characters/rune-overlay-crux95.png
deleted file mode 100644
index 7a31bba..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux95.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux96.png b/mindus/assets/blocks/characters/rune-overlay-crux96.png
deleted file mode 100644
index 67111b6..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux96.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux97.png b/mindus/assets/blocks/characters/rune-overlay-crux97.png
deleted file mode 100644
index c710323..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux97.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux98.png b/mindus/assets/blocks/characters/rune-overlay-crux98.png
deleted file mode 100644
index e4d40e1..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux98.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay-crux99.png b/mindus/assets/blocks/characters/rune-overlay-crux99.png
deleted file mode 100644
index e6fd0d0..0000000
--- a/mindus/assets/blocks/characters/rune-overlay-crux99.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay0.png b/mindus/assets/blocks/characters/rune-overlay0.png
deleted file mode 100644
index 50b167f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay1.png b/mindus/assets/blocks/characters/rune-overlay1.png
deleted file mode 100644
index 59b547e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay10.png b/mindus/assets/blocks/characters/rune-overlay10.png
deleted file mode 100644
index 6fb852f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay100.png b/mindus/assets/blocks/characters/rune-overlay100.png
deleted file mode 100644
index ad0c976..0000000
--- a/mindus/assets/blocks/characters/rune-overlay100.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay101.png b/mindus/assets/blocks/characters/rune-overlay101.png
deleted file mode 100644
index 12a6d9f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay101.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay102.png b/mindus/assets/blocks/characters/rune-overlay102.png
deleted file mode 100644
index 6f0b1b7..0000000
--- a/mindus/assets/blocks/characters/rune-overlay102.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay103.png b/mindus/assets/blocks/characters/rune-overlay103.png
deleted file mode 100644
index 63274c2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay103.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay104.png b/mindus/assets/blocks/characters/rune-overlay104.png
deleted file mode 100644
index 1cba8cc..0000000
--- a/mindus/assets/blocks/characters/rune-overlay104.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay105.png b/mindus/assets/blocks/characters/rune-overlay105.png
deleted file mode 100644
index 759fc03..0000000
--- a/mindus/assets/blocks/characters/rune-overlay105.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay106.png b/mindus/assets/blocks/characters/rune-overlay106.png
deleted file mode 100644
index 3a40e7b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay106.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay107.png b/mindus/assets/blocks/characters/rune-overlay107.png
deleted file mode 100644
index 29e2e11..0000000
--- a/mindus/assets/blocks/characters/rune-overlay107.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay108.png b/mindus/assets/blocks/characters/rune-overlay108.png
deleted file mode 100644
index 7851e84..0000000
--- a/mindus/assets/blocks/characters/rune-overlay108.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay11.png b/mindus/assets/blocks/characters/rune-overlay11.png
deleted file mode 100644
index 89207d0..0000000
--- a/mindus/assets/blocks/characters/rune-overlay11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay12.png b/mindus/assets/blocks/characters/rune-overlay12.png
deleted file mode 100644
index 18638a5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay13.png b/mindus/assets/blocks/characters/rune-overlay13.png
deleted file mode 100644
index 14669c8..0000000
--- a/mindus/assets/blocks/characters/rune-overlay13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay14.png b/mindus/assets/blocks/characters/rune-overlay14.png
deleted file mode 100644
index 1a1313e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay15.png b/mindus/assets/blocks/characters/rune-overlay15.png
deleted file mode 100644
index 4c36143..0000000
--- a/mindus/assets/blocks/characters/rune-overlay15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay16.png b/mindus/assets/blocks/characters/rune-overlay16.png
deleted file mode 100644
index 46959bb..0000000
--- a/mindus/assets/blocks/characters/rune-overlay16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay17.png b/mindus/assets/blocks/characters/rune-overlay17.png
deleted file mode 100644
index eaa6ef9..0000000
--- a/mindus/assets/blocks/characters/rune-overlay17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay18.png b/mindus/assets/blocks/characters/rune-overlay18.png
deleted file mode 100644
index a2b27f9..0000000
--- a/mindus/assets/blocks/characters/rune-overlay18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay19.png b/mindus/assets/blocks/characters/rune-overlay19.png
deleted file mode 100644
index 4ae4801..0000000
--- a/mindus/assets/blocks/characters/rune-overlay19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay2.png b/mindus/assets/blocks/characters/rune-overlay2.png
deleted file mode 100644
index bc77232..0000000
--- a/mindus/assets/blocks/characters/rune-overlay2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay20.png b/mindus/assets/blocks/characters/rune-overlay20.png
deleted file mode 100644
index 353cb26..0000000
--- a/mindus/assets/blocks/characters/rune-overlay20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay21.png b/mindus/assets/blocks/characters/rune-overlay21.png
deleted file mode 100644
index 8d08e8e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay22.png b/mindus/assets/blocks/characters/rune-overlay22.png
deleted file mode 100644
index 4e2453c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay23.png b/mindus/assets/blocks/characters/rune-overlay23.png
deleted file mode 100644
index f87ffd3..0000000
--- a/mindus/assets/blocks/characters/rune-overlay23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay24.png b/mindus/assets/blocks/characters/rune-overlay24.png
deleted file mode 100644
index 49a28f8..0000000
--- a/mindus/assets/blocks/characters/rune-overlay24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay25.png b/mindus/assets/blocks/characters/rune-overlay25.png
deleted file mode 100644
index e9e1086..0000000
--- a/mindus/assets/blocks/characters/rune-overlay25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay26.png b/mindus/assets/blocks/characters/rune-overlay26.png
deleted file mode 100644
index 6cab8e5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay27.png b/mindus/assets/blocks/characters/rune-overlay27.png
deleted file mode 100644
index d8801a3..0000000
--- a/mindus/assets/blocks/characters/rune-overlay27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay28.png b/mindus/assets/blocks/characters/rune-overlay28.png
deleted file mode 100644
index 814312e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay29.png b/mindus/assets/blocks/characters/rune-overlay29.png
deleted file mode 100644
index 91209b5..0000000
--- a/mindus/assets/blocks/characters/rune-overlay29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay3.png b/mindus/assets/blocks/characters/rune-overlay3.png
deleted file mode 100644
index 012ecca..0000000
--- a/mindus/assets/blocks/characters/rune-overlay3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay30.png b/mindus/assets/blocks/characters/rune-overlay30.png
deleted file mode 100644
index db6fe7a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay31.png b/mindus/assets/blocks/characters/rune-overlay31.png
deleted file mode 100644
index d2b089f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay32.png b/mindus/assets/blocks/characters/rune-overlay32.png
deleted file mode 100644
index 6b444fe..0000000
--- a/mindus/assets/blocks/characters/rune-overlay32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay33.png b/mindus/assets/blocks/characters/rune-overlay33.png
deleted file mode 100644
index b4cd89f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay34.png b/mindus/assets/blocks/characters/rune-overlay34.png
deleted file mode 100644
index 86de197..0000000
--- a/mindus/assets/blocks/characters/rune-overlay34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay35.png b/mindus/assets/blocks/characters/rune-overlay35.png
deleted file mode 100644
index e4f0237..0000000
--- a/mindus/assets/blocks/characters/rune-overlay35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay36.png b/mindus/assets/blocks/characters/rune-overlay36.png
deleted file mode 100644
index ba69315..0000000
--- a/mindus/assets/blocks/characters/rune-overlay36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay37.png b/mindus/assets/blocks/characters/rune-overlay37.png
deleted file mode 100644
index f576b68..0000000
--- a/mindus/assets/blocks/characters/rune-overlay37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay38.png b/mindus/assets/blocks/characters/rune-overlay38.png
deleted file mode 100644
index 553937c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay39.png b/mindus/assets/blocks/characters/rune-overlay39.png
deleted file mode 100644
index 77f60b7..0000000
--- a/mindus/assets/blocks/characters/rune-overlay39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay4.png b/mindus/assets/blocks/characters/rune-overlay4.png
deleted file mode 100644
index ee6c317..0000000
--- a/mindus/assets/blocks/characters/rune-overlay4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay40.png b/mindus/assets/blocks/characters/rune-overlay40.png
deleted file mode 100644
index bf56c74..0000000
--- a/mindus/assets/blocks/characters/rune-overlay40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay41.png b/mindus/assets/blocks/characters/rune-overlay41.png
deleted file mode 100644
index 47fba77..0000000
--- a/mindus/assets/blocks/characters/rune-overlay41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay42.png b/mindus/assets/blocks/characters/rune-overlay42.png
deleted file mode 100644
index e231ca3..0000000
--- a/mindus/assets/blocks/characters/rune-overlay42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay43.png b/mindus/assets/blocks/characters/rune-overlay43.png
deleted file mode 100644
index 0b78d57..0000000
--- a/mindus/assets/blocks/characters/rune-overlay43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay44.png b/mindus/assets/blocks/characters/rune-overlay44.png
deleted file mode 100644
index 5f247e0..0000000
--- a/mindus/assets/blocks/characters/rune-overlay44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay45.png b/mindus/assets/blocks/characters/rune-overlay45.png
deleted file mode 100644
index 1e3bbd3..0000000
--- a/mindus/assets/blocks/characters/rune-overlay45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay46.png b/mindus/assets/blocks/characters/rune-overlay46.png
deleted file mode 100644
index d569595..0000000
--- a/mindus/assets/blocks/characters/rune-overlay46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay47.png b/mindus/assets/blocks/characters/rune-overlay47.png
deleted file mode 100644
index 7068249..0000000
--- a/mindus/assets/blocks/characters/rune-overlay47.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay48.png b/mindus/assets/blocks/characters/rune-overlay48.png
deleted file mode 100644
index 478dc04..0000000
--- a/mindus/assets/blocks/characters/rune-overlay48.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay49.png b/mindus/assets/blocks/characters/rune-overlay49.png
deleted file mode 100644
index 4de1595..0000000
--- a/mindus/assets/blocks/characters/rune-overlay49.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay5.png b/mindus/assets/blocks/characters/rune-overlay5.png
deleted file mode 100644
index 3f9ca5d..0000000
--- a/mindus/assets/blocks/characters/rune-overlay5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay50.png b/mindus/assets/blocks/characters/rune-overlay50.png
deleted file mode 100644
index fc1d6ee..0000000
--- a/mindus/assets/blocks/characters/rune-overlay50.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay51.png b/mindus/assets/blocks/characters/rune-overlay51.png
deleted file mode 100644
index 5a6fd41..0000000
--- a/mindus/assets/blocks/characters/rune-overlay51.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay52.png b/mindus/assets/blocks/characters/rune-overlay52.png
deleted file mode 100644
index 7afee30..0000000
--- a/mindus/assets/blocks/characters/rune-overlay52.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay53.png b/mindus/assets/blocks/characters/rune-overlay53.png
deleted file mode 100644
index 4dba710..0000000
--- a/mindus/assets/blocks/characters/rune-overlay53.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay54.png b/mindus/assets/blocks/characters/rune-overlay54.png
deleted file mode 100644
index b6e7ed9..0000000
--- a/mindus/assets/blocks/characters/rune-overlay54.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay55.png b/mindus/assets/blocks/characters/rune-overlay55.png
deleted file mode 100644
index c1b5041..0000000
--- a/mindus/assets/blocks/characters/rune-overlay55.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay56.png b/mindus/assets/blocks/characters/rune-overlay56.png
deleted file mode 100644
index c6b6cc8..0000000
--- a/mindus/assets/blocks/characters/rune-overlay56.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay57.png b/mindus/assets/blocks/characters/rune-overlay57.png
deleted file mode 100644
index 05a1ee9..0000000
--- a/mindus/assets/blocks/characters/rune-overlay57.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay58.png b/mindus/assets/blocks/characters/rune-overlay58.png
deleted file mode 100644
index d49ad16..0000000
--- a/mindus/assets/blocks/characters/rune-overlay58.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay59.png b/mindus/assets/blocks/characters/rune-overlay59.png
deleted file mode 100644
index 83b38b1..0000000
--- a/mindus/assets/blocks/characters/rune-overlay59.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay6.png b/mindus/assets/blocks/characters/rune-overlay6.png
deleted file mode 100644
index d21ba0e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay60.png b/mindus/assets/blocks/characters/rune-overlay60.png
deleted file mode 100644
index 50fd227..0000000
--- a/mindus/assets/blocks/characters/rune-overlay60.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay61.png b/mindus/assets/blocks/characters/rune-overlay61.png
deleted file mode 100644
index e85ae24..0000000
--- a/mindus/assets/blocks/characters/rune-overlay61.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay62.png b/mindus/assets/blocks/characters/rune-overlay62.png
deleted file mode 100644
index 3588ba2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay62.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay63.png b/mindus/assets/blocks/characters/rune-overlay63.png
deleted file mode 100644
index 5e8b9eb..0000000
--- a/mindus/assets/blocks/characters/rune-overlay63.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay64.png b/mindus/assets/blocks/characters/rune-overlay64.png
deleted file mode 100644
index c0dae86..0000000
--- a/mindus/assets/blocks/characters/rune-overlay64.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay65.png b/mindus/assets/blocks/characters/rune-overlay65.png
deleted file mode 100644
index a3665ab..0000000
--- a/mindus/assets/blocks/characters/rune-overlay65.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay66.png b/mindus/assets/blocks/characters/rune-overlay66.png
deleted file mode 100644
index 43f7aeb..0000000
--- a/mindus/assets/blocks/characters/rune-overlay66.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay67.png b/mindus/assets/blocks/characters/rune-overlay67.png
deleted file mode 100644
index baa6d33..0000000
--- a/mindus/assets/blocks/characters/rune-overlay67.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay68.png b/mindus/assets/blocks/characters/rune-overlay68.png
deleted file mode 100644
index ba53de2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay68.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay69.png b/mindus/assets/blocks/characters/rune-overlay69.png
deleted file mode 100644
index 1242827..0000000
--- a/mindus/assets/blocks/characters/rune-overlay69.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay7.png b/mindus/assets/blocks/characters/rune-overlay7.png
deleted file mode 100644
index 23bac5d..0000000
--- a/mindus/assets/blocks/characters/rune-overlay7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay70.png b/mindus/assets/blocks/characters/rune-overlay70.png
deleted file mode 100644
index 45e8a86..0000000
--- a/mindus/assets/blocks/characters/rune-overlay70.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay71.png b/mindus/assets/blocks/characters/rune-overlay71.png
deleted file mode 100644
index d95cfe2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay71.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay72.png b/mindus/assets/blocks/characters/rune-overlay72.png
deleted file mode 100644
index 2ddde55..0000000
--- a/mindus/assets/blocks/characters/rune-overlay72.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay73.png b/mindus/assets/blocks/characters/rune-overlay73.png
deleted file mode 100644
index 76e1d13..0000000
--- a/mindus/assets/blocks/characters/rune-overlay73.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay74.png b/mindus/assets/blocks/characters/rune-overlay74.png
deleted file mode 100644
index f577cde..0000000
--- a/mindus/assets/blocks/characters/rune-overlay74.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay75.png b/mindus/assets/blocks/characters/rune-overlay75.png
deleted file mode 100644
index df89b7e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay75.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay76.png b/mindus/assets/blocks/characters/rune-overlay76.png
deleted file mode 100644
index 4180b2c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay76.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay77.png b/mindus/assets/blocks/characters/rune-overlay77.png
deleted file mode 100644
index d66113b..0000000
--- a/mindus/assets/blocks/characters/rune-overlay77.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay78.png b/mindus/assets/blocks/characters/rune-overlay78.png
deleted file mode 100644
index 458b52f..0000000
--- a/mindus/assets/blocks/characters/rune-overlay78.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay79.png b/mindus/assets/blocks/characters/rune-overlay79.png
deleted file mode 100644
index c423c4c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay79.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay8.png b/mindus/assets/blocks/characters/rune-overlay8.png
deleted file mode 100644
index 5318fab..0000000
--- a/mindus/assets/blocks/characters/rune-overlay8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay80.png b/mindus/assets/blocks/characters/rune-overlay80.png
deleted file mode 100644
index 158f09e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay80.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay81.png b/mindus/assets/blocks/characters/rune-overlay81.png
deleted file mode 100644
index 106eb5e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay81.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay82.png b/mindus/assets/blocks/characters/rune-overlay82.png
deleted file mode 100644
index 1735b2c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay82.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay83.png b/mindus/assets/blocks/characters/rune-overlay83.png
deleted file mode 100644
index 17a2693..0000000
--- a/mindus/assets/blocks/characters/rune-overlay83.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay84.png b/mindus/assets/blocks/characters/rune-overlay84.png
deleted file mode 100644
index 39bf525..0000000
--- a/mindus/assets/blocks/characters/rune-overlay84.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay85.png b/mindus/assets/blocks/characters/rune-overlay85.png
deleted file mode 100644
index 04c8228..0000000
--- a/mindus/assets/blocks/characters/rune-overlay85.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay86.png b/mindus/assets/blocks/characters/rune-overlay86.png
deleted file mode 100644
index 1c75129..0000000
--- a/mindus/assets/blocks/characters/rune-overlay86.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay87.png b/mindus/assets/blocks/characters/rune-overlay87.png
deleted file mode 100644
index f3137e2..0000000
--- a/mindus/assets/blocks/characters/rune-overlay87.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay88.png b/mindus/assets/blocks/characters/rune-overlay88.png
deleted file mode 100644
index 9f58b32..0000000
--- a/mindus/assets/blocks/characters/rune-overlay88.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay89.png b/mindus/assets/blocks/characters/rune-overlay89.png
deleted file mode 100644
index 87e13e0..0000000
--- a/mindus/assets/blocks/characters/rune-overlay89.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay9.png b/mindus/assets/blocks/characters/rune-overlay9.png
deleted file mode 100644
index 2148e25..0000000
--- a/mindus/assets/blocks/characters/rune-overlay9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay90.png b/mindus/assets/blocks/characters/rune-overlay90.png
deleted file mode 100644
index 3624c48..0000000
--- a/mindus/assets/blocks/characters/rune-overlay90.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay91.png b/mindus/assets/blocks/characters/rune-overlay91.png
deleted file mode 100644
index b1b9739..0000000
--- a/mindus/assets/blocks/characters/rune-overlay91.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay92.png b/mindus/assets/blocks/characters/rune-overlay92.png
deleted file mode 100644
index e703928..0000000
--- a/mindus/assets/blocks/characters/rune-overlay92.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay93.png b/mindus/assets/blocks/characters/rune-overlay93.png
deleted file mode 100644
index d15e35e..0000000
--- a/mindus/assets/blocks/characters/rune-overlay93.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay94.png b/mindus/assets/blocks/characters/rune-overlay94.png
deleted file mode 100644
index 0d5f8f1..0000000
--- a/mindus/assets/blocks/characters/rune-overlay94.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay95.png b/mindus/assets/blocks/characters/rune-overlay95.png
deleted file mode 100644
index b1b168c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay95.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay96.png b/mindus/assets/blocks/characters/rune-overlay96.png
deleted file mode 100644
index 3972fbc..0000000
--- a/mindus/assets/blocks/characters/rune-overlay96.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay97.png b/mindus/assets/blocks/characters/rune-overlay97.png
deleted file mode 100644
index e8d044a..0000000
--- a/mindus/assets/blocks/characters/rune-overlay97.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay98.png b/mindus/assets/blocks/characters/rune-overlay98.png
deleted file mode 100644
index d8c7bee..0000000
--- a/mindus/assets/blocks/characters/rune-overlay98.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/characters/rune-overlay99.png b/mindus/assets/blocks/characters/rune-overlay99.png
deleted file mode 100644
index 1e3dc3c..0000000
--- a/mindus/assets/blocks/characters/rune-overlay99.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/build-tower.png b/mindus/assets/blocks/defense/build-tower.png
deleted file mode 100644
index 44f6219..0000000
--- a/mindus/assets/blocks/defense/build-tower.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/force-projector.png b/mindus/assets/blocks/defense/force-projector.png
deleted file mode 100644
index 69ef992..0000000
--- a/mindus/assets/blocks/defense/force-projector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/large-shield-projector-team.png b/mindus/assets/blocks/defense/large-shield-projector-team.png
deleted file mode 100644
index d369c30..0000000
--- a/mindus/assets/blocks/defense/large-shield-projector-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/large-shield-projector.png b/mindus/assets/blocks/defense/large-shield-projector.png
deleted file mode 100644
index 7c2c862..0000000
--- a/mindus/assets/blocks/defense/large-shield-projector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/mend-projector.png b/mindus/assets/blocks/defense/mend-projector.png
deleted file mode 100644
index 6fbdedc..0000000
--- a/mindus/assets/blocks/defense/mend-projector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/mender.png b/mindus/assets/blocks/defense/mender.png
deleted file mode 100644
index 019d224..0000000
--- a/mindus/assets/blocks/defense/mender.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/overdrive-dome.png b/mindus/assets/blocks/defense/overdrive-dome.png
deleted file mode 100644
index a27f18b..0000000
--- a/mindus/assets/blocks/defense/overdrive-dome.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/overdrive-projector.png b/mindus/assets/blocks/defense/overdrive-projector.png
deleted file mode 100644
index 0e91627..0000000
--- a/mindus/assets/blocks/defense/overdrive-projector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/regen-projector.png b/mindus/assets/blocks/defense/regen-projector.png
deleted file mode 100644
index c246600..0000000
--- a/mindus/assets/blocks/defense/regen-projector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/shield-projector.png b/mindus/assets/blocks/defense/shield-projector.png
deleted file mode 100644
index df7374e..0000000
--- a/mindus/assets/blocks/defense/shield-projector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/shock-mine-team-top.png b/mindus/assets/blocks/defense/shock-mine-team-top.png
deleted file mode 100644
index aa16dc3..0000000
--- a/mindus/assets/blocks/defense/shock-mine-team-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/defense/shockwave-tower.png b/mindus/assets/blocks/defense/shockwave-tower.png
deleted file mode 100644
index 25a1f24..0000000
--- a/mindus/assets/blocks/defense/shockwave-tower.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/bridge-arrow.png b/mindus/assets/blocks/distribution/bridge-arrow.png
deleted file mode 100644
index ea708c8..0000000
--- a/mindus/assets/blocks/distribution/bridge-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/bridge-conveyor-arrow.png b/mindus/assets/blocks/distribution/bridge-conveyor-arrow.png
deleted file mode 100644
index 2740e90..0000000
--- a/mindus/assets/blocks/distribution/bridge-conveyor-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/bridge-conveyor-bridge.png b/mindus/assets/blocks/distribution/bridge-conveyor-bridge.png
deleted file mode 100644
index c7b09d9..0000000
--- a/mindus/assets/blocks/distribution/bridge-conveyor-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/bridge-conveyor-end.png b/mindus/assets/blocks/distribution/bridge-conveyor-end.png
deleted file mode 100644
index 25ccdde..0000000
--- a/mindus/assets/blocks/distribution/bridge-conveyor-end.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/bridge-conveyor.png b/mindus/assets/blocks/distribution/bridge-conveyor.png
deleted file mode 100644
index b1a53c6..0000000
--- a/mindus/assets/blocks/distribution/bridge-conveyor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/center.png b/mindus/assets/blocks/distribution/center.png
deleted file mode 100644
index 7579691..0000000
--- a/mindus/assets/blocks/distribution/center.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png
deleted file mode 100644
index ddc867d..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png
deleted file mode 100644
index 03595e1..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png
deleted file mode 100644
index 5043934..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png
deleted file mode 100644
index d209c5b..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png
deleted file mode 100644
index 8c27096..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png
deleted file mode 100644
index e90c44d..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png
deleted file mode 100644
index 571a0d8..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png
deleted file mode 100644
index 48dd10e..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png
deleted file mode 100644
index ed13d44..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2-h.png
deleted file mode 100644
index df0bddb..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png
deleted file mode 100644
index ffa04ec..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png
deleted file mode 100644
index b15a6d6..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png
deleted file mode 100644
index eb76bd3..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png
deleted file mode 100644
index 0bb92f4..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png
deleted file mode 100644
index be686e7..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png
deleted file mode 100644
index 9dd21ed..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png
deleted file mode 100644
index 22a56fe..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png
deleted file mode 100644
index 21ebc71..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png
deleted file mode 100644
index aee031c..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png
deleted file mode 100644
index 304675d..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png
deleted file mode 100644
index ab40269..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png
deleted file mode 100644
index 8055767..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png
deleted file mode 100644
index c8bafb4..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png
deleted file mode 100644
index 1c3e100..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png
deleted file mode 100644
index f05cccc..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png
deleted file mode 100644
index 386c9c0..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png
deleted file mode 100644
index bfa7c8c..0000000
--- a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-0.png
deleted file mode 100644
index 5183db1..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-1.png
deleted file mode 100644
index 7389c94..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-2.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-2.png
deleted file mode 100644
index 0030870..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-3.png
deleted file mode 100644
index 9580d6e..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.png
deleted file mode 100644
index 7928ed9..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-0.png
deleted file mode 100644
index 08b63fa..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.png
deleted file mode 100644
index 2d8ba7d..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.png
deleted file mode 100644
index 93dbcfa..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1.png
deleted file mode 100644
index 9611e68..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.png
deleted file mode 100644
index cd37f16..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-2.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-2.png
deleted file mode 100644
index d9be4bf..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.png
deleted file mode 100644
index eea615a..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.png
deleted file mode 100644
index 16dacf3..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0.png
deleted file mode 100644
index 721cb2b..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.png
deleted file mode 100644
index 96e0b30..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-1.png
deleted file mode 100644
index e66aaf6..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-2.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-2.png
deleted file mode 100644
index 3681c62..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.png
deleted file mode 100644
index 1817c05..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-3.png
deleted file mode 100644
index 385528a..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.png
deleted file mode 100644
index 3c2d6ed..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-0.png
deleted file mode 100644
index 5734a72..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-1.png
deleted file mode 100644
index 743e834..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-3.png
deleted file mode 100644
index 54008b5..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-4-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-4-1.png
deleted file mode 100644
index c2c31d5..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-4-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-4-3.png
deleted file mode 100644
index 4573bda..0000000
--- a/mindus/assets/blocks/distribution/conveyors/conveyor-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png
deleted file mode 100644
index 0f1aecb..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png
deleted file mode 100644
index 9ec7ec7..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png
deleted file mode 100644
index dcdd5ae..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png
deleted file mode 100644
index ed690ac..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png
deleted file mode 100644
index 21fd562..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png
deleted file mode 100644
index e370aa6..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2-h.png
deleted file mode 100644
index 3888ce7..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png
deleted file mode 100644
index a47b05a..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png
deleted file mode 100644
index 6cba533..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png
deleted file mode 100644
index 7a10cdf..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png
deleted file mode 100644
index a3aa7a3..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png
deleted file mode 100644
index 6f4629f..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png
deleted file mode 100644
index 2125244..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png
deleted file mode 100644
index 50d8b09..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png
deleted file mode 100644
index 1506859..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png
deleted file mode 100644
index 0746226..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png
deleted file mode 100644
index 4af1e1c..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png
deleted file mode 100644
index 840a63e..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png
deleted file mode 100644
index 4f24d2a..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png
deleted file mode 100644
index 0a92002..0000000
--- a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-0.png
deleted file mode 100644
index ccd7a06..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-1.png
deleted file mode 100644
index 8a75a73..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-2.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-2.png
deleted file mode 100644
index d89d76e..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-3.png
deleted file mode 100644
index ad204f3..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-0-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-0-h.png
deleted file mode 100644
index b9d6bce..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-0.png
deleted file mode 100644
index 63a6c48..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-h.png
deleted file mode 100644
index 2104e28..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-v.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-v.png
deleted file mode 100644
index 4a22d5b..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1.png
deleted file mode 100644
index 29b47b0..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-2-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-2-h.png
deleted file mode 100644
index c6c3cbf..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-2.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-2.png
deleted file mode 100644
index 819cb63..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-3.png
deleted file mode 100644
index ef7d864..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-h.png
deleted file mode 100644
index 2937ad7..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-v.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-v.png
deleted file mode 100644
index dd5c2d1..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0.png
deleted file mode 100644
index e6df835..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-1-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-1-h.png
deleted file mode 100644
index 077c9b9..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-1.png
deleted file mode 100644
index 9086194..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-2.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-2.png
deleted file mode 100644
index aae911e..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-3-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-3-h.png
deleted file mode 100644
index 5587009..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-3.png
deleted file mode 100644
index 14ce864..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-0-h.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-0-h.png
deleted file mode 100644
index 1ba0792..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-0.png
deleted file mode 100644
index e760e24..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-1.png
deleted file mode 100644
index 78402ae..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-3.png
deleted file mode 100644
index b7ae486..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-4-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-4-1.png
deleted file mode 100644
index dc1c0c1..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-4-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-4-3.png
deleted file mode 100644
index efac19e..0000000
--- a/mindus/assets/blocks/distribution/ducts/armored-duct-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-0.png b/mindus/assets/blocks/distribution/ducts/duct-0-0.png
deleted file mode 100644
index 6f3b636..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-1.png b/mindus/assets/blocks/distribution/ducts/duct-0-1.png
deleted file mode 100644
index 8b24d1f..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-2.png b/mindus/assets/blocks/distribution/ducts/duct-0-2.png
deleted file mode 100644
index 5b61fdd..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-3.png b/mindus/assets/blocks/distribution/ducts/duct-0-3.png
deleted file mode 100644
index 372e0af..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-0-h.png b/mindus/assets/blocks/distribution/ducts/duct-1-0-h.png
deleted file mode 100644
index 2db6afd..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-0.png b/mindus/assets/blocks/distribution/ducts/duct-1-0.png
deleted file mode 100644
index 8b2723a..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-1-h.png b/mindus/assets/blocks/distribution/ducts/duct-1-1-h.png
deleted file mode 100644
index 845d114..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-1-v.png b/mindus/assets/blocks/distribution/ducts/duct-1-1-v.png
deleted file mode 100644
index cb9b2af..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-1.png b/mindus/assets/blocks/distribution/ducts/duct-1-1.png
deleted file mode 100644
index cf8eebf..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-2-h.png b/mindus/assets/blocks/distribution/ducts/duct-1-2-h.png
deleted file mode 100644
index 872b989..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-2.png b/mindus/assets/blocks/distribution/ducts/duct-1-2.png
deleted file mode 100644
index c67a087..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-3.png b/mindus/assets/blocks/distribution/ducts/duct-1-3.png
deleted file mode 100644
index 77951fd..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-0-h.png b/mindus/assets/blocks/distribution/ducts/duct-2-0-h.png
deleted file mode 100644
index 92b36be..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-0-v.png b/mindus/assets/blocks/distribution/ducts/duct-2-0-v.png
deleted file mode 100644
index ebc4aad..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-0.png b/mindus/assets/blocks/distribution/ducts/duct-2-0.png
deleted file mode 100644
index 8963650..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-1-h.png b/mindus/assets/blocks/distribution/ducts/duct-2-1-h.png
deleted file mode 100644
index dde07de..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-1.png b/mindus/assets/blocks/distribution/ducts/duct-2-1.png
deleted file mode 100644
index 7ae058a..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-2.png b/mindus/assets/blocks/distribution/ducts/duct-2-2.png
deleted file mode 100644
index a7ff8fe..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-3-h.png b/mindus/assets/blocks/distribution/ducts/duct-2-3-h.png
deleted file mode 100644
index 7f838f3..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-3.png b/mindus/assets/blocks/distribution/ducts/duct-2-3.png
deleted file mode 100644
index 09fe070..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-0-h.png b/mindus/assets/blocks/distribution/ducts/duct-3-0-h.png
deleted file mode 100644
index 771dba4..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-0.png b/mindus/assets/blocks/distribution/ducts/duct-3-0.png
deleted file mode 100644
index c89b476..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-1.png b/mindus/assets/blocks/distribution/ducts/duct-3-1.png
deleted file mode 100644
index 2a4c902..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-3.png b/mindus/assets/blocks/distribution/ducts/duct-3-3.png
deleted file mode 100644
index 1cd719b..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-4-0.png b/mindus/assets/blocks/distribution/ducts/duct-4-0.png
deleted file mode 100644
index 8f07d03..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-4-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-4-1.png b/mindus/assets/blocks/distribution/ducts/duct-4-1.png
deleted file mode 100644
index 584da12..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-4-3.png b/mindus/assets/blocks/distribution/ducts/duct-4-3.png
deleted file mode 100644
index db314a6..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-base.png b/mindus/assets/blocks/distribution/ducts/duct-base.png
deleted file mode 100644
index 58d266d..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-base.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.png
deleted file mode 100644
index 78bb451..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png
deleted file mode 100644
index 15da706..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.png
deleted file mode 100644
index 62b944a..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-dir.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-dir.png
deleted file mode 100644
index bdc7975..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-bridge-dir.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge.png b/mindus/assets/blocks/distribution/ducts/duct-bridge.png
deleted file mode 100644
index 29cf409..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-router.png b/mindus/assets/blocks/distribution/ducts/duct-router.png
deleted file mode 100644
index 29cf409..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-router.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.png b/mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.png
deleted file mode 100644
index 9af78ca..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-unloader-top.png b/mindus/assets/blocks/distribution/ducts/duct-unloader-top.png
deleted file mode 100644
index 8e78864..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-unloader-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/duct-unloader.png b/mindus/assets/blocks/distribution/ducts/duct-unloader.png
deleted file mode 100644
index 71e5674..0000000
--- a/mindus/assets/blocks/distribution/ducts/duct-unloader.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/surge-router.png b/mindus/assets/blocks/distribution/ducts/surge-router.png
deleted file mode 100644
index 0d61b11..0000000
--- a/mindus/assets/blocks/distribution/ducts/surge-router.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/ducts/top.png b/mindus/assets/blocks/distribution/ducts/top.png
deleted file mode 100644
index d0315ef..0000000
--- a/mindus/assets/blocks/distribution/ducts/top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/inverted-sorter.png b/mindus/assets/blocks/distribution/inverted-sorter.png
deleted file mode 100644
index 9cdc258..0000000
--- a/mindus/assets/blocks/distribution/inverted-sorter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/item-source.png b/mindus/assets/blocks/distribution/item-source.png
deleted file mode 100644
index f0a8b3f..0000000
--- a/mindus/assets/blocks/distribution/item-source.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/item-void.png b/mindus/assets/blocks/distribution/item-void.png
deleted file mode 100644
index 30b0834..0000000
--- a/mindus/assets/blocks/distribution/item-void.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/mass-driver-base.png b/mindus/assets/blocks/distribution/mass-driver-base.png
deleted file mode 100644
index 4f263c9..0000000
--- a/mindus/assets/blocks/distribution/mass-driver-base.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/mass-driver.png b/mindus/assets/blocks/distribution/mass-driver.png
deleted file mode 100644
index 9c0e632..0000000
--- a/mindus/assets/blocks/distribution/mass-driver.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/overflow-gate.png b/mindus/assets/blocks/distribution/overflow-gate.png
deleted file mode 100644
index 3e626c0..0000000
--- a/mindus/assets/blocks/distribution/overflow-gate.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/phase-conveyor-arrow.png b/mindus/assets/blocks/distribution/phase-conveyor-arrow.png
deleted file mode 100644
index ec3654c..0000000
--- a/mindus/assets/blocks/distribution/phase-conveyor-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/phase-conveyor-bridge.png b/mindus/assets/blocks/distribution/phase-conveyor-bridge.png
deleted file mode 100644
index 9c51a42..0000000
--- a/mindus/assets/blocks/distribution/phase-conveyor-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/phase-conveyor-end.png b/mindus/assets/blocks/distribution/phase-conveyor-end.png
deleted file mode 100644
index 3692778..0000000
--- a/mindus/assets/blocks/distribution/phase-conveyor-end.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/phase-conveyor.png b/mindus/assets/blocks/distribution/phase-conveyor.png
deleted file mode 100644
index 415b83d..0000000
--- a/mindus/assets/blocks/distribution/phase-conveyor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/sorter.png b/mindus/assets/blocks/distribution/sorter.png
deleted file mode 100644
index a0c2321..0000000
--- a/mindus/assets/blocks/distribution/sorter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
deleted file mode 100644
index b597da7..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
deleted file mode 100644
index 7aeacc7..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
deleted file mode 100644
index 0c8c484..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png
deleted file mode 100644
index f98e3c9..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png
deleted file mode 100644
index 7fc91a5..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png
deleted file mode 100644
index 2d1e2a7..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png
deleted file mode 100644
index febbed5..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
deleted file mode 100644
index 8f63f2a..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
deleted file mode 100644
index ec328ab..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png
deleted file mode 100644
index ec10480..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png
deleted file mode 100644
index f12784a..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png
deleted file mode 100644
index 983da52..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png
deleted file mode 100644
index 767a05f..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
deleted file mode 100644
index 6cdcac9..0000000
--- a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/underflow-gate.png b/mindus/assets/blocks/distribution/underflow-gate.png
deleted file mode 100644
index c875229..0000000
--- a/mindus/assets/blocks/distribution/underflow-gate.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/unit-cargo-unload-point-top.png b/mindus/assets/blocks/distribution/unit-cargo-unload-point-top.png
deleted file mode 100644
index a960f5d..0000000
--- a/mindus/assets/blocks/distribution/unit-cargo-unload-point-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/distribution/unit-cargo-unload-point.png b/mindus/assets/blocks/distribution/unit-cargo-unload-point.png
deleted file mode 100644
index a870a8d..0000000
--- a/mindus/assets/blocks/distribution/unit-cargo-unload-point.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/blast-drill.png b/mindus/assets/blocks/drills/blast-drill.png
deleted file mode 100644
index 0867bce..0000000
--- a/mindus/assets/blocks/drills/blast-drill.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/cliff-crusher-rotator.png b/mindus/assets/blocks/drills/cliff-crusher-rotator.png
deleted file mode 100644
index 40c4077..0000000
--- a/mindus/assets/blocks/drills/cliff-crusher-rotator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/cliff-crusher.png b/mindus/assets/blocks/drills/cliff-crusher.png
deleted file mode 100644
index f6c8c1a..0000000
--- a/mindus/assets/blocks/drills/cliff-crusher.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/eruption-drill.png b/mindus/assets/blocks/drills/eruption-drill.png
deleted file mode 100644
index 24c3ab3..0000000
--- a/mindus/assets/blocks/drills/eruption-drill.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/impact-drill.png b/mindus/assets/blocks/drills/impact-drill.png
deleted file mode 100644
index 40ad1b6..0000000
--- a/mindus/assets/blocks/drills/impact-drill.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/large-cliff-crusher-top.png b/mindus/assets/blocks/drills/large-cliff-crusher-top.png
deleted file mode 100644
index ac0a2a3..0000000
--- a/mindus/assets/blocks/drills/large-cliff-crusher-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/large-cliff-crusher.png b/mindus/assets/blocks/drills/large-cliff-crusher.png
deleted file mode 100644
index c475da0..0000000
--- a/mindus/assets/blocks/drills/large-cliff-crusher.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/large-plasma-bore-top.png b/mindus/assets/blocks/drills/large-plasma-bore-top.png
deleted file mode 100644
index 7eb8a48..0000000
--- a/mindus/assets/blocks/drills/large-plasma-bore-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/large-plasma-bore.png b/mindus/assets/blocks/drills/large-plasma-bore.png
deleted file mode 100644
index 1dffdd6..0000000
--- a/mindus/assets/blocks/drills/large-plasma-bore.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/laser-drill.png b/mindus/assets/blocks/drills/laser-drill.png
deleted file mode 100644
index 25180d0..0000000
--- a/mindus/assets/blocks/drills/laser-drill.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/mechanical-drill.png b/mindus/assets/blocks/drills/mechanical-drill.png
deleted file mode 100644
index 3df3745..0000000
--- a/mindus/assets/blocks/drills/mechanical-drill.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/oil-extractor.png b/mindus/assets/blocks/drills/oil-extractor.png
deleted file mode 100644
index bb31a49..0000000
--- a/mindus/assets/blocks/drills/oil-extractor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/plasma-bore-top.png b/mindus/assets/blocks/drills/plasma-bore-top.png
deleted file mode 100644
index 3aa417c..0000000
--- a/mindus/assets/blocks/drills/plasma-bore-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/plasma-bore.png b/mindus/assets/blocks/drills/plasma-bore.png
deleted file mode 100644
index 223986f..0000000
--- a/mindus/assets/blocks/drills/plasma-bore.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/pneumatic-drill.png b/mindus/assets/blocks/drills/pneumatic-drill.png
deleted file mode 100644
index dbd2cc0..0000000
--- a/mindus/assets/blocks/drills/pneumatic-drill.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/vent-condenser.png b/mindus/assets/blocks/drills/vent-condenser.png
deleted file mode 100644
index fcadd48..0000000
--- a/mindus/assets/blocks/drills/vent-condenser.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/drills/water-extractor.png b/mindus/assets/blocks/drills/water-extractor.png
deleted file mode 100644
index 42b28f6..0000000
--- a/mindus/assets/blocks/drills/water-extractor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkycite-floor.png b/mindus/assets/blocks/environment/arkycite-floor.png
deleted file mode 100644
index e0d5732..0000000
--- a/mindus/assets/blocks/environment/arkycite-floor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-boulder1.png b/mindus/assets/blocks/environment/arkyic-boulder1.png
deleted file mode 100644
index f31b289..0000000
--- a/mindus/assets/blocks/environment/arkyic-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-boulder2.png b/mindus/assets/blocks/environment/arkyic-boulder2.png
deleted file mode 100644
index 22e6ccd..0000000
--- a/mindus/assets/blocks/environment/arkyic-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-boulder3.png b/mindus/assets/blocks/environment/arkyic-boulder3.png
deleted file mode 100644
index fda485e..0000000
--- a/mindus/assets/blocks/environment/arkyic-boulder3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-stone1.png b/mindus/assets/blocks/environment/arkyic-stone1.png
deleted file mode 100644
index e25f347..0000000
--- a/mindus/assets/blocks/environment/arkyic-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-stone2.png b/mindus/assets/blocks/environment/arkyic-stone2.png
deleted file mode 100644
index 5ed8b4c..0000000
--- a/mindus/assets/blocks/environment/arkyic-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-stone3.png b/mindus/assets/blocks/environment/arkyic-stone3.png
deleted file mode 100644
index a16a58a..0000000
--- a/mindus/assets/blocks/environment/arkyic-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-vent1.png b/mindus/assets/blocks/environment/arkyic-vent1.png
deleted file mode 100644
index 5f6a480..0000000
--- a/mindus/assets/blocks/environment/arkyic-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-vent2.png b/mindus/assets/blocks/environment/arkyic-vent2.png
deleted file mode 100644
index 10ec406..0000000
--- a/mindus/assets/blocks/environment/arkyic-vent2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-wall-large.png b/mindus/assets/blocks/environment/arkyic-wall-large.png
deleted file mode 100644
index 55dc3ae..0000000
--- a/mindus/assets/blocks/environment/arkyic-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-wall1.png b/mindus/assets/blocks/environment/arkyic-wall1.png
deleted file mode 100644
index 83dceed..0000000
--- a/mindus/assets/blocks/environment/arkyic-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-wall2.png b/mindus/assets/blocks/environment/arkyic-wall2.png
deleted file mode 100644
index 0abd6ae..0000000
--- a/mindus/assets/blocks/environment/arkyic-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/arkyic-wall3.png b/mindus/assets/blocks/environment/arkyic-wall3.png
deleted file mode 100644
index 23a66e9..0000000
--- a/mindus/assets/blocks/environment/arkyic-wall3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/basalt-boulder1.png b/mindus/assets/blocks/environment/basalt-boulder1.png
deleted file mode 100644
index dc52a70..0000000
--- a/mindus/assets/blocks/environment/basalt-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/basalt-boulder2.png b/mindus/assets/blocks/environment/basalt-boulder2.png
deleted file mode 100644
index dfee5c7..0000000
--- a/mindus/assets/blocks/environment/basalt-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/basalt-vent1.png b/mindus/assets/blocks/environment/basalt-vent1.png
deleted file mode 100644
index 416a2fd..0000000
--- a/mindus/assets/blocks/environment/basalt-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/basalt1.png b/mindus/assets/blocks/environment/basalt1.png
deleted file mode 100644
index cf15a4e..0000000
--- a/mindus/assets/blocks/environment/basalt1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/basalt2.png b/mindus/assets/blocks/environment/basalt2.png
deleted file mode 100644
index db27743..0000000
--- a/mindus/assets/blocks/environment/basalt2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/basalt3.png b/mindus/assets/blocks/environment/basalt3.png
deleted file mode 100644
index 26ea402..0000000
--- a/mindus/assets/blocks/environment/basalt3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-boulder1.png b/mindus/assets/blocks/environment/beryllic-boulder1.png
deleted file mode 100644
index b9eaa44..0000000
--- a/mindus/assets/blocks/environment/beryllic-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-boulder2.png b/mindus/assets/blocks/environment/beryllic-boulder2.png
deleted file mode 100644
index ff5a723..0000000
--- a/mindus/assets/blocks/environment/beryllic-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone-wall-large.png b/mindus/assets/blocks/environment/beryllic-stone-wall-large.png
deleted file mode 100644
index e660522..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone-wall1.png b/mindus/assets/blocks/environment/beryllic-stone-wall1.png
deleted file mode 100644
index 5203226..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone-wall2.png b/mindus/assets/blocks/environment/beryllic-stone-wall2.png
deleted file mode 100644
index e936059..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone1.png b/mindus/assets/blocks/environment/beryllic-stone1.png
deleted file mode 100644
index 31da580..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone2.png b/mindus/assets/blocks/environment/beryllic-stone2.png
deleted file mode 100644
index e5c57ce..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone3.png b/mindus/assets/blocks/environment/beryllic-stone3.png
deleted file mode 100644
index e41a051..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/beryllic-stone4.png b/mindus/assets/blocks/environment/beryllic-stone4.png
deleted file mode 100644
index 9c67991..0000000
--- a/mindus/assets/blocks/environment/beryllic-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/bluemat1.png b/mindus/assets/blocks/environment/bluemat1.png
deleted file mode 100644
index f53787d..0000000
--- a/mindus/assets/blocks/environment/bluemat1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/bluemat2.png b/mindus/assets/blocks/environment/bluemat2.png
deleted file mode 100644
index d493309..0000000
--- a/mindus/assets/blocks/environment/bluemat2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/bluemat3.png b/mindus/assets/blocks/environment/bluemat3.png
deleted file mode 100644
index a4e955f..0000000
--- a/mindus/assets/blocks/environment/bluemat3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/boulder1.png b/mindus/assets/blocks/environment/boulder1.png
deleted file mode 100644
index 22d4929..0000000
--- a/mindus/assets/blocks/environment/boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/boulder2.png b/mindus/assets/blocks/environment/boulder2.png
deleted file mode 100644
index 8379417..0000000
--- a/mindus/assets/blocks/environment/boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-boulder1.png b/mindus/assets/blocks/environment/carbon-boulder1.png
deleted file mode 100644
index d48f298..0000000
--- a/mindus/assets/blocks/environment/carbon-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-boulder2.png b/mindus/assets/blocks/environment/carbon-boulder2.png
deleted file mode 100644
index a3ae84b..0000000
--- a/mindus/assets/blocks/environment/carbon-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-stone1.png b/mindus/assets/blocks/environment/carbon-stone1.png
deleted file mode 100644
index 241cc18..0000000
--- a/mindus/assets/blocks/environment/carbon-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-stone2.png b/mindus/assets/blocks/environment/carbon-stone2.png
deleted file mode 100644
index 90c80b1..0000000
--- a/mindus/assets/blocks/environment/carbon-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-stone3.png b/mindus/assets/blocks/environment/carbon-stone3.png
deleted file mode 100644
index dc56e9c..0000000
--- a/mindus/assets/blocks/environment/carbon-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-stone4.png b/mindus/assets/blocks/environment/carbon-stone4.png
deleted file mode 100644
index 9a2a163..0000000
--- a/mindus/assets/blocks/environment/carbon-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-vent.png b/mindus/assets/blocks/environment/carbon-vent.png
deleted file mode 100644
index 583fe20..0000000
--- a/mindus/assets/blocks/environment/carbon-vent.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-vent1.png b/mindus/assets/blocks/environment/carbon-vent1.png
deleted file mode 100644
index ccbf2f7..0000000
--- a/mindus/assets/blocks/environment/carbon-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-vent2.png b/mindus/assets/blocks/environment/carbon-vent2.png
deleted file mode 100644
index a87225c..0000000
--- a/mindus/assets/blocks/environment/carbon-vent2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-wall-large.png b/mindus/assets/blocks/environment/carbon-wall-large.png
deleted file mode 100644
index 8367461..0000000
--- a/mindus/assets/blocks/environment/carbon-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-wall1.png b/mindus/assets/blocks/environment/carbon-wall1.png
deleted file mode 100644
index 9558777..0000000
--- a/mindus/assets/blocks/environment/carbon-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/carbon-wall2.png b/mindus/assets/blocks/environment/carbon-wall2.png
deleted file mode 100644
index 98a5334..0000000
--- a/mindus/assets/blocks/environment/carbon-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/char1.png b/mindus/assets/blocks/environment/char1.png
deleted file mode 100644
index 94ce8df..0000000
--- a/mindus/assets/blocks/environment/char1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/char2.png b/mindus/assets/blocks/environment/char2.png
deleted file mode 100644
index 47db29c..0000000
--- a/mindus/assets/blocks/environment/char2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/char3.png b/mindus/assets/blocks/environment/char3.png
deleted file mode 100644
index be117bb..0000000
--- a/mindus/assets/blocks/environment/char3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/core-zone.png b/mindus/assets/blocks/environment/core-zone.png
deleted file mode 100644
index 8b3e389..0000000
--- a/mindus/assets/blocks/environment/core-zone.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crater-stone1.png b/mindus/assets/blocks/environment/crater-stone1.png
deleted file mode 100644
index 0cd39f7..0000000
--- a/mindus/assets/blocks/environment/crater-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crater-stone2.png b/mindus/assets/blocks/environment/crater-stone2.png
deleted file mode 100644
index 48c8560..0000000
--- a/mindus/assets/blocks/environment/crater-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crater-stone3.png b/mindus/assets/blocks/environment/crater-stone3.png
deleted file mode 100644
index a5246a5..0000000
--- a/mindus/assets/blocks/environment/crater-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crater-stone4.png b/mindus/assets/blocks/environment/crater-stone4.png
deleted file mode 100644
index 24ccffa..0000000
--- a/mindus/assets/blocks/environment/crater-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crater-stone5.png b/mindus/assets/blocks/environment/crater-stone5.png
deleted file mode 100644
index f9407bb..0000000
--- a/mindus/assets/blocks/environment/crater-stone5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crater-stone6.png b/mindus/assets/blocks/environment/crater-stone6.png
deleted file mode 100644
index 632d3ef..0000000
--- a/mindus/assets/blocks/environment/crater-stone6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-blocks1.png b/mindus/assets/blocks/environment/crystal-blocks1.png
deleted file mode 100644
index a65944b..0000000
--- a/mindus/assets/blocks/environment/crystal-blocks1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-blocks2.png b/mindus/assets/blocks/environment/crystal-blocks2.png
deleted file mode 100644
index 0ccf6f7..0000000
--- a/mindus/assets/blocks/environment/crystal-blocks2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-blocks3.png b/mindus/assets/blocks/environment/crystal-blocks3.png
deleted file mode 100644
index e90907b..0000000
--- a/mindus/assets/blocks/environment/crystal-blocks3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-cluster1.png b/mindus/assets/blocks/environment/crystal-cluster1.png
deleted file mode 100644
index 946cbdc..0000000
--- a/mindus/assets/blocks/environment/crystal-cluster1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-cluster2.png b/mindus/assets/blocks/environment/crystal-cluster2.png
deleted file mode 100644
index 2e1e8ef..0000000
--- a/mindus/assets/blocks/environment/crystal-cluster2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-cluster3.png b/mindus/assets/blocks/environment/crystal-cluster3.png
deleted file mode 100644
index b1a6f40..0000000
--- a/mindus/assets/blocks/environment/crystal-cluster3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-floor2.png b/mindus/assets/blocks/environment/crystal-floor2.png
deleted file mode 100644
index 545c355..0000000
--- a/mindus/assets/blocks/environment/crystal-floor2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-floor3.png b/mindus/assets/blocks/environment/crystal-floor3.png
deleted file mode 100644
index 824898f..0000000
--- a/mindus/assets/blocks/environment/crystal-floor3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-floor4.png b/mindus/assets/blocks/environment/crystal-floor4.png
deleted file mode 100644
index 3ed7a8b..0000000
--- a/mindus/assets/blocks/environment/crystal-floor4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-orbs1.png b/mindus/assets/blocks/environment/crystal-orbs1.png
deleted file mode 100644
index 945acb3..0000000
--- a/mindus/assets/blocks/environment/crystal-orbs1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-orbs2.png b/mindus/assets/blocks/environment/crystal-orbs2.png
deleted file mode 100644
index fb91877..0000000
--- a/mindus/assets/blocks/environment/crystal-orbs2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystal-orbs3.png b/mindus/assets/blocks/environment/crystal-orbs3.png
deleted file mode 100644
index f66e334..0000000
--- a/mindus/assets/blocks/environment/crystal-orbs3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-boulder1.png b/mindus/assets/blocks/environment/crystalline-boulder1.png
deleted file mode 100644
index 3625fcf..0000000
--- a/mindus/assets/blocks/environment/crystalline-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-boulder2.png b/mindus/assets/blocks/environment/crystalline-boulder2.png
deleted file mode 100644
index 621efab..0000000
--- a/mindus/assets/blocks/environment/crystalline-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall-large.png b/mindus/assets/blocks/environment/crystalline-stone-wall-large.png
deleted file mode 100644
index 9d146ea..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall1.png b/mindus/assets/blocks/environment/crystalline-stone-wall1.png
deleted file mode 100644
index a2c90a5..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall2.png b/mindus/assets/blocks/environment/crystalline-stone-wall2.png
deleted file mode 100644
index 565eee9..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall3.png b/mindus/assets/blocks/environment/crystalline-stone-wall3.png
deleted file mode 100644
index 20e4299..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone-wall3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall4.png b/mindus/assets/blocks/environment/crystalline-stone-wall4.png
deleted file mode 100644
index 4d9b5d8..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone-wall4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone1.png b/mindus/assets/blocks/environment/crystalline-stone1.png
deleted file mode 100644
index 578de4b..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone2.png b/mindus/assets/blocks/environment/crystalline-stone2.png
deleted file mode 100644
index d4bba9b..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone3.png b/mindus/assets/blocks/environment/crystalline-stone3.png
deleted file mode 100644
index 5e53179..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone4.png b/mindus/assets/blocks/environment/crystalline-stone4.png
deleted file mode 100644
index 22ce7a7..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-stone5.png b/mindus/assets/blocks/environment/crystalline-stone5.png
deleted file mode 100644
index 3963dbc..0000000
--- a/mindus/assets/blocks/environment/crystalline-stone5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-vent.png b/mindus/assets/blocks/environment/crystalline-vent.png
deleted file mode 100644
index a974831..0000000
--- a/mindus/assets/blocks/environment/crystalline-vent.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-vent1.png b/mindus/assets/blocks/environment/crystalline-vent1.png
deleted file mode 100644
index 1df332b..0000000
--- a/mindus/assets/blocks/environment/crystalline-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/crystalline-vent2.png b/mindus/assets/blocks/environment/crystalline-vent2.png
deleted file mode 100644
index 97f35eb..0000000
--- a/mindus/assets/blocks/environment/crystalline-vent2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite-boulder1.png b/mindus/assets/blocks/environment/dacite-boulder1.png
deleted file mode 100644
index 6d87dcd..0000000
--- a/mindus/assets/blocks/environment/dacite-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite-boulder2.png b/mindus/assets/blocks/environment/dacite-boulder2.png
deleted file mode 100644
index 6704524..0000000
--- a/mindus/assets/blocks/environment/dacite-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite-wall-large.png b/mindus/assets/blocks/environment/dacite-wall-large.png
deleted file mode 100644
index 12be810..0000000
--- a/mindus/assets/blocks/environment/dacite-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite-wall1.png b/mindus/assets/blocks/environment/dacite-wall1.png
deleted file mode 100644
index 40c36d0..0000000
--- a/mindus/assets/blocks/environment/dacite-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite-wall2.png b/mindus/assets/blocks/environment/dacite-wall2.png
deleted file mode 100644
index a4bae3e..0000000
--- a/mindus/assets/blocks/environment/dacite-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite1.png b/mindus/assets/blocks/environment/dacite1.png
deleted file mode 100644
index ef65267..0000000
--- a/mindus/assets/blocks/environment/dacite1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite2.png b/mindus/assets/blocks/environment/dacite2.png
deleted file mode 100644
index f9d9115..0000000
--- a/mindus/assets/blocks/environment/dacite2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dacite3.png b/mindus/assets/blocks/environment/dacite3.png
deleted file mode 100644
index 8a1621d..0000000
--- a/mindus/assets/blocks/environment/dacite3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-metal-large.png b/mindus/assets/blocks/environment/dark-metal-large.png
deleted file mode 100644
index a1efe07..0000000
--- a/mindus/assets/blocks/environment/dark-metal-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-metal1.png b/mindus/assets/blocks/environment/dark-metal1.png
deleted file mode 100644
index c284e63..0000000
--- a/mindus/assets/blocks/environment/dark-metal1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-metal2.png b/mindus/assets/blocks/environment/dark-metal2.png
deleted file mode 100644
index 207575a..0000000
--- a/mindus/assets/blocks/environment/dark-metal2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-panel-1.png b/mindus/assets/blocks/environment/dark-panel-1.png
deleted file mode 100644
index fe2683a..0000000
--- a/mindus/assets/blocks/environment/dark-panel-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-panel-2.png b/mindus/assets/blocks/environment/dark-panel-2.png
deleted file mode 100644
index e45e817..0000000
--- a/mindus/assets/blocks/environment/dark-panel-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-panel-3.png b/mindus/assets/blocks/environment/dark-panel-3.png
deleted file mode 100644
index 8734637..0000000
--- a/mindus/assets/blocks/environment/dark-panel-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-panel-4.png b/mindus/assets/blocks/environment/dark-panel-4.png
deleted file mode 100644
index cb277a0..0000000
--- a/mindus/assets/blocks/environment/dark-panel-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dark-panel-6.png b/mindus/assets/blocks/environment/dark-panel-6.png
deleted file mode 100644
index d3b9251..0000000
--- a/mindus/assets/blocks/environment/dark-panel-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/darksand-tainted-water.png b/mindus/assets/blocks/environment/darksand-tainted-water.png
deleted file mode 100644
index a687787..0000000
--- a/mindus/assets/blocks/environment/darksand-tainted-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/darksand-water.png b/mindus/assets/blocks/environment/darksand-water.png
deleted file mode 100644
index f2e6968..0000000
--- a/mindus/assets/blocks/environment/darksand-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/darksand1.png b/mindus/assets/blocks/environment/darksand1.png
deleted file mode 100644
index 91866e5..0000000
--- a/mindus/assets/blocks/environment/darksand1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/darksand2.png b/mindus/assets/blocks/environment/darksand2.png
deleted file mode 100644
index c8eb59e..0000000
--- a/mindus/assets/blocks/environment/darksand2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/darksand3.png b/mindus/assets/blocks/environment/darksand3.png
deleted file mode 100644
index c8ece42..0000000
--- a/mindus/assets/blocks/environment/darksand3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/deep-tainted-water.png b/mindus/assets/blocks/environment/deep-tainted-water.png
deleted file mode 100644
index f1f8a47..0000000
--- a/mindus/assets/blocks/environment/deep-tainted-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/deep-water.png b/mindus/assets/blocks/environment/deep-water.png
deleted file mode 100644
index a0d0e10..0000000
--- a/mindus/assets/blocks/environment/deep-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dense-red-stone1.png b/mindus/assets/blocks/environment/dense-red-stone1.png
deleted file mode 100644
index 05a3455..0000000
--- a/mindus/assets/blocks/environment/dense-red-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dense-red-stone2.png b/mindus/assets/blocks/environment/dense-red-stone2.png
deleted file mode 100644
index 6fe1899..0000000
--- a/mindus/assets/blocks/environment/dense-red-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dense-red-stone3.png b/mindus/assets/blocks/environment/dense-red-stone3.png
deleted file mode 100644
index a484201..0000000
--- a/mindus/assets/blocks/environment/dense-red-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dense-red-stone4.png b/mindus/assets/blocks/environment/dense-red-stone4.png
deleted file mode 100644
index dfa2ef8..0000000
--- a/mindus/assets/blocks/environment/dense-red-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dirt-wall-large.png b/mindus/assets/blocks/environment/dirt-wall-large.png
deleted file mode 100644
index db43337..0000000
--- a/mindus/assets/blocks/environment/dirt-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dirt-wall1.png b/mindus/assets/blocks/environment/dirt-wall1.png
deleted file mode 100644
index 6eb65e0..0000000
--- a/mindus/assets/blocks/environment/dirt-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dirt1.png b/mindus/assets/blocks/environment/dirt1.png
deleted file mode 100644
index 38f11e7..0000000
--- a/mindus/assets/blocks/environment/dirt1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dirt2.png b/mindus/assets/blocks/environment/dirt2.png
deleted file mode 100644
index e4aa286..0000000
--- a/mindus/assets/blocks/environment/dirt2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dirt3.png b/mindus/assets/blocks/environment/dirt3.png
deleted file mode 100644
index ff65a1f..0000000
--- a/mindus/assets/blocks/environment/dirt3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dune-wall-large.png b/mindus/assets/blocks/environment/dune-wall-large.png
deleted file mode 100644
index d2a69ea..0000000
--- a/mindus/assets/blocks/environment/dune-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dune-wall1.png b/mindus/assets/blocks/environment/dune-wall1.png
deleted file mode 100644
index 5b4462f..0000000
--- a/mindus/assets/blocks/environment/dune-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/dune-wall2.png b/mindus/assets/blocks/environment/dune-wall2.png
deleted file mode 100644
index f849893..0000000
--- a/mindus/assets/blocks/environment/dune-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/edge-stencil.png b/mindus/assets/blocks/environment/edge-stencil.png
deleted file mode 100644
index 0bd0cb7..0000000
--- a/mindus/assets/blocks/environment/edge-stencil.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/edge.png b/mindus/assets/blocks/environment/edge.png
deleted file mode 100644
index 12c3b44..0000000
--- a/mindus/assets/blocks/environment/edge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/env-error.png b/mindus/assets/blocks/environment/env-error.png
deleted file mode 100644
index d851d7f..0000000
--- a/mindus/assets/blocks/environment/env-error.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-boulder1.png b/mindus/assets/blocks/environment/ferric-boulder1.png
deleted file mode 100644
index 56bcb4b..0000000
--- a/mindus/assets/blocks/environment/ferric-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-boulder2.png b/mindus/assets/blocks/environment/ferric-boulder2.png
deleted file mode 100644
index acba7d4..0000000
--- a/mindus/assets/blocks/environment/ferric-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-craters1.png b/mindus/assets/blocks/environment/ferric-craters1.png
deleted file mode 100644
index 3249fe9..0000000
--- a/mindus/assets/blocks/environment/ferric-craters1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-craters2.png b/mindus/assets/blocks/environment/ferric-craters2.png
deleted file mode 100644
index 91586af..0000000
--- a/mindus/assets/blocks/environment/ferric-craters2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-craters3.png b/mindus/assets/blocks/environment/ferric-craters3.png
deleted file mode 100644
index 8b25404..0000000
--- a/mindus/assets/blocks/environment/ferric-craters3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone-wall-large.png b/mindus/assets/blocks/environment/ferric-stone-wall-large.png
deleted file mode 100644
index 399cf4f..0000000
--- a/mindus/assets/blocks/environment/ferric-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone-wall1.png b/mindus/assets/blocks/environment/ferric-stone-wall1.png
deleted file mode 100644
index 580ef7d..0000000
--- a/mindus/assets/blocks/environment/ferric-stone-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone1.png b/mindus/assets/blocks/environment/ferric-stone1.png
deleted file mode 100644
index 4a1a0bc..0000000
--- a/mindus/assets/blocks/environment/ferric-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone2.png b/mindus/assets/blocks/environment/ferric-stone2.png
deleted file mode 100644
index f4e9af5..0000000
--- a/mindus/assets/blocks/environment/ferric-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone3.png b/mindus/assets/blocks/environment/ferric-stone3.png
deleted file mode 100644
index 1bc4111..0000000
--- a/mindus/assets/blocks/environment/ferric-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ferric-stone4.png b/mindus/assets/blocks/environment/ferric-stone4.png
deleted file mode 100644
index 17ed876..0000000
--- a/mindus/assets/blocks/environment/ferric-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/graphitic-wall-large.png b/mindus/assets/blocks/environment/graphitic-wall-large.png
deleted file mode 100644
index 476879a..0000000
--- a/mindus/assets/blocks/environment/graphitic-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/graphitic-wall1.png b/mindus/assets/blocks/environment/graphitic-wall1.png
deleted file mode 100644
index 21454de..0000000
--- a/mindus/assets/blocks/environment/graphitic-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/graphitic-wall2.png b/mindus/assets/blocks/environment/graphitic-wall2.png
deleted file mode 100644
index aa78bd8..0000000
--- a/mindus/assets/blocks/environment/graphitic-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/graphitic-wall3.png b/mindus/assets/blocks/environment/graphitic-wall3.png
deleted file mode 100644
index 8419091..0000000
--- a/mindus/assets/blocks/environment/graphitic-wall3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/grass1.png b/mindus/assets/blocks/environment/grass1.png
deleted file mode 100644
index 9b4c556..0000000
--- a/mindus/assets/blocks/environment/grass1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/grass2.png b/mindus/assets/blocks/environment/grass2.png
deleted file mode 100644
index d858821..0000000
--- a/mindus/assets/blocks/environment/grass2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/grass3.png b/mindus/assets/blocks/environment/grass3.png
deleted file mode 100644
index 9e1aca0..0000000
--- a/mindus/assets/blocks/environment/grass3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/hotrock1.png b/mindus/assets/blocks/environment/hotrock1.png
deleted file mode 100644
index 9b1f60d..0000000
--- a/mindus/assets/blocks/environment/hotrock1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/hotrock2.png b/mindus/assets/blocks/environment/hotrock2.png
deleted file mode 100644
index 04435af..0000000
--- a/mindus/assets/blocks/environment/hotrock2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/hotrock3.png b/mindus/assets/blocks/environment/hotrock3.png
deleted file mode 100644
index 87beeef..0000000
--- a/mindus/assets/blocks/environment/hotrock3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice-snow1.png b/mindus/assets/blocks/environment/ice-snow1.png
deleted file mode 100644
index 05fa939..0000000
--- a/mindus/assets/blocks/environment/ice-snow1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice-snow2.png b/mindus/assets/blocks/environment/ice-snow2.png
deleted file mode 100644
index 71c7b59..0000000
--- a/mindus/assets/blocks/environment/ice-snow2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice-snow3.png b/mindus/assets/blocks/environment/ice-snow3.png
deleted file mode 100644
index 946bad2..0000000
--- a/mindus/assets/blocks/environment/ice-snow3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice-wall-large.png b/mindus/assets/blocks/environment/ice-wall-large.png
deleted file mode 100644
index 4ef7e53..0000000
--- a/mindus/assets/blocks/environment/ice-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice-wall1.png b/mindus/assets/blocks/environment/ice-wall1.png
deleted file mode 100644
index 56f647f..0000000
--- a/mindus/assets/blocks/environment/ice-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice-wall2.png b/mindus/assets/blocks/environment/ice-wall2.png
deleted file mode 100644
index 99674f6..0000000
--- a/mindus/assets/blocks/environment/ice-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice1.png b/mindus/assets/blocks/environment/ice1.png
deleted file mode 100644
index 355ed2d..0000000
--- a/mindus/assets/blocks/environment/ice1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice2.png b/mindus/assets/blocks/environment/ice2.png
deleted file mode 100644
index eb53e77..0000000
--- a/mindus/assets/blocks/environment/ice2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ice3.png b/mindus/assets/blocks/environment/ice3.png
deleted file mode 100644
index 6b1b8b0..0000000
--- a/mindus/assets/blocks/environment/ice3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/magmarock1.png b/mindus/assets/blocks/environment/magmarock1.png
deleted file mode 100644
index 7218a6f..0000000
--- a/mindus/assets/blocks/environment/magmarock1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/magmarock2.png b/mindus/assets/blocks/environment/magmarock2.png
deleted file mode 100644
index 6a3330c..0000000
--- a/mindus/assets/blocks/environment/magmarock2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/magmarock3.png b/mindus/assets/blocks/environment/magmarock3.png
deleted file mode 100644
index 2921b1a..0000000
--- a/mindus/assets/blocks/environment/magmarock3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-2.png b/mindus/assets/blocks/environment/metal-floor-2.png
deleted file mode 100644
index 26ddfa3..0000000
--- a/mindus/assets/blocks/environment/metal-floor-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-3.png b/mindus/assets/blocks/environment/metal-floor-3.png
deleted file mode 100644
index e5f1b58..0000000
--- a/mindus/assets/blocks/environment/metal-floor-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-5.png b/mindus/assets/blocks/environment/metal-floor-5.png
deleted file mode 100644
index 7b7cf40..0000000
--- a/mindus/assets/blocks/environment/metal-floor-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-damaged1.png b/mindus/assets/blocks/environment/metal-floor-damaged1.png
deleted file mode 100644
index 500d2a1..0000000
--- a/mindus/assets/blocks/environment/metal-floor-damaged1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-damaged2.png b/mindus/assets/blocks/environment/metal-floor-damaged2.png
deleted file mode 100644
index 0346965..0000000
--- a/mindus/assets/blocks/environment/metal-floor-damaged2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor-damaged3.png b/mindus/assets/blocks/environment/metal-floor-damaged3.png
deleted file mode 100644
index 59dad1b..0000000
--- a/mindus/assets/blocks/environment/metal-floor-damaged3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/metal-floor.png b/mindus/assets/blocks/environment/metal-floor.png
deleted file mode 100644
index ca564d0..0000000
--- a/mindus/assets/blocks/environment/metal-floor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/molten-slag1.png b/mindus/assets/blocks/environment/molten-slag1.png
deleted file mode 100644
index 07db3b0..0000000
--- a/mindus/assets/blocks/environment/molten-slag1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/moss1.png b/mindus/assets/blocks/environment/moss1.png
deleted file mode 100644
index 69d8abd..0000000
--- a/mindus/assets/blocks/environment/moss1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/moss2.png b/mindus/assets/blocks/environment/moss2.png
deleted file mode 100644
index 181c54a..0000000
--- a/mindus/assets/blocks/environment/moss2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/moss3.png b/mindus/assets/blocks/environment/moss3.png
deleted file mode 100644
index f9b0b7b..0000000
--- a/mindus/assets/blocks/environment/moss3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/mud1.png b/mindus/assets/blocks/environment/mud1.png
deleted file mode 100644
index b3bde63..0000000
--- a/mindus/assets/blocks/environment/mud1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/mud2.png b/mindus/assets/blocks/environment/mud2.png
deleted file mode 100644
index 12a52d6..0000000
--- a/mindus/assets/blocks/environment/mud2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/mud3.png b/mindus/assets/blocks/environment/mud3.png
deleted file mode 100644
index 325eaf4..0000000
--- a/mindus/assets/blocks/environment/mud3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-beryllium1.png b/mindus/assets/blocks/environment/ore-beryllium1.png
deleted file mode 100644
index 4d682b8..0000000
--- a/mindus/assets/blocks/environment/ore-beryllium1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-beryllium2.png b/mindus/assets/blocks/environment/ore-beryllium2.png
deleted file mode 100644
index baa2364..0000000
--- a/mindus/assets/blocks/environment/ore-beryllium2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-beryllium3.png b/mindus/assets/blocks/environment/ore-beryllium3.png
deleted file mode 100644
index 05a9465..0000000
--- a/mindus/assets/blocks/environment/ore-beryllium3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-coal1.png b/mindus/assets/blocks/environment/ore-coal1.png
deleted file mode 100644
index 6b5a5ee..0000000
--- a/mindus/assets/blocks/environment/ore-coal1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-coal2.png b/mindus/assets/blocks/environment/ore-coal2.png
deleted file mode 100644
index 4e6f721..0000000
--- a/mindus/assets/blocks/environment/ore-coal2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-coal3.png b/mindus/assets/blocks/environment/ore-coal3.png
deleted file mode 100644
index 4e8fb4e..0000000
--- a/mindus/assets/blocks/environment/ore-coal3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-copper1.png b/mindus/assets/blocks/environment/ore-copper1.png
deleted file mode 100644
index 578b5b4..0000000
--- a/mindus/assets/blocks/environment/ore-copper1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-copper2.png b/mindus/assets/blocks/environment/ore-copper2.png
deleted file mode 100644
index 3afab6a..0000000
--- a/mindus/assets/blocks/environment/ore-copper2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-copper3.png b/mindus/assets/blocks/environment/ore-copper3.png
deleted file mode 100644
index 561d14c..0000000
--- a/mindus/assets/blocks/environment/ore-copper3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-crystal-thorium1.png b/mindus/assets/blocks/environment/ore-crystal-thorium1.png
deleted file mode 100644
index 9ba038e..0000000
--- a/mindus/assets/blocks/environment/ore-crystal-thorium1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-crystal-thorium2.png b/mindus/assets/blocks/environment/ore-crystal-thorium2.png
deleted file mode 100644
index 219adc2..0000000
--- a/mindus/assets/blocks/environment/ore-crystal-thorium2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-crystal-thorium3.png b/mindus/assets/blocks/environment/ore-crystal-thorium3.png
deleted file mode 100644
index daa6ace..0000000
--- a/mindus/assets/blocks/environment/ore-crystal-thorium3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-lead1.png b/mindus/assets/blocks/environment/ore-lead1.png
deleted file mode 100644
index 94eed99..0000000
--- a/mindus/assets/blocks/environment/ore-lead1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-lead2.png b/mindus/assets/blocks/environment/ore-lead2.png
deleted file mode 100644
index c86de92..0000000
--- a/mindus/assets/blocks/environment/ore-lead2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-lead3.png b/mindus/assets/blocks/environment/ore-lead3.png
deleted file mode 100644
index c99376f..0000000
--- a/mindus/assets/blocks/environment/ore-lead3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-scrap1.png b/mindus/assets/blocks/environment/ore-scrap1.png
deleted file mode 100644
index 8973fe2..0000000
--- a/mindus/assets/blocks/environment/ore-scrap1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-scrap2.png b/mindus/assets/blocks/environment/ore-scrap2.png
deleted file mode 100644
index 9a196d1..0000000
--- a/mindus/assets/blocks/environment/ore-scrap2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-scrap3.png b/mindus/assets/blocks/environment/ore-scrap3.png
deleted file mode 100644
index e5e88a2..0000000
--- a/mindus/assets/blocks/environment/ore-scrap3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-thorium1.png b/mindus/assets/blocks/environment/ore-thorium1.png
deleted file mode 100644
index f07faf6..0000000
--- a/mindus/assets/blocks/environment/ore-thorium1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-thorium2.png b/mindus/assets/blocks/environment/ore-thorium2.png
deleted file mode 100644
index 41787f4..0000000
--- a/mindus/assets/blocks/environment/ore-thorium2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-thorium3.png b/mindus/assets/blocks/environment/ore-thorium3.png
deleted file mode 100644
index d2604e0..0000000
--- a/mindus/assets/blocks/environment/ore-thorium3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-titanium1.png b/mindus/assets/blocks/environment/ore-titanium1.png
deleted file mode 100644
index 95e95ed..0000000
--- a/mindus/assets/blocks/environment/ore-titanium1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-titanium2.png b/mindus/assets/blocks/environment/ore-titanium2.png
deleted file mode 100644
index d4e5327..0000000
--- a/mindus/assets/blocks/environment/ore-titanium2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-titanium3.png b/mindus/assets/blocks/environment/ore-titanium3.png
deleted file mode 100644
index 6bfae17..0000000
--- a/mindus/assets/blocks/environment/ore-titanium3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-tungsten1.png b/mindus/assets/blocks/environment/ore-tungsten1.png
deleted file mode 100644
index 094ef3e..0000000
--- a/mindus/assets/blocks/environment/ore-tungsten1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-tungsten2.png b/mindus/assets/blocks/environment/ore-tungsten2.png
deleted file mode 100644
index 4b6b9e2..0000000
--- a/mindus/assets/blocks/environment/ore-tungsten2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-tungsten3.png b/mindus/assets/blocks/environment/ore-tungsten3.png
deleted file mode 100644
index c379d30..0000000
--- a/mindus/assets/blocks/environment/ore-tungsten3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium1.png b/mindus/assets/blocks/environment/ore-wall-beryllium1.png
deleted file mode 100644
index e9a3cc3..0000000
--- a/mindus/assets/blocks/environment/ore-wall-beryllium1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium2.png b/mindus/assets/blocks/environment/ore-wall-beryllium2.png
deleted file mode 100644
index 0904e0d..0000000
--- a/mindus/assets/blocks/environment/ore-wall-beryllium2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium3.png b/mindus/assets/blocks/environment/ore-wall-beryllium3.png
deleted file mode 100644
index 5c9b8c7..0000000
--- a/mindus/assets/blocks/environment/ore-wall-beryllium3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-graphite1.png b/mindus/assets/blocks/environment/ore-wall-graphite1.png
deleted file mode 100644
index 12b7df9..0000000
--- a/mindus/assets/blocks/environment/ore-wall-graphite1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-graphite2.png b/mindus/assets/blocks/environment/ore-wall-graphite2.png
deleted file mode 100644
index 5132f76..0000000
--- a/mindus/assets/blocks/environment/ore-wall-graphite2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-graphite3.png b/mindus/assets/blocks/environment/ore-wall-graphite3.png
deleted file mode 100644
index 5369276..0000000
--- a/mindus/assets/blocks/environment/ore-wall-graphite3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-thorium1.png b/mindus/assets/blocks/environment/ore-wall-thorium1.png
deleted file mode 100644
index 05342af..0000000
--- a/mindus/assets/blocks/environment/ore-wall-thorium1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-thorium2.png b/mindus/assets/blocks/environment/ore-wall-thorium2.png
deleted file mode 100644
index ed21d0d..0000000
--- a/mindus/assets/blocks/environment/ore-wall-thorium2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-thorium3.png b/mindus/assets/blocks/environment/ore-wall-thorium3.png
deleted file mode 100644
index 5a58f15..0000000
--- a/mindus/assets/blocks/environment/ore-wall-thorium3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten1.png b/mindus/assets/blocks/environment/ore-wall-tungsten1.png
deleted file mode 100644
index 81e61e1..0000000
--- a/mindus/assets/blocks/environment/ore-wall-tungsten1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten2.png b/mindus/assets/blocks/environment/ore-wall-tungsten2.png
deleted file mode 100644
index 6ed7eba..0000000
--- a/mindus/assets/blocks/environment/ore-wall-tungsten2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten3.png b/mindus/assets/blocks/environment/ore-wall-tungsten3.png
deleted file mode 100644
index d1e7993..0000000
--- a/mindus/assets/blocks/environment/ore-wall-tungsten3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/pebbles1.png b/mindus/assets/blocks/environment/pebbles1.png
deleted file mode 100644
index 8c8cf52..0000000
--- a/mindus/assets/blocks/environment/pebbles1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/pebbles2.png b/mindus/assets/blocks/environment/pebbles2.png
deleted file mode 100644
index 4360626..0000000
--- a/mindus/assets/blocks/environment/pebbles2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/pebbles3.png b/mindus/assets/blocks/environment/pebbles3.png
deleted file mode 100644
index a542a96..0000000
--- a/mindus/assets/blocks/environment/pebbles3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/pine.png b/mindus/assets/blocks/environment/pine.png
deleted file mode 100644
index 9f746c3..0000000
--- a/mindus/assets/blocks/environment/pine.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/pooled-cryofluid.png b/mindus/assets/blocks/environment/pooled-cryofluid.png
deleted file mode 100644
index 3dac992..0000000
--- a/mindus/assets/blocks/environment/pooled-cryofluid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/pur-bush.png b/mindus/assets/blocks/environment/pur-bush.png
deleted file mode 100644
index 76768eb..0000000
--- a/mindus/assets/blocks/environment/pur-bush.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-diamond-wall1.png b/mindus/assets/blocks/environment/red-diamond-wall1.png
deleted file mode 100644
index 8eb8d9b..0000000
--- a/mindus/assets/blocks/environment/red-diamond-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-diamond-wall2.png b/mindus/assets/blocks/environment/red-diamond-wall2.png
deleted file mode 100644
index 1901166..0000000
--- a/mindus/assets/blocks/environment/red-diamond-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-diamond-wall3.png b/mindus/assets/blocks/environment/red-diamond-wall3.png
deleted file mode 100644
index a2c5220..0000000
--- a/mindus/assets/blocks/environment/red-diamond-wall3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice-boulder1.png b/mindus/assets/blocks/environment/red-ice-boulder1.png
deleted file mode 100644
index 2c49e57..0000000
--- a/mindus/assets/blocks/environment/red-ice-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice-boulder2.png b/mindus/assets/blocks/environment/red-ice-boulder2.png
deleted file mode 100644
index b6935e1..0000000
--- a/mindus/assets/blocks/environment/red-ice-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice-boulder3.png b/mindus/assets/blocks/environment/red-ice-boulder3.png
deleted file mode 100644
index 1e1b542..0000000
--- a/mindus/assets/blocks/environment/red-ice-boulder3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice-wall-large.png b/mindus/assets/blocks/environment/red-ice-wall-large.png
deleted file mode 100644
index 0d09b3b..0000000
--- a/mindus/assets/blocks/environment/red-ice-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice-wall1.png b/mindus/assets/blocks/environment/red-ice-wall1.png
deleted file mode 100644
index 2ed857c..0000000
--- a/mindus/assets/blocks/environment/red-ice-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice-wall2.png b/mindus/assets/blocks/environment/red-ice-wall2.png
deleted file mode 100644
index 931929e..0000000
--- a/mindus/assets/blocks/environment/red-ice-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice1.png b/mindus/assets/blocks/environment/red-ice1.png
deleted file mode 100644
index c03c486..0000000
--- a/mindus/assets/blocks/environment/red-ice1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice2.png b/mindus/assets/blocks/environment/red-ice2.png
deleted file mode 100644
index e3e309f..0000000
--- a/mindus/assets/blocks/environment/red-ice2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-ice3.png b/mindus/assets/blocks/environment/red-ice3.png
deleted file mode 100644
index f33ec98..0000000
--- a/mindus/assets/blocks/environment/red-ice3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-boulder1.png b/mindus/assets/blocks/environment/red-stone-boulder1.png
deleted file mode 100644
index c7df230..0000000
--- a/mindus/assets/blocks/environment/red-stone-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-boulder2.png b/mindus/assets/blocks/environment/red-stone-boulder2.png
deleted file mode 100644
index 2fe2ad2..0000000
--- a/mindus/assets/blocks/environment/red-stone-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-boulder3.png b/mindus/assets/blocks/environment/red-stone-boulder3.png
deleted file mode 100644
index 62e2616..0000000
--- a/mindus/assets/blocks/environment/red-stone-boulder3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-boulder4.png b/mindus/assets/blocks/environment/red-stone-boulder4.png
deleted file mode 100644
index 2d3d0c3..0000000
--- a/mindus/assets/blocks/environment/red-stone-boulder4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-vent1.png b/mindus/assets/blocks/environment/red-stone-vent1.png
deleted file mode 100644
index 09d370f..0000000
--- a/mindus/assets/blocks/environment/red-stone-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-vent2.png b/mindus/assets/blocks/environment/red-stone-vent2.png
deleted file mode 100644
index a454baa..0000000
--- a/mindus/assets/blocks/environment/red-stone-vent2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-wall-large.png b/mindus/assets/blocks/environment/red-stone-wall-large.png
deleted file mode 100644
index a0c4a5c..0000000
--- a/mindus/assets/blocks/environment/red-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-wall1.png b/mindus/assets/blocks/environment/red-stone-wall1.png
deleted file mode 100644
index a14f6f7..0000000
--- a/mindus/assets/blocks/environment/red-stone-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone-wall2.png b/mindus/assets/blocks/environment/red-stone-wall2.png
deleted file mode 100644
index 18b79ea..0000000
--- a/mindus/assets/blocks/environment/red-stone-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone1.png b/mindus/assets/blocks/environment/red-stone1.png
deleted file mode 100644
index bcad408..0000000
--- a/mindus/assets/blocks/environment/red-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone2.png b/mindus/assets/blocks/environment/red-stone2.png
deleted file mode 100644
index b857043..0000000
--- a/mindus/assets/blocks/environment/red-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone3.png b/mindus/assets/blocks/environment/red-stone3.png
deleted file mode 100644
index 5fae657..0000000
--- a/mindus/assets/blocks/environment/red-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/red-stone4.png b/mindus/assets/blocks/environment/red-stone4.png
deleted file mode 100644
index b1931ec..0000000
--- a/mindus/assets/blocks/environment/red-stone4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/redmat1.png b/mindus/assets/blocks/environment/redmat1.png
deleted file mode 100644
index daa3995..0000000
--- a/mindus/assets/blocks/environment/redmat1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/redmat2.png b/mindus/assets/blocks/environment/redmat2.png
deleted file mode 100644
index b5fca70..0000000
--- a/mindus/assets/blocks/environment/redmat2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/redmat3.png b/mindus/assets/blocks/environment/redmat3.png
deleted file mode 100644
index 88e06a4..0000000
--- a/mindus/assets/blocks/environment/redmat3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/redweed1.png b/mindus/assets/blocks/environment/redweed1.png
deleted file mode 100644
index a981a01..0000000
--- a/mindus/assets/blocks/environment/redweed1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/redweed2.png b/mindus/assets/blocks/environment/redweed2.png
deleted file mode 100644
index d1d0b4b..0000000
--- a/mindus/assets/blocks/environment/redweed2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/redweed3.png b/mindus/assets/blocks/environment/redweed3.png
deleted file mode 100644
index b9fd3a8..0000000
--- a/mindus/assets/blocks/environment/redweed3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/regolith-wall-large.png b/mindus/assets/blocks/environment/regolith-wall-large.png
deleted file mode 100644
index 1721a2a..0000000
--- a/mindus/assets/blocks/environment/regolith-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/regolith-wall1.png b/mindus/assets/blocks/environment/regolith-wall1.png
deleted file mode 100644
index 7b46145..0000000
--- a/mindus/assets/blocks/environment/regolith-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/regolith-wall2.png b/mindus/assets/blocks/environment/regolith-wall2.png
deleted file mode 100644
index 41ae883..0000000
--- a/mindus/assets/blocks/environment/regolith-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/regolith1.png b/mindus/assets/blocks/environment/regolith1.png
deleted file mode 100644
index dad9752..0000000
--- a/mindus/assets/blocks/environment/regolith1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/regolith2.png b/mindus/assets/blocks/environment/regolith2.png
deleted file mode 100644
index a700e03..0000000
--- a/mindus/assets/blocks/environment/regolith2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/regolith3.png b/mindus/assets/blocks/environment/regolith3.png
deleted file mode 100644
index 91ad120..0000000
--- a/mindus/assets/blocks/environment/regolith3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-boulder1.png b/mindus/assets/blocks/environment/rhyolite-boulder1.png
deleted file mode 100644
index 47cb5ef..0000000
--- a/mindus/assets/blocks/environment/rhyolite-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-boulder2.png b/mindus/assets/blocks/environment/rhyolite-boulder2.png
deleted file mode 100644
index de1c76b..0000000
--- a/mindus/assets/blocks/environment/rhyolite-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-boulder3.png b/mindus/assets/blocks/environment/rhyolite-boulder3.png
deleted file mode 100644
index 331a2b7..0000000
--- a/mindus/assets/blocks/environment/rhyolite-boulder3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-crater1.png b/mindus/assets/blocks/environment/rhyolite-crater1.png
deleted file mode 100644
index 0174a41..0000000
--- a/mindus/assets/blocks/environment/rhyolite-crater1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-crater2.png b/mindus/assets/blocks/environment/rhyolite-crater2.png
deleted file mode 100644
index 6cddef9..0000000
--- a/mindus/assets/blocks/environment/rhyolite-crater2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-crater3.png b/mindus/assets/blocks/environment/rhyolite-crater3.png
deleted file mode 100644
index 0bd8f0e..0000000
--- a/mindus/assets/blocks/environment/rhyolite-crater3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-vent.png b/mindus/assets/blocks/environment/rhyolite-vent.png
deleted file mode 100644
index c1a5c99..0000000
--- a/mindus/assets/blocks/environment/rhyolite-vent.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-vent1.png b/mindus/assets/blocks/environment/rhyolite-vent1.png
deleted file mode 100644
index 6ec1110..0000000
--- a/mindus/assets/blocks/environment/rhyolite-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-vent2.png b/mindus/assets/blocks/environment/rhyolite-vent2.png
deleted file mode 100644
index 0ffaf96..0000000
--- a/mindus/assets/blocks/environment/rhyolite-vent2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-wall-large.png b/mindus/assets/blocks/environment/rhyolite-wall-large.png
deleted file mode 100644
index c88a15e..0000000
--- a/mindus/assets/blocks/environment/rhyolite-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-wall1.png b/mindus/assets/blocks/environment/rhyolite-wall1.png
deleted file mode 100644
index 6ea6923..0000000
--- a/mindus/assets/blocks/environment/rhyolite-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite-wall2.png b/mindus/assets/blocks/environment/rhyolite-wall2.png
deleted file mode 100644
index 2e83246..0000000
--- a/mindus/assets/blocks/environment/rhyolite-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite1.png b/mindus/assets/blocks/environment/rhyolite1.png
deleted file mode 100644
index c55fd56..0000000
--- a/mindus/assets/blocks/environment/rhyolite1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite2.png b/mindus/assets/blocks/environment/rhyolite2.png
deleted file mode 100644
index 37b482f..0000000
--- a/mindus/assets/blocks/environment/rhyolite2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rhyolite3.png b/mindus/assets/blocks/environment/rhyolite3.png
deleted file mode 100644
index 8fdb670..0000000
--- a/mindus/assets/blocks/environment/rhyolite3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rough-rhyolite1.png b/mindus/assets/blocks/environment/rough-rhyolite1.png
deleted file mode 100644
index 1917ede..0000000
--- a/mindus/assets/blocks/environment/rough-rhyolite1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rough-rhyolite2.png b/mindus/assets/blocks/environment/rough-rhyolite2.png
deleted file mode 100644
index c3a4d2d..0000000
--- a/mindus/assets/blocks/environment/rough-rhyolite2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rough-rhyolite3.png b/mindus/assets/blocks/environment/rough-rhyolite3.png
deleted file mode 100644
index 9cb78eb..0000000
--- a/mindus/assets/blocks/environment/rough-rhyolite3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/rough-rhyolite4.png b/mindus/assets/blocks/environment/rough-rhyolite4.png
deleted file mode 100644
index 71c6f8d..0000000
--- a/mindus/assets/blocks/environment/rough-rhyolite4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/salt-wall1.png b/mindus/assets/blocks/environment/salt-wall1.png
deleted file mode 100644
index 63bb165..0000000
--- a/mindus/assets/blocks/environment/salt-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/salt-wall2.png b/mindus/assets/blocks/environment/salt-wall2.png
deleted file mode 100644
index ae324d3..0000000
--- a/mindus/assets/blocks/environment/salt-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/salt1.png b/mindus/assets/blocks/environment/salt1.png
deleted file mode 100644
index 285babf..0000000
--- a/mindus/assets/blocks/environment/salt1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-boulder1.png b/mindus/assets/blocks/environment/sand-boulder1.png
deleted file mode 100644
index 573469b..0000000
--- a/mindus/assets/blocks/environment/sand-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-boulder2.png b/mindus/assets/blocks/environment/sand-boulder2.png
deleted file mode 100644
index 667529f..0000000
--- a/mindus/assets/blocks/environment/sand-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-floor1.png b/mindus/assets/blocks/environment/sand-floor1.png
deleted file mode 100644
index 40d4916..0000000
--- a/mindus/assets/blocks/environment/sand-floor1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-floor2.png b/mindus/assets/blocks/environment/sand-floor2.png
deleted file mode 100644
index 1a22960..0000000
--- a/mindus/assets/blocks/environment/sand-floor2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-floor3.png b/mindus/assets/blocks/environment/sand-floor3.png
deleted file mode 100644
index 71e6f7b..0000000
--- a/mindus/assets/blocks/environment/sand-floor3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-wall-large.png b/mindus/assets/blocks/environment/sand-wall-large.png
deleted file mode 100644
index dd8b463..0000000
--- a/mindus/assets/blocks/environment/sand-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-wall1.png b/mindus/assets/blocks/environment/sand-wall1.png
deleted file mode 100644
index ee4e4bd..0000000
--- a/mindus/assets/blocks/environment/sand-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-wall2.png b/mindus/assets/blocks/environment/sand-wall2.png
deleted file mode 100644
index 62c70f4..0000000
--- a/mindus/assets/blocks/environment/sand-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/sand-water.png b/mindus/assets/blocks/environment/sand-water.png
deleted file mode 100644
index a4683d3..0000000
--- a/mindus/assets/blocks/environment/sand-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale-boulder1.png b/mindus/assets/blocks/environment/shale-boulder1.png
deleted file mode 100644
index 199c6c0..0000000
--- a/mindus/assets/blocks/environment/shale-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale-boulder2.png b/mindus/assets/blocks/environment/shale-boulder2.png
deleted file mode 100644
index 3cee755..0000000
--- a/mindus/assets/blocks/environment/shale-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale-wall-large.png b/mindus/assets/blocks/environment/shale-wall-large.png
deleted file mode 100644
index 9ce1dcd..0000000
--- a/mindus/assets/blocks/environment/shale-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale-wall1.png b/mindus/assets/blocks/environment/shale-wall1.png
deleted file mode 100644
index b983bc6..0000000
--- a/mindus/assets/blocks/environment/shale-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale-wall2.png b/mindus/assets/blocks/environment/shale-wall2.png
deleted file mode 100644
index f89fed6..0000000
--- a/mindus/assets/blocks/environment/shale-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale1.png b/mindus/assets/blocks/environment/shale1.png
deleted file mode 100644
index 328e286..0000000
--- a/mindus/assets/blocks/environment/shale1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale2.png b/mindus/assets/blocks/environment/shale2.png
deleted file mode 100644
index e2cda57..0000000
--- a/mindus/assets/blocks/environment/shale2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shale3.png b/mindus/assets/blocks/environment/shale3.png
deleted file mode 100644
index fde0c72..0000000
--- a/mindus/assets/blocks/environment/shale3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shallow-water.png b/mindus/assets/blocks/environment/shallow-water.png
deleted file mode 100644
index 21e323f..0000000
--- a/mindus/assets/blocks/environment/shallow-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shrubs-large.png b/mindus/assets/blocks/environment/shrubs-large.png
deleted file mode 100644
index e2fe1ab..0000000
--- a/mindus/assets/blocks/environment/shrubs-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shrubs1.png b/mindus/assets/blocks/environment/shrubs1.png
deleted file mode 100644
index d9596f7..0000000
--- a/mindus/assets/blocks/environment/shrubs1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/shrubs2.png b/mindus/assets/blocks/environment/shrubs2.png
deleted file mode 100644
index 8758541..0000000
--- a/mindus/assets/blocks/environment/shrubs2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/single/colored-floor.png b/mindus/assets/blocks/environment/single/colored-floor.png
deleted file mode 120000
index a20bf5a..0000000
--- a/mindus/assets/blocks/environment/single/colored-floor.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/colored-floor-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/colored-wall.png b/mindus/assets/blocks/environment/single/colored-wall.png
deleted file mode 120000
index 7afe834..0000000
--- a/mindus/assets/blocks/environment/single/colored-wall.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/colored-wall-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-1.png b/mindus/assets/blocks/environment/single/metal-tiles-1.png
deleted file mode 120000
index fb2babd..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-1.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-1-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-10.png b/mindus/assets/blocks/environment/single/metal-tiles-10.png
deleted file mode 120000
index 17482a9..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-10.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-10-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-11.png b/mindus/assets/blocks/environment/single/metal-tiles-11.png
deleted file mode 120000
index 7f60b5a..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-11.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-11-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-12.png b/mindus/assets/blocks/environment/single/metal-tiles-12.png
deleted file mode 120000
index 2f3a9a2..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-12.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-12-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-2.png b/mindus/assets/blocks/environment/single/metal-tiles-2.png
deleted file mode 120000
index 5169a49..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-2.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-2-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-3.png b/mindus/assets/blocks/environment/single/metal-tiles-3.png
deleted file mode 120000
index dfb955e..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-3.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-3-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-4.png b/mindus/assets/blocks/environment/single/metal-tiles-4.png
deleted file mode 120000
index e72949a..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-4.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-4-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-5.png b/mindus/assets/blocks/environment/single/metal-tiles-5.png
deleted file mode 120000
index 2d26ff4..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-5.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-5-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-6.png b/mindus/assets/blocks/environment/single/metal-tiles-6.png
deleted file mode 120000
index 53cee72..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-6.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-6-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-7.png b/mindus/assets/blocks/environment/single/metal-tiles-7.png
deleted file mode 120000
index 79c26ee..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-7.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-7-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-8.png b/mindus/assets/blocks/environment/single/metal-tiles-8.png
deleted file mode 120000
index 7e3bd9b..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-8.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-8-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-tiles-9.png b/mindus/assets/blocks/environment/single/metal-tiles-9.png
deleted file mode 120000
index ecaf110..0000000
--- a/mindus/assets/blocks/environment/single/metal-tiles-9.png
+++ /dev/null
@@ -1 +0,0 @@
-../../autotiles/metal-tiles-9-39.png \ No newline at end of file
diff --git a/mindus/assets/blocks/environment/single/metal-wall-1.png b/mindus/assets/blocks/environment/single/metal-wall-1.png
deleted file mode 100644
index 95adac5..0000000
--- a/mindus/assets/blocks/environment/single/metal-wall-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/single/metal-wall-2.png b/mindus/assets/blocks/environment/single/metal-wall-2.png
deleted file mode 100644
index 2f0db5b..0000000
--- a/mindus/assets/blocks/environment/single/metal-wall-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/single/metal-wall-3.png b/mindus/assets/blocks/environment/single/metal-wall-3.png
deleted file mode 100644
index 9806760..0000000
--- a/mindus/assets/blocks/environment/single/metal-wall-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow-boulder1.png b/mindus/assets/blocks/environment/snow-boulder1.png
deleted file mode 100644
index 8e8e6f9..0000000
--- a/mindus/assets/blocks/environment/snow-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow-boulder2.png b/mindus/assets/blocks/environment/snow-boulder2.png
deleted file mode 100644
index 5f530c0..0000000
--- a/mindus/assets/blocks/environment/snow-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow-pine.png b/mindus/assets/blocks/environment/snow-pine.png
deleted file mode 100644
index 036c20c..0000000
--- a/mindus/assets/blocks/environment/snow-pine.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow-wall-large.png b/mindus/assets/blocks/environment/snow-wall-large.png
deleted file mode 100644
index b7ff809..0000000
--- a/mindus/assets/blocks/environment/snow-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow-wall1.png b/mindus/assets/blocks/environment/snow-wall1.png
deleted file mode 100644
index 6655c37..0000000
--- a/mindus/assets/blocks/environment/snow-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow-wall2.png b/mindus/assets/blocks/environment/snow-wall2.png
deleted file mode 100644
index 40ba359..0000000
--- a/mindus/assets/blocks/environment/snow-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow1.png b/mindus/assets/blocks/environment/snow1.png
deleted file mode 100644
index 3387f23..0000000
--- a/mindus/assets/blocks/environment/snow1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow2.png b/mindus/assets/blocks/environment/snow2.png
deleted file mode 100644
index 013c458..0000000
--- a/mindus/assets/blocks/environment/snow2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow3.png b/mindus/assets/blocks/environment/snow3.png
deleted file mode 100644
index baa63ec..0000000
--- a/mindus/assets/blocks/environment/snow3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spawn.png b/mindus/assets/blocks/environment/spawn.png
deleted file mode 100644
index d8b2859..0000000
--- a/mindus/assets/blocks/environment/spawn.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-cluster1.png b/mindus/assets/blocks/environment/spore-cluster1.png
deleted file mode 100644
index c28dc43..0000000
--- a/mindus/assets/blocks/environment/spore-cluster1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-cluster2.png b/mindus/assets/blocks/environment/spore-cluster2.png
deleted file mode 100644
index 725f1b9..0000000
--- a/mindus/assets/blocks/environment/spore-cluster2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-cluster3.png b/mindus/assets/blocks/environment/spore-cluster3.png
deleted file mode 100644
index 7b5e93e..0000000
--- a/mindus/assets/blocks/environment/spore-cluster3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-moss1.png b/mindus/assets/blocks/environment/spore-moss1.png
deleted file mode 100644
index dacdf4c..0000000
--- a/mindus/assets/blocks/environment/spore-moss1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-moss2.png b/mindus/assets/blocks/environment/spore-moss2.png
deleted file mode 100644
index 475e877..0000000
--- a/mindus/assets/blocks/environment/spore-moss2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-moss3.png b/mindus/assets/blocks/environment/spore-moss3.png
deleted file mode 100644
index 69e7656..0000000
--- a/mindus/assets/blocks/environment/spore-moss3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-pine.png b/mindus/assets/blocks/environment/spore-pine.png
deleted file mode 100644
index bdb2f9c..0000000
--- a/mindus/assets/blocks/environment/spore-pine.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-wall-large.png b/mindus/assets/blocks/environment/spore-wall-large.png
deleted file mode 100644
index 1f1fec5..0000000
--- a/mindus/assets/blocks/environment/spore-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-wall1.png b/mindus/assets/blocks/environment/spore-wall1.png
deleted file mode 100644
index c0ee3ef..0000000
--- a/mindus/assets/blocks/environment/spore-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/spore-wall2.png b/mindus/assets/blocks/environment/spore-wall2.png
deleted file mode 100644
index 0a83a69..0000000
--- a/mindus/assets/blocks/environment/spore-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone-vent.png b/mindus/assets/blocks/environment/stone-vent.png
deleted file mode 100644
index c8dd9e4..0000000
--- a/mindus/assets/blocks/environment/stone-vent.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone-wall-large.png b/mindus/assets/blocks/environment/stone-wall-large.png
deleted file mode 100644
index 76d3ca3..0000000
--- a/mindus/assets/blocks/environment/stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone-wall1.png b/mindus/assets/blocks/environment/stone-wall1.png
deleted file mode 100644
index 358e36e..0000000
--- a/mindus/assets/blocks/environment/stone-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone-wall2.png b/mindus/assets/blocks/environment/stone-wall2.png
deleted file mode 100644
index 326d88f..0000000
--- a/mindus/assets/blocks/environment/stone-wall2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone1.png b/mindus/assets/blocks/environment/stone1.png
deleted file mode 100644
index 73d29a1..0000000
--- a/mindus/assets/blocks/environment/stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone2.png b/mindus/assets/blocks/environment/stone2.png
deleted file mode 100644
index c0b9dc6..0000000
--- a/mindus/assets/blocks/environment/stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/stone3.png b/mindus/assets/blocks/environment/stone3.png
deleted file mode 100644
index df94fbd..0000000
--- a/mindus/assets/blocks/environment/stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/tainted-water.png b/mindus/assets/blocks/environment/tainted-water.png
deleted file mode 100644
index 7a46957..0000000
--- a/mindus/assets/blocks/environment/tainted-water.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/tendrils1.png b/mindus/assets/blocks/environment/tendrils1.png
deleted file mode 100644
index c9f8aa8..0000000
--- a/mindus/assets/blocks/environment/tendrils1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/tendrils2.png b/mindus/assets/blocks/environment/tendrils2.png
deleted file mode 100644
index dc55153..0000000
--- a/mindus/assets/blocks/environment/tendrils2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/tendrils3.png b/mindus/assets/blocks/environment/tendrils3.png
deleted file mode 100644
index 5a95f59..0000000
--- a/mindus/assets/blocks/environment/tendrils3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/vibrant-crystal-cluster1.png b/mindus/assets/blocks/environment/vibrant-crystal-cluster1.png
deleted file mode 100644
index 0b9946b..0000000
--- a/mindus/assets/blocks/environment/vibrant-crystal-cluster1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/vibrant-crystal-cluster2.png b/mindus/assets/blocks/environment/vibrant-crystal-cluster2.png
deleted file mode 100644
index db826af..0000000
--- a/mindus/assets/blocks/environment/vibrant-crystal-cluster2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/vibrant-crystal-cluster3.png b/mindus/assets/blocks/environment/vibrant-crystal-cluster3.png
deleted file mode 100644
index 380e598..0000000
--- a/mindus/assets/blocks/environment/vibrant-crystal-cluster3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/white-tree-dead.png b/mindus/assets/blocks/environment/white-tree-dead.png
deleted file mode 100644
index 1f25959..0000000
--- a/mindus/assets/blocks/environment/white-tree-dead.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-boulder1.png b/mindus/assets/blocks/environment/yellow-stone-boulder1.png
deleted file mode 100644
index 3045f0a..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-boulder1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-boulder2.png b/mindus/assets/blocks/environment/yellow-stone-boulder2.png
deleted file mode 100644
index 2b8e408..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-boulder2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-plates1.png b/mindus/assets/blocks/environment/yellow-stone-plates1.png
deleted file mode 100644
index e4e4728..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-plates1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-plates2.png b/mindus/assets/blocks/environment/yellow-stone-plates2.png
deleted file mode 100644
index 29364f9..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-plates2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-vent1.png b/mindus/assets/blocks/environment/yellow-stone-vent1.png
deleted file mode 100644
index cc4f172..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-vent1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-vent2.png b/mindus/assets/blocks/environment/yellow-stone-vent2.png
deleted file mode 100644
index 1125d80..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-vent2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-wall-large.png b/mindus/assets/blocks/environment/yellow-stone-wall-large.png
deleted file mode 100644
index e8eafea..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone-wall1.png b/mindus/assets/blocks/environment/yellow-stone-wall1.png
deleted file mode 100644
index 7f8a7e5..0000000
--- a/mindus/assets/blocks/environment/yellow-stone-wall1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone1.png b/mindus/assets/blocks/environment/yellow-stone1.png
deleted file mode 100644
index 9b5b23c..0000000
--- a/mindus/assets/blocks/environment/yellow-stone1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone2.png b/mindus/assets/blocks/environment/yellow-stone2.png
deleted file mode 100644
index 6837526..0000000
--- a/mindus/assets/blocks/environment/yellow-stone2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellow-stone3.png b/mindus/assets/blocks/environment/yellow-stone3.png
deleted file mode 100644
index 2a73445..0000000
--- a/mindus/assets/blocks/environment/yellow-stone3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/environment/yellowcoral.png b/mindus/assets/blocks/environment/yellowcoral.png
deleted file mode 100644
index afad9c8..0000000
--- a/mindus/assets/blocks/environment/yellowcoral.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/bridge-conduit-arrow.png b/mindus/assets/blocks/liquid/bridge-conduit-arrow.png
deleted file mode 100644
index 2740e90..0000000
--- a/mindus/assets/blocks/liquid/bridge-conduit-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/bridge-conduit-bridge.png b/mindus/assets/blocks/liquid/bridge-conduit-bridge.png
deleted file mode 100644
index 6d31c10..0000000
--- a/mindus/assets/blocks/liquid/bridge-conduit-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/bridge-conduit-end.png b/mindus/assets/blocks/liquid/bridge-conduit-end.png
deleted file mode 100644
index 940184b..0000000
--- a/mindus/assets/blocks/liquid/bridge-conduit-end.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/bridge-conduit.png b/mindus/assets/blocks/liquid/bridge-conduit.png
deleted file mode 100644
index f630f96..0000000
--- a/mindus/assets/blocks/liquid/bridge-conduit.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/conduit-0-0.png
deleted file mode 100644
index 15ba9bb..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/conduit-0-2.png
deleted file mode 100644
index 13dad3b..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-0-h.png b/mindus/assets/blocks/liquid/conduits/conduit-1-0-h.png
deleted file mode 100644
index 61ee4e8..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/conduit-1-0.png
deleted file mode 100644
index 215a33a..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-1-h.png b/mindus/assets/blocks/liquid/conduits/conduit-1-1-h.png
deleted file mode 100644
index e6dd640..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-1-v.png b/mindus/assets/blocks/liquid/conduits/conduit-1-1-v.png
deleted file mode 100644
index f3457cd..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/conduit-1-1.png
deleted file mode 100644
index 1379f29..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-2-h.png b/mindus/assets/blocks/liquid/conduits/conduit-1-2-h.png
deleted file mode 100644
index 8e844b9..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/conduit-1-2.png
deleted file mode 100644
index e6dd640..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/conduit-1-3.png
deleted file mode 100644
index 61ee4e8..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-0-h.png b/mindus/assets/blocks/liquid/conduits/conduit-2-0-h.png
deleted file mode 100644
index 20316a5..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-0-v.png b/mindus/assets/blocks/liquid/conduits/conduit-2-0-v.png
deleted file mode 100644
index 89f0046..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/conduit-2-0.png
deleted file mode 100644
index defe522..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/conduit-2-2.png
deleted file mode 100644
index 4d70997..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-3-h.png b/mindus/assets/blocks/liquid/conduits/conduit-2-3-h.png
deleted file mode 100644
index 6d01066..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-0-h.png b/mindus/assets/blocks/liquid/conduits/conduit-3-0-h.png
deleted file mode 100644
index b61158e..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/conduit-3-0.png
deleted file mode 100644
index 9683ba0..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/conduit-3-1.png
deleted file mode 100644
index 1e5d060..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/conduit-3-3.png
deleted file mode 100644
index 48a748d..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/conduit-4-0.png
deleted file mode 100644
index 558b75d..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-4-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/conduit-4-1.png
deleted file mode 100644
index 0c03820..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/conduit-4-3.png
deleted file mode 100644
index b20c51d..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-0.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-0.png
deleted file mode 100644
index a794853..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-bottom-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-1.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-1.png
deleted file mode 100644
index aeeef59..0000000
--- a/mindus/assets/blocks/liquid/conduits/conduit-bottom-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.png
deleted file mode 100644
index 4cade4e..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.png
deleted file mode 100644
index 4a2c98d..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.png
deleted file mode 100644
index 8a7262a..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.png
deleted file mode 100644
index 80afc01..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png
deleted file mode 100644
index 109ede5..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.png
deleted file mode 100644
index 94f689f..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png
deleted file mode 100644
index fe8ad2b..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png
deleted file mode 100644
index 6312882..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.png
deleted file mode 100644
index 8fb1ea5..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2-h.png
deleted file mode 100644
index 6443295..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.png
deleted file mode 100644
index fe8ad2b..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.png
deleted file mode 100644
index 109ede5..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png
deleted file mode 100644
index 19660c2..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png
deleted file mode 100644
index 29008a8..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.png
deleted file mode 100644
index 7bd7dae..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png
deleted file mode 100644
index bbdee9c..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.png
deleted file mode 100644
index 0bbda2b..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png
deleted file mode 100644
index a97100e..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png
deleted file mode 100644
index d9cab71..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.png
deleted file mode 100644
index 946a7a9..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.png
deleted file mode 100644
index df12caa..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.png
deleted file mode 100644
index 51a2fcb..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.png
deleted file mode 100644
index b617458..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.png
deleted file mode 100644
index bd19694..0000000
--- a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.png
deleted file mode 100644
index e97c0e1..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.png
deleted file mode 100644
index 73c32ac..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.png
deleted file mode 100644
index 5d104a8..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png
deleted file mode 100644
index 1f5af36..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.png
deleted file mode 100644
index b967435..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png
deleted file mode 100644
index 5b1e4e3..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png
deleted file mode 100644
index b6b1328..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.png
deleted file mode 100644
index 5bf489a..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2-h.png
deleted file mode 100644
index 0907c3e..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.png
deleted file mode 100644
index 5b1e4e3..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.png
deleted file mode 100644
index 1f5af36..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png
deleted file mode 100644
index 90fdd36..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png
deleted file mode 100644
index 3b205bf..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.png
deleted file mode 100644
index ae563da..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png
deleted file mode 100644
index 0adfb39..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.png
deleted file mode 100644
index 7bbddb5..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png
deleted file mode 100644
index fd38269..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png
deleted file mode 100644
index 96c3a73..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.png
deleted file mode 100644
index 0b49250..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.png
deleted file mode 100644
index 074c17a..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.png
deleted file mode 100644
index a874674..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.png
deleted file mode 100644
index d807f19..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.png
deleted file mode 100644
index 2053317..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.png
deleted file mode 100644
index 660170e..0000000
--- a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png
deleted file mode 100644
index 448d07a..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png
deleted file mode 100644
index b15f447..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png
deleted file mode 100644
index 5aec990..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png
deleted file mode 100644
index e61572d..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png
deleted file mode 100644
index 7964512..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png
deleted file mode 100644
index fdb649c..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png
deleted file mode 100644
index 4671ac4..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png
deleted file mode 100644
index 6cf4efd..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png
deleted file mode 100644
index 523f009..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2-h.png
deleted file mode 100644
index ababa67..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png
deleted file mode 100644
index cb7f02f..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png
deleted file mode 100644
index 1a482f7..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png
deleted file mode 100644
index 48ded48..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png
deleted file mode 100644
index 4e6a10e..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png
deleted file mode 100644
index cc3b39c..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png
deleted file mode 100644
index 2059f05..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png
deleted file mode 100644
index 38611a0..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png
deleted file mode 100644
index 0bb24ba..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png
deleted file mode 100644
index 2e3ee2f..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png
deleted file mode 100644
index 9f854fb..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png
deleted file mode 100644
index 0ed0aef..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png
deleted file mode 100644
index 615f6ef..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png
deleted file mode 100644
index 42de74b..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png
deleted file mode 100644
index 22b1555..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png
deleted file mode 100644
index 197dfc0..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png
deleted file mode 100644
index 5610b46..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png
deleted file mode 100644
index 932f914..0000000
--- a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/impulse-pump-liquid.png b/mindus/assets/blocks/liquid/impulse-pump-liquid.png
deleted file mode 100644
index f2d696c..0000000
--- a/mindus/assets/blocks/liquid/impulse-pump-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/impulse-pump.png b/mindus/assets/blocks/liquid/impulse-pump.png
deleted file mode 100644
index bf73079..0000000
--- a/mindus/assets/blocks/liquid/impulse-pump.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-container.png b/mindus/assets/blocks/liquid/liquid-container.png
deleted file mode 100644
index 19bc701..0000000
--- a/mindus/assets/blocks/liquid/liquid-container.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-junction.png b/mindus/assets/blocks/liquid/liquid-junction.png
deleted file mode 100644
index 1f34b73..0000000
--- a/mindus/assets/blocks/liquid/liquid-junction.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-router.png b/mindus/assets/blocks/liquid/liquid-router.png
deleted file mode 100644
index 5621822..0000000
--- a/mindus/assets/blocks/liquid/liquid-router.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-source.png b/mindus/assets/blocks/liquid/liquid-source.png
deleted file mode 100644
index c6f65ac..0000000
--- a/mindus/assets/blocks/liquid/liquid-source.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-tank-bottom.png b/mindus/assets/blocks/liquid/liquid-tank-bottom.png
deleted file mode 100644
index 440f475..0000000
--- a/mindus/assets/blocks/liquid/liquid-tank-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-tank.png b/mindus/assets/blocks/liquid/liquid-tank.png
deleted file mode 100644
index b9dc52a..0000000
--- a/mindus/assets/blocks/liquid/liquid-tank.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/liquid-void.png b/mindus/assets/blocks/liquid/liquid-void.png
deleted file mode 100644
index 956cfe8..0000000
--- a/mindus/assets/blocks/liquid/liquid-void.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/mechanical-pump-liquid.png b/mindus/assets/blocks/liquid/mechanical-pump-liquid.png
deleted file mode 100644
index f2d696c..0000000
--- a/mindus/assets/blocks/liquid/mechanical-pump-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/mechanical-pump.png b/mindus/assets/blocks/liquid/mechanical-pump.png
deleted file mode 100644
index 9ffc837..0000000
--- a/mindus/assets/blocks/liquid/mechanical-pump.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/phase-conduit-arrow.png b/mindus/assets/blocks/liquid/phase-conduit-arrow.png
deleted file mode 100644
index 9bd3c6c..0000000
--- a/mindus/assets/blocks/liquid/phase-conduit-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/phase-conduit-bridge.png b/mindus/assets/blocks/liquid/phase-conduit-bridge.png
deleted file mode 100644
index 6eab161..0000000
--- a/mindus/assets/blocks/liquid/phase-conduit-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/phase-conduit-end.png b/mindus/assets/blocks/liquid/phase-conduit-end.png
deleted file mode 100644
index d8b3f61..0000000
--- a/mindus/assets/blocks/liquid/phase-conduit-end.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/phase-conduit.png b/mindus/assets/blocks/liquid/phase-conduit.png
deleted file mode 100644
index 2f7b8cd..0000000
--- a/mindus/assets/blocks/liquid/phase-conduit.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png
deleted file mode 100644
index d7c908d..0000000
--- a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png
deleted file mode 100644
index f5b99bf..0000000
--- a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png
deleted file mode 100644
index c4d4321..0000000
--- a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.png
deleted file mode 100644
index e1028a7..0000000
--- a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png
deleted file mode 100644
index 5a6d0a5..0000000
--- a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit.png
deleted file mode 100644
index 7af3870..0000000
--- a/mindus/assets/blocks/liquid/reinforced-bridge-conduit.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-container.png b/mindus/assets/blocks/liquid/reinforced-liquid-container.png
deleted file mode 100644
index 434b1ac..0000000
--- a/mindus/assets/blocks/liquid/reinforced-liquid-container.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-junction.png b/mindus/assets/blocks/liquid/reinforced-liquid-junction.png
deleted file mode 100644
index bfb52e9..0000000
--- a/mindus/assets/blocks/liquid/reinforced-liquid-junction.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.png b/mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.png
deleted file mode 100644
index 2b69b7b..0000000
--- a/mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-pump-liquid.png b/mindus/assets/blocks/liquid/reinforced-pump-liquid.png
deleted file mode 100644
index 04173af..0000000
--- a/mindus/assets/blocks/liquid/reinforced-pump-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/reinforced-pump.png b/mindus/assets/blocks/liquid/reinforced-pump.png
deleted file mode 100644
index 51f06ca..0000000
--- a/mindus/assets/blocks/liquid/reinforced-pump.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/rotary-pump-liquid.png b/mindus/assets/blocks/liquid/rotary-pump-liquid.png
deleted file mode 100644
index f2d696c..0000000
--- a/mindus/assets/blocks/liquid/rotary-pump-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/liquid/rotary-pump.png b/mindus/assets/blocks/liquid/rotary-pump.png
deleted file mode 100644
index 5c82434..0000000
--- a/mindus/assets/blocks/liquid/rotary-pump.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/canvas.png b/mindus/assets/blocks/logic/canvas.png
deleted file mode 100644
index a70c306..0000000
--- a/mindus/assets/blocks/logic/canvas.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/hyper-processor.png b/mindus/assets/blocks/logic/hyper-processor.png
deleted file mode 100644
index 1915cd9..0000000
--- a/mindus/assets/blocks/logic/hyper-processor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/large-logic-display.png b/mindus/assets/blocks/logic/large-logic-display.png
deleted file mode 100644
index bf64634..0000000
--- a/mindus/assets/blocks/logic/large-logic-display.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/logic-display.png b/mindus/assets/blocks/logic/logic-display.png
deleted file mode 100644
index bd2fc32..0000000
--- a/mindus/assets/blocks/logic/logic-display.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/logic-processor.png b/mindus/assets/blocks/logic/logic-processor.png
deleted file mode 100644
index af50383..0000000
--- a/mindus/assets/blocks/logic/logic-processor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/memory-bank.png b/mindus/assets/blocks/logic/memory-bank.png
deleted file mode 100644
index 5ea0e6c..0000000
--- a/mindus/assets/blocks/logic/memory-bank.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/memory-cell.png b/mindus/assets/blocks/logic/memory-cell.png
deleted file mode 100644
index 34a8c2c..0000000
--- a/mindus/assets/blocks/logic/memory-cell.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/message.png b/mindus/assets/blocks/logic/message.png
deleted file mode 100644
index 48aedde..0000000
--- a/mindus/assets/blocks/logic/message.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/micro-processor.png b/mindus/assets/blocks/logic/micro-processor.png
deleted file mode 100644
index 76f4885..0000000
--- a/mindus/assets/blocks/logic/micro-processor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/reinforced-message.png b/mindus/assets/blocks/logic/reinforced-message.png
deleted file mode 100644
index 37df68d..0000000
--- a/mindus/assets/blocks/logic/reinforced-message.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/switch-on.png b/mindus/assets/blocks/logic/switch-on.png
deleted file mode 100644
index 68e1d2d..0000000
--- a/mindus/assets/blocks/logic/switch-on.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/switch.png b/mindus/assets/blocks/logic/switch.png
deleted file mode 100644
index 5dcd363..0000000
--- a/mindus/assets/blocks/logic/switch.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tile-logic-display.png b/mindus/assets/blocks/logic/tile-logic-display.png
deleted file mode 100644
index 977f5d8..0000000
--- a/mindus/assets/blocks/logic/tile-logic-display.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-0.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-0.png
deleted file mode 100644
index 9be4484..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-0.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-1.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-1.png
deleted file mode 100644
index f76df94..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-10.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-10.png
deleted file mode 100644
index 760d3b4..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-10.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-11.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-11.png
deleted file mode 100644
index f8f0009..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-11.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-12.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-12.png
deleted file mode 100644
index bc3ef87..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-12.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-13.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-13.png
deleted file mode 100644
index 3917ed0..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-13.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-14.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-14.png
deleted file mode 100644
index 9be8d2d..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-14.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-15.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-15.png
deleted file mode 100644
index 24cbf45..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-15.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-16.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-16.png
deleted file mode 100644
index 030c04d..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-16.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-17.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-17.png
deleted file mode 100644
index 2e10d7a..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-17.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-18.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-18.png
deleted file mode 100644
index 32e6748..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-18.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-19.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-19.png
deleted file mode 100644
index e319f4d..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-19.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-2.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-2.png
deleted file mode 100644
index a9aee0b..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-20.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-20.png
deleted file mode 100644
index d9e5150..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-20.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-21.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-21.png
deleted file mode 100644
index 8e2c760..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-21.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-22.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-22.png
deleted file mode 100644
index 4195407..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-22.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-23.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-23.png
deleted file mode 100644
index a588cd0..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-23.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-24.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-24.png
deleted file mode 100644
index f516680..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-24.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-25.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-25.png
deleted file mode 100644
index 2b59262..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-25.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-26.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-26.png
deleted file mode 100644
index 35af5d4..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-26.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-27.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-27.png
deleted file mode 100644
index 3941118..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-27.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-28.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-28.png
deleted file mode 100644
index 3517bec..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-28.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-29.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-29.png
deleted file mode 100644
index cd705e7..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-29.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-3.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-3.png
deleted file mode 100644
index 028cf04..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-30.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-30.png
deleted file mode 100644
index f6a711b..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-30.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-31.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-31.png
deleted file mode 100644
index 68aebb4..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-31.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-32.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-32.png
deleted file mode 100644
index 883257c..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-32.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-33.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-33.png
deleted file mode 100644
index f3fb63a..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-33.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-34.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-34.png
deleted file mode 100644
index 537303f..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-34.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-35.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-35.png
deleted file mode 100644
index 932e934..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-35.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-36.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-36.png
deleted file mode 100644
index 50237ac..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-36.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-37.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-37.png
deleted file mode 100644
index 7ff182b..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-37.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-38.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-38.png
deleted file mode 100644
index e4d823c..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-38.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-39.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-39.png
deleted file mode 100644
index b037e0d..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-39.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-4.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-4.png
deleted file mode 100644
index cdc2ed9..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-4.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-40.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-40.png
deleted file mode 100644
index 5bf94a0..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-40.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-41.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-41.png
deleted file mode 100644
index 9086970..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-41.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-42.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-42.png
deleted file mode 100644
index 653c075..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-42.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-43.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-43.png
deleted file mode 100644
index 03b8c5a..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-43.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-44.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-44.png
deleted file mode 100644
index fcad3bb..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-44.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-45.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-45.png
deleted file mode 100644
index c25438f..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-45.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-46.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-46.png
deleted file mode 100644
index aa1d559..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-46.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-5.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-5.png
deleted file mode 100644
index bb8dfda..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-6.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-6.png
deleted file mode 100644
index a389f86..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-6.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-7.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-7.png
deleted file mode 100644
index 5fa02ec..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-8.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-8.png
deleted file mode 100644
index 4d4a5dc..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-8.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-9.png b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-9.png
deleted file mode 100644
index 0ac5dd1..0000000
--- a/mindus/assets/blocks/logic/tiled-display/tile-logic-display-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/world-cell.png b/mindus/assets/blocks/logic/world-cell.png
deleted file mode 100644
index cfc5d87..0000000
--- a/mindus/assets/blocks/logic/world-cell.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/world-message.png b/mindus/assets/blocks/logic/world-message.png
deleted file mode 100644
index a94bb57..0000000
--- a/mindus/assets/blocks/logic/world-message.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/world-processor.png b/mindus/assets/blocks/logic/world-processor.png
deleted file mode 100644
index 01e1a0c..0000000
--- a/mindus/assets/blocks/logic/world-processor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/world-switch-on.png b/mindus/assets/blocks/logic/world-switch-on.png
deleted file mode 100644
index 47d19d9..0000000
--- a/mindus/assets/blocks/logic/world-switch-on.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/logic/world-switch.png b/mindus/assets/blocks/logic/world-switch.png
deleted file mode 100644
index 8afcf14..0000000
--- a/mindus/assets/blocks/logic/world-switch.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/constructor-top.png b/mindus/assets/blocks/payload/constructor-top.png
deleted file mode 100644
index 7db4670..0000000
--- a/mindus/assets/blocks/payload/constructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/constructor.png b/mindus/assets/blocks/payload/constructor.png
deleted file mode 100644
index 8740a1b..0000000
--- a/mindus/assets/blocks/payload/constructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/deconstructor-top.png b/mindus/assets/blocks/payload/deconstructor-top.png
deleted file mode 100644
index 8cee26d..0000000
--- a/mindus/assets/blocks/payload/deconstructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/deconstructor.png b/mindus/assets/blocks/payload/deconstructor.png
deleted file mode 100644
index 1dc96a1..0000000
--- a/mindus/assets/blocks/payload/deconstructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-in-3-dark.png b/mindus/assets/blocks/payload/factory-in-3-dark.png
deleted file mode 100644
index 21f3c72..0000000
--- a/mindus/assets/blocks/payload/factory-in-3-dark.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-in-3.png b/mindus/assets/blocks/payload/factory-in-3.png
deleted file mode 100644
index 47c8a1c..0000000
--- a/mindus/assets/blocks/payload/factory-in-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-in-5-dark.png b/mindus/assets/blocks/payload/factory-in-5-dark.png
deleted file mode 100644
index 49b528b..0000000
--- a/mindus/assets/blocks/payload/factory-in-5-dark.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-in-5.png b/mindus/assets/blocks/payload/factory-in-5.png
deleted file mode 100644
index 969d1b7..0000000
--- a/mindus/assets/blocks/payload/factory-in-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-out-3-dark.png b/mindus/assets/blocks/payload/factory-out-3-dark.png
deleted file mode 100644
index c9e11fa..0000000
--- a/mindus/assets/blocks/payload/factory-out-3-dark.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-out-3.png b/mindus/assets/blocks/payload/factory-out-3.png
deleted file mode 100644
index 4d84664..0000000
--- a/mindus/assets/blocks/payload/factory-out-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-out-5-dark.png b/mindus/assets/blocks/payload/factory-out-5-dark.png
deleted file mode 100644
index 87f5a34..0000000
--- a/mindus/assets/blocks/payload/factory-out-5-dark.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-out-5.png b/mindus/assets/blocks/payload/factory-out-5.png
deleted file mode 100644
index 713f5fe..0000000
--- a/mindus/assets/blocks/payload/factory-out-5.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-out-7.png b/mindus/assets/blocks/payload/factory-out-7.png
deleted file mode 100644
index d2946b3..0000000
--- a/mindus/assets/blocks/payload/factory-out-7.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-out-9.png b/mindus/assets/blocks/payload/factory-out-9.png
deleted file mode 100644
index 840ca36..0000000
--- a/mindus/assets/blocks/payload/factory-out-9.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/factory-top-3.png b/mindus/assets/blocks/payload/factory-top-3.png
deleted file mode 100644
index ff972ca..0000000
--- a/mindus/assets/blocks/payload/factory-top-3.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/large-constructor-top.png b/mindus/assets/blocks/payload/large-constructor-top.png
deleted file mode 100644
index b664c4c..0000000
--- a/mindus/assets/blocks/payload/large-constructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/large-constructor.png b/mindus/assets/blocks/payload/large-constructor.png
deleted file mode 100644
index ec19fb3..0000000
--- a/mindus/assets/blocks/payload/large-constructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/large-payload-mass-driver.png b/mindus/assets/blocks/payload/large-payload-mass-driver.png
deleted file mode 100644
index f5745e1..0000000
--- a/mindus/assets/blocks/payload/large-payload-mass-driver.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-conveyor.png b/mindus/assets/blocks/payload/payload-conveyor.png
deleted file mode 100644
index 6909b63..0000000
--- a/mindus/assets/blocks/payload/payload-conveyor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-loader-top.png b/mindus/assets/blocks/payload/payload-loader-top.png
deleted file mode 100644
index 97296ba..0000000
--- a/mindus/assets/blocks/payload/payload-loader-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-loader.png b/mindus/assets/blocks/payload/payload-loader.png
deleted file mode 100644
index b950f6d..0000000
--- a/mindus/assets/blocks/payload/payload-loader.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-mass-driver.png b/mindus/assets/blocks/payload/payload-mass-driver.png
deleted file mode 100644
index 24875c1..0000000
--- a/mindus/assets/blocks/payload/payload-mass-driver.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-router.png b/mindus/assets/blocks/payload/payload-router.png
deleted file mode 100644
index 8cb68e4..0000000
--- a/mindus/assets/blocks/payload/payload-router.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-source-top.png b/mindus/assets/blocks/payload/payload-source-top.png
deleted file mode 100644
index 31136c7..0000000
--- a/mindus/assets/blocks/payload/payload-source-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-unloader-top.png b/mindus/assets/blocks/payload/payload-unloader-top.png
deleted file mode 100644
index bd4c21e..0000000
--- a/mindus/assets/blocks/payload/payload-unloader-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-unloader.png b/mindus/assets/blocks/payload/payload-unloader.png
deleted file mode 100644
index d62f642..0000000
--- a/mindus/assets/blocks/payload/payload-unloader.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-void-top.png b/mindus/assets/blocks/payload/payload-void-top.png
deleted file mode 100644
index 48a8592..0000000
--- a/mindus/assets/blocks/payload/payload-void-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/payload-void.png b/mindus/assets/blocks/payload/payload-void.png
deleted file mode 100644
index b1fac7d..0000000
--- a/mindus/assets/blocks/payload/payload-void.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/reinforced-payload-conveyor.png b/mindus/assets/blocks/payload/reinforced-payload-conveyor.png
deleted file mode 100644
index deaa4ed..0000000
--- a/mindus/assets/blocks/payload/reinforced-payload-conveyor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/reinforced-payload-router.png b/mindus/assets/blocks/payload/reinforced-payload-router.png
deleted file mode 100644
index c4be5da..0000000
--- a/mindus/assets/blocks/payload/reinforced-payload-router.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/small-deconstructor-top.png b/mindus/assets/blocks/payload/small-deconstructor-top.png
deleted file mode 100644
index 316b304..0000000
--- a/mindus/assets/blocks/payload/small-deconstructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/payload/small-deconstructor.png b/mindus/assets/blocks/payload/small-deconstructor.png
deleted file mode 100644
index 2b3337e..0000000
--- a/mindus/assets/blocks/payload/small-deconstructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/battery-large.png b/mindus/assets/blocks/power/battery-large.png
deleted file mode 100644
index 7513fe5..0000000
--- a/mindus/assets/blocks/power/battery-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/battery.png b/mindus/assets/blocks/power/battery.png
deleted file mode 100644
index 4282103..0000000
--- a/mindus/assets/blocks/power/battery.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/beam-link.png b/mindus/assets/blocks/power/beam-link.png
deleted file mode 100644
index a4ebbb9..0000000
--- a/mindus/assets/blocks/power/beam-link.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/beam-node.png b/mindus/assets/blocks/power/beam-node.png
deleted file mode 100644
index ba86cc0..0000000
--- a/mindus/assets/blocks/power/beam-node.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/beam-tower.png b/mindus/assets/blocks/power/beam-tower.png
deleted file mode 100644
index 17da542..0000000
--- a/mindus/assets/blocks/power/beam-tower.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/chemical-combustion-chamber.png b/mindus/assets/blocks/power/chemical-combustion-chamber.png
deleted file mode 100644
index 26770b5..0000000
--- a/mindus/assets/blocks/power/chemical-combustion-chamber.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/combustion-generator.png b/mindus/assets/blocks/power/combustion-generator.png
deleted file mode 100644
index ee7caae..0000000
--- a/mindus/assets/blocks/power/combustion-generator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/differential-generator-liquid.png b/mindus/assets/blocks/power/differential-generator-liquid.png
deleted file mode 100644
index 081edf7..0000000
--- a/mindus/assets/blocks/power/differential-generator-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/differential-generator.png b/mindus/assets/blocks/power/differential-generator.png
deleted file mode 100644
index 42f1fbf..0000000
--- a/mindus/assets/blocks/power/differential-generator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/diode-arrow.png b/mindus/assets/blocks/power/diode-arrow.png
deleted file mode 100644
index a34dd68..0000000
--- a/mindus/assets/blocks/power/diode-arrow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/diode.png b/mindus/assets/blocks/power/diode.png
deleted file mode 100644
index 19f3990..0000000
--- a/mindus/assets/blocks/power/diode.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/flux-reactor-bottom.png b/mindus/assets/blocks/power/flux-reactor-bottom.png
deleted file mode 100644
index 2c2d987..0000000
--- a/mindus/assets/blocks/power/flux-reactor-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/flux-reactor-mid.png b/mindus/assets/blocks/power/flux-reactor-mid.png
deleted file mode 100644
index 5f3b0df..0000000
--- a/mindus/assets/blocks/power/flux-reactor-mid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/flux-reactor.png b/mindus/assets/blocks/power/flux-reactor.png
deleted file mode 100644
index 55d3d2b..0000000
--- a/mindus/assets/blocks/power/flux-reactor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/illuminator.png b/mindus/assets/blocks/power/illuminator.png
deleted file mode 100644
index 5ec0f18..0000000
--- a/mindus/assets/blocks/power/illuminator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/impact-reactor-bottom.png b/mindus/assets/blocks/power/impact-reactor-bottom.png
deleted file mode 100644
index 0ac351d..0000000
--- a/mindus/assets/blocks/power/impact-reactor-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/impact-reactor.png b/mindus/assets/blocks/power/impact-reactor.png
deleted file mode 100644
index 4ea795a..0000000
--- a/mindus/assets/blocks/power/impact-reactor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/neoplasia-reactor-bottom.png b/mindus/assets/blocks/power/neoplasia-reactor-bottom.png
deleted file mode 100644
index 8c106dc..0000000
--- a/mindus/assets/blocks/power/neoplasia-reactor-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/neoplasia-reactor-center.png b/mindus/assets/blocks/power/neoplasia-reactor-center.png
deleted file mode 100644
index 30e3a57..0000000
--- a/mindus/assets/blocks/power/neoplasia-reactor-center.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/neoplasia-reactor.png b/mindus/assets/blocks/power/neoplasia-reactor.png
deleted file mode 100644
index 445f340..0000000
--- a/mindus/assets/blocks/power/neoplasia-reactor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/power-node-large.png b/mindus/assets/blocks/power/power-node-large.png
deleted file mode 100644
index 495de11..0000000
--- a/mindus/assets/blocks/power/power-node-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/power-node.png b/mindus/assets/blocks/power/power-node.png
deleted file mode 100644
index 22af588..0000000
--- a/mindus/assets/blocks/power/power-node.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/power-source.png b/mindus/assets/blocks/power/power-source.png
deleted file mode 100644
index c7210da..0000000
--- a/mindus/assets/blocks/power/power-source.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/power-void.png b/mindus/assets/blocks/power/power-void.png
deleted file mode 100644
index 92354a9..0000000
--- a/mindus/assets/blocks/power/power-void.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/pyrolysis-generator.png b/mindus/assets/blocks/power/pyrolysis-generator.png
deleted file mode 100644
index 890ac4e..0000000
--- a/mindus/assets/blocks/power/pyrolysis-generator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/rtg-generator.png b/mindus/assets/blocks/power/rtg-generator.png
deleted file mode 100644
index aefdc12..0000000
--- a/mindus/assets/blocks/power/rtg-generator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/solar-panel-large.png b/mindus/assets/blocks/power/solar-panel-large.png
deleted file mode 100644
index e292111..0000000
--- a/mindus/assets/blocks/power/solar-panel-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/solar-panel.png b/mindus/assets/blocks/power/solar-panel.png
deleted file mode 100644
index 61ef3f0..0000000
--- a/mindus/assets/blocks/power/solar-panel.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/steam-generator-liquid.png b/mindus/assets/blocks/power/steam-generator-liquid.png
deleted file mode 100644
index 91db8f2..0000000
--- a/mindus/assets/blocks/power/steam-generator-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/steam-generator.png b/mindus/assets/blocks/power/steam-generator.png
deleted file mode 100644
index 2bdb951..0000000
--- a/mindus/assets/blocks/power/steam-generator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/thermal-generator.png b/mindus/assets/blocks/power/thermal-generator.png
deleted file mode 100644
index f5e9dba..0000000
--- a/mindus/assets/blocks/power/thermal-generator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/thorium-reactor.png b/mindus/assets/blocks/power/thorium-reactor.png
deleted file mode 100644
index f6a7994..0000000
--- a/mindus/assets/blocks/power/thorium-reactor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/power/turbine-condenser.png b/mindus/assets/blocks/power/turbine-condenser.png
deleted file mode 100644
index bc7f761..0000000
--- a/mindus/assets/blocks/power/turbine-condenser.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/atmospheric-concentrator-bottom.png b/mindus/assets/blocks/production/atmospheric-concentrator-bottom.png
deleted file mode 100644
index 4082ee1..0000000
--- a/mindus/assets/blocks/production/atmospheric-concentrator-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/atmospheric-concentrator.png b/mindus/assets/blocks/production/atmospheric-concentrator.png
deleted file mode 100644
index ad5690f..0000000
--- a/mindus/assets/blocks/production/atmospheric-concentrator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/blast-mixer.png b/mindus/assets/blocks/production/blast-mixer.png
deleted file mode 100644
index b2e0adb..0000000
--- a/mindus/assets/blocks/production/blast-mixer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/carbide-crucible-bottom.png b/mindus/assets/blocks/production/carbide-crucible-bottom.png
deleted file mode 100644
index 22ae9dc..0000000
--- a/mindus/assets/blocks/production/carbide-crucible-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/carbide-crucible.png b/mindus/assets/blocks/production/carbide-crucible.png
deleted file mode 100644
index bb1ebf4..0000000
--- a/mindus/assets/blocks/production/carbide-crucible.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/coal-centrifuge.png b/mindus/assets/blocks/production/coal-centrifuge.png
deleted file mode 100644
index 44a9e66..0000000
--- a/mindus/assets/blocks/production/coal-centrifuge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/cryofluid-mixer.png b/mindus/assets/blocks/production/cryofluid-mixer.png
deleted file mode 100644
index 43ed388..0000000
--- a/mindus/assets/blocks/production/cryofluid-mixer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/cultivator.png b/mindus/assets/blocks/production/cultivator.png
deleted file mode 100644
index 805253c..0000000
--- a/mindus/assets/blocks/production/cultivator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/cyanogen-synthesizer-bottom.png b/mindus/assets/blocks/production/cyanogen-synthesizer-bottom.png
deleted file mode 100644
index 91824e3..0000000
--- a/mindus/assets/blocks/production/cyanogen-synthesizer-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/cyanogen-synthesizer.png b/mindus/assets/blocks/production/cyanogen-synthesizer.png
deleted file mode 100644
index 3cae436..0000000
--- a/mindus/assets/blocks/production/cyanogen-synthesizer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/disassembler-bottom.png b/mindus/assets/blocks/production/disassembler-bottom.png
deleted file mode 100644
index e12a0c6..0000000
--- a/mindus/assets/blocks/production/disassembler-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/disassembler.png b/mindus/assets/blocks/production/disassembler.png
deleted file mode 100644
index 5a432bf..0000000
--- a/mindus/assets/blocks/production/disassembler.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/electric-heater-top1.png b/mindus/assets/blocks/production/electric-heater-top1.png
deleted file mode 100644
index 12cf9db..0000000
--- a/mindus/assets/blocks/production/electric-heater-top1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/electric-heater-top2.png b/mindus/assets/blocks/production/electric-heater-top2.png
deleted file mode 100644
index f4f84ab..0000000
--- a/mindus/assets/blocks/production/electric-heater-top2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/electric-heater.png b/mindus/assets/blocks/production/electric-heater.png
deleted file mode 100644
index 70637d7..0000000
--- a/mindus/assets/blocks/production/electric-heater.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/electrolyzer-bottom.png b/mindus/assets/blocks/production/electrolyzer-bottom.png
deleted file mode 100644
index e133e4e..0000000
--- a/mindus/assets/blocks/production/electrolyzer-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/electrolyzer.png b/mindus/assets/blocks/production/electrolyzer.png
deleted file mode 100644
index 272184f..0000000
--- a/mindus/assets/blocks/production/electrolyzer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-reactor-top1.png b/mindus/assets/blocks/production/heat-reactor-top1.png
deleted file mode 100644
index b9648a8..0000000
--- a/mindus/assets/blocks/production/heat-reactor-top1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-reactor-top2.png b/mindus/assets/blocks/production/heat-reactor-top2.png
deleted file mode 100644
index f0415fd..0000000
--- a/mindus/assets/blocks/production/heat-reactor-top2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-reactor.png b/mindus/assets/blocks/production/heat-reactor.png
deleted file mode 100644
index 4f5c72d..0000000
--- a/mindus/assets/blocks/production/heat-reactor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-redirector-top2.png b/mindus/assets/blocks/production/heat-redirector-top2.png
deleted file mode 100644
index 8f554e8..0000000
--- a/mindus/assets/blocks/production/heat-redirector-top2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-redirector.png b/mindus/assets/blocks/production/heat-redirector.png
deleted file mode 100644
index 65ea982..0000000
--- a/mindus/assets/blocks/production/heat-redirector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-router-top1.png b/mindus/assets/blocks/production/heat-router-top1.png
deleted file mode 100644
index 27bf1ca..0000000
--- a/mindus/assets/blocks/production/heat-router-top1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-router.png b/mindus/assets/blocks/production/heat-router.png
deleted file mode 100644
index bd22dfe..0000000
--- a/mindus/assets/blocks/production/heat-router.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/heat-source.png b/mindus/assets/blocks/production/heat-source.png
deleted file mode 100644
index facde20..0000000
--- a/mindus/assets/blocks/production/heat-source.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/incinerator.png b/mindus/assets/blocks/production/incinerator.png
deleted file mode 100644
index 7251cc1..0000000
--- a/mindus/assets/blocks/production/incinerator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/kiln.png b/mindus/assets/blocks/production/kiln.png
deleted file mode 100644
index 7fb4dcb..0000000
--- a/mindus/assets/blocks/production/kiln.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/melter.png b/mindus/assets/blocks/production/melter.png
deleted file mode 100644
index 3ff8633..0000000
--- a/mindus/assets/blocks/production/melter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/multi-press.png b/mindus/assets/blocks/production/multi-press.png
deleted file mode 100644
index 46d7ac8..0000000
--- a/mindus/assets/blocks/production/multi-press.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/oxidation-chamber-top1.png b/mindus/assets/blocks/production/oxidation-chamber-top1.png
deleted file mode 100644
index c4fbf98..0000000
--- a/mindus/assets/blocks/production/oxidation-chamber-top1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/oxidation-chamber-top2.png b/mindus/assets/blocks/production/oxidation-chamber-top2.png
deleted file mode 100644
index 281930b..0000000
--- a/mindus/assets/blocks/production/oxidation-chamber-top2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/oxidation-chamber.png b/mindus/assets/blocks/production/oxidation-chamber.png
deleted file mode 100644
index 9c58748..0000000
--- a/mindus/assets/blocks/production/oxidation-chamber.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/phase-heater-top1.png b/mindus/assets/blocks/production/phase-heater-top1.png
deleted file mode 100644
index c0f2131..0000000
--- a/mindus/assets/blocks/production/phase-heater-top1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/phase-heater-top2.png b/mindus/assets/blocks/production/phase-heater-top2.png
deleted file mode 100644
index f03df8d..0000000
--- a/mindus/assets/blocks/production/phase-heater-top2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/phase-heater.png b/mindus/assets/blocks/production/phase-heater.png
deleted file mode 100644
index 4b3a398..0000000
--- a/mindus/assets/blocks/production/phase-heater.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/phase-synthesizer.png b/mindus/assets/blocks/production/phase-synthesizer.png
deleted file mode 100644
index c69129e..0000000
--- a/mindus/assets/blocks/production/phase-synthesizer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/phase-weaver.png b/mindus/assets/blocks/production/phase-weaver.png
deleted file mode 100644
index 8d76b9a..0000000
--- a/mindus/assets/blocks/production/phase-weaver.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/plastanium-compressor.png b/mindus/assets/blocks/production/plastanium-compressor.png
deleted file mode 100644
index eebc615..0000000
--- a/mindus/assets/blocks/production/plastanium-compressor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/pulverizer.png b/mindus/assets/blocks/production/pulverizer.png
deleted file mode 100644
index b2ef8b6..0000000
--- a/mindus/assets/blocks/production/pulverizer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/pyratite-mixer.png b/mindus/assets/blocks/production/pyratite-mixer.png
deleted file mode 100644
index 0f74418..0000000
--- a/mindus/assets/blocks/production/pyratite-mixer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/separator.png b/mindus/assets/blocks/production/separator.png
deleted file mode 100644
index d7de549..0000000
--- a/mindus/assets/blocks/production/separator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/silicon-arc-furnace.png b/mindus/assets/blocks/production/silicon-arc-furnace.png
deleted file mode 100644
index e3debd7..0000000
--- a/mindus/assets/blocks/production/silicon-arc-furnace.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/silicon-crucible.png b/mindus/assets/blocks/production/silicon-crucible.png
deleted file mode 100644
index 80f11bb..0000000
--- a/mindus/assets/blocks/production/silicon-crucible.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/silicon-smelter.png b/mindus/assets/blocks/production/silicon-smelter.png
deleted file mode 100644
index 915d206..0000000
--- a/mindus/assets/blocks/production/silicon-smelter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/slag-heater-bottom.png b/mindus/assets/blocks/production/slag-heater-bottom.png
deleted file mode 100644
index 5966a6c..0000000
--- a/mindus/assets/blocks/production/slag-heater-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/slag-heater.png b/mindus/assets/blocks/production/slag-heater.png
deleted file mode 100644
index 7f997f9..0000000
--- a/mindus/assets/blocks/production/slag-heater.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/slag-incinerator-liquid.png b/mindus/assets/blocks/production/slag-incinerator-liquid.png
deleted file mode 100644
index 3f4b8d4..0000000
--- a/mindus/assets/blocks/production/slag-incinerator-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/slag-incinerator.png b/mindus/assets/blocks/production/slag-incinerator.png
deleted file mode 100644
index ffa2be3..0000000
--- a/mindus/assets/blocks/production/slag-incinerator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/small-heat-redirector-top1.png b/mindus/assets/blocks/production/small-heat-redirector-top1.png
deleted file mode 100644
index 51da879..0000000
--- a/mindus/assets/blocks/production/small-heat-redirector-top1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/small-heat-redirector-top2.png b/mindus/assets/blocks/production/small-heat-redirector-top2.png
deleted file mode 100644
index 775fac4..0000000
--- a/mindus/assets/blocks/production/small-heat-redirector-top2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/small-heat-redirector.png b/mindus/assets/blocks/production/small-heat-redirector.png
deleted file mode 100644
index 9b98756..0000000
--- a/mindus/assets/blocks/production/small-heat-redirector.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/spore-press.png b/mindus/assets/blocks/production/spore-press.png
deleted file mode 100644
index 2fdfa23..0000000
--- a/mindus/assets/blocks/production/spore-press.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/surge-crucible-bottom.png b/mindus/assets/blocks/production/surge-crucible-bottom.png
deleted file mode 100644
index 4c1b11c..0000000
--- a/mindus/assets/blocks/production/surge-crucible-bottom.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/surge-crucible-liquid.png b/mindus/assets/blocks/production/surge-crucible-liquid.png
deleted file mode 100644
index 7579101..0000000
--- a/mindus/assets/blocks/production/surge-crucible-liquid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/surge-crucible.png b/mindus/assets/blocks/production/surge-crucible.png
deleted file mode 100644
index 5479202..0000000
--- a/mindus/assets/blocks/production/surge-crucible.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/production/surge-smelter.png b/mindus/assets/blocks/production/surge-smelter.png
deleted file mode 100644
index 9188278..0000000
--- a/mindus/assets/blocks/production/surge-smelter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-acropolis-team.png b/mindus/assets/blocks/storage/core-acropolis-team.png
deleted file mode 100644
index 63b3e38..0000000
--- a/mindus/assets/blocks/storage/core-acropolis-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-acropolis.png b/mindus/assets/blocks/storage/core-acropolis.png
deleted file mode 100644
index 24cfcb1..0000000
--- a/mindus/assets/blocks/storage/core-acropolis.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-bastion-team.png b/mindus/assets/blocks/storage/core-bastion-team.png
deleted file mode 100644
index 5ff4f59..0000000
--- a/mindus/assets/blocks/storage/core-bastion-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-bastion.png b/mindus/assets/blocks/storage/core-bastion.png
deleted file mode 100644
index 91a45f6..0000000
--- a/mindus/assets/blocks/storage/core-bastion.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-citadel-team.png b/mindus/assets/blocks/storage/core-citadel-team.png
deleted file mode 100644
index 0115133..0000000
--- a/mindus/assets/blocks/storage/core-citadel-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-citadel.png b/mindus/assets/blocks/storage/core-citadel.png
deleted file mode 100644
index e525927..0000000
--- a/mindus/assets/blocks/storage/core-citadel.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-foundation-team.png b/mindus/assets/blocks/storage/core-foundation-team.png
deleted file mode 100644
index f4b33c6..0000000
--- a/mindus/assets/blocks/storage/core-foundation-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-foundation.png b/mindus/assets/blocks/storage/core-foundation.png
deleted file mode 100644
index 05fc9ed..0000000
--- a/mindus/assets/blocks/storage/core-foundation.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-nucleus-team.png b/mindus/assets/blocks/storage/core-nucleus-team.png
deleted file mode 100644
index 89d975b..0000000
--- a/mindus/assets/blocks/storage/core-nucleus-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-shard-team.png b/mindus/assets/blocks/storage/core-shard-team.png
deleted file mode 100644
index f2ffa19..0000000
--- a/mindus/assets/blocks/storage/core-shard-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/core-shard.png b/mindus/assets/blocks/storage/core-shard.png
deleted file mode 100644
index 81ee21d..0000000
--- a/mindus/assets/blocks/storage/core-shard.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/reinforced-container-team.png b/mindus/assets/blocks/storage/reinforced-container-team.png
deleted file mode 100644
index 032d615..0000000
--- a/mindus/assets/blocks/storage/reinforced-container-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/reinforced-container.png b/mindus/assets/blocks/storage/reinforced-container.png
deleted file mode 100644
index c7933ef..0000000
--- a/mindus/assets/blocks/storage/reinforced-container.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/reinforced-vault.png b/mindus/assets/blocks/storage/reinforced-vault.png
deleted file mode 100644
index 108cd16..0000000
--- a/mindus/assets/blocks/storage/reinforced-vault.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/unloader-center.png b/mindus/assets/blocks/storage/unloader-center.png
deleted file mode 100644
index 3a8220b..0000000
--- a/mindus/assets/blocks/storage/unloader-center.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/unloader.png b/mindus/assets/blocks/storage/unloader.png
deleted file mode 100644
index 6020a6f..0000000
--- a/mindus/assets/blocks/storage/unloader.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/storage/vault-team.png b/mindus/assets/blocks/storage/vault-team.png
deleted file mode 100644
index e6a76aa..0000000
--- a/mindus/assets/blocks/storage/vault-team.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/afflict.png b/mindus/assets/blocks/turrets/afflict.png
deleted file mode 100644
index 36a7b05..0000000
--- a/mindus/assets/blocks/turrets/afflict.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/arc.png b/mindus/assets/blocks/turrets/arc.png
deleted file mode 100644
index ae233bb..0000000
--- a/mindus/assets/blocks/turrets/arc.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/breach.png b/mindus/assets/blocks/turrets/breach.png
deleted file mode 100644
index 2db1e45..0000000
--- a/mindus/assets/blocks/turrets/breach.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/cyclone.png b/mindus/assets/blocks/turrets/cyclone.png
deleted file mode 100644
index 1681eb2..0000000
--- a/mindus/assets/blocks/turrets/cyclone.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/diffuse.png b/mindus/assets/blocks/turrets/diffuse.png
deleted file mode 100644
index 41d1eab..0000000
--- a/mindus/assets/blocks/turrets/diffuse.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/disperse.png b/mindus/assets/blocks/turrets/disperse.png
deleted file mode 100644
index 45b7073..0000000
--- a/mindus/assets/blocks/turrets/disperse.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/duo.png b/mindus/assets/blocks/turrets/duo.png
deleted file mode 100644
index 22dbab0..0000000
--- a/mindus/assets/blocks/turrets/duo.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/foreshadow.png b/mindus/assets/blocks/turrets/foreshadow.png
deleted file mode 100644
index e7b4a7d..0000000
--- a/mindus/assets/blocks/turrets/foreshadow.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/fuse.png b/mindus/assets/blocks/turrets/fuse.png
deleted file mode 100644
index 8091476..0000000
--- a/mindus/assets/blocks/turrets/fuse.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/hail.png b/mindus/assets/blocks/turrets/hail.png
deleted file mode 100644
index 7e6cff8..0000000
--- a/mindus/assets/blocks/turrets/hail.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/lancer.png b/mindus/assets/blocks/turrets/lancer.png
deleted file mode 100644
index 872e9b1..0000000
--- a/mindus/assets/blocks/turrets/lancer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/lustre.png b/mindus/assets/blocks/turrets/lustre.png
deleted file mode 100644
index 680f4bc..0000000
--- a/mindus/assets/blocks/turrets/lustre.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/malign.png b/mindus/assets/blocks/turrets/malign.png
deleted file mode 100644
index 267729b..0000000
--- a/mindus/assets/blocks/turrets/malign.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/meltdown.png b/mindus/assets/blocks/turrets/meltdown.png
deleted file mode 100644
index f60d55f..0000000
--- a/mindus/assets/blocks/turrets/meltdown.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/parallax.png b/mindus/assets/blocks/turrets/parallax.png
deleted file mode 100644
index 5616f34..0000000
--- a/mindus/assets/blocks/turrets/parallax.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/ripple.png b/mindus/assets/blocks/turrets/ripple.png
deleted file mode 100644
index cd86d4b..0000000
--- a/mindus/assets/blocks/turrets/ripple.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/salvo.png b/mindus/assets/blocks/turrets/salvo.png
deleted file mode 100644
index f0d2f85..0000000
--- a/mindus/assets/blocks/turrets/salvo.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/scathe.png b/mindus/assets/blocks/turrets/scathe.png
deleted file mode 100644
index aafddc4..0000000
--- a/mindus/assets/blocks/turrets/scathe.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/scatter.png b/mindus/assets/blocks/turrets/scatter.png
deleted file mode 100644
index 95d411f..0000000
--- a/mindus/assets/blocks/turrets/scatter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/scorch.png b/mindus/assets/blocks/turrets/scorch.png
deleted file mode 100644
index 8629eb8..0000000
--- a/mindus/assets/blocks/turrets/scorch.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/segment.png b/mindus/assets/blocks/turrets/segment.png
deleted file mode 100644
index 1d83425..0000000
--- a/mindus/assets/blocks/turrets/segment.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/smite.png b/mindus/assets/blocks/turrets/smite.png
deleted file mode 100644
index 4f5164f..0000000
--- a/mindus/assets/blocks/turrets/smite.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/spectre.png b/mindus/assets/blocks/turrets/spectre.png
deleted file mode 100644
index e8de5dc..0000000
--- a/mindus/assets/blocks/turrets/spectre.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/sublimate.png b/mindus/assets/blocks/turrets/sublimate.png
deleted file mode 100644
index 8765018..0000000
--- a/mindus/assets/blocks/turrets/sublimate.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/swarmer.png b/mindus/assets/blocks/turrets/swarmer.png
deleted file mode 100644
index 3408f0a..0000000
--- a/mindus/assets/blocks/turrets/swarmer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/titan.png b/mindus/assets/blocks/turrets/titan.png
deleted file mode 100644
index 5649f91..0000000
--- a/mindus/assets/blocks/turrets/titan.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/tsunami.png b/mindus/assets/blocks/turrets/tsunami.png
deleted file mode 100644
index eea1b10..0000000
--- a/mindus/assets/blocks/turrets/tsunami.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/turrets/wave.png b/mindus/assets/blocks/turrets/wave.png
deleted file mode 100644
index ac6aa6f..0000000
--- a/mindus/assets/blocks/turrets/wave.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/additive-reconstructor-top.png b/mindus/assets/blocks/units/additive-reconstructor-top.png
deleted file mode 100644
index 4bebb1f..0000000
--- a/mindus/assets/blocks/units/additive-reconstructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/additive-reconstructor.png b/mindus/assets/blocks/units/additive-reconstructor.png
deleted file mode 100644
index 7adf765..0000000
--- a/mindus/assets/blocks/units/additive-reconstructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/air-factory.png b/mindus/assets/blocks/units/air-factory.png
deleted file mode 100644
index 457c7b7..0000000
--- a/mindus/assets/blocks/units/air-factory.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/basic-assembler-module-side1.png b/mindus/assets/blocks/units/basic-assembler-module-side1.png
deleted file mode 100644
index ec16f60..0000000
--- a/mindus/assets/blocks/units/basic-assembler-module-side1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/basic-assembler-module-side2.png b/mindus/assets/blocks/units/basic-assembler-module-side2.png
deleted file mode 100644
index fec9314..0000000
--- a/mindus/assets/blocks/units/basic-assembler-module-side2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/basic-assembler-module.png b/mindus/assets/blocks/units/basic-assembler-module.png
deleted file mode 100644
index cf6d2a7..0000000
--- a/mindus/assets/blocks/units/basic-assembler-module.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/exponential-reconstructor-top.png b/mindus/assets/blocks/units/exponential-reconstructor-top.png
deleted file mode 100644
index 4b8429d..0000000
--- a/mindus/assets/blocks/units/exponential-reconstructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/exponential-reconstructor.png b/mindus/assets/blocks/units/exponential-reconstructor.png
deleted file mode 100644
index 45fc0ed..0000000
--- a/mindus/assets/blocks/units/exponential-reconstructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ground-factory.png b/mindus/assets/blocks/units/ground-factory.png
deleted file mode 100644
index 17c34c1..0000000
--- a/mindus/assets/blocks/units/ground-factory.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-assembler-side1.png b/mindus/assets/blocks/units/mech-assembler-side1.png
deleted file mode 100644
index 670ea14..0000000
--- a/mindus/assets/blocks/units/mech-assembler-side1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-assembler-side2.png b/mindus/assets/blocks/units/mech-assembler-side2.png
deleted file mode 100644
index 9aa22ee..0000000
--- a/mindus/assets/blocks/units/mech-assembler-side2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-assembler-top.png b/mindus/assets/blocks/units/mech-assembler-top.png
deleted file mode 100644
index a24db54..0000000
--- a/mindus/assets/blocks/units/mech-assembler-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-assembler.png b/mindus/assets/blocks/units/mech-assembler.png
deleted file mode 100644
index 523a036..0000000
--- a/mindus/assets/blocks/units/mech-assembler.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-fabricator-top.png b/mindus/assets/blocks/units/mech-fabricator-top.png
deleted file mode 100644
index 38608fd..0000000
--- a/mindus/assets/blocks/units/mech-fabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-fabricator.png b/mindus/assets/blocks/units/mech-fabricator.png
deleted file mode 100644
index 5095ced..0000000
--- a/mindus/assets/blocks/units/mech-fabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-refabricator-top.png b/mindus/assets/blocks/units/mech-refabricator-top.png
deleted file mode 100644
index 96ed2d6..0000000
--- a/mindus/assets/blocks/units/mech-refabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/mech-refabricator.png b/mindus/assets/blocks/units/mech-refabricator.png
deleted file mode 100644
index 919d506..0000000
--- a/mindus/assets/blocks/units/mech-refabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/multiplicative-reconstructor-top.png b/mindus/assets/blocks/units/multiplicative-reconstructor-top.png
deleted file mode 100644
index fafb3d1..0000000
--- a/mindus/assets/blocks/units/multiplicative-reconstructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/multiplicative-reconstructor.png b/mindus/assets/blocks/units/multiplicative-reconstructor.png
deleted file mode 100644
index 01325bb..0000000
--- a/mindus/assets/blocks/units/multiplicative-reconstructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/naval-factory.png b/mindus/assets/blocks/units/naval-factory.png
deleted file mode 100644
index 1d28a1c..0000000
--- a/mindus/assets/blocks/units/naval-factory.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/prime-refabricator-top.png b/mindus/assets/blocks/units/prime-refabricator-top.png
deleted file mode 100644
index 96e98f5..0000000
--- a/mindus/assets/blocks/units/prime-refabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/prime-refabricator.png b/mindus/assets/blocks/units/prime-refabricator.png
deleted file mode 100644
index 3211f45..0000000
--- a/mindus/assets/blocks/units/prime-refabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/repair-point.png b/mindus/assets/blocks/units/repair-point.png
deleted file mode 100644
index 30f82c6..0000000
--- a/mindus/assets/blocks/units/repair-point.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/repair-turret.png b/mindus/assets/blocks/units/repair-turret.png
deleted file mode 100644
index 2ff7843..0000000
--- a/mindus/assets/blocks/units/repair-turret.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-assembler-side1.png b/mindus/assets/blocks/units/ship-assembler-side1.png
deleted file mode 100644
index 7ae1060..0000000
--- a/mindus/assets/blocks/units/ship-assembler-side1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-assembler-side2.png b/mindus/assets/blocks/units/ship-assembler-side2.png
deleted file mode 100644
index 5391be4..0000000
--- a/mindus/assets/blocks/units/ship-assembler-side2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-assembler-top.png b/mindus/assets/blocks/units/ship-assembler-top.png
deleted file mode 100644
index 7949283..0000000
--- a/mindus/assets/blocks/units/ship-assembler-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-assembler.png b/mindus/assets/blocks/units/ship-assembler.png
deleted file mode 100644
index 5fef2a0..0000000
--- a/mindus/assets/blocks/units/ship-assembler.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-fabricator-top.png b/mindus/assets/blocks/units/ship-fabricator-top.png
deleted file mode 100644
index 20ae525..0000000
--- a/mindus/assets/blocks/units/ship-fabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-fabricator.png b/mindus/assets/blocks/units/ship-fabricator.png
deleted file mode 100644
index 3d88ae1..0000000
--- a/mindus/assets/blocks/units/ship-fabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-refabricator-top.png b/mindus/assets/blocks/units/ship-refabricator-top.png
deleted file mode 100644
index 08bfb7d..0000000
--- a/mindus/assets/blocks/units/ship-refabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/ship-refabricator.png b/mindus/assets/blocks/units/ship-refabricator.png
deleted file mode 100644
index bc8e7b1..0000000
--- a/mindus/assets/blocks/units/ship-refabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-assembler-side1.png b/mindus/assets/blocks/units/tank-assembler-side1.png
deleted file mode 100644
index ac67f7b..0000000
--- a/mindus/assets/blocks/units/tank-assembler-side1.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-assembler-side2.png b/mindus/assets/blocks/units/tank-assembler-side2.png
deleted file mode 100644
index 56df93f..0000000
--- a/mindus/assets/blocks/units/tank-assembler-side2.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-assembler-top.png b/mindus/assets/blocks/units/tank-assembler-top.png
deleted file mode 100644
index 8301360..0000000
--- a/mindus/assets/blocks/units/tank-assembler-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-assembler.png b/mindus/assets/blocks/units/tank-assembler.png
deleted file mode 100644
index 0fdcd4f..0000000
--- a/mindus/assets/blocks/units/tank-assembler.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-fabricator-top.png b/mindus/assets/blocks/units/tank-fabricator-top.png
deleted file mode 100644
index 73984a1..0000000
--- a/mindus/assets/blocks/units/tank-fabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-fabricator.png b/mindus/assets/blocks/units/tank-fabricator.png
deleted file mode 100644
index ee0ce46..0000000
--- a/mindus/assets/blocks/units/tank-fabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-refabricator-top.png b/mindus/assets/blocks/units/tank-refabricator-top.png
deleted file mode 100644
index 2206ae2..0000000
--- a/mindus/assets/blocks/units/tank-refabricator-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tank-refabricator.png b/mindus/assets/blocks/units/tank-refabricator.png
deleted file mode 100644
index ef43609..0000000
--- a/mindus/assets/blocks/units/tank-refabricator.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tetrative-reconstructor-top.png b/mindus/assets/blocks/units/tetrative-reconstructor-top.png
deleted file mode 100644
index 5675ecc..0000000
--- a/mindus/assets/blocks/units/tetrative-reconstructor-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/tetrative-reconstructor.png b/mindus/assets/blocks/units/tetrative-reconstructor.png
deleted file mode 100644
index 40e1f56..0000000
--- a/mindus/assets/blocks/units/tetrative-reconstructor.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/unit-cargo-loader.png b/mindus/assets/blocks/units/unit-cargo-loader.png
deleted file mode 100644
index 883973e..0000000
--- a/mindus/assets/blocks/units/unit-cargo-loader.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/units/unit-repair-tower.png b/mindus/assets/blocks/units/unit-repair-tower.png
deleted file mode 100644
index 87abdaa..0000000
--- a/mindus/assets/blocks/units/unit-repair-tower.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/beryllium-wall-large.png b/mindus/assets/blocks/walls/beryllium-wall-large.png
deleted file mode 100644
index c067d99..0000000
--- a/mindus/assets/blocks/walls/beryllium-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/beryllium-wall.png b/mindus/assets/blocks/walls/beryllium-wall.png
deleted file mode 100644
index 3fbe9ea..0000000
--- a/mindus/assets/blocks/walls/beryllium-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/blast-door-open.png b/mindus/assets/blocks/walls/blast-door-open.png
deleted file mode 100644
index 4b7f59b..0000000
--- a/mindus/assets/blocks/walls/blast-door-open.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/blast-door.png b/mindus/assets/blocks/walls/blast-door.png
deleted file mode 100644
index 5f6ac3f..0000000
--- a/mindus/assets/blocks/walls/blast-door.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/carbide-wall-large.png b/mindus/assets/blocks/walls/carbide-wall-large.png
deleted file mode 100644
index a6e21ce..0000000
--- a/mindus/assets/blocks/walls/carbide-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/carbide-wall.png b/mindus/assets/blocks/walls/carbide-wall.png
deleted file mode 100644
index ee23407..0000000
--- a/mindus/assets/blocks/walls/carbide-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/copper-wall.png b/mindus/assets/blocks/walls/copper-wall.png
deleted file mode 100644
index a9ed4f6..0000000
--- a/mindus/assets/blocks/walls/copper-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/door-large-open.png b/mindus/assets/blocks/walls/door-large-open.png
deleted file mode 100644
index cfd8cf3..0000000
--- a/mindus/assets/blocks/walls/door-large-open.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/door-large.png b/mindus/assets/blocks/walls/door-large.png
deleted file mode 100644
index aaaf2c7..0000000
--- a/mindus/assets/blocks/walls/door-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/door-open.png b/mindus/assets/blocks/walls/door-open.png
deleted file mode 100644
index f07b341..0000000
--- a/mindus/assets/blocks/walls/door-open.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/door.png b/mindus/assets/blocks/walls/door.png
deleted file mode 100644
index e80493c..0000000
--- a/mindus/assets/blocks/walls/door.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/phase-wall-large.png b/mindus/assets/blocks/walls/phase-wall-large.png
deleted file mode 100644
index ced55cf..0000000
--- a/mindus/assets/blocks/walls/phase-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/phase-wall.png b/mindus/assets/blocks/walls/phase-wall.png
deleted file mode 100644
index 2cc4580..0000000
--- a/mindus/assets/blocks/walls/phase-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/plastanium-wall-large.png b/mindus/assets/blocks/walls/plastanium-wall-large.png
deleted file mode 100644
index bcd7e44..0000000
--- a/mindus/assets/blocks/walls/plastanium-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/plastanium-wall.png b/mindus/assets/blocks/walls/plastanium-wall.png
deleted file mode 100644
index 11038ff..0000000
--- a/mindus/assets/blocks/walls/plastanium-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/reinforced-surge-wall-large.png b/mindus/assets/blocks/walls/reinforced-surge-wall-large.png
deleted file mode 100644
index 9a8c943..0000000
--- a/mindus/assets/blocks/walls/reinforced-surge-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/reinforced-surge-wall.png b/mindus/assets/blocks/walls/reinforced-surge-wall.png
deleted file mode 100644
index 1777cbb..0000000
--- a/mindus/assets/blocks/walls/reinforced-surge-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/scrap-wall-huge.png b/mindus/assets/blocks/walls/scrap-wall-huge.png
deleted file mode 100644
index a22f775..0000000
--- a/mindus/assets/blocks/walls/scrap-wall-huge.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/scrap-wall-large.png b/mindus/assets/blocks/walls/scrap-wall-large.png
deleted file mode 100644
index f755c40..0000000
--- a/mindus/assets/blocks/walls/scrap-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/scrap-wall.png b/mindus/assets/blocks/walls/scrap-wall.png
deleted file mode 100644
index 84ad269..0000000
--- a/mindus/assets/blocks/walls/scrap-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/surge-wall-large.png b/mindus/assets/blocks/walls/surge-wall-large.png
deleted file mode 100644
index b83ffce..0000000
--- a/mindus/assets/blocks/walls/surge-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/surge-wall.png b/mindus/assets/blocks/walls/surge-wall.png
deleted file mode 100644
index c9f7b1e..0000000
--- a/mindus/assets/blocks/walls/surge-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/thorium-wall.png b/mindus/assets/blocks/walls/thorium-wall.png
deleted file mode 100644
index 0167e34..0000000
--- a/mindus/assets/blocks/walls/thorium-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/thruster-top.png b/mindus/assets/blocks/walls/thruster-top.png
deleted file mode 100644
index 8cbce9b..0000000
--- a/mindus/assets/blocks/walls/thruster-top.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/titanium-wall.png b/mindus/assets/blocks/walls/titanium-wall.png
deleted file mode 100644
index e26c955..0000000
--- a/mindus/assets/blocks/walls/titanium-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/tungsten-wall-large.png b/mindus/assets/blocks/walls/tungsten-wall-large.png
deleted file mode 100644
index 97cc952..0000000
--- a/mindus/assets/blocks/walls/tungsten-wall-large.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/blocks/walls/tungsten-wall.png b/mindus/assets/blocks/walls/tungsten-wall.png
deleted file mode 100644
index 774f819..0000000
--- a/mindus/assets/blocks/walls/tungsten-wall.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/aegires.png b/mindus/assets/units/aegires.png
deleted file mode 100644
index 0b7baf9..0000000
--- a/mindus/assets/units/aegires.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/alpha.png b/mindus/assets/units/alpha.png
deleted file mode 100644
index 868df0d..0000000
--- a/mindus/assets/units/alpha.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/anthicus-missile.png b/mindus/assets/units/anthicus-missile.png
deleted file mode 100644
index 406dc4b..0000000
--- a/mindus/assets/units/anthicus-missile.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/anthicus.png b/mindus/assets/units/anthicus.png
deleted file mode 100644
index 96e6674..0000000
--- a/mindus/assets/units/anthicus.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/antumbra.png b/mindus/assets/units/antumbra.png
deleted file mode 100644
index ae10200..0000000
--- a/mindus/assets/units/antumbra.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/arkyid.png b/mindus/assets/units/arkyid.png
deleted file mode 100644
index 39ec11e..0000000
--- a/mindus/assets/units/arkyid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/assembly-drone.png b/mindus/assets/units/assembly-drone.png
deleted file mode 100644
index bb9104b..0000000
--- a/mindus/assets/units/assembly-drone.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/atrax.png b/mindus/assets/units/atrax.png
deleted file mode 100644
index 5de4da8..0000000
--- a/mindus/assets/units/atrax.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/avert.png b/mindus/assets/units/avert.png
deleted file mode 100644
index 451e5ee..0000000
--- a/mindus/assets/units/avert.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/beta.png b/mindus/assets/units/beta.png
deleted file mode 100644
index 4739bb8..0000000
--- a/mindus/assets/units/beta.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/bryde.png b/mindus/assets/units/bryde.png
deleted file mode 100644
index 2b95dc1..0000000
--- a/mindus/assets/units/bryde.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/cleroi.png b/mindus/assets/units/cleroi.png
deleted file mode 100644
index 8d90617..0000000
--- a/mindus/assets/units/cleroi.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/collaris.png b/mindus/assets/units/collaris.png
deleted file mode 100644
index 5858a88..0000000
--- a/mindus/assets/units/collaris.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/conquer.png b/mindus/assets/units/conquer.png
deleted file mode 100644
index d1d73b6..0000000
--- a/mindus/assets/units/conquer.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/corvus.png b/mindus/assets/units/corvus.png
deleted file mode 100644
index 84a4c18..0000000
--- a/mindus/assets/units/corvus.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/crawler.png b/mindus/assets/units/crawler.png
deleted file mode 100644
index df0b6b0..0000000
--- a/mindus/assets/units/crawler.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/cyerce.png b/mindus/assets/units/cyerce.png
deleted file mode 100644
index 903fbe3..0000000
--- a/mindus/assets/units/cyerce.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/dagger.png b/mindus/assets/units/dagger.png
deleted file mode 100644
index 609f158..0000000
--- a/mindus/assets/units/dagger.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/disrupt-missile.png b/mindus/assets/units/disrupt-missile.png
deleted file mode 100644
index 6d0ad76..0000000
--- a/mindus/assets/units/disrupt-missile.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/disrupt.png b/mindus/assets/units/disrupt.png
deleted file mode 100644
index f25c032..0000000
--- a/mindus/assets/units/disrupt.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/eclipse.png b/mindus/assets/units/eclipse.png
deleted file mode 100644
index ca644ca..0000000
--- a/mindus/assets/units/eclipse.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/elude.png b/mindus/assets/units/elude.png
deleted file mode 100644
index 09e0de0..0000000
--- a/mindus/assets/units/elude.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/emanate.png b/mindus/assets/units/emanate.png
deleted file mode 100644
index e4109fc..0000000
--- a/mindus/assets/units/emanate.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/evoke.png b/mindus/assets/units/evoke.png
deleted file mode 100644
index 891ff30..0000000
--- a/mindus/assets/units/evoke.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/flare.png b/mindus/assets/units/flare.png
deleted file mode 100644
index 6000f66..0000000
--- a/mindus/assets/units/flare.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/fortress.png b/mindus/assets/units/fortress.png
deleted file mode 100644
index bbdf6e1..0000000
--- a/mindus/assets/units/fortress.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/gamma.png b/mindus/assets/units/gamma.png
deleted file mode 100644
index bcb08df..0000000
--- a/mindus/assets/units/gamma.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/horizon.png b/mindus/assets/units/horizon.png
deleted file mode 100644
index 11d2739..0000000
--- a/mindus/assets/units/horizon.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/incite.png b/mindus/assets/units/incite.png
deleted file mode 100644
index 34131f3..0000000
--- a/mindus/assets/units/incite.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/latum.png b/mindus/assets/units/latum.png
deleted file mode 100644
index ecba602..0000000
--- a/mindus/assets/units/latum.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/locus.png b/mindus/assets/units/locus.png
deleted file mode 100644
index 1cb66bf..0000000
--- a/mindus/assets/units/locus.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/mace.png b/mindus/assets/units/mace.png
deleted file mode 100644
index 0b4a6a2..0000000
--- a/mindus/assets/units/mace.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/manifold.png b/mindus/assets/units/manifold.png
deleted file mode 100644
index d42d391..0000000
--- a/mindus/assets/units/manifold.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/mega.png b/mindus/assets/units/mega.png
deleted file mode 100644
index 7f58fab..0000000
--- a/mindus/assets/units/mega.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/merui.png b/mindus/assets/units/merui.png
deleted file mode 100644
index a28422c..0000000
--- a/mindus/assets/units/merui.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/minke.png b/mindus/assets/units/minke.png
deleted file mode 100644
index 0cc85e7..0000000
--- a/mindus/assets/units/minke.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/mono.png b/mindus/assets/units/mono.png
deleted file mode 100644
index 533a3ed..0000000
--- a/mindus/assets/units/mono.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/navanax.png b/mindus/assets/units/navanax.png
deleted file mode 100644
index da64343..0000000
--- a/mindus/assets/units/navanax.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/nova.png b/mindus/assets/units/nova.png
deleted file mode 100644
index 7ab100d..0000000
--- a/mindus/assets/units/nova.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/obviate.png b/mindus/assets/units/obviate.png
deleted file mode 100644
index a836265..0000000
--- a/mindus/assets/units/obviate.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/oct.png b/mindus/assets/units/oct.png
deleted file mode 100644
index 8c18198..0000000
--- a/mindus/assets/units/oct.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/omura.png b/mindus/assets/units/omura.png
deleted file mode 100644
index be703c6..0000000
--- a/mindus/assets/units/omura.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/oxynoe.png b/mindus/assets/units/oxynoe.png
deleted file mode 100644
index 87fc11a..0000000
--- a/mindus/assets/units/oxynoe.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/poly.png b/mindus/assets/units/poly.png
deleted file mode 100644
index e792d5e..0000000
--- a/mindus/assets/units/poly.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/precept.png b/mindus/assets/units/precept.png
deleted file mode 100644
index 32fe877..0000000
--- a/mindus/assets/units/precept.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/pulsar.png b/mindus/assets/units/pulsar.png
deleted file mode 100644
index 152c365..0000000
--- a/mindus/assets/units/pulsar.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/quad.png b/mindus/assets/units/quad.png
deleted file mode 100644
index 09986db..0000000
--- a/mindus/assets/units/quad.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/quasar.png b/mindus/assets/units/quasar.png
deleted file mode 100644
index cc9ac31..0000000
--- a/mindus/assets/units/quasar.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/quell-missile.png b/mindus/assets/units/quell-missile.png
deleted file mode 100644
index dd05d06..0000000
--- a/mindus/assets/units/quell-missile.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/quell.png b/mindus/assets/units/quell.png
deleted file mode 100644
index f724c4e..0000000
--- a/mindus/assets/units/quell.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/reign.png b/mindus/assets/units/reign.png
deleted file mode 100644
index 55701e6..0000000
--- a/mindus/assets/units/reign.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/renale.png b/mindus/assets/units/renale.png
deleted file mode 100644
index d4283d4..0000000
--- a/mindus/assets/units/renale.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/retusa.png b/mindus/assets/units/retusa.png
deleted file mode 100644
index 3e7ebbd..0000000
--- a/mindus/assets/units/retusa.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/risso.png b/mindus/assets/units/risso.png
deleted file mode 100644
index 97d9d2f..0000000
--- a/mindus/assets/units/risso.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/scathe-missile.png b/mindus/assets/units/scathe-missile.png
deleted file mode 100644
index 1138357..0000000
--- a/mindus/assets/units/scathe-missile.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/scepter.png b/mindus/assets/units/scepter.png
deleted file mode 100644
index 61b87a6..0000000
--- a/mindus/assets/units/scepter.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/sei.png b/mindus/assets/units/sei.png
deleted file mode 100644
index 695824e..0000000
--- a/mindus/assets/units/sei.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/spiroct.png b/mindus/assets/units/spiroct.png
deleted file mode 100644
index 2670acc..0000000
--- a/mindus/assets/units/spiroct.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/stell.png b/mindus/assets/units/stell.png
deleted file mode 100644
index 0d06858..0000000
--- a/mindus/assets/units/stell.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/tecta.png b/mindus/assets/units/tecta.png
deleted file mode 100644
index 66f473c..0000000
--- a/mindus/assets/units/tecta.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/toxopid.png b/mindus/assets/units/toxopid.png
deleted file mode 100644
index 04349f5..0000000
--- a/mindus/assets/units/toxopid.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/vanquish.png b/mindus/assets/units/vanquish.png
deleted file mode 100644
index 09b8c51..0000000
--- a/mindus/assets/units/vanquish.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/vela.png b/mindus/assets/units/vela.png
deleted file mode 100644
index a76ec93..0000000
--- a/mindus/assets/units/vela.png
+++ /dev/null
Binary files differ
diff --git a/mindus/assets/units/zenith.png b/mindus/assets/units/zenith.png
deleted file mode 100644
index a015009..0000000
--- a/mindus/assets/units/zenith.png
+++ /dev/null
Binary files differ
diff --git a/mindus/build.rs b/mindus/build.rs
deleted file mode 100644
index b25780c..0000000
--- a/mindus/build.rs
+++ /dev/null
@@ -1,187 +0,0 @@
-use fimg::DynImage;
-use rand::Rng;
-use std::fs::File;
-use std::io::Write as _;
-use std::iter::Iterator;
-use std::path::Path;
-use walkdir::WalkDir;
-
-macro_rules! wr {
- ($dst:expr => $($arg:tt)*) => { writeln!($dst, $($arg)*).unwrap() };
-}
-
-fn kebab2bigsnek(kebab: &str) -> String {
- let mut n = String::new();
- n.reserve(kebab.len());
- for c in kebab.chars() {
- if c == '-' {
- n.push('_');
- } else {
- n.push(c.to_ascii_uppercase());
- }
- }
- n
-}
-
-fn main() {
- let _ = std::fs::remove_dir_all("target/out");
- let walkdir = WalkDir::new("assets");
- println!("cargo:rerun-if-changed=assets/");
- println!("cargo:rerun-if-changed=build.rs");
- let o = std::env::var("OUT_DIR").unwrap();
- let o = Path::new(&o);
- let mut full = File::create(o.join("full.rs")).unwrap();
- // let mut half = File::create(o.join("half.rs")).unwrap();
- let mut quar = File::create(o.join("quar.rs")).unwrap();
- let mut eigh = File::create(o.join("eigh.rs")).unwrap();
-
- let mut n = 22usize;
-
- wr!(full => "pub mod full {{");
- wr!(full => "pub static EMPTY4: Image<&[u8], 4> = Image::make::<32, 32>();");
- wr!(full => "pub static EMPTY: Image<&[u8], 3> = Image::make::<32, 32>();");
-
- wr!(quar => "pub mod quar {{");
- // forced to do this because try_into isnt const
- wr!(quar => "pub static EMPTY4: Image<&[u8], 4> = Image::make::<8, 8>();");
- wr!(quar => "pub static EMPTY: Image<&[u8], 3> = Image::make::<8, 8>();");
-
- wr!(eigh => "pub mod eigh {{");
- wr!(eigh => "pub static EMPTY4: Image<&[u8], 4> = Image::make::<4, 4>();");
- wr!(eigh => "pub static EMPTY: Image<&[u8], 3> = Image::make::<4, 4>();");
-
- for mut file in [&full, &quar, &eigh] {
- wr!(file => "use crate::utils::Image;");
- wr!(file => "pub static CLIFF: Image<&[u8], 4> = EMPTY4.copy();");
- for i in 1..=16 {
- wr!(file => "pub static BUILD{}: Image<&[u8], 4> = EMPTY4.copy();", i);
- }
- }
- for e in walkdir.into_iter().filter_map(Result::ok) {
- let path = e.path();
- if path.is_file()
- && let Some(e) = path.extension()
- && e == "png"
- {
- let mut p = DynImage::open(path);
- let rgb = p.clone().to_rgba().chunked().all(|x| x[3] == 255);
- if path
- .file_name()
- .unwrap()
- .to_str()
- .unwrap()
- .contains("-liquid.png")
- {
- continue;
- }
- let f = path.file_name().unwrap().to_str().unwrap();
- if f.contains("bottom")
- || f.contains("-team")
- || f.contains("-end")
- || f.contains("stack")
- {
- continue;
- }
- // let rgb = path.components().any(|c| c.as_os_str() == "floors");
- let env = path.components().any(|c| c.as_os_str() == "environment");
- let path = kebab2bigsnek(
- path.with_extension("")
- .file_name()
- .unwrap()
- .to_str()
- .unwrap(),
- );
- if matches!(
- path.as_str(),
- "CLIFF_CRUSHER_ROTATOR"
- | "NEOPLASIA_REACTOR_CENTER"
- | "FLUX_REACTOR_MID"
- | "EDGE"
- // | "PHASE_CONVEYOR_BRIDGE"
- | "BRIDGE_ARROW"
- // | "DUCT_BRIDGE_BRIDGE"
- // | "DUCT_BRIDGE_ARROW"
- | "LAUNCHPOD"
- // | "BRIDGE_CONVEYOR_BRIDGE"
- // | "BRIDGE_CONVEYOR_ARROW"
- // | "PHASE_CONVEYOR_ARROW"
- // | "REINFORCED_BRIDGE_CONDUIT_ARROW"
- // | "REINFORCED_BRIDGE_CONDUIT_BRIDGE"
- // | "PHASE_CONDUIT_BRIDGE"
- // | "BRIDGE_CONDUIT_ARROW"
- // | "PHASE_CONDUIT_ARROW"
- // | "BRIDGE_CONDUIT_BRIDGE"
- | "PLATED_CONDUIT_CAP"
- ) {
- continue;
- }
- println!("do {path}");
-
- macro_rules! writ {
- ($ext:ident / $scale:literal) => {
- let mut buf = File::create(o.join(n.to_string() + "-" + stringify!($ext))).unwrap();
- let out_path = format!("{}/{n}-{}", o.display(), stringify!($ext));
- // boulders
- let (mx, my) = if env && p.width() + p.height() == 48+48 {
- (32, 32)
- // vents (dont match VENT_CONDENSER, do match (RHYOLITE_VENT)
- } else if path.contains("_VENT")
- // talls
- || matches!(path.as_str(), "YELLOWCORAL" | "WHITE_TREE" | "WHITE_TREE_DEAD" | "REDWEED" | "SPORE_CLUSTER" | "CRYSTAL_BLOCKS" | "CRYSTAL_CLUSTER" | "VIBRANT_CRYSTAL_CLUSTER" | "CRYSTAL_ORBS") {
- (32, 32)
- } else {
- (p.height(), p.height())
- };
- let new = if $scale == 1 {
- p.clone()
- } else {
- p.scale::<fimg::scale::Nearest>(mx / $scale, my / $scale)
- };
- let rgb = env && rgb;
- let x = new.width();
- let y = new.height();
- if rgb {
- buf.write_all(&new.to_rgb().bytes()).unwrap();
- wr!($ext => r#"pub(crate) static {path}: Image<&[u8], 3> = unsafe {{ Image::new(std::num::NonZeroU32::new({x}).unwrap(), std::num::NonZeroU32::new({y}).unwrap(), include_bytes!(r"{out_path}")) }};"#);
- } else {
- buf.write_all(&new.to_rgba().bytes()).unwrap();
- wr!($ext => r#"pub(crate) static {path}: Image<&[u8], 4> = unsafe {{ Image::new(std::num::NonZeroU32::new({x}).unwrap(), std::num::NonZeroU32::new({y}).unwrap(), include_bytes!(r"{out_path}")) }};"#);
- }
- };
- }
- writ!(full / 1);
- // writ!(half + 0.5);
- writ!(quar / 4);
- writ!(eigh / 8);
- n += 1;
- }
- }
- for f in std::fs::read_dir("assets/blocks/environment")
- .unwrap()
- .filter_map(Result::ok)
- .filter_map(|x| x.file_name().to_str().map(String::from))
- .filter(|x| x.contains("1"))
- .filter(|x| !x.contains("dark-panel"))
- {
- dbg!(&f);
- let f = &f[..f.len() - 5];
- let count = WalkDir::new("assets/blocks/environment")
- .into_iter()
- .filter_map(Result::ok)
- .filter_map(|x| x.file_name().to_str().map(String::from))
- .filter(|x| &x[..x.len() - 5] == f)
- .count();
- let f = kebab2bigsnek(f);
- for n in count + 1..=8 {
- let r = rand::rng().random_range(1..=count);
- wr!(full => r#"pub(crate) static {f}{n}: Image<&[u8], {{{f}1.channels()}}> = {f}{r}.copy();"#);
- wr!(quar => r#"pub(crate) static {f}{n}: Image<&[u8], {{{f}1.channels()}}> = {f}{r}.copy();"#);
- wr!(eigh => r#"pub(crate) static {f}{n}: Image<&[u8], {{{f}1.channels()}}> = {f}{r}.copy();"#);
- }
- println!("{count} {f}");
- }
- // panic!();
- for mut f in [full, eigh, quar] {
- f.write_all(b"}").unwrap();
- }
-}
diff --git a/mindus/src/block/content.rs b/mindus/src/block/content.rs
deleted file mode 100644
index 25f5176..0000000
--- a/mindus/src/block/content.rs
+++ /dev/null
@@ -1,453 +0,0 @@
-//! everything
-use crate::content::content_enum;
-
-content_enum! {
- pub enum Type / Block for u16 | TryFromU16Error
- {
- "air",
- "spawn",
- "remove-wall",
- "remove-ore",
- "cliff",
- "build1",
- "build2",
- "build3",
- "build4",
- "build5",
- "build6",
- "build7",
- "build8",
- "build9",
- "build10",
- "build11",
- "build12",
- "build13",
- "build14",
- "build15",
- "build16",
- "deep-water",
- "shallow-water",
- "tainted-water",
- "deep-tainted-water",
- "darksand-tainted-water",
- "sand-water",
- "darksand-water",
- "tar",
- "pooled-cryofluid",
- "molten-slag",
- "space",
- "empty",
- "stone",
- "crater-stone",
- "char",
- "basalt",
- "hotrock",
- "magmarock",
- "sand-floor",
- "darksand",
- "dirt",
- "mud",
- "dacite",
- "rhyolite",
- "rhyolite-crater",
- "rough-rhyolite",
- "regolith",
- "yellow-stone",
- "carbon-stone",
- "ferric-stone",
- "ferric-craters",
- "beryllic-stone",
- "crystalline-stone",
- "crystal-floor",
- "yellow-stone-plates",
- "red-stone",
- "dense-red-stone",
- "red-ice",
- "arkycite-floor",
- "arkyic-stone",
- "rhyolite-vent",
- "carbon-vent",
- "arkyic-vent",
- "yellow-stone-vent",
- "red-stone-vent",
- "crystalline-vent",
- "stone-vent",
- "basalt-vent",
- "redmat",
- "bluemat",
- "grass",
- "salt",
- "snow",
- "ice",
- "ice-snow",
- "shale",
- "moss",
- "core-zone",
- "spore-moss",
- "stone-wall",
- "spore-wall",
- "dirt-wall",
- "dacite-wall",
- "ice-wall",
- "snow-wall",
- "dune-wall",
- "regolith-wall",
- "yellow-stone-wall",
- "rhyolite-wall",
- "carbon-wall",
- "ferric-stone-wall",
- "beryllic-stone-wall",
- "arkyic-wall",
- "crystalline-stone-wall",
- "red-ice-wall",
- "red-stone-wall",
- "red-diamond-wall",
- "sand-wall",
- "salt-wall",
- "shrubs",
- "shale-wall",
- "spore-pine",
- "snow-pine",
- "pine",
- "white-tree-dead",
- "white-tree",
- "spore-cluster",
- "redweed",
- "pur-bush",
- "yellowcoral",
- "boulder",
- "snow-boulder",
- "shale-boulder",
- "sand-boulder",
- "dacite-boulder",
- "basalt-boulder",
- "carbon-boulder",
- "ferric-boulder",
- "beryllic-boulder",
- "yellow-stone-boulder",
- "arkyic-boulder",
- "crystal-cluster",
- "vibrant-crystal-cluster",
- "crystal-blocks",
- "crystal-orbs",
- "crystalline-boulder",
- "red-ice-boulder",
- "rhyolite-boulder",
- "red-stone-boulder",
- "metal-floor",
- "metal-floor-damaged",
- "metal-floor-2",
- "metal-floor-3",
- "metal-floor-4",
- "metal-floor-5",
- "dark-panel-1",
- "dark-panel-2",
- "dark-panel-3",
- "dark-panel-4",
- "dark-panel-5",
- "dark-panel-6",
- "dark-metal",
- "metal-tiles-1",
- "metal-tiles-2",
- "metal-tiles-3",
- "metal-tiles-4",
- "metal-tiles-5",
- "metal-tiles-6",
- "metal-tiles-7",
- "metal-tiles-8",
- "metal-tiles-9",
- "metal-tiles-10",
- "metal-tiles-11",
- "metal-tiles-12",
- "metal-tiles-13",
- "metal-wall-1",
- "metal-wall-2",
- "metal-wall-3",
- "rune-overlay-crux",
- "rune-overlay",
- "colored-floor",
- "colored-wall",
- "character-overlay",
- "character-overlay-white",
- "pebbles",
- "tendrils",
- "ore-copper",
- "ore-lead",
- "ore-scrap",
- "ore-coal",
- "ore-titanium",
- "ore-thorium",
- "ore-beryllium",
- "ore-tungsten",
- "ore-crystal-thorium",
- "ore-wall-thorium",
- "ore-wall-beryllium",
- "ore-wall-graphite",
- "graphitic-wall",
- "ore-wall-tungsten",
- "graphite-press",
- "multi-press",
- "silicon-smelter",
- "silicon-crucible",
- "kiln",
- "plastanium-compressor",
- "phase-weaver",
- "surge-smelter",
- "cryofluid-mixer",
- "pyratite-mixer",
- "blast-mixer",
- "melter",
- "separator",
- "disassembler",
- "spore-press",
- "pulverizer",
- "coal-centrifuge",
- "incinerator",
- "silicon-arc-furnace",
- "electrolyzer",
- "atmospheric-concentrator",
- "oxidation-chamber",
- "electric-heater",
- "slag-heater",
- "phase-heater",
- "heat-redirector",
- "small-heat-redirector",
- "heat-router",
- "slag-incinerator",
- "carbide-crucible",
- "slag-centrifuge",
- "surge-crucible",
- "cyanogen-synthesizer",
- "phase-synthesizer",
- "heat-reactor",
- "copper-wall",
- "copper-wall-large",
- "titanium-wall",
- "titanium-wall-large",
- "plastanium-wall",
- "plastanium-wall-large",
- "thorium-wall",
- "thorium-wall-large",
- "phase-wall",
- "phase-wall-large",
- "surge-wall",
- "surge-wall-large",
- "door",
- "door-large",
- "scrap-wall",
- "scrap-wall-large",
- "scrap-wall-huge",
- "scrap-wall-gigantic",
- "thruster",
- "beryllium-wall",
- "beryllium-wall-large",
- "tungsten-wall",
- "tungsten-wall-large",
- "blast-door",
- "reinforced-surge-wall",
- "reinforced-surge-wall-large",
- "carbide-wall",
- "carbide-wall-large",
- "shielded-wall",
- "mender",
- "mend-projector",
- "overdrive-projector",
- "overdrive-dome",
- "force-projector",
- "shock-mine",
- "radar",
- "build-tower",
- "regen-projector",
- "shockwave-tower",
- "shield-projector",
- "large-shield-projector",
- "conveyor",
- "titanium-conveyor",
- "plastanium-conveyor",
- "armored-conveyor",
- "junction",
- "bridge-conveyor",
- "phase-conveyor",
- "sorter",
- "inverted-sorter",
- "router",
- "distributor",
- "overflow-gate",
- "underflow-gate",
- "mass-driver",
- "duct",
- "armored-duct",
- "duct-router",
- "overflow-duct",
- "underflow-duct",
- "duct-bridge",
- "duct-unloader",
- "surge-conveyor",
- "surge-router",
- "unit-cargo-loader",
- "unit-cargo-unload-point",
- "mechanical-pump",
- "rotary-pump",
- "impulse-pump",
- "conduit",
- "pulse-conduit",
- "plated-conduit",
- "liquid-router",
- "liquid-container",
- "liquid-tank",
- "liquid-junction",
- "bridge-conduit",
- "phase-conduit",
- "reinforced-pump",
- "reinforced-conduit",
- "reinforced-liquid-junction",
- "reinforced-bridge-conduit",
- "reinforced-liquid-router",
- "reinforced-liquid-container",
- "reinforced-liquid-tank",
- "power-node",
- "power-node-large",
- "surge-tower",
- "diode",
- "battery",
- "battery-large",
- "combustion-generator",
- "thermal-generator",
- "steam-generator",
- "differential-generator",
- "rtg-generator",
- "solar-panel",
- "solar-panel-large",
- "thorium-reactor",
- "impact-reactor",
- "beam-node",
- "beam-tower",
- "beam-link",
- "turbine-condenser",
- "chemical-combustion-chamber",
- "pyrolysis-generator",
- "flux-reactor",
- "neoplasia-reactor",
- "mechanical-drill",
- "pneumatic-drill",
- "laser-drill",
- "blast-drill",
- "water-extractor",
- "cultivator",
- "oil-extractor",
- "vent-condenser",
- "cliff-crusher",
- "large-cliff-crusher",
- "plasma-bore",
- "large-plasma-bore",
- "impact-drill",
- "eruption-drill",
- "core-shard",
- "core-foundation",
- "core-nucleus",
- "core-bastion",
- "core-citadel",
- "core-acropolis",
- "container",
- "vault",
- "unloader",
- "reinforced-container",
- "reinforced-vault",
- "duo",
- "scatter",
- "scorch",
- "hail",
- "wave",
- "lancer",
- "arc",
- "parallax",
- "swarmer",
- "salvo",
- "segment",
- "tsunami",
- "fuse",
- "ripple",
- "cyclone",
- "foreshadow",
- "spectre",
- "meltdown",
- "breach",
- "diffuse",
- "sublimate",
- "titan",
- "disperse",
- "afflict",
- "lustre",
- "scathe",
- "smite",
- "malign",
- "ground-factory",
- "air-factory",
- "naval-factory",
- "additive-reconstructor",
- "multiplicative-reconstructor",
- "exponential-reconstructor",
- "tetrative-reconstructor",
- "repair-point",
- "repair-turret",
- "tank-fabricator",
- "ship-fabricator",
- "mech-fabricator",
- "tank-refabricator",
- "ship-refabricator",
- "mech-refabricator",
- "prime-refabricator",
- "tank-assembler",
- "ship-assembler",
- "mech-assembler",
- "basic-assembler-module",
- "unit-repair-tower",
- "payload-conveyor",
- "payload-router",
- "reinforced-payload-conveyor",
- "reinforced-payload-router",
- "payload-mass-driver",
- "large-payload-mass-driver",
- "small-deconstructor",
- "deconstructor",
- "constructor",
- "large-constructor",
- "payload-loader",
- "payload-unloader",
- "power-source",
- "power-void",
- "item-source",
- "item-void",
- "liquid-source",
- "liquid-void",
- "payload-source",
- "payload-void",
- "heat-source",
- "illuminator",
- "legacy-mech-pad",
- "legacy-unit-factory",
- "legacy-unit-factory-air",
- "legacy-unit-factory-ground",
- "command-center",
- "launch-pad",
- "advanced-launch-pad",
- "landing-pad",
- "interplanetary-accelerator",
- "message",
- "switch",
- "micro-processor",
- "logic-processor",
- "hyper-processor",
- "memory-cell",
- "memory-bank",
- "logic-display",
- "large-logic-display",
- "tile-logic-display",
- "canvas",
- "reinforced-message",
- "world-processor",
- "world-cell",
- "world-message",
- "world-switch",
- }
-}
diff --git a/mindus/src/block/defense.rs b/mindus/src/block/defense.rs
deleted file mode 100644
index 3a1a4d4..0000000
--- a/mindus/src/block/defense.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-//! defense
-use crate::block::simple::*;
-use crate::block::*;
-make_simple!(HeatedBlock => |_, buff: &mut DataRead| read_heated(buff));
-make_simple!(RadarBlock => |_, buff: &mut DataRead| buff.skip(4));
-make_simple!(ShieldBlock => |_, buff: &mut DataRead| read_shield(buff));
-
-/// format:
-/// - heat: [`f32`]
-/// - phase heat: [`f32`]
-fn read_heated(buff: &mut DataRead) -> Result<(), DataReadError> {
- buff.skip(8)
-}
-
-/// format:
-/// - smoothing: [`f32`]
-/// - broken: [`bool`]
-fn read_shield(buff: &mut DataRead) -> Result<(), DataReadError> {
- buff.skip(5)
-}
diff --git a/mindus/src/block/drills.rs b/mindus/src/block/drills.rs
deleted file mode 100644
index 50a3d6a..0000000
--- a/mindus/src/block/drills.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-//! extraction of raw resources (mine part)
-use crate::block::simple::make_simple;
-use crate::block::*;
-
-make_simple!(
- DrillBlock,
- |_, name, _, _, rot: Rotation, s| {
- let mut base =
- load!(from name which is ["large-plasma-bore" | "plasma-bore" | "cliff-crusher"], s);
- let mut top = load!(concat "top" => name which is ["large-plasma-bore" | "plasma-bore" | "cliff-crusher"], s);
- unsafe { top.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
- },
- |_, buff: &mut DataRead| read_drill(buff)
-);
-make_simple!(WallDrillBlock, |_, name, _, _, rot: Rotation, scl| {
- let mut base = load!(from name which is ["cliff-crusher" | "large-cliff-crusher"], scl);
- let mut top =
- load!(concat "top" => name which is ["cliff-crusher" | "large-cliff-crusher"], scl);
- unsafe { top.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
-});
-
-/// format:
-/// - progress: [`f32`]
-/// - warmup: [`f32`]
-fn read_drill(buff: &mut DataRead) -> Result<(), DataReadError> {
- buff.skip(8)
-}
diff --git a/mindus/src/block/liquid.rs b/mindus/src/block/liquid.rs
deleted file mode 100644
index 384dc98..0000000
--- a/mindus/src/block/liquid.rs
+++ /dev/null
@@ -1,128 +0,0 @@
-//! liquid related things
-use thiserror::Error;
-
-use crate::block::simple::*;
-use crate::block::*;
-use crate::content;
-use crate::data::dynamic::DynType;
-use crate::data::renderer::load;
-use crate::fluid;
-use crate::utils::ImageUtils;
-
-make_simple!(ConduitBlock, |_,
- name,
- _,
- ctx: Option<&RenderingContext>,
- rot,
- s| {
- let ctx = ctx.unwrap();
-
- let mask = mask(ctx, rot, name);
- // TODO caps. stopped trying bcz too complex
- mask2tile(mask, rot, name, s)
-});
-
-pub struct FluidBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
-}
-
-impl FluidBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
- assert!(size != 0, "invalid size");
- Self {
- size,
- symmetric,
- build_cost,
- }
- }
-
- state_impl!(pub Option<fluid::Type>);
-}
-
-impl BlockLogic for FluidBlock {
- impl_block!();
-
- fn data_from_i32(&self, config: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- if config < 0 || config > i32::from(u16::MAX) {
- return Err(DataConvertError::Custom(Box::new(FluidConvertError(
- config,
- ))));
- }
- Ok(DynData::Content(content::Type::Fluid, config as u16))
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Empty => Ok(Some(Self::create_state(None))),
- DynData::Content(content::Type::Fluid, id) => Ok(Some(Self::create_state(Some(
- FluidDeserializeError::forward(fluid::Type::try_from(id))?,
- )))),
- DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new(
- FluidDeserializeError::ContentType(have),
- ))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Content,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- Ok(Self::get_state(state)
- .as_ref()
- .map_or(DynData::Empty, |&fluid| {
- DynData::Content(content::Type::Fluid, fluid.into())
- }))
- }
-
- fn draw(
- &self,
- _: &str,
- state: Option<&State>,
- _: Option<&RenderingContext>,
- _: Rotation,
- s: Scale,
- ) -> ImageHolder<4> {
- let mut p = load!("liquid-source", s);
- if let Some(state) = state
- && let Some(liq) = Self::get_state(state)
- {
- let mut top = load!("center", s);
- unsafe { p.overlay(top.tint(liq.color())) };
- return p;
- }
- p
- }
-
- /// format:
- /// - fluid: [`u16`] as [`Fluid`](fluid::Type)
- fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- let f = buff.read_u16()?;
- b.state = Some(Self::create_state(fluid::Type::try_from(f).ok()));
- Ok(())
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-#[error("invalid config ({0}) for fluid")]
-pub struct FluidConvertError(pub i32);
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-pub enum FluidDeserializeError {
- #[error("expected Fluid but got {0:?}")]
- ContentType(content::Type),
- #[error("fluid not found")]
- NotFound(#[from] fluid::TryFromU16Error),
-}
-
-impl FluidDeserializeError {
- pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
- }
- }
-}
diff --git a/mindus/src/block/mod.rs b/mindus/src/block/mod.rs
deleted file mode 100644
index a1b6df2..0000000
--- a/mindus/src/block/mod.rs
+++ /dev/null
@@ -1,1067 +0,0 @@
-//! deal with blocks.
-//!
-//! different block types are organized into modules
-use bobbin_bits::U4::{self, B0000, B0001, B0010, B0100, B1000};
-use fimg::DynImage;
-use std::error::Error;
-use std::fmt;
-
-use crate::block::all::Type;
-use crate::content::Content;
-use crate::data::dynamic::{DynData, DynType};
-use crate::data::map::{Build, mcg};
-use crate::data::{self, CompressError, renderer::*};
-use crate::data::{DataRead, GridPos, ReadError as DataReadError};
-use crate::item::storage::ItemStorage;
-use crate::utils::Cow;
-
-macro_rules! mods {
- ($($mod:ident)*) => {
- $(pub mod $mod;)*
-
- mod all {
- $(#[allow(unused_imports)] pub use crate::block::$mod::*;)*
- pub use super::simple::BasicBlock;
- }
- }
-}
-
-mods! {
- content defense distribution drills liquid logic payload power production turrets walls units
-}
-
-pub mod ratios;
-mod simple;
-use simple::*;
-
-macro_rules! disp {
- ($($k:ident,)+) => {
- use all::{$($k,)+};
- #[enum_dispatch::enum_dispatch]
- pub(crate) enum BlockLogicEnum {
- $($k,)+
- }
-
- impl ratios::Ratios for BlockLogicEnum {
- fn io(&self, state: Option<&State>, name: &str) -> ratios::Io {
- match self {
- $(Self::$k(x) => x.io(state, name),)+
- }
- }
- }
- pub const trait ConstFrom<T>: Sized {
- fn fro(value: T) -> Self;
- }
- $(
- impl const ConstFrom<$k> for BlockLogicEnum {
- fn fro(v: $k) -> Self {
- BlockLogicEnum::$k(v)
- }
- }
- )+
-
- /*impl std::fmt::Debug for BlockLogicEnum {
- fn fmt(&self, w: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
- match self {
- $(BlockLogicEnum::$k { .. } => write!(w, stringify!($k)),)+
- }
- }
- }*/
- }
-}
-
-disp! {
- BasicBlock,
- WallBlock,
- DuctBlock,
- BridgeBlock,
- ItemBlock,
- ProductionBlock,
- SeparatorBlock,
- StackConveyor,
- HeatCrafter,
- ConnectorBlock,
- ItemTurret,
- ConveyorBlock,
- PayloadRouter,
- WallDrillBlock,
- DrillBlock,
- NuclearGeneratorBlock,
- GeneratorBlock,
- ConduitBlock,
- HeatedBlock,
- RadarBlock,
- ShieldBlock,
- PointDefenseTurret,
- JunctionBlock,
- Turret,
- MemoryBlock,
- MessageLogic,
- ConstructorBlock,
- AssemblerBlock,
- UnitFactory,
- SimpleDuctBlock,
- SurgeRouter,
- SimplePayloadBlock,
- PayloadConveyor,
- ImpactReactorBlock,
- Neoplasia,
- DiodeBlock,
- HeatConduit,
- ContinousTurret,
- TractorBeamTurret,
- TileableDisplay,
- AssemblerModule,
- RepairTurret,
- FluidBlock,
- CanvasBlock,
- SwitchLogic,
- ProcessorLogic,
- PayloadBlock,
- LampBlock,
- UnitCargoLoader,
- DoorBlock,
-}
-
-pub trait Cast {
- fn downcast_ref(state: &State) -> Option<&Self>;
- fn downcast_mut(state: &mut State) -> Option<&mut Self>;
-}
-
-macro_rules! stater {
- ($($k: ident($v: ty),)+) => {
- #[derive(Debug, Clone, Hash)]
- pub enum State {
- $($k($v),)+
- }
-
- $(
- impl From<$v> for State {
- fn from(v: $v) -> State { State::$k(v) }
- }
-
- impl Cast for $v {
- fn downcast_ref(state: &State) -> Option<&Self> {
- match state {
- State::$k(v) => Some(v),
- _ => None,
- }
- }
- fn downcast_mut(state: &mut State) -> Option<&mut Self> {
- match state {
- State::$k(v) => Some(v),
- _ => None,
- }
- }
- }
- )+
- }
-}
-
-stater! {
- // TODO deoptionize
- String(String),
- Item(Option<crate::item::Type>),
- Fluid(Option<crate::fluid::Type>),
- Image(Image<Box<[u8]>, 1>),
- Point(Option<(i32, i32)>),
- Bool(bool),
- Processor(logic::ProcessorState),
- Payload(payload::Payload),
- Power(Vec<(i16, i16)>),
- Color(power::Rgba),
- Command(Option<crate::data::command::UnitCommand>),
- Unit(Option<crate::unit::Type>),
-}
-
-impl State {
- pub fn downcast_ref<T: Cast>(&self) -> Option<&T> {
- T::downcast_ref(self)
- }
-
- pub fn downcast_mut<T: Cast>(&mut self) -> Option<&mut T> {
- T::downcast_mut(self)
- }
-
- pub fn new<T: Into<Self>>(from: T) -> Self {
- from.into()
- }
-}
-
-#[enum_dispatch::enum_dispatch(BlockLogicEnum)]
-pub trait BlockLogic: ratios::Ratios {
- /// mindustry blocks are the same width and height
- fn get_size(&self) -> u8;
-
- fn is_symmetric(&self) -> bool;
-
- fn create_build_cost(&self) -> Option<ItemStorage>;
-
- fn data_from_i32(&self, config: i32, pos: GridPos) -> Result<DynData, DataConvertError>;
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError>;
-
- #[allow(unused_variables)]
- fn mirror_state(&self, state: &mut State, horizontally: bool, vertically: bool) {}
-
- #[allow(unused_variables)]
- fn rotate_state(&self, state: &mut State, clockwise: bool) {}
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError>;
-
- #[allow(unused_variables)]
- fn draw(
- &self,
- name: &str,
- state: Option<&State>,
- context: Option<&RenderingContext>,
- rot: Rotation,
- scale: Scale,
- ) -> ImageHolder<4> {
- unimplemented!("{name}")
- }
-
- #[allow(unused_variables)]
- fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- Ok(())
- }
-}
-
-// i wish i could derive
-macro_rules! impl_block {
- () => {
- fn get_size(&self) -> u8 {
- self.size
- }
-
- fn is_symmetric(&self) -> bool {
- self.symmetric
- }
-
- fn create_build_cost(&self) -> Option<$crate::item::storage::ItemStorage> {
- if self.build_cost.is_empty() {
- None
- } else {
- let mut storage = crate::item::storage::Storage::new();
- for (ty, cnt) in self.build_cost {
- storage.add(*ty, *cnt, u32::MAX);
- }
- Some(storage)
- }
- }
- };
-}
-pub(crate) use impl_block;
-
-#[derive(Debug, thiserror::Error)]
-pub enum DataConvertError {
- #[error(transparent)]
- Custom(#[from] Box<dyn Error + Sync + Send>),
-}
-
-impl DataConvertError {
- pub fn forward<T, E: Error + Sync + Send + 'static>(result: Result<T, E>) -> Result<T, Self> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(Self::Custom(Box::new(e))),
- }
- }
-}
-
-#[derive(Debug, thiserror::Error)]
-pub enum DeserializeError {
- #[error(transparent)]
- DecompressError(#[from] data::DecompressError),
- #[error("expected type {expect:?} but got {have:?}")]
- InvalidType { have: DynType, expect: DynType },
- #[error(transparent)]
- Custom(#[from] Box<dyn Error + Sync + Send>),
-}
-
-impl DeserializeError {
- pub fn forward<T, E: Error + Sync + Send + 'static>(result: Result<T, E>) -> Result<T, Self> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(Self::Custom(Box::new(e))),
- }
- }
-}
-
-#[derive(Debug, thiserror::Error)]
-pub enum SerializeError {
- #[error(transparent)]
- Custom(#[from] Box<dyn Error + Sync + Send>),
- #[error(transparent)]
- Compress(#[from] CompressError),
-}
-
-impl SerializeError {
- pub fn forward<T, E: Error + Sync + Send + 'static>(result: Result<T, E>) -> Result<T, Self> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(Self::Custom(Box::new(e))),
- }
- }
-}
-
-/// a block. put it in stuff!
-pub struct Block {
- image_random: Option<&'static [[DynImage<&'static [u8]>; 3]; 8]>,
- image: Option<&'static [DynImage<&'static [u8]>; 3]>,
- pub(crate) name: Type,
- logic: BlockLogicEnum,
-}
-
-impl core::hash::Hash for Block {
- fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
- self.name.hash(state);
- }
-}
-
-impl PartialEq for Block {
- fn eq(&self, rhs: &Block) -> bool {
- self.name == rhs.name
- }
-}
-
-impl Block {
- /// this blocks name
- /// ```
- /// assert!(mindus::block::DISTRIBUTOR.name() == "distributor")
- /// ```
- #[must_use]
- #[inline]
- pub const fn name(&self) -> &'static str {
- self.name.get_name()
- }
-
- pub fn io(&self, state: Option<&State>) -> ratios::Io {
- <BlockLogicEnum as ratios::Ratios>::io(&self.logic, state, self.name.get_name())
- }
-
- /// should you send context to [`image`]?
- #[must_use]
- #[inline]
- pub const fn wants_context(&self) -> bool {
- use BlockLogicEnum::*;
- matches!(
- self.logic,
- ConveyorBlock(..)
- | DuctBlock(..)
- | StackConveyor(..)
- | ConduitBlock(..)
- | TileableDisplay(..)
- )
- }
-
- /// draw this block, with this state
- #[must_use]
- #[inline]
- pub fn image(
- &self,
- state: Option<&State>,
- context: Option<&RenderingContext>,
- rot: Rotation,
- scale: Scale,
- ) -> DynImage<Cow> {
- if let Some(imgs) = &self.image_random {
- return unsafe { imgs[mcg() as usize][scale as usize].mapped(Cow::Ref) };
- }
- if let Some(imgs) = &self.image {
- return unsafe { imgs[scale as usize].mapped(Cow::Ref) };
- }
- DynImage::Rgba(
- self.logic
- .draw(self.name.get_name(), state, context, rot, scale),
- )
- }
-
- /// size.
- #[must_use]
- #[inline]
- pub fn get_size(&self) -> u8 {
- self.logic.get_size()
- }
-
- /// does it matter if its rotated
- #[must_use]
- #[inline]
- pub fn is_symmetric(&self) -> bool {
- self.logic.is_symmetric()
- }
-
- /// cost
- #[must_use]
- #[inline]
- pub fn get_build_cost(&self) -> Option<ItemStorage> {
- self.logic.create_build_cost()
- }
-
- pub(crate) fn data_from_i32(
- &self,
- config: i32,
- pos: GridPos,
- ) -> Result<DynData, DataConvertError> {
- self.logic.data_from_i32(config, pos)
- }
-
- pub(crate) fn deserialize_state(
- &self,
- data: DynData,
- ) -> Result<Option<State>, DeserializeError> {
- self.logic.deserialize_state(data)
- }
-
- pub(crate) fn mirror_state(&self, state: &mut State, horizontally: bool, vertically: bool) {
- self.logic.mirror_state(state, horizontally, vertically);
- }
-
- pub(crate) fn rotate_state(&self, state: &mut State, clockwise: bool) {
- self.logic.rotate_state(state, clockwise);
- }
-
- pub(crate) fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- self.logic.serialize_state(state)
- }
-
- #[inline]
- pub(crate) fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- self.logic.read(build, buff)
- }
-}
-
-impl fmt::Debug for Block {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "Block<{:?}>", self.name)
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
-/// the possible rotation states of a object
-#[repr(u8)]
-pub enum Rotation {
- Up,
- Right,
- Down,
- Left,
-}
-
-impl Rotation {
- #[must_use]
- /// count rotations
- pub const fn count(self) -> u8 {
- self as u8
- }
-
- #[must_use]
- /// mask
- pub const fn mask(self) -> U4 {
- match self {
- Rotation::Up => B1000,
- Rotation::Right => B0100,
- Rotation::Down => B0010,
- Rotation::Left => B0001,
- }
- }
-
- #[must_use]
- /// character of this rot (Right => >, Up => ^, Left => <, Down => v)
- pub const fn ch(self) -> char {
- match self {
- Rotation::Right => '>',
- Rotation::Up => '^',
- Rotation::Left => '<',
- Rotation::Down => 'v',
- }
- }
-
- #[must_use]
- /// mirror the directions.
- pub const fn mirrored(self, horizontally: bool, vertically: bool) -> Self {
- match self {
- Self::Right => {
- if horizontally {
- Self::Left
- } else {
- Self::Right
- }
- }
- Self::Up => {
- if vertically {
- Self::Down
- } else {
- Self::Up
- }
- }
- Self::Left => {
- if horizontally {
- Self::Right
- } else {
- Self::Left
- }
- }
- Self::Down => {
- if vertically {
- Self::Up
- } else {
- Self::Down
- }
- }
- }
- }
-
- /// mirror in place
- pub fn mirror(&mut self, horizontally: bool, vertically: bool) {
- *self = self.mirrored(horizontally, vertically);
- }
-
- #[must_use]
- /// rotate the rotation
- pub const fn rotated(self, clockwise: bool) -> Self {
- match self {
- Self::Right => {
- if clockwise {
- Self::Down
- } else {
- Self::Up
- }
- }
- Self::Up => {
- if clockwise {
- Self::Right
- } else {
- Self::Left
- }
- }
- Self::Left => {
- if clockwise {
- Self::Up
- } else {
- Self::Down
- }
- }
- Self::Down => {
- if clockwise {
- Self::Left
- } else {
- Self::Right
- }
- }
- }
- }
-
- /// rotate the rotation in place
- pub fn rotate(&mut self, clockwise: bool) {
- *self = self.rotated(clockwise);
- }
-
- #[must_use]
- /// rotate 180
- pub const fn rotated_180(self) -> Self {
- match self {
- Self::Right => Self::Left,
- Self::Up => Self::Down,
- Self::Left => Self::Right,
- Self::Down => Self::Up,
- }
- }
-
- /// rotate 180 in place
- pub fn rotate_180(&mut self) {
- *self = self.rotated_180();
- }
-}
-
-impl From<u8> for Rotation {
- fn from(val: u8) -> Self {
- match val & 3 {
- 0 => Self::Right,
- 1 => Self::Up,
- 2 => Self::Left,
- _ => Self::Down,
- }
- }
-}
-
-impl From<Rotation> for u8 {
- fn from(rot: Rotation) -> Self {
- match rot {
- Rotation::Right => 0,
- Rotation::Up => 1,
- Rotation::Left => 2,
- Rotation::Down => 3,
- }
- }
-}
-
-macro_rules! make_register {
- ($($field:literal $op:tt $logic:expr;)+) => { paste::paste! {
- $(
- make_register!(impl $field $op $logic);
- )+
- pub static BLOCK_REGISTRY: phf::Map<&str, &Block> = phf::phf_map! {$(
- $field => &[<$field:snake:upper>],
- )+};
-
- impl content::Type {
- pub fn to_block(self) -> Option<&'static Block> {
- // static L: &[&Block] = &[$(&[<$field:snake:upper>],)+];
- // L.get(self as usize).copied()
- match self {
- $(content::Type::[<$field:camel>] => Some(&[<$field:snake:upper>]),)+
- _ => None,
- }
- }
- }
- }};
- (impl $field: literal => $logic: expr) => {
- paste::paste! { pub static [<$field:snake:upper>]: Block = Block {
- name: crate::block::content::Type::[<$field:camel>], logic: <crate::block::BlockLogicEnum as crate::block::ConstFrom<_>>::fro($logic), image: None, image_random: None,
- }; }
- };
- (impl $field: literal -> $logic: expr) => {
- paste::paste! { pub static [<$field:snake:upper>]: Block = Block {
- name: crate::block::content::Type::[<$field:camel>], logic: <crate::block::BlockLogicEnum as crate::block::ConstFrom<_>>::fro($logic), image: Some(&car::map!(crate::data::renderer::load!($field), DynImage::from)), image_random: None,
- }; }
- };
- (impl $field: literal : $size: literal) => {
- paste::paste! { pub static [<$field:snake:upper>]: Block = Block {
- name: crate::block::content::Type::[<$field:camel>], logic: BlockLogicEnum::BasicBlock(BasicBlock::new($size, true, &[])), image: Some(&car::map!(crate::data::renderer::load!($field), DynImage::from)), image_random: None,
- }; }
- };
- (impl $field: literal @ $size: literal) => {
- paste::paste! { pub static [<$field:snake:upper>]: Block = Block {
- name: crate::block::content::Type::[<$field:camel>], logic: BlockLogicEnum::BasicBlock(BasicBlock::new($size, true, &[])), image_random: Some(&crate::data::renderer::load!(8x $field)), image: None,
- }; }
- };
- // floors
- (impl $field: literal > $size: literal) => {
- paste::paste! { pub static [<$field:snake:upper>]: Block = Block {
- name: crate::block::content::Type::[<$field:camel>], logic: BlockLogicEnum::BasicBlock(BasicBlock::new($size, true, &[])), image: Some(&car::map!(crate::data::renderer::load!("empty4"), DynImage::from)), image_random: None,
- }; }
- };
-}
-// pub(self) use make_register;
-make_register! {
- "metal-wall-1": 1;
- "metal-wall-2": 1;
- "metal-wall-3": 1;
- "colored-floor" > 1;
- "colored-wall": 1;
- "darksand" > 1;
- "sand-floor" > 1;
- "yellow-stone" > 1;
- "arkyic-stone" > 1;
- "carbon-stone" > 1;
- "dacite" > 1;
- "dirt" > 1;
- "arkycite-floor" > 1;
- "basalt" > 1;
- "ice" > 1;
- "molten-slag" > 1;
- "moss" > 1;
- "mud" > 1;
- "magmarock" > 1;
- "grass" > 1;
- "ice-snow" > 1;
- "hotrock" > 1;
- "char" > 1;
- "snow" > 1;
- "salt" > 1;
- "shale" > 1;
- "metal-floor" > 1;
- "metal-floor-2" > 1;
- "metal-floor-3" > 1;
- "metal-floor-4" > 1;
- "metal-floor-5" > 1;
- "dark-panel-1" > 1;
- "dark-panel-2" > 1;
- "dark-panel-3" > 1;
- "dark-panel-4" > 1;
- "dark-panel-5" > 1;
- "dark-panel-6" > 1;
- "darksand-tainted-water" > 1;
- "darksand-water" > 1;
- "deep-tainted-water" > 1;
- "deep-water" > 1;
- "sand-water" > 1;
- "shallow-water" > 1;
- "space" > 1;
- "stone" > 1;
- "arkyic-vent" > 1;
- "beryllic-stone" > 1;
- "bluemat" > 1;
- "carbon-vent" > 1;
- "core-zone" > 1;
- "crater-stone" > 1;
- "crystal-floor" > 1;
- "crystalline-stone" > 1;
- "crystalline-vent" > 1;
- "metal-floor-damaged" > 1;
- "dense-red-stone" > 1;
- "ferric-craters" > 1; // ferris section
- "ferric-stone" > 1;
- "pooled-cryofluid" > 1;
- "red-ice" > 1;
- "red-stone-vent" > 1;
- "red-stone" > 1;
- "redmat" > 1;
- "regolith" > 1;
- "rhyolite-crater" > 1;
- "rhyolite" > 1;
- "rough-rhyolite" > 1;
- "tainted-water" > 1;
- "tar" > 1;
- "yellow-stone-plates" > 1;
- "yellow-stone-vent" > 1;
- "spore-moss" > 1;
- "ore-beryllium" > 1;
- "ore-copper" > 1;
- "ore-lead" > 1;
- "ore-coal" > 1;
- "ore-scrap" > 1;
- "ore-thorium" > 1;
- "ore-titanium" > 1;
- "ore-tungsten" > 1;
- "ore-crystal-thorium" > 1;
- "ore-wall-beryllium" @ 1;
- "ore-wall-thorium" @ 1;
- "ore-wall-tungsten" @ 1;
- "ore-wall-graphite" @ 1;
- "graphitic-wall" @ 1;
- "boulder" @ 1;
- "arkyic-wall" @ 1;
- "beryllic-stone-wall" @ 1;
- "carbon-wall" @ 1;
- "cliff": 1;
- "crystalline-stone-wall" @ 1;
- "dacite-wall" @ 1;
- "dark-metal" @ 1;
- "dirt-wall" @ 1;
- "dune-wall" @ 1;
- "ferric-stone-wall" @ 1;
- "ice-wall" @ 1;
- "pebbles" @ 1;
- "pine": 1;
- "red-diamond-wall" @ 1;
- "red-ice-wall" @ 1;
- "red-stone-wall" @ 1;
- "regolith-wall" @ 1;
- "rhyolite-vent" @ 1;
- "rhyolite-wall" @ 1;
- "salt-wall" @ 1;
- "sand-wall" @ 1;
- "shale-wall" @ 1;
- "shrubs" @ 1;
- "snow-pine": 1;
- "snow-wall" @ 1;
- "spawn": 1;
- "spore-pine": 1;
- "spore-wall" @ 1;
- "stone-wall" @ 1;
- "yellow-stone-wall" @ 1;
- // props
- "yellow-stone-boulder" @ 1;
- "snow-boulder" @ 1;
- "shale-boulder" @ 1;
- "arkyic-boulder" @ 1;
- "basalt-boulder" @ 1;
- "beryllic-boulder" @ 1;
- "carbon-boulder" @ 1;
- "crystalline-boulder" @ 1;
- "dacite-boulder" @ 1;
- "ferric-boulder" @ 1;
- "red-ice-boulder" @ 1;
- "red-stone-boulder" @ 1;
- "rhyolite-boulder" @ 1;
- "sand-boulder" @ 1;
- "pur-bush": 1;
- "tendrils" @ 1;
- // these are tall but uh (TODO layering)
- "white-tree-dead": 1;
- "yellowcoral": 1;
- "white-tree": 1;
- "redweed" @ 1;
- "spore-cluster" @ 1;
- "crystal-blocks" @ 1;
- "crystal-cluster" @ 1;
- "vibrant-crystal-cluster" @ 1;
- "crystal-orbs" @ 1;
- // end tall
- "build1": 1;
- "build2": 1;
- "build3": 1;
- "build4": 1;
- "build5": 1;
- "build6": 1;
- "build7": 1;
- "build8": 1;
- "build9": 1;
- "build10": 1;
- "build11": 1;
- "build12": 1;
- "build13": 1;
- "build14": 1;
- "build15": 1;
- "build16": 1;
- "conveyor" => ConveyorBlock::new(1, false, cost!(Copper: 1));
- "titanium-conveyor" => ConveyorBlock::new(1, false, cost!(Copper: 1, Lead: 1, Titanium: 1));
- "plastanium-conveyor" => StackConveyor::new(1, false, cost!(Graphite: 1, Silicon: 1, Plastanium: 1));
- "armored-conveyor" => ConveyorBlock::new(1, false, cost!(Metaglass: 1, Thorium: 1, Plastanium: 1));
- "junction" -> JunctionBlock::new(1, true, cost!(Copper: 2));
- "bridge-conveyor" -> BridgeBlock::new(1, false, cost!(Copper: 6, Lead: 6), 4, true);
- "phase-conveyor" -> BridgeBlock::new(1, false, cost!(Lead: 10, Graphite: 10, Silicon: 7, PhaseFabric: 5), 12, true);
- "sorter" => ItemBlock::new(1, true, cost!(Copper: 2, Lead: 2));
- "inverted-sorter" => ItemBlock::new(1, true, cost!(Copper: 2, Lead: 2));
- "unloader" => ItemBlock::new(1, true, cost!(Titanium: 25, Silicon: 30));
- "router" -> BasicBlock::new(1, true, cost!(Copper: 3));
- "distributor" -> BasicBlock::new(2, true, cost!(Copper: 4, Lead: 4));
- "overflow-gate" -> BasicBlock::new(1, true, cost!(Copper: 4, Lead: 2));
- "underflow-gate" -> BasicBlock::new(1, true, cost!(Copper: 4, Lead: 2));
- "mass-driver" => BridgeBlock::new(3, true, cost!(Lead: 125, Titanium: 125, Thorium: 50, Silicon: 75), 55, false);
- "duct" => DuctBlock::new(1, false, cost!(Beryllium: 1));
- "armored-duct" => DuctBlock::new(1, false, cost!(Beryllium: 2, Tungsten: 1));
- "duct-router" => ItemBlock::new(1, true, cost!(Beryllium: 10));
- "overflow-duct" => SimpleDuctBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8));
- "underflow-duct" => SimpleDuctBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8));
- "duct-bridge" => BridgeBlock::new(1, true, cost!(Beryllium: 20), 3, true);
- "duct-unloader" => ItemBlock::new(1, true, cost!(Graphite: 20, Silicon: 20, Tungsten: 10));
- "surge-conveyor" => StackConveyor::new(1, false, cost!(SurgeAlloy: 1, Tungsten: 1));
- "surge-router" => SurgeRouter::new(1, false, cost!(SurgeAlloy: 5, Tungsten: 1)); // not symmetric
- "unit-cargo-loader" -> UnitCargoLoader::new(3, true, cost!(Silicon: 80, SurgeAlloy: 50, Oxide: 20));
- "unit-cargo-unload-point" => ItemBlock::new(2, true, cost!(Silicon: 60, Tungsten: 60));
- "cultivator" -> ProductionBlock::new(2, true, cost!(Copper: 25, Lead: 25, Silicon: 10));
- "graphite-press" -> ProductionBlock::new(2, true, cost!(Copper: 75, Lead: 30));
- "multi-press" -> ProductionBlock::new(3, true, cost!(Lead: 100, Graphite: 50, Titanium: 100, Silicon: 25));
- "silicon-smelter" -> ProductionBlock::new(2, true, cost!(Copper: 30, Lead: 25));
- "silicon-crucible" -> ProductionBlock::new(3, true, cost!(Metaglass: 80, Titanium: 120, Silicon: 60, Plastanium: 35));
- "kiln" -> ProductionBlock::new(2, true, cost!(Copper: 60, Lead: 30, Graphite: 30));
- "plastanium-compressor" -> ProductionBlock::new(2, true, cost!(Lead: 115, Graphite: 60, Titanium: 80, Silicon: 80));
- "phase-weaver" -> ProductionBlock::new(2, true, cost!(Lead: 120, Thorium: 75, Silicon: 130));
- "surge-smelter" -> ProductionBlock::new(3, true, cost!(Lead: 80, Thorium: 70, Silicon: 80));
- "cryofluid-mixer" -> ProductionBlock::new(2, true, cost!(Lead: 65, Titanium: 60, Silicon: 40));
- "pyratite-mixer" -> ProductionBlock::new(2, true, cost!(Copper: 50, Lead: 25));
- "blast-mixer" -> ProductionBlock::new(2, true, cost!(Lead: 30, Titanium: 20));
- "melter" -> ProductionBlock::new(1, true, cost!(Copper: 30, Lead: 35, Graphite: 45));
- "separator" -> SeparatorBlock::new(2, true, cost!(Copper: 30, Titanium: 25));
- "disassembler" -> SeparatorBlock::new(3, true, cost!(Titanium: 100, Thorium: 80, Silicon: 150, Plastanium: 40));
- "spore-press" -> ProductionBlock::new(2, true, cost!(Lead: 35, Silicon: 30));
- "pulverizer" -> ProductionBlock::new(1, true, cost!(Copper: 30, Lead: 25));
- "coal-centrifuge" -> ProductionBlock::new(2, true, cost!(Lead: 30, Graphite: 40, Titanium: 20));
- "incinerator" -> BasicBlock::new(1, true, cost!(Lead: 15, Graphite: 5));
- "silicon-arc-furnace" -> ProductionBlock::new(3, true, cost!(Beryllium: 70, Graphite: 80));
- "electrolyzer" => ProductionBlock::new(3, true, cost!(Silicon: 50, Graphite: 40, Beryllium: 130, Tungsten: 80));
- "atmospheric-concentrator" -> ProductionBlock::new(3, true, cost!(Oxide: 60, Beryllium: 180, Silicon: 150));
- "oxidation-chamber" => HeatCrafter::new(3, true, cost!(Tungsten: 120, Graphite: 80, Silicon: 100, Beryllium: 120));
- "electric-heater" => HeatCrafter::new(2, false, cost!(Tungsten: 30, Oxide: 30));
- "slag-heater" => HeatCrafter::new(3, false, cost!(Tungsten: 50, Oxide: 20, Beryllium: 20));
- "phase-heater" => HeatCrafter::new(2, false, cost!(Oxide: 30, Carbide: 30, Beryllium: 30));
- "heat-redirector" => HeatConduit::new(3, false, cost!(Tungsten: 10, Graphite: 10));
- "small-heat-redirector" => HeatConduit::new(2, false, cost!(SurgeAlloy: 8, Graphite: 8));
- "heat-router" => HeatConduit::new(3, false, cost!(Tungsten: 15, Graphite: 10));
- "slag-incinerator" -> BasicBlock::new(1, true, cost!(Tungsten: 15));
- "carbide-crucible" -> ProductionBlock::new(3, true, cost!(Tungsten: 110, Thorium: 150, Oxide: 60));
- // slag centrifuge
- "surge-crucible" -> ProductionBlock::new(3, true, cost!(Silicon: 100, Graphite: 80, Tungsten: 80, Oxide: 80));
- "cyanogen-synthesizer" -> ProductionBlock::new(3, true, cost!(Carbide: 50, Silicon: 80, Beryllium: 90));
- "phase-synthesizer" -> ProductionBlock::new(3, true, cost!(Carbide: 90, Silicon: 100, Thorium: 100, Tungsten: 200));
- "heat-reactor" => HeatCrafter::new(3, false, cost!(Oxide: 70, Graphite: 20, Carbide: 10, Thorium: 80));
- "payload-conveyor" => PayloadConveyor::new(3, false, cost!(Copper: 10, Graphite: 10));
- "payload-router" => PayloadRouter::new(3, false, cost!(Copper: 10, Graphite: 15));
- "reinforced-payload-conveyor" => PayloadConveyor::new(3, false, cost!(Tungsten: 10));
- "reinforced-payload-router" => PayloadRouter::new(3, false, cost!(Tungsten: 15));
- "payload-mass-driver" -> BridgeBlock::new(3, true, cost!(Tungsten: 120, Silicon: 120, Graphite: 50), 700, false);
- "large-payload-mass-driver" -> BridgeBlock::new(5, true, cost!(Thorium: 200, Tungsten: 200, Silicon: 200, Graphite: 100, Oxide: 30), 1100, false);
- "small-deconstructor" => SimplePayloadBlock::new(3, true, cost!(Beryllium: 100, Silicon: 100, Oxide: 40, Graphite: 80));
- "deconstructor" => SimplePayloadBlock::new(5, true, cost!(Beryllium: 250, Oxide: 100, Silicon: 250, Carbide: 250));
- "constructor" => PayloadBlock::new(3, true, cost!(Silicon: 100, Beryllium: 150, Tungsten: 80));
- "large-constructor" => PayloadBlock::new(5, true, cost!(Silicon: 150, Oxide: 150, Tungsten: 200, PhaseFabric: 40));
- "payload-loader" => SimplePayloadBlock::new(3, false, cost!(Graphite: 50, Silicon: 50, Tungsten: 80));
- "payload-unloader" => SimplePayloadBlock::new(3, false, cost!(Graphite: 50, Silicon: 50, Tungsten: 30));
- "copper-wall" -> WallBlock::new(1, true, cost!(Copper: 6));
- "copper-wall-large" -> WallBlock::new(2, true, cost!(Copper: 6 * 4));
- "titanium-wall" -> WallBlock::new(1, true, cost!(Titanium: 6));
- "titanium-wall-large" -> WallBlock::new(2, true, cost!(Titanium: 6 * 4));
- "plastanium-wall" -> WallBlock::new(1, true, cost!(Metaglass: 2, Plastanium: 5));
- "plastanium-wall-large" -> WallBlock::new(2, true, cost!(Metaglass: 2 * 4, Plastanium: 5 * 4));
- "thorium-wall" -> WallBlock::new(1, true, cost!(Thorium: 6));
- "thorium-wall-large" -> WallBlock::new(2, true, cost!(Thorium: 6 * 4));
- "phase-wall" -> WallBlock::new(1, true, cost!(PhaseFabric: 6));
- "phase-wall-large" -> WallBlock::new(2, true, cost!(PhaseFabric: 6 * 4));
- "surge-wall" -> WallBlock::new(1, true, cost!(SurgeAlloy: 6));
- "surge-wall-large" -> WallBlock::new(2, true, cost!(SurgeAlloy: 6 * 4));
- "door" => DoorBlock::new(1, true, cost!(Titanium: 6, Silicon: 4));
- "door-large" => DoorBlock::new(2, true, cost!(Titanium: 6 * 4, Silicon: 4 * 4));
- "tungsten-wall" -> WallBlock::new(1, true, cost!(Tungsten: 6));
- "tungsten-wall-large" -> WallBlock::new(2, true, cost!(Tungsten: 6 * 4));
- "blast-door" -> DoorBlock::new(2, true, cost!(Tungsten: 24, Silicon: 24));
- "reinforced-surge-wall" -> WallBlock::new(1, true, cost!(SurgeAlloy: 6, Tungsten: 2));
- "reinforced-surge-wall-large" -> WallBlock::new(2, true, cost!(SurgeAlloy: 6 * 4, Tungsten: 2 * 4));
- "carbide-wall" -> WallBlock::new(1, true, cost!(Thorium: 6, Carbide: 6));
- "carbide-wall-large" -> WallBlock::new(2, true, cost!(Thorium: 6 * 4, Carbide: 6 * 4));
- "shielded-wall" -> WallBlock::new(2, true, cost!(PhaseFabric: 20, SurgeAlloy: 12, Beryllium: 12));
- "beryllium-wall" -> WallBlock::new(1, true, cost!(Beryllium: 6));
- "beryllium-wall-large" -> WallBlock::new(2, true, cost!(Beryllium: 6 * 4));
- "scrap-wall" -> WallBlock::new(1, true, cost!(Scrap: 6));
- "scrap-wall-large" -> WallBlock::new(2, true, cost!(Scrap: 24));
- "scrap-wall-huge" -> WallBlock::new(3, true, cost!(Scrap: 54));
- "scrap-wall-gigantic" -> WallBlock::new(4, true, cost!(Scrap: 96));
- "thruster" => WallBlock::new(4, false, cost!(Scrap: 96));
- "mender" -> HeatedBlock::new(1, true, cost!(Copper: 25, Lead: 30));
- "mend-projector" -> HeatedBlock::new(2, true, cost!(Copper: 50, Lead: 100, Titanium: 25, Silicon: 40));
- "overdrive-projector" -> HeatedBlock::new(2, true, cost!(Lead: 100, Titanium: 75, Silicon: 75, Plastanium: 30));
- "overdrive-dome" -> HeatedBlock::new(3, true, cost!(Lead: 200, Titanium: 130, Silicon: 130, Plastanium: 80, SurgeAlloy: 120));
- "force-projector" -> BasicBlock::new(3, true, cost!(Lead: 100, Titanium: 75, Silicon: 125));
- "regen-projector" -> BasicBlock::new(3, true, cost!(Silicon: 80, Tungsten: 60, Oxide: 40, Beryllium: 80));
- "shock-mine" -> BasicBlock::new(1, true, cost!(Lead: 25, Silicon: 12));
- "radar" -> RadarBlock::new(1, true, cost!(Silicon: 60, Graphite: 50, Beryllium: 10));
- "build-tower" -> BasicBlock::new(3, true, cost!(Silicon: 150, Oxide: 40, Thorium: 60));
- "shockwave-tower" -> BasicBlock::new(3, true, cost!(SurgeAlloy: 50, Silicon: 150, Oxide: 30, Tungsten: 100));
- "reinforced-pump" -> BasicBlock::new(2, true, cost!(Beryllium: 40, Tungsten: 30, Silicon: 20));
- "mechanical-pump" -> BasicBlock::new(1, true, cost!(Copper: 15, Metaglass: 10));
- "rotary-pump" -> BasicBlock::new(2, true, cost!(Copper: 70, Metaglass: 50, Titanium: 35, Silicon: 20));
- "impulse-pump" -> BasicBlock::new(3, true, cost!(Copper: 80, Metaglass: 90, Titanium: 40, Thorium: 35, Silicon: 30));
- "conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1));
- "pulse-conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1, Titanium: 2));
- "plated-conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1, Thorium: 2, Plastanium: 1));
- "liquid-router" -> BasicBlock::new(1, true, cost!(Metaglass: 2, Graphite: 4));
- "liquid-container" -> BasicBlock::new(2, true, cost!(Metaglass: 15, Titanium: 10));
- "liquid-tank" -> BasicBlock::new(3, true, cost!(Metaglass: 40, Titanium: 30));
- "liquid-junction" -> BasicBlock::new(1, true, cost!(Metaglass: 8, Graphite: 4));
- "bridge-conduit" -> BridgeBlock::new(1, true, cost!(Metaglass: 8, Graphite: 4), 4, true);
- "phase-conduit" -> BridgeBlock::new(1, true, cost!(Metaglass: 20, Titanium: 10, Silicon: 7, PhaseFabric: 5), 12, true);
- "reinforced-conduit" => ConduitBlock::new(1, false, cost!(Beryllium: 2));
- "reinforced-liquid-junction" -> BasicBlock::new(1, true, cost!(Graphite: 4, Beryllium: 8));
- "reinforced-bridge-conduit" => BridgeBlock::new(1, true, cost!(Graphite: 8, Beryllium: 20), 4, true);
- "reinforced-liquid-router" -> BasicBlock::new(1, true, cost!(Graphite: 8, Beryllium: 4));
- "reinforced-liquid-container" -> BasicBlock::new(2, true, cost!(Tungsten: 10, Beryllium: 16));
- "reinforced-liquid-tank" -> BasicBlock::new(3, true, cost!(Tungsten: 40, Beryllium: 50));
- "ground-factory" => UnitFactory::new(3, false, cost!(Copper: 50, Lead: 120, Silicon: 80), units::GROUND_UNITS);
- "air-factory" => UnitFactory::new(3, false, cost!(Copper: 60, Lead: 70), units::AIR_UNITS);
- "naval-factory" => UnitFactory::new(3, false, cost!(Copper: 150, Lead: 130, Metaglass: 120), units::NAVAL_UNITS);
- "additive-reconstructor" => ConstructorBlock::new(3, false, cost!(Copper: 200, Lead: 120, Silicon: 90));
- "multiplicative-reconstructor" => ConstructorBlock::new(5, false, cost!(Lead: 650, Titanium: 350, Thorium: 650, Silicon: 450));
- "exponential-reconstructor" => ConstructorBlock::new(7, false, cost!(Lead: 2000, Titanium: 2000, Thorium: 750, Silicon: 1000, Plastanium: 450, PhaseFabric: 600));
- "tetrative-reconstructor" => ConstructorBlock::new(9, false, cost!(Lead: 4000, Thorium: 1000, Silicon: 3000, Plastanium: 600, PhaseFabric: 600, SurgeAlloy: 800));
- "repair-point" -> RepairTurret::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20));
- "repair-turret" -> RepairTurret::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60));
- "tank-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 200, Beryllium: 150), &[crate::unit::Type::Stell]);
- "ship-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 250, Beryllium: 200), &[crate::unit::Type::Elude]);
- "mech-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60), &[crate::unit::Type::Merui]);
- "tank-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 200, Tungsten: 80, Silicon: 100));
- "mech-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 250, Tungsten: 120, Silicon: 150));
- "ship-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 200, Tungsten: 100, Silicon: 150, Oxide: 40));
- "prime-refabricator" => ConstructorBlock::new(5, true, cost!(Thorium: 250, Oxide: 200, Tungsten: 200, Silicon: 400));
- "tank-assembler" => AssemblerBlock::new(5, true, cost!(Thorium: 500, Oxide: 150, Carbide: 80, Silicon: 500));
- "ship-assembler" => AssemblerBlock::new(5, true, cost!(Carbide: 100, Oxide: 200, Tungsten: 500, Silicon: 800, Thorium: 400));
- "mech-assembler" => AssemblerBlock::new(5, true, cost!(Carbide: 200, Thorium: 600, Oxide: 200, Tungsten: 500, Silicon: 900)); // smh collaris
- "basic-assembler-module" => AssemblerModule::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block
- "unit-repair-tower" -> BasicBlock::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80));
- "launch-pad" -> BasicBlock::new(3, true, cost!(Copper: 350, Lead: 200, Titanium: 150, Silicon: 140));
- "landing-pad" -> BasicBlock::new(4, true, cost!(Copper: 200, Graphite: 100, Titanium: 100));
- "advanced-launch-pad" -> BasicBlock::new(4, true, cost!(Copper: 350, Silicon: 250, Lead: 300, Titanium: 200));
- "interplanetary-accelerator" -> BasicBlock::new(7, true, cost!(Copper: 16000, Silicon: 11000, Thorium: 13000, Titanium: 12000, SurgeAlloy: 6000, PhaseFabric: 5000));
- "mechanical-drill" -> DrillBlock::new(2, true, cost!(Copper: 12));
- "pneumatic-drill" -> DrillBlock::new(2, true, cost!(Copper: 18, Graphite: 10));
- "laser-drill" -> DrillBlock::new(3, true, cost!(Copper: 35, Graphite: 30, Titanium: 20, Silicon: 30));
- "blast-drill" -> DrillBlock::new(4, true, cost!(Copper: 65, Titanium: 50, Thorium: 75, Silicon: 60));
- "water-extractor" -> BasicBlock::new(2, true, cost!(Copper: 30, Lead: 30, Metaglass: 30, Graphite: 30));
- "oil-extractor" -> BasicBlock::new(3, true, cost!(Copper: 150, Lead: 115, Graphite: 175, Thorium: 115, Silicon: 75));
- "vent-condenser" -> ProductionBlock::new(3, true, cost!(Graphite: 20, Beryllium: 60));
- "cliff-crusher" => WallDrillBlock::new(2, false, cost!(Beryllium: 100, Graphite: 40));
- "large-cliff-crusher" => WallDrillBlock::new(3, false, cost!(Silicon: 80, SurgeAlloy: 15, Beryllium: 100, Tungsten: 50));
- "plasma-bore" => DrillBlock::new(2, false, cost!(Beryllium: 40));
- "large-plasma-bore" => DrillBlock::new(3, false, cost!(Silicon: 100, Oxide: 25, Beryllium: 100, Tungsten: 70));
- "impact-drill" -> DrillBlock::new(4, true, cost!(Silicon: 70, Beryllium: 90, Graphite: 60));
- "eruption-drill" -> DrillBlock::new(5, true, cost!(Silicon: 200, Oxide: 20, Tungsten: 200, Thorium: 120));
- "reinforced-message" -> MessageLogic::new(1, true, cost!(Graphite: 10, Beryllium: 5));
- "message" -> MessageLogic::new(1, true, cost!(Copper: 5, Graphite: 5));
- "switch" => SwitchLogic::new(1, true, cost!(Copper: 5, Graphite: 5));
- "micro-processor" -> ProcessorLogic::new(1, true, cost!(Copper: 90, Lead: 50, Silicon: 50));
- "logic-processor" -> ProcessorLogic::new(2, true, cost!(Lead: 320, Graphite: 60, Thorium: 50, Silicon: 80));
- "hyper-processor" -> ProcessorLogic::new(3, true, cost!(Lead: 450, Thorium: 75, Silicon: 150, SurgeAlloy: 50));
- "memory-cell" -> MemoryBlock::new(1, true, cost!(Copper: 30, Graphite: 30, Silicon: 30));
- "memory-bank" -> MemoryBlock::new(2, true, cost!(Copper: 30, Graphite: 80, Silicon: 80, PhaseFabric: 30));
- "logic-display" -> BasicBlock::new(3, true, cost!(Lead: 100, Metaglass: 50, Silicon: 50));
- "large-logic-display" -> BasicBlock::new(6, true, cost!(Lead: 200, Metaglass: 100, Silicon: 150, PhaseFabric: 75));
- "tile-logic-display" => TileableDisplay::new(1, false, cost!(Lead: 8, Silicon: 8, Metaglass: 8, PhaseFabric: 3));
- "canvas" => CanvasBlock::new(2, true, cost!(Silicon: 30, Beryllium: 10), 12);
- "illuminator" -> LampBlock::new(1, true, cost!(Lead: 8, Graphite: 12, Silicon: 8));
- "power-node" -> ConnectorBlock::new(1, true, cost!(Copper: 1, Lead: 3), 10);
- "power-node-large" -> ConnectorBlock::new(2, true, cost!(Lead: 10, Titanium: 5, Silicon: 3), 15);
- "surge-tower" -> ConnectorBlock::new(2, true, cost!(Lead: 10, Titanium: 7, Silicon: 15, SurgeAlloy: 15), 2);
- "diode" => DiodeBlock::new(1, false, cost!(Metaglass: 10, Silicon: 10, Plastanium: 5));
- "battery" -> BasicBlock::new(1, true, cost!(Copper: 5, Lead: 20));
- "battery-large" -> BasicBlock::new(3, true, cost!(Lead: 50, Titanium: 20, Silicon: 30));
- "combustion-generator" -> GeneratorBlock::new(1, true, cost!(Copper: 25, Lead: 15));
- "thermal-generator" -> GeneratorBlock::new(2, true, cost!(Copper: 40, Lead: 50, Metaglass: 40, Graphite: 35, Silicon: 35));
- "steam-generator" -> GeneratorBlock::new(2, true, cost!(Copper: 35, Lead: 40, Graphite: 25, Silicon: 30));
- "differential-generator" -> GeneratorBlock::new(3, true, cost!(Copper: 70, Lead: 100, Metaglass: 50, Titanium: 50, Silicon: 65));
- "rtg-generator" -> GeneratorBlock::new(2, true, cost!(Lead: 100, Thorium: 50, Silicon: 75, Plastanium: 75, PhaseFabric: 25));
- "solar-panel" -> GeneratorBlock::new(1, true, cost!(Lead: 10, Silicon: 15));
- "solar-panel-large" -> GeneratorBlock::new(3, true, cost!(Lead: 80, Silicon: 110, PhaseFabric: 15));
- "thorium-reactor" -> NuclearGeneratorBlock::new(3, true, cost!(Lead: 300, Metaglass: 50, Graphite: 150, Thorium: 150, Silicon: 200));
- "impact-reactor" -> ImpactReactorBlock::new(4, true, cost!(Lead: 500, Metaglass: 250, Graphite: 400, Thorium: 100, Silicon: 300, SurgeAlloy: 250));
- "beam-node" -> ConnectorBlock::new(1, true, cost!(Beryllium: 8), 4);
- "beam-tower" -> ConnectorBlock::new(3, true, cost!(Beryllium: 30, Oxide: 10, Silicon: 10), 12);
- "turbine-condenser" -> GeneratorBlock::new(3, true, cost!(Beryllium: 60));
- "chemical-combustion-chamber" -> GeneratorBlock::new(3, true, cost!(Graphite: 40, Tungsten: 40, Oxide: 40, Silicon: 30));
- "pyrolysis-generator" -> GeneratorBlock::new(3, true, cost!(Graphite: 50, Carbide: 50, Oxide: 60, Silicon: 50));
- "flux-reactor" -> GeneratorBlock::new(5, true, cost!(Graphite: 300, Carbide: 200, Oxide: 100, Silicon: 600, SurgeAlloy: 300));
- "neoplasia-reactor" => Neoplasia::new(5, true, cost!(Tungsten: 1000, Carbide: 300, Oxide: 150, Silicon: 500, PhaseFabric: 300, SurgeAlloy: 200));
- "core-shard" -> BasicBlock::new(3, true, cost!(Copper: 1000, Lead: 800));
- "core-foundation" -> BasicBlock::new(4, true, cost!(Copper: 3000, Lead: 3000, Silicon: 2000));
- "core-nucleus" -> BasicBlock::new(5, true, cost!(Copper: 8000, Lead: 8000, Thorium: 4000, Silicon: 5000));
- "core-bastion" -> BasicBlock::new(4, true, cost!(Graphite: 1000, Silicon: 1000, Beryllium: 800));
- "core-citadel" -> BasicBlock::new(5, true, cost!(Silicon: 4000, Beryllium: 4000, Tungsten: 3000, Oxide: 1000));
- "core-acropolis" -> BasicBlock::new(6, true, cost!(Beryllium: 6000, Silicon: 5000, Tungsten: 5000, Carbide: 3000, Oxide: 3000));
- "container" -> BasicBlock::new(2, true, cost!(Titanium: 100));
- "vault" -> BasicBlock::new(3, true, cost!(Titanium: 250, Thorium: 125));
- "reinforced-container" -> BasicBlock::new(2, true, cost!(Tungsten: 30, Graphite: 40));
- "reinforced-vault" -> BasicBlock::new(3, true, cost!(Tungsten: 125, Thorium: 70, Beryllium: 100));
- "duo" -> ItemTurret::new(1, true, cost!(Copper: 35));
- "scatter" -> ItemTurret::new(2, true, cost!(Copper: 85, Lead: 45));
- "scorch" -> ItemTurret::new(1, true, cost!(Copper: 25, Graphite: 22));
- "hail" -> ItemTurret::new(1, true, cost!(Copper: 40, Graphite: 17));
- "wave" -> Turret::new(2, true, cost!(Copper: 25, Lead: 75, Metaglass: 45));
- "tsunami" -> Turret::new(3, true, cost!(Lead: 400, Metaglass: 100, Titanium: 250, Thorium: 100));
- "lancer" -> Turret::new(2, true, cost!(Copper: 60, Lead: 70, Titanium: 30, Silicon: 60));
- "arc" -> Turret::new(1, true, cost!(Copper: 50, Lead: 50));
- "parallax" -> TractorBeamTurret::new(2, true, cost!(Graphite: 30, Titanium: 90, Silicon: 120));
- "swarmer" -> ItemTurret::new(2, true, cost!(Graphite: 35, Titanium: 35, Silicon: 30, Plastanium: 45));
- "salvo" -> ItemTurret::new(2, true, cost!(Copper: 100, Graphite: 80, Titanium: 50));
- "segment" -> PointDefenseTurret::new(2, true, cost!(Titanium: 40, Thorium: 80, Silicon: 130, PhaseFabric: 40));
- "fuse" -> ItemTurret::new(3, true, cost!(Copper: 225, Graphite: 225, Thorium: 100));
- "ripple" -> ItemTurret::new(3, true, cost!(Copper: 150, Graphite: 135, Titanium: 60));
- "cyclone" -> ItemTurret::new(3, true, cost!(Copper: 200, Titanium: 125, Plastanium: 80));
- "foreshadow" -> ItemTurret::new(4, true, cost!(Copper: 1000, Metaglass: 600, Silicon: 600, Plastanium: 200, SurgeAlloy: 300));
- "spectre" -> ItemTurret::new(4, true, cost!(Copper: 900, Graphite: 300, Thorium: 250, Plastanium: 175, SurgeAlloy: 250));
- "meltdown" -> Turret::new(4, true, cost!(Copper: 1200, Lead: 350, Graphite: 300, Silicon: 325, SurgeAlloy: 325));
- "breach" -> ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 150, Graphite: 250));
- "diffuse" -> ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 200, Graphite: 200, Tungsten: 50));
- "sublimate" -> ContinousTurret::new(3, true, cost!(Tungsten: 150, Silicon: 200, Oxide: 40, Beryllium: 400));
- "titan" -> ItemTurret::new(4, true, cost!(Tungsten: 250, Silicon: 300, Thorium: 400));
- "disperse" -> ItemTurret::new(4, true, cost!(Thorium: 50, Oxide: 150, Silicon: 200, Beryllium: 350));
- "afflict" -> Turret::new(4, true, cost!(SurgeAlloy: 100, Silicon: 200, Graphite: 250, Oxide: 40));
- "lustre" -> ContinousTurret::new(4, true, cost!(Silicon: 250, Graphite: 200, Oxide: 50, Carbide: 90));
- "scathe" -> ItemTurret::new(4, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
- "malign" -> Turret::new(5, true, cost!(Carbide: 400, Beryllium: 2000, Silicon: 800, Graphite: 800, PhaseFabric: 300));
- "smite" -> ItemTurret::new(5, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
- // sandbox only
- "beam-link" -> ConnectorBlock::new(3, true, &[], 12);
- "power-source" -> ConnectorBlock::new(1, true, &[], 100);
- "power-void" -> BasicBlock::new(1, true, &[]);
- "world-processor" -> ProcessorLogic::new(1, true, &[]);
- "world-message" -> MessageLogic::new(1, true, &[]);
- "world-cell" -> MemoryBlock::new(1, true, &[]);
- "world-switch" => SwitchLogic::new(1, true, &[]);
- "liquid-source" => FluidBlock::new(1, true, &[]);
- "liquid-void" -> BasicBlock::new(1, true, &[]);
- "shield-projector" -> ShieldBlock::new(3, true, &[]);
- "large-shield-projector" -> ShieldBlock::new(4, true, &[]);
- "payload-source" => PayloadBlock::new(5, false, &[]);
- "payload-void" => SimplePayloadBlock::new(5, true, &[]);
- "item-source" => ItemBlock::new(1, true, &[]);
- "item-void" -> BasicBlock::new(1, true, &[]);
- "heat-source" => HeatCrafter::new(1, false, &[]);
-}
diff --git a/mindus/src/block/payload.rs b/mindus/src/block/payload.rs
deleted file mode 100644
index 80a8a6f..0000000
--- a/mindus/src/block/payload.rs
+++ /dev/null
@@ -1,272 +0,0 @@
-//! payload related bits and bobs
-use thiserror::Error;
-
-use crate::block::content::Type as BlockEnum;
-use crate::block::simple::*;
-use crate::block::{self, *};
-use crate::content;
-use crate::data::ReadError;
-use crate::data::dynamic::DynType;
-use crate::data::entity_mapping;
-use crate::unit;
-
-make_simple!(SimplePayloadBlock, |_, n, _, _, r: Rotation, scl| {
- match n {
- "deconstructor" | "small-deconstructor" | "payload-void" => {
- let mut base = load!(from n which is ["deconstructor" | "small-deconstructor" | "payload-void"], scl);
- let mut r#in = load!(scl -> match n {
- "small-deconstructor" => "factory-in-3",
- _ => "factory-in-5",
- });
- unsafe { r#in.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&r#in) };
- let top = load!(scl -> match n {
- "small-deconstructor" => "small-deconstructor-top",
- "deconstructor" => "deconstructor-top",
- _ => "payload-void-top",
- });
- unsafe { base.overlay(&top) };
- base
- }
- // "payload-loader" | "payload-unloader"
- _ => {
- let mut base = load!(from n which is ["payload-loader" | "payload-unloader"], scl);
- let mut input = load!("factory-in-3-dark", scl);
- unsafe { input.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&input) };
-
- let mut output = load!("factory-out-3-dark", scl);
- unsafe { output.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&output) };
-
- let top =
- load!(concat "top" => n which is ["payload-loader" | "payload-unloader"], scl);
- unsafe { base.overlay(&top) };
- base
- }
- }
-});
-make_simple!(
- PayloadConveyor,
- |_, n, _, _, r: Rotation, s| {
- let mut base =
- load!(from n which is ["payload-conveyor" | "reinforced-payload-conveyor"], s);
- unsafe { base.rotate(r.rotated(false).count()) };
- base
- },
- read_payload_conveyor
-);
-
-make_simple!(
- PayloadRouter,
- |_, n, _, _, r: Rotation, s| {
- let mut base = load!(from n which is ["payload-router" | "reinforced-payload-router"], s);
- unsafe { base.rotate(r.rotated(false).count()) };
- let over =
- load!(concat "over" => n which is ["payload-router" | "reinforced-payload-router"], s);
- unsafe { base.overlay(&over) };
- base
- },
- read_payload_router
-);
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
-/// payload item cfg
-pub enum Payload {
- Empty,
- Block(block::content::Type),
- Unit(unit::Type),
-}
-
-/// a payload related block with [item cfg](Payload)
-pub struct PayloadBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
-}
-
-impl PayloadBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
- assert!(size != 0, "invalid size");
- Self {
- size,
- symmetric,
- build_cost,
- }
- }
-
- state_impl!(pub Payload);
-}
-
-impl BlockLogic for PayloadBlock {
- impl_block!();
-
- fn draw(
- &self,
- name: &str,
- _: Option<&State>,
- _: Option<&RenderingContext>,
- r: Rotation,
- s: Scale,
- ) -> ImageHolder<4> {
- let mut base =
- load!(from name which is ["constructor" | "large-constructor" | "payload-source"], s);
- let mut out = load!(s -> match name {
- "constructor" => "factory-out-3",
- "large-constructor" => "factory-out-5-dark",
- _ => "factory-out-5",
- });
- unsafe { out.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&out) };
- let top = load!(concat "top" => name which is ["constructor" | "large-constructor" | "payload-source"], s);
- unsafe { base.overlay(&top) };
- base
- }
-
- fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- Ok(DynData::Empty)
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Empty => Ok(Some(Self::create_state(Payload::Empty))),
- DynData::Content(content::Type::Block, id) => {
- let block = PayloadDeserializeError::forward(block::content::Type::try_from(id))?;
- Ok(Some(Self::create_state(Payload::Block(block))))
- }
- DynData::Content(content::Type::Unit, id) => {
- let unit = PayloadDeserializeError::forward(unit::Type::try_from(id))?;
- Ok(Some(Self::create_state(Payload::Unit(unit))))
- }
- DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new(
- PayloadDeserializeError::ContentType(have),
- ))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Content,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- match Self::get_state(state) {
- Payload::Empty => Ok(DynData::Empty),
- Payload::Block(block) => Ok(DynData::Content(content::Type::Block, (*block).into())),
- Payload::Unit(unit) => Ok(DynData::Content(content::Type::Unit, (*unit).into())),
- }
- }
-}
-
-/// format:
-/// - call [`read_payload_conveyor`]
-/// - t: [`u8`]
-/// - sort: [`u16`]
-/// - recdir: [`u8`]
-fn read_payload_router(b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- read_payload_conveyor(b, buff)?;
- buff.skip(4)
-}
-
-/// format:
-/// - [`skip(4)`](`DataRead::skip`)
-/// - rot: [`f32`]
-/// - become [`read_payload`]
-fn read_payload_conveyor(_: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- buff.skip(8)?;
- read_payload(buff)
-}
-
-/// format:
-/// - iterate [`i16`]..0
-/// - [`u8`], [`i16`], [`i32`]
-pub(crate) fn read_payload_seq(buff: &mut DataRead) -> Result<(), DataReadError> {
- let amount = (-buff.read_i16()?) as usize;
- buff.skip(amount * 7)
-}
-
-/// format:
-/// - vector: ([`f32`], [`f32`])
-/// - rotation: [`f32`]
-/// - become [`read_payload`]
-pub(crate) fn read_payload_block(buff: &mut DataRead) -> Result<(), DataReadError> {
- buff.skip(12)?;
- read_payload(buff)
-}
-
-/// format:
-/// - exists: [`bool`]
-/// - if !exists: ok
-/// - type: [`u8`]
-/// - if type == `1` (payload block):
-/// - block: [`u16`]
-/// - version: [`u8`]
-/// - [`BlockLogic::read`] (recursion :ferrisHmm:),
-/// - if type == 2 (paylood unit):
-/// - id: [`u8`]
-/// - call [`UnitClass::read`](crate::data::entity_mapping::UnitClass::read)
-pub fn read_payload(buff: &mut DataRead) -> Result<(), DataReadError> {
- if !buff.read_bool()? {
- return Ok(());
- }
- let t = buff.read_u8()?;
- const BLOCK: u8 = 1;
- const UNIT: u8 = 0;
- match t {
- BLOCK => {
- let b = buff.read_u16()?;
- buff.skip(1)?;
- let block = BlockEnum::try_from(b)
- .unwrap_or(BlockEnum::Router)
- .to_block()
- .expect("payload should not be a environment block");
- let mut b = Build::new(block);
- let _ = b.read(buff);
- }
- UNIT => {
- let u = buff.read_u8()? as usize;
- let Some(&Some(u)) = entity_mapping::ID.get(u) else {
- return Err(ReadError::Expected("map entry"));
- };
- let _ = u.read(buff)?;
- }
- _ => return Err(ReadError::Expected("0 | 1")),
- }
- Ok(())
-}
-
-#[cfg(test)]
-mod tests {
-
- use super::*;
- #[test]
- fn payload_conv() {
- let mut r = DataRead::new(&[0, 0, 0, 0, 0, 0, 0, 0, 0]);
- read_payload_conveyor(&mut Build::new(&PAYLOAD_CONVEYOR), &mut r).unwrap();
- assert!(r.read_bool().is_err());
- let mut r = DataRead::new(&[
- 65, 198, 232, 0, 67, 51, 255, 249, 1, 1, 0, 157, 0, 67, 197, 128, 0, 128, 1, 3,
- ]);
- read_payload_conveyor(&mut Build::new(&PAYLOAD_CONVEYOR), &mut r).unwrap();
- assert!(r.read_bool().is_err());
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-pub enum PayloadDeserializeError {
- #[error("expected Unit or Block but got {0:?}")]
- ContentType(content::Type),
- #[error("payload block not found")]
- BlockNotFound(#[from] block::content::TryFromU16Error),
- #[error("payload unit not found")]
- UnitNotFound(#[from] unit::TryFromU16Error),
-}
-
-impl PayloadDeserializeError {
- pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
- }
- }
-}
diff --git a/mindus/src/block/power.rs b/mindus/src/block/power.rs
deleted file mode 100644
index 3fde947..0000000
--- a/mindus/src/block/power.rs
+++ /dev/null
@@ -1,213 +0,0 @@
-//! power connection and generation
-use thiserror::Error;
-
-use crate::block::simple::*;
-use crate::block::*;
-use crate::data::dynamic::DynType;
-
-make_simple!(GeneratorBlock => |_, buff: &mut DataRead| read_generator(buff));
-make_simple!(NuclearGeneratorBlock => |_, buff: &mut DataRead| read_nuclear(buff));
-make_simple!(ImpactReactorBlock => |_, buff: &mut DataRead| read_impact(buff));
-make_simple!(
- Neoplasia,
- |_, _, _, _, rot: Rotation, scl| {
- let mut base = load!("neoplasia-reactor", scl);
- let mut top = load!(scl -> match rot {
- Rotation::Up | Rotation::Right => "neoplasia-reactor-top1",
- Rotation::Down | Rotation::Left => "neoplasia-reactor-top2",
- });
- unsafe { top.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
- },
- |_, buff: &mut DataRead| read_heater(buff)
-);
-make_simple!(DiodeBlock, |_, _, _, _, rot: Rotation, s| {
- let mut base = load!("diode", s);
- if rot == Rotation::Right {
- return base;
- }
- let mut top = load!("diode-arrow", s);
- unsafe { top.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
-});
-
-pub struct ConnectorBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
- pub max: u8,
-}
-
-impl ConnectorBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost, max: u8) -> Self {
- assert!(size != 0, "invalid size");
- assert!(
- !(max == 0 || max > i8::MAX as u8),
- "invalid maximum link count"
- );
- Self {
- size,
- symmetric,
- build_cost,
- max,
- }
- }
- state_impl!(pub Vec<(i16, i16)>);
-}
-
-impl BlockLogic for ConnectorBlock {
- impl_block!();
-
- fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- Ok(DynData::Empty)
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Empty => Ok(Some(Self::create_state(Vec::new()))),
- DynData::Point2Array(s) => Ok(Some(Self::create_state(s))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Boolean,
- }),
- }
- }
-
- fn mirror_state(&self, state: &mut State, horizontally: bool, vertically: bool) {
- for (dx, dy) in &mut *Self::get_state_mut(state) {
- if horizontally {
- *dx = -*dx;
- }
- if vertically {
- *dy = -*dy;
- }
- }
- }
-
- fn rotate_state(&self, state: &mut State, clockwise: bool) {
- for (dx, dy) in &mut *Self::get_state_mut(state) {
- let (cdx, cdy) = (*dx, *dy);
- *dx = if clockwise { cdy } else { -cdy };
- *dy = if clockwise { -cdx } else { cdx };
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- Ok(DynData::Point2Array(Self::get_state(state).clone()))
- }
-}
-
-#[derive(Debug, Error)]
-pub enum ConnectorDeserializeError {
- #[error("too many links ({have} but only {max} allowed)")]
- LinkCount { have: usize, max: u8 },
-}
-
-impl ConnectorDeserializeError {
- pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
- }
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
-pub struct Rgba(u8, u8, u8, u8);
-
-impl From<u32> for Rgba {
- fn from(value: u32) -> Self {
- Self(
- (value >> 24) as u8,
- (value >> 16) as u8,
- (value >> 8) as u8,
- value as u8,
- )
- }
-}
-
-impl From<Rgba> for u32 {
- fn from(value: Rgba) -> Self {
- (u32::from(value.0) << 24)
- | (u32::from(value.1) << 16)
- | (u32::from(value.2) << 8)
- | u32::from(value.3)
- }
-}
-
-pub struct LampBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
-}
-
-impl LampBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
- assert!(size != 0, "invalid size");
- Self {
- size,
- symmetric,
- build_cost,
- }
- }
-
- state_impl!(pub Rgba);
-}
-
-impl BlockLogic for LampBlock {
- impl_block!();
-
- fn data_from_i32(&self, config: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- Ok(DynData::Int(config))
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Int(rgba) => Ok(Some(Self::create_state(Rgba::from(rgba as u32)))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Int,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- let state = Self::get_state(state);
- Ok(DynData::Int(u32::from(*state) as i32))
- }
-}
-
-/// format:
-/// - production efficiency: [`f32`]
-/// - generate time: [`f32`]
-fn read_generator(buff: &mut DataRead) -> Result<(), DataReadError> {
- buff.skip(8)
-}
-
-/// format:
-/// - call [`read_generator`]
-/// - heat: [`f32`]
-fn read_nuclear(buff: &mut DataRead) -> Result<(), DataReadError> {
- read_generator(buff)?;
- buff.skip(4)
-}
-
-/// format:
-/// - call [`read_generator`]
-/// - warmup: [`f32`]
-fn read_impact(buff: &mut DataRead) -> Result<(), DataReadError> {
- read_generator(buff)?;
- buff.skip(4)
-}
-
-/// format:
-/// - call [`read_generator`]
-/// - heat: [`f32`]
-fn read_heater(buff: &mut DataRead) -> Result<(), DataReadError> {
- read_generator(buff)?;
- buff.skip(4)
-}
diff --git a/mindus/src/block/production.rs b/mindus/src/block/production.rs
deleted file mode 100644
index 589e73c..0000000
--- a/mindus/src/block/production.rs
+++ /dev/null
@@ -1,98 +0,0 @@
-//! the industry part of mindustry
-use crate::block::simple::*;
-use crate::block::*;
-use crate::data::DataRead;
-
-// format: call [`read_production_block`], seed: [`i32`]
-make_simple!(SeparatorBlock => |_, buff: &mut DataRead| buff.skip(12));
-
-make_simple!(
- ProductionBlock,
- |_, _, _, _, r: Rotation, s| {
- // electrolyzer exclusive
- // ozone <- e(^) -> hydrogen
- let mut base = load!("electrolyzer", s);
- let mut hydro = load!(s -> match r {
- Rotation::Up | Rotation::Left => "electrolyzer-hydrogen-output1"
- Rotation::Down | Rotation::Right => "electrolyzer-hydrogen-output2"
- });
- unsafe { hydro.rotate(r.count()) };
- unsafe { base.overlay(&hydro) };
-
- let mut ozone = load!(s -> match r {
- Rotation::Down | Rotation::Right => "electrolyzer-ozone-output1"
- Rotation::Up | Rotation::Left => "electrolyzer-ozone-output2"
- });
- unsafe { ozone.rotate(r.mirrored(true, true).count()) };
- unsafe { base.overlay(&ozone) };
- base
- },
- |b: &mut Build, buff: &mut DataRead| {
- // format:
- // - progress: `f32`
- // - warmup: `f32`
- // (cultivator)
- // `f32`
- buff.skip(8 + if b.name() == "cultivator" { 4 } else { 0 })
- }
-);
-
-make_simple!(
- HeatCrafter,
- |_, n, _, _, r: Rotation, s| {
- let mut base = load!(from n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater" | "heat-source" | "heat-reactor"], s);
- let mut top = match r {
- Rotation::Up | Rotation::Right => {
- load!(concat "top1" => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater" | "heat-source" | "heat-reactor"], s)
- }
- Rotation::Down | Rotation::Left => {
- load!(concat "top2" => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater" | "heat-source" | "heat-reactor"], s)
- }
- };
- unsafe { top.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
- },
- |_, buff: &mut DataRead| {
- // format:
- // - progress: `f32`
- // - warmup: `f32`
- // - heat: f32
- buff.skip(12)?;
- Ok(())
- }
-);
-make_simple!(HeatConduit, |_, n, _, _, r: Rotation, s| {
- let mut base =
- load!(from n which is ["heat-router" | "heat-redirector" | "small-heat-redirector"], s);
- if n == "heat-router" {
- let t1 = load!("heat-router-top1", s);
- let t2 = load!("heat-router-top2", s);
- let x = |n| unsafe {
- match n {
- Rotation::Up => t1.clone().rotated(3),
- Rotation::Right => t1.clone(),
- Rotation::Down => t2.clone().rotated(1),
- Rotation::Left => t2.clone().rotated(2),
- }
- };
- unsafe {
- base.overlay(&x(r.rotated(false)));
- base.overlay(&x(r));
- base.overlay(&x(r.rotated(true)));
- }
- base
- } else {
- let mut top = match r {
- Rotation::Up | Rotation::Right => {
- load!(concat "top1" => n which is ["heat-router" | "heat-redirector" | "small-heat-redirector"], s)
- }
- Rotation::Down | Rotation::Left => {
- load!(concat "top2" => n which is ["heat-router" | "heat-redirector" | "small-heat-redirector"], s)
- }
- };
- unsafe { top.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
- }
-});
diff --git a/mindus/src/block/ratios.rs b/mindus/src/block/ratios.rs
deleted file mode 100644
index ad38377..0000000
--- a/mindus/src/block/ratios.rs
+++ /dev/null
@@ -1,265 +0,0 @@
-use std::borrow::Cow;
-use std::collections::HashMap;
-
-use super::State;
-use crate::unit::Type::*;
-#[macro_export]
-macro_rules! ratios {
- ([$($input:ident: $icnt:literal),*] => [$($output:ident: $ocnt:literal),*]) => {{
- #[allow(unused_imports)]
- use $crate::{fluid::Type::*, item::Type::*, block::ConstFrom};
- const I: &[($crate::block::ratios::Resource, ::std::primitive::f32)] = &[$(($crate::block::ratios::Resource::fro($input), $icnt as ::std::primitive::f32),)*];
- const O: &[($crate::block::ratios::Resource, ::std::primitive::f32)] = &[$(($crate::block::ratios::Resource::fro($output), $ocnt as ::std::primitive::f32),)*];
- $crate::block::ratios::Io::new(I, O)
- }};
- [$($input:ident: $cnt:literal),*] => {{
- #[allow(unused_imports)]
- use $crate::{fluid::Type::*, item::Type::*, block::ConstFrom};
- const I: &[($crate::block::ratios::Resource, ::std::primitive::f32)] = &[$(($crate::block::ratios::Resource::fro($input), $cnt as ::std::primitive::f32),)*];
- $crate::block::ratios::Io::new(I, &[][..])
- }}
-}
-pub use ratios;
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
-pub enum Resource {
- Item(crate::item::Type),
- Fluid(crate::fluid::Type),
-}
-
-impl const super::ConstFrom<crate::item::Type> for Resource {
- fn fro(value: crate::item::Type) -> Self {
- Self::Item(value)
- }
-}
-
-impl const super::ConstFrom<crate::fluid::Type> for Resource {
- fn fro(value: crate::fluid::Type) -> Self {
- Self::Fluid(value)
- }
-}
-
-#[derive(Debug, Clone)]
-pub struct Io {
- pub input: Cow<'static, [(Resource, f32)]>,
- pub output: Cow<'static, [(Resource, f32)]>,
-}
-
-impl PartialEq for Io {
- fn eq(&self, other: &Self) -> bool {
- let sort = |mut x: Vec<_>| {
- x.sort_by_key(|(x, _)| *x);
- x
- };
- sort(self.input.to_vec()) == sort(other.input.to_vec())
- && sort(self.output.to_vec()) == sort(other.output.to_vec())
- }
-}
-
-impl Io {
- fn none() -> Self {
- Self {
- input: Cow::from(&[][..]),
- output: Cow::from(&[][..]),
- }
- }
-
- pub fn new(input: &'static [(Resource, f32)], output: &'static [(Resource, f32)]) -> Self {
- Self {
- input: Cow::from(input),
- output: Cow::from(output),
- }
- }
-}
-
-#[derive(Default)]
-pub(crate) struct IoBuilder {
- pub net: HashMap<Resource, f32>,
-}
-
-impl std::ops::AddAssign<Io> for IoBuilder {
- fn add_assign(&mut self, rhs: Io) {
- for &(res, n) in &*rhs.output {
- *self.net.entry(res).or_default() += n;
- }
- for &(res, n) in &*rhs.input {
- *self.net.entry(res).or_default() -= n;
- }
- }
-}
-
-impl From<IoBuilder> for Io {
- fn from(value: IoBuilder) -> Self {
- let (mut input, output): (Vec<_>, Vec<_>) = value
- .net
- .into_iter()
- .filter(|(_, n)| n.abs() > 0.001)
- .map(|(r, n)| (r, (n * 100.0 + 0.5).floor() / 100.0))
- .partition(|&(_, n)| n < 0.0);
- input.iter_mut().for_each(|(_, v)| *v = v.abs());
- Self {
- input: Cow::Owned(input),
- output: Cow::Owned(output),
- }
- }
-}
-
-pub trait Ratios {
- #[inline]
- #[must_use]
- #[allow(unused_variables)]
- fn io(&self, state: Option<&State>, name: &str) -> Io {
- Io::none()
- }
-}
-
-macro_rules! just {
- ($for:ident, [$($input:ident: $icnt:literal),*] => [$($output:ident: $ocnt:literal),*]) => {
- impl Ratios for super::$for {
- fn io(&self, _: Option<&State>, _: &str) -> Io {
- ratios!([$($input : $icnt),*] => [$($output : $ocnt),*])
- }
- }
- }
-}
-
-macro_rules! rats {
- ($for:ident { $($name:literal: [$($input:ident: $icnt:literal),*] => [$($output:ident: $ocnt:literal),*])+ }) => {
- impl Ratios for super::$for {
- fn io(&self, _: Option<&State>, name: &str) -> Io {
- $(_ = crate::data::renderer::load!($name);)+ // string validation
- match name {
- $($name => ratios!([$($input : $icnt),*] => [$($output : $ocnt),*]),)+
- _ => Io::none()
- }
- }
- }
- };
- ($for:ident { none }) => {
- impl Ratios for super::$for {}
- }
-}
-
-rats!(ConveyorBlock { none });
-rats!(JunctionBlock { none });
-rats!(StackConveyor { none });
-rats!(BridgeBlock { none });
-rats!(ItemBlock { none });
-rats!(DuctBlock { none });
-rats!(SimpleDuctBlock { none });
-rats!(FluidBlock { none });
-rats!(SurgeRouter { none });
-rats!(ProductionBlock {
- "cultivator": [Water: 18] => [SporePod: 0.6]
- "graphite-press": [Coal: 1.33] => [Graphite: 0.66]
- "multi-press": [Coal: 6, Water: 6] => [Graphite: 4]
- "silicon-smelter": [Coal: 1.5, Sand: 3] => [Silicon: 1.5]
- "silicon-crucible": [Coal: 2.66, Sand: 4, Pyratite: 0.66] => [Silicon: 5.33]
- "kiln": [Lead: 2, Sand: 2] => [Metaglass: 2]
- "plastanium-compressor": [Oil: 15, Titanium: 2] => [Plastanium: 1]
- "phase-weaver": [Thorium: 2, Sand: 5] => [PhaseFabric: 0.5]
- "surge-smelter": [Copper: 2.4, Lead: 3.2, Titanium: 1.6, Silicon: 2.4] => [SurgeAlloy: 0.8]
- "cryofluid-mixer": [Titanium: 0.5, Water: 12] => [Cryofluid: 12]
- "pyratite-mixer": [Coal: 0.75, Lead: 1.5, Sand: 1.5] => [Pyratite: 0.75]
- "blast-mixer": [Pyratite: 0.75, SporePod: 0.75] => [BlastCompound: 0.75]
- "melter": [Scrap: 6] => [Slag: 12]
- "spore-press": [SporePod: 3] => [Oil: 18]
- "pulverizer": [Scrap: 1.5] => [Sand: 1.5]
- "coal-centrifuge": [Oil: 6] => [Coal: 2]
- "silicon-arc-furnace": [Graphite: 1.2, Sand: 4.8] => [Silicon: 4.8]
- "electrolyzer": [Water: 10] => [Ozone: 4, Hydrogen: 6]
- "atmospheric-concentrator": [] => [Nitrogen: 4]
- "carbide-crucible": [Tungsten: 0.88, Graphite: 1.33] => [Carbide: 0.44]
- "cyanogen-synthesizer": [Arkycite: 40, Graphite: 0.75] => [Cyanogen: 3]
- "phase-synthesizer": [Thorium: 1, Sand: 3, Ozone: 2] => [PhaseFabric: 0.5]
- "vent-condenser": [] => [Water: 30]
-});
-rats!(SeparatorBlock {
- "separator": [Slag: 4] => [Copper: 0.71, Lead: 0.43, Graphite: 0.28, Titanium: 0.28]
- "disassembler": [Slag: 7.2, Scrap: 4] => [Sand: 1.6, Graphite: 0.8, Titanium: 0.8, Thorium: 0.8]
-});
-rats!(HeatConduit { none });
-rats!(HeatCrafter {
- "oxidation-chamber": [Ozone: 2, Beryllium: 0.5] => [Oxide: 0.5]
- "phase-heater": [PhaseFabric: 0.12] => []
-});
-rats!(WallBlock { none });
-rats!(DoorBlock { none });
-rats!(HeatedBlock { none }); // these arent erekir, btw
-rats!(ConduitBlock { none });
-impl Ratios for super::UnitFactory {
- fn io(&self, state: Option<&State>, name: &str) -> Io {
- state.map_or(Io::none(), |s| {
- Self::get_state(s).map_or(Io::none(), |t| match (name, t) {
- ("ground-factory", Dagger) => ratios![Silicon: 0.66, Lead: 0.66],
- ("ground-factory", Crawler) => ratios![Silicon: 0.8, Coal: 1],
- ("ground-factory", Nova) => ratios![Silicon: 0.75, Lead: 0.5, Titanium: 0.5],
- ("air-factory", Flare) => ratios![Silicon: 1],
- ("air-factory", Mono) => ratios![Silicon: 0.85, Lead: 0.42],
- ("naval-factory", Risso) => ratios![Silicon: 0.44, Metaglass: 0.77],
- ("naval-factory", Retusa) => ratios![Silicon: 0.3, Metaglass: 0.5, Titanium: 0.4],
- ("tank-fabricator", _) => ratios![Beryllium: 1.14, Silicon: 1.42],
- ("ship-fabricator", _) => ratios![Graphite: 1.25, Silicon: 1.75],
- ("mech-fabricator", _) => ratios![Beryllium: 1.25, Silicon: 1.75],
- (f, t) => unreachable!("{f}, {t:?}"),
- })
- })
- }
-}
-rats!(ConstructorBlock {
- "additive-reconstructor": [Silicon: 4, Graphite: 4] => []
- "multiplicative-reconstructor": [Silicon: 4.33, Titanium: 2.66, Metaglass: 1.33] => []
- "exponential-reconstructor": [Silicon: 9.44, Titanium: 8.33, Plastanium: 7.22, Cryofluid: 60] => []
- "tetrative-reconstructor": [Silicon: 4.16, Plastanium: 2.5, SurgeAlloy: 2.08, PhaseFabric: 1.45, Cryofluid: 180] => []
- "tank-refabricator": [Hydrogen: 3, Silicon: 1.33, Titanium: 1] => []
- "mech-refabricator": [Hydrogen: 3, Silicon: 1.11, Tungsten: 0.88] => []
- "ship-refabricator": [Hydrogen: 3, Silicon: 1.2, Tungsten: 0.8] => []
- "prime-refabricator": [Nitrogen: 10, Thorium: 1.33, Silicon: 1.66] => []
-});
-rats!(BasicBlock {
- "water-extractor": [] => [Water: 6.6]
- "unit-repair-tower": [Ozone: 3] => []
- "oil-extractor": [Water: 9, Sand: 1] => [] // *cough*
-});
-rats!(WallDrillBlock { none }); // more cough
-rats!(DrillBlock {
- "laser-drill": [Water: 4.8] => []
- "blast-drill": [Water: 6] => []
- "large-plasma-bore": [Nitrogen: 3] => []
- "impact-drill": [Water: 12] => []
- "eruption-drill": [Hydrogen: 4] => []
-});
-rats!(MessageLogic { none });
-rats!(SwitchLogic { none });
-rats!(ProcessorLogic { "hyper-processor": [Cryofluid: 4.8] => [] });
-rats!(MemoryBlock { none });
-rats!(CanvasBlock { none });
-rats!(LampBlock { none });
-rats!(ConnectorBlock { none });
-rats!(DiodeBlock { none });
-just!(NuclearGeneratorBlock, [Thorium: 0.16, Cryofluid: 2.4] => []); // thoreactor
-just!(ImpactReactorBlock, [BlastCompound: 0.42, Cryofluid: 15] => []);
-just!(Neoplasia, [Arkycite: 80, Water: 10, PhaseFabric: 0.33] => [Neoplasm: 20]);
-rats!(GeneratorBlock {
- "differential-generator": [Pyratite: 0.27, Cryofluid: 6] => []
- "turbine-condenser": [] => [Water: 5]
- "chemical-combustion-chamber": [Ozone: 2, Arkycite: 40] => []
- "pyrolysis-generator": [Slag: 20, Arkycite: 40] => [Water: 20]
- "flux-reactor": [Cyanogen: 9] => []
- "rtg-generator": [Thorium: 0.07] => []
-});
-rats!(ItemTurret { none }); // eh
-rats!(TractorBeamTurret { none });
-rats!(PointDefenseTurret { none });
-rats!(ContinousTurret { none });
-rats!(Turret { none });
-rats!(ShieldBlock { none });
-rats!(PayloadBlock { none });
-rats!(PayloadConveyor { none });
-rats!(SimplePayloadBlock { none });
-rats!(PayloadRouter { none });
-rats!(RadarBlock { none });
-rats!(UnitCargoLoader { "unit-cargo-loader": [Nitrogen: 10] => [] });
-rats!(AssemblerBlock { none });
-rats!(RepairTurret { none });
-rats!(AssemblerModule { none });
-rats!(TileableDisplay { none });
diff --git a/mindus/src/block/turrets.rs b/mindus/src/block/turrets.rs
deleted file mode 100644
index d9c83d1..0000000
--- a/mindus/src/block/turrets.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-//! idk why its not in the [`crate::block::defense`] module
-use super::simple::make_simple;
-use crate::data::{DataRead, ReadError};
-
-make_simple!(Turret => |_, buff: &mut DataRead| read_turret(buff));
-make_simple!(PointDefenseTurret => |_, buff: &mut DataRead| read_point_defense_turret(buff));
-make_simple!(ContinousTurret => |_, buff: &mut DataRead| read_continous_turret(buff));
-make_simple!(TractorBeamTurret => |_, buff: &mut DataRead| read_tractor_beam_turret(buff));
-make_simple!(ItemTurret => |_, buff: &mut DataRead| read_item_turret(buff));
-
-/// format:
-/// - call [`read_turret`]
-/// - iterate [`u8`]
-/// - item: [`u16`] as [`Item`](crate::item::Type)
-/// - amount: [`u16`]
-fn read_item_turret(buff: &mut DataRead) -> Result<(), ReadError> {
- read_turret(buff)?;
- for _ in 0..buff.read_u8()? {
- buff.skip(4)?;
- }
- Ok(())
-}
-
-/// format:
-/// - reload: f32
-/// - rotation: f32
-fn read_turret(buff: &mut DataRead) -> Result<(), ReadError> {
- buff.skip(8)
-}
-
-/// format:
-/// - rotation: [`f32`]
-fn read_point_defense_turret(buff: &mut DataRead) -> Result<(), ReadError> {
- buff.skip(4)
-}
-
-/// format:
-/// - call [`read_turret`]
-/// - last length: [`f32`]
-fn read_continous_turret(buff: &mut DataRead) -> Result<(), ReadError> {
- read_turret(buff)?;
- buff.skip(4)
-}
-
-/// format:
-/// - rotation: [`f32`]
-fn read_tractor_beam_turret(buff: &mut DataRead) -> Result<(), ReadError> {
- buff.skip(4)
-}
diff --git a/mindus/src/block/units.rs b/mindus/src/block/units.rs
deleted file mode 100644
index 6e1bb0f..0000000
--- a/mindus/src/block/units.rs
+++ /dev/null
@@ -1,341 +0,0 @@
-//! unit creation related blocks
-use thiserror::Error;
-
-use super::payload::{read_payload_block, read_payload_seq};
-use crate::block::simple::*;
-use crate::block::*;
-use crate::data::command::UnitCommand;
-use crate::data::dynamic::DynType;
-use crate::unit;
-
-// fn is_pay(b: &str) -> bool {
-// matches!(
-// b,
-// "ground-factory"
-// | "air-factory"
-// | "naval-factory"
-// | "additive-reconstructor"
-// | "multiplicative-reconstructor"
-// | "exponential-reconstructor"
-// | "tank-fabricator"
-// | "ship-fabricator"
-// | "mech-fabricator"
-// | "tank-refabricator"
-// | "ship-refabricator"
-// | "payload-conveyor"
-// | "payload-router"
-// | "reinforced-payload-conveyor"
-// | "reinforced-payload-router"
-// | "payload-mass-driver"
-// | "large-payload-mass-driver"
-// | "constructor"
-// | "large-constructor"
-// | "payload-source"
-// )
-// }
-
-make_simple!(
- AssemblerBlock,
- |_, name, _, _, rot: Rotation, s| {
- let mut base =
- load!(from name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
- let mut side = match rot {
- Rotation::Up | Rotation::Right => {
- load!(concat "side1" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
- }
- Rotation::Down | Rotation::Left => {
- load!(concat "side2" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
- }
- };
- unsafe { side.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&side) };
- let top = load!(concat "top" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
- unsafe { base.overlay(&top) };
- base
- },
- |_, buff| read_assembler(buff)
-);
-
-/// format:
-/// - call [`read_payload_block`]
-/// - progress: [`f32`]
-/// - iterate [`u8`]
-/// - read: [`i32`]
-/// - call [`read_payload_seq`]
-/// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
-fn read_assembler(buff: &mut DataRead) -> Result<(), DataReadError> {
- read_payload_block(buff)?;
- buff.skip(4)?;
- let n = buff.read_u8()? as usize;
- buff.skip(n * 4)?;
- read_payload_seq(buff)?;
- buff.skip(8)
-}
-
-make_simple!(
- AssemblerModule,
- |_, _, _, _, rot: Rotation, scl| {
- let mut base = load!("basic-assembler-module", scl);
- let mut side = load!(scl -> match rot {
- Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
- _ => "basic-assembler-module-side2",
- });
- unsafe { side.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&side) };
- base
- },
- |_, buff| read_payload_block(buff)
-);
-
-make_simple!(
- RepairTurret => |_, buff: &mut DataRead| {
- buff.skip(4) // rotation: [`f32`]
- }
-);
-
-pub const GROUND_UNITS: &[unit::Type] =
- &[unit::Type::Dagger, unit::Type::Crawler, unit::Type::Nova];
-pub const AIR_UNITS: &[unit::Type] = &[unit::Type::Flare, unit::Type::Mono];
-pub const NAVAL_UNITS: &[unit::Type] = &[unit::Type::Risso, unit::Type::Retusa];
-
-pub struct ConstructorBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
-}
-
-impl ConstructorBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
- assert!(size != 0, "invalid size");
- Self {
- size,
- symmetric,
- build_cost,
- }
- }
-
- state_impl!(pub Option<UnitCommand>);
-}
-
-impl BlockLogic for ConstructorBlock {
- impl_block!();
-
- fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- Ok(DynData::Empty)
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Empty => Ok(Some(Self::create_state(None))),
- DynData::Content(crate::content::Type::UnitCommand, n) => {
- Ok(Some(Self::create_state(Some(
- UnitCommand::try_from(n as u8)
- .map_err(|x| DeserializeError::Custom(Box::new(x)))?,
- ))))
- }
- DynData::UnitCommand(u) => Ok(Some(Self::create_state(Some(u)))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::UnitCommand,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- Ok(Self::get_state(state).map_or(DynData::Empty, DynData::UnitCommand))
- }
-
- fn draw(
- &self,
- name: &str,
- _: Option<&State>,
- _: Option<&RenderingContext>,
- rot: Rotation,
- s: Scale,
- ) -> ImageHolder<4> {
- let mut base = load!(from name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator"], s);
- let times = rot.rotated(false).count();
- let mut out = load!(s -> match name {
- "additive-reconstructor" => "factory-out-3",
- "multiplicative-reconstructor" => "factory-out-5",
- "tank-refabricator" | "mech-refabricator" | "ship-refabricator" =>
- "factory-out-3-dark",
- "exponential-reconstructor" => "factory-out-7",
- "prime-refabricator" => "factory-out-5-dark",
- "tetrative-reconstructor" => "factory-out-9",
- });
- unsafe { out.rotate(times) };
- unsafe { base.overlay(&out) };
-
- let mut r#in = load!(s -> match name {
- "additive-reconstructor" => "factory-in-3",
- "multiplicative-reconstructor" => "factory-in-5",
- "tank-refabricator" | "mech-refabricator" | "ship-refabricator" =>
- "factory-in-3-dark",
- "exponential-reconstructor" => "factory-in-7",
- "prime-refabricator" => "factory-in-5-dark",
- "tetrative-reconstructor" => "factory-in-9",
- });
- unsafe { r#in.rotate(times) };
- unsafe { base.overlay(&r#in) };
-
- // TODO: the context cross is too small
- // for i in 0..4u8 {
- // if let Some((b, rot)) = dbg!(ctx.cross[i as usize]) {
- // if rot.mirrored(true, true) != ctx.rotation && match rot {
- // Rotation::Up => i == 3,
- // Rotation::Right => i == 4,
- // Rotation::Down => i == 0,
- // Rotation::Left => i == 2,
- // } && is_pay(b.name())
- // {
- // let r = unsafe { std::mem::transmute::<u8, Rotation>(i) }
- // .mirrored(true, true)
- // .rotated(false);
- // let mut input = input.clone();
- // input.rotate(r.count());
- // base.overlay(&input);
- // }
- // }
- // }
- let top = load!(concat "top" => name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator"], s);
- unsafe { base.overlay(&top) };
- base
- }
-
- /// format:
- /// - call [`read_payload_block`]
- /// - progress: [`f32`]
- /// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
- /// - command: [`DynData::UnitCommand`]
- fn read(&self, _: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- read_payload_block(buff)?;
- buff.skip(12)?;
- // self.deserialize_state(DynData::deserialize(buff).unwrap())
- // .unwrap();
- Ok(())
- }
-}
-
-pub struct UnitFactory {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
- valid: &'static [unit::Type],
-}
-
-impl UnitFactory {
- #[must_use]
- pub const fn new(
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
- valid: &'static [unit::Type],
- ) -> Self {
- assert!(size != 0, "invalid size");
- assert!(!valid.is_empty(), "no valid units");
- assert!(valid.len() <= i32::MAX as usize, "too many valid units");
- Self {
- size,
- symmetric,
- build_cost,
- valid,
- }
- }
-
- state_impl!(pub Option<unit::Type>);
-}
-
-impl BlockLogic for UnitFactory {
- impl_block!();
-
- fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- Ok(DynData::Int(-1))
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Empty => Ok(Some(Self::create_state(None))),
- DynData::Int(idx) => {
- if idx == -1 {
- Ok(Some(Self::create_state(None)))
- } else if idx >= 0 && idx < self.valid.len() as i32 {
- Ok(Some(Self::create_state(Some(self.valid[idx as usize]))))
- } else {
- Err(DeserializeError::Custom(Box::new(
- AssemblerDeserializeError {
- idx,
- count: self.valid.len() as i32,
- },
- )))
- }
- }
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Int,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- if let Some(state) = Self::get_state(state) {
- for (i, curr) in self.valid.iter().enumerate() {
- if curr == state {
- return Ok(DynData::Int(i as i32));
- }
- }
- Err(SerializeError::Custom(Box::new(AssemblerSerializeError(
- *state,
- ))))
- } else {
- Ok(DynData::Int(-1))
- }
- }
-
- fn draw(
- &self,
- name: &str,
- _: Option<&State>,
- _: Option<&RenderingContext>,
- rot: Rotation,
- s: Scale,
- ) -> ImageHolder<4> {
- let mut base = load!(from name which is ["ground-factory" | "air-factory" | "naval-factory" | "tank-fabricator" | "ship-fabricator" | "mech-fabricator"], s);
- let mut out = load!(s -> match name {
- "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
- _ => "factory-out-3-dark",
- });
- unsafe { out.rotate(rot.rotated(false).count()) };
- unsafe { base.overlay(&out) };
- let top = load!(s -> match name {
- "ground-factory" | "air-factory" | "naval-factory" => "factory-top-3",
- "tank-fabricator" => "tank-fabricator-top",
- "ship-fabricator" => "ship-fabricator-top",
- "mech-fabricator" => "mech-fabricator-top",
- });
- unsafe { base.overlay(&top) };
- base
- }
-
- /// format:
- /// - call [`read_payload_block`]
- /// - progress: [`f32`]
- /// - plan: [`u16`]
- /// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
- fn read(&self, _: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- read_payload_block(buff)?;
- buff.skip(14)
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-#[error("invalid unit index ({idx}, valid: {count})")]
-pub struct AssemblerDeserializeError {
- pub idx: i32,
- pub count: i32,
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-#[error("invalid unit {0:?}")]
-pub struct AssemblerSerializeError(unit::Type);
diff --git a/mindus/src/block/walls.rs b/mindus/src/block/walls.rs
deleted file mode 100644
index 018d7d8..0000000
--- a/mindus/src/block/walls.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-//! walls
-use crate::block::simple::*;
-use crate::block::*;
-use crate::data::dynamic::DynType;
-use crate::data::renderer::load;
-
-make_simple!(WallBlock, |_, _, _, _, _, s| {
- let mut base = load!("thruster", s);
- unsafe { base.overlay(&load!("thruster-top", s)) };
- base
-});
-
-pub struct DoorBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
-}
-
-impl DoorBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
- assert!(size != 0, "invalid size");
- Self {
- size,
- symmetric,
- build_cost,
- }
- }
-
- state_impl!(pub bool);
-}
-
-impl BlockLogic for DoorBlock {
- impl_block!();
-
- fn draw(
- &self,
- name: &str,
- state: Option<&State>,
- _: Option<&RenderingContext>,
- _: Rotation,
- s: Scale,
- ) -> ImageHolder<4> {
- if let Some(state) = state {
- if *Self::get_state(state) {
- return load!(s -> match name {
- "door" => "door-open",
- "blast-door" => "blast-door-open",
- _ => "door-large-open",
- });
- };
- }
- load!(from name which is ["door" | "blast-door" | "door-large"], s)
- }
-
- fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- Ok(DynData::Boolean(false))
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Boolean(opened) => Ok(Some(Self::create_state(opened))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Boolean,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- let state = Self::get_state(state);
- Ok(DynData::Boolean(*state))
- }
-
- fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
- build.state = Some(Self::create_state(buff.read_bool()?));
- Ok(())
- }
-}
diff --git a/mindus/src/block/x.rs b/mindus/src/block/x.rs
deleted file mode 100644
index 9906470..0000000
--- a/mindus/src/block/x.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"),
- load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-17"), load!("tile-logic-display-41"), load!("tile-logic-display-17"), load!("tile-logic-display-43"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-26"), load!("tile-logic-display-21"), load!("tile-logic-display-26"), load!("tile-logic-display-25"),
- load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"),
- load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-17"), load!("tile-logic-display-41"), load!("tile-logic-display-17"), load!("tile-logic-display-43"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-26"), load!("tile-logic-display-21"), load!("tile-logic-display-26"), load!("tile-logic-display-25"),
- load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-15"), load!("tile-logic-display-40"), load!("tile-logic-display-15"), load!("tile-logic-display-20"), load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-15"), load!("tile-logic-display-40"), load!("tile-logic-display-15"), load!("tile-logic-display-20"),
- load!("tile-logic-display-5"), load!("tile-logic-display-28"), load!("tile-logic-display-5"), load!("tile-logic-display-28"), load!("tile-logic-display-29"), load!("tile-logic-display-10"), load!("tile-logic-display-29"), load!("tile-logic-display-23"), load!("tile-logic-display-5"), load!("tile-logic-display-28"), load!("tile-logic-display-5"), load!("tile-logic-display-28"), load!("tile-logic-display-31"), load!("tile-logic-display-11"), load!("tile-logic-display-31"), load!("tile-logic-display-32"),
- load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-15"), load!("tile-logic-display-40"), load!("tile-logic-display-15"), load!("tile-logic-display-20"), load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-3"), load!("tile-logic-display-4"), load!("tile-logic-display-15"), load!("tile-logic-display-40"), load!("tile-logic-display-15"), load!("tile-logic-display-20"),
- load!("tile-logic-display-2"), load!("tile-logic-display-30"), load!("tile-logic-display-2"), load!("tile-logic-display-30"), load!("tile-logic-display-9"), load!("tile-logic-display-46"), load!("tile-logic-display-9"), load!("tile-logic-display-22"), load!("tile-logic-display-2"), load!("tile-logic-display-30"), load!("tile-logic-display-2"), load!("tile-logic-display-30"), load!("tile-logic-display-14"), load!("tile-logic-display-44"), load!("tile-logic-display-14"), load!("tile-logic-display-6"),
- load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"),
- load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-17"), load!("tile-logic-display-41"), load!("tile-logic-display-17"), load!("tile-logic-display-43"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-26"), load!("tile-logic-display-21"), load!("tile-logic-display-26"), load!("tile-logic-display-25"),
- load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-39"), load!("tile-logic-display-36"), load!("tile-logic-display-27"), load!("tile-logic-display-16"), load!("tile-logic-display-27"), load!("tile-logic-display-24"),
- load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-17"), load!("tile-logic-display-41"), load!("tile-logic-display-17"), load!("tile-logic-display-43"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-38"), load!("tile-logic-display-37"), load!("tile-logic-display-26"), load!("tile-logic-display-21"), load!("tile-logic-display-26"), load!("tile-logic-display-25"),
- load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-15"), load!("tile-logic-display-42"), load!("tile-logic-display-15"), load!("tile-logic-display-12"), load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-15"), load!("tile-logic-display-42"), load!("tile-logic-display-15"), load!("tile-logic-display-12"),
- load!("tile-logic-display-5"), load!("tile-logic-display-8"), load!("tile-logic-display-5"), load!("tile-logic-display-8"), load!("tile-logic-display-29"), load!("tile-logic-display-35"), load!("tile-logic-display-29"), load!("tile-logic-display-33"), load!("tile-logic-display-5"), load!("tile-logic-display-8"), load!("tile-logic-display-5"), load!("tile-logic-display-8"), load!("tile-logic-display-31"), load!("tile-logic-display-34"), load!("tile-logic-display-31"), load!("tile-logic-display-7"),
- load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-15"), load!("tile-logic-display-42"), load!("tile-logic-display-15"), load!("tile-logic-display-12"), load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-3"), load!("tile-logic-display-0"), load!("tile-logic-display-15"), load!("tile-logic-display-42"), load!("tile-logic-display-15"), load!("tile-logic-display-12"),
- load!("tile-logic-display-2"), load!("tile-logic-display-1"), load!("tile-logic-display-2"), load!("tile-logic-display-1"), load!("tile-logic-display-9"), load!("tile-logic-display-45"), load!("tile-logic-display-9"), load!("tile-logic-display-19"), load!("tile-logic-display-2"), load!("tile-logic-display-1"), load!("tile-logic-display-2"), load!("tile-logic-display-1"), load!("tile-logic-display-14"), load!("tile-logic-display-18"), load!("tile-logic-display-14"), load!("tile-logic-display-13"),
-] \ No newline at end of file
diff --git a/mindus/src/color_mapped b/mindus/src/color_mapped
deleted file mode 100644
index 2e7b740..0000000
--- a/mindus/src/color_mapped
+++ /dev/null
@@ -1,390 +0,0 @@
-{ let mut l = [[0; 3]; u16::MAX as usize + 1];
-l[1] = [169,53,39];
-l[2] = [127,127,127];
-l[19] = [61,73,128];
-l[20] = [71,84,143];
-l[21] = [74,57,114];
-l[22] = [53,41,83];
-l[23] = [57,50,74];
-l[24] = [116,104,122];
-l[25] = [53,55,81];
-l[26] = [22,24,23];
-l[27] = [84,157,181];
-l[28] = [196,99,50];
-l[29] = [5,0,18];
-l[31] = [66,66,71];
-l[32] = [67,67,71];
-l[33] = [60,60,66];
-l[34] = [49,47,47];
-l[35] = [67,56,49];
-l[36] = [104,74,53];
-l[37] = [167,137,111];
-l[38] = [48,46,46];
-l[39] = [79,49,42];
-l[40] = [41,24,21];
-l[41] = [120,121,134];
-l[42] = [91,57,46];
-l[43] = [89,55,44];
-l[44] = [81,50,43];
-l[45] = [114,75,54];
-l[46] = [116,77,54];
-l[47] = [34,38,43];
-l[48] = [56,50,49];
-l[49] = [60,53,51];
-l[50] = [41,48,43];
-l[51] = [45,39,47];
-l[52] = [58,47,67];
-l[53] = [129,93,56];
-l[54] = [139,61,65];
-l[55] = [146,71,68];
-l[56] = [193,174,168];
-l[57] = [85,112,59];
-l[58] = [56,73,50];
-l[59] = [66,35,30];
-l[60] = [23,25,31];
-l[61] = [40,54,41];
-l[62] = [92,56,38];
-l[63] = [108,46,55];
-l[64] = [31,28,34];
-l[65] = [69,43,42];
-l[66] = [45,39,64];
-l[67] = [84,132,73];
-l[68] = [188,189,191];
-l[69] = [179,183,187];
-l[70] = [162,162,194];
-l[71] = [156,158,187];
-l[72] = [74,70,101];
-l[73] = [86,54,92];
-l[74] = [107,91,75];
-l[75] = [86,56,104];
-l[76] = [122,122,127];
-l[77] = [139,86,149];
-l[78] = [112,70,64];
-l[79] = [160,161,184];
-l[80] = [211,209,255];
-l[81] = [239,247,255];
-l[82] = [90,89,89];
-l[83] = [202,154,90];
-l[84] = [164,111,72];
-l[85] = [117,69,57];
-l[86] = [68,76,81];
-l[87] = [109,99,92];
-l[88] = [78,93,80];
-l[89] = [103,132,86];
-l[90] = [106,90,105];
-l[91] = [251,220,227];
-l[92] = [187,83,89];
-l[93] = [227,129,102];
-l[94] = [255,223,188];
-l[95] = [244,248,255];
-l[96] = [112,187,103];
-l[97] = [114,116,160];
-l[98] = [146,78,148];
-l[99] = [238,247,255];
-l[100] = [90,159,92];
-l[101] = [225,234,252];
-l[102] = [214,219,249];
-l[103] = [196,178,250];
-l[104] = [221,111,78];
-l[105] = [92,88,164];
-l[106] = [230,130,72];
-l[107] = [124,124,129];
-l[108] = [239,247,255];
-l[109] = [119,122,169];
-l[110] = [255,221,185];
-l[111] = [169,170,190];
-l[112] = [91,90,90];
-l[113] = [71,79,84];
-l[114] = [113,102,95];
-l[115] = [81,97,83];
-l[116] = [160,108,69];
-l[117] = [101,129,85];
-l[118] = [132,109,130];
-l[119] = [185,126,179];
-l[120] = [207,161,90];
-l[121] = [124,156,98];
-l[122] = [103,86,102];
-l[123] = [254,220,225];
-l[124] = [150,100,75];
-l[125] = [188,85,89];
-l[126] = [85,87,96];
-l[127] = [83,84,94];
-l[128] = [80,81,90];
-l[129] = [90,91,101];
-l[130] = [93,95,106];
-l[131] = [108,88,76];
-l[132] = [60,62,71];
-l[133] = [65,62,69];
-l[134] = [59,60,69];
-l[135] = [67,69,79];
-l[136] = [70,67,75];
-l[137] = [78,69,76];
-l[138] = [126,128,143];
-l[139] = [72,71,75];
-l[140] = [82,52,89];
-l[141] = [217,157,115];
-l[142] = [140,127,169];
-l[143] = [119,119,119];
-l[144] = [39,39,39];
-l[145] = [141,161,227];
-l[146] = [249,163,199];
-l[147] = [58,143,100];
-l[148] = [118,138,154];
-l[149] = [249,163,199];
-l[150] = [249,163,199];
-l[151] = [58,143,100];
-l[152] = [80,90,107];
-l[153] = [118,138,154];
-l[154] = [147,151,161];
-l[155] = [142,146,155];
-l[156] = [137,140,148];
-l[157] = [138,141,149];
-l[158] = [163,154,156];
-l[159] = [174,182,170];
-l[160] = [198,176,157];
-l[161] = [180,166,152];
-l[162] = [155,161,186];
-l[163] = [186,173,168];
-l[164] = [186,167,167];
-l[165] = [187,153,149];
-l[166] = [176,156,159];
-l[167] = [180,154,155];
-l[168] = [159,159,184];
-l[169] = [130,133,145];
-l[170] = [177,186,167];
-l[171] = [141,112,110];
-l[172] = [115,110,115];
-l[173] = [115,132,126];
-l[174] = [129,137,163];
-l[175] = [113,134,126];
-l[176] = [136,127,135];
-l[177] = [148,124,126];
-l[178] = [148,137,136];
-l[179] = [136,127,135];
-l[180] = [133,126,136];
-l[181] = [160,132,131];
-l[182] = [160,127,124];
-l[183] = [150,124,124];
-l[184] = [143,133,128];
-l[185] = [133,140,166];
-l[186] = [159,140,128];
-l[187] = [136,123,130];
-l[188] = [198,155,129];
-l[189] = [199,155,129];
-l[190] = [127,143,237];
-l[191] = [126,143,236];
-l[192] = [226,241,151];
-l[193] = [219,235,144];
-l[194] = [142,129,181];
-l[195] = [142,129,181];
-l[196] = [255,225,182];
-l[197] = [255,219,175];
-l[198] = [253,221,126];
-l[199] = [253,220,126];
-l[200] = [159,170,186];
-l[201] = [156,164,182];
-l[202] = [165,175,195];
-l[203] = [169,180,200];
-l[204] = [167,178,197];
-l[205] = [167,179,198];
-l[206] = [159,168,188];
-l[207] = [102,167,122];
-l[208] = [94,154,114];
-l[209] = [130,132,145];
-l[210] = [125,127,140];
-l[211] = [121,131,137];
-l[212] = [255,232,133];
-l[213] = [255,226,131];
-l[214] = [164,138,181];
-l[215] = [156,132,176];
-l[216] = [255,219,176];
-l[217] = [149,182,169];
-l[218] = [150,182,169];
-l[219] = [183,161,161];
-l[220] = [186,159,158];
-l[221] = [176,169,168];
-l[222] = [89,91,101];
-l[223] = [145,132,124];
-l[224] = [130,118,116];
-l[225] = [128,135,157];
-l[226] = [148,129,133];
-l[227] = [147,136,135];
-l[228] = [146,136,135];
-l[229] = [111,113,124];
-l[230] = [103,110,146];
-l[231] = [116,122,105];
-l[232] = [104,100,131];
-l[233] = [129,131,145];
-l[234] = [124,125,138];
-l[235] = [188,171,162];
-l[236] = [110,112,124];
-l[237] = [119,115,122];
-l[238] = [120,122,136];
-l[239] = [125,127,140];
-l[240] = [112,114,126];
-l[241] = [121,117,125];
-l[242] = [159,157,161];
-l[243] = [117,118,129];
-l[244] = [134,142,159];
-l[245] = [129,131,142];
-l[246] = [125,127,140];
-l[247] = [133,132,140];
-l[248] = [115,116,129];
-l[249] = [140,142,153];
-l[250] = [140,119,108];
-l[251] = [186,162,149];
-l[252] = [162,141,130];
-l[253] = [151,139,135];
-l[254] = [164,157,161];
-l[255] = [148,156,198];
-l[256] = [143,153,207];
-l[257] = [152,157,165];
-l[258] = [139,151,193];
-l[259] = [138,133,167];
-l[260] = [150,154,167];
-l[261] = [153,160,195];
-l[262] = [150,158,195];
-l[263] = [173,180,190];
-l[264] = [165,170,181];
-l[265] = [147,156,197];
-l[266] = [125,135,130];
-l[267] = [133,171,133];
-l[268] = [141,164,145];
-l[269] = [114,141,121];
-l[270] = [115,133,123];
-l[271] = [113,135,126];
-l[272] = [116,130,128];
-l[273] = [196,187,160];
-l[274] = [200,191,161];
-l[275] = [209,185,151];
-l[276] = [161,159,158];
-l[277] = [200,183,159];
-l[278] = [197,178,157];
-l[279] = [189,168,148];
-l[280] = [189,159,158];
-l[281] = [183,174,164];
-l[282] = [193,179,159];
-l[283] = [133,126,161];
-l[284] = [140,146,161];
-l[285] = [128,131,150];
-l[286] = [130,126,154];
-l[287] = [177,151,153];
-l[288] = [118,144,126];
-l[289] = [116,134,131];
-l[290] = [115,141,128];
-l[291] = [144,125,129];
-l[292] = [117,135,130];
-l[293] = [115,135,127];
-l[294] = [142,133,129];
-l[295] = [148,127,131];
-l[296] = [159,142,136];
-l[297] = [150,155,166];
-l[298] = [153,152,178];
-l[299] = [170,152,156];
-l[300] = [145,152,178];
-l[301] = [146,147,166];
-l[302] = [163,170,162];
-l[303] = [110,132,122];
-l[304] = [148,133,132];
-l[305] = [173,142,133];
-l[306] = [159,135,130];
-l[307] = [147,127,130];
-l[308] = [128,134,157];
-l[309] = [199,182,167];
-l[310] = [205,181,160];
-l[311] = [209,181,157];
-l[312] = [165,146,135];
-l[313] = [179,152,134];
-l[314] = [174,150,134];
-l[315] = [184,175,172];
-l[316] = [187,177,172];
-l[317] = [170,163,164];
-l[318] = [159,143,135];
-l[319] = [154,141,139];
-l[320] = [144,130,130];
-l[321] = [127,129,138];
-l[322] = [148,140,144];
-l[323] = [150,140,142];
-l[324] = [154,148,157];
-l[325] = [150,159,192];
-l[326] = [149,153,173];
-l[327] = [167,172,188];
-l[328] = [149,120,118];
-l[329] = [146,147,173];
-l[330] = [172,169,177];
-l[331] = [131,136,156];
-l[332] = [124,130,155];
-l[333] = [139,129,133];
-l[334] = [145,142,138];
-l[335] = [137,134,130];
-l[336] = [141,130,132];
-l[337] = [135,125,127];
-l[338] = [101,114,115];
-l[339] = [119,108,114];
-l[340] = [118,109,128];
-l[341] = [119,110,116];
-l[342] = [116,119,132];
-l[343] = [121,118,118];
-l[344] = [114,117,130];
-l[345] = [127,112,116];
-l[346] = [130,119,118];
-l[347] = [128,115,136];
-l[348] = [145,137,144];
-l[349] = [130,147,147];
-l[350] = [129,135,159];
-l[351] = [137,136,142];
-l[352] = [136,136,144];
-l[353] = [137,136,143];
-l[354] = [138,134,138];
-l[355] = [125,141,141];
-l[356] = [134,154,150];
-l[357] = [118,105,110];
-l[358] = [106,104,125];
-l[359] = [107,111,128];
-l[360] = [114,102,105];
-l[361] = [104,108,124];
-l[362] = [103,100,120];
-l[363] = [116,109,110];
-l[364] = [129,117,123];
-l[365] = [118,115,137];
-l[366] = [119,123,140];
-l[367] = [124,111,106];
-l[368] = [114,137,129];
-l[369] = [109,112,122];
-l[370] = [118,121,133];
-l[371] = [77,79,87];
-l[372] = [90,91,99];
-l[373] = [122,113,115];
-l[374] = [130,121,122];
-l[375] = [123,111,116];
-l[376] = [129,108,109];
-l[377] = [117,109,111];
-l[378] = [116,108,111];
-l[379] = [88,86,103];
-l[380] = [98,92,93];
-l[381] = [196,178,160];
-l[382] = [174,155,137];
-l[383] = [144,126,113];
-l[384] = [145,125,114];
-l[385] = [181,165,151];
-l[386] = [187,169,156];
-l[387] = [140,130,127];
-l[388] = [143,128,131];
-l[389] = [146,135,136];
-l[390] = [173,178,189];
-l[396] = [181,166,159];
-l[397] = [176,169,169];
-l[398] = [132,131,150];
-l[399] = [123,121,144];
-l[400] = [160,150,197];
-l[401] = [160,154,192];
-l[402] = [160,150,196];
-l[403] = [132,125,157];
-l[404] = [132,122,158];
-l[405] = [113,113,134];
-l[406] = [104,104,123];
-l[407] = [92,82,85];
-l[408] = [131,124,134];
-l[409] = [201,174,156];
-l[410] = [148,137,130];
-l[411] = [138,137,138]; l } \ No newline at end of file
diff --git a/mindus/src/color_mapping.rs b/mindus/src/color_mapping.rs
deleted file mode 100644
index c4a1a85..0000000
--- a/mindus/src/color_mapping.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-/// Map a 0xRRGGBB color to a block.
-// pub static COLOR2BLOCK: phf::Map<u32, &Block> = include!(concat!(env!("OUT_DIR"), "/4.rs"));
-pub static BLOCK2COLOR: [[u8; 3]; u16::MAX as usize + 1] = include!("color_mapped");
diff --git a/mindus/src/colors b/mindus/src/colors
deleted file mode 100644
index 68e89f3..0000000
--- a/mindus/src/colors
+++ /dev/null
Binary files differ
diff --git a/mindus/src/content.rs b/mindus/src/content.rs
deleted file mode 100644
index 0f15a87..0000000
--- a/mindus/src/content.rs
+++ /dev/null
@@ -1,210 +0,0 @@
-//! contains types of types
-use std::error::Error;
-
-macro_rules! numeric_enum {
- ($vis:vis enum $tname:ident for $numeric:ty | $error:ident {$($name:ident $(= $val:literal)?),* $(,)?}) =>
- {
- crate::content::numeric_enum!($vis enum $tname for $numeric | $error* {$($name $(= $val)?),*});
-
- impl std::fmt::Display for $error {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "no variant of {} for value {}", stringify!($tname), self.0)
- }
- }
-
- impl std::error::Error for $error {}
- };
- ($vis:vis enum $tname:ident for $numeric:ty | $error:ident* {$($name:ident $(= $val:literal)?),* $(,)?}) =>
- {
- #[repr($numeric)]
- #[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Hash)]
- $vis enum $tname { $($name $(= $val)?,)+ }
-
- #[derive(Copy, Clone, Debug, Eq, PartialEq)]
- $vis struct $error($vis $numeric);
-
- impl TryFrom<$numeric> for $tname {
- type Error = $error;
-
- #[allow(non_upper_case_globals)]
- fn try_from(value: $numeric) -> Result<Self, $error> {
- $(const $name: $numeric = $tname::$name as $numeric;)+
- match value {
- $($name => Ok(Self::$name),)+
- _ => Err($error(value)),
- }
- }
- }
-
- impl From<$tname> for $numeric { fn from(value: $tname) -> $numeric { value as $numeric } }
- };
-}
-
-pub(crate) use numeric_enum;
-
-macro_rules! count_exprs {
- ($($e:expr)*) => {
- $($crate::content::one!($e) +)* 0
- }
-}
-
-macro_rules! one {
- ($e:expr) => {
- 1
- };
-}
-pub(crate) use count_exprs;
-pub(crate) use one;
-
-macro_rules! content_enum {
- ($vis:vis enum $tname:ident / $ctype:ident for u16 | $error:ident {$($val:literal),* $(,)?}) =>
- {
- paste::paste! {
- $crate::content::numeric_enum!($vis enum $tname for u16 | $error* {
- $([<$val:camel>]),*,
- });
-
- impl $tname {
- pub const ALL: [Self; $crate::content::count_exprs!($($val)+)] = [$(Self::[<$val:camel>]),+];
-
- pub (crate) fn by_name(name:&str)-> Option<Self> {
- static MAPPER: std::sync::LazyLock<std::collections::HashMap<&str, $tname>> = std::sync::LazyLock::new(
- || std::collections::HashMap::from_iter(
- [
- $(($val, $tname::[<$val:camel>]),)+
- ]
- )
- );
- MAPPER.get(name).copied()
- }
- }
- impl const $crate::content::Content for $tname {
- fn get_type(&self) -> $crate::content::Type {
- $crate::content::Type::$ctype
- }
-
- fn get_id(&self) -> u16 {
- *self as u16
- }
-
- fn get_name(&self) -> &'static str {
- const NAME: [&str; {$tname::ALL.len()}] = [$($val,)*];
- NAME[*self as usize]
- // match self {
- // $(Self::[<$val:camel>] => $val,)*
- // }
- }
- }
-
- impl std::fmt::Display for $error {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "no content of type {} for value {}", stringify!($ctype), self.0)
- }
- }
-
- impl std::fmt::Display for $tname {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match self {
- $(Self::[<$val:camel>] => f.write_str(strconv::kebab2title!($val)),)*
- }
- }
- }
-
- impl std::error::Error for $error {}
- }
- };
-}
-pub(crate) use content_enum;
-
-macro_rules! color_content_enum {
- ($vis:vis enum $tname:ident / $ctype:ident for u16 | $error:ident {$($val:literal: $col:literal),* $(,)?}) =>
- {
- paste::paste! {
- $crate::content::content_enum!($vis enum $tname / $ctype for u16 | $error {
- $($val),*,
- });
-
- impl Type {
- #[must_use]
- pub const fn color(&self) -> (u8, u8, u8) {
- match &self {
- $(Self::[<$val:camel>] => {
- let v = color_hex::color_from_hex!($col);
- (v[0], v[1], v[2])
- },)*
- }
- }
- }
- }}
-}
-pub(crate) use color_content_enum;
-
-numeric_enum! {
- pub enum Type for u8 | TryFromU8Error
- {
- Item = 0,
- Block = 1,
- // Mech = 2,
- Bullet = 3,
- Fluid = 4,
- Modifier = 5,
- Unit = 6,
- Weather = 7,
- // Effect = 8,
- Sector = 9,
- // Loadout = 10,
- // TypeId = 11,
- // Error = 12,
- Planet = 13,
- // Ammo = 14,
- Team = 15,
- UnitCommand = 16,
- UnitStance = 17,
- }
-}
-
-macro_rules! gen_by_id {
- ($target:path, $id:expr) => {
- match <$target>::try_from($id) {
- Ok(v) => Ok(Box::new(v)),
- Err(e) => Err(Box::new(e)),
- }
- };
-}
-
-impl Type {
- pub fn get(self, id: u16) -> Result<Box<dyn Content>, Box<dyn Error>> {
- match self {
- Self::Item => gen_by_id!(crate::item::Type, id),
- Self::Block => gen_by_id!(crate::block::content::Type, id),
- Self::Fluid => gen_by_id!(crate::fluid::Type, id),
- Self::Modifier => gen_by_id!(crate::modifier::Type, id),
- Self::Unit => gen_by_id!(crate::unit::Type, id),
- Self::Team => gen_by_id!(crate::team::Team, id),
- _ => Ok(Box::new(Generic(self, id))),
- }
- }
-}
-pub const trait Content {
- fn get_type(&self) -> Type;
-
- fn get_id(&self) -> u16;
-
- fn get_name(&self) -> &'static str;
-}
-
-struct Generic(Type, u16);
-
-impl Content for Generic {
- fn get_type(&self) -> Type {
- self.0
- }
-
- fn get_id(&self) -> u16 {
- self.1
- }
-
- fn get_name(&self) -> &'static str {
- "<unknown>"
- }
-}
diff --git a/mindus/src/data/command.rs b/mindus/src/data/command.rs
deleted file mode 100644
index f4d679d..0000000
--- a/mindus/src/data/command.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-use crate::content::numeric_enum;
-
-numeric_enum! {
- pub enum UnitCommand for u8 | TryFromU8Error {
- Move, Repair, Rebuild, Assist, Mine, Boost, EnterPayload, LoadUnits, LoadBlocks, UnloadPayload, LoopPayload
- }
-}
diff --git a/mindus/src/data/entity_mapping.rs b/mindus/src/data/entity_mapping.rs
deleted file mode 100644
index beed2b4..0000000
--- a/mindus/src/data/entity_mapping.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-#[derive(Debug, Copy, Clone, PartialEq, Eq)]
-pub enum UnitClass {
- Block,
- // same read impl as block
- Legs,
- Elevated,
- Crawl,
- Boat,
- Tank,
- Air,
- // different read impl from block
- Mech,
- Tethered,
- Payload,
- Bomb,
-}
-
-pub static ID: [Option<UnitClass>; 47] = amap::amap! {
- 2 => UnitClass::Block,
- 24 => UnitClass::Legs,
- 45 => UnitClass::Elevated,
- 46 => UnitClass::Crawl,
- 36 => UnitClass::Tethered,
- 5 | 23 | 26 => UnitClass::Payload,
- 39 => UnitClass::Bomb,
- 20 => UnitClass::Boat,
- 43 => UnitClass::Tank,
- 4 | 17 | 19 | 32 => UnitClass::Mech,
- 21 | 29 | 33 => UnitClass::Legs,
- 3 | 16 | 18 | 0 | 30 | 31 => UnitClass::Air,
-};
diff --git a/mindus/src/data/map.rs b/mindus/src/data/map.rs
deleted file mode 100644
index 7d90133..0000000
--- a/mindus/src/data/map.rs
+++ /dev/null
@@ -1,1021 +0,0 @@
-//! the map module
-//! ### format
-//! note: utf = `len<u16>` + `utf8(read(len))`
-//!
-//! note: each section has a `u32` denoting its length
-//!
-//! key: `: T` and `x<T>` both mean read T, `iterate T` means iterate `read_T()` times
-//!
-//! ZLIB compressed stream contains:
-//! - header: 4b = `MSCH` [`MapReader::header`]
-//! - version: `u32` (should be 7+) [`MapReader::version`]
-//! - tag section `<u32>` [`MapReader::tags`]
-//! - 1 byte of idk (skip)
-//! - string map (`u16` for map len, iterate each, read `utf`)
-//! - content header section `<u32>`: [`MapReader::content`] (note: if map v8, will use [`BlockEnum`] and skip reading this)
-//! - iterate `i8` (should = `10`)'
-//! - the type: `i8` (0: item, block: 1, liquid: 4, status: 5, unit: 6, weather: 7, sector: 9, planet: 13
-//! - item count: `u16` (item: 22, block: 422, liquid: 11, status: 21, unit: 66, weather: 6, sector: 35, planet: 7)
-//! - these types all have their own modules: [`item`], [`content`], [`fluid`], [`modifier`], [`mod@unit`], [`weather`], [`sector`], [`planet`]
-//! - iterate `u16`
-//! - name: `utf`
-//! - map section `<u32>` [`MapReader::map`]
-//! - width: `u16`, height: `u16`
-//! - floor and tiles:
-//! - for `i` in `w * h`
-//! - `x = i % w`, `y = i / w`
-//! - floor id: `u16`
-//! - overlay id: `u16`
-//! - consecutives: `u8`
-//! - iterate `(i + 1)..(i + 1 + consecutives)`
-//! - `x = j % w`, `y = j / w`
-//! - i += consecutives
-//! - blocks
-//! - for `i` in `w * h`
-//! - block id: `u16`
-//! - packed?: `i8`
-//! - entity = `(packed & 1) not 0`
-//! - data = `(packed & 2) not 0`
-//! - newdata = `(packed & 3) not 0`
-//! - if entity: central: `bool`
-//! - if entity:
-//! - if central:
-//! - chunk len: `u16`
-//! - if block == building:
-//! - revision: `i8`
-//! - [`Build::read`]
-//! - else skip `chunk len`
-//! - or data
-//! - data: `i8`
-//! - or new data
-//! - data: `i8`
-//! - floor: `i8`
-//! - overlay: `i8`
-//! - extra: `i32`
-//! - else
-//! - consecutives: `u8`
-//! - iterate `(i + 1)..(i + 1 + consecutives)`
-//! - same block
-//! - i += consecutives
-//! - entities section `<u32>` [`MapReader::entities`]
-//! - entity mapping
-//! - iterate `u16`
-//! - id: `i16`, name: `utf`
-//! - team build plans
-//! - for t in `teams<u32>`
-//! - team = `team#<u32>`
-//! - iterate `plans<u32>`
-//! - x: `u16`, y: `u16`, rot: `u16`, id: `u16`
-//! - o: `DynData` (refer to [`DynSerializer`])
-//! - world entities
-//! - iterate `u32`
-//! - len: `u16`
-//! - type: `u8`
-//! - if !mapping\[type\]
-//! - skip(len - 1)
-//! - continue
-//! - id: `u32`
-//! - entity read
-//! - markers section (v8)
-use fimg::DynImage;
-use std::collections::HashMap;
-use std::ops::CoroutineState::*;
-use std::ops::{Coroutine, Index, IndexMut};
-use std::pin::Pin;
-use std::sync::atomic::{AtomicU64, Ordering};
-use thiserror::Error;
-
-use crate::block::content::Type as BlockEnum;
-use crate::block::{Block, Rotation, State};
-use crate::data::DataRead;
-use crate::data::dynamic::DynData;
-use crate::data::renderer::*;
-use crate::fluid::Type as Fluid;
-use crate::item::{Type as Item, storage::Storage};
-use crate::team::Team;
-use crate::unit::Unit;
-#[cfg(doc)]
-use crate::{block::content, data::*, fluid, item, modifier, unit};
-
-use super::{Serializable, entity_mapping};
-use crate::content::Content;
-
-/// a tile in a map
-#[derive(Clone)]
-pub struct Tile {
- pub floor: BlockEnum,
- pub ore: BlockEnum,
- build: Option<Build>,
- pub nd: [u8; 7],
-}
-
-pub fn table(x: BlockEnum, scale: Scale) -> DynImage<&'static [u8]> {
- FLOOR_TABLE[x as usize][mcg() as usize][scale as usize]
-}
-
-pub fn mcg() -> u64 {
- static STATE: AtomicU64 = AtomicU64::new(25);
- let s = STATE.load(Ordering::Relaxed);
- // a * s % m
- let s = (s.wrapping_mul(0xecc5)) % (1 << 32);
- STATE.store(s, Ordering::Relaxed);
- (s >> 13) & (0b111)
-}
-
-static FLOOR_TABLE: [[[DynImage<&'static [u8]>; 3]; 8]; BlockEnum::ALL.len()] = {
- let mut table = [[car::map!(load!("empty"), DynImage::from); 8]; BlockEnum::ALL.len()];
- macro_rules! image {
- (| $($x:literal $(|)?)+) => { paste::paste! {
- $(table[BlockEnum::[<$x:camel>] as usize] = load!(8x $x));+
- } };
- (| single $($x:literal $(|)?)+) => { paste::paste! {
- $(table[BlockEnum::[<$x:camel>] as usize] =
- car::map!([load!($x); 8], |x| car::map!(x, DynImage::from)));+
- } }
- }
-
- image! [
- | single "colored-floor" | "colored-wall" | "metal-tiles-1" | "metal-tiles-2" | "metal-tiles-3" | "metal-tiles-4" | "metal-tiles-5" | "metal-tiles-6" | "metal-tiles-7" | "metal-tiles-8" | "metal-tiles-9" | "metal-tiles-10" | "metal-tiles-11" | "metal-tiles-12"
- | "metal-floor" | "metal-floor-2" | "metal-floor-3" | "metal-floor-4" | "metal-floor-5"
- | "dark-panel-1" | "dark-panel-2" | "dark-panel-3" | "dark-panel-4" | "dark-panel-5" | "dark-panel-6"
- | "arkycite-floor"
- | "darksand-tainted-water" | "darksand-water" | "deep-tainted-water" | "deep-water" | "sand-water" | "shallow-water" | "tainted-water"
- | "tar" | "pooled-cryofluid"
- | "space"
- | "stone-vent"
- | "core-zone"
- | "spawn"
- ];
- image! {
- | "ore-copper" | "ore-beryllium" | "ore-lead" | "ore-scrap" | "ore-coal" | "ore-thorium" | "ore-titanium" | "ore-tungsten" | "pebbles" | "tendrils" | "ore-wall-graphite" | "ore-wall-tungsten" | "ore-wall-beryllium" | "ore-wall-thorium" | "ore-crystal-thorium"
- | "yellow-stone-vent" | "arkyic-vent" | "crystalline-vent" | "red-stone-vent" | "carbon-vent"
- | "darksand"
- | "sand-floor"
- | "dacite"
- | "dirt"
- | "basalt" | "basalt-vent"
- | "moss"
- | "mud"
- | "ice-snow" | "snow" | "salt" | "ice"
- | "hotrock" | "char" | "magmarock" | "molten-slag"
- | "shale"
- | "metal-floor-damaged"
- | "stone"
- | "bluemat"
- | "ferric-craters"
- | "beryllic-stone"
- | "grass"
- | "rhyolite" | "rough-rhyolite" | "rhyolite-crater" | "rhyolite-vent"
- | "crater-stone"
- | "redmat"
- | "red-ice"
- | "spore-moss"
- | "regolith"
- | "ferric-stone"
- | "arkyic-stone"
- | "yellow-stone" | "yellow-stone-plates"
- | "red-stone" | "dense-red-stone"
- | "carbon-stone"
- | "crystal-floor" | "crystalline-stone"
- };
- table
-};
-
-impl Tile {
- #[must_use]
- pub const fn new(floor: BlockEnum, ore: BlockEnum) -> Self {
- Self {
- floor,
- ore,
- build: None,
- nd: [0; 7],
- }
- }
-
- fn set_block(&mut self, block: &'static Block) {
- self.build = Some(Build {
- block,
- state: None,
- items: Storage::new(),
- liquids: Storage::new(),
- rotation: Rotation::Up,
- team: Team::SHARDED,
- data: 0,
- });
- }
-
- #[must_use]
- pub const fn build(&self) -> Option<&Build> {
- self.build.as_ref()
- }
-
- /// size of this tile
- ///
- /// ._.
- ///
- /// dont think about it too much
- #[must_use]
- #[inline]
- pub fn size(&self) -> u8 {
- self.build.as_ref().map_or(1, |v| v.block.get_size())
- }
-
- #[must_use]
- #[inline]
- pub fn has_ore(&self) -> bool {
- self.ore != BlockEnum::Air
- }
-
- /// Draw this tiles build.
- #[must_use]
- #[inline]
- pub fn build_image(
- &self,
- context: Option<&RenderingContext>,
- s: Scale,
- ) -> DynImage<image::Cow> {
- // building covers floore
- let Some(b) = &self.build else {
- unreachable!();
- };
- b.image(context, s)
- }
-}
-
-impl std::fmt::Debug for Tile {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(
- f,
- "Tile@{}{}{}",
- self.floor.get_name(),
- if self.ore != BlockEnum::Air {
- format!("+{}", self.ore.get_name())
- } else {
- String::new()
- },
- if let Some(build) = &self.build {
- format!(":{}", build.block.name())
- } else {
- String::new()
- }
- )
- }
-}
-
-impl BlockState for Tile {
- fn get_block(&self) -> Option<&'static Block> {
- Some(self.build()?.block)
- }
-}
-
-impl RotationState for Tile {
- fn get_rotation(&self) -> Option<Rotation> {
- Some(self.build()?.rotation)
- }
-}
-
-impl RotationState for Option<Tile> {
- fn get_rotation(&self) -> Option<Rotation> {
- self.as_ref().unwrap().get_rotation()
- }
-}
-
-impl BlockState for Option<Tile> {
- fn get_block(&self) -> Option<&'static Block> {
- self.as_ref().unwrap().get_block()
- }
-}
-
-/// a build on a tile in a map
-#[derive(Clone)]
-pub struct Build {
- pub block: &'static Block,
- pub items: Storage<Item>,
- pub liquids: Storage<Fluid>,
- pub state: Option<State>,
- // pub health: f32,
- pub rotation: Rotation,
- pub team: Team,
- pub data: i8,
-}
-
-impl std::fmt::Debug for Build {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "Build<{block}>", block = self.block.name(),)
- }
-}
-
-impl Build {
- #[must_use]
- pub fn new(block: &'static Block) -> Build {
- Self {
- block,
- items: Storage::default(),
- liquids: Storage::default(),
- state: None,
- rotation: Rotation::Up,
- team: Team::SHARDED,
- data: 0,
- }
- }
-
- fn image(&self, context: Option<&RenderingContext>, s: Scale) -> DynImage<image::Cow> {
- self.block
- .image(self.state.as_ref(), context, self.rotation, s)
- }
-
- #[must_use]
- pub const fn name(&self) -> &str {
- self.block.name()
- }
-
- pub fn read(&mut self, buff: &mut DataRead<'_>) -> Result<(), ReadError> {
- // health
- let _ = buff.read_f32()?;
- let rot = buff.read_i8()? as i16;
- // team
- let _ = buff.read_i8()?;
- self.rotation = Rotation::try_from((rot & 127) as u8).unwrap_or(Rotation::Up);
- let mut mask = 0;
- let mut version = 0;
- if rot & 128 != 0 {
- version = buff.read_u8()?;
- if version < 3 {
- return Err(ReadError::Version(version));
- }
- buff.skip(1)?;
- mask = buff.read_u8()?;
- }
-
- if mask & 1 != 0 {
- read_items(buff, &mut self.items)?;
- }
- if mask & 2 != 0 {
- read_power(buff)?;
- }
- if mask & 4 != 0 {
- read_liquids(buff, &mut self.liquids)?;
- }
- if mask & 16 != 0 {
- let _scale = buff.read_f32()?;
- let _duration = buff.read_f32()?;
- }
- // "efficiency"
- _ = buff.read_u8()? as f64 / 255.;
- _ = buff.read_u8()? as f64 / 255.;
-
- if version == 4 {
- // visible flags for fog
- _ = buff.read_u64()?;
- }
- // "overridden by subclasses"
- self.block.read(self, buff)?;
-
- Ok(())
- }
-}
-
-/// format:
-/// - iterate [`u16`]
-/// - item: [`u16`] as [`Item`]
-/// - amount: [`u32`]
-///
-fn read_items(from: &mut DataRead, to: &mut Storage<Item>) -> Result<(), ReadError> {
- to.clear();
- let n = from.read_u16()?;
- to.reserve(n as usize);
- for _ in 0..n {
- let item = from.read_u16()?;
- let amount = from.read_u32()?;
- if let Ok(item) = Item::try_from(item) {
- to.set(item, amount);
- }
- }
- Ok(())
-}
-
-/// format:
-/// - iterate [`u16`]
-/// - liquid: [`u16`] as [`Fluid`]
-/// - amount: [`f32`]
-fn read_liquids(from: &mut DataRead, to: &mut Storage<Fluid>) -> Result<(), ReadError> {
- to.clear();
- let n = from.read_u16()?;
- to.reserve(n as usize);
- for _ in 0..n {
- let fluid = from.read_u16()?;
- let amount = from.read_f32()?;
- if let Ok(fluid) = Fluid::try_from(fluid) {
- to.set(fluid, (amount * 100.0) as u32);
- }
- }
- Ok(())
-}
-
-/// format:
-/// - iterate [`u16`]
-/// - link: [`i32`]
-/// - status: [`f32`]
-fn read_power(from: &mut DataRead) -> Result<(), ReadError> {
- let n = from.read_u16()? as usize;
- from.skip((n + 1) * 4)?;
- Ok(())
-}
-
-#[test]
-fn test_read_items() {
- let mut s = Storage::new();
- read_items(
- &mut DataRead::new(&[
- 0, 6, 0, 0, 0, 0, 2, 187, 0, 1, 0, 0, 1, 154, 0, 2, 0, 0, 15, 160, 0, 3, 0, 0, 0, 235,
- 0, 6, 0, 0, 1, 46, 0, 12, 0, 0, 1, 81, 255, 255,
- ]),
- &mut s,
- )
- .unwrap();
- assert!(s.get_total() == 5983);
-}
-
-#[test]
-fn test_read_liquids() {
- let mut s = Storage::new();
- read_liquids(
- &mut DataRead::new(&[0, 1, 0, 0, 67, 111, 247, 126, 255, 255]),
- &mut s,
- )
- .unwrap();
- assert!(s.get(Fluid::Water) == 23996);
-}
-
-/// a map.
-/// ## Does not support serialization yet!
-#[derive(Debug)]
-pub struct Map {
- pub width: usize,
- pub height: usize,
- pub tags: HashMap<String, String>,
- pub entities: Vec<Unit>,
- /// row major 2d array
- /// ```rs
- /// (0, 0), (1, 0), (2, 0)
- /// (0, 1), (1, 1), (2, 1)
- /// (0, 2), (1, 2), (2, 2)
- /// ```
- pub tiles: Vec<Tile>,
-}
-
-impl Map {
- #[lower::apply(wrapping)]
- pub(crate) fn cross(&self, j: usize) -> [Option<&Tile>; 4] {
- [
- self.tiles.get(j + self.width),
- self.tiles.get(j + 1),
- self.tiles.get(j - self.width),
- self.tiles.get(j - 1),
- ]
- }
- #[lower::apply(wrapping)]
- pub(crate) fn corners(&self, j: usize) -> [Option<&Tile>; 4] {
- [
- self.tiles.get(j - self.width - 1),
- self.tiles.get(j - self.width + 1),
- self.tiles.get(j + self.width - 1),
- self.tiles.get(j + self.width + 1),
- ]
- }
-
- #[must_use]
- pub fn new(width: usize, height: usize, tags: HashMap<String, String>) -> Self {
- Self {
- tiles: Vec::with_capacity(width * height),
- height,
- width,
- tags,
- entities: vec![],
- }
- }
-
- fn push(&mut self, t: Tile) {
- self.tiles.push(t);
- }
-}
-
-impl Index<usize> for Map {
- type Output = Tile;
- fn index(&self, index: usize) -> &Self::Output {
- &self.tiles[index]
- }
-}
-
-impl IndexMut<usize> for Map {
- fn index_mut(&mut self, index: usize) -> &mut Self::Output {
- &mut self.tiles[index]
- }
-}
-
-const MAP_HEADER: [u8; 4] = [b'M', b'S', b'A', b'V'];
-
-/// error occurring when reading a map fails
-#[derive(Debug, Error)]
-pub enum ReadError {
- #[error("failed to read from buffer")]
- Read(#[from] super::ReadError),
- #[error(transparent)]
- Decompress(#[from] super::DecompressError),
- #[error("incorrect header ({0:?})")]
- Header([u8; 4]),
- #[error("unsupported version ({0})")]
- Version(u8),
- #[error("unknown block at index {0:?}")]
- NoSuchBlock(u16),
- #[error("no block {0}")]
- NoBlockFound(String),
- #[error("failed to read block data")]
- ReadState(#[from] super::dynamic::ReadError),
- #[error("no block, but data")]
- NoBlockWithData,
-}
-
-/// Struct for granular map deserialization.
-pub struct MapReader {
- #[allow(dead_code)]
- backing: Vec<u8>,
- // dataread references 'backing'
- buff: DataRead<'static>,
- version: u32,
-}
-
-#[derive(Debug)]
-pub enum ThinBloc {
- Build(Rotation, &'static Block, Team),
- Many(Option<&'static Block>, u8),
-}
-
-#[derive(Debug)]
-pub enum ThinMapData {
- Init { width: u16, height: u16 },
- Bloc(ThinBloc),
- Tile { floor: BlockEnum, ore: BlockEnum },
-}
-
-#[derive(Debug)]
-pub enum Bloc {
- Build(Build, &'static Block),
- Data(&'static Block, i8),
- Nd(Option<&'static Block>, [u8; 7]),
- Many(Option<&'static Block>, u8),
-}
-
-#[derive(Debug)]
-pub enum MapData {
- Init { width: u16, height: u16 },
- Bloc(Bloc),
- Tile { floor: BlockEnum, ore: BlockEnum },
-}
-
-#[derive(Debug)]
-pub enum EntityData {
- Length(u32),
- Data(Unit),
-}
-
-macro_rules! tiles {
- ($count:ident, $me:ident, $w: ident,$r:ident) => {
- let mut i = 0;
- while i < $count {
- let floor_id = $me.buff.read_u16()?;
- let overlay_id = $me.buff.read_u16()?;
- let &floor = $r.get(floor_id as usize).unwrap_or(&BlockEnum::Stone);
- let &ore = $r.get(overlay_id as usize).unwrap_or(&BlockEnum::Air);
- yield $w::Tile { floor, ore };
- let consecutives = $me.buff.read_u8()? as usize;
- for _ in 0..consecutives {
- yield $w::Tile { floor, ore };
- }
- i += consecutives;
- i += 1;
- }
- };
-}
-
-pub type Registrar = [BlockEnum; BlockEnum::ALL.len()];
-impl MapReader {
- pub fn new(buff: &mut DataRead<'_>) -> Result<Self, ReadError> {
- let backing = buff.deflate()?;
- Ok(Self {
- version: u32::MAX,
- buff: DataRead::new(unsafe {
- std::mem::transmute::<&'_ [u8], &'static [u8]>(&backing)
- }),
- backing,
- })
- }
-
- pub fn header(&mut self) -> Result<[u8; 4], ReadError> {
- let b = self.buff.readN::<4>()?;
- (b == MAP_HEADER).then_some(b).ok_or(ReadError::Header(b))
- }
-
- pub fn version(&mut self) -> Result<u32, ReadError> {
- let x = self.buff.read_u32()?;
- (7..=11)
- .contains(&x)
- .then_some(x)
- .ok_or(ReadError::Version(x.try_into().unwrap_or(0)))
- }
-
- pub fn tags(&mut self) -> Result<HashMap<&str, &str>, ReadError> {
- let mut tags = HashMap::new();
- self.buff.skip(5)?;
- for _ in 0..self.buff.read_u8()? {
- let key = self.buff.read_utf()?;
- let value = self.buff.read_utf()?;
- tags.insert(key, value);
- }
- Ok(tags)
- }
-
- pub fn content(&mut self) -> Result<Registrar, ReadError> {
- let mut registrar = BlockEnum::ALL;
- _ = self.buff.read_u32()?;
- for _ in 0..self.buff.read_i8()? {
- let ty = self.buff.read_u8()?;
- for index in 0..self.buff.read_u16()? as usize {
- if ty == 1 {
- let name = self.buff.read_utf()?;
- let block = BlockEnum::by_name(name)
- .ok_or_else(|| ReadError::NoBlockFound(name.to_string()))?;
- registrar.get_mut(index).map(|x| *x = block);
- } else {
- let n = self.buff.read_u16()?;
- self.buff.skip(n as usize)?;
- }
- }
- }
- Ok(registrar)
- }
-
- pub fn tags_alloc(&mut self) -> Result<HashMap<String, String>, ReadError> {
- let mut tags = HashMap::new();
- self.buff
- .read_chunk(true, |buff| {
- buff.skip(1)?;
- for _ in 0..buff.read_u8()? {
- let key = buff.read_utf()?;
- let value = buff.read_utf()?;
- tags.insert(key.to_owned(), value.to_owned());
- }
- Ok::<(), ReadError>(())
- })
- .map(|_| tags)
- }
-
- pub fn skip(&mut self) -> Result<(), ReadError> {
- let len = self.buff.read_u32()? as usize;
- self.buff.skip(len)?;
- Ok(())
- }
-
- pub fn thin_map(
- &mut self,
- r: Registrar,
- ) -> Result<
- impl Coroutine<(), Return = Result<(), ReadError>, Yield = ThinMapData> + '_,
- ReadError,
- > {
- let len = self.buff.read_u32()? as usize;
- let rb4 = self.buff.read;
- let map = #[coroutine]
- move || {
- let w = self.buff.read_u16()?;
- let h = self.buff.read_u16()?;
- yield ThinMapData::Init {
- width: w,
- height: h,
- };
- let w = w as usize;
- let h = h as usize;
- let count = w * h;
- tiles!(count, self, ThinMapData, r);
-
- let mut i = 0;
- while i < count {
- let block_id = self.buff.read_u16()?;
- let packed = self.buff.read_u8()?;
- let entity = (packed & 1) != 0;
- let data = (packed & 2) != 0;
- let newdata = (packed & 4) != 0;
- if newdata {
- self.buff.skip(7)?;
- }
- let central = if entity {
- self.buff.read_bool()?
- } else {
- false
- };
- let block = *r
- .get(block_id as usize)
- .ok_or(ReadError::NoSuchBlock(block_id))?;
- let block = block.to_block();
- yield if entity {
- if central {
- let len = if self.version > 9 {
- self.buff.read_u32()? as usize
- } else {
- self.buff.read_u16()? as usize
- };
- let rb4 = self.buff.read;
-
- #[cfg(debug_assertions)]
- println!("reading {block:?} ");
- let _ = self.buff.read_i8()?;
- let _ = self.buff.read_f32()?;
- let rot = self.buff.read_i8()?;
- let rot = Rotation::try_from((rot & 127) as u8).unwrap_or(Rotation::Up);
- let team = Team::of(self.buff.read_u8()?);
- let read = self.buff.read - rb4;
- let n = len - read;
- self.buff.skip(n)?;
-
- ThinMapData::Bloc(ThinBloc::Build(rot, block.unwrap(), team))
- } else {
- ThinMapData::Bloc(ThinBloc::Many(None, 0))
- }
- } else if data {
- _ = self.buff.read_i8()?;
- ThinMapData::Bloc(ThinBloc::Many(block, 0))
- } else if newdata {
- ThinMapData::Bloc(ThinBloc::Many(block, 0))
- } else {
- let consecutives = self.buff.read_u8()?;
- i += consecutives as usize;
- ThinMapData::Bloc(ThinBloc::Many(block, consecutives))
- };
-
- i += 1;
- }
- let read = self.buff.read - rb4;
- debug_assert!(len >= read, "overread; supposed to read {len}; read {read}");
- debug_assert!((len - read) == 0, "supposed to read {len}; read {read}");
- Ok(())
- };
- Ok(map)
- }
-
- pub fn collect_map(
- &mut self,
- tags: HashMap<String, String>,
- r: Registrar,
- ) -> Result<Map, ReadError> {
- let mut co = self.map(r)?;
- let (w, h) = match Pin::new(&mut co).resume(()) {
- Yielded(MapData::Init { width, height }) => (width as usize, height as usize),
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- };
- let mut m = Map::new(w, h, tags);
- for _ in 0..w * h {
- match Pin::new(&mut co).resume(()) {
- Yielded(MapData::Tile { floor, ore }) => m.push(Tile::new(floor, ore)),
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- }
- }
- let mut i = 0;
- while i < w * h {
- match Pin::new(&mut co).resume(()) {
- Yielded(MapData::Bloc(Bloc::Many(None, n))) => i += n as usize,
- Yielded(MapData::Bloc(Bloc::Build(x, y))) => {
- m[i].set_block(y);
- m[i].build = Some(x);
- }
- Yielded(MapData::Bloc(Bloc::Data(x, y))) => {
- m[i].set_block(x);
- m[i].build.as_mut().unwrap().data = y;
- }
- Yielded(MapData::Bloc(Bloc::Many(Some(bloc), n))) => {
- for i in i..=i + n as usize {
- m[i].set_block(bloc);
- }
- i += n as usize;
- }
- Yielded(MapData::Bloc(Bloc::Nd(b, d))) => {
- b.map(|b| m[i].set_block(b));
- m[i].nd = d
- }
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- }
- i += 1;
- }
- match Pin::new(&mut co).resume(()) {
- Complete(Ok(())) => (),
- _ => unreachable!(),
- };
- Ok(m)
- }
-
- pub fn map(
- &mut self,
- r: Registrar,
- ) -> Result<impl Coroutine<(), Return = Result<(), ReadError>, Yield = MapData> + '_, ReadError>
- {
- let len = self.buff.read_u32()? as usize;
- let rb4 = self.buff.read;
-
- let c = #[coroutine]
- move || {
- let w = self.buff.read_u16()?;
- let h = self.buff.read_u16()?;
- yield MapData::Init {
- width: w,
- height: h,
- };
- let w = w as usize;
- let h = h as usize;
- let count = w * h;
- tiles!(count, self, MapData, r);
-
- let mut i = 0;
- while i < count {
- let block_id = self.buff.read_u16()?;
- let packed = self.buff.read_u8()?;
- let entity = (packed & 1) != 0;
- let data = (packed & 2) != 0;
- let newdata = (packed & 4) != 0;
- let newdata = newdata.then(|| self.buff.readN::<7>()).transpose()?;
- let central = if entity {
- self.buff.read_bool()?
- } else {
- false
- };
- let block = r
- .get(block_id as usize)
- .ok_or(ReadError::NoSuchBlock(block_id))?;
- let block = block.to_block();
- yield if entity {
- if central {
- let block = block.ok_or(ReadError::NoBlockWithData)?;
- let len = if self.version > 9 {
- self.buff.read_u32()? as usize
- } else {
- self.buff.read_u16()? as usize
- };
- let rb4 = self.buff.read;
-
- #[cfg(debug_assertions)]
- println!("reading {block:?} ");
- let _ = self.buff.read_i8()?;
- let mut b = Build::new(block);
- b.read(&mut self.buff)?;
- // implementation not complete, skip remaining bytes (TODO finish impl)
- let read = self.buff.read - rb4;
-
- // skip this chunk
- assert!(len >= read, "overread; supposed to read {len}; read {read}");
- let n = len - read;
- if n != 0 {
- #[cfg(debug_assertions)]
- println!(
- "({block:?}) supposed to read {len}; read {read} - skipping excess"
- );
- self.buff.skip(n)?;
- };
-
- MapData::Bloc(Bloc::Build(b, block))
- } else {
- MapData::Bloc(Bloc::Many(None, 0))
- }
- } else if data {
- MapData::Bloc(Bloc::Data(
- block.ok_or(ReadError::NoBlockWithData)?,
- self.buff.read_i8()?,
- ))
- } else if let Some(nd) = newdata {
- MapData::Bloc(Bloc::Nd(block, nd))
- } else {
- let consecutives = self.buff.read_u8()?;
- i += consecutives as usize;
- MapData::Bloc(Bloc::Many(block, consecutives))
- };
-
- i += 1;
- }
- let read = self.buff.read - rb4;
- debug_assert!(len >= read, "overread; supposed to read {len}; read {read}");
- debug_assert!((len - read) == 0, "supposed to read {len}; read {read}");
- Ok(())
- };
- Ok(c)
- }
-
- pub fn entities(
- &mut self,
- ) -> Result<
- impl Coroutine<(), Yield = EntityData, Return = Result<(), ReadError>> + '_,
- ReadError,
- > {
- let len = self.buff.read_u32()? as usize;
- let rb4 = self.buff.read;
-
- let c = #[coroutine]
- move || {
- for _ in 0..self.buff.read_u16()? {
- self.buff.skip(2)?;
- let _ = self.buff.read_utf()?;
- }
- // read team block plans (ghosts) (SaveVersion.java#389)
- for _ in 0..self.buff.read_u32()? {
- self.buff.skip(4)?;
- for _ in 0..self.buff.read_u32()? {
- self.buff.skip(8usize)?;
- let _ = DynData::deserialize(&mut self.buff)?;
- }
- }
- // read world entities (#412). eg units
- let n = self.buff.read_u32()?;
- yield EntityData::Length(n);
- for _ in 0..n {
- let len = if self.version > 9 {
- self.buff.read_u32()? as usize
- } else {
- self.buff.read_u16()? as usize
- };
- let rb4 = self.buff.read;
- let id = self.buff.read_u8()? as usize;
- let Some(&Some(u)) = entity_mapping::ID.get(id) else {
- self.buff.skip(len - 1)?;
- continue;
- };
- _ = self.buff.read_u32()?;
- yield EntityData::Data(u.read(&mut self.buff)?);
- let read = self.buff.read - rb4;
- debug_assert!(len >= read, "overread; supposed to read {len}; read {read}");
- let n = len - read;
- if n != 0 && cfg!(debug_assertions) {
- dbg!("underread: skipping {n} bytes");
- }
- self.buff.skip(n)?;
- }
- let read = self.buff.read - rb4;
- debug_assert!(len >= read, "overread; supposed to read {len}; read {read}");
- debug_assert!((len - read) == 0, "supposed to read {len}; read {read}");
- Ok(())
- };
- Ok(c)
- }
-
- pub fn collect_entities(&mut self) -> Result<Vec<Unit>, ReadError> {
- let mut co = self.entities()?;
- let n = match Pin::new(&mut co).resume(()) {
- Yielded(EntityData::Length(x)) => x,
- Complete(Err(e)) => return Err(e),
- _ => unreachable!(),
- };
- let mut o = Vec::with_capacity(n as usize);
- for _ in 0..n {
- match Pin::new(&mut co).resume(()) {
- Yielded(EntityData::Data(x)) => o.push(x),
- Complete(Err(e)) => return Err(e),
- Complete(Ok(())) => break,
- _ => unreachable!(),
- }
- }
- Ok(o)
- }
-}
-
-/// serde map
-impl Serializable for Map {
- type ReadError = ReadError;
- type WriteError = ();
- /// deserialize a map
- ///
- /// note: does not deserialize all data
- fn deserialize(buff: &mut DataRead<'_>) -> Result<Map, Self::ReadError> {
- let mut buff = MapReader::new(buff)?;
- buff.header()?;
- buff.version = buff.version()?;
- let tags = buff.tags_alloc()?;
- let r = buff.content()?;
- if buff.version >= 11 {
- buff.skip()?;
- }
- let mut m = buff.collect_map(tags, r)?;
- m.entities = buff.collect_entities()?;
- if buff.version == 8 {
- // skip marker region
- buff.skip()?;
- }
-
- // skip custom chunks
- buff.skip()?;
- Ok(m)
- }
-
- /// serialize a map (todo)
- /// panics: always
- fn serialize(&self, _: &mut super::DataWrite<'_>) -> Result<(), Self::WriteError> {
- unimplemented!()
- }
-}
diff --git a/mindus/src/data/mod.rs b/mindus/src/data/mod.rs
deleted file mode 100644
index 9f7959f..0000000
--- a/mindus/src/data/mod.rs
+++ /dev/null
@@ -1,499 +0,0 @@
-//! all the IO
-use flate2::{
- Compress, CompressError as CError, Compression, Decompress, DecompressError as DError,
- FlushCompress, FlushDecompress, Status,
-};
-use std::backtrace::Backtrace;
-use std::collections::HashMap;
-use std::error::Error;
-use std::fmt;
-use std::str::Utf8Error;
-use thiserror::Error;
-
-pub(crate) mod autotile;
-mod base64;
-pub mod command;
-pub mod dynamic;
-pub mod entity_mapping;
-pub mod map;
-pub mod planet;
-pub mod renderer;
-pub mod schematic;
-pub mod sector;
-pub mod weather;
-
-#[derive(Debug)]
-pub struct DataRead<'d> {
- pub(crate) data: &'d [u8],
- // used with read_chunk
- read: usize,
-}
-
-impl fmt::Display for DataRead<'_> {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "{}", String::from_utf8_lossy(self.data))
- }
-}
-
-macro_rules! make_read {
- ($name:ident, $type:ty) => {
- pub fn $name(&mut self) -> Result<$type, ReadError> {
- const LEN: usize = std::mem::size_of::<$type>();
- let output = self.readN::<LEN>()?;
- Ok(<$type>::from_be_bytes(output))
- }
- };
-}
-
-impl<'d> DataRead<'d> {
- #[must_use]
- pub const fn new(data: &'d [u8]) -> Self {
- Self { data, read: 0 }
- }
-
- pub fn read_bool(&mut self) -> Result<bool, ReadError> {
- Ok(self.read_u8()? != 0)
- }
-
- make_read!(read_u8, u8);
- make_read!(read_i8, i8);
- make_read!(read_u16, u16);
- make_read!(read_i16, i16);
- make_read!(read_u32, u32);
- make_read!(read_i32, i32);
- make_read!(read_f32, f32);
- make_read!(read_u64, u64);
- make_read!(read_i64, i64);
- make_read!(read_f64, f64);
-
- pub fn read_utf(&mut self) -> Result<&'d str, ReadError> {
- let len = self.read_u16()?;
- let result = std::str::from_utf8(self.eat(len as usize)?)?;
- Ok(result)
- }
-
- pub fn eat(&mut self, n: usize) -> Result<&'d [u8], ReadError> {
- self.data
- .split_off(..n)
- .ok_or(ReadError::Underflow {
- need: n,
- have: self.data.len(),
- bt: Backtrace::capture(),
- })
- .inspect(|_| self.read += n)
- }
-
- #[allow(non_snake_case)]
- pub fn readN<const N: usize>(&mut self) -> Result<[u8; N], ReadError> {
- self.eat(N).map(|x| x.try_into().unwrap())
- }
-
- pub fn read_bytes(&mut self, dst: &mut [u8]) -> Result<(), ReadError> {
- dst.copy_from_slice(self.eat(dst.len())?);
- Ok(())
- }
-
- pub fn skip(&mut self, n: usize) -> Result<(), ReadError> {
- self.data = self.data.get(n..).ok_or(ReadError::Underflow {
- need: n,
- have: self.data.len(),
- bt: Backtrace::capture(),
- })?;
- self.read += n;
- Ok(())
- }
-
- pub fn read_chunk<E: Error + From<ReadError>, T>(
- &mut self,
- big: bool,
- f: impl FnOnce(&mut DataRead) -> Result<T, E>,
- ) -> Result<T, E> {
- let len = if big {
- self.read_u32()? as usize
- } else {
- self.read_u16()? as usize
- };
- let rb4 = self.read;
- let r = f(self);
- let read = self.read - rb4;
- match r {
- Err(e) => {
- // skip this chunk
- assert!(len >= read, "overread; supposed to read {len}; read {read}");
- let n = len - read;
- if n != 0 {
- #[cfg(debug_assertions)]
- println!("supposed to read {len}; read {read} - skipping excess");
- self.skip(n)?;
- };
- Err(e)
- }
- Ok(v) => {
- debug_assert!(len >= read, "overread; supposed to read {len}; read {read}");
- debug_assert!((len - read) == 0, "supposed to read {len}; read {read}");
- Ok(v)
- }
- }
- }
-
- pub fn read_vec(&mut self, dst: &mut Vec<u8>, len: usize) -> Result<(), ReadError> {
- dst.extend_from_slice(self.eat(len)?);
- Ok(())
- }
-
- pub fn read_map(&mut self, dst: &mut HashMap<String, String>) -> Result<(), ReadError> {
- let n = self.read_u8()?;
- for _ in 0..n {
- let key = self.read_utf()?;
- let value = self.read_utf()?;
- dst.insert(key.to_owned(), value.to_owned());
- }
- Ok(())
- }
-
- pub fn deflate(&mut self) -> Result<Vec<u8>, DecompressError> {
- let mut dec = Decompress::new(true);
- let mut raw = Vec::with_capacity(1024);
- loop {
- let t_in = dec.total_in();
- let t_out = dec.total_out();
- let res = dec.decompress_vec(self.data, &mut raw, FlushDecompress::None)?;
- if dec.total_in() > t_in {
- // we have to advance input every time, decompress_vec only knows the output position
- self.data = &self.data[(dec.total_in() - t_in) as usize..];
- }
- match res {
- // there's no more input (and the flush mode says so), we need to reserve additional space
- Status::Ok | Status::BufError => {}
- // input was already at the end, so this is referring to the output
- Status::StreamEnd => break,
- }
- if dec.total_in() == t_in && dec.total_out() == t_out {
- // protect against looping forever
- return Err(DecompressError::DecompressStall);
- }
- raw.reserve(1024);
- }
- assert_eq!(dec.total_out() as usize, raw.len());
- self.read = 0;
- Ok(raw)
- }
-}
-
-#[derive(Debug, Error)]
-pub enum DecompressError {
- #[error("zlib decompression failed")]
- Decompress(#[from] DError),
- #[error("decompressor stalled before completion")]
- DecompressStall,
-}
-
-#[derive(Debug, Error)]
-pub enum ReadError {
- #[error("buffer underflow (expected {need} but got {have}) ({bt})")]
- Underflow {
- need: usize,
- have: usize,
-
- bt: Backtrace,
- },
- #[error("expected {0}")]
- Expected(&'static str),
- #[error("malformed utf8 in string")]
- Utf8 {
- #[from]
- source: Utf8Error,
- },
-}
-
-impl PartialEq for ReadError {
- fn eq(&self, _: &Self) -> bool {
- false
- }
-}
-
-enum WriteBuff<'d> {
- // unlike the DataRead want to access the written region after
- Ref { raw: &'d mut [u8], pos: usize },
- Vec(Vec<u8>),
-}
-
-impl<'d> WriteBuff<'d> {
- fn check_capacity(&self, need: usize) -> Result<(), WriteError> {
- match self {
- Self::Ref { raw, pos } if raw.len() - pos < need => Err(WriteError::Overflow {
- need,
- have: raw.len() - pos,
- }),
- _ => Ok(()),
- }
- }
-
- fn write(&mut self, data: &[u8]) {
- match self {
- Self::Ref { raw, pos } => {
- let end = *pos + data.len();
- raw[*pos..end].copy_from_slice(data);
- *pos += data.len();
- }
- Self::Vec(v) => v.extend_from_slice(data),
- }
- }
-}
-
-pub struct DataWrite<'d> {
- data: WriteBuff<'d>,
-}
-
-macro_rules! make_write {
- ($name:ident, $type:ty) => {
- pub fn $name(&mut self, val: $type) -> Result<(), WriteError> {
- const LEN: usize = std::mem::size_of::<$type>();
- self.data.check_capacity(LEN)?;
- self.data.write(&<$type>::to_be_bytes(val));
- Ok(())
- }
- };
-}
-
-impl<'d> DataWrite<'d> {
- pub fn write_bool(&mut self, val: bool) -> Result<(), WriteError> {
- self.write_u8(u8::from(val))
- }
-
- make_write!(write_u8, u8);
- make_write!(write_i8, i8);
- make_write!(write_u16, u16);
- make_write!(write_i16, i16);
- make_write!(write_u32, u32);
- make_write!(write_i32, i32);
- make_write!(write_f32, f32);
- make_write!(write_u64, u64);
- make_write!(write_i64, i64);
- make_write!(write_f64, f64);
-
- pub fn write_utf(&mut self, val: &str) -> Result<(), WriteError> {
- if val.len() > u16::MAX as usize {
- return Err(WriteError::TooLong { len: val.len() });
- }
- self.data.check_capacity(2 + val.len())?;
- self.data.write(&u16::to_be_bytes(val.len() as u16));
- self.data.write(val.as_bytes());
- Ok(())
- }
-
- pub fn write_bytes(&mut self, val: &[u8]) -> Result<(), WriteError> {
- self.data.check_capacity(val.len())?;
- self.data.write(val);
- Ok(())
- }
-
- #[must_use]
- pub const fn is_owned(&self) -> bool {
- matches!(self.data, WriteBuff::Vec(..))
- }
-
- #[must_use]
- pub fn get_written(&self) -> &[u8] {
- match &self.data {
- WriteBuff::Ref { raw, pos } => &raw[..*pos],
- WriteBuff::Vec(v) => v,
- }
- }
-
- /// eat this datawrite
- ///
- /// panics if ref write buffer
- #[must_use]
- pub fn consume(self) -> Vec<u8> {
- match self.data {
- WriteBuff::Vec(v) => v,
- WriteBuff::Ref { .. } => unreachable!(),
- }
- }
-
- pub fn inflate(self, to: &mut DataWrite) -> Result<(), CompressError> {
- // compress into the provided buffer
- let WriteBuff::Vec(raw) = self.data else {
- unreachable!("write buffer not owned")
- };
- let mut comp = Compress::new(Compression::default(), true);
- // compress the immediate buffer into a temp buffer to copy it to buff? no thanks
- match &mut to.data {
- WriteBuff::Ref { raw: dst, pos } => {
- match comp.compress(&raw, &mut dst[*pos..], FlushCompress::Finish)? {
- // there's no more input (and the flush mode says so), but we can't resize the output
- Status::Ok | Status::BufError => {
- return Err(CompressError::CompressEof(
- raw.len() - comp.total_in() as usize,
- ));
- }
- Status::StreamEnd => (),
- }
- }
- WriteBuff::Vec(dst) => {
- let mut input = raw.as_ref();
- dst.reserve(1024);
- loop {
- let t_in = comp.total_in();
- let t_out = comp.total_out();
- let res = comp.compress_vec(input, dst, FlushCompress::Finish)?;
- if comp.total_in() > t_in {
- // we have to advance input every time, compress_vec only knows the output position
- input = &input[(comp.total_in() - t_in) as usize..];
- }
- match res {
- // there's no more input (and the flush mode says so), we need to reserve additional space
- Status::Ok | Status::BufError => (),
- // input was already at the end, so this is referring to the output
- Status::StreamEnd => break,
- }
- if comp.total_in() == t_in && comp.total_out() == t_out {
- // protect against looping forever
- return Err(CompressError::CompressStall);
- }
- dst.reserve(1024);
- }
- }
- }
- assert_eq!(comp.total_in() as usize, raw.len());
- Ok(())
- }
-}
-
-impl Default for DataWrite<'static> {
- fn default() -> Self {
- Self {
- data: WriteBuff::Vec(Vec::new()),
- }
- }
-}
-
-#[derive(Debug, Error)]
-pub enum CompressError {
- #[error(transparent)]
- Compress(#[from] CError),
- #[error("compression overflow with {0} bytes of input remaining")]
- CompressEof(usize),
- #[error("compressor stalled before completion")]
- CompressStall,
-}
-
-#[derive(Debug, Error)]
-pub enum WriteError {
- #[error("buffer overflow (expected {need} but got {have})")]
- Overflow { need: usize, have: usize },
- #[error("string too long ({len} bytes of {})", u16::MAX)]
- TooLong { len: usize },
-}
-
-impl PartialEq for WriteError {
- fn eq(&self, _: &Self) -> bool {
- false
- }
-}
-
-impl<'d> From<&'d mut [u8]> for DataWrite<'d> {
- fn from(value: &'d mut [u8]) -> Self {
- Self {
- data: WriteBuff::Ref { raw: value, pos: 0 },
- }
- }
-}
-
-impl From<Vec<u8>> for DataWrite<'static> {
- fn from(value: Vec<u8>) -> Self {
- Self {
- data: WriteBuff::Vec(value),
- }
- }
-}
-
-impl<'d> TryFrom<DataWrite<'d>> for Vec<u8> {
- type Error = ();
-
- fn try_from(value: DataWrite<'d>) -> Result<Self, Self::Error> {
- match value.data {
- WriteBuff::Vec(v) => Ok(v),
- WriteBuff::Ref { .. } => Err(()),
- }
- }
-}
-/// basic serialization/deserialization functions
-pub trait Serializable
-where
- Self: Sized,
-{
- type ReadError;
- type WriteError;
- /// deserialize self from a binary buffer
- fn deserialize(buff: &mut DataRead<'_>) -> Result<Self, Self::ReadError>;
- /// transform self into a binary buffer
- fn serialize(&self, buff: &mut DataWrite<'_>) -> Result<(), Self::WriteError>;
-}
-
-#[derive(Clone, Copy, Eq, PartialEq, Default)]
-pub struct GridPos(pub usize, pub usize);
-
-impl From<u32> for GridPos {
- fn from(value: u32) -> Self {
- GridPos((value >> 16) as u16 as usize, value as u16 as usize)
- }
-}
-
-impl From<GridPos> for u32 {
- /// ```
- /// # use mindus::data::GridPos;
- /// assert_eq!(GridPos::from(u32::from(GridPos(1000, 5))), GridPos(1000, 5));
- /// ```
- fn from(value: GridPos) -> Self {
- ((value.0 << 16) | value.1) as u32
- }
-}
-
-impl fmt::Debug for GridPos {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "({0}, {1})", self.0, self.1)
- }
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
-
- #[test]
- fn read() {
- let mut read = DataRead::new("Thé qûick ઉrown fox 🦘 over\0\rthe lazy dog.".as_bytes());
- assert_eq!(read.read_u8(), Ok(84));
- assert_eq!(read.read_i8(), Ok(104));
- assert_eq!(read.read_i8(), Ok(-61));
- assert_eq!(read.read_u16(), Ok(43296));
- assert_eq!(read.read_i16(), Ok(29123));
- assert_eq!(read.read_i16(), Ok(-17559));
- assert_eq!(read.read_i32(), Ok(1_667_965_152));
- assert_eq!(read.read_i32(), Ok(-1_433_832_849));
- assert_eq!(read.read_i64(), Ok(8_605_851_562_280_493_296));
- assert_eq!(read.read_i64(), Ok(-6_942_694_510_468_635_278));
- assert_eq!(read.read_utf(), Ok("the lazy dog."));
- }
-
- #[test]
- fn write() {
- let mut write = DataWrite::default();
- assert_eq!(write.write_u8(84), Ok(()));
- assert_eq!(write.write_i8(104), Ok(()));
- assert_eq!(write.write_i8(-61), Ok(()));
- assert_eq!(write.write_u16(43296), Ok(()));
- assert_eq!(write.write_i16(29123), Ok(()));
- assert_eq!(write.write_i16(-17559), Ok(()));
- assert_eq!(write.write_i32(1_667_965_152), Ok(()));
- assert_eq!(write.write_i32(-1_433_832_849), Ok(()));
- assert_eq!(write.write_i64(8_605_851_562_280_493_296), Ok(()));
- assert_eq!(write.write_i64(-6_942_694_510_468_635_278), Ok(()));
- assert_eq!(write.write_utf("the lazy dog."), Ok(()));
- assert_eq!(
- write.get_written(),
- "Thé qûick ઉrown fox 🦘 over\0\rthe lazy dog.".as_bytes()
- );
- }
-}
diff --git a/mindus/src/data/renderer.rs b/mindus/src/data/renderer.rs
deleted file mode 100644
index 095a69d..0000000
--- a/mindus/src/data/renderer.rs
+++ /dev/null
@@ -1,853 +0,0 @@
-//! schematic drawing
-use super::GridPos;
-pub(crate) use super::autotile::*;
-use super::schematic::Schematic;
-use crate::block::State;
-use crate::block::content::Type;
-use crate::color_mapping::BLOCK2COLOR;
-use crate::data::map::Registrar;
-use crate::team::Team;
-pub(crate) use crate::utils::*;
-use crate::{Map, content::Content};
-use crate::{
- block::Rotation,
- data::map::{ThinBloc, ThinMapData},
-};
-use atools::prelude::*;
-use either::Either;
-use fimg::{BlendingOverlay, BlendingOverlayAt, uninit};
-use std::hint::unlikely;
-use std::iter::successors;
-use std::ops::Coroutine;
-use std::pin::Pin;
-
-include!(concat!(env!("OUT_DIR"), "/full.rs"));
-include!(concat!(env!("OUT_DIR"), "/quar.rs"));
-include!(concat!(env!("OUT_DIR"), "/eigh.rs"));
-
-#[derive(Debug, Copy, Clone)]
-#[repr(u8)]
-pub enum Scale {
- Full,
- // Half,
- Quarter,
- Eigth,
-}
-
-impl Scale {
- #[must_use]
- pub const fn px(self) -> u8 {
- match self {
- Self::Full => 32,
- Self::Quarter => 32 / 4,
- Self::Eigth => 32 / 8,
- }
- }
-}
-
-impl std::ops::Mul<u32> for Scale {
- type Output = u32;
- fn mul(self, rhs: u32) -> u32 {
- self.px() as u32 * rhs
- }
-}
-
-#[macro_export]
-macro_rules! load {
- (raw $name: literal, $scale:expr) => {
- paste::paste! { match $scale {
- $crate::data::renderer::Scale::Quarter => $crate::data::renderer::quar::[<$name:snake:upper>],
- $crate::data::renderer::Scale::Eigth => $crate::data::renderer::eigh::[<$name:snake:upper>],
- $crate::data::renderer::Scale::Full => $crate::data::renderer::full::[<$name:snake:upper>],
- }
- } };
- (8x $name:literal) => { paste::paste! {
- car::map!([
- load!([<$name 1>]),
- load!([<$name 2>]),
- load!([<$name 3>]),
- load!([<$name 4>]),
- load!([<$name 5>]),
- load!([<$name 6>]),
- load!([<$name 7>]),
- load!([<$name 8>]),
- ], |x| car::map!(x, DynImage::from))
- } };
- ($name:literal, $scale:expr) => { paste::paste! {
- #[allow(unused_unsafe)] unsafe { match $scale {
- $crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::[<$name:snake:upper>],
- $crate::data::renderer::Scale::Eigth => &$crate::data::renderer::eigh::[<$name:snake:upper>],
- $crate::data::renderer::Scale::Full => &$crate::data::renderer::full::[<$name:snake:upper>],
- }.mapped($crate::utils::Cow::Ref) }
- } };
- ($name: ident) => { paste::paste! {
- [$crate::data::renderer::full::[<$name:snake:upper>].copy(), $crate::data::renderer::quar::[<$name:snake:upper>].copy(), $crate::data::renderer::eigh::[<$name:snake:upper>].copy()]
- } };
- ($name: literal) => { paste::paste! {
- [$crate::data::renderer::full::[<$name:snake:upper>].copy(), $crate::data::renderer::quar::[<$name:snake:upper>].copy(), $crate::data::renderer::eigh::[<$name:snake:upper>].copy()]
- } };
- (from $v:ident which is [$($k:literal $(|)?)+], $scale: ident) => {
- $crate::data::renderer::load!($scale -> match $v {
- $($k => $k,)+
- })
- };
- // turn load!(s -> match x { "v" => "y" }) into match x { "v" => load!("y", s) }
- ($scale:ident -> match $v:ident { $($k:pat => $nam:literal $(,)?)+ }) => {
- match $v {
- $($k => $crate::data::renderer::load!($nam, $scale),)+
- #[allow(unreachable_patterns)]
- n => unreachable!("{n:?}"),
- }
- };
- (concat $x:literal => $v:ident which is [$($k:literal $(|)?)+], $scale: ident) => { paste::paste! {
- match $v {
- $($k =>
- #[allow(unused_unsafe)] unsafe { (match $scale {
- $crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::[<$k:snake:upper _ $x:snake:upper>],
- $crate::data::renderer::Scale::Eigth => &$crate::data::renderer::eigh::[<$k:snake:upper _ $x:snake:upper>],
- $crate::data::renderer::Scale::Full => &$crate::data::renderer::full::[<$k:snake:upper _ $x:snake:upper>],
- }.mapped($crate::utils::Cow::Ref)) },
- )+
- #[allow(unreachable_patterns)]
- n => unreachable!("{n:?}"),
- }
- } };
-}
-pub(crate) use load;
-
-/// trait for renderable objects
-pub trait Renderable {
- /// create a picture
- #[must_use = "i did so much work for you"]
- fn render(&self) -> Image<Vec<u8>, 3>;
-}
-
-impl Renderable for Schematic {
- /// creates a picture of a schematic. Bridges and node connections are not drawn.
- /// ```
- /// # use mindus::*;
- /// # use mindus::block::*;
- /// let mut s = Schematic::new(2, 3);
- /// s.put(0, 0, &DISTRIBUTOR);
- /// s.put(0, 2, &ROUTER);
- /// s.put(1, 2, &COPPER_WALL);
- /// let output /*: Image */ = s.render();
- /// ```
- fn render(&self) -> Image<Vec<u8>, 3> {
- let scale = if self.width + self.height > 500 {
- Scale::Quarter
- } else {
- Scale::Full
- };
- // fill background
- // SAFETY: metal-floor is scalexscale, the output is a multiple of scale
- let x_fac = cfg!(feature = "square") as u32
- * self.height.checked_sub(self.width).unwrap_or(0) as u32
- + 2;
- let y_fac = cfg!(feature = "square") as u32
- * self.width.checked_sub(self.height).unwrap_or(0) as u32
- + 2;
- let mut bg = unsafe {
- load!("metal-floor", scale).repeated(
- scale * (self.width + x_fac as usize) as u32,
- scale * (self.height + y_fac as usize) as u32,
- )
- };
- let mut canvas = Image::alloc(bg.width(), bg.height());
- for (GridPos(x, y), tile) in self.block_iter() {
- let ctx = tile.block.wants_context().then(|| {
- let pctx = PositionContext {
- position: GridPos(x, y),
- width: self.width,
- height: self.height,
- };
- let (cross, corners) = self.cross(&pctx);
- RenderingContext {
- cross,
- corners,
- position: pctx,
- }
- });
- let x = x as u32 - ((tile.block.get_size() - 1) / 2) as u32;
- let y = self.height as u32 - y as u32 - ((tile.block.get_size() / 2) + 1) as u32;
- unsafe {
- canvas.as_mut().overlay_at(
- &tile.image(
- ctx.as_ref(),
- tile.get_rotation().unwrap_or(Rotation::Up),
- scale,
- ),
- scale * (x + x_fac / 2),
- scale * (y + y_fac / 2),
- )
- };
- }
- for (p, b) in self.block_iter() {
- let Some(&State::Point(mut relative)) = b.get_state() else {
- continue;
- };
- let directional = matches!(b.block.name(), "duct-bridge" | "reinforced-bridge-conduit");
- if false {
- let offset = match b.rot {
- Rotation::Right => (1, 0),
- Rotation::Down => (0, -1),
- Rotation::Left => (-1, 0),
- Rotation::Up => (0, 1),
- };
- relative = successors(Some(offset), |&(x, y)| Some((x + offset.0, y + offset.1)))
- .take(4)
- .find(|x| {
- self.get((p.0 as i32 + x.0) as _, (p.1 as i32 + x.1) as _)
- .ok()
- .flatten()
- .is_some_and(|x| x.block == b.block)
- });
- }
- if let Some(relative) = relative
- && relative != (0, 0)
- && let n @ ("bridge-conveyor" | "bridge-conduit" | "phase-conveyor"
- | "phase-conduit") = b.block.name()
- && let Ok(Some(x)) = self.get(
- (p.0 as i32 + relative.0) as _,
- (p.1 as i32 + relative.1) as _,
- )
- && x.block.name() == n
- {
- let mut bridge = load!(concat "bridge" => n which is ["bridge-conveyor" | "bridge-conduit" | "phase-conveyor" | "phase-conduit" | "duct-bridge" | "reinforced-bridge-conduit"], scale);
-
- /*
- let mut bridge = bridge.own();
- bridge.chunked_mut().for_each(|x| match &mut x[3] {
- 0 => (),
- y => *y = (*y as f32 * 0.20) as u8,
- });
- bridge.save(format!("{n}-bridge.png"));
- let mut bridge = ImageHolder::from(bridge);
- */
- if relative.1 != 0 {
- // continue;
- bridge =
- Image::build(bridge.height(), bridge.width()).buf(bridge.take_buffer());
- }
- let arrow = load!(concat "arrow" => n which is ["bridge-conveyor"| "bridge-conduit" | "phase-conveyor" | "phase-conduit" | "duct-bridge" | "reinforced-bridge-conduit"], scale);
- /*
- let mut arrow = arrow.own();
- arrow.chunked_mut().for_each(|x| match &mut x[3] {
- 0 => (),
- y => *y = (*y as f32 * 0.20) as u8,
- });
- arrow.save(format!("{n}-arrow.png"));
- let mut arrow = ImageHolder::from(arrow);
- */
-
- for index in if relative.0 > 0 {
- Either::Right(
- scale.px() as i32 * 2..scale.px() as i32 * relative.0 + scale.px() as i32,
- )
- } else {
- Either::Left(
- relative.0 * scale.px() as i32 + scale.px() as i32 * 2..scale.px() as i32,
- )
- } {
- unsafe {
- canvas.overlay_blended_at(
- &bridge,
- (p.0 as i32 * scale.px() as i32 + index) as u32,
- scale * (self.height as u32 - p.1 as u32 - 1 + y_fac / 2),
- )
- };
- }
-
- for index in if relative.1 > 0 {
- Either::Right(
- -(scale.px() as i32) - scale.px() as i32 * (relative.1 - 1)
- ..-(scale.px() as i32),
- )
- } else {
- Either::Left(0..(-relative.1 - 1) * scale.px() as i32)
- } {
- let y =
- ((self.height as i32 - p.1 as i32 + 1) * scale.px() as i32 + index) as u32;
-
- unsafe {
- canvas.overlay_blended_at(&bridge, scale * (p.0 as u32 + x_fac / 2), y)
- };
- }
- if relative.0 != 0 {
- unsafe {
- canvas.overlay_blended_at(
- &arrow.rotated(if directional {
- b.rot.rotated(false).count()
- } else if relative.0 < 0 {
- 2
- } else {
- 0
- }),
- scale.px() as u32
- + ((scale * p.0 as u32).cast_signed()
- + (scale.px() as i32 * relative.0 / 2))
- as u32,
- (y_fac / 2 + scale * (self.height as u32 - p.1 as u32)) - 1,
- )
- };
- } else {
- unsafe {
- canvas.overlay_blended_at(
- &arrow.rotated(if directional {
- b.rot.rotated(false).count()
- } else if relative.1 < 0 {
- 1
- } else {
- 3
- }),
- (scale * p.0 as u32) + (x_fac / 2 + scale.px() as u32) - 1,
- scale.px() as u32
- + ((scale * (self.height as u32 - p.1 as u32 - 1)).cast_signed()
- + (scale.px() as i32 * -relative.1 / 2))
- as u32,
- );
- }
- }
- }
- }
-
- if matches!(scale, Scale::Full) {
- ImageUtils::shadow(&mut canvas);
- unsafe { bg.overlay_blended(&canvas) };
- } else {
- unsafe { bg.overlay(&canvas) };
- }
- bg
- }
-}
-
-impl Renderable for Map {
- /// Draws a map
- #[implicit_fn::implicit_fn]
- fn render(&self) -> Image<Vec<u8>, 3> {
- let scale = if self.width + self.height < 600 {
- Scale::Full
- } else if self.width + self.height < 4000 {
- Scale::Quarter
- } else {
- Scale::Eigth
- };
- use crate::data::map::table;
- let mut img = uninit::Image::<_, 3>::new(
- (scale * self.width as u32).try_into().unwrap(),
- (scale * self.height as u32).try_into().unwrap(),
- );
- // loop1 draws the floor
- for y in 0..self.height {
- for x in 0..self.width {
- // Map::new() allocates w*h items
- let j = x + self.width * y;
- let tile = unsafe { self.tiles.get_unchecked(j) };
- let y = self.height - y - 1;
- // println!("draw {tile:?} ({x}, {y})");
-
- if [
- Type::ColoredFloor,
- Type::MetalTiles1,
- Type::MetalTiles2,
- Type::MetalTiles3,
- Type::MetalTiles4,
- Type::MetalTiles5,
- Type::MetalTiles6,
- Type::MetalTiles7,
- Type::MetalTiles8,
- Type::MetalTiles9,
- Type::MetalTiles10,
- Type::MetalTiles11,
- Type::MetalTiles12,
- ]
- .contains(&tile.floor)
- {
- let mask = crate::data::autotile::nbors(
- self.corners(j).map(_.map(_.floor)),
- self.cross(j).map(_.map(_.floor)),
- tile.floor,
- );
- let i =
- &crate::data::autotile::select(tile.floor.get_name(), mask)[scale as usize];
- if tile.floor == Type::ColoredFloor {
- let mut i = i.boxed();
- unsafe {
- img.overlay_at(
- &i.as_mut()
- .tint(tile.nd.skip::<3>().take::<3>().into())
- .as_ref(),
- scale * x as u32,
- scale * y as u32,
- )
- };
- } else {
- unsafe { img.overlay_at(i, scale * x as u32, scale * y as u32) };
- }
- } else {
- unsafe {
- img.overlay_at(
- &table(tile.floor, scale),
- scale * x as u32,
- scale * y as u32,
- );
- }
- }
- }
- }
- let mut img = unsafe { img.assume_init() };
- // loop2 draws the buildings
- for y in 0..self.height {
- for x in 0..self.width {
- let j = x + self.width * y;
- let tile = unsafe { self.tiles.get_unchecked(j) };
- let y = self.height - y - 1;
- if let Some(build) = tile.build() {
- let s = build.block.get_size();
- let x = x
- - (match s {
- 1 | 2 => 0,
- 3 | 4 => 1,
- 5 | 6 => 2,
- 7 | 8 => 3,
- 9 => 4,
- // SAFETY: no block too big
- _ => unsafe { std::hint::unreachable_unchecked() },
- }) as usize;
- let y = y
- - (match s {
- 1 => 0,
- 2 | 3 => 1,
- 4 | 5 => 2,
- 6 | 7 => 3,
- 8 | 9 => 4,
- // SAFETY: no block too big
- _ => unsafe { std::hint::unreachable_unchecked() },
- }) as usize;
- if unlikely(matches!(
- build.block.name,
- Type::ColoredWall | Type::MetalWall1 | Type::MetalWall2 | Type::MetalWall3
- )) {
- let mask = crate::data::autotile::nbors(
- self.corners(j)
- .map(|x| x.and_then(|x| x.build().map(|b| b.block.name))),
- self.cross(j)
- .map(|x| x.and_then(|x| x.build().map(|b| b.block.name))),
- build.block.name,
- );
- let i =
- crate::data::autotile::select(build.block.name(), mask)[scale as usize];
- if build.block.name == Type::ColoredWall {
- unsafe {
- img.overlay_at(
- &i.boxed()
- .as_mut()
- .tint(tile.nd.skip::<3>().take::<3>().into())
- .as_ref(),
- scale * x as u32,
- scale * y as u32,
- )
- };
- } else {
- unsafe { img.overlay_at(&i, scale * x as u32, scale * y as u32) };
- }
- continue;
- }
- let ctx = build.block.wants_context().then(|| {
- let pctx = PositionContext {
- position: GridPos(x, y),
- width: self.width,
- height: self.height,
- };
- RenderingContext {
- cross: self
- .cross(j)
- .map(|b| b.and_then(|b| Some((b.get_block()?, b.get_rotation()?)))),
- corners: Default::default(),
- position: pctx,
- }
- });
- unsafe {
- img.as_mut().overlay_at(
- &tile.build_image(ctx.as_ref(), scale),
- scale * x as u32,
- scale * y as u32,
- )
- };
- }
- }
- }
- /// loop 3 for the ores
- for y in 0..self.height {
- for x in 0..self.width {
- let j = x + self.width * y;
- let tile = unsafe { self.tiles.get_unchecked(j) };
- let y = self.height - y - 1;
-
- macro_rules! f {
- ($($x: literal)+) => { paste::paste!{
- ([$(load!([<rune _ overlay $x>] ),)+], [$(load!([<rune _ overlay _ crux $x>] ),)+])
- }};
- }
- const RUNES: ([[Image<&[u8], 4>; 3]; 109], [[Image<&[u8], 4>; 3]; 109]) = f![0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108];
-
- if tile.has_ore() {
- match tile.ore {
- Type::RuneOverlay => unsafe {
- img.overlay_at(
- &RUNES.0[tile.nd[2] as usize][scale as usize],
- scale * x as u32,
- scale * y as u32,
- );
- },
- Type::RuneOverlayCrux => unsafe {
- img.overlay_at(
- &RUNES.1[tile.nd[2] as usize][scale as usize],
- scale * x as u32,
- scale * y as u32,
- );
- },
- Type::CharacterOverlay | Type::CharacterOverlayWhite => {
- macro_rules! f {
- ($($x: literal)+) => { paste::paste!{
- [$(load!([<character _ overlay $x>] ),)+]
- }};
- }
-
- const LETTERS: [[Image<&[u8], 4>; 3]; 64] = f![0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63];
- unsafe {
- img.overlay_at(
- LETTERS[(tile.nd[2] & 0x3f) as usize][scale as usize]
- .mapped(image::Cow::Ref)
- .rotate(4 - (tile.nd[2] >> 6)),
- scale * x as u32,
- scale * y as u32,
- )
- };
- }
- ore => unsafe {
- img.overlay_at(&table(ore, scale), scale * x as u32, scale * y as u32);
- },
- }
- }
- }
- }
- // loop4 draws the units
- for entity in &self.entities {
- // bounds checks
- let (x, y) = (
- entity.state.position.0 as u32,
- self.height as u32 - entity.state.position.1 as u32 - 1,
- );
- if x < 10 || x as usize > self.width - 10 || y < 10 || y as usize > self.height - 10 {
- continue;
- }
- unsafe {
- img.as_mut()
- .overlay_at(&entity.draw(scale), scale * x, scale * y)
- };
- }
- img
- }
-}
-
-#[test]
-fn all_blocks() {
- use crate::block::content::Type;
- use crate::content::Content;
- for t in 19..Type::WorldMessage as u16 {
- let t = Type::try_from(t).unwrap();
- if matches!(t, |Type::Empty| Type::SlagCentrifuge
- | Type::HeatReactor
- | Type::LegacyMechPad
- | Type::LegacyUnitFactory
- | Type::LegacyUnitFactoryAir
- | Type::LegacyUnitFactoryGround
- | Type::CommandCenter)
- {
- continue;
- }
- let name = t.get_name();
- let t = crate::block::BLOCK_REGISTRY.get(name).unwrap();
- let _ = t.image(
- None,
- Some(&RenderingContext {
- corners: [None; 4],
- cross: [None; 4],
- position: PositionContext {
- position: GridPos(0, 0),
- width: 5,
- height: 5,
- },
- }),
- Rotation::Up,
- Scale::Quarter,
- );
- }
-}
-
-pub fn draw_units(
- map: &mut crate::data::map::MapReader,
- mut img: Image<&mut [u8], 3>,
- size: (u16, u16),
-) -> Result<(), super::map::ReadError> {
- use std::ops::CoroutineState::*;
- let scale = if size.0 + size.1 < 2000 {
- Scale::Quarter
- } else {
- Scale::Eigth
- };
-
- let mut co = map.entities()?;
- let n = match Pin::new(&mut co).resume(()) {
- Yielded(crate::data::map::EntityData::Length(x)) => x,
- Complete(Err(e)) => return Err(e),
- _ => unreachable!(),
- };
- 'out: {
- for _ in 0..n {
- match Pin::new(&mut co).resume(()) {
- Yielded(crate::data::map::EntityData::Data(entity)) => {
- // bounds checks
- let (x, y) = (
- entity.state.position.0 as u32,
- size.1 as u32 - entity.state.position.1 as u32 - 1,
- );
- if x < 10
- || x as usize > size.0 as usize - 10
- || y < 10
- || y as usize > size.1 as usize - 10
- {
- continue;
- }
- unsafe {
- img.as_mut()
- .overlay_at(&entity.draw(scale), scale * x, scale * y)
- };
- }
- Complete(Err(e)) => return Err(e),
- Complete(Ok(())) => break 'out,
- x => unreachable!("{x:?}"),
- }
- }
- match Pin::new(&mut co).resume(()) {
- Complete(Ok(())) => (),
- _ => unreachable!(),
- };
- }
- Ok(())
-}
-
-/// Draws a map in a single pass.
-/// This is quite fast, but, unfortunately, has no memory, so conveyors will be drawing imporperly. As will sorters.
-///
-/// Reader must have read to the map section.
-/// Will walk through the map section. use [`draw_units`] after, if you like.
-pub fn draw_map_single(
- map: &mut crate::data::map::MapReader,
- r: Registrar,
-) -> Result<(Image<Box<[u8]>, 3>, (u16, u16)), super::map::ReadError> {
- use std::ops::CoroutineState::*;
- let mut co = map.thin_map(r)?;
- let (w, h) = match Pin::new(&mut co).resume(()) {
- Yielded(ThinMapData::Init { width, height }) => (width, height),
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- };
- let scale = if w + h < 2000 {
- Scale::Quarter
- } else {
- Scale::Eigth
- };
- let mut img = uninit::Image::<_, 3>::new(
- (scale * w as u32).try_into().unwrap(),
- (scale * h as u32).try_into().unwrap(),
- );
- use crate::data::map::table;
- // loop1 draws the floor
- for y in 0..h {
- for x in 0..w {
- let (floor, ore) = match Pin::new(&mut co).resume(()) {
- Yielded(ThinMapData::Tile { floor, ore }) => (floor, ore),
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- };
- let y = h - y - 1;
- // println!("draw tile {floor} {ore} @ {x} {y}");
- unsafe { img.overlay_at(&table(floor, scale), scale * x as u32, scale * y as u32) };
- if ore != Type::Air {
- unsafe {
- img.overlay_at(&table(ore, scale), scale * x as u32, scale * y as u32);
- }
- }
- }
- }
- let mut img = unsafe { img.assume_init() }.boxed();
- let mut i = 0;
- while i < (w as usize * h as usize) {
- let mut draw = |i, r, b: &'static crate::block::Block| {
- let x = i % w as usize;
- let y = i / w as usize;
- let y = h as usize - y - 1;
- let s = b.get_size();
- let x = x
- - (match s {
- 1 | 2 => 0,
- 3 | 4 => 1,
- 5 | 6 => 2,
- 7 | 8 => 3,
- 9 => 4,
- // SAFETY: no block too big
- _ => unsafe { std::hint::unreachable_unchecked() },
- }) as usize;
- let y = y
- - (match s {
- 1 => 0,
- 2 | 3 => 1,
- 4 | 5 => 2,
- 6 | 7 => 3,
- 8 | 9 => 4,
- // SAFETY: no block too big
- _ => unsafe { std::hint::unreachable_unchecked() },
- }) as usize;
- let ctx = b.wants_context().then(|| {
- let pctx = PositionContext {
- position: GridPos(x, y),
- width: w as usize,
- height: h as usize,
- };
- RenderingContext {
- corners: [None; 4],
- cross: [None; 4], // woe
- position: pctx,
- }
- });
- unsafe {
- img.as_mut().overlay_at(
- &b.image(None, ctx.as_ref(), r, scale),
- scale * x as u32,
- scale * y as u32,
- )
- };
- };
- match Pin::new(&mut co).resume(()) {
- Yielded(ThinMapData::Bloc(ThinBloc::Many(None, n))) => {
- i += n as usize;
- }
- Yielded(ThinMapData::Bloc(ThinBloc::Build(r, bloc, _))) => {
- draw(i, r, bloc);
- }
- Yielded(ThinMapData::Bloc(ThinBloc::Many(Some(bloc), n))) => {
- for i in i..=i + n as usize {
- draw(i, Rotation::Up, bloc);
- }
- i += n as usize;
- }
- Complete(Err(x)) => return Err(x),
- x => unreachable!("{x:?}"),
- }
- i += 1;
- }
- match Pin::new(&mut co).resume(()) {
- Complete(Ok(())) => (),
- f => unreachable!("{f:?}"),
- };
-
- Ok((img, (w, h)))
-}
-
-/// Draws a map in a single pass. Uses the silly team color thing that mindustry has.
-/// probably broken- if you want to use this ask me to update the block2color
-pub fn draw_map_simple(
- map: &mut crate::data::map::MapReader,
- r: Registrar,
-) -> Result<(Image<Box<[u8]>, 3>, (u16, u16)), super::map::ReadError> {
- use std::ops::CoroutineState::*;
- let mut co = map.thin_map(r)?;
- let (w, h) = match Pin::new(&mut co).resume(()) {
- Yielded(ThinMapData::Init { width, height }) => (width, height),
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- };
- let mut img = uninit::Image::<u8, 3>::new(
- (w as u32).try_into().unwrap(),
- (h as u32).try_into().unwrap(),
- );
- // loop1 draws the floor
- for y in 0..h {
- for x in 0..w {
- let (floor, ore) = match Pin::new(&mut co).resume(()) {
- Yielded(ThinMapData::Tile { floor, ore }) => (floor, ore),
- Complete(Err(x)) => return Err(x),
- _ => unreachable!(),
- };
- let t = (ore != Type::Air).then_some(ore).unwrap_or(floor);
- let y = h - y - 1;
- let i1 = img.at(x as u32, y as u32) as usize;
- unsafe {
- img.slice(i1..i1 + 3)
- .write_copy_of_slice(&BLOCK2COLOR[t as u16 as usize][..])
- };
- }
- }
- let mut img = unsafe { img.assume_init() }.boxed();
- let mut i = 0;
- while i < (w as usize * h as usize) {
- let mut draw = |i, b: &'static crate::block::Block, team: Team| {
- let x = i % w as usize;
- let y = i / w as usize;
- let y = h as usize - y - 1;
- let s = b.get_size();
- let x = x
- - (match s {
- 1 | 2 => 0,
- 3 | 4 => 1,
- 5 | 6 => 2,
- 7 | 8 => 3,
- 9 => 4,
- // SAFETY: no block too big
- _ => unsafe { std::hint::unreachable_unchecked() },
- }) as usize;
- let y = y
- - (match s {
- 1 => 0,
- 2 | 3 => 1,
- 4 | 5 => 2,
- 6 | 7 => 3,
- 8 | 9 => 4,
- // SAFETY: no block too big
- _ => unsafe { std::hint::unreachable_unchecked() },
- }) as usize;
- for x in x..(x as usize + s as usize).min(w as usize) {
- for y in y..(y as usize + s as usize).min(h as usize) {
- unsafe {
- img.set_pixel(x as u32, y as u32, &<[u8; 3]>::from(team.color()));
- }
- }
- }
- };
- match Pin::new(&mut co).resume(()) {
- Yielded(ThinMapData::Bloc(ThinBloc::Many(None, n))) => {
- i += n as usize;
- }
- Yielded(ThinMapData::Bloc(ThinBloc::Build(_, bloc, t))) => {
- draw(i, bloc, t);
- }
- Yielded(ThinMapData::Bloc(ThinBloc::Many(Some(bloc), n))) => {
- for i in i..=i + n as usize {
- draw(i, bloc, Team::DERELICT);
- }
- i += n as usize;
- }
- Complete(Err(x)) => return Err(x),
- x => unreachable!("{x:?}"),
- }
- i += 1;
- }
- match Pin::new(&mut co).resume(()) {
- Complete(Ok(())) => (),
- f => unreachable!("{f:?}"),
- };
-
- Ok((img, (w, h)))
-}
diff --git a/mindus/src/exe/draw.rs b/mindus/src/exe/draw.rs
deleted file mode 100644
index 6bf8895..0000000
--- a/mindus/src/exe/draw.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-use mindus::data::DataRead;
-use mindus::{Schematic, Serializable};
-use std::env::Args;
-
-use crate::print_err;
-
-pub fn main(args: Args) {
- // process schematics from command line
- for curr in args {
- match if curr.ends_with(".msch") {
- let Ok(v) = std::fs::read(&curr) else {
- panic!("no file found");
- };
- Schematic::deserialize(&mut DataRead::new(&v))
- } else {
- match Schematic::deserialize_base64(&curr) {
- Err(e) => {
- print_err!(e, "Could not read schematic");
- continue;
- }
- Ok(o) => Ok(o),
- }
- } {
- Ok(s) => {
- println!("{curr} {}, {:?}", s.tags.get("name").unwrap(), &s.tags);
- let i = mindus::Renderable::render(&s);
- if let Ok(v) = std::env::var("SAVE")
- && v == "1"
- {
- i.save("x.png");
- println!("drawn");
- continue;
- }
- }
- // continue processing literals & maybe interactive mode
- Err(e) => {
- print_err!(e, "Could not read schematic");
- }
- }
- }
-}
diff --git a/mindus/src/exe/map.rs b/mindus/src/exe/map.rs
deleted file mode 100644
index f571761..0000000
--- a/mindus/src/exe/map.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-use mindus::data::DataRead;
-use mindus::{Map, Renderable, Serializable};
-use std::env::Args;
-
-use super::print_err;
-
-pub fn main(args: Args) {
- // process schematics from command line
- for curr in args {
- let Ok(s) = std::fs::read(curr) else {
- continue;
- };
- match (|| {
- let m = Map::deserialize(&mut DataRead::new(&s))?;
- println!(
- "rendering {}",
- m.tags.get("name").map_or("<unknown>", |v| v)
- );
- Ok::<_, mindus::data::map::ReadError>(m.render())
- })() {
- Err(e) => print_err!(e, "fail"),
- Ok(m) => {
- if let Ok(v) = std::env::var("SAVE")
- && v == "1"
- {
- m.save("x.png");
- continue;
- }
- }
- }
- }
-}
diff --git a/mindus/src/item/storage.rs b/mindus/src/item/storage.rs
deleted file mode 100644
index 7fccccc..0000000
--- a/mindus/src/item/storage.rs
+++ /dev/null
@@ -1,442 +0,0 @@
-use std::fmt;
-use std::iter::{Enumerate, FusedIterator};
-use std::marker::PhantomData;
-use std::slice;
-
-use crate::item;
-
-#[derive(Clone, Eq)]
-/// stores data
-pub struct Storage<T> {
- base: Vec<u32>,
- total: u64,
- holds: PhantomData<T>,
-}
-
-pub type ItemStorage = Storage<item::Type>;
-
-impl<T> Default for Storage<T> {
- fn default() -> Self {
- Self {
- base: Vec::default(),
- total: 0,
- holds: PhantomData,
- }
- }
-}
-
-impl<T: std::fmt::Debug + TryFrom<u16>> std::fmt::Debug for Storage<T> {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- f.debug_map().entries(self.iter_nonzero()).finish()
- }
-}
-
-impl<T: TryFrom<u16> + fmt::Debug> fmt::Display for Storage<T> {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- f.debug_map().entries(self.iter_nonzero()).finish()
- }
-}
-
-impl<T> Storage<T>
-where
- u16: From<T>,
-{
- #[must_use]
- /// create a new storage
- ///
- /// ```
- /// # use mindus::item::storage::ItemStorage;
- /// // ItemStorage is a alias to Storage<Item>
- /// let s = ItemStorage::new();
- /// ```
- pub fn new() -> Self {
- Self::default()
- }
-
- #[must_use]
- /// total items
- pub const fn get_total(&self) -> u64 {
- self.total
- }
-
- #[must_use]
- /// check if its empty
- ///
- /// ```
- /// # use mindus::item::storage::ItemStorage;
- /// # use mindus::item;
- ///
- /// let mut s = ItemStorage::new();
- /// assert!(s.is_empty());
- /// s.set(item::Type::Copper, 500);
- /// assert!(!s.is_empty());
- /// s.sub(item::Type::Copper, 500, 0);
- /// assert!(s.is_empty());
- /// ```
- pub const fn is_empty(&self) -> bool {
- self.total == 0
- }
-
- pub fn reserve(&mut self, n: usize) {
- self.base.reserve_exact(n)
- }
-
- /// get item count of certain element
- ///
- /// ```
- /// # use mindus::item::storage::ItemStorage;
- /// # use mindus::item;
- ///
- /// let mut s = ItemStorage::new();
- /// assert!(s.get(item::Type::Coal) == 0);
- /// s.set(item::Type::Coal, 500);
- /// assert!(s.get(item::Type::Titanium) == 0);
- /// assert!(s.get(item::Type::Coal) == 500);
- /// s.sub(item::Type::Coal, 500, 0);
- /// assert!(s.get(item::Type::Coal) == 0);
- /// ```
- #[must_use]
- pub fn get(&self, ty: T) -> u32 {
- self.base.get(u16::from(ty) as usize).copied().unwrap_or(0)
- }
- /// set item count of certain element
- ///
- /// ```
- /// # use mindus::item::storage::ItemStorage;
- /// # use mindus::item;
- ///
- /// let mut s = ItemStorage::new();
- /// s.set(item::Type::Coal, 500);
- /// s.set(item::Type::Copper, 500);
- /// assert!(s.get(item::Type::Copper) == 500);
- /// ```
- pub fn set(&mut self, ty: T, count: u32) -> u32 {
- let idx = u16::from(ty) as usize;
- match self.base.get_mut(idx) {
- None => {
- self.base.resize(idx + 1, 0);
- self.base[idx] = count;
- self.total += u64::from(count);
- 0
- }
- Some(curr) => {
- let prev = *curr;
- self.total = self.total - u64::from(prev) + u64::from(count);
- *curr = count;
- prev
- }
- }
- }
-
- /// add to a certain elements item count, capping.
- ///
- /// ```
- /// # use mindus::item::storage::ItemStorage;
- /// # use mindus::item;
- ///
- /// let mut s = ItemStorage::new();
- /// s.add(item::Type::Coal, 500, 500);
- /// assert!(s.get(item::Type::Coal) == 500);
- /// s.add(item::Type::Coal, 500, 10000);
- /// assert!(s.get(item::Type::Coal) == 1000);
- /// s.add(item::Type::Coal, 500, 1250);
- /// assert!(s.get(item::Type::Coal) == 1250);
- /// ```
- pub fn add(&mut self, ty: T, add: u32, max: u32) -> (u32, u32) {
- let idx = u16::from(ty) as usize;
- match self.base.get_mut(idx) {
- None => {
- let actual = add.min(max);
- self.base.resize(idx + 1, 0);
- self.base[idx] = actual;
- self.total += u64::from(add);
- (actual, actual)
- }
- Some(curr) => {
- if *curr < max {
- let actual = add.min(max - *curr);
- *curr += actual;
- self.total += u64::from(actual);
- (actual, *curr)
- } else {
- (0, *curr)
- }
- }
- }
- }
-
- /// like [`Storage::add`] but fails
- pub fn try_add(&mut self, ty: T, add: u32, max: u32) -> Result<(u32, u32), TryAddError> {
- let idx = u16::from(ty) as usize;
- match self.base.get_mut(idx) {
- None => {
- if add <= max {
- self.base.resize(idx + 1, 0);
- self.base[idx] = add;
- self.total += u64::from(add);
- Ok((add, add))
- } else {
- Err(TryAddError { have: 0, add, max })
- }
- }
- Some(curr) => {
- if *curr <= max && max - *curr <= add {
- *curr += add;
- self.total += u64::from(add);
- Ok((add, *curr))
- } else {
- Err(TryAddError {
- have: *curr,
- add,
- max,
- })
- }
- }
- }
- }
-
- pub fn sub(&mut self, ty: T, sub: u32, min: u32) -> (u32, u32) {
- match self.base.get_mut(u16::from(ty) as usize) {
- None => (0, 0),
- Some(curr) => {
- if *curr > min {
- let actual = sub.min(*curr - min);
- *curr -= actual;
- self.total -= u64::from(actual);
- (actual, *curr)
- } else {
- (0, *curr)
- }
- }
- }
- }
-
- pub fn try_sub(&mut self, ty: T, sub: u32, min: u32) -> Result<(u32, u32), TrySubError> {
- let idx = u16::from(ty) as usize;
- match self.base.get_mut(idx) {
- None => Err(TrySubError { have: 0, sub, min }),
- Some(curr) => {
- if *curr >= min && *curr - min >= sub {
- *curr -= sub;
- self.total -= u64::from(sub);
- Ok((sub, *curr))
- } else {
- Err(TrySubError {
- have: *curr,
- sub,
- min,
- })
- }
- }
- }
- }
-
- pub fn add_all(&mut self, other: &Storage<T>, max_each: u32) -> (u64, u64) {
- let mut added = 0u64;
- if max_each > 0 && other.total > 0 {
- let mut iter = other.base.iter().enumerate();
- // resize our vector only once and if necessary
- let (last, add_last) = iter.rfind(|(_, n)| **n != 0).unwrap();
- if self.base.len() <= last {
- self.base.resize(last + 1, 0);
- }
- // process items by increasing ID
- for (idx, add) in iter {
- let curr = self.base[idx];
- if curr < max_each {
- let actual = (*add).min(max_each - curr);
- self.base[idx] += actual;
- added += u64::from(actual);
- }
- }
- // process the final element (which we've retrieved first)
- let curr = self.base[last];
- if curr < max_each {
- let actual = (*add_last).min(max_each - curr);
- self.base[last] += actual;
- added += u64::from(actual);
- }
- // update total
- self.total += added;
- }
- (added, self.total)
- }
-
- pub fn pull_all(&mut self, other: &mut Storage<T>, max_each: u32) -> (u64, u64, u64) {
- let mut added = 0u64;
- if max_each > 0 && other.total > 0 {
- let mut iter = other.base.iter_mut().enumerate();
- // resize our vector only once and if necessary
- let (last, add_last) = iter.rfind(|(_, n)| **n != 0).unwrap();
- if self.base.len() <= last {
- self.base.resize(last + 1, 0);
- }
- // process items by increasing ID
- for (idx, add) in iter {
- let curr = self.base[idx];
- if curr < max_each {
- let actual = (*add).min(max_each - curr);
- self.base[idx] += actual;
- *add -= actual;
- added += u64::from(actual);
- }
- }
- // process the final element (which we've retrieved first)
- let curr = self.base[last];
- if curr < max_each {
- let actual = (*add_last).min(max_each - curr);
- self.base[last] += actual;
- *add_last -= actual;
- added += u64::from(actual);
- }
- // update totals
- self.total += added;
- other.total -= added;
- }
- (added, self.total, other.total)
- }
-
- pub fn sub_all(&mut self, other: &Storage<T>, min_each: u32) -> (u64, u64) {
- let mut subbed = 0u64;
- if self.total > 0 && other.total > 0 {
- // no need for resizing, we only remove
- // process items by increasing ID
- for (idx, sub) in other.base.iter().enumerate() {
- if let Some(curr) = self.base.get(idx) {
- if *curr > min_each {
- let actual = (*sub).min(*curr - min_each);
- self.base[idx] -= actual;
- subbed += u64::from(actual);
- }
- } else {
- break;
- }
- }
- // update total
- self.total -= subbed;
- }
- (subbed, self.total)
- }
-
- pub fn diff_all(&mut self, other: &mut Storage<T>, min_each: u32) -> (u64, u64, u64) {
- let mut subbed = 0u64;
- if self.total > 0 && other.total > 0 {
- // no need for resizing, we only remove
- // consider only indexes present in both
- let end = self.base.len().min(other.base.len());
- let lhs = &mut self.base[..end];
- let rhs = &mut other.base[..end];
- // process items by increasing ID
- for (l, r) in lhs.iter_mut().zip(rhs) {
- if *l > min_each && *r > min_each {
- let actual = (*l - min_each).min(*r - min_each);
- *l -= actual;
- *r -= actual;
- subbed -= u64::from(actual);
- }
- }
- // update totals
- self.total -= subbed;
- other.total -= subbed;
- }
- (subbed, self.total, other.total)
- }
-
- pub fn clear(&mut self) {
- self.base.clear();
- }
-}
-
-impl<T: TryFrom<u16>> Storage<T> {
- pub fn iter(&self) -> Iter<'_, T> {
- Iter {
- base: self.base.iter().enumerate(),
- all: true,
- _t: PhantomData,
- }
- }
-
- pub fn iter_nonzero(&self) -> Iter<'_, T> {
- Iter {
- base: self.base.iter().enumerate(),
- all: false,
- _t: PhantomData,
- }
- }
-}
-
-// manual because padding with zeros doesn't affect equality
-impl<T> PartialEq for Storage<T> {
- fn eq(&self, other: &Self) -> bool {
- let mut li = self.base.iter().fuse();
- let mut ri = other.base.iter().fuse();
- loop {
- match (li.next(), ri.next()) {
- (None, None) => return true,
- (l, r) => {
- if l.unwrap_or(&0) != r.unwrap_or(&0) {
- return false;
- }
- }
- }
- }
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)]
-#[error("adding {add} to current {have} would exceed {max}")]
-pub struct TryAddError {
- pub have: u32,
- pub add: u32,
- pub max: u32,
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)]
-#[error("removing {sub} from current {have} would drop below {min}")]
-pub struct TrySubError {
- pub have: u32,
- pub sub: u32,
- pub min: u32,
-}
-
-impl<'l, T: TryFrom<u16>> IntoIterator for &'l Storage<T> {
- type Item = (T, u32);
-
- type IntoIter = Iter<'l, T>;
-
- fn into_iter(self) -> Self::IntoIter {
- self.iter()
- }
-}
-
-#[derive(Clone, Debug)]
-#[must_use = "iterator is lazy"]
-pub struct Iter<'l, T: TryFrom<u16>> {
- base: Enumerate<slice::Iter<'l, u32>>,
- all: bool,
- _t: PhantomData<T>,
-}
-
-impl<'l, T: TryFrom<u16>> Iterator for Iter<'l, T> {
- type Item = (T, u32);
-
- fn next(&mut self) -> Option<Self::Item> {
- for (idx, cnt) in self.base.by_ref() {
- if *cnt > 0 || self.all {
- if let Ok(ty) = T::try_from(idx as u16) {
- return Some((ty, *cnt));
- }
- }
- }
- None
- }
-
- fn size_hint(&self) -> (usize, Option<usize>) {
- (0, self.base.size_hint().1)
- }
-}
-
-impl<'l, T: TryFrom<u16>> FusedIterator for Iter<'l, T> where
- Enumerate<slice::Iter<'l, u32>>: FusedIterator
-{
-}
diff --git a/mindus/src/lib.rs b/mindus/src/lib.rs
deleted file mode 100644
index 4541f8e..0000000
--- a/mindus/src/lib.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-//! crate for dealing with mindustry
-#![feature(
- error_generic_member_access,
- maybe_uninit_write_slice,
- try_trait_v2_residual,
- stmt_expr_attributes,
- generic_const_exprs,
- iter_from_coroutine,
- const_trait_impl,
- coroutine_trait,
- likely_unlikely,
- portable_simd,
- derive_const,
- try_trait_v2,
- try_blocks,
- const_convert,
- coroutines
-)]
-#![allow(clippy::redundant_closure_call, incomplete_features)]
-#![warn(
- clippy::multiple_unsafe_ops_per_block,
- clippy::missing_const_for_fn,
- clippy::missing_safety_doc,
- unsafe_op_in_unsafe_fn,
- clippy::dbg_macro,
- clippy::perf
-)]
-pub mod block;
-pub mod color_mapping;
-pub mod content;
-pub mod data;
-pub mod fluid;
-pub mod item;
-pub mod modifier;
-mod team;
-pub mod unit;
-mod utils;
-#[doc(inline)]
-pub use data::{Serializable, map::Map, renderer::Renderable, schematic::Schematic};
diff --git a/mindus/src/unit.rs b/mindus/src/unit.rs
deleted file mode 100644
index cb81ef7..0000000
--- a/mindus/src/unit.rs
+++ /dev/null
@@ -1,430 +0,0 @@
-//! units
-//!
-//! [source](https://github.com/Anuken/Mindustry/blob/master/core/src/mindustry/content/UnitTypes.java)
-
-use crate::Serializable;
-use crate::block::payload::read_payload;
-use crate::content::content_enum;
-use crate::data::command::UnitCommand;
-use crate::data::dynamic::DynData;
-use crate::data::entity_mapping::UnitClass;
-use crate::data::{DataRead, ReadError};
-use crate::item::Type as Item;
-use crate::modifier::Type as Status;
-use crate::team::Team;
-use crate::utils::ImageHolder;
-
-macro_rules! units {
- ($($unit:literal,)+ $(,)?) => { paste::paste! {
- content_enum! (pub enum Type / Unit for u16 | TryFromU16Error {
- $($unit,)+
- });
-
- impl Type {
- fn draw(self, s: crate::data::renderer::Scale) -> ImageHolder<4> {
- match self {
- $(Type::[<$unit:camel>] => units!(@help $unit + s),)+
- }
- }
- }
- } };
- (@help "block" + $s:expr) => { crate::data::renderer::load!("empty4", $s) };
- (@help $v:literal + $s:expr) => { crate::data::renderer::load!($v, $s) };
-}
-
-units! {
- "dagger",
- "mace",
- "fortress",
- "scepter",
- "reign",
- "nova",
- "pulsar",
- "quasar",
- "vela",
- "corvus",
- "crawler",
- "atrax",
- "spiroct",
- "arkyid",
- "toxopid",
- "flare",
- "horizon",
- "zenith",
- "antumbra",
- "eclipse",
- "mono",
- "poly",
- "mega",
- "quad",
- "oct",
- "risso",
- "minke",
- "bryde",
- "sei",
- "omura",
- "retusa",
- "oxynoe",
- "cyerce",
- "aegires",
- "navanax",
- "alpha",
- "beta",
- "gamma",
- "stell",
- "locus",
- "precept",
- "vanquish",
- "conquer",
- "merui",
- "cleroi",
- "anthicus",
- "anthicus-missile",
- "tecta",
- "collaris",
- "elude",
- "avert",
- "obviate",
- "quell",
- "quell-missile",
- "disrupt",
- "disrupt-missile",
- "renale",
- "latum",
- "evoke",
- "incite",
- "emanate",
- "block",
- "manifold",
- "assembly-drone",
- "scathe-missile",
-}
-
-#[derive(Default, Debug)]
-pub struct UnitState {
- pub ammo: f32,
- pub elevation: f32,
- pub flag: i64,
- pub health: f32,
- pub is_shooting: bool,
- pub rotation: f32,
- pub shield: f32,
- pub stack: (Option<Item>, u32),
- /// how many status can you realistically be afflicted with
- pub status: [Status; 3],
- pub team: Team,
- pub velocity: (f32, f32),
- pub position: (f32, f32),
- pub controller: Controller,
-}
-// pub trait TryThen {
-// fn try_then<O: Try<Output = Option<T>, Residual = E>, T, E, R: Try<Output = T, Residual = E>>(
-// self,
-// then: impl FnMut() -> R,
-// ) -> O;
-// }
-// impl TryThen for bool {
-// fn try_then<
-// O: Try<Output = Option<T>, Residual = E>,
-// T,
-// E,
-// R: Try<Output = T, Residual = E>,
-// >(
-// self,
-// mut then: impl FnMut() -> R,
-// ) {
-// match self {
-// false => O::from_output(None),
-// true => match then().branch() {
-// ControlFlow::Continue(x) => O::from_output(Some(x)),
-// ControlFlow::Break(x) => O::from_residual(x),
-// },
-// }
-// }
-// }
-pub trait TryThen {
- fn try_then<T, E>(self, f: impl FnMut() -> Result<T, E>) -> Result<Option<T>, E>;
-}
-impl TryThen for bool {
- fn try_then<T, E>(self, mut f: impl FnMut() -> Result<T, E>) -> Result<Option<T>, E> {
- self.then_some(()).map(|()| f()).transpose()
- }
-}
-
-#[derive(Default, Debug)]
-pub enum Controller {
- Player(i32),
- Logic(i32),
- Command {
- target: Option<i32>,
- pos: Option<(f32, f32)>,
- command: Option<UnitCommand>,
- },
- #[default]
- Assembler,
-}
-
-impl Controller {
- /// format:
- /// - match [`u8`]
- /// - (0): player
- /// - player: [`i32`]
- ///
- /// - (3): logic ai
- /// - position: [`i32`]
- ///
- /// - (6): command
- /// - has_attack: [`bool`]
- /// - has_pos: [`bool`]
- /// - if `has_pos`:
- /// - pos: ([`f32`], [`f32`])
- /// - if `has_attack`:
- /// - ty: [`i8`]
- /// - target_id: [`i32`]
- /// - command: [`i8`] attempt as [`UnitCommand`]
- /// - (_): assembler
- fn read(buff: &mut DataRead) -> Result<Controller, ReadError> {
- Ok(match buff.read_u8()? {
- 0 => Controller::Player(buff.read_i32()?),
- 3 => Controller::Logic(buff.read_i32()?),
- t @ (4 | 6 | 7 | 8 | 9) => {
- let has_attack = buff.read_bool()?;
- let pos = buff
- .read_bool()?
- .try_then::<_, ReadError>(|| try { (buff.read_f32()?, buff.read_f32()?) })?;
- let target = has_attack.try_then::<_, ReadError>(|| try {
- buff.skip(1)?;
- buff.read_i32()?
- })?;
- let n = buff.read_i8()?;
- let command = u8::try_from(n)
- .ok()
- .and_then(|x| UnitCommand::try_from(x).ok());
- if let 7 | 8 | 9 = t {
- for _ in 0..buff.read_u8()? {
- match buff.read_u8()? {
- 0 | 1 => {
- buff.read_u32()?;
- }
- 2 => {
- buff.read_f32()?;
- buff.read_f32()?;
- }
- _ => {}
- }
- }
- }
- if t == 8 {
- // stance
- buff.read_u8()?;
- } else if t == 9 {
- let stances = buff.read_u8()?;
- buff.skip(stances as _)?;
- }
- Controller::Command {
- target,
- pos,
- command,
- }
- }
- 5 => Controller::Assembler,
- _ => Controller::Assembler,
- })
- }
-}
-
-#[derive(Debug)]
-pub struct Unit {
- pub state: UnitState,
- pub ty: Type,
-}
-
-impl UnitClass {
- pub fn read(self, buff: &mut DataRead) -> Result<Unit, ReadError> {
- let _rev = buff.read_u16()?;
- let mut state = UnitState::default();
- read_abilities(buff)?;
- state.ammo = buff.read_f32()?;
- match self {
- Self::Block
- | Self::Legs
- | Self::Elevated
- | Self::Crawl
- | Self::Boat
- | Self::Tank
- | Self::Air => {
- state.controller = Controller::read(buff)?;
- state.elevation = buff.read_f32()?;
- state.flag = buff.read_i64()?;
- state.health = buff.read_f32()?;
- state.is_shooting = buff.read_bool()?;
- read_tile(buff)?;
- read_mounts(buff)?;
- }
- Self::Mech => {
- buff.skip(4)?; // base rotation
- state.controller = Controller::read(buff)?;
- state.elevation = buff.read_f32()?;
- state.flag = buff.read_i64()?;
- state.health = buff.read_f32()?;
- state.is_shooting = buff.read_bool()?;
- read_tile(buff)?;
- read_mounts(buff)?;
- }
- Self::Payload => {
- state.controller = Controller::read(buff)?;
- state.elevation = buff.read_f32()?;
- state.flag = buff.read_i64()?;
- state.health = buff.read_f32()?;
- state.is_shooting = buff.read_bool()?;
- read_tile(buff)?;
- read_mounts(buff)?;
- for _ in 0..buff.read_i32()? {
- // recursion more!
- // this is unreliable, as read_payload may not read the full block.
- // if read_plans reports a error, with a payload unit, this is why
- let _ = read_payload(buff);
- }
- }
- Self::Bomb => {
- state.controller = Controller::read(buff)?;
- state.elevation = buff.read_f32()?;
- state.flag = buff.read_i64()?;
- state.health = buff.read_f32()?;
- state.is_shooting = buff.read_bool()?;
- buff.skip(4)?; // lifetime
- read_tile(buff)?;
- read_mounts(buff)?;
- }
- Self::Tethered => {
- buff.skip(4)?;
- state.controller = Controller::read(buff)?;
- state.elevation = buff.read_f32()?;
- state.flag = buff.read_i64()?;
- state.health = buff.read_f32()?;
- state.is_shooting = buff.read_bool()?;
- read_tile(buff)?;
- read_mounts(buff)?;
- for _ in 0..buff.read_i32()? {
- // recursion more!
- read_payload(buff)?;
- }
- }
- }
- read_plans(buff)?;
- state.rotation = buff.read_f32()?;
- state.shield = buff.read_f32()?;
- buff.skip(1)?; // spawned_by_core
- state.stack = read_stack(buff)?;
- state.status = read_status(buff)?;
- state.team = Team::of(buff.read_u8()?);
- if self == Self::Bomb {
- buff.skip(4)?; // time
- }
- let ty = Type::try_from(buff.read_u16()?).unwrap();
- buff.skip(1)?; // update_building
- state.velocity = (buff.read_f32()?, buff.read_f32()?);
- state.position = (
- (buff.read_f32()? / 8.0).floor(),
- (buff.read_f32()? / 8.0).floor(),
- );
- Ok(Unit { state, ty })
- }
-}
-
-/// format:
-/// - iterate [`u8`]
-/// - ability: [`f32`]
-fn read_abilities(buff: &mut DataRead) -> Result<(), ReadError> {
- let n = buff.read_u8()? as usize;
- buff.skip(n * 4)
-}
-
-/// format:
-/// - tile: [`i32`]
-fn read_tile(buff: &mut DataRead) -> Result<(), ReadError> {
- buff.skip(4)
-}
-
-/// format:
-/// - iterate [`u8`]
-/// - state: [`u8`]
-/// - x aim: [`f32`]
-/// - y aim: [`f32`]
-fn read_mounts(buff: &mut DataRead) -> Result<(), ReadError> {
- let n = buff.read_u8()? as usize;
- buff.skip(n * 9)
-}
-
-/// format:
-/// - plan count: [`i32`]
-/// - plan_count == -1 => return
-/// - iterate `plan_count`
-/// - call [`read_plan`]
-fn read_plans(buff: &mut DataRead) -> Result<(), ReadError> {
- let used = buff.read_i32()?;
- if used == -1 {
- return Ok(());
- }
- for _ in 0..used {
- read_plan(buff)?;
- }
- Ok(())
-}
-
-/// format:
-/// - ty: [`u8`]
-/// - position: [`i32`]
-/// - if ty != 1
-/// - block: [`u16`]
-/// - rotation: [`i8`]
-/// - has_config: [`bool`]
-/// - config: [`DynData`](crate::data::dynamic::DynData)
-fn read_plan(buff: &mut DataRead) -> Result<(), ReadError> {
- let ty = buff.read_u8()?;
- buff.skip(4)?;
- if ty != 1 {
- buff.skip(4)?;
- let _ = DynData::deserialize(buff).unwrap();
- }
- Ok(())
-}
-
-/// format:
-/// - item: [`i16`] attempt into [`Item`]
-/// - count: [`u32`]
-fn read_stack(buff: &mut DataRead) -> Result<(Option<Item>, u32), ReadError> {
- let n = buff.read_i16()?;
- Ok((
- (n != -1).then(|| Item::try_from(n as u16).unwrap()),
- buff.read_u32()?,
- ))
-}
-
-/// read the status.
-/// i take only 3
-///
-/// format:
-/// - iterate [`i32`]
-/// - status: [`u16`] attempt into [`Status`]
-/// - duration: [`f32`]
-fn read_status(buff: &mut DataRead) -> Result<[Status; 3], ReadError> {
- let mut status = [Status::None, Status::None, Status::None];
- for i in 0..buff.read_i32()? {
- let this = Status::try_from(buff.read_u16()?);
- buff.skip(4)?;
- if let Ok(s) = this
- && i < 3
- {
- status[i as usize] = s;
- }
- }
- Ok(status)
-}
-
-impl Unit {
- #[inline]
- pub fn draw(&self, s: crate::data::renderer::Scale) -> ImageHolder<4> {
- self.ty.draw(s)
- }
-}
diff --git a/mindus/src/utils/image/holder.rs b/mindus/src/utils/image/holder.rs
deleted file mode 100644
index 45aab38..0000000
--- a/mindus/src/utils/image/holder.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-use super::Image;
-
-#[derive(Clone, Debug)]
-pub enum Cow {
- Ref(&'static [u8]),
- Own(Box<[u8]>),
-}
-impl From<&'static [u8]> for Cow {
- fn from(value: &'static [u8]) -> Self {
- Self::Ref(value)
- }
-}
-impl From<Box<[u8]>> for Cow {
- fn from(value: Box<[u8]>) -> Self {
- Self::Own(value)
- }
-}
-
-impl Cow {
- pub fn own(self) -> Box<[u8]> {
- match self {
- Self::Own(x) => x,
- Self::Ref(x) => x.into(),
- }
- }
-}
-impl AsRef<[u8]> for Cow {
- fn as_ref(&self) -> &[u8] {
- match self {
- Cow::Ref(x) => x,
- Cow::Own(x) => &x,
- }
- }
-}
-
-impl AsMut<[u8]> for Cow {
- fn as_mut(&mut self) -> &mut [u8] {
- match self {
- Cow::Ref(x) => {
- *self = Self::Own((*x).into());
- self.as_mut()
- }
- Cow::Own(x) => x,
- }
- }
-}
-
-pub type ImageHolder<const CHANNELS: usize> = Image<Cow, CHANNELS>;
diff --git a/mindus/src/utils/image/mod.rs b/mindus/src/utils/image/mod.rs
deleted file mode 100644
index 5953ade..0000000
--- a/mindus/src/utils/image/mod.rs
+++ /dev/null
@@ -1,72 +0,0 @@
-pub use fimg::*;
-
-mod holder;
-pub use holder::*;
-
-pub trait ImageUtils {
- /// Tint this image with the color
- fn tint(&mut self, color: (u8, u8, u8)) -> &mut Self;
- /// rotate (squares only)
- /// # Safety
- ///
- /// UB if image is not square
- unsafe fn rotate(&mut self, times: u8) -> &mut Self;
- unsafe fn rotated(mut self, times: u8) -> Self
- where
- Self: Sized,
- {
- unsafe { self.rotate(times) };
- self
- }
- /// shadow
- fn shadow(&mut self) -> &mut Self;
-}
-
-impl<T: AsMut<[u8]> + AsRef<[u8]>> ImageUtils for Image<T, 4> {
- unsafe fn rotate(&mut self, times: u8) -> &mut Self {
- match times {
- 1 => unsafe { self.rot_90() },
- 2 => self.rot_180(),
- 3 => unsafe { self.rot_270() },
- _ => {}
- }
- self
- }
-
- fn tint(&mut self, (r, g, b): (u8, u8, u8)) -> &mut Self {
- let [tr, tg, tb] = [r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0];
- for [r, g, b, _] in self.chunked_mut() {
- *r = (*r as f32 * tr) as u8;
- *g = (*g as f32 * tg) as u8;
- *b = (*b as f32 * tb) as u8;
- }
- self
- }
-
- fn shadow(&mut self) -> &mut Self {
- let mut shadow = self.as_ref().boxed();
- for [r, g, b, a] in shadow.chunked_mut() {
- if *a < 128 {
- *r /= 10;
- *g /= 10;
- *b /= 10;
- }
- }
- shadow.blur(22);
- for ([r, g, b, a], &[from_r, from_g, from_b, from_a]) in
- self.chunked_mut().zip(shadow.chunked())
- {
- if *a == 0 {
- (*r, *g, *b, *a) = (from_r, from_g, from_b, from_a);
- }
- }
- self
- }
-}
-
-#[test]
-fn x() {
- let mut x = Image::<_, 4>::open("/home/os/pod.png");
- x.as_mut().shadow();
- x.save("/home/os/shadowpod.png");
-}
diff --git a/mindus/src/utils/mod.rs b/mindus/src/utils/mod.rs
deleted file mode 100644
index 7183f0e..0000000
--- a/mindus/src/utils/mod.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-pub mod array;
-pub mod image;
-pub use self::image::{Cow, Image, ImageHolder, ImageUtils, Overlay, OverlayAt};
diff --git a/p2s/.gitignore b/p2s/.gitignore
deleted file mode 100644
index b68bac7..0000000
--- a/p2s/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-quant.png
diff --git a/p2s/Cargo.toml b/p2s/Cargo.toml
deleted file mode 100644
index 2411584..0000000
--- a/p2s/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[package]
-name = "p2s"
-version = "0.1.0"
-edition = "2021"
-
-[dependencies]
-clipp = "0.1.0"
-comat = "0.1.3"
-exoquant = "0.2.0"
-fimg = "0.4.23"
-mindus = { version = "5.0.9", path = "../mindus", default-features = false }
diff --git a/p2s/README.md b/p2s/README.md
deleted file mode 100644
index f8f2d1f..0000000
--- a/p2s/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# p2s
-
-small example showcasing schematic construction.
-this takes a png, and turns it into a sorter schematic. \ No newline at end of file
diff --git a/p2s/src/main.rs b/p2s/src/main.rs
deleted file mode 100644
index 7f894eb..0000000
--- a/p2s/src/main.rs
+++ /dev/null
@@ -1,101 +0,0 @@
-use exoquant::{ditherer, Color, Remapper, SimpleColorSpace};
-use fimg::{scale::Nearest, DynImage, Image};
-use mindus::{
- block::{Rotation, SORTER},
- data::dynamic::DynData,
- item::Type::*,
- Schematic,
-};
-use std::process::ExitCode;
-macro_rules! fail {
- () => {
- fail!("<in> (<width>x<height>)")
- };
- ($usage:literal) => {{
- eprintln!(concat!("usage: p2s ", comat::comat!($usage)));
- return ExitCode::FAILURE;
- }};
-}
-const ITEMS: [mindus::item::Type; 22] = [
- Copper,
- Lead,
- Metaglass,
- Graphite,
- Sand,
- Coal,
- Titanium,
- Thorium,
- Scrap,
- Silicon,
- Plastanium,
- PhaseFabric,
- SurgeAlloy,
- SporePod,
- BlastCompound,
- Pyratite,
- Beryllium,
- Tungsten,
- Oxide,
- Carbide,
- FissileMatter,
- DormantCyst,
-];
-
-fn main() -> ExitCode {
- let mut args = std::env::args().skip(1);
- let Some(input) = args.next() else {
- fail!("{bold_red}<input_file>{reset}");
- };
- let mut img = DynImage::open(input).to_rgb();
- let palette = ITEMS
- .map(|i| i.color())
- .map(|(r, g, b)| Color::new(r, g, b, 255));
-
- if let Some(size) = args.next() {
- let Some((w, h)) = size.split_once('x') else {
- fail!(".. <w>{bold_red}x{reset}<h>")
- };
- let Ok(w) = w.parse() else {
- fail!(".. <width: valid number>x<h>")
- };
- let Ok(h) = h.parse() else {
- fail!(".. <w>x<h: valid number>")
- };
- img = img.scale::<Nearest>(w, h);
- }
-
- let quant = Remapper::new(&palette, &SimpleColorSpace::default(), &ditherer::None).remap(
- &img.chunked()
- .map(|&[r, g, b]| Color::new(r, g, b, 255))
- .collect::<Vec<_>>(),
- img.width() as usize,
- );
- Image::<Box<[u8]>, 3>::build(img.width(), img.height())
- .buf(
- quant
- .iter()
- .map(|&i| ITEMS[i as usize].color())
- .flat_map(|(r, g, b)| [r, g, b])
- .collect(),
- )
- .scale::<Nearest>(img.width() * 4, img.height() * 4)
- .save("quant.png");
- let mut s = Schematic::new(img.width() as usize, img.height() as usize);
- for x in 0..img.width() as usize {
- for y in 0..img.height() as usize {
- s.set(
- x as usize,
- y as usize,
- &SORTER,
- DynData::Content(
- mindus::content::Type::Item,
- quant[(img.height() as usize - y - 1) * img.width() as usize + x] as u16,
- ),
- Rotation::Up,
- )
- .unwrap();
- }
- }
- clipp::copy(s.serialize_base64().unwrap());
- ExitCode::SUCCESS
-}
diff --git a/mindus/res/team_names.txt b/res/team_names.txt
index 37adee8..37adee8 100644
--- a/mindus/res/team_names.txt
+++ b/res/team_names.txt
diff --git a/src/block/campaign.rs b/src/block/campaign.rs
new file mode 100644
index 0000000..1283f3e
--- /dev/null
+++ b/src/block/campaign.rs
@@ -0,0 +1,7 @@
+//! campaign blocks
+use crate::block::make_register;
+use crate::block::simple::{cost, BasicBlock};
+make_register! {
+ "launch-pad" -> BasicBlock::new(3, true, cost!(Copper: 350, Lead: 200, Titanium: 150, Silicon: 140));
+ "interplanetary-accelerator" -> BasicBlock::new(7, true, cost!(Copper: 16000, Silicon: 11000, Thorium: 13000, Titanium: 12000, SurgeAlloy: 6000, PhaseFabric: 5000));
+}
diff --git a/src/block/content.rs b/src/block/content.rs
new file mode 100644
index 0000000..d07eb05
--- /dev/null
+++ b/src/block/content.rs
@@ -0,0 +1,420 @@
+//! everything
+use crate::content::content_enum;
+
+content_enum! {
+ pub enum Type / Block for u16 | TryFromU16Error
+ {
+ "air",
+ "spawn",
+ "cliff",
+ "build1",
+ "build2",
+ "build3",
+ "build4",
+ "build5",
+ "build6",
+ "build7",
+ "build8",
+ "build9",
+ "build10",
+ "build11",
+ "build12",
+ "build13",
+ "build14",
+ "build15",
+ "build16",
+ "deep-water",
+ "shallow-water",
+ "tainted-water",
+ "deep-tainted-water",
+ "darksand-tainted-water",
+ "sand-water",
+ "darksand-water",
+ "tar",
+ "pooled-cryofluid",
+ "molten-slag",
+ "space",
+ "empty",
+ "stone",
+ "crater-stone",
+ "char",
+ "basalt",
+ "hotrock",
+ "magmarock",
+ "sand-floor",
+ "darksand",
+ "dirt",
+ "mud",
+ "dacite",
+ "rhyolite",
+ "rhyolite-crater",
+ "rough-rhyolite",
+ "regolith",
+ "yellow-stone",
+ "carbon-stone",
+ "ferric-stone",
+ "ferric-craters",
+ "beryllic-stone",
+ "crystalline-stone",
+ "crystal-floor",
+ "yellow-stone-plates",
+ "red-stone",
+ "dense-red-stone",
+ "red-ice",
+ "arkycite-floor",
+ "arkyic-stone",
+ "rhyolite-vent",
+ "carbon-vent",
+ "arkyic-vent",
+ "yellow-stone-vent",
+ "red-stone-vent",
+ "crystalline-vent",
+ "redmat",
+ "bluemat",
+ "grass",
+ "salt",
+ "snow",
+ "ice",
+ "ice-snow",
+ "shale",
+ "moss",
+ "core-zone",
+ "spore-moss",
+ "stone-wall",
+ "spore-wall",
+ "dirt-wall",
+ "dacite-wall",
+ "ice-wall",
+ "snow-wall",
+ "dune-wall",
+ "regolith-wall",
+ "yellow-stone-wall",
+ "rhyolite-wall",
+ "carbon-wall",
+ "ferric-stone-wall",
+ "beryllic-stone-wall",
+ "arkyic-wall",
+ "crystalline-stone-wall",
+ "red-ice-wall",
+ "red-stone-wall",
+ "red-diamond-wall",
+ "sand-wall",
+ "salt-wall",
+ "shrubs",
+ "shale-wall",
+ "spore-pine",
+ "snow-pine",
+ "pine",
+ "white-tree-dead",
+ "white-tree",
+ "spore-cluster",
+ "redweed",
+ "pur-bush",
+ "yellowcoral",
+ "boulder",
+ "snow-boulder",
+ "shale-boulder",
+ "sand-boulder",
+ "dacite-boulder",
+ "basalt-boulder",
+ "carbon-boulder",
+ "ferric-boulder",
+ "beryllic-boulder",
+ "yellow-stone-boulder",
+ "arkyic-boulder",
+ "crystal-cluster",
+ "vibrant-crystal-cluster",
+ "crystal-blocks",
+ "crystal-orbs",
+ "crystalline-boulder",
+ "red-ice-boulder",
+ "rhyolite-boulder",
+ "red-stone-boulder",
+ "metal-floor",
+ "metal-floor-damaged",
+ "metal-floor-2",
+ "metal-floor-3",
+ "metal-floor-4",
+ "metal-floor-5",
+ "dark-panel-1",
+ "dark-panel-2",
+ "dark-panel-3",
+ "dark-panel-4",
+ "dark-panel-5",
+ "dark-panel-6",
+ "dark-metal",
+ "pebbles",
+ "tendrils",
+ "ore-copper",
+ "ore-lead",
+ "ore-scrap",
+ "ore-coal",
+ "ore-titanium",
+ "ore-thorium",
+ "ore-beryllium",
+ "ore-tungsten",
+ "ore-crystal-thorium",
+ "ore-wall-thorium",
+ "ore-wall-beryllium",
+ "graphitic-wall",
+ "ore-wall-tungsten",
+ "graphite-press",
+ "multi-press",
+ "silicon-smelter",
+ "silicon-crucible",
+ "kiln",
+ "plastanium-compressor",
+ "phase-weaver",
+ "surge-smelter",
+ "cryofluid-mixer",
+ "pyratite-mixer",
+ "blast-mixer",
+ "melter",
+ "separator",
+ "disassembler",
+ "spore-press",
+ "pulverizer",
+ "coal-centrifuge",
+ "incinerator",
+ "silicon-arc-furnace",
+ "electrolyzer",
+ "atmospheric-concentrator",
+ "oxidation-chamber",
+ "electric-heater",
+ "slag-heater",
+ "phase-heater",
+ "heat-redirector",
+ "heat-router",
+ "slag-incinerator",
+ "carbide-crucible",
+ "slag-centrifuge",
+ "surge-crucible",
+ "cyanogen-synthesizer",
+ "phase-synthesizer",
+ "heat-reactor",
+ "copper-wall",
+ "copper-wall-large",
+ "titanium-wall",
+ "titanium-wall-large",
+ "plastanium-wall",
+ "plastanium-wall-large",
+ "thorium-wall",
+ "thorium-wall-large",
+ "phase-wall",
+ "phase-wall-large",
+ "surge-wall",
+ "surge-wall-large",
+ "door",
+ "door-large",
+ "scrap-wall",
+ "scrap-wall-large",
+ "scrap-wall-huge",
+ "scrap-wall-gigantic",
+ "thruster",
+ "beryllium-wall",
+ "beryllium-wall-large",
+ "tungsten-wall",
+ "tungsten-wall-large",
+ "blast-door",
+ "reinforced-surge-wall",
+ "reinforced-surge-wall-large",
+ "carbide-wall",
+ "carbide-wall-large",
+ "shielded-wall",
+ "mender",
+ "mend-projector",
+ "overdrive-projector",
+ "overdrive-dome",
+ "force-projector",
+ "shock-mine",
+ "radar",
+ "build-tower",
+ "regen-projector",
+ "shockwave-tower",
+ "shield-projector",
+ "large-shield-projector",
+ "conveyor",
+ "titanium-conveyor",
+ "plastanium-conveyor",
+ "armored-conveyor",
+ "junction",
+ "bridge-conveyor",
+ "phase-conveyor",
+ "sorter",
+ "inverted-sorter",
+ "router",
+ "distributor",
+ "overflow-gate",
+ "underflow-gate",
+ "mass-driver",
+ "duct",
+ "armored-duct",
+ "duct-router",
+ "overflow-duct",
+ "underflow-duct",
+ "duct-bridge",
+ "duct-unloader",
+ "surge-conveyor",
+ "surge-router",
+ "unit-cargo-loader",
+ "unit-cargo-unload-point",
+ "mechanical-pump",
+ "rotary-pump",
+ "impulse-pump",
+ "conduit",
+ "pulse-conduit",
+ "plated-conduit",
+ "liquid-router",
+ "liquid-container",
+ "liquid-tank",
+ "liquid-junction",
+ "bridge-conduit",
+ "phase-conduit",
+ "reinforced-pump",
+ "reinforced-conduit",
+ "reinforced-liquid-junction",
+ "reinforced-bridge-conduit",
+ "reinforced-liquid-router",
+ "reinforced-liquid-container",
+ "reinforced-liquid-tank",
+ "power-node",
+ "power-node-large",
+ "surge-tower",
+ "diode",
+ "battery",
+ "battery-large",
+ "combustion-generator",
+ "thermal-generator",
+ "steam-generator",
+ "differential-generator",
+ "rtg-generator",
+ "solar-panel",
+ "solar-panel-large",
+ "thorium-reactor",
+ "impact-reactor",
+ "beam-node",
+ "beam-tower",
+ "beam-link",
+ "turbine-condenser",
+ "chemical-combustion-chamber",
+ "pyrolysis-generator",
+ "flux-reactor",
+ "neoplasia-reactor",
+ "mechanical-drill",
+ "pneumatic-drill",
+ "laser-drill",
+ "blast-drill",
+ "water-extractor",
+ "cultivator",
+ "oil-extractor",
+ "vent-condenser",
+ "cliff-crusher",
+ "plasma-bore",
+ "large-plasma-bore",
+ "impact-drill",
+ "eruption-drill",
+ "core-shard",
+ "core-foundation",
+ "core-nucleus",
+ "core-bastion",
+ "core-citadel",
+ "core-acropolis",
+ "container",
+ "vault",
+ "unloader",
+ "reinforced-container",
+ "reinforced-vault",
+ "duo",
+ "scatter",
+ "scorch",
+ "hail",
+ "wave",
+ "lancer",
+ "arc",
+ "parallax",
+ "swarmer",
+ "salvo",
+ "segment",
+ "tsunami",
+ "fuse",
+ "ripple",
+ "cyclone",
+ "foreshadow",
+ "spectre",
+ "meltdown",
+ "breach",
+ "diffuse",
+ "sublimate",
+ "titan",
+ "disperse",
+ "afflict",
+ "lustre",
+ "scathe",
+ "smite",
+ "malign",
+ "ground-factory",
+ "air-factory",
+ "naval-factory",
+ "additive-reconstructor",
+ "multiplicative-reconstructor",
+ "exponential-reconstructor",
+ "tetrative-reconstructor",
+ "repair-point",
+ "repair-turret",
+ "tank-fabricator",
+ "ship-fabricator",
+ "mech-fabricator",
+ "tank-refabricator",
+ "mech-refabricator",
+ "ship-refabricator",
+ "prime-refabricator",
+ "tank-assembler",
+ "ship-assembler",
+ "mech-assembler",
+ "basic-assembler-module",
+ "unit-repair-tower",
+ "payload-conveyor",
+ "payload-router",
+ "reinforced-payload-conveyor",
+ "reinforced-payload-router",
+ "payload-mass-driver",
+ "large-payload-mass-driver",
+ "small-deconstructor",
+ "deconstructor",
+ "constructor",
+ "large-constructor",
+ "payload-loader",
+ "payload-unloader",
+ "power-source",
+ "power-void",
+ "item-source",
+ "item-void",
+ "liquid-source",
+ "liquid-void",
+ "payload-source",
+ "payload-void",
+ "heat-source",
+ "illuminator",
+ "legacy-mech-pad",
+ "legacy-unit-factory",
+ "legacy-unit-factory-air",
+ "legacy-unit-factory-ground",
+ "command-center",
+ "launch-pad",
+ "interplanetary-accelerator",
+ "message",
+ "switch",
+ "micro-processor",
+ "logic-processor",
+ "hyper-processor",
+ "memory-cell",
+ "memory-bank",
+ "logic-display",
+ "large-logic-display",
+ "canvas",
+ "reinforced-message",
+ "world-processor",
+ "world-cell",
+ "world-message",
+ }
+}
diff --git a/src/block/defense.rs b/src/block/defense.rs
new file mode 100644
index 0000000..b1548bc
--- /dev/null
+++ b/src/block/defense.rs
@@ -0,0 +1,37 @@
+//! defense
+use crate::block::simple::{cost, make_simple, BasicBlock};
+use crate::block::*;
+make_simple!(HeatedBlock => |_, _, _, buff: &mut DataRead| read_heated(buff));
+make_simple!(RadarBlock => |_, _, _, buff: &mut DataRead| buff.skip(4));
+make_simple!(ShieldBlock => |_, _, _, buff: &mut DataRead| read_shield(buff));
+make_register! {
+ "mender" -> HeatedBlock::new(1, true, cost!(Copper: 25, Lead: 30));
+ "mend-projector" -> HeatedBlock::new(2, true, cost!(Copper: 50, Lead: 100, Titanium: 25, Silicon: 40));
+ "overdrive-projector" -> HeatedBlock::new(2, true, cost!(Lead: 100, Titanium: 75, Silicon: 75, Plastanium: 30));
+ "overdrive-dome" -> HeatedBlock::new(3, true, cost!(Lead: 200, Titanium: 130, Silicon: 130, Plastanium: 80, SurgeAlloy: 120));
+ "force-projector" -> BasicBlock::new(3, true, cost!(Lead: 100, Titanium: 75, Silicon: 125));
+ "regen-projector" -> BasicBlock::new(3, true, cost!(Silicon: 80, Tungsten: 60, Oxide: 40, Beryllium: 80));
+ "shock-mine" -> BasicBlock::new(1, true, cost!(Lead: 25, Silicon: 12));
+ "radar" -> RadarBlock::new(1, true, cost!(Silicon: 60, Graphite: 50, Beryllium: 10));
+ "build-tower" -> BasicBlock::new(3, true, cost!(Silicon: 150, Oxide: 40, Thorium: 60));
+ "shockwave-tower" -> BasicBlock::new(3, true, cost!(SurgeAlloy: 50, Silicon: 150, Oxide: 30, Tungsten: 100));
+ // barrier projector
+ // editor only
+ "barrier-projector" -> BasicBlock::new(3, true, &[]);
+ "shield-projector" -> ShieldBlock::new(3, true, &[]);
+ "large-shield-projector" -> ShieldBlock::new(4, true, &[]);
+}
+
+/// format:
+/// - heat: [`f32`]
+/// - phase heat: [`f32`]
+fn read_heated(buff: &mut DataRead) -> Result<(), DataReadError> {
+ buff.skip(8)
+}
+
+/// format:
+/// - smoothing: [`f32`]
+/// - broken: [`bool`]
+fn read_shield(buff: &mut DataRead) -> Result<(), DataReadError> {
+ buff.skip(5)
+}
diff --git a/mindus/src/block/distribution.rs b/src/block/distribution.rs
index 2f19cd8..e185d3a 100644
--- a/mindus/src/block/distribution.rs
+++ b/src/block/distribution.rs
@@ -9,7 +9,7 @@ use crate::item;
make_simple!(
ConveyorBlock,
|_, name, _, ctx: Option<&RenderingContext>, rot, s| tile(ctx.unwrap(), name, rot, s),
- |_, buff: &mut DataRead| {
+ |_, _, _, buff: &mut DataRead| {
// format:
// - amount: `i32`
// - iterate amount:
@@ -28,21 +28,23 @@ make_simple!(
make_simple!(
DuctBlock,
|_, name, _, ctx: Option<&RenderingContext>, rot, s| tile(ctx.unwrap(), name, rot, s),
- |_, buff: &mut DataRead| {
+ |_, _, _, buff: &mut DataRead| {
// format:
// - rec_dir: `i8`
buff.skip(1)
}
);
-make_simple!(JunctionBlock => |_, buff| { read_directional_item_buffer(buff) });
+make_simple!(JunctionBlock => |_, _, _, buff| { read_directional_item_buffer(buff) });
make_simple!(SimpleDuctBlock, |_, name, _, _, rot: Rotation, s| {
let mut base = load!("duct-base", s);
let mut top = load!(from name which is ["overflow-duct" "underflow-duct"], s);
- // SAFETY: any load!() is square
- unsafe { top.rotate(rot.rotated(false).count()) };
- // SAFETY: same size
- unsafe { base.overlay(&top) };
+ unsafe {
+ // SAFETY: any load() is square
+ top.rotate(rot.rotated(false).count());
+ // SAFETY: same size
+ base.overlay(&top);
+ }
base
});
@@ -78,7 +80,7 @@ fn draw_stack(
1 => load!(concat 1 => name which is ["surge-conveyor" | "plastanium-conveyor"], s),
_ => load!("plastanium-conveyor-2", s),
};
- let empty = ctx.cross[rot.count() as usize].map_or(true, |(v, _)| v.name.get_name() != name);
+ let empty = ctx.cross[rot.count() as usize].map_or(true, |(v, _)| v.name != name);
// mindustry says fuck this and just draws the arrow convs in schems but im better than that
if rot.mirrored(true, true).mask() == mask && empty && name != "surge-conveyor" {
// end
@@ -116,21 +118,47 @@ make_simple!(
// format:
// - link: `i32`
// - cooldown: `f32`
- |_, buff: &mut DataRead| buff.skip(8)
-);
-make_simple!(
- SurgeRouter,
- |_, _, _, _, r: Rotation, s| {
- let mut base = load!("surge-router", s);
- let mut top = load!("top", s);
- unsafe { top.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&top) };
- base
- },
- |_, buff: &mut DataRead| buff.skip(2)
+ |_, _, _, buff: &mut DataRead| buff.skip(8)
);
+make_simple!(SurgeRouter, |_, _, _, _, r: Rotation, s| {
+ let mut base = load!("surge-router", s);
+ unsafe { base.overlay(load!("top", s).rotate(r.rotated(false).count())) };
+ base
+});
// format: id: [`i32`]
-make_simple!(UnitCargoLoader => |_, buff: &mut DataRead| buff.skip(4));
+make_simple!(UnitCargoLoader => |_, _, _, buff: &mut DataRead| buff.skip(4));
+
+make_register! {
+ "conveyor" => ConveyorBlock::new(1, false, cost!(Copper: 1));
+ "titanium-conveyor" => ConveyorBlock::new(1, false, cost!(Copper: 1, Lead: 1, Titanium: 1));
+ "plastanium-conveyor" => StackConveyor::new(1, false, cost!(Graphite: 1, Silicon: 1, Plastanium: 1));
+ "armored-conveyor" => ConveyorBlock::new(1, false, cost!(Metaglass: 1, Thorium: 1, Plastanium: 1));
+ "junction" -> JunctionBlock::new(1, true, cost!(Copper: 2));
+ "bridge-conveyor" -> BridgeBlock::new(1, false, cost!(Copper: 6, Lead: 6), 4, true);
+ "phase-conveyor" -> BridgeBlock::new(1, false, cost!(Lead: 10, Graphite: 10, Silicon: 7, PhaseFabric: 5), 12, true);
+ "sorter" => ItemBlock::new(1, true, cost!(Copper: 2, Lead: 2));
+ "inverted-sorter" => ItemBlock::new(1, true, cost!(Copper: 2, Lead: 2));
+ "unloader" -> ItemBlock::new(1, true, cost!(Titanium: 25, Silicon: 30));
+ "router" -> BasicBlock::new(1, true, cost!(Copper: 3));
+ "distributor" -> BasicBlock::new(2, true, cost!(Copper: 4, Lead: 4));
+ "overflow-gate" -> BasicBlock::new(1, true, cost!(Copper: 4, Lead: 2));
+ "underflow-gate" -> BasicBlock::new(1, true, cost!(Copper: 4, Lead: 2));
+ "mass-driver" => BridgeBlock::new(3, true, cost!(Lead: 125, Titanium: 125, Thorium: 50, Silicon: 75), 55, false);
+ "duct" => DuctBlock::new(1, false, cost!(Beryllium: 1));
+ "armored-duct" => DuctBlock::new(1, false, cost!(Beryllium: 2, Tungsten: 1));
+ "duct-router" => ItemBlock::new(1, true, cost!(Beryllium: 10));
+ "overflow-duct" => SimpleDuctBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8));
+ "underflow-duct" => SimpleDuctBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8));
+ "duct-bridge" => BridgeBlock::new(1, true, cost!(Beryllium: 20), 3, true);
+ "duct-unloader" => ItemBlock::new(1, true, cost!(Graphite: 20, Silicon: 20, Tungsten: 10));
+ "surge-conveyor" => StackConveyor::new(1, false, cost!(SurgeAlloy: 1, Tungsten: 1));
+ "surge-router" => SurgeRouter::new(1, false, cost!(SurgeAlloy: 5, Tungsten: 1)); // not symmetric
+ "unit-cargo-loader" -> BasicBlock::new(3, true, cost!(Silicon: 80, SurgeAlloy: 50, Oxide: 20));
+ "unit-cargo-unload-point" => ItemBlock::new(2, true, cost!(Silicon: 60, Tungsten: 60));
+ // sandbox only
+ "item-source" -> ItemBlock::new(1, true, &[]);
+ "item-void" -> BasicBlock::new(1, true, &[]);
+}
pub struct ItemBlock {
size: u8,
@@ -197,31 +225,26 @@ impl BlockLogic for ItemBlock {
s: Scale,
) -> ImageHolder<4> {
let mut p = load!(from name which is ["sorter" | "inverted-sorter" | "duct-router" | "duct-unloader" | "unit-cargo-unload-point" | "unloader" | "item-source"], s);
- if let Some(state) = state
- && let Some(item) = Self::get_state(state)
- {
+ if let Some(state) = state && let Some(item) = Self::get_state(state) {
let mut top = load!(s -> match name {
"unit-cargo-unload-point" => "unit-cargo-unload-point-top",
"unloader" => "unloader-center",
_ => "center",
});
unsafe { p.overlay(top.tint(item.color())) };
- if name == "duct-unloader" {
- unsafe {
- let mut x = load!("duct-unloader-arrows", s);
- p.overlay(&*x.rotate(rot.rotated(false).count()));
- }
- }
return p;
}
- if matches!(name, "duct-router" | "duct-unloader") {
- let mut top = load!(s -> match name {
- "duct-router" => "top",
- "duct-unloader" => "duct-unloader-top",
- });
- unsafe { top.rotate(rot.rotated(false).count()) };
- unsafe { p.overlay(&top) };
- }
+ match name {
+ "duct-router" => {
+ unsafe { p.overlay(&load!("top", s).rotate(rot.rotated(false).count())) };
+ }
+ "duct-unloader" => {
+ unsafe {
+ p.overlay(&load!("duct-unloader-top", s).rotate(rot.rotated(false).count()))
+ };
+ }
+ _ => {}
+ };
p
}
@@ -235,7 +258,13 @@ impl BlockLogic for ItemBlock {
/// (unit-cargo-unload-point)
/// - item: `u16` as item
/// - stale: `bool`
- fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
+ fn read(
+ &self,
+ b: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
match b.block.name() {
"duct-unloader" => {
let n = buff.read_i16()?;
@@ -381,7 +410,7 @@ impl BlockLogic for BridgeBlock {
fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
match Self::get_state(state) {
- None => Ok(DynData::Point2(-1, -1)),
+ None => Ok(DynData::Empty),
Some((dx, dy)) => Ok(DynData::Point2(*dx, *dy)),
}
}
@@ -407,6 +436,8 @@ impl BlockLogic for BridgeBlock {
fn read(
&self,
t: &mut Build,
+ r: &super::BlockRegistry,
+ e: &crate::data::map::EntityMapping,
buff: &mut crate::data::DataRead,
) -> Result<(), crate::data::ReadError> {
match t.block.name() {
@@ -414,7 +445,7 @@ impl BlockLogic for BridgeBlock {
"phase-conveyor" | "phase-conduit" | "bridge-conduit" => read_item_bridge(buff)?,
"mass-driver" => buff.skip(9)?,
"payload-mass-driver" | "large-payload-mass-driver" => {
- crate::block::payload::read_payload_block(buff)?;
+ crate::block::payload::read_payload_block(r, e, buff)?;
buff.skip(19)?;
}
// no state?
@@ -447,8 +478,10 @@ impl BlockLogic for BridgeBlock {
_ => "reinforced-bridge-conduit-dir",
}
);
- unsafe { arrow.rotate(r.rotated(false).count()) };
- unsafe { base.overlay(&arrow) };
+ unsafe {
+ arrow.rotate(r.rotated(false).count());
+ base.overlay(&arrow)
+ };
base
}
// "bridge-conveyor" | "phase-conveyor" | "bridge-conduit" | "phase-conduit" | "payload-mass-driver" | "large-payload-mass-driver"
diff --git a/src/block/drills.rs b/src/block/drills.rs
new file mode 100644
index 0000000..4558666
--- /dev/null
+++ b/src/block/drills.rs
@@ -0,0 +1,44 @@
+//! extraction of raw resources (mine part)
+use super::production::ProductionBlock;
+use crate::block::simple::{cost, make_simple, BasicBlock};
+use crate::block::*;
+
+make_simple!(
+ DrillBlock,
+ |_, name, _, _, rot: Rotation, s| {
+ let mut base =
+ load!(from name which is ["large-plasma-bore" | "plasma-bore" | "cliff-crusher"], s);
+ unsafe {
+ base.overlay(load!(concat "top" => name which is ["large-plasma-bore" | "plasma-bore" | "cliff-crusher"], s).rotate(rot.rotated(false).count()) )
+ };
+ base
+ },
+ |_, _, _, buff: &mut DataRead| read_drill(buff)
+);
+make_simple!(WallDrillBlock, |_, _, _, _, rot: Rotation, scl| {
+ let mut base = load!("cliff-crusher", scl);
+ unsafe { base.overlay(load!("cliff-crusher-top", scl).rotate(rot.rotated(false).count())) };
+ base
+});
+
+make_register! {
+ "mechanical-drill" -> DrillBlock::new(2, true, cost!(Copper: 12));
+ "pneumatic-drill" -> DrillBlock::new(2, true, cost!(Copper: 18, Graphite: 10));
+ "laser-drill" -> DrillBlock::new(3, true, cost!(Copper: 35, Graphite: 30, Titanium: 20, Silicon: 30));
+ "blast-drill" -> DrillBlock::new(4, true, cost!(Copper: 65, Titanium: 50, Thorium: 75, Silicon: 60));
+ "water-extractor" -> BasicBlock::new(2, true, cost!(Copper: 30, Lead: 30, Metaglass: 30, Graphite: 30));
+ "oil-extractor" -> BasicBlock::new(3, true, cost!(Copper: 150, Lead: 115, Graphite: 175, Thorium: 115, Silicon: 75));
+ "vent-condenser" -> ProductionBlock::new(3, true, cost!(Graphite: 20, Beryllium: 60));
+ "cliff-crusher" -> WallDrillBlock::new(2, false, cost!(Beryllium: 100, Graphite: 40));
+ "plasma-bore" => DrillBlock::new(2, false, cost!(Beryllium: 40));
+ "large-plasma-bore" => DrillBlock::new(3, false, cost!(Silicon: 100, Oxide: 25, Beryllium: 100, Tungsten: 70));
+ "impact-drill" -> DrillBlock::new(4, true, cost!(Silicon: 70, Beryllium: 90, Graphite: 60));
+ "eruption-drill" -> DrillBlock::new(5, true, cost!(Silicon: 200, Oxide: 20, Tungsten: 200, Thorium: 120));
+}
+
+/// format:
+/// - progress: [`f32`]
+/// - warmup: [`f32`]
+fn read_drill(buff: &mut DataRead) -> Result<(), DataReadError> {
+ buff.skip(8)
+}
diff --git a/src/block/environment.rs b/src/block/environment.rs
new file mode 100644
index 0000000..3fff74f
--- /dev/null
+++ b/src/block/environment.rs
@@ -0,0 +1,192 @@
+//! grass
+use crate::block::make_register;
+use crate::block::simple::BasicBlock;
+
+macro_rules! register_env {
+ ($($field:literal: $size:literal;)+) => {
+ make_register!(
+ $($field -> BasicBlock::new($size, true, &[]);)*
+ );
+ };
+}
+
+register_env! {
+ "darksand": 1;
+ "sand-floor": 1;
+ "yellow-stone": 1;
+ "arkyic-stone": 1;
+ "carbon-stone": 1;
+ "ore-beryllium": 1;
+ "ore-copper": 1;
+ "ore-lead": 1;
+ "ore-coal": 1;
+ "ore-scrap": 1;
+ "ore-thorium": 1;
+ "ore-titanium": 1;
+ "ore-tungsten": 1;
+ "ore-crystal-thorium": 1;
+ "ore-wall-beryllium": 1;
+ "ore-wall-thorium": 1;
+ "ore-wall-tungsten": 1;
+ "graphitic-wall": 1;
+ "graphitic-wall-large": 2;
+ "dacite": 1;
+ "dirt": 1;
+ "arkycite-floor": 1;
+ "basalt": 1;
+ "ice": 1;
+ "molten-slag": 1;
+ "moss": 1;
+ "mud": 1;
+ "magmarock": 1;
+ "grass": 1;
+ "ice-snow": 1;
+ "hotrock": 1;
+ "char": 1;
+ "snow": 1;
+ "salt": 1;
+ "shale": 1;
+ "metal-floor": 1;
+ "metal-floor-2": 1;
+ "metal-floor-3": 1;
+ "metal-floor-4": 1;
+ "metal-floor-5": 1;
+ "dark-panel-1": 1;
+ "dark-panel-2": 1;
+ "dark-panel-3": 1;
+ "dark-panel-4": 1;
+ "dark-panel-5": 1;
+ "dark-panel-6": 1;
+ "darksand-tainted-water": 1;
+ "darksand-water": 1;
+ "deep-tainted-water": 1;
+ "deep-water": 1;
+ "sand-water": 1;
+ "shallow-water": 1;
+ "space": 1;
+ "stone": 1;
+ "build1": 1;
+ "boulder": 1;
+ "arkyic-vent": 1;
+ "arkyic-wall-large": 2;
+ "arkyic-wall": 1;
+ "beryllic-stone-wall-large": 2;
+ "beryllic-stone-wall": 1;
+ "beryllic-stone": 1;
+ "bluemat": 1;
+ "carbon-vent": 1;
+ "carbon-wall-large": 2;
+ "carbon-wall": 1;
+ "cliff": 1;
+ "core-zone": 1;
+ "crater-stone": 1;
+ "crystal-floor": 1;
+ "crystalline-stone-wall-large": 2;
+ "crystalline-stone-wall": 1;
+ "crystalline-stone": 1;
+ "crystalline-vent": 3;
+ "dacite-wall-large": 2;
+ "dacite-wall": 1;
+ "dark-metal-large": 2;
+ "dark-metal": 1;
+ "metal-floor-damaged": 1;
+ "dense-red-stone": 1;
+ "dirt-wall-large": 2;
+ "dirt-wall": 1;
+ "dune-wall-large": 2;
+ "dune-wall": 1;
+ "ferric-craters": 1; // ferris section
+ "ferric-stone-wall-large": 2;
+ "ferric-stone-wall": 1;
+ "ferric-stone": 1;
+ "ice-wall-large": 2;
+ "ice-wall": 1;
+ "pebbles": 1;
+ "pine": 1;
+ "pooled-cryofluid": 1;
+ "red-diamond-wall": 1;
+ "red-ice-wall-large": 2;
+ "red-ice-wall": 1;
+ "red-ice": 1;
+ "red-stone-vent": 1;
+ "red-stone-wall-large": 2;
+ "red-stone-wall": 1;
+ "red-stone": 1;
+ "redmat": 1;
+ "regolith-wall-large": 2;
+ "regolith-wall": 1;
+ "regolith": 1;
+ "rhyolite-crater": 1;
+ "rhyolite-vent": 1;
+ "rhyolite-wall-large": 2;
+ "rhyolite-wall": 1;
+ "rhyolite": 1;
+ "rough-rhyolite": 1;
+ "salt-wall-large": 2;
+ "salt-wall": 1;
+ "sand-wall-large": 2;
+ "sand-wall": 1;
+ "shale-wall-large": 2;
+ "shale-wall": 1;
+ "shrubs-large": 2;
+ "shrubs": 1;
+ "snow-pine": 1;
+ "snow-wall-large": 2;
+ "snow-wall": 1;
+ "spawn": 1;
+ "spore-moss": 1;
+ "spore-pine": 1;
+ "spore-wall-large": 2;
+ "spore-wall": 1;
+ "stone-wall-large": 2;
+ "stone-wall": 1;
+ "tainted-water": 1;
+ "tar": 1;
+ "yellow-stone-plates": 1;
+ "yellow-stone-vent": 1;
+ "yellow-stone-wall-large": 2;
+ "yellow-stone-wall": 1;
+ // props
+ "yellow-stone-boulder": 1;
+ "snow-boulder": 1;
+ "shale-boulder": 1;
+ "arkyic-boulder": 1;
+ "basalt-boulder": 1;
+ "beryllic-boulder": 1;
+ "carbon-boulder": 1;
+ "crystalline-boulder": 1;
+ "dacite-boulder": 1;
+ "ferric-boulder": 1;
+ "red-ice-boulder": 1;
+ "red-stone-boulder": 1;
+ "rhyolite-boulder": 1;
+ "sand-boulder": 1;
+ "pur-bush": 1;
+ "tendrils": 1;
+ // these are tall but uh (TODO layering)
+ "white-tree-dead": 1;
+ "yellowcoral": 1;
+ "white-tree": 1;
+ "redweed": 1;
+ "spore-cluster": 1;
+ "crystal-blocks": 1;
+ "crystal-cluster": 1;
+ "vibrant-crystal-cluster": 1;
+ "crystal-orbs": 1;
+ // end tall
+ "build2": 1;
+ "build3": 1;
+ "build4": 1;
+ "build5": 1;
+ "build6": 1;
+ "build7": 1;
+ "build8": 1;
+ "build9": 1;
+ "build10": 1;
+ "build11": 1;
+ "build12": 1;
+ "build13": 1;
+ "build14": 1;
+ "build15": 1;
+ "build16": 1;
+}
diff --git a/src/block/liquid.rs b/src/block/liquid.rs
new file mode 100644
index 0000000..d20fb47
--- /dev/null
+++ b/src/block/liquid.rs
@@ -0,0 +1,158 @@
+//! liquid related things
+use thiserror::Error;
+
+use crate::block::distribution::BridgeBlock;
+use crate::block::simple::*;
+use crate::block::*;
+use crate::content;
+use crate::data::dynamic::DynType;
+use crate::data::renderer::load;
+use crate::fluid;
+use crate::utils::ImageUtils;
+
+make_simple!(ConduitBlock, |_,
+ name,
+ _,
+ ctx: Option<&RenderingContext>,
+ rot,
+ s| {
+ let ctx = ctx.unwrap();
+
+ let mask = mask(ctx, rot, name);
+ // TODO caps. stopped trying bcz too complex
+ mask2tile(mask, rot, name, s)
+});
+
+make_register! {
+ "reinforced-pump" -> BasicBlock::new(2, true, cost!(Beryllium: 40, Tungsten: 30, Silicon: 20));
+ "mechanical-pump" -> BasicBlock::new(1, true, cost!(Copper: 15, Metaglass: 10));
+ "rotary-pump" -> BasicBlock::new(2, true, cost!(Copper: 70, Metaglass: 50, Titanium: 35, Silicon: 20));
+ "impulse-pump" -> BasicBlock::new(3, true, cost!(Copper: 80, Metaglass: 90, Titanium: 40, Thorium: 35, Silicon: 30));
+ "conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1));
+ "pulse-conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1, Titanium: 2));
+ "plated-conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1, Thorium: 2, Plastanium: 1));
+ "liquid-router" -> BasicBlock::new(1, true, cost!(Metaglass: 2, Graphite: 4));
+ "liquid-container" -> BasicBlock::new(2, true, cost!(Metaglass: 15, Titanium: 10));
+ "liquid-tank" -> BasicBlock::new(3, true, cost!(Metaglass: 40, Titanium: 30));
+ "liquid-junction" -> BasicBlock::new(1, true, cost!(Metaglass: 8, Graphite: 4));
+ "bridge-conduit" -> BridgeBlock::new(1, true, cost!(Metaglass: 8, Graphite: 4), 4, true);
+ "phase-conduit" -> BridgeBlock::new(1, true, cost!(Metaglass: 20, Titanium: 10, Silicon: 7, PhaseFabric: 5), 12, true);
+ "reinforced-conduit" => ConduitBlock::new(1, false, cost!(Beryllium: 2));
+ "reinforced-liquid-junction" -> BasicBlock::new(1, true, cost!(Graphite: 4, Beryllium: 8));
+ "reinforced-bridge-conduit" => BridgeBlock::new(1, true, cost!(Graphite: 8, Beryllium: 20), 4, true);
+ "reinforced-liquid-router" -> BasicBlock::new(1, true, cost!(Graphite: 8, Beryllium: 4));
+ "reinforced-liquid-container" -> BasicBlock::new(2, true, cost!(Tungsten: 10, Beryllium: 16));
+ "reinforced-liquid-tank" -> BasicBlock::new(3, true, cost!(Tungsten: 40, Beryllium: 50));
+ // sandbox only
+ "liquid-source" => FluidBlock::new(1, true, &[]);
+ "liquid-void" -> BasicBlock::new(1, true, &[]);
+}
+
+pub struct FluidBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+}
+
+impl FluidBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
+ assert!(size != 0, "invalid size");
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ }
+ }
+
+ state_impl!(pub Option<fluid::Type>);
+}
+
+impl BlockLogic for FluidBlock {
+ impl_block!();
+
+ fn data_from_i32(&self, config: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ if config < 0 || config > i32::from(u16::MAX) {
+ return Err(DataConvertError::Custom(Box::new(FluidConvertError(
+ config,
+ ))));
+ }
+ Ok(DynData::Content(content::Type::Fluid, config as u16))
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Empty => Ok(Some(Self::create_state(None))),
+ DynData::Content(content::Type::Fluid, id) => Ok(Some(Self::create_state(Some(
+ FluidDeserializeError::forward(fluid::Type::try_from(id))?,
+ )))),
+ DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new(
+ FluidDeserializeError::ContentType(have),
+ ))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Content,
+ }),
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ Ok(Self::get_state(state)
+ .as_ref()
+ .map_or(DynData::Empty, |&fluid| {
+ DynData::Content(content::Type::Fluid, fluid.into())
+ }))
+ }
+
+ fn draw(
+ &self,
+ _: &str,
+ state: Option<&State>,
+ _: Option<&RenderingContext>,
+ _: Rotation,
+ s: Scale,
+ ) -> ImageHolder<4> {
+ let mut p = load!("liquid-source", s);
+ if let Some(state) = state && let Some(liq) = Self::get_state(state) {
+ let mut top = load!("center", s);
+ unsafe { p.overlay(top.tint(liq.color())) };
+ return p;
+ }
+ p
+ }
+
+ /// format:
+ /// - fluid: [`u16`] as [`Fluid`](fluid::Type)
+ fn read(
+ &self,
+ b: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ let f = buff.read_u16()?;
+ b.state = Some(Self::create_state(fluid::Type::try_from(f).ok()));
+ Ok(())
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
+#[error("invalid config ({0}) for fluid")]
+pub struct FluidConvertError(pub i32);
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
+pub enum FluidDeserializeError {
+ #[error("expected Fluid but got {0:?}")]
+ ContentType(content::Type),
+ #[error("fluid not found")]
+ NotFound(#[from] fluid::TryFromU16Error),
+}
+
+impl FluidDeserializeError {
+ pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
+ }
+ }
+}
diff --git a/mindus/src/block/logic.rs b/src/block/logic.rs
index b4c374e..a099765 100644
--- a/mindus/src/block/logic.rs
+++ b/src/block/logic.rs
@@ -3,14 +3,14 @@ use std::borrow::Cow;
use std::string::FromUtf8Error;
use crate::block::simple::*;
-use crate::data::dynamic::DynType;
-use crate::{Serializable, block::*};
+use crate::data::dynamic::{DynSerializer, DynType};
+use crate::{block::*, Serializer};
use crate::data::{self, CompressError, DataRead, DataWrite};
make_simple!(
MemoryBlock =>
- |_, buff: &mut DataRead| {
+ |_, _, _, buff: &mut DataRead| {
// format:
// - iterate [`u32`]
// - memory: [`f64`]
@@ -19,6 +19,24 @@ make_simple!(
}
);
+make_register! {
+ "reinforced-message" -> MessageLogic::new(1, true, cost!(Graphite: 10, Beryllium: 5));
+ "message" -> MessageLogic::new(1, true, cost!(Copper: 5, Graphite: 5));
+ "switch" => SwitchLogic::new(1, true, cost!(Copper: 5, Graphite: 5));
+ "micro-processor" -> ProcessorLogic::new(1, true, cost!(Copper: 90, Lead: 50, Silicon: 50));
+ "logic-processor" -> ProcessorLogic::new(2, true, cost!(Lead: 320, Graphite: 60, Thorium: 50, Silicon: 80));
+ "hyper-processor" -> ProcessorLogic::new(3, true, cost!(Lead: 450, Thorium: 75, Silicon: 150, SurgeAlloy: 50));
+ "memory-cell" -> MemoryBlock::new(1, true, cost!(Copper: 30, Graphite: 30, Silicon: 30));
+ "memory-bank" -> MemoryBlock::new(2, true, cost!(Copper: 30, Graphite: 80, Silicon: 80, PhaseFabric: 30));
+ "logic-display" -> BasicBlock::new(3, true, cost!(Lead: 100, Metaglass: 50, Silicon: 50));
+ "large-logic-display" -> BasicBlock::new(6, true, cost!(Lead: 200, Metaglass: 100, Silicon: 150, PhaseFabric: 75));
+ "canvas" => CanvasBlock::new(2, true, cost!(Silicon: 30, Beryllium: 10), 12);
+ // editor only
+ "world-processor" -> BasicBlock::new(1, true, &[]);
+ "world-message" -> MessageLogic::new(1, true, &[]);
+ "world-cell" -> MemoryBlock::new(1, true, &[]);
+}
+
pub struct CanvasBlock {
size: u8,
symmetric: bool,
@@ -56,11 +74,11 @@ impl CanvasBlock {
}
}
- state_impl!(pub Image<Box<[u8]>, 1>);
+ state_impl!(pub Image<Vec<u8>, 1>);
}
-fn deser_canvas_image(b: &[u8], size: usize) -> Image<Box<[u8]>, 1> {
- let mut p = Image::alloc(size as u32, size as u32).boxed();
+fn deser_canvas_image(b: &[u8], size: usize) -> Image<Vec<u8>, 1> {
+ let mut p = Image::alloc(size as u32, size as u32);
for i in 0..(size * size) {
let offset = i * 3;
let mut n = 0;
@@ -68,7 +86,7 @@ fn deser_canvas_image(b: &[u8], size: usize) -> Image<Box<[u8]>, 1> {
let word = (i + offset) >> 3;
n |= (((b[word] & (1 << ((i + offset) & 7))) != 0) as u8) << i;
}
- unsafe { p.set_pixel(i as u32 % size as u32, i as u32 / size as u32, &[n]) };
+ unsafe { p.set_pixel(i as u32 % size as u32, i as u32 / size as u32, [n]) };
}
p
}
@@ -134,32 +152,38 @@ impl BlockLogic for CanvasBlock {
Scale::Eigth => 1,
};
let mut img = Image::alloc(p.width(), p.height());
- for ([r, g, b, a], &y) in img.chunked_mut().zip(p.buffer().iter()) {
+ for ([r, g, b, a], &y) in img.chunked_mut().zip(p.buffer.iter()) {
(*r, *g, *b) = PALETTE[y as usize];
*a = 255;
}
- let img = img.scale::<fimg::scale::Nearest>(
- (s * self.size as u32) - offset * 2,
- (s * self.size as u32) - offset * 2,
- );
+ let img = img.as_mut().scale((s * self.size as u32) - offset * 2);
let mut borders = load!("canvas", s);
- unsafe { borders.overlay_at(&img, offset, offset) };
+ unsafe {
+ borders
+ .borrow_mut()
+ .overlay_at(&img.as_ref(), offset, offset)
+ };
return borders;
}
- // FIXME: make const
- let mut def = Image::alloc(s * self.size as u32, s * self.size as u32).boxed();
- for [r, g, b, a] in def.chunked_mut() {
+ let mut def = Image::alloc(s * self.size as u32, s * self.size as u32);
+ for [r, g, b, a] in def.buffer.array_chunks_mut::<4>() {
(*r, *g, *b) = PALETTE[0];
*a = 255;
}
- unsafe { def.mapped(crate::utils::Cow::Own) }
+ ImageHolder::from(def)
}
/// format:
/// - len: [`i32`]
/// - read(len) -> [`deser_canvas_image`]
- fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
+ fn read(
+ &self,
+ build: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
let n = buff.read_i32()? as usize;
let mut b = vec![0; n];
buff.read_bytes(&mut b)?;
@@ -228,7 +252,13 @@ impl BlockLogic for MessageLogic {
Ok(DynData::String(Some(Self::get_state(state).clone())))
}
- fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
+ fn read(
+ &self,
+ b: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
b.state = Some(Self::create_state(buff.read_utf()?.to_string()));
Ok(())
}
@@ -276,23 +306,29 @@ impl BlockLogic for SwitchLogic {
Ok(DynData::Boolean(*Self::get_state(state)))
}
- fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
+ fn read(
+ &self,
+ build: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
build.state = Some(Self::create_state(buff.read_bool()?));
Ok(())
}
fn draw(
&self,
- name: &str,
+ _: &str,
state: Option<&State>,
_: Option<&RenderingContext>,
_: Rotation,
s: Scale,
) -> ImageHolder<4> {
- let mut base = load!(from name which is ["switch" | "world-switch"], s);
+ let mut base = load!("switch", s);
if let Some(state) = state {
if *Self::get_state(state) {
- let on = load!(concat "on" => name which is ["switch" | "world-switch"], s);
+ let on = load!("switch-on", s);
unsafe { base.overlay(&on) };
return base;
}
@@ -335,7 +371,8 @@ fn read_decompressed(buff: &mut DataRead) -> Result<ProcessorState, ProcessorDes
buff.read_bytes(&mut code)?;
let code = String::from_utf8(code)?;
let link_cnt = buff.read_u32()? as usize;
- let mut links = Vec::with_capacity(link_cnt);
+ let mut links = vec![];
+ links.reserve(link_cnt);
for _ in 0..link_cnt {
let name = buff.read_utf()?;
let x = buff.read_i16()?;
@@ -375,7 +412,13 @@ impl BlockLogic for ProcessorLogic {
}
}
- fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> {
+ fn read(
+ &self,
+ b: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
let n = buff.read_u32()? as usize;
let mut v = vec![0; n];
buff.read_bytes(&mut v)?;
@@ -385,7 +428,7 @@ impl BlockLogic for ProcessorLogic {
));
for _ in 0..buff.read_u32()? {
let _ = buff.read_utf()?;
- let _ = DynData::deserialize(buff).unwrap();
+ let _ = DynSerializer.deserialize(buff).unwrap();
}
let memory = buff.read_u32()? as usize;
buff.skip(memory * 8)?;
@@ -469,7 +512,7 @@ impl ProcessorSerializeError {
}
}
-#[derive(Clone, Debug, Eq, PartialEq, Default, Hash)]
+#[derive(Clone, Debug, Eq, PartialEq, Default)]
pub struct ProcessorLink {
name: String,
x: i16,
@@ -502,7 +545,7 @@ impl ProcessorLink {
}
}
-#[derive(Clone, Debug, Eq, PartialEq, Default, Hash)]
+#[derive(Clone, Debug, Eq, PartialEq, Default)]
pub struct ProcessorState {
code: String,
links: Vec<ProcessorLink>,
@@ -586,28 +629,3 @@ pub enum CreateError {
#[error("link {name} already points to ({x}, {y})")]
DuplicatePos { name: String, x: i16, y: i16 },
}
-#[rustfmt::skip]
-static BITMASKS: [[Image<&[u8], 4>;3]; 256] = include!("x.rs");
-make_simple!(TileableDisplay, |_,
- _,
- _,
- ctx: Option<&RenderingContext>,
- _,
- s| {
- let c = ctx.unwrap();
- let [f, d, h, b] = c.corners;
- let [c, a, g, e] = c.cross;
- let swizzled = [a, b, c, d, e, f, g, h];
- use std::simd::prelude::*;
- let mut b = load!("tile-logic-display", s);
- unsafe {
- b.overlay(
- &BITMASKS[u8x8::from_array(
- swizzled.map(|x| x.is_some_and(|x| x.0.name() == "tile-logic-display") as u8),
- )
- .simd_eq(u8x8::splat(1))
- .to_bitmask() as usize][s as usize],
- )
- };
- b
-});
diff --git a/src/block/mod.rs b/src/block/mod.rs
new file mode 100644
index 0000000..15b6d97
--- /dev/null
+++ b/src/block/mod.rs
@@ -0,0 +1,642 @@
+//! deal with blocks.
+//!
+//! categorized as mindustry categorizes them in its assets folder, for easy drawing.
+//!
+//! with the exception of sandbox, that is.
+use bobbin_bits::U4::{self, B0000, B0001, B0010, B0100, B1000};
+use std::error::Error;
+use std::fmt;
+
+use crate::data::dynamic::{DynData, DynType};
+use crate::data::map::{Build, EntityMapping};
+use crate::data::{self, renderer::*, CompressError};
+use crate::data::{DataRead, GridPos, ReadError as DataReadError};
+use crate::item::storage::ItemStorage;
+use crate::registry::RegistryEntry;
+
+macro_rules! mods {
+ ($($mod:ident)*) => {
+ $(pub mod $mod;)*
+
+ pub mod all {
+ $(pub use crate::block::$mod::*;)*
+ pub use super::simple::BasicBlock;
+ }
+ }
+}
+
+mods! {
+ campaign content defense distribution drills environment liquid logic payload power production storage turrets walls units
+}
+
+mod simple;
+
+macro_rules! disp {
+ ($($k:ident,)+) => {
+ use all::{$($k,)+};
+ #[enum_dispatch::enum_dispatch]
+ pub(crate) enum BlockLogicEnum {
+ $($k,)+
+ }
+ #[const_trait]
+ pub trait ConstFrom<T>: Sized {
+ fn fro(value: T) -> Self;
+ }
+ $(
+ impl const ConstFrom<$k> for BlockLogicEnum {
+ fn fro(v: $k) -> Self {
+ BlockLogicEnum::$k(v)
+ }
+ }
+ )+
+
+ /*impl std::fmt::Debug for BlockLogicEnum {
+ fn fmt(&self, w: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
+ match self {
+ $(BlockLogicEnum::$k { .. } => write!(w, stringify!($k)),)+
+ }
+ }
+ }*/
+ }
+}
+
+disp! {
+ BasicBlock,
+ WallBlock,
+ DuctBlock,
+ BridgeBlock,
+ ItemBlock,
+ ProductionBlock,
+ SeparatorBlock,
+ StackConveyor,
+ HeatCrafter,
+ ConnectorBlock,
+ ItemTurret,
+ ConveyorBlock,
+ WallDrillBlock,
+ DrillBlock,
+ NuclearGeneratorBlock,
+ GeneratorBlock,
+ ConduitBlock,
+ HeatedBlock,
+ RadarBlock,
+ ShieldBlock,
+ PointDefenseTurret,
+ JunctionBlock,
+ Turret,
+ MemoryBlock,
+ MessageLogic,
+ ConstructorBlock,
+ AssemblerBlock,
+ UnitFactory,
+ SimpleDuctBlock,
+ SurgeRouter,
+ SimplePayloadBlock,
+ PayloadConveyor,
+ ImpactReactorBlock,
+ Neoplasia,
+ DiodeBlock,
+ HeatConduit,
+ ContinousTurret,
+ TractorBeamTurret,
+ AssemblerModule,
+ RepairTurret,
+ FluidBlock,
+ CanvasBlock,
+ SwitchLogic,
+ ProcessorLogic,
+ PayloadBlock,
+ LampBlock,
+ DoorBlock,
+}
+
+pub trait Cast {
+ fn downcast_ref(state: &State) -> Option<&Self>;
+ fn downcast_mut(state: &mut State) -> Option<&mut Self>;
+}
+
+macro_rules! stater {
+ ($($k: ident($v: ty),)+) => {
+ #[derive(Debug, Clone)]
+ pub enum State {
+ $($k($v),)+
+ }
+
+ $(
+ impl From<$v> for State {
+ fn from(v: $v) -> State { State::$k(v) }
+ }
+
+ impl Cast for $v {
+ fn downcast_ref(state: &State) -> Option<&Self> {
+ match state {
+ State::$k(v) => Some(v),
+ _ => None,
+ }
+ }
+ fn downcast_mut(state: &mut State) -> Option<&mut Self> {
+ match state {
+ State::$k(v) => Some(v),
+ _ => None,
+ }
+ }
+ }
+ )+
+ }
+}
+
+stater! {
+ // TODO deoptionize
+ String(String),
+ Item(Option<crate::item::Type>),
+ Fluid(Option<crate::fluid::Type>),
+ Image(Image<Vec<u8>, 1>),
+ Point(Option<(i32, i32)>),
+ Bool(bool),
+ Processor(logic::ProcessorState),
+ Payload(payload::Payload),
+ Power(Vec<(i16, i16)>),
+ Color(power::Rgba),
+ Command(Option<crate::data::command::UnitCommand>),
+ Unit(Option<crate::unit::Type>),
+}
+
+impl State {
+ pub fn downcast_ref<T: Cast>(&self) -> Option<&T> {
+ T::downcast_ref(self)
+ }
+
+ pub fn downcast_mut<T: Cast>(&mut self) -> Option<&mut T> {
+ T::downcast_mut(self)
+ }
+
+ pub fn new<T: Into<Self>>(from: T) -> Self {
+ from.into()
+ }
+}
+
+#[enum_dispatch::enum_dispatch(BlockLogicEnum)]
+pub trait BlockLogic {
+ /// mindustry blocks are the same width and height
+ fn get_size(&self) -> u8;
+
+ fn is_symmetric(&self) -> bool;
+
+ fn create_build_cost(&self) -> Option<ItemStorage>;
+
+ fn data_from_i32(&self, config: i32, pos: GridPos) -> Result<DynData, DataConvertError>;
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError>;
+
+ #[allow(unused_variables)]
+ fn mirror_state(&self, state: &mut State, horizontally: bool, vertically: bool) {}
+
+ #[allow(unused_variables)]
+ fn rotate_state(&self, state: &mut State, clockwise: bool) {}
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError>;
+
+ #[allow(unused_variables)]
+ fn draw(
+ &self,
+ name: &str,
+ state: Option<&State>,
+ context: Option<&RenderingContext>,
+ rot: Rotation,
+ scale: Scale,
+ ) -> ImageHolder<4> {
+ unimplemented!("{name}")
+ }
+
+ #[allow(unused_variables)]
+ fn read(
+ &self,
+ build: &mut Build,
+ reg: &BlockRegistry,
+ mapping: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ Ok(())
+ }
+}
+
+// i wish i could derive
+macro_rules! impl_block {
+ () => {
+ fn get_size(&self) -> u8 {
+ self.size
+ }
+
+ fn is_symmetric(&self) -> bool {
+ self.symmetric
+ }
+
+ fn create_build_cost(&self) -> Option<$crate::item::storage::ItemStorage> {
+ if self.build_cost.is_empty() {
+ None
+ } else {
+ let mut storage = crate::item::storage::Storage::new();
+ for (ty, cnt) in self.build_cost {
+ storage.add(*ty, *cnt, u32::MAX);
+ }
+ Some(storage)
+ }
+ }
+ };
+}
+pub(crate) use impl_block;
+
+#[derive(Debug, thiserror::Error)]
+pub enum DataConvertError {
+ #[error(transparent)]
+ Custom(#[from] Box<dyn Error + Sync + Send>),
+}
+
+impl DataConvertError {
+ pub fn forward<T, E: Error + Sync + Send + 'static>(result: Result<T, E>) -> Result<T, Self> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(Self::Custom(Box::new(e))),
+ }
+ }
+}
+
+#[derive(Debug, thiserror::Error)]
+pub enum DeserializeError {
+ #[error(transparent)]
+ DecompressError(#[from] data::DecompressError),
+ #[error("expected type {expect:?} but got {have:?}")]
+ InvalidType { have: DynType, expect: DynType },
+ #[error(transparent)]
+ Custom(#[from] Box<dyn Error + Sync + Send>),
+}
+
+impl DeserializeError {
+ pub fn forward<T, E: Error + Sync + Send + 'static>(result: Result<T, E>) -> Result<T, Self> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(Self::Custom(Box::new(e))),
+ }
+ }
+}
+
+#[derive(Debug, thiserror::Error)]
+pub enum SerializeError {
+ #[error(transparent)]
+ Custom(#[from] Box<dyn Error + Sync + Send>),
+ #[error(transparent)]
+ Compress(#[from] CompressError),
+}
+
+impl SerializeError {
+ pub fn forward<T, E: Error + Sync + Send + 'static>(result: Result<T, E>) -> Result<T, Self> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(Self::Custom(Box::new(e))),
+ }
+ }
+}
+
+/// a block. put it in stuff!
+pub struct Block {
+ image: Option<[Image<&'static [u8], 4>; 3]>,
+ name: &'static str,
+ logic: BlockLogicEnum,
+}
+
+impl PartialEq for Block {
+ fn eq(&self, rhs: &Block) -> bool {
+ self.name == rhs.name
+ }
+}
+
+impl Block {
+ /// create a new block
+ #[must_use]
+ #[inline]
+ pub(crate) const fn new(
+ name: &'static str,
+ logic: BlockLogicEnum,
+ image: Option<[Image<&'static [u8], 4>; 3]>,
+ ) -> Self {
+ Self { image, name, logic }
+ }
+
+ /// this blocks name
+ /// ```
+ /// assert!(mindus::block::distribution::DISTRIBUTOR.name() == "distributor")
+ /// ```
+ #[must_use]
+ #[inline]
+ pub const fn name(&self) -> &'static str {
+ self.name
+ }
+
+ /// should you send context to [`image`]?
+ #[must_use]
+ #[inline]
+ pub fn wants_context(&self) -> bool {
+ use BlockLogicEnum::*;
+ matches!(
+ self.logic,
+ ConveyorBlock(..) | DuctBlock(..) | StackConveyor(..) | ConduitBlock(..)
+ )
+ }
+
+ /// draw this block, with this state
+ #[must_use]
+ #[inline]
+ pub fn image(
+ &self,
+ state: Option<&State>,
+ context: Option<&RenderingContext>,
+ rot: Rotation,
+ scale: Scale,
+ ) -> ImageHolder<4> {
+ if let Some(imgs) = &self.image {
+ return ImageHolder::from((imgs[scale as usize]).copy());
+ }
+ self.logic.draw(self.name, state, context, rot, scale)
+ }
+
+ /// size.
+ #[must_use]
+ #[inline]
+ pub fn get_size(&self) -> u8 {
+ self.logic.get_size()
+ }
+
+ /// does it matter if its rotated
+ #[must_use]
+ #[inline]
+ pub fn is_symmetric(&self) -> bool {
+ self.logic.is_symmetric()
+ }
+
+ /// cost
+ #[must_use]
+ #[inline]
+ pub fn get_build_cost(&self) -> Option<ItemStorage> {
+ self.logic.create_build_cost()
+ }
+
+ pub(crate) fn data_from_i32(
+ &self,
+ config: i32,
+ pos: GridPos,
+ ) -> Result<DynData, DataConvertError> {
+ self.logic.data_from_i32(config, pos)
+ }
+
+ pub(crate) fn deserialize_state(
+ &self,
+ data: DynData,
+ ) -> Result<Option<State>, DeserializeError> {
+ self.logic.deserialize_state(data)
+ }
+
+ pub(crate) fn mirror_state(&self, state: &mut State, horizontally: bool, vertically: bool) {
+ self.logic.mirror_state(state, horizontally, vertically);
+ }
+
+ pub(crate) fn rotate_state(&self, state: &mut State, clockwise: bool) {
+ self.logic.rotate_state(state, clockwise);
+ }
+
+ pub(crate) fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ self.logic.serialize_state(state)
+ }
+
+ #[inline]
+ pub(crate) fn read(
+ &self,
+ build: &mut Build,
+ reg: &BlockRegistry,
+ mapping: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ self.logic.read(build, reg, mapping, buff)
+ }
+}
+
+impl fmt::Debug for Block {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Block<{:?}>", self.name)
+ }
+}
+
+impl RegistryEntry for Block {
+ fn get_name(&self) -> &str {
+ self.name
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+/// the possible rotation states of a object
+#[repr(u8)]
+pub enum Rotation {
+ Up,
+ Right,
+ Down,
+ Left,
+}
+
+impl Rotation {
+ #[must_use]
+ /// count rotations
+ pub const fn count(self) -> u8 {
+ self as u8
+ }
+
+ #[must_use]
+ /// mask
+ pub const fn mask(self) -> U4 {
+ match self {
+ Rotation::Up => B1000,
+ Rotation::Right => B0100,
+ Rotation::Down => B0010,
+ Rotation::Left => B0001,
+ }
+ }
+
+ #[must_use]
+ /// character of this rot (Right => >, Up => ^, Left => <, Down => v)
+ pub const fn ch(self) -> char {
+ match self {
+ Rotation::Right => '>',
+ Rotation::Up => '^',
+ Rotation::Left => '<',
+ Rotation::Down => 'v',
+ }
+ }
+
+ #[must_use]
+ /// mirror the directions.
+ pub const fn mirrored(self, horizontally: bool, vertically: bool) -> Self {
+ match self {
+ Self::Right => {
+ if horizontally {
+ Self::Left
+ } else {
+ Self::Right
+ }
+ }
+ Self::Up => {
+ if vertically {
+ Self::Down
+ } else {
+ Self::Up
+ }
+ }
+ Self::Left => {
+ if horizontally {
+ Self::Right
+ } else {
+ Self::Left
+ }
+ }
+ Self::Down => {
+ if vertically {
+ Self::Up
+ } else {
+ Self::Down
+ }
+ }
+ }
+ }
+
+ /// mirror in place
+ pub fn mirror(&mut self, horizontally: bool, vertically: bool) {
+ *self = self.mirrored(horizontally, vertically);
+ }
+
+ #[must_use]
+ /// rotate the rotation
+ pub const fn rotated(self, clockwise: bool) -> Self {
+ match self {
+ Self::Right => {
+ if clockwise {
+ Self::Down
+ } else {
+ Self::Up
+ }
+ }
+ Self::Up => {
+ if clockwise {
+ Self::Right
+ } else {
+ Self::Left
+ }
+ }
+ Self::Left => {
+ if clockwise {
+ Self::Up
+ } else {
+ Self::Down
+ }
+ }
+ Self::Down => {
+ if clockwise {
+ Self::Left
+ } else {
+ Self::Right
+ }
+ }
+ }
+ }
+
+ /// rotate the rotation in place
+ pub fn rotate(&mut self, clockwise: bool) {
+ *self = self.rotated(clockwise);
+ }
+
+ #[must_use]
+ /// rotate 180
+ pub const fn rotated_180(self) -> Self {
+ match self {
+ Self::Right => Self::Left,
+ Self::Up => Self::Down,
+ Self::Left => Self::Right,
+ Self::Down => Self::Up,
+ }
+ }
+
+ /// rotate 180 in place
+ pub fn rotate_180(&mut self) {
+ *self = self.rotated_180();
+ }
+}
+
+impl From<u8> for Rotation {
+ fn from(val: u8) -> Self {
+ match val & 3 {
+ 0 => Self::Right,
+ 1 => Self::Up,
+ 2 => Self::Left,
+ _ => Self::Down,
+ }
+ }
+}
+
+impl From<Rotation> for u8 {
+ fn from(rot: Rotation) -> Self {
+ match rot {
+ Rotation::Right => 0,
+ Rotation::Up => 1,
+ Rotation::Left => 2,
+ Rotation::Down => 3,
+ }
+ }
+}
+
+pub type BlockRegistry<'l> = crate::registry::Registry<'l, Block>;
+pub type RegisterError<'l> = crate::registry::RegisterError<'l, Block>;
+
+macro_rules! make_register {
+ ($($field:literal $op:tt $logic:expr;)+) => { paste::paste! {
+ $(
+ $crate::block::make_register!(impl $field $op $logic);
+ )+
+
+ pub(crate) fn register(reg: &mut $crate::block::BlockRegistry<'_>) {
+ // get the static we make
+ $(assert!(reg.register(&[<$field:snake:upper>]).is_ok());)+
+ }
+ }};
+ (impl $field: literal => $logic: expr) => {
+ paste::paste! { pub static [<$field:snake:upper>]: $crate::block::Block = $crate::block::Block::new(
+ $field, <crate::block::BlockLogicEnum as crate::block::ConstFrom<_>>::fro($logic), None
+ ); }
+ };
+ (impl $field: literal -> $logic: expr) => {
+ paste::paste! { pub static [<$field:snake:upper>]: $crate::block::Block = $crate::block::Block::new(
+ $field, <crate::block::BlockLogicEnum as crate::block::ConstFrom<_>>::fro($logic), Some(crate::data::renderer::load!($field))
+ ); }
+ }
+}
+pub(crate) use make_register;
+
+#[must_use]
+/// create a block registry
+pub fn build_registry() -> BlockRegistry<'static> {
+ let mut reg = BlockRegistry::default();
+ register(&mut reg);
+ reg
+}
+
+fn register(reg: &mut BlockRegistry<'_>) {
+ turrets::register(reg);
+ drills::register(reg);
+ distribution::register(reg);
+ storage::register(reg);
+ liquid::register(reg);
+ power::register(reg);
+ defense::register(reg);
+ production::register(reg);
+ payload::register(reg);
+ campaign::register(reg);
+ logic::register(reg);
+ walls::register(reg);
+ environment::register(reg);
+ units::register(reg);
+}
diff --git a/src/block/payload.rs b/src/block/payload.rs
new file mode 100644
index 0000000..6a8ef11
--- /dev/null
+++ b/src/block/payload.rs
@@ -0,0 +1,324 @@
+//! payload related bits and bobs
+use thiserror::Error;
+
+use crate::block::content::Type as BlockEnum;
+use crate::block::distribution::BridgeBlock;
+use crate::block::simple::*;
+use crate::block::{self, *};
+use crate::content::{self, Content};
+use crate::data::dynamic::DynType;
+use crate::data::ReadError;
+use crate::unit;
+
+use super::BlockRegistry;
+
+make_simple!(SimplePayloadBlock, |_, n, _, _, r: Rotation, scl| {
+ match n {
+ "deconstructor" | "small-deconstructor" | "payload-void" => {
+ let mut base = load!(from n which is ["deconstructor" | "small-deconstructor" | "payload-void"], scl);
+ let mut r#in = load!(scl -> match n {
+ "small-deconstructor" => "factory-in-3",
+ _ => "factory-in-5",
+ });
+ unsafe {
+ base.overlay(r#in.rotate(r.rotated(false).count()))
+ .overlay(&load!(scl -> match n {
+ "small-deconstructor" => "small-deconstructor-top",
+ "deconstructor" => "deconstructor-top",
+ _ => "payload-void-top",
+ }))
+ };
+ base
+ }
+ // "payload-loader" | "payload-unloader"
+ _ => {
+ let mut base = load!(from n which is ["payload-loader" | "payload-unloader"], scl);
+ let mut input = load!("factory-in-3-dark", scl);
+ let mut output = load!("factory-out-3-dark", scl);
+ unsafe {
+ base.overlay(input.rotate(r.rotated(false).count()))
+ .overlay(output.rotate(r.rotated(false).count()))
+ .overlay(
+ &load!(concat "top" => n which is ["payload-loader" | "payload-unloader"], scl),
+ )
+ };
+ base
+ }
+ }
+});
+make_simple!(
+ PayloadConveyor,
+ |_, n, _, _, r: Rotation, s| {
+ let mut base =
+ load!(from n which is ["payload-conveyor" | "reinforced-payload-conveyor"], s);
+ unsafe { base.rotate(r.rotated(false).count()) };
+ base
+ },
+ read_payload_conveyor
+);
+// make_simple!(PayloadRouter => read_payload_router);
+
+make_register! {
+ "payload-conveyor" => PayloadConveyor::new(3, false, cost!(Copper: 10, Graphite: 10));
+ "payload-router" => PayloadBlock::new(3, false, cost!(Copper: 10, Graphite: 15));
+ "reinforced-payload-conveyor" => PayloadConveyor::new(3, false, cost!(Tungsten: 10));
+ "reinforced-payload-router" => PayloadBlock::new(3, false, cost!(Tungsten: 15));
+ "payload-mass-driver" -> BridgeBlock::new(3, true, cost!(Tungsten: 120, Silicon: 120, Graphite: 50), 700, false);
+ "large-payload-mass-driver" -> BridgeBlock::new(5, true, cost!(Thorium: 200, Tungsten: 200, Silicon: 200, Graphite: 100, Oxide: 30), 1100, false);
+ "small-deconstructor" => SimplePayloadBlock::new(3, true, cost!(Beryllium: 100, Silicon: 100, Oxide: 40, Graphite: 80));
+ "deconstructor" => SimplePayloadBlock::new(5, true, cost!(Beryllium: 250, Oxide: 100, Silicon: 250, Carbide: 250));
+ "constructor" => PayloadBlock::new(3, true, cost!(Silicon: 100, Beryllium: 150, Tungsten: 80));
+ "large-constructor" => PayloadBlock::new(5, true, cost!(Silicon: 150, Oxide: 150, Tungsten: 200, PhaseFabric: 40));
+ "payload-loader" => SimplePayloadBlock::new(3, false, cost!(Graphite: 50, Silicon: 50, Tungsten: 80));
+ "payload-unloader" => SimplePayloadBlock::new(3, false, cost!(Graphite: 50, Silicon: 50, Tungsten: 30));
+ // sandbox only
+ "payload-source" => PayloadBlock::new(5, false, &[]);
+ "payload-void" => SimplePayloadBlock::new(5, true, &[]);
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+/// payload item cfg
+pub enum Payload {
+ Empty,
+ Block(block::content::Type),
+ Unit(unit::Type),
+}
+
+/// a payload related block with [item cfg](Payload)
+pub struct PayloadBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+}
+
+impl PayloadBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
+ assert!(size != 0, "invalid size");
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ }
+ }
+
+ state_impl!(pub Payload);
+}
+
+impl BlockLogic for PayloadBlock {
+ impl_block!();
+
+ fn draw(
+ &self,
+ name: &str,
+ _: Option<&State>,
+ _: Option<&RenderingContext>,
+ r: Rotation,
+ s: Scale,
+ ) -> ImageHolder<4> {
+ match name {
+ "payload-router" | "reinforced-payload-router" => {
+ let mut base =
+ load!(from name which is ["payload-router" | "reinforced-payload-router"], s);
+ unsafe {
+ base.rotate(r.rotated(false).count());
+ base.overlay(& load!(concat "over" => name which is ["payload-router" | "reinforced-payload-router"], s));
+ }
+ base
+ }
+ _ => {
+ let mut base = load!(from name which is ["constructor" | "large-constructor" | "payload-source"], s);
+ let mut out = load!(s -> match name {
+ "constructor" => "factory-out-3",
+ "large-constructor" => "factory-out-5-dark",
+ _ => "factory-out-5",
+ });
+ unsafe {
+ out.rotate(r.rotated(false).count());
+ base.overlay(&out);
+ base.overlay(&load!(concat "top" => name which is ["constructor" | "large-constructor" | "payload-source"], s))
+ };
+ base
+ }
+ }
+ }
+
+ fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ Ok(DynData::Empty)
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Empty => Ok(Some(Self::create_state(Payload::Empty))),
+ DynData::Content(content::Type::Block, id) => {
+ let block = PayloadDeserializeError::forward(block::content::Type::try_from(id))?;
+ Ok(Some(Self::create_state(Payload::Block(block))))
+ }
+ DynData::Content(content::Type::Unit, id) => {
+ let unit = PayloadDeserializeError::forward(unit::Type::try_from(id))?;
+ Ok(Some(Self::create_state(Payload::Unit(unit))))
+ }
+ DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new(
+ PayloadDeserializeError::ContentType(have),
+ ))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Content,
+ }),
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ match Self::get_state(state) {
+ Payload::Empty => Ok(DynData::Empty),
+ Payload::Block(block) => Ok(DynData::Content(content::Type::Block, (*block).into())),
+ Payload::Unit(unit) => Ok(DynData::Content(content::Type::Unit, (*unit).into())),
+ }
+ }
+}
+
+/// format:
+/// - call [`read_payload_conveyor`]
+/// - t: [`u8`]
+/// - sort: [`u16`]
+/// - recdir: [`u8`]
+fn read_payload_router(
+ b: &mut Build,
+ reg: &BlockRegistry,
+ entity_mapping: &EntityMapping,
+ buff: &mut DataRead,
+) -> Result<(), DataReadError> {
+ read_payload_conveyor(b, reg, entity_mapping, buff)?;
+ buff.skip(4)
+}
+
+/// format:
+/// - [skip(4)](`DataRead::skip`)
+/// - rot: [`f32`]
+/// - become [`read_payload`]
+fn read_payload_conveyor(
+ _: &mut Build,
+ reg: &BlockRegistry,
+ entity_mapping: &EntityMapping,
+ buff: &mut DataRead,
+) -> Result<(), DataReadError> {
+ buff.skip(8)?;
+ read_payload(reg, entity_mapping, buff)
+}
+
+/// format:
+/// - iterate [`i16`]..0
+/// - [`u8`], [`i16`], [`i32`]
+pub(crate) fn read_payload_seq(buff: &mut DataRead) -> Result<(), DataReadError> {
+ let amount = (-buff.read_i16()?) as usize;
+ buff.skip(amount * 7)
+}
+
+/// format:
+/// - vector: ([`f32`], [`f32`])
+/// - rotation: [`f32`]
+/// - become [`read_payload`]
+pub(crate) fn read_payload_block(
+ reg: &BlockRegistry,
+ entity_mapping: &EntityMapping,
+ buff: &mut DataRead,
+) -> Result<(), DataReadError> {
+ buff.skip(12)?;
+ read_payload(reg, entity_mapping, buff)
+}
+
+/// format:
+/// - exists: [`bool`]
+/// - if !exists: ok
+/// - type: [`u8`]
+/// - if type == `1` (payload block):
+/// - block: [`u16`]
+/// - version: [`u8`]
+/// - [`BlockLogic::read`] (recursion :ferrisHmm:),
+/// - if type == 2 (paylood unit):
+/// - id: [`u8`]
+/// - unit read???????? TODO
+fn read_payload(
+ reg: &BlockRegistry,
+ entity_mapping: &crate::data::map::EntityMapping,
+ buff: &mut DataRead,
+) -> Result<(), DataReadError> {
+ if !buff.read_bool()? {
+ return Ok(());
+ }
+ let t = buff.read_u8()?;
+ const BLOCK: u8 = 1;
+ const UNIT: u8 = 0;
+ match t {
+ BLOCK => {
+ let b = buff.read_u16()?;
+ let b = BlockEnum::try_from(b).unwrap_or(BlockEnum::Router);
+ let block = reg.get(b.get_name()).unwrap();
+ block
+ .logic
+ .read(&mut Build::new(block), reg, entity_mapping, buff)?;
+ }
+ UNIT => {
+ let u = buff.read_u8()?;
+ let Some(_u) = entity_mapping.get(&u) else {
+ return Err(ReadError::Expected("map entry"));
+ };
+ // unit::Type::try_from(u).unwrap_or(unit::Type::Alpha).read(todo!());
+ }
+ _ => return Err(ReadError::Expected("0 | 1")),
+ }
+ Ok(())
+}
+
+#[cfg(test)]
+mod tests {
+ use std::collections::HashMap;
+
+ use crate::registry::Registry;
+
+ use super::*;
+ #[test]
+ fn payload_conv() {
+ let mut reg = Registry::default();
+ register(&mut reg);
+ let mut r = DataRead::new(&[0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ read_payload_conveyor(
+ &mut Build::new(&PAYLOAD_CONVEYOR),
+ &reg,
+ &HashMap::default(),
+ &mut r,
+ )
+ .unwrap();
+ assert!(r.read_bool().is_err());
+ let mut r = DataRead::new(&[
+ 65, 198, 232, 0, 67, 51, 255, 249, 1, 1, 0, 157, 0, 67, 197, 128, 0, 128, 1, 3,
+ ]);
+ read_payload_conveyor(
+ &mut Build::new(&PAYLOAD_CONVEYOR),
+ &reg,
+ &HashMap::default(),
+ &mut r,
+ )
+ .unwrap();
+ assert!(r.read_bool().is_err());
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
+pub enum PayloadDeserializeError {
+ #[error("expected Unit or Block but got {0:?}")]
+ ContentType(content::Type),
+ #[error("payload block not found")]
+ BlockNotFound(#[from] block::content::TryFromU16Error),
+ #[error("payload unit not found")]
+ UnitNotFound(#[from] unit::TryFromU16Error),
+}
+
+impl PayloadDeserializeError {
+ pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
+ }
+ }
+}
diff --git a/src/block/power.rs b/src/block/power.rs
new file mode 100644
index 0000000..62f32f8
--- /dev/null
+++ b/src/block/power.rs
@@ -0,0 +1,251 @@
+//! power connection and generation
+use thiserror::Error;
+
+use crate::block::simple::*;
+use crate::block::*;
+use crate::data::dynamic::DynType;
+
+make_simple!(GeneratorBlock => |_, _, _, buff: &mut DataRead| read_generator(buff));
+make_simple!(NuclearGeneratorBlock => |_, _, _, buff: &mut DataRead| read_nuclear(buff));
+make_simple!(ImpactReactorBlock => |_, _, _, buff: &mut DataRead| read_impact(buff));
+make_simple!(
+ Neoplasia,
+ |_, _, _, _, rot: Rotation, scl| {
+ let mut base = load!("neoplasia-reactor", scl);
+ unsafe {
+ base.overlay(
+ load!(scl -> match rot {
+ Rotation::Up | Rotation::Right => "neoplasia-reactor-top1",
+ Rotation::Down | Rotation::Left => "neoplasia-reactor-top2",
+ })
+ .rotate(rot.rotated(false).count()),
+ )
+ };
+ base
+ },
+ |_, _, _, buff: &mut DataRead| read_heater(buff)
+);
+make_simple!(DiodeBlock, |_, _, _, _, rot: Rotation, s| {
+ let mut base = load!("diode", s);
+ if rot == Rotation::Right {
+ return base;
+ }
+ let mut top = load!("diode-arrow", s);
+ unsafe {
+ top.rotate(rot.rotated(false).count());
+ base.overlay(&top)
+ };
+ base
+});
+
+make_register! {
+ // illuminator == power ?????
+ "illuminator" -> LampBlock::new(1, true, cost!(Lead: 8, Graphite: 12, Silicon: 8));
+ "power-node" -> ConnectorBlock::new(1, true, cost!(Copper: 1, Lead: 3), 10);
+ "power-node-large" -> ConnectorBlock::new(2, true, cost!(Lead: 10, Titanium: 5, Silicon: 3), 15);
+ "surge-tower" -> ConnectorBlock::new(2, true, cost!(Lead: 10, Titanium: 7, Silicon: 15, SurgeAlloy: 15), 2);
+ "diode" => DiodeBlock::new(1, false, cost!(Metaglass: 10, Silicon: 10, Plastanium: 5));
+ "battery" -> BasicBlock::new(1, true, cost!(Copper: 5, Lead: 20));
+ "battery-large" -> BasicBlock::new(3, true, cost!(Lead: 50, Titanium: 20, Silicon: 30));
+ "combustion-generator" -> GeneratorBlock::new(1, true, cost!(Copper: 25, Lead: 15));
+ "thermal-generator" -> GeneratorBlock::new(2, true, cost!(Copper: 40, Lead: 50, Metaglass: 40, Graphite: 35, Silicon: 35));
+ "steam-generator" -> GeneratorBlock::new(2, true, cost!(Copper: 35, Lead: 40, Graphite: 25, Silicon: 30));
+ "differential-generator" -> GeneratorBlock::new(3, true, cost!(Copper: 70, Lead: 100, Metaglass: 50, Titanium: 50, Silicon: 65));
+ "rtg-generator" -> GeneratorBlock::new(2, true, cost!(Lead: 100, Thorium: 50, Silicon: 75, Plastanium: 75, PhaseFabric: 25));
+ "solar-panel" -> GeneratorBlock::new(1, true, cost!(Lead: 10, Silicon: 15));
+ "solar-panel-large" -> GeneratorBlock::new(3, true, cost!(Lead: 80, Silicon: 110, PhaseFabric: 15));
+ "thorium-reactor" -> NuclearGeneratorBlock::new(3, true, cost!(Lead: 300, Metaglass: 50, Graphite: 150, Thorium: 150, Silicon: 200));
+ "impact-reactor" -> ImpactReactorBlock::new(4, true,
+ cost!(Lead: 500, Metaglass: 250, Graphite: 400, Thorium: 100, Silicon: 300, SurgeAlloy: 250));
+ "beam-node" -> ConnectorBlock::new(1, true, cost!(Beryllium: 8), 4);
+ "beam-tower" -> ConnectorBlock::new(3, true, cost!(Beryllium: 30, Oxide: 10, Silicon: 10), 12);
+ "turbine-condenser" -> GeneratorBlock::new(3, true, cost!(Beryllium: 60));
+ "chemical-combustion-chamber" -> GeneratorBlock::new(3, true, cost!(Graphite: 40, Tungsten: 40, Oxide: 40, Silicon: 30));
+ "pyrolysis-generator" -> GeneratorBlock::new(3, true, cost!(Graphite: 50, Carbide: 50, Oxide: 60, Silicon: 50));
+ "flux-reactor" -> GeneratorBlock::new(5, true, cost!(Graphite: 300, Carbide: 200, Oxide: 100, Silicon: 600, SurgeAlloy: 300));
+ "neoplasia-reactor" => Neoplasia::new(5, true, cost!(Tungsten: 1000, Carbide: 300, Oxide: 150, Silicon: 500, PhaseFabric: 300, SurgeAlloy: 200));
+ // editor only
+ "beam-link" -> ConnectorBlock::new(3, true, &[], 12);
+ // sandbox only
+ "power-source" -> ConnectorBlock::new(1, true, &[], 100);
+ "power-void" -> GeneratorBlock::new(1, true, &[]);
+}
+
+pub struct ConnectorBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+ pub max: u8,
+}
+
+impl ConnectorBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost, max: u8) -> Self {
+ assert!(size != 0, "invalid size");
+ assert!(
+ !(max == 0 || max > i8::MAX as u8),
+ "invalid maximum link count"
+ );
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ max,
+ }
+ }
+ state_impl!(pub Vec<(i16, i16)>);
+}
+
+impl BlockLogic for ConnectorBlock {
+ impl_block!();
+
+ fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ Ok(DynData::Empty)
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Empty => Ok(Some(Self::create_state(Vec::new()))),
+ DynData::Point2Array(s) => Ok(Some(Self::create_state(s))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Boolean,
+ }),
+ }
+ }
+
+ fn mirror_state(&self, state: &mut State, horizontally: bool, vertically: bool) {
+ for (dx, dy) in &mut *Self::get_state_mut(state) {
+ if horizontally {
+ *dx = -*dx;
+ }
+ if vertically {
+ *dy = -*dy;
+ }
+ }
+ }
+
+ fn rotate_state(&self, state: &mut State, clockwise: bool) {
+ for (dx, dy) in &mut *Self::get_state_mut(state) {
+ let (cdx, cdy) = (*dx, *dy);
+ *dx = if clockwise { cdy } else { -cdy };
+ *dy = if clockwise { -cdx } else { cdx };
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ Ok(DynData::Point2Array(Self::get_state(state).clone()))
+ }
+}
+
+#[derive(Debug, Error)]
+pub enum ConnectorDeserializeError {
+ #[error("too many links ({have} but only {max} allowed)")]
+ LinkCount { have: usize, max: u8 },
+}
+
+impl ConnectorDeserializeError {
+ pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
+ }
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub struct Rgba(u8, u8, u8, u8);
+
+impl From<u32> for Rgba {
+ fn from(value: u32) -> Self {
+ Self(
+ (value >> 24) as u8,
+ (value >> 16) as u8,
+ (value >> 8) as u8,
+ value as u8,
+ )
+ }
+}
+
+impl From<Rgba> for u32 {
+ fn from(value: Rgba) -> Self {
+ (u32::from(value.0) << 24)
+ | (u32::from(value.1) << 16)
+ | (u32::from(value.2) << 8)
+ | u32::from(value.3)
+ }
+}
+
+pub struct LampBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+}
+
+impl LampBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
+ assert!(size != 0, "invalid size");
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ }
+ }
+
+ state_impl!(pub Rgba);
+}
+
+impl BlockLogic for LampBlock {
+ impl_block!();
+
+ fn data_from_i32(&self, config: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ Ok(DynData::Int(config))
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Int(rgba) => Ok(Some(Self::create_state(Rgba::from(rgba as u32)))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Int,
+ }),
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ let state = Self::get_state(state);
+ Ok(DynData::Int(u32::from(*state) as i32))
+ }
+}
+
+/// format:
+/// - production efficiency: [`f32`]
+/// - generate time: [`f32`]
+fn read_generator(buff: &mut DataRead) -> Result<(), DataReadError> {
+ buff.skip(8)
+}
+
+/// format:
+/// - call [`read_generator`]
+/// - heat: [`f32`]
+fn read_nuclear(buff: &mut DataRead) -> Result<(), DataReadError> {
+ read_generator(buff)?;
+ buff.skip(4)
+}
+
+/// format:
+/// - call [`read_generator`]
+/// - warmup: [`f32`]
+fn read_impact(buff: &mut DataRead) -> Result<(), DataReadError> {
+ read_generator(buff)?;
+ buff.skip(4)
+}
+
+/// format:
+/// - call [`read_generator`]
+/// - heat: [`f32`]
+fn read_heater(buff: &mut DataRead) -> Result<(), DataReadError> {
+ read_generator(buff)?;
+ buff.skip(4)
+}
diff --git a/src/block/production.rs b/src/block/production.rs
new file mode 100644
index 0000000..cd48482
--- /dev/null
+++ b/src/block/production.rs
@@ -0,0 +1,120 @@
+//! the industry part of mindustry
+use crate::block::simple::*;
+use crate::block::*;
+use crate::data::DataRead;
+
+make_register! {
+ "cultivator" -> ProductionBlock::new(2, true, cost!(Copper: 25, Lead: 25, Silicon: 10));
+ "graphite-press" -> ProductionBlock::new(2, true, cost!(Copper: 75, Lead: 30));
+ "multi-press" -> ProductionBlock::new(3, true, cost!(Lead: 100, Graphite: 50, Titanium: 100, Silicon: 25));
+ "silicon-smelter" -> ProductionBlock::new(2, true, cost!(Copper: 30, Lead: 25));
+ "silicon-crucible" -> ProductionBlock::new(3, true, cost!(Metaglass: 80, Titanium: 120, Silicon: 60, Plastanium: 35));
+ "kiln" -> ProductionBlock::new(2, true, cost!(Copper: 60, Lead: 30, Graphite: 30));
+ "plastanium-compressor" -> ProductionBlock::new(2, true, cost!(Lead: 115, Graphite: 60, Titanium: 80, Silicon: 80));
+ "phase-weaver" -> ProductionBlock::new(2, true, cost!(Lead: 120, Thorium: 75, Silicon: 130));
+ "surge-smelter" -> ProductionBlock::new(3, true, cost!(Lead: 80, Thorium: 70, Silicon: 80));
+ "cryofluid-mixer" -> ProductionBlock::new(2, true, cost!(Lead: 65, Thorium: 60, Silicon: 40));
+ "pyratite-mixer" -> ProductionBlock::new(2, true, cost!(Copper: 50, Lead: 25));
+ "blast-mixer" -> ProductionBlock::new(2, true, cost!(Lead: 30, Thorium: 20));
+ "melter" -> ProductionBlock::new(1, true, cost!(Copper: 30, Lead: 35, Graphite: 45));
+ "separator" -> SeparatorBlock::new(2, true, cost!(Copper: 30, Titanium: 25));
+ "disassembler" -> SeparatorBlock::new(3, true, cost!(Titanium: 100, Thorium: 80, Silicon: 150, Plastanium: 40));
+ "spore-press" -> ProductionBlock::new(2, true, cost!(Lead: 35, Silicon: 30));
+ "pulverizer" -> ProductionBlock::new(1, true, cost!(Copper: 30, Lead: 25));
+ "coal-centrifuge" -> ProductionBlock::new(2, true, cost!(Lead: 30, Graphite: 40, Titanium: 20));
+ "incinerator" -> BasicBlock::new(1, true, cost!(Lead: 15, Graphite: 5));
+ "silicon-arc-furnace" -> ProductionBlock::new(3, true, cost!(Beryllium: 70, Graphite: 80));
+ "electrolyzer" => ProductionBlock::new(3, true, cost!(Silicon: 50, Graphite: 40, Beryllium: 130, Tungsten: 80));
+ "atmospheric-concentrator" -> ProductionBlock::new(3, true, cost!(Oxide: 60, Beryllium: 180, Silicon: 150));
+ "oxidation-chamber" => HeatCrafter::new(3, true, cost!(Tungsten: 120, Graphite: 80, Silicon: 100, Beryllium: 120));
+ "electric-heater" => HeatCrafter::new(2, false, cost!(Tungsten: 30, Oxide: 30));
+ "slag-heater" => HeatCrafter::new(3, false, cost!(Tungsten: 50, Oxide: 20, Beryllium: 20));
+ "phase-heater" => HeatCrafter::new(2, false, cost!(Oxide: 30, Carbide: 30, Beryllium: 30));
+ "heat-redirector" => HeatConduit::new(3, false, cost!(Tungsten: 10, Graphite: 10));
+ "heat-router" => HeatConduit::new(3, false, cost!(Tungsten: 15, Graphite: 10));
+ "slag-incinerator" -> BasicBlock::new(1, true, cost!(Tungsten: 15));
+ "carbide-crucible" -> ProductionBlock::new(3, true, cost!(Tungsten: 110, Thorium: 150, Oxide: 60));
+ // slag centrifuge
+ "surge-crucible" -> ProductionBlock::new(3, true, cost!(Silicon: 100, Graphite: 80, Tungsten: 80, Oxide: 80));
+ "cyanogen-synthesizer" -> ProductionBlock::new(3, true, cost!(Carbide: 50, Silicon: 80, Beryllium: 90));
+ "phase-synthesizer" -> ProductionBlock::new(3, true, cost!(Carbide: 90, Silicon: 100, Thorium: 100, Tungsten: 200));
+ // heat reactor
+ // sandbox only
+ "heat-source" => HeatCrafter::new(1, false, &[]);
+}
+
+// format: call [`read_production_block`], seed: [`i32`]
+make_simple!(SeparatorBlock => |_, _, _, buff: &mut DataRead| buff.skip(12));
+
+make_simple!(
+ ProductionBlock,
+ |_, _, _, _, r: Rotation, s| {
+ // electrolyzer exclusive
+ // ozone <- e(^) -> hydrogen
+ let mut base = load!("electrolyzer", s);
+ unsafe {
+ base.overlay(
+ load!(s -> match r {
+ Rotation::Up | Rotation::Left => "electrolyzer-hydrogen-output1"
+ Rotation::Down | Rotation::Right => "electrolyzer-hydrogen-output2"
+ })
+ .rotate(r.count()),
+ );
+ base.overlay(
+ load!(s -> match r {
+ Rotation::Down | Rotation::Right => "electrolyzer-ozone-output1"
+ Rotation::Up | Rotation::Left => "electrolyzer-ozone-output2"
+ })
+ .rotate(r.mirrored(true, true).count()),
+ );
+ }
+ base
+ },
+ |b: &mut Build<'_>, _, _, buff: &mut DataRead| {
+ // format:
+ // - progress: `f32`
+ // - warmup: `f32`
+ // (cultivator)
+ // `f32`
+ buff.skip(8 + if b.name() == "cultivator" { 4 } else { 0 })
+ }
+);
+
+make_simple!(
+ HeatCrafter,
+ |_, n, _, _, r: Rotation, s| {
+ let mut base = load!(from n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater" | "heat-source"], s);
+ unsafe {
+ base.overlay(match r {
+ Rotation::Up | Rotation::Right => load!(concat "top1" => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater" | "heat-source"], s),
+ Rotation::Down | Rotation::Left => load!(concat "top2" => n which is ["phase-heater" | "electric-heater" | "oxidation-chamber" | "slag-heater" | "heat-source"], s)
+ }.rotate(r.rotated(false).count()))
+ };
+ base
+ },
+ |_, _, _, buff: &mut DataRead| {
+ // format:
+ // - progress: `f32`
+ // - warmup: `f32`
+ // - heat: f32
+ buff.skip(12)?;
+ Ok(())
+ }
+);
+make_simple!(HeatConduit, |_, n, _, _, r: Rotation, s| {
+ let mut base = load!(from n which is ["heat-router" | "heat-redirector"], s);
+ unsafe {
+ base.overlay(
+ match r {
+ Rotation::Up | Rotation::Right => {
+ load!(concat "top1" => n which is ["heat-router" | "heat-redirector"], s)
+ }
+ Rotation::Down | Rotation::Left => {
+ load!(concat "top2" => n which is ["heat-router" | "heat-redirector"], s)
+ }
+ }
+ .rotate(r.rotated(false).count()),
+ )
+ };
+ base
+});
diff --git a/mindus/src/block/simple.rs b/src/block/simple.rs
index 602f34d..5c4c326 100644
--- a/mindus/src/block/simple.rs
+++ b/src/block/simple.rs
@@ -54,13 +54,13 @@ macro_rules! make_simple {
&self,
_: i32,
_: crate::data::GridPos,
- ) -> Result<crate::data::dynamic::DynData, crate::block::DataConvertError> {
- Ok(crate::data::dynamic::DynData::Empty)
+ ) -> Result<crate::DynData, crate::block::DataConvertError> {
+ Ok(crate::DynData::Empty)
}
fn deserialize_state(
&self,
- _: crate::data::dynamic::DynData,
+ _: crate::DynData,
) -> Result<Option<crate::block::State>, crate::block::DeserializeError> {
Ok(None)
}
@@ -76,8 +76,8 @@ macro_rules! make_simple {
fn serialize_state(
&self,
_: &crate::block::State,
- ) -> Result<crate::data::dynamic::DynData, crate::block::SerializeError> {
- Ok(crate::data::dynamic::DynData::Empty)
+ ) -> Result<crate::DynData, crate::block::SerializeError> {
+ Ok(crate::DynData::Empty)
}
fn draw(
@@ -88,20 +88,24 @@ macro_rules! make_simple {
rot: crate::block::Rotation,
scale: crate::data::renderer::Scale,
) -> crate::data::renderer::ImageHolder<4> {
+ #[allow(clippy::redundant_closure_call)]
$draw(self, name, state, context, rot, scale)
}
fn read(
&self,
build: &mut crate::data::map::Build,
+ reg: &crate::block::BlockRegistry,
+ entity_mapping: &crate::data::map::EntityMapping,
buff: &mut crate::data::DataRead,
) -> Result<(), crate::data::ReadError> {
- $read(build, buff)
+ #[allow(clippy::redundant_closure_call)]
+ $read(build, reg, entity_mapping, buff)
}
}
};
($name: ident, $draw: expr) => {
- crate::block::simple::make_simple!($name, $draw, |_, _| Ok(()));
+ crate::block::simple::make_simple!($name, $draw, |_, _, _, _| Ok(()));
};
($name: ident, $draw: expr, $read: expr) => {
crate::block::simple::make_simple!($name, $draw, $read);
@@ -113,7 +117,11 @@ macro_rules! make_simple {
crate::block::simple::make_simple!($name, |_, _, _, _, _, scl| $draw(scl), $read);
};
($name: ident / $draw: expr) => {
- crate::block::simple::make_simple!($name, |_, _, _, _, _, scl| $draw(scl), |_, _| Ok(()));
+ crate::block::simple::make_simple!(
+ $name,
+ |_, _, _, _, _, scl| $draw(scl),
+ |_, _, _, _| Ok(())
+ );
};
($name: ident) => {
crate::block::simple::make_simple!($name, |_, n, _, _, _, _| unimplemented!("{n}"));
diff --git a/src/block/storage.rs b/src/block/storage.rs
new file mode 100644
index 0000000..c28b7bd
--- /dev/null
+++ b/src/block/storage.rs
@@ -0,0 +1,16 @@
+//! cores, vaults, containers
+use crate::block::make_register;
+use crate::block::simple::*;
+
+make_register! {
+ "core-shard" -> BasicBlock::new(3, true, cost!(Copper: 1000, Lead: 800));
+ "core-foundation" -> BasicBlock::new(4, true, cost!(Copper: 3000, Lead: 3000, Silicon: 2000));
+ "core-nucleus" -> BasicBlock::new(5, true, cost!(Copper: 8000, Lead: 8000, Thorium: 4000, Silicon: 5000));
+ "core-bastion" -> BasicBlock::new(4, true, cost!(Graphite: 1000, Silicon: 1000, Beryllium: 800));
+ "core-citadel" -> BasicBlock::new(5, true, cost!(Silicon: 4000, Beryllium: 4000, Tungsten: 3000, Oxide: 1000));
+ "core-acropolis" -> BasicBlock::new(6, true, cost!(Beryllium: 6000, Silicon: 5000, Tungsten: 5000, Carbide: 3000, Oxide: 3000));
+ "container" -> BasicBlock::new(2, true, cost!(Titanium: 100));
+ "vault" -> BasicBlock::new(3, true, cost!(Titanium: 250, Thorium: 125));
+ "reinforced-container" -> BasicBlock::new(2, true, cost!(Tungsten: 30, Graphite: 40));
+ "reinforced-vault" -> BasicBlock::new(3, true, cost!(Tungsten: 125, Thorium: 70, Beryllium: 100));
+}
diff --git a/src/block/turrets.rs b/src/block/turrets.rs
new file mode 100644
index 0000000..3e65ebe
--- /dev/null
+++ b/src/block/turrets.rs
@@ -0,0 +1,82 @@
+//! idk why its not in the [`crate::block::defense`] module
+use super::simple::make_simple;
+use crate::block::make_register;
+use crate::block::simple::cost;
+use crate::data::{DataRead, ReadError};
+
+make_register! {
+ "duo" -> ItemTurret::new(1, true, cost!(Copper: 35));
+ "scatter" -> ItemTurret::new(2, true, cost!(Copper: 85, Lead: 45));
+ "scorch" -> ItemTurret::new(1, true, cost!(Copper: 25, Graphite: 22));
+ "hail" -> ItemTurret::new(1, true, cost!(Copper: 40, Graphite: 17));
+ "wave" -> Turret::new(2, true, cost!(Copper: 25, Lead: 75, Metaglass: 45));
+ "tsunami" -> Turret::new(3, true, cost!(Lead: 400, Metaglass: 100, Titanium: 250, Thorium: 100));
+ "lancer" -> Turret::new(2, true, cost!(Copper: 60, Lead: 70, Titanium: 30, Silicon: 60));
+ "arc" -> Turret::new(1, true, cost!(Copper: 50, Lead: 50));
+ "parallax" -> TractorBeamTurret::new(2, true, cost!(Graphite: 30, Titanium: 90, Silicon: 120));
+ "swarmer" -> ItemTurret::new(2, true, cost!(Graphite: 35, Titanium: 35, Silicon: 30, Plastanium: 45));
+ "salvo" -> ItemTurret::new(2, true, cost!(Copper: 100, Graphite: 80, Titanium: 50));
+ "segment" -> PointDefenseTurret::new(2, true, cost!(Titanium: 40, Thorium: 80, Silicon: 130, PhaseFabric: 40));
+ "fuse" -> ItemTurret::new(3, true, cost!(Copper: 225, Graphite: 225, Thorium: 100));
+ "ripple" -> ItemTurret::new(3, true, cost!(Copper: 150, Graphite: 135, Titanium: 60));
+ "cyclone" -> ItemTurret::new(3, true, cost!(Copper: 200, Titanium: 125, Plastanium: 80));
+ "foreshadow" -> ItemTurret::new(4, true, cost!(Copper: 1000, Metaglass: 600, Silicon: 600, Plastanium: 200, SurgeAlloy: 300));
+ "spectre" -> ItemTurret::new(4, true, cost!(Copper: 900, Graphite: 300, Thorium: 250, Plastanium: 175, SurgeAlloy: 250));
+ "meltdown" -> Turret::new(4, true, cost!(Copper: 1200, Lead: 350, Graphite: 300, Silicon: 325, SurgeAlloy: 325));
+ "breach" -> ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 150, Graphite: 250));
+ "diffuse" -> ItemTurret::new(3, true, cost!(Beryllium: 150, Silicon: 200, Graphite: 200, Tungsten: 50));
+ "sublimate" -> ContinousTurret::new(3, true, cost!(Tungsten: 150, Silicon: 200, Oxide: 40, Beryllium: 400));
+ "titan" -> ItemTurret::new(4, true, cost!(Tungsten: 250, Silicon: 300, Thorium: 400));
+ "disperse" -> ItemTurret::new(4, true, cost!(Thorium: 50, Oxide: 150, Silicon: 200, Beryllium: 350));
+ "afflict" -> Turret::new(4, true, cost!(SurgeAlloy: 100, Silicon: 200, Graphite: 250, Oxide: 40));
+ "lustre" -> ContinousTurret::new(4, true, cost!(Silicon: 250, Graphite: 200, Oxide: 50, Carbide: 90));
+ "scathe" -> ItemTurret::new(4, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
+ "malign" -> Turret::new(5, true, cost!(Carbide: 400, Beryllium: 2000, Silicon: 800, Graphite: 800, PhaseFabric: 300));
+ "smite" -> ItemTurret::new(5, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300));
+}
+
+make_simple!(Turret => |_, _, _, buff: &mut DataRead| read_turret(buff));
+make_simple!(PointDefenseTurret => |_, _, _, buff: &mut DataRead| read_point_defense_turret(buff));
+make_simple!(ContinousTurret => |_, _, _, buff: &mut DataRead| read_continous_turret(buff));
+make_simple!(TractorBeamTurret => |_, _, _, buff: &mut DataRead| read_tractor_beam_turret(buff));
+make_simple!(ItemTurret => |_, _, _, buff: &mut DataRead| read_item_turret(buff));
+
+/// format:
+/// - call [`read_turret`]
+/// - iterate [`u8`]
+/// - item: [`u16`] as [`Item`](crate::item::Type)
+/// - amount: [`u16`]
+fn read_item_turret(buff: &mut DataRead) -> Result<(), ReadError> {
+ read_turret(buff)?;
+ for _ in 0..buff.read_u8()? {
+ buff.skip(4)?;
+ }
+ Ok(())
+}
+
+/// format:
+/// - reload: f32
+/// - rotation: f32
+fn read_turret(buff: &mut DataRead) -> Result<(), ReadError> {
+ buff.skip(8)
+}
+
+/// format:
+/// - rotation: [`f32`]
+fn read_point_defense_turret(buff: &mut DataRead) -> Result<(), ReadError> {
+ buff.skip(4)
+}
+
+/// format:
+/// - call [`read_turret`]
+/// - last length: [`f32`]
+fn read_continous_turret(buff: &mut DataRead) -> Result<(), ReadError> {
+ read_turret(buff)?;
+ buff.skip(4)
+}
+
+/// format:
+/// - rotation: [`f32`]
+fn read_tractor_beam_turret(buff: &mut DataRead) -> Result<(), ReadError> {
+ buff.skip(4)
+}
diff --git a/src/block/units.rs b/src/block/units.rs
new file mode 100644
index 0000000..83b39af
--- /dev/null
+++ b/src/block/units.rs
@@ -0,0 +1,380 @@
+//! unit creation related blocks
+use thiserror::Error;
+
+use super::payload::{read_payload_block, read_payload_seq};
+use crate::block::simple::*;
+use crate::block::*;
+use crate::data::command::UnitCommand;
+use crate::data::dynamic::DynType;
+use crate::unit;
+
+// fn is_pay(b: &str) -> bool {
+// matches!(
+// b,
+// "ground-factory"
+// | "air-factory"
+// | "naval-factory"
+// | "additive-reconstructor"
+// | "multiplicative-reconstructor"
+// | "exponential-reconstructor"
+// | "tank-fabricator"
+// | "ship-fabricator"
+// | "mech-fabricator"
+// | "tank-refabricator"
+// | "ship-refabricator"
+// | "payload-conveyor"
+// | "payload-router"
+// | "reinforced-payload-conveyor"
+// | "reinforced-payload-router"
+// | "payload-mass-driver"
+// | "large-payload-mass-driver"
+// | "constructor"
+// | "large-constructor"
+// | "payload-source"
+// )
+// }
+
+make_simple!(
+ AssemblerBlock,
+ |_, name, _, _, rot: Rotation, s| {
+ let mut base =
+ load!(from name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s);
+ unsafe {
+ base.overlay(
+ match rot {
+ Rotation::Up | Rotation::Right => load!(concat "side1" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s),
+ Rotation::Down | Rotation::Left => load!(concat "side2" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s)
+ }
+ .rotate(rot.rotated(false).count())
+ );
+ base.overlay(&load!(concat "top" => name which is ["tank-assembler" | "ship-assembler" | "mech-assembler"], s))
+ };
+ base
+ },
+ |_, reg, map, buff| read_assembler(reg, map, buff)
+);
+
+/// format:
+/// - call [`read_payload_block`]
+/// - progress: [`f32`]
+/// - iterate [`u8`]
+/// - read: [`i32`]
+/// - call [`read_payload_seq`]
+/// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
+fn read_assembler(
+ reg: &BlockRegistry,
+ map: &EntityMapping,
+ buff: &mut DataRead,
+) -> Result<(), DataReadError> {
+ read_payload_block(reg, map, buff)?;
+ buff.skip(4)?;
+ let n = buff.read_u8()? as usize;
+ buff.skip(n * 4)?;
+ read_payload_seq(buff)?;
+ buff.skip(8)
+}
+
+make_simple!(
+ AssemblerModule,
+ |_, _, _, _, rot: Rotation, scl| {
+ let mut base = load!("basic-assembler-module", scl);
+ unsafe {
+ base.overlay(
+ load!(scl -> match rot {
+ Rotation::Up | Rotation::Right => "basic-assembler-module-side1",
+ _ => "basic-assembler-module-side2",
+ })
+ .rotate(rot.rotated(false).count()),
+ )
+ };
+ base
+ },
+ |_, reg, map, buff| read_payload_block(reg, map, buff)
+);
+
+make_simple!(
+ RepairTurret => |_, _, _, buff: &mut DataRead| {
+ buff.skip(4) // rotation: [`f32`]
+ }
+);
+
+const GROUND_UNITS: &[unit::Type] = &[unit::Type::Dagger, unit::Type::Crawler, unit::Type::Nova];
+const AIR_UNITS: &[unit::Type] = &[unit::Type::Flare, unit::Type::Mono];
+const NAVAL_UNITS: &[unit::Type] = &[unit::Type::Risso, unit::Type::Retusa];
+
+make_register! {
+ "ground-factory" => UnitFactory::new(3, false, cost!(Copper: 50, Lead: 120, Silicon: 80), GROUND_UNITS);
+ "air-factory" => UnitFactory::new(3, false, cost!(Copper: 60, Lead: 70), AIR_UNITS);
+ "naval-factory" => UnitFactory::new(3, false, cost!(Copper: 150, Lead: 130, Metaglass: 120), NAVAL_UNITS);
+ "additive-reconstructor" => ConstructorBlock::new(3, false, cost!(Copper: 200, Lead: 120, Silicon: 90));
+ "multiplicative-reconstructor" => ConstructorBlock::new(5, false, cost!(Lead: 650, Titanium: 350, Thorium: 650, Silicon: 450));
+ "exponential-reconstructor" => ConstructorBlock::new(7, false,
+ cost!(Lead: 2000, Titanium: 2000, Thorium: 750, Silicon: 1000, Plastanium: 450, PhaseFabric: 600));
+ "tetrative-reconstructor" => ConstructorBlock::new(9, false,
+ cost!(Lead: 4000, Thorium: 1000, Silicon: 3000, Plastanium: 600, PhaseFabric: 600, SurgeAlloy: 800));
+ "repair-point" -> RepairTurret::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20));
+ "repair-turret" -> RepairTurret::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60));
+ "tank-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 200, Beryllium: 150), &[unit::Type::Stell]);
+ "ship-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 250, Beryllium: 200), &[unit::Type::Elude]);
+ "mech-fabricator" => UnitFactory::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60), &[unit::Type::Merui]);
+ "tank-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 200, Tungsten: 80, Silicon: 100));
+ "mech-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 250, Tungsten: 120, Silicon: 150));
+ "ship-refabricator" => ConstructorBlock::new(3, true, cost!(Beryllium: 200, Tungsten: 100, Silicon: 150, Oxide: 40));
+ "prime-refabricator" => ConstructorBlock::new(5, true, cost!(Thorium: 250, Oxide: 200, Tungsten: 200, Silicon: 400));
+ "tank-assembler" => AssemblerBlock::new(5, true, cost!(Thorium: 500, Oxide: 150, Carbide: 80, Silicon: 500));
+ "ship-assembler" => AssemblerBlock::new(5, true, cost!(Carbide: 100, Oxide: 200, Tungsten: 500, Silicon: 800, Thorium: 400));
+ "mech-assembler" => AssemblerBlock::new(5, true, cost!(Carbide: 200, Thorium: 600, Oxide: 200, Tungsten: 500, Silicon: 900)); // smh collaris
+ "basic-assembler-module" => AssemblerModule::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block
+ "unit-repair-tower" -> BasicBlock::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80));
+
+}
+
+pub struct ConstructorBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+}
+
+impl ConstructorBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
+ assert!(size != 0, "invalid size");
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ }
+ }
+
+ state_impl!(pub Option<UnitCommand>);
+}
+
+impl BlockLogic for ConstructorBlock {
+ impl_block!();
+
+ fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ Ok(DynData::Empty)
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Empty => Ok(Some(Self::create_state(None))),
+ DynData::UnitCommand(u) => Ok(Some(Self::create_state(Some(u)))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::UnitCommand,
+ }),
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ Ok(Self::get_state(state).map_or(DynData::Empty, DynData::UnitCommand))
+ }
+
+ fn draw(
+ &self,
+ name: &str,
+ _: Option<&State>,
+ _: Option<&RenderingContext>,
+ rot: Rotation,
+ s: Scale,
+ ) -> ImageHolder<4> {
+ let mut base = load!(from name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator"], s);
+ let times = rot.rotated(false).count();
+ let mut out = load!(s -> match name {
+ "additive-reconstructor" => "factory-out-3",
+ "multiplicative-reconstructor" => "factory-out-5",
+ "tank-refabricator" | "mech-refabricator" | "ship-refabricator" =>
+ "factory-out-3-dark",
+ "exponential-reconstructor" => "factory-out-7",
+ "prime-refabricator" => "factory-out-5-dark",
+ "tetrative-reconstructor" => "factory-out-9",
+ });
+ unsafe { base.overlay(out.rotate(times)) };
+
+ let mut r#in = load!(s -> match name {
+ "additive-reconstructor" => "factory-in-3",
+ "multiplicative-reconstructor" => "factory-in-5",
+ "tank-refabricator" | "mech-refabricator" | "ship-refabricator" =>
+ "factory-in-3-dark",
+ "exponential-reconstructor" => "factory-in-7",
+ "prime-refabricator" => "factory-in-5-dark",
+ "tetrative-reconstructor" => "factory-in-9",
+ });
+ unsafe { base.overlay(r#in.rotate(times)) };
+
+ // TODO: the context cross is too small
+ // for i in 0..4u8 {
+ // if let Some((b, rot)) = dbg!(ctx.cross[i as usize]) {
+ // if rot.mirrored(true, true) != ctx.rotation && match rot {
+ // Rotation::Up => i == 3,
+ // Rotation::Right => i == 4,
+ // Rotation::Down => i == 0,
+ // Rotation::Left => i == 2,
+ // } && is_pay(b.name())
+ // {
+ // let r = unsafe { std::mem::transmute::<u8, Rotation>(i) }
+ // .mirrored(true, true)
+ // .rotated(false);
+ // let mut input = input.clone();
+ // input.rotate(r.count());
+ // base.overlay(&input);
+ // }
+ // }
+ // }
+
+ unsafe {
+ base.overlay(&load!(concat "top" => name which is ["additive-reconstructor" | "multiplicative-reconstructor" | "exponential-reconstructor" | "tetrative-reconstructor" | "tank-refabricator" | "mech-refabricator" | "ship-refabricator" | "prime-refabricator"], s))
+ };
+ base
+ }
+
+ /// format:
+ /// - call [`read_payload_block`]
+ /// - progress: [`f32`]
+ /// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
+ /// - command: [`DynData::UnitCommand`]
+ fn read(
+ &self,
+ _: &mut Build,
+ reg: &BlockRegistry,
+ map: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ read_payload_block(reg, map, buff)?;
+ buff.skip(12)?;
+ // TODO uncomment when read_payload_block impl finished
+ // b.state = self.deserialize_state(DynSerializer.deserialize(buff).unwrap()).unwrap();
+ Ok(())
+ }
+}
+
+pub struct UnitFactory {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+ valid: &'static [unit::Type],
+}
+
+impl UnitFactory {
+ #[must_use]
+ pub const fn new(
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+ valid: &'static [unit::Type],
+ ) -> Self {
+ assert!(size != 0, "invalid size");
+ assert!(!valid.is_empty(), "no valid units");
+ assert!(valid.len() <= i32::MAX as usize, "too many valid units");
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ valid,
+ }
+ }
+
+ state_impl!(pub Option<unit::Type>);
+}
+
+impl BlockLogic for UnitFactory {
+ impl_block!();
+
+ fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ Ok(DynData::Int(-1))
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Empty => Ok(Some(Self::create_state(None))),
+ DynData::Int(idx) => {
+ if idx == -1 {
+ Ok(Some(Self::create_state(None)))
+ } else if idx >= 0 && idx < self.valid.len() as i32 {
+ Ok(Some(Self::create_state(Some(self.valid[idx as usize]))))
+ } else {
+ Err(DeserializeError::Custom(Box::new(
+ AssemblerDeserializeError {
+ idx,
+ count: self.valid.len() as i32,
+ },
+ )))
+ }
+ }
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Int,
+ }),
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ if let Some(state) = Self::get_state(state) {
+ for (i, curr) in self.valid.iter().enumerate() {
+ if curr == state {
+ return Ok(DynData::Int(i as i32));
+ }
+ }
+ Err(SerializeError::Custom(Box::new(AssemblerSerializeError(
+ *state,
+ ))))
+ } else {
+ Ok(DynData::Int(-1))
+ }
+ }
+
+ fn draw(
+ &self,
+ name: &str,
+ _: Option<&State>,
+ _: Option<&RenderingContext>,
+ rot: Rotation,
+ s: Scale,
+ ) -> ImageHolder<4> {
+ let mut base = load!(from name which is ["ground-factory" | "air-factory" | "naval-factory" | "tank-fabricator" | "ship-fabricator" | "mech-fabricator"], s);
+ unsafe {
+ base.overlay(
+ load!(s -> match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "factory-out-3",
+ _ => "factory-out-3-dark",
+ })
+ .rotate(rot.rotated(false).count()),
+ )
+ .overlay(&load!(s -> match name {
+ "ground-factory" | "air-factory" | "naval-factory" => "factory-top-3",
+ "tank-fabricator" => "tank-fabricator-top",
+ "ship-fabricator" => "ship-fabricator-top",
+ "mech-fabricator" => "mech-fabricator-top",
+ }))
+ };
+ base
+ }
+
+ /// format:
+ /// - call [`read_payload_block`]
+ /// - progress: [`f32`]
+ /// - plan: [`u16`]
+ /// - point: ([`f32`], [`f32`]) (maybe [`NaN`](f32::NAN))
+ fn read(
+ &self,
+ _: &mut Build,
+ reg: &BlockRegistry,
+ mapping: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ read_payload_block(reg, mapping, buff)?;
+ buff.skip(14)
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
+#[error("invalid unit index ({idx}, valid: {count})")]
+pub struct AssemblerDeserializeError {
+ pub idx: i32,
+ pub count: i32,
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
+#[error("invalid unit {0:?}")]
+pub struct AssemblerSerializeError(unit::Type);
diff --git a/src/block/walls.rs b/src/block/walls.rs
new file mode 100644
index 0000000..4eaad5c
--- /dev/null
+++ b/src/block/walls.rs
@@ -0,0 +1,118 @@
+//! walls
+use crate::block::simple::*;
+use crate::block::*;
+use crate::data::dynamic::DynType;
+use crate::data::renderer::load;
+
+make_simple!(WallBlock, |_, _, _, _, _, s| {
+ let mut base = load!("thruster", s);
+ unsafe { base.overlay(&load!("thruster-top", s)) };
+ base
+});
+
+make_register! {
+ "copper-wall" -> WallBlock::new(1, true, cost!(Copper: 6));
+ "copper-wall-large" -> WallBlock::new(2, true, cost!(Copper: 6 * 4));
+ "titanium-wall" -> WallBlock::new(1, true, cost!(Titanium: 6));
+ "titanium-wall-large" -> WallBlock::new(2, true, cost!(Titanium: 6 * 4));
+ "plastanium-wall" -> WallBlock::new(1, true, cost!(Metaglass: 2, Plastanium: 5));
+ "plastanium-wall-large" -> WallBlock::new(2, true, cost!(Metaglass: 2 * 4, Plastanium: 5 * 4));
+ "thorium-wall" -> WallBlock::new(1, true, cost!(Thorium: 6));
+ "thorium-wall-large" -> WallBlock::new(2, true, cost!(Thorium: 6 * 4));
+ "phase-wall" -> WallBlock::new(1, true, cost!(PhaseFabric: 6));
+ "phase-wall-large" -> WallBlock::new(2, true, cost!(PhaseFabric: 6 * 4));
+ "surge-wall" -> WallBlock::new(1, true, cost!(SurgeAlloy: 6));
+ "surge-wall-large" -> WallBlock::new(2, true, cost!(SurgeAlloy: 6 * 4));
+ "door" => DoorBlock::new(1, true, cost!(Titanium: 6, Silicon: 4));
+ "door-large" => DoorBlock::new(2, true, cost!(Titanium: 6 * 4, Silicon: 4 * 4));
+ "tungsten-wall" -> WallBlock::new(1, true, cost!(Tungsten: 6));
+ "tungsten-wall-large" -> WallBlock::new(2, true, cost!(Tungsten: 6 * 4));
+ "blast-door" -> DoorBlock::new(2, true, cost!(Tungsten: 24, Silicon: 24));
+ "reinforced-surge-wall" -> WallBlock::new(1, true, cost!(SurgeAlloy: 6, Tungsten: 2));
+ "reinforced-surge-wall-large" -> WallBlock::new(2, true, cost!(SurgeAlloy: 6 * 4, Tungsten: 2 * 4));
+ "carbide-wall" -> WallBlock::new(1, true, cost!(Thorium: 6, Carbide: 6));
+ "carbide-wall-large" -> WallBlock::new(2, true, cost!(Thorium: 6 * 4, Carbide: 6 * 4));
+ "shielded-wall" -> WallBlock::new(2, true, cost!(PhaseFabric: 20, SurgeAlloy: 12, Beryllium: 12));
+ "beryllium-wall" -> WallBlock::new(1, true, cost!(Beryllium: 6));
+ "beryllium-wall-large" -> WallBlock::new(2, true, cost!(Beryllium: 6 * 4));
+ // sandbox only
+ "scrap-wall" -> WallBlock::new(1, true, cost!(Scrap: 6));
+ "scrap-wall-large" -> WallBlock::new(2, true, cost!(Scrap: 24));
+ "scrap-wall-huge" -> WallBlock::new(3, true, cost!(Scrap: 54));
+ "scrap-wall-gigantic" -> WallBlock::new(4, true, cost!(Scrap: 96));
+ "thruster" => WallBlock::new(4, false, cost!(Scrap: 96));
+}
+
+pub struct DoorBlock {
+ size: u8,
+ symmetric: bool,
+ build_cost: BuildCost,
+}
+
+impl DoorBlock {
+ #[must_use]
+ pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
+ assert!(size != 0, "invalid size");
+ Self {
+ size,
+ symmetric,
+ build_cost,
+ }
+ }
+
+ state_impl!(pub bool);
+}
+
+impl BlockLogic for DoorBlock {
+ impl_block!();
+
+ fn draw(
+ &self,
+ name: &str,
+ state: Option<&State>,
+ _: Option<&RenderingContext>,
+ _: Rotation,
+ s: Scale,
+ ) -> ImageHolder<4> {
+ if let Some(state) = state {
+ if *Self::get_state(state) {
+ return load!(s -> match name {
+ "door" => "door-open",
+ "blast-door" => "blast-door-open",
+ _ => "door-large-open",
+ });
+ };
+ }
+ load!(from name which is ["door" | "blast-door" | "door-large"], s)
+ }
+
+ fn data_from_i32(&self, _: i32, _: GridPos) -> Result<DynData, DataConvertError> {
+ Ok(DynData::Boolean(false))
+ }
+
+ fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
+ match data {
+ DynData::Boolean(opened) => Ok(Some(Self::create_state(opened))),
+ _ => Err(DeserializeError::InvalidType {
+ have: data.get_type(),
+ expect: DynType::Boolean,
+ }),
+ }
+ }
+
+ fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
+ let state = Self::get_state(state);
+ Ok(DynData::Boolean(*state))
+ }
+
+ fn read(
+ &self,
+ build: &mut Build,
+ _: &BlockRegistry,
+ _: &EntityMapping,
+ buff: &mut DataRead,
+ ) -> Result<(), DataReadError> {
+ build.state = Some(Self::create_state(buff.read_bool()?));
+ Ok(())
+ }
+}
diff --git a/src/content.rs b/src/content.rs
new file mode 100644
index 0000000..6c2872c
--- /dev/null
+++ b/src/content.rs
@@ -0,0 +1,179 @@
+//! contains types of types
+use std::error::Error;
+
+macro_rules! numeric_enum {
+ ($vis:vis enum $tname:ident for $numeric:ty | $error:ident {$($name:ident $(= $val:literal)?),* $(,)?}) =>
+ {
+ crate::content::numeric_enum!($vis enum $tname for $numeric | $error* {$($name $(= $val)?),*});
+
+ impl std::fmt::Display for $error {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "no variant of {} for value {}", stringify!($tname), self.0)
+ }
+ }
+
+ impl std::error::Error for $error {}
+ };
+ ($vis:vis enum $tname:ident for $numeric:ty | $error:ident* {$($name:ident $(= $val:literal)?),* $(,)?}) =>
+ {
+ #[repr($numeric)]
+ #[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Hash)]
+ $vis enum $tname { $($name $(= $val)?,)+ }
+
+ #[derive(Copy, Clone, Debug, Eq, PartialEq)]
+ $vis struct $error($vis $numeric);
+
+ impl TryFrom<$numeric> for $tname {
+ type Error = $error;
+
+ #[allow(non_upper_case_globals)]
+ fn try_from(value: $numeric) -> Result<Self, $error> {
+ $(const $name: $numeric = $tname::$name as $numeric;)+
+ match value {
+ $($name => Ok(Self::$name),)+
+ _ => Err($error(value)),
+ }
+ }
+ }
+
+ impl From<$tname> for $numeric { fn from(value: $tname) -> $numeric { value as $numeric } }
+ };
+}
+
+pub(crate) use numeric_enum;
+
+macro_rules! content_enum {
+ ($vis:vis enum $tname:ident / $ctype:ident for u16 | $error:ident {$($val:literal),* $(,)?}) =>
+ {
+ paste::paste! {
+ $crate::content::numeric_enum!($vis enum $tname for u16 | $error* {
+ $([<$val:camel>]),*,
+ });
+
+ impl $crate::content::Content for $tname {
+ fn get_type(&self) -> $crate::content::Type {
+ $crate::content::Type::$ctype
+ }
+
+ fn get_id(&self) -> u16 {
+ *self as u16
+ }
+
+ fn get_name(&self) -> &'static str {
+ match self {
+ $(Self::[<$val:camel>] => $val,)*
+ }
+ }
+ }
+
+ impl std::fmt::Display for $error {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "no content of type {} for value {}", stringify!($ctype), self.0)
+ }
+ }
+
+ impl std::fmt::Display for $tname {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match self {
+ $(Self::[<$val:camel>] => f.write_str(strconv::kebab2title!($val)),)*
+ }
+ }
+ }
+
+ impl std::error::Error for $error {}
+ }
+ };
+}
+pub(crate) use content_enum;
+
+macro_rules! color_content_enum {
+ ($vis:vis enum $tname:ident / $ctype:ident for u16 | $error:ident {$($val:literal: $col:literal),* $(,)?}) =>
+ {
+ paste::paste! {
+ $crate::content::content_enum!($vis enum $tname / $ctype for u16 | $error {
+ $($val),*,
+ });
+
+ impl Type {
+ #[must_use]
+ pub const fn color(&self) -> (u8, u8, u8) {
+ match &self {
+ $(Self::[<$val:camel>] => {
+ let v = color_hex::color_from_hex!($col);
+ (v[0], v[1], v[2])
+ },)*
+ }
+ }
+ }
+ }}
+}
+pub(crate) use color_content_enum;
+
+numeric_enum! {
+ pub enum Type for u8 | TryFromU8Error
+ {
+ Item = 0,
+ Block = 1,
+ // Mech = 2,
+ Bullet = 3,
+ Fluid = 4,
+ Modifier = 5,
+ Unit = 6,
+ Weather = 7,
+ // Effect = 8,
+ Sector = 9,
+ // Loadout = 10,
+ // TypeId = 11,
+ // Error = 12,
+ Planet = 13,
+ // Ammo = 14,
+ Team = 15,
+ }
+}
+
+macro_rules! gen_by_id {
+ ($target:path, $id:expr) => {
+ match <$target>::try_from($id) {
+ Ok(v) => Ok(Box::new(v)),
+ Err(e) => Err(Box::new(e)),
+ }
+ };
+}
+
+impl Type {
+ pub fn get(self, id: u16) -> Result<Box<dyn Content>, Box<dyn Error>> {
+ match self {
+ Self::Item => gen_by_id!(crate::item::Type, id),
+ Self::Block => gen_by_id!(crate::block::content::Type, id),
+ Self::Fluid => gen_by_id!(crate::fluid::Type, id),
+ Self::Modifier => gen_by_id!(crate::modifier::Type, id),
+ Self::Unit => gen_by_id!(crate::unit::Type, id),
+ Self::Team => gen_by_id!(crate::team::Team, id),
+ _ => Ok(Box::new(Generic(self, id))),
+ }
+ }
+}
+
+pub trait Content {
+ fn get_type(&self) -> Type;
+
+ fn get_id(&self) -> u16;
+
+ fn get_name(&self) -> &str;
+}
+
+struct Generic(Type, u16);
+
+impl Content for Generic {
+ fn get_type(&self) -> Type {
+ self.0
+ }
+
+ fn get_id(&self) -> u16 {
+ self.1
+ }
+
+ fn get_name(&self) -> &str {
+ "<unknown>"
+ }
+}
diff --git a/mindus/src/data/autotile.rs b/src/data/autotile.rs
index ef73554..92ef1b4 100644
--- a/mindus/src/data/autotile.rs
+++ b/src/data/autotile.rs
@@ -1,6 +1,6 @@
-use super::GridPos;
use super::renderer::*;
-use crate::block::{Block, Rotation, content::Type};
+use super::GridPos;
+use crate::block::{Block, Rotation};
use bobbin_bits::U4;
#[cfg(test)]
@@ -24,7 +24,10 @@ macro_rules! conv {
None
};
($dir:tt) => {
- Some((&crate::block::CONVEYOR, crate::data::autotile::dir!($dir)))
+ Some((
+ &crate::block::distribution::CONVEYOR,
+ crate::data::autotile::dir!($dir),
+ ))
};
}
#[cfg(test)]
@@ -46,18 +49,16 @@ pub(crate) use define;
#[cfg(test)]
pub(crate) use dir;
-pub type Cross = [Option<(&'static Block, Rotation)>; 4];
-pub type Corners = [Option<(&'static Block, Rotation)>; 4];
+pub type Cross<'l> = [Option<(&'l Block, Rotation)>; 4];
/// holds the 4 bordering blocks
#[derive(Copy, Clone)]
-pub struct RenderingContext {
- pub cross: Cross,
- pub corners: Corners,
+pub struct RenderingContext<'l> {
+ pub cross: Cross<'l>,
pub position: PositionContext,
}
/// holds positions
-#[derive(Copy, Clone, Eq, PartialEq, Default)]
+#[derive(Copy, Clone, Eq, PartialEq)]
pub struct PositionContext {
pub position: GridPos,
pub width: usize,
@@ -75,7 +76,7 @@ impl std::fmt::Debug for PositionContext {
}
#[cfg(test)]
-fn print_crosses(v: Vec<Cross>, height: usize) -> String {
+fn print_crosses(v: Vec<Cross<'_>>, height: usize) -> String {
let mut s = String::new();
for c in v.chunks(height) {
for c in c {
@@ -91,7 +92,7 @@ fn print_crosses(v: Vec<Cross>, height: usize) -> String {
s
}
-pub fn tile(ctx: &RenderingContext, name: &str, rot: Rotation, s: Scale) -> ImageHolder<4> {
+pub fn tile(ctx: &RenderingContext<'_>, name: &str, rot: Rotation, s: Scale) -> ImageHolder<4> {
mask2tile(mask(ctx, rot, name), rot, name, s)
}
@@ -113,9 +114,9 @@ pub fn mask2tile(mask: U4, rot: Rotation, name: &str, scale: Scale) -> ImageHold
},
// from below
B0010 => match rot {
- Rotation::Left => p!("1-2"), // ┐
- Rotation::Right => p!("1-2-h"), // ┌
- Rotation::Up => p!("0-3"), // │
+ Rotation::Left => p!("1-2"), // ┐
+ Rotation::Right => p!("1-1"), // ┌
+ Rotation::Up => p!("0-3"), // │
Rotation::Down => unreachable!(),
},
// from bottom + left
@@ -223,64 +224,24 @@ pub fn mask(ctx: &RenderingContext, rot: Rotation, n: &str) -> U4 {
U4::from(x)
}
-pub fn nbors(corners: [Option<Type>; 4], cross: [Option<Type>; 4], t: Type) -> u8 {
- let x = [
- cross[1], corners[3], cross[0], corners[2], cross[3], corners[0], cross[2], corners[1],
- ];
-
- use std::simd::prelude::*;
- u8x8::from_array(x.map(|x| (x == Some(t)) as u8))
- .simd_eq(u8x8::splat(1))
- .to_bitmask() as u8
-}
-
-macro_rules! g {
- ($name:literal, $($i:literal,)+) => { paste::paste! { [
- $(load!([<$name _ $i>]),)+
- ] }};
-}
-
-pub fn select(n: &str, mask: u8) -> [Image<&'static [u8], 4>; 3] {
- macro_rules! autotiled {
- ($($name:literal)+) => {{ paste::paste! { $(const [<$name:snake:upper>]: [[Image<&[u8], 4>; 3]; 256] = g![$name,
-39, 36, 39, 36, 27, 16, 27, 24, 39, 36, 39, 36, 27, 16, 27, 24,
-38, 37, 38, 37, 17, 41, 17, 43, 38, 37, 38, 37, 26, 21, 26, 25,
-39, 36, 39, 36, 27, 16, 27, 24, 39, 36, 39, 36, 27, 16, 27, 24,
-38, 37, 38, 37, 17, 41, 17, 43, 38, 37, 38, 37, 26, 21, 26, 25,
- 3, 4, 3, 4, 15, 40, 15, 20, 3, 4, 3, 4, 15, 40, 15, 20,
- 5, 28, 5, 28, 29, 10, 29, 23, 5, 28, 5, 28, 31, 11, 31, 32,
- 3, 4, 3, 4, 15, 40, 15, 20, 3, 4, 3, 4, 15, 40, 15, 20,
- 2, 30, 2, 30, 9, 46, 9, 22, 2, 30, 2, 30, 14, 44, 14, 6,
-39, 36, 39, 36, 27, 16, 27, 24, 39, 36, 39, 36, 27, 16, 27, 24,
-38, 37, 38, 37, 17, 41, 17, 43, 38, 37, 38, 37, 26, 21, 26, 25,
-39, 36, 39, 36, 27, 16, 27, 24, 39, 36, 39, 36, 27, 16, 27, 24,
-38, 37, 38, 37, 17, 41, 17, 43, 38, 37, 38, 37, 26, 21, 26, 25,
- 3, 0, 3, 0, 15, 42, 15, 12, 3, 0, 3, 0, 15, 42, 15, 12,
- 5, 8, 5, 8, 29, 35, 29, 33, 5, 8, 5, 8, 31, 34, 31, 7,
- 3, 0, 3, 0, 15, 42, 15, 12, 3, 0, 3, 0, 15, 42, 15, 12,
- 2, 1, 2, 1, 9, 45, 9, 19, 2, 1, 2, 1, 14, 18, 14, 13,];)+ match n {
- $($name => { [<$name:snake:upper>][mask as usize] },)+
- x => unreachable!("{x}")
- }}}};
-}
- autotiled!("colored-floor" "colored-wall"
- "metal-tiles-1" "metal-tiles-2" "metal-tiles-3" "metal-tiles-4" "metal-tiles-5""metal-tiles-6" "metal-tiles-7" "metal-tiles-8" "metal-tiles-9" "metal-tiles-10" "metal-tiles-11" "metal-tiles-12" "metal-tiles-13"
- "metal-wall-1" "metal-wall-2" "metal-wall-3"
- )
-}
-
pub trait RotationState {
fn get_rotation(&self) -> Option<Rotation>;
}
-pub trait BlockState {
- fn get_block(&self) -> Option<&'static Block>;
+pub trait BlockState<'l> {
+ fn get_block(&'l self) -> Option<&'l Block>;
+}
+pub trait Crossable {
+ fn cross(&self, j: usize, c: &PositionContext) -> Cross;
}
#[test]
fn test_cross() {
+ let mut reg = crate::block::BlockRegistry::default();
+ crate::block::distribution::register(&mut reg);
+ let mut ss = super::schematic::SchematicSerializer(&reg);
macro_rules! test {
($schem: literal => $($a:tt,$b:tt,$c:tt,$d:tt)*) => {
- let s = crate::Schematic::deserialize_base64($schem).unwrap();
+ let s = ss.deserialize_base64($schem).unwrap();
let mut c = vec![];
println!("{:#?}", s.blocks);
for (position, _) in s.block_iter() {
@@ -289,7 +250,7 @@ fn test_cross() {
width: s.width,
height: s.height,
};
- c.push(s.cross(&pctx).0);
+ c.push(s.cross(&pctx));
}
let n = s.tags.get("name").map_or("<unknown>", |x| &x);
let cc: Vec<Cross> = vec![
@@ -401,7 +362,6 @@ fn test_mask() {
width: 10,
height: 10,
},
- corners: Default::default(),
cross: $cross,
},
dir!($rot),
diff --git a/mindus/src/data/base64.rs b/src/data/base64.rs
index 303e9e0..303e9e0 100644
--- a/mindus/src/data/base64.rs
+++ b/src/data/base64.rs
diff --git a/src/data/command.rs b/src/data/command.rs
new file mode 100644
index 0000000..7d5298c
--- /dev/null
+++ b/src/data/command.rs
@@ -0,0 +1,7 @@
+use crate::content::numeric_enum;
+
+numeric_enum! {
+ pub enum UnitCommand for u8 | TryFromU8Error {
+ Move, Repair, Rebuild, Assist, Mine, Boost,
+ }
+}
diff --git a/mindus/src/data/dynamic.rs b/src/data/dynamic.rs
index de8e511..344144b 100644
--- a/mindus/src/data/dynamic.rs
+++ b/src/data/dynamic.rs
@@ -3,7 +3,8 @@ use thiserror::Error;
use crate::content;
use crate::data::command::{self, UnitCommand};
-use crate::data::{self, DataRead, DataWrite, GridPos, Serializable};
+use crate::data::{self, DataRead, DataWrite, GridPos, Serializer};
+use crate::logic::LogicField;
use crate::team::Team;
macro_rules! datamaker {
@@ -29,31 +30,6 @@ macro_rules! datamaker {
}
}
)+
-
-
- #[derive(Clone, Copy, Debug, Eq, PartialEq)]
- pub enum DynType {
- Content,
- Point2,
- Vec2,
- TechNode,
- Empty,
- $($k,)+
- }
-
- impl DynData {
- #[must_use]
- pub const fn get_type(&self) -> DynType {
- match self {
- Self::Empty => DynType::Empty,
- Self::Point2(..) => DynType::Point2,
- Self::Vec2(..) => DynType::Vec2,
- Self::TechNode(..) => DynType::TechNode,
- Self::Content(..) => DynType::Content,
- $(Self::$k(..) => DynType::$k,)+
- }
- }
- }
} }
}
@@ -67,6 +43,7 @@ datamaker! {
Boolean(bool),
Double(f64),
Building(GridPos),
+ LogicField(LogicField),
ByteArray(Vec<u8>),
UnitCommand(UnitCommand),
BoolArray(Vec<bool>),
@@ -75,11 +52,67 @@ datamaker! {
Team(Team),
}
-impl Serializable for DynData {
+impl DynData {
+ #[must_use]
+ pub const fn get_type(&self) -> DynType {
+ match self {
+ Self::Empty => DynType::Empty,
+ Self::Int(..) => DynType::Int,
+ Self::Long(..) => DynType::Long,
+ Self::Float(..) => DynType::Float,
+ Self::String(..) => DynType::String,
+ Self::Content(..) => DynType::Content,
+ Self::IntArray(..) => DynType::IntArray,
+ Self::Point2(..) => DynType::Point2,
+ Self::Point2Array(..) => DynType::Point2Array,
+ Self::TechNode(..) => DynType::TechNode,
+ Self::Boolean(..) => DynType::Boolean,
+ Self::Double(..) => DynType::Double,
+ Self::Building(..) => DynType::Building,
+ Self::LogicField(..) => DynType::LogicField,
+ Self::ByteArray(..) => DynType::ByteArray,
+ Self::UnitCommand(..) => DynType::UnitCommand,
+ Self::BoolArray(..) => DynType::BoolArray,
+ Self::Unit(..) => DynType::Unit,
+ Self::Vec2Array(..) => DynType::Vec2Array,
+ Self::Vec2(..) => DynType::Vec2,
+ Self::Team(..) => DynType::Team,
+ }
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub enum DynType {
+ Empty,
+ Int,
+ Long,
+ Float,
+ String,
+ Content,
+ IntArray,
+ Point2,
+ Point2Array,
+ TechNode,
+ Boolean,
+ Double,
+ Building,
+ LogicField,
+ ByteArray,
+ UnitCommand,
+ BoolArray,
+ Unit,
+ Vec2Array,
+ Vec2,
+ Team,
+}
+
+pub struct DynSerializer;
+
+impl Serializer<DynData> for DynSerializer {
type ReadError = ReadError;
type WriteError = WriteError;
- fn deserialize(buff: &mut DataRead<'_>) -> Result<DynData, Self::ReadError> {
+ fn deserialize(&mut self, buff: &mut DataRead<'_>) -> Result<DynData, Self::ReadError> {
match buff.read_u8()? {
0 => Ok(DynData::Empty),
1 => Ok(DynData::from(buff.read_i32()?)),
@@ -127,6 +160,7 @@ impl Serializable for DynData {
10 => Ok(DynData::from(buff.read_bool()?)),
11 => Ok(DynData::from(buff.read_f64()?)),
12 => Ok(DynData::from(GridPos::from(buff.read_u32()?))),
+ 13 => Ok(DynData::from(LogicField::try_from(buff.read_u8()?)?)),
14 => {
let len = buff.read_i32()?;
let Ok(len) = usize::try_from(len) else {
@@ -141,9 +175,10 @@ impl Serializable for DynData {
let Ok(len) = usize::try_from(len) else {
return Err(ReadError::BoolArrayLen(len));
};
- let mut result = vec![false; len];
- for item in result.iter_mut() {
- *item = buff.read_bool()?;
+ let mut result = vec![];
+ result.reserve(len);
+ for _ in 0..len {
+ result.push(buff.read_bool()?);
}
Ok(DynData::from(result))
}
@@ -168,8 +203,12 @@ impl Serializable for DynData {
}
}
- fn serialize(&self, buff: &mut DataWrite<'_>) -> Result<(), Self::WriteError> {
- match self {
+ fn serialize(
+ &mut self,
+ buff: &mut DataWrite<'_>,
+ data: &DynData,
+ ) -> Result<(), Self::WriteError> {
+ match data {
DynData::Empty => {
buff.write_u8(0)?;
Ok(())
@@ -255,6 +294,11 @@ impl Serializable for DynData {
buff.write_u32(u32::from(*pos))?;
Ok(())
}
+ DynData::LogicField(fld) => {
+ buff.write_u8(13)?;
+ buff.write_u8(u8::from(*fld))?;
+ Ok(())
+ }
DynData::ByteArray(arr) => {
if arr.len() > i32::MAX as usize {
return Err(WriteError::ByteArrayLen(arr.len()));
@@ -324,6 +368,8 @@ pub enum ReadError {
IntArrayLen(i16),
#[error("point2 array too long ({0})")]
Point2ArrayLen(i8),
+ #[error("invalid logic field ({0})")]
+ LogicField(#[from] crate::logic::TryFromU8Error),
#[error("byte array too long ({0})")]
ByteArrayLen(i32),
#[error("unit command not found")]
@@ -353,7 +399,7 @@ pub enum WriteError {
#[cfg(test)]
mod test {
use super::*;
- use crate::team::Team;
+ use crate::team::{CRUX, DERELICT, SHARDED};
macro_rules! _zero {
($tt:tt) => {
@@ -370,7 +416,7 @@ mod test {
let mut writer = DataWrite::default();
for (i, d) in input.iter().enumerate()
{
- assert_eq!(d.serialize(&mut writer), Ok(()));
+ assert_eq!(DynSerializer.serialize(&mut writer, d), Ok(()));
positions[i] = writer.get_written().len();
}
let written = writer.get_written();
@@ -378,7 +424,7 @@ mod test {
let mut reader = DataRead::new(written);
for (i, original) in input.iter().enumerate()
{
- match DynData::deserialize(&mut reader)
+ match DynSerializer.deserialize(&mut reader)
{
Ok(read) => assert_eq!(*original, read, "serialization of {original:?} became {read:?}"),
e => assert!(false, "could not re-read {original:?} (at {i}), got {e:?}"),
@@ -463,6 +509,12 @@ mod test {
DynData::Building(GridPos(4444, 0xFE98))
);
make_dyn_test!(
+ reparse_logic,
+ DynData::LogicField(LogicField::Enabled),
+ DynData::LogicField(LogicField::Shoot),
+ DynData::LogicField(LogicField::Color)
+ );
+ make_dyn_test!(
reparse_byte_array,
DynData::ByteArray(b"c\x00nstruct \xADditio\nal pylons".to_vec()),
DynData::ByteArray(b"\x00\x01\xFE\xFF".to_vec())
@@ -491,8 +543,8 @@ mod test {
);
make_dyn_test!(
reparse_team,
- DynData::Team(Team::SHARDED),
- DynData::Team(Team::CRUX),
- DynData::Team(Team::DERELICT)
+ DynData::Team(SHARDED),
+ DynData::Team(CRUX),
+ DynData::Team(DERELICT)
);
}
diff --git a/src/data/map.rs b/src/data/map.rs
new file mode 100644
index 0000000..636e3f3
--- /dev/null
+++ b/src/data/map.rs
@@ -0,0 +1,696 @@
+//! the map module
+//! ### format
+//! note: utf = `len<u16>` + `utf8(read(len))`
+//!
+//! note: each section has a `u32` denoting its length
+//!
+//! key: `: T` and `x<T>` both mean read T, `iterate T` means iterate `read_T()` times
+//!
+//! ZLIB compressed stream contains:
+//! - header: 4b = `MSCH`
+//! - version: `u32` (should be 7)
+//! - tag section `<u32>`
+//! - 1 byte of idk (skip)
+//! - string map (`u16` for map len, iterate each, read `utf`)
+//! - content header section `<u32>`:
+//! - iterate `i8` (should = `8`)'
+//! - the type: `i8` (0: item, block: 1, liquid: 4, status: 5, unit: 6, weather: 7, sector: 9, planet: 13//! - item count: `u16` (item: 22, block: 412, liquid: 11, status: 21, unit: 66, weather: 6, sector: 35, planet: 7)
+//! - these types all have their own modules: [`item`], [`content`], [`fluid`], [`modifier`], [`mod@unit`], [`weather`], [`sector`], [`planet`]
+//! - iterate `u16`
+//! - name: `utf`
+//! - map section `<u32>`
+//! - width: `u16`, height: `u16`
+//! - floor and tiles:
+//! - for `i` in `w * h`
+//! - `x = i % w`, `y = i / w`
+//! - floor id: `u16`
+//! - overlay id: `u16`
+//! - consecutives: `u8`
+//! - iterate `(i + 1)..(i + 1 + consecutives)`
+//! - `x = j % w`, `y = j / w`
+//! - i += consecutives
+//! - blocks
+//! - for `i` in `w * h`
+//! - block id: `u16`
+//! - packed?: `i8`
+//! - entity = `(packed & 1) not 0`
+//! - data = `(packed & 2) not 0`
+//! - if entity: central: `bool`
+//! - if entity:
+//! - if central:
+//! - chunk len: `u16`
+//! - if block == building:
+//! - revision: `i8`
+//! - [`read`]
+//! - else skip `chunk len`
+//! - or data
+//! - data: `i8`
+//! - else
+//! - consecutives: `u8`
+//! - iterate `(i + 1)..(i + 1 + consecutives)`
+//! - same block
+//! - i += consecutives
+//! - entities section `<u32>`
+//! - entity mapping
+//! - iterate `u16`
+//! - id: `i16`, name: `utf`
+//! - team build plans
+//! - for t in `teams<u32>`
+//! - team = `team#<u32>`
+//! - iterate `plans<u32>`
+//! - x: `u16`, y: `u16`, rot: `u16`, id: `u16`
+//! - o: `DynData` (refer to [`DynSerializer`])
+//! - world entities
+//! - iterate `u32`
+//! - len: `u16`
+//! - type: `u8`
+//! - if !mapping\[type\]
+//! - skip(len - 1)
+//! - continue
+//! - id: `u32`
+//! - entity read
+use std::collections::HashMap;
+use std::ops::{Index, IndexMut};
+use thiserror::Error;
+
+use crate::block::content::Type as BlockEnum;
+use crate::block::{Block, BlockRegistry, Rotation, State};
+use crate::data::dynamic::DynSerializer;
+use crate::data::renderer::*;
+use crate::data::DataRead;
+use crate::fluid::Type as Fluid;
+use crate::item::{storage::Storage, Type as Item};
+use crate::team::{self, Team};
+#[cfg(doc)]
+use crate::{block::content, data::*, fluid, item, modifier, unit};
+
+use super::Serializer;
+use crate::content::Content;
+use crate::utils::image::ImageUtils;
+
+/// a tile in a map
+#[derive(Clone)]
+pub struct Tile<'l> {
+ pub floor: BlockEnum,
+ pub ore: BlockEnum,
+ build: Option<Build<'l>>,
+}
+
+macro_rules! lo {
+ ($v:expr => [$(|)? $($k:literal $(|)?)+], $scale: ident) => { paste::paste! {
+ match $v {
+ $(BlockEnum::[<$k:camel>] => load!($k, $scale),)+
+ n => unreachable!("{n:?}"),
+ }
+ } };
+}
+
+pub type EntityMapping = HashMap<u8, Box<dyn Content>>;
+impl<'l> Tile<'l> {
+ #[must_use]
+ pub const fn new(floor: BlockEnum, ore: BlockEnum) -> Self {
+ Self {
+ floor,
+ ore,
+ build: None,
+ }
+ }
+
+ fn set_block(&mut self, block: &'l Block) {
+ self.build = Some(Build {
+ block,
+ state: None,
+ items: Storage::new(),
+ liquids: Storage::new(),
+ rotation: Rotation::Up,
+ team: crate::team::SHARDED,
+ data: 0,
+ });
+ }
+
+ #[must_use]
+ pub const fn build(&self) -> Option<&Build<'l>> {
+ self.build.as_ref()
+ }
+
+ /// size of this tile
+ ///
+ /// ._.
+ ///
+ /// dont think about it too much
+ #[must_use]
+ #[inline]
+ pub fn size(&self) -> u8 {
+ self.build.as_ref().map_or(1, |v| v.block.get_size())
+ }
+
+ #[inline]
+ pub(crate) fn floor(&self, s: Scale) -> ImageHolder<4> {
+ lo!(self.floor => [
+ | "darksand"
+ | "sand-floor"
+ | "dacite"
+ | "dirt"
+ | "arkycite-floor"
+ | "basalt"
+ | "moss"
+ | "mud"
+ | "grass"
+ | "ice-snow" | "snow" | "salt" | "ice"
+ | "hotrock" | "char" | "magmarock"
+ | "shale"
+ | "metal-floor" | "metal-floor-2" | "metal-floor-3" | "metal-floor-4" | "metal-floor-5" | "metal-floor-damaged"
+ | "dark-panel-1" | "dark-panel-2" | "dark-panel-3" | "dark-panel-4" | "dark-panel-5" | "dark-panel-6"
+ | "darksand-tainted-water" | "darksand-water" | "deep-tainted-water" | "deep-water" | "sand-water" | "shallow-water" | "tainted-water"
+ | "tar" | "pooled-cryofluid" | "molten-slag"
+ | "space"
+ | "stone"
+ | "bluemat"
+ | "ferric-craters"
+ | "beryllic-stone"
+ | "rhyolite" | "rough-rhyolite" | "rhyolite-crater" | "rhyolite-vent"
+ | "core-zone"
+ | "crater-stone"
+ | "redmat"
+ | "red-ice"
+ | "spore-moss"
+ | "regolith"
+ | "ferric-stone"
+ | "arkyic-stone" | "arkyic-vent"
+ | "yellow-stone" | "yellow-stone-plates" | "yellow-stone-vent"
+ | "red-stone" | "red-stone-vent" | "dense-red-stone"
+ | "carbon-stone" | "carbon-vent"
+ | "crystal-floor" | "crystalline-stone" | "crystalline-vent"
+ | "empty"], s)
+ }
+
+ #[must_use]
+ #[inline]
+ pub(crate) fn ore(&self, s: Scale) -> ImageHolder<4> {
+ lo!(self.ore => ["ore-copper" | "ore-beryllium" | "ore-lead" | "ore-scrap" | "ore-coal" | "ore-thorium" | "ore-titanium" | "ore-tungsten" | "pebbles" | "tendrils" | "ore-wall-tungsten" | "ore-wall-beryllium" | "ore-wall-thorium" | "spawn" | "ore-crystal-thorium"], s)
+ }
+
+ #[must_use]
+ #[inline]
+ pub fn has_ore(&self) -> bool {
+ self.ore != BlockEnum::Air
+ }
+
+ /// Draw the floor of this tile
+ #[must_use]
+ pub fn floor_image(&self, s: Scale) -> ImageHolder<4> {
+ let mut floor = self.floor(s);
+ if self.has_ore() {
+ unsafe { floor.overlay(&self.ore(s)) };
+ }
+ floor
+ }
+
+ /// Draw this tiles build.
+ #[must_use]
+ #[inline]
+ pub fn build_image(&self, context: Option<&RenderingContext>, s: Scale) -> ImageHolder<4> {
+ // building covers floore
+ let Some(b) = &self.build else {
+ unreachable!();
+ };
+ b.image(context, s)
+ }
+}
+
+impl std::fmt::Debug for Tile<'_> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(
+ f,
+ "Tile@{}{}{}",
+ self.floor.get_name(),
+ if self.ore != BlockEnum::Air {
+ format!("+{}", self.ore.get_name())
+ } else {
+ String::new()
+ },
+ if let Some(build) = &self.build {
+ format!(":{}", build.block.name())
+ } else {
+ String::new()
+ }
+ )
+ }
+}
+
+impl<'l> BlockState<'l> for Tile<'l> {
+ fn get_block(&self) -> Option<&'l Block> {
+ Some(self.build()?.block)
+ }
+}
+
+impl RotationState for Tile<'_> {
+ fn get_rotation(&self) -> Option<Rotation> {
+ Some(self.build()?.rotation)
+ }
+}
+
+impl RotationState for Option<Tile<'_>> {
+ fn get_rotation(&self) -> Option<Rotation> {
+ self.as_ref().unwrap().get_rotation()
+ }
+}
+
+impl<'l> BlockState<'l> for Option<Tile<'_>> {
+ fn get_block(&'l self) -> Option<&'l Block> {
+ self.as_ref().unwrap().get_block()
+ }
+}
+
+/// a build on a tile in a map
+#[derive(Clone)]
+pub struct Build<'l> {
+ pub block: &'l Block,
+ pub items: Storage<Item>,
+ pub liquids: Storage<Fluid>,
+ pub state: Option<State>,
+ // pub health: f32,
+ pub rotation: Rotation,
+ pub team: Team,
+ pub data: i8,
+}
+
+impl std::fmt::Debug for Build<'_> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "Build<{block}>", block = self.block.name(),)
+ }
+}
+
+impl<'l> Build<'l> {
+ #[must_use]
+ pub fn new(block: &'l Block) -> Build<'l> {
+ Self {
+ block,
+ items: Storage::default(),
+ liquids: Storage::default(),
+ state: None,
+ rotation: Rotation::Up,
+ team: team::SHARDED,
+ data: 0,
+ }
+ }
+
+ fn image(&self, context: Option<&RenderingContext>, s: Scale) -> ImageHolder<4> {
+ self.block
+ .image(self.state.as_ref(), context, self.rotation, s)
+ }
+
+ #[must_use]
+ pub const fn name(&self) -> &str {
+ self.block.name()
+ }
+
+ pub fn read(
+ &mut self,
+ buff: &mut DataRead<'_>,
+ reg: &BlockRegistry,
+ map: &EntityMapping,
+ ) -> Result<(), ReadError> {
+ // health
+ let _ = buff.read_f32()?;
+ let rot = buff.read_i8()? as i16;
+ // team
+ let _ = buff.read_i8()?;
+ self.rotation = Rotation::try_from((rot & 127) as u8).unwrap_or(Rotation::Up);
+ let mut mask = 0;
+ let mut version = 0;
+ if rot & 128 != 0 {
+ version = buff.read_u8()?;
+ if version < 3 {
+ return Err(ReadError::Version(version));
+ }
+ buff.skip(1)?;
+ mask = buff.read_u8()?;
+ }
+
+ if mask & 1 != 0 {
+ read_items(buff, &mut self.items)?;
+ }
+ if mask & 2 != 0 {
+ read_power(buff)?;
+ }
+ if mask & 4 != 0 {
+ read_liquids(buff, &mut self.liquids)?;
+ }
+ // "efficiency"?
+ buff.skip(2)?;
+ if version == 4 {
+ // visible flags for fog
+ buff.skip(4)?;
+ }
+ // "overridden by subclasses"
+ self.block.read(self, reg, map, buff)?;
+ // implementation not complete, simply error, causing the remaining bytes in the chunk to be skipped (TODO finish impl)
+ Err(ReadError::Version(0x0))
+ // Ok(())
+ }
+}
+
+/// format:
+/// - iterate [`u16`]
+/// - item: [`u16`] as [`Item`]
+/// - amount: [`u32`]
+///
+fn read_items(from: &mut DataRead, to: &mut Storage<Item>) -> Result<(), ReadError> {
+ to.clear();
+ for _ in 0..from.read_u16()? {
+ let item = from.read_u16()?;
+ let amount = from.read_u32()?;
+ if let Ok(item) = Item::try_from(item) {
+ to.set(item, amount);
+ }
+ }
+ Ok(())
+}
+
+/// format:
+/// - iterate [`u16`]
+/// - liquid: [`u16`] as [`Fluid`]
+/// - amount: [`f32`]
+fn read_liquids(from: &mut DataRead, to: &mut Storage<Fluid>) -> Result<(), ReadError> {
+ to.clear();
+ for _ in 0..from.read_u16()? {
+ let fluid = from.read_u16()?;
+ let amount = from.read_f32()?;
+ if let Ok(fluid) = Fluid::try_from(fluid) {
+ to.set(fluid, (amount * 100.0) as u32);
+ }
+ }
+ Ok(())
+}
+
+/// format:
+/// - iterate [`u16`]
+/// - link: [`i32`]
+/// - status: [`f32`]
+fn read_power(from: &mut DataRead) -> Result<(), ReadError> {
+ let n = from.read_u16()? as usize;
+ from.skip((n + 1) * 4)?;
+ Ok(())
+}
+
+#[test]
+fn test_read_items() {
+ let mut s = Storage::new();
+ read_items(
+ &mut DataRead::new(&[
+ 0, 6, 0, 0, 0, 0, 2, 187, 0, 1, 0, 0, 1, 154, 0, 2, 0, 0, 15, 160, 0, 3, 0, 0, 0, 235,
+ 0, 6, 0, 0, 1, 46, 0, 12, 0, 0, 1, 81, 255, 255,
+ ]),
+ &mut s,
+ )
+ .unwrap();
+ assert!(s.get_total() == 5983);
+}
+
+#[test]
+fn test_read_liquids() {
+ let mut s = Storage::new();
+ read_liquids(
+ &mut DataRead::new(&[0, 1, 0, 0, 67, 111, 247, 126, 255, 255]),
+ &mut s,
+ )
+ .unwrap();
+ assert!(s.get(Fluid::Water) == 23996);
+}
+
+/// a map.
+/// ## Does not support serialization yet!
+#[derive(Debug)]
+pub struct Map<'l> {
+ pub width: usize,
+ pub height: usize,
+ pub tags: HashMap<String, String>,
+ /// row major 2d array
+ /// ```rs
+ /// (0, 0), (1, 0), (2, 0)
+ /// (0, 1), (1, 1), (2, 1)
+ /// (0, 2), (1, 2), (2, 2)
+ /// ```
+ pub tiles: Vec<Tile<'l>>,
+}
+
+macro_rules! cond {
+ ($cond: expr, $do: expr) => {
+ if $cond {
+ None
+ } else {
+ $do
+ }
+ };
+}
+
+impl<'l> Crossable for Map<'l> {
+ // N
+ // cond!(pos.position.1 >= (pos.height - 1) as u16, get(j + 1)),
+ // // E
+ // cond!(
+ // pos.position.0 >= (pos.height - 1) as u16,
+ // get(j + pos.height)
+ // ),
+ // // S
+ // cond!(
+ // pos.position.1 == 0 || pos.position.1 >= pos.height as u16,
+ // cond!(pos.position.1 >= (pos.height - 1), get(j + 1)),
+ // // E
+ // cond!(pos.position.0 >= (pos.height - 1), get(j + pos.height)),
+ // // S
+ // cond!(
+ // pos.position.1 == 0 || pos.position.1 >= pos.height,
+ // get(j - 1)
+ // ),
+ // // W
+ // cond!(j < pos.height, get(j - pos.height)),
+ fn cross(&self, j: usize, c: &PositionContext) -> Cross {
+ let get = |i| {
+ let b = &self[i];
+ Some((b.get_block()?, b.get_rotation()?))
+ };
+ [
+ cond![
+ c.position.1 == 0 || c.position.1 >= c.height,
+ get(j + self.height)
+ ],
+ cond![c.position.0 >= (c.height - 1), get(j + 1)],
+ cond![c.position.1 >= (c.height - 1), get(j - self.width)],
+ cond![j < c.height, get(j - 1)],
+ ]
+ }
+}
+
+impl<'l> Map<'l> {
+ #[must_use]
+ pub fn new(width: usize, height: usize, tags: HashMap<String, String>) -> Self {
+ Self {
+ tiles: vec![Tile::new(BlockEnum::Air, BlockEnum::Air); width * height],
+ height,
+ width,
+ tags,
+ }
+ }
+}
+
+impl<'l> Index<usize> for Map<'l> {
+ type Output = Tile<'l>;
+ fn index(&self, index: usize) -> &Self::Output {
+ &self.tiles[index]
+ }
+}
+
+impl<'l> IndexMut<usize> for Map<'l> {
+ fn index_mut(&mut self, index: usize) -> &mut Self::Output {
+ &mut self.tiles[index]
+ }
+}
+
+const MAP_HEADER: [u8; 4] = [b'M', b'S', b'A', b'V'];
+
+/// error occurring when reading a map fails
+#[derive(Debug, Error)]
+pub enum ReadError {
+ #[error("failed to read from buffer")]
+ Read(#[from] super::ReadError),
+ #[error(transparent)]
+ Decompress(#[from] super::DecompressError),
+ #[error("incorrect header ({0:?})")]
+ Header([u8; 4]),
+ #[error("unsupported version ({0})")]
+ Version(u8),
+ #[error("unknown block {0:?}")]
+ NoSuchBlock(String),
+ #[error("failed to read block data")]
+ ReadState(#[from] super::dynamic::ReadError),
+}
+
+/// serde map
+pub struct MapSerializer<'l>(pub &'l BlockRegistry<'l>);
+impl<'l> Serializer<Map<'l>> for MapSerializer<'l> {
+ type ReadError = ReadError;
+ type WriteError = ();
+ /// deserialize a map
+ ///
+ /// notes:
+ /// - does not deserialize data
+ /// - does not deserialize entities
+ fn deserialize(&mut self, buff: &mut DataRead<'_>) -> Result<Map<'l>, Self::ReadError> {
+ let buff = buff.deflate()?;
+ let mut buff = DataRead::new(&buff);
+ {
+ let mut b = [0; 4];
+ buff.read_bytes(&mut b)?;
+ if b != MAP_HEADER {
+ return Err(ReadError::Header(b));
+ }
+ }
+ let version = buff.read_u32()?;
+ if version != 7 {
+ return Err(ReadError::Version(version.try_into().unwrap_or(0)));
+ }
+ let mut tags = HashMap::new();
+ buff.read_chunk(true, |buff| {
+ buff.skip(1)?;
+ for _ in 0..buff.read_u8()? {
+ let key = buff.read_utf()?;
+ let value = buff.read_utf()?;
+ tags.insert(key.to_owned(), value.to_owned());
+ }
+ Ok::<(), super::ReadError>(())
+ })?;
+ // we skip the content header (just keep the respective modules updated)
+ buff.skip_chunk()?;
+ // map section
+ let mut w = 0;
+ let mut h = 0;
+ let mut m = None;
+ buff.read_chunk(true, |buff| {
+ w = buff.read_u16()? as usize;
+ h = buff.read_u16()? as usize;
+ let mut map = Map::new(w, h, tags);
+ let count = w * h;
+ let mut i = 0;
+ while i < count {
+ let floor_id = buff.read_u16()?;
+ let overlay_id = buff.read_u16()?;
+ let floor = BlockEnum::try_from(floor_id).unwrap_or(BlockEnum::Stone);
+ let ore = BlockEnum::try_from(overlay_id).unwrap_or(BlockEnum::Air);
+ map[i] = Tile::new(floor, ore);
+ let consecutives = buff.read_u8()? as usize;
+ if consecutives > 0 {
+ for i in (i + 1)..(i + 1 + consecutives) {
+ map[i] = Tile::new(floor, ore);
+ }
+ i += consecutives;
+ }
+ i += 1;
+ }
+ let mut i = 0usize;
+ while i < count {
+ let block_id = buff.read_u16()?;
+ let packed = buff.read_u8()?;
+ let entity = (packed & 1) != 0;
+ let data = (packed & 2) != 0;
+ let central = if entity { buff.read_bool()? } else { false };
+ let block = BlockEnum::try_from(block_id)
+ .map_err(|_| ReadError::NoSuchBlock(block_id.to_string()))?;
+ let block = if block == BlockEnum::Air {
+ None
+ } else {
+ Some(
+ self.0
+ .get(block.get_name())
+ .ok_or_else(|| ReadError::NoSuchBlock(block.to_string()))?,
+ )
+ };
+ if central {
+ if let Some(block) = block {
+ map[i].set_block(block);
+ }
+ }
+ if entity {
+ if central {
+ let mut output = [0u8; 2];
+ output.copy_from_slice(&buff.data[..2]);
+ let _ = buff.read_chunk(false, |buff| {
+ #[cfg(debug_assertions)]
+ println!("reading {:?}", map[i].build.as_ref().unwrap());
+ let _ = buff.read_i8()?;
+
+ map[i]
+ .build
+ .as_mut()
+ .unwrap()
+ // map not initialized yet
+ .read(buff, self.0, &HashMap::new())?;
+ Ok::<(), ReadError>(())
+ });
+ }
+ } else if data {
+ if let Some(block) = block {
+ map[i].set_block(block);
+ }
+ map[i].build.as_mut().unwrap().data = buff.read_i8()?;
+ } else {
+ let consecutives = buff.read_u8()? as usize;
+ for i in i..=i + consecutives {
+ if let Some(block) = block {
+ map.tiles[i].set_block(block);
+ }
+ }
+ i += consecutives;
+ }
+ i += 1;
+ }
+ m = Some(map);
+ Ok::<(), ReadError>(())
+ })?;
+ let mut mapping = EntityMapping::new();
+ buff.read_chunk(true, |buff| {
+ // read entity mapping (SaveVersion.java#436)
+ for _ in 0..buff.read_u16()? {
+ let id = buff.read_u16()? as u8;
+ let nam = buff.read_utf()?;
+ dbg!(nam);
+ mapping.insert(id, Box::new(Item::Copper));
+ // mapping.push(content::Type::get_name(nam));
+ }
+ // read team block plans (ghosts) (SaveVersion.java#389)
+ for _ in 0..buff.read_u32()? {
+ buff.skip(4)?;
+ for _ in 0..buff.read_u32()? {
+ buff.skip(8usize)?;
+ let _ = DynSerializer::deserialize(&mut DynSerializer, buff)?;
+ }
+ }
+ // read world entities (#412). eg units
+ for _ in 0..buff.read_u32()? {
+ let len = buff.read_u16()? as usize;
+ let ty = buff.read_u8()?;
+ if !mapping.contains_key(&ty) {
+ buff.skip(len - 1)?;
+ continue;
+ }
+ let _id = buff.read_u32()?;
+ // TODO
+ }
+ Ok::<(), ReadError>(())
+ })?;
+ // skip custom chunks
+ buff.skip_chunk()?;
+ Ok(m.unwrap())
+ }
+
+ /// serialize a map (todo)
+ /// panics: always
+ fn serialize(
+ &mut self,
+ _: &mut super::DataWrite<'_>,
+ _: &Map<'_>,
+ ) -> Result<(), Self::WriteError> {
+ todo!()
+ }
+}
diff --git a/src/data/mod.rs b/src/data/mod.rs
new file mode 100644
index 0000000..0583ea4
--- /dev/null
+++ b/src/data/mod.rs
@@ -0,0 +1,530 @@
+//! all the IO
+use flate2::{
+ Compress, CompressError as CError, Compression, Decompress, DecompressError as DError,
+ FlushCompress, FlushDecompress, Status,
+};
+use std::collections::HashMap;
+use std::error::Error;
+use std::fmt;
+use std::str::Utf8Error;
+use thiserror::Error;
+
+pub(crate) mod autotile;
+mod base64;
+pub mod command;
+pub mod dynamic;
+pub mod map;
+pub mod planet;
+pub mod renderer;
+pub mod schematic;
+pub mod sector;
+pub mod weather;
+
+#[derive(Debug)]
+pub struct DataRead<'d> {
+ pub(crate) data: &'d [u8],
+ // used with read_chunk
+ read: usize,
+}
+
+impl fmt::Display for DataRead<'_> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{}", String::from_utf8_lossy(self.data))
+ }
+}
+
+macro_rules! make_read {
+ ($name:ident, $type:ty) => {
+ pub fn $name(&mut self) -> Result<$type, ReadError> {
+ const LEN: usize = std::mem::size_of::<$type>();
+ if self.data.len() < LEN {
+ return Err(ReadError::Underflow {
+ need: LEN,
+ have: self.data.len(),
+ });
+ }
+ let mut output = [0u8; LEN];
+ output.copy_from_slice(&self.data[..LEN]);
+ self.data = &self.data[LEN..];
+ self.read += LEN;
+ Ok(<$type>::from_be_bytes(output))
+ }
+ };
+}
+
+impl<'d> DataRead<'d> {
+ #[must_use]
+ pub const fn new(data: &'d [u8]) -> Self {
+ Self { data, read: 0 }
+ }
+
+ pub fn read_bool(&mut self) -> Result<bool, ReadError> {
+ Ok(self.read_u8()? != 0)
+ }
+
+ make_read!(read_u8, u8);
+ make_read!(read_i8, i8);
+ make_read!(read_u16, u16);
+ make_read!(read_i16, i16);
+ make_read!(read_u32, u32);
+ make_read!(read_i32, i32);
+ make_read!(read_f32, f32);
+ make_read!(read_u64, u64);
+ make_read!(read_i64, i64);
+ make_read!(read_f64, f64);
+
+ pub fn read_utf(&mut self) -> Result<&'d str, ReadError> {
+ if self.data.len() < 2 {
+ return Err(ReadError::Underflow {
+ need: 2,
+ have: self.data.len(),
+ });
+ }
+ let len = self.read_u16()?;
+ let end = len as usize;
+ if self.data.len() < end {
+ return Err(ReadError::Underflow {
+ need: end,
+ have: self.data.len(),
+ });
+ }
+ let result = std::str::from_utf8(&self.data[..end])?;
+ self.data = &self.data[end..];
+ self.read += end;
+ Ok(result)
+ }
+
+ pub fn read_bytes(&mut self, dst: &mut [u8]) -> Result<(), ReadError> {
+ if self.data.len() < dst.len() {
+ return Err(ReadError::Underflow {
+ need: dst.len(),
+ have: self.data.len(),
+ });
+ }
+ dst.copy_from_slice(&self.data[..dst.len()]);
+ self.data = &self.data[dst.len()..];
+ self.read += dst.len();
+ Ok(())
+ }
+
+ pub fn skip(&mut self, n: usize) -> Result<(), ReadError> {
+ if self.data.len() < n {
+ return Err(ReadError::Underflow {
+ need: n,
+ have: self.data.len(),
+ });
+ }
+ self.data = &self.data[n..];
+ self.read += n;
+ Ok(())
+ }
+
+ pub fn skip_chunk(&mut self) -> Result<usize, ReadError> {
+ let len = self.read_u32()? as usize;
+ self.skip(len)?;
+ Ok(len)
+ }
+
+ pub fn read_chunk<E>(
+ &mut self,
+ big: bool,
+ f: impl FnOnce(&mut DataRead) -> Result<(), E>,
+ ) -> Result<(), E>
+ where
+ E: Error + From<ReadError>,
+ {
+ let len = if big {
+ self.read_u32()? as usize
+ } else {
+ self.read_u16()? as usize
+ };
+ self.read = 0;
+ let r = f(self);
+ match r {
+ Err(e) => {
+ // skip this chunk
+ assert!(
+ len >= self.read,
+ "overread; supposed to read {len}; read {}",
+ self.read
+ );
+ let n = len - self.read;
+ if n != 0 {
+ #[cfg(debug_assertions)]
+ println!(
+ "supposed to read {len}; read {} - skipping excess",
+ self.read
+ );
+ self.skip(n)?;
+ };
+ Err(e)
+ }
+ Ok(_) => Ok(()),
+ }
+ }
+
+ pub fn read_vec(&mut self, dst: &mut Vec<u8>, len: usize) -> Result<(), ReadError> {
+ if self.data.len() < len {
+ return Err(ReadError::Underflow {
+ need: len,
+ have: self.data.len(),
+ });
+ }
+ dst.extend_from_slice(&self.data[..len]);
+ self.data = &self.data[len..];
+ self.read += len;
+ Ok(())
+ }
+
+ pub fn read_map(&mut self, dst: &mut HashMap<String, String>) -> Result<(), ReadError> {
+ let n = self.read_u8()?;
+ for _ in 0..n {
+ let key = self.read_utf()?;
+ let value = self.read_utf()?;
+ dst.insert(key.to_owned(), value.to_owned());
+ }
+ Ok(())
+ }
+
+ pub fn deflate(&mut self) -> Result<Vec<u8>, DecompressError> {
+ let mut dec = Decompress::new(true);
+ let mut raw = Vec::<u8>::new();
+ raw.reserve(1024);
+ loop {
+ let t_in = dec.total_in();
+ let t_out = dec.total_out();
+ let res = dec.decompress_vec(self.data, &mut raw, FlushDecompress::Finish)?;
+ if dec.total_in() > t_in {
+ // we have to advance input every time, decompress_vec only knows the output position
+ self.data = &self.data[(dec.total_in() - t_in) as usize..];
+ }
+ match res {
+ // there's no more input (and the flush mode says so), we need to reserve additional space
+ Status::Ok | Status::BufError => (),
+ // input was already at the end, so this is referring to the output
+ Status::StreamEnd => break,
+ }
+ if dec.total_in() == t_in && dec.total_out() == t_out {
+ // protect against looping forever
+ return Err(DecompressError::DecompressStall);
+ }
+ raw.reserve(1024);
+ }
+ assert_eq!(dec.total_out() as usize, raw.len());
+ self.read = 0;
+ Ok(raw)
+ }
+}
+
+#[derive(Debug, Error)]
+pub enum DecompressError {
+ #[error("zlib decompression failed")]
+ Decompress(#[from] DError),
+ #[error("decompressor stalled before completion")]
+ DecompressStall,
+}
+
+#[derive(Debug, Error)]
+pub enum ReadError {
+ #[error("buffer underflow (expected {need} but got {have})")]
+ Underflow { need: usize, have: usize },
+ #[error("expected {0}")]
+ Expected(&'static str),
+ #[error("malformed utf8 in string")]
+ Utf8 {
+ #[from]
+ source: Utf8Error,
+ },
+}
+
+impl PartialEq for ReadError {
+ fn eq(&self, _: &Self) -> bool {
+ false
+ }
+}
+
+enum WriteBuff<'d> {
+ // unlike the DataRead want to access the written region after
+ Ref { raw: &'d mut [u8], pos: usize },
+ Vec(Vec<u8>),
+}
+
+impl<'d> WriteBuff<'d> {
+ fn check_capacity(&self, need: usize) -> Result<(), WriteError> {
+ match self {
+ Self::Ref { raw, pos } if raw.len() - pos < need => Err(WriteError::Overflow {
+ need,
+ have: raw.len() - pos,
+ }),
+ _ => Ok(()),
+ }
+ }
+
+ fn write(&mut self, data: &[u8]) {
+ match self {
+ Self::Ref { raw, pos } => {
+ let end = *pos + data.len();
+ raw[*pos..end].copy_from_slice(data);
+ *pos += data.len();
+ }
+ Self::Vec(v) => v.extend_from_slice(data),
+ }
+ }
+}
+
+pub struct DataWrite<'d> {
+ data: WriteBuff<'d>,
+}
+
+macro_rules! make_write {
+ ($name:ident, $type:ty) => {
+ pub fn $name(&mut self, val: $type) -> Result<(), WriteError> {
+ const LEN: usize = std::mem::size_of::<$type>();
+ self.data.check_capacity(LEN)?;
+ self.data.write(&<$type>::to_be_bytes(val));
+ Ok(())
+ }
+ };
+}
+
+impl<'d> DataWrite<'d> {
+ pub fn write_bool(&mut self, val: bool) -> Result<(), WriteError> {
+ self.write_u8(u8::from(val))
+ }
+
+ make_write!(write_u8, u8);
+ make_write!(write_i8, i8);
+ make_write!(write_u16, u16);
+ make_write!(write_i16, i16);
+ make_write!(write_u32, u32);
+ make_write!(write_i32, i32);
+ make_write!(write_f32, f32);
+ make_write!(write_u64, u64);
+ make_write!(write_i64, i64);
+ make_write!(write_f64, f64);
+
+ pub fn write_utf(&mut self, val: &str) -> Result<(), WriteError> {
+ if val.len() > u16::MAX as usize {
+ return Err(WriteError::TooLong { len: val.len() });
+ }
+ self.data.check_capacity(2 + val.len())?;
+ self.data.write(&u16::to_be_bytes(val.len() as u16));
+ self.data.write(val.as_bytes());
+ Ok(())
+ }
+
+ pub fn write_bytes(&mut self, val: &[u8]) -> Result<(), WriteError> {
+ self.data.check_capacity(val.len())?;
+ self.data.write(val);
+ Ok(())
+ }
+
+ #[must_use]
+ pub const fn is_owned(&self) -> bool {
+ matches!(self.data, WriteBuff::Vec(..))
+ }
+
+ #[must_use]
+ pub fn get_written(&self) -> &[u8] {
+ match &self.data {
+ WriteBuff::Ref { raw, pos } => &raw[..*pos],
+ WriteBuff::Vec(v) => v,
+ }
+ }
+
+ /// eat this datawrite
+ ///
+ /// panics if ref write buffer
+ #[must_use]
+ pub fn consume(self) -> Vec<u8> {
+ match self.data {
+ WriteBuff::Vec(v) => v,
+ WriteBuff::Ref { .. } => unreachable!(),
+ }
+ }
+
+ pub fn inflate(self, to: &mut DataWrite) -> Result<(), CompressError> {
+ // compress into the provided buffer
+ let WriteBuff::Vec(raw) = self.data else {
+ unreachable!("write buffer not owned")
+ };
+ let mut comp = Compress::new(Compression::default(), true);
+ // compress the immediate buffer into a temp buffer to copy it to buff? no thanks
+ match to.data {
+ WriteBuff::Ref {
+ raw: ref mut dst,
+ ref mut pos,
+ } => {
+ match comp.compress(&raw, &mut dst[*pos..], FlushCompress::Finish)? {
+ // there's no more input (and the flush mode says so), but we can't resize the output
+ Status::Ok | Status::BufError => {
+ return Err(CompressError::CompressEof(
+ raw.len() - comp.total_in() as usize,
+ ))
+ }
+ Status::StreamEnd => (),
+ }
+ }
+ WriteBuff::Vec(ref mut dst) => {
+ let mut input = raw.as_ref();
+ dst.reserve(1024);
+ loop {
+ let t_in = comp.total_in();
+ let t_out = comp.total_out();
+ let res = comp.compress_vec(input, dst, FlushCompress::Finish)?;
+ if comp.total_in() > t_in {
+ // we have to advance input every time, compress_vec only knows the output position
+ input = &input[(comp.total_in() - t_in) as usize..];
+ }
+ match res {
+ // there's no more input (and the flush mode says so), we need to reserve additional space
+ Status::Ok | Status::BufError => (),
+ // input was already at the end, so this is referring to the output
+ Status::StreamEnd => break,
+ }
+ if comp.total_in() == t_in && comp.total_out() == t_out {
+ // protect against looping forever
+ return Err(CompressError::CompressStall);
+ }
+ dst.reserve(1024);
+ }
+ }
+ }
+ assert_eq!(comp.total_in() as usize, raw.len());
+ Ok(())
+ }
+}
+
+impl Default for DataWrite<'static> {
+ fn default() -> Self {
+ Self {
+ data: WriteBuff::Vec(Vec::new()),
+ }
+ }
+}
+
+#[derive(Debug, Error)]
+pub enum CompressError {
+ #[error(transparent)]
+ Compress(#[from] CError),
+ #[error("compression overflow with {0} bytes of input remaining")]
+ CompressEof(usize),
+ #[error("compressor stalled before completion")]
+ CompressStall,
+}
+
+#[derive(Debug, Error)]
+pub enum WriteError {
+ #[error("buffer overflow (expected {need} but got {have})")]
+ Overflow { need: usize, have: usize },
+ #[error("string too long ({len} bytes of {})", u16::MAX)]
+ TooLong { len: usize },
+}
+
+impl PartialEq for WriteError {
+ fn eq(&self, _: &Self) -> bool {
+ false
+ }
+}
+
+impl<'d> From<&'d mut [u8]> for DataWrite<'d> {
+ fn from(value: &'d mut [u8]) -> Self {
+ Self {
+ data: WriteBuff::Ref { raw: value, pos: 0 },
+ }
+ }
+}
+
+impl From<Vec<u8>> for DataWrite<'static> {
+ fn from(value: Vec<u8>) -> Self {
+ Self {
+ data: WriteBuff::Vec(value),
+ }
+ }
+}
+
+impl<'d> TryFrom<DataWrite<'d>> for Vec<u8> {
+ type Error = ();
+
+ fn try_from(value: DataWrite<'d>) -> Result<Self, Self::Error> {
+ match value.data {
+ WriteBuff::Vec(v) => Ok(v),
+ WriteBuff::Ref { .. } => Err(()),
+ }
+ }
+}
+/// basic serialization/deserialization functions
+pub trait Serializer<D> {
+ type ReadError;
+ type WriteError;
+
+ fn deserialize(&mut self, buff: &mut DataRead<'_>) -> Result<D, Self::ReadError>;
+
+ fn serialize(&mut self, buff: &mut DataWrite<'_>, data: &D) -> Result<(), Self::WriteError>;
+}
+
+#[derive(Clone, Copy, Eq, PartialEq)]
+pub struct GridPos(pub usize, pub usize);
+
+impl From<u32> for GridPos {
+ fn from(value: u32) -> Self {
+ GridPos((value >> 16) as u16 as usize, value as u16 as usize)
+ }
+}
+
+impl From<GridPos> for u32 {
+ /// ```
+ /// # use mindus::data::GridPos;
+ /// assert_eq!(GridPos::from(u32::from(GridPos(1000, 5))), GridPos(1000, 5));
+ /// ```
+ fn from(value: GridPos) -> Self {
+ ((value.0 << 16) | value.1) as u32
+ }
+}
+
+impl fmt::Debug for GridPos {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "({0}, {1})", self.0, self.1)
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn read() {
+ let mut read = DataRead::new("Thé qûick ઉrown fox 🦘 over\0\rthe lazy dog.".as_bytes());
+ assert_eq!(read.read_u8(), Ok(84));
+ assert_eq!(read.read_i8(), Ok(104));
+ assert_eq!(read.read_i8(), Ok(-61));
+ assert_eq!(read.read_u16(), Ok(43296));
+ assert_eq!(read.read_i16(), Ok(29123));
+ assert_eq!(read.read_i16(), Ok(-17559));
+ assert_eq!(read.read_i32(), Ok(1_667_965_152));
+ assert_eq!(read.read_i32(), Ok(-1_433_832_849));
+ assert_eq!(read.read_i64(), Ok(8_605_851_562_280_493_296));
+ assert_eq!(read.read_i64(), Ok(-6_942_694_510_468_635_278));
+ assert_eq!(read.read_utf(), Ok("the lazy dog."));
+ }
+
+ #[test]
+ fn write() {
+ let mut write = DataWrite::default();
+ assert_eq!(write.write_u8(84), Ok(()));
+ assert_eq!(write.write_i8(104), Ok(()));
+ assert_eq!(write.write_i8(-61), Ok(()));
+ assert_eq!(write.write_u16(43296), Ok(()));
+ assert_eq!(write.write_i16(29123), Ok(()));
+ assert_eq!(write.write_i16(-17559), Ok(()));
+ assert_eq!(write.write_i32(1_667_965_152), Ok(()));
+ assert_eq!(write.write_i32(-1_433_832_849), Ok(()));
+ assert_eq!(write.write_i64(8_605_851_562_280_493_296), Ok(()));
+ assert_eq!(write.write_i64(-6_942_694_510_468_635_278), Ok(()));
+ assert_eq!(write.write_utf("the lazy dog."), Ok(()));
+ assert_eq!(
+ write.get_written(),
+ "Thé qûick ઉrown fox 🦘 over\0\rthe lazy dog.".as_bytes()
+ );
+ }
+}
diff --git a/mindus/src/data/planet.rs b/src/data/planet.rs
index ff20bcd..ff20bcd 100644
--- a/mindus/src/data/planet.rs
+++ b/src/data/planet.rs
diff --git a/src/data/renderer.rs b/src/data/renderer.rs
new file mode 100644
index 0000000..4bbcbe7
--- /dev/null
+++ b/src/data/renderer.rs
@@ -0,0 +1,296 @@
+//! schematic drawing
+pub(crate) use super::autotile::*;
+use super::schematic::Schematic;
+use super::GridPos;
+use crate::block::Rotation;
+pub(crate) use crate::utils::{Image, ImageHolder, ImageUtils, Overlay, Repeat};
+use crate::Map;
+include!(concat!(env!("OUT_DIR"), "/full.rs"));
+include!(concat!(env!("OUT_DIR"), "/quar.rs"));
+include!(concat!(env!("OUT_DIR"), "/eigh.rs"));
+
+#[derive(Debug, Copy, Clone)]
+#[repr(u8)]
+pub enum Scale {
+ Full,
+ // Half,
+ Quarter,
+ Eigth,
+}
+
+impl Scale {
+ #[must_use]
+ pub const fn px(self) -> u8 {
+ match self {
+ Self::Full => 32,
+ Self::Quarter => 32 / 4,
+ Self::Eigth => 32 / 8,
+ }
+ }
+}
+
+impl std::ops::Mul<u32> for Scale {
+ type Output = u32;
+ fn mul(self, rhs: u32) -> u32 {
+ self.px() as u32 * rhs
+ }
+}
+
+#[macro_export]
+macro_rules! load {
+ ("empty", $scale:expr) => {
+ ImageHolder::from(match $scale {
+ $crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::EMPTY,
+ $crate::data::renderer::Scale::Eigth => &$crate::data::renderer::eigh::EMPTY,
+ $crate::data::renderer::Scale::Full => &$crate::data::renderer::full::EMPTY,
+ }.copy())
+ };
+ ($name:literal, $scale:expr) => { paste::paste! {
+ ImageHolder::from(match $scale {
+ $crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::[<$name:snake:upper>],
+ $crate::data::renderer::Scale::Eigth => &$crate::data::renderer::eigh::[<$name:snake:upper>],
+ $crate::data::renderer::Scale::Full => &$crate::data::renderer::full::[<$name:snake:upper>],
+ }.copy())
+ } };
+ ($name: literal) => { paste::paste! {
+ [$crate::data::renderer::full::[<$name:snake:upper>].copy(), $crate::data::renderer::quar::[<$name:snake:upper>].copy(), $crate::data::renderer::eigh::[<$name:snake:upper>].copy()]
+ } };
+ (from $v:ident which is [$($k:literal $(|)?)+], $scale: ident) => {
+ $crate::data::renderer::load!($scale -> match $v {
+ $($k => $k,)+
+ })
+ };
+ // turn load!(s -> match x { "v" => "y" }) into match x { "v" => load!("y", s) }
+ ($scale:ident -> match $v:ident { $($k:pat => $nam:literal $(,)?)+ }) => {
+ match $v {
+ $($k => $crate::data::renderer::load!($nam, $scale),)+
+ #[allow(unreachable_patterns)]
+ n => unreachable!("{n:?}"),
+ }
+ };
+ (concat $x:literal => $v:ident which is [$($k:literal $(|)?)+], $scale: ident) => { paste::paste! {
+ match $v {
+ $($k =>
+ ImageHolder::from(match $scale {
+ $crate::data::renderer::Scale::Quarter => &$crate::data::renderer::quar::[<$k:snake:upper _ $x:snake:upper>],
+ $crate::data::renderer::Scale::Eigth => &$crate::data::renderer::eigh::[<$k:snake:upper _ $x:snake:upper>],
+ $crate::data::renderer::Scale::Full => &$crate::data::renderer::full::[<$k:snake:upper _ $x:snake:upper>],
+ }.copy()),
+ )+
+ #[allow(unreachable_patterns)]
+ n => unreachable!("{n:?}"),
+ }
+ } };
+}
+pub(crate) use load;
+
+/// trait for renderable objects
+pub trait Renderable {
+ /// create a picture
+ #[must_use = "i did so much work for you"]
+ fn render(&self) -> Image<Vec<u8>, 3>;
+}
+
+impl Renderable for Schematic<'_> {
+ /// creates a picture of a schematic. Bridges and node connections are not drawn.
+ /// ```
+ /// use mindus::*;
+ /// let mut s = Schematic::new(2, 3);
+ /// s.put(0, 0, &block::distribution::DISTRIBUTOR);
+ /// s.put(0, 2, &block::distribution::ROUTER);
+ /// s.put(1, 2, &block::walls::COPPER_WALL);
+ /// let output /*: Image */ = s.render();
+ /// ```
+ fn render(&self) -> Image<Vec<u8>, 3> {
+ // fill background
+ // SAFETY: metal-floor is 32x32, the output is a multiple of 32
+ let mut bg = unsafe {
+ load!("metal-floor", Scale::Full).borrow().repeated(
+ ((self.width + 2) * 32) as u32,
+ ((self.height + 2) * 32) as u32,
+ )
+ };
+ let mut canvas = Image::alloc(
+ ((self.width + 2) * 32) as u32,
+ ((self.height + 2) * 32) as u32,
+ );
+ for (GridPos(x, y), tile) in self.block_iter() {
+ let ctx = if tile.block.wants_context() {
+ let pctx = PositionContext {
+ position: GridPos(x, y),
+ width: self.width,
+ height: self.height,
+ };
+ Some(RenderingContext {
+ cross: self.cross(&pctx),
+ position: pctx,
+ })
+ } else {
+ None
+ };
+ let x = x as u32 - ((tile.block.get_size() - 1) / 2) as u32;
+ let y = self.height as u32 - y as u32 - ((tile.block.get_size() / 2) + 1) as u32;
+ unsafe {
+ canvas.as_mut().overlay_at(
+ &tile
+ .image(
+ ctx.as_ref(),
+ tile.get_rotation().unwrap_or(Rotation::Up),
+ Scale::Full,
+ )
+ .borrow(),
+ (x + 1) * 32,
+ (y + 1) * 32,
+ )
+ };
+ }
+ canvas.as_mut().shadow();
+ for x in 0..canvas.width() {
+ for y in 0..canvas.height() {
+ // canvas has a shadow
+ let p2 = unsafe { canvas.pixel(x, y) };
+ let p = unsafe { bg.pixel_mut(x, y) };
+ crate::utils::image::blend(p.try_into().unwrap(), p2);
+ }
+ }
+ bg.remove_channel()
+ }
+}
+
+impl Renderable for Map<'_> {
+ /// Draws a map
+ fn render(&self) -> Image<Vec<u8>, 3> {
+ let scale = if self.width + self.height < 2000 {
+ Scale::Quarter
+ } else {
+ Scale::Eigth
+ };
+ // todo combine these (beware of floor drawing atop buildings) (planned solution:? ptr blocks)
+ let mut floor: Image<_, 3> =
+ Image::alloc(scale * self.width as u32, scale * self.height as u32);
+ let mut top: Image<_, 4> =
+ Image::alloc(scale * self.width as u32, scale * self.height as u32);
+ rayon::join(
+ || {
+ for y in 0..self.height {
+ for x in 0..self.width {
+ // Map::new() allocates w*h items
+ let j = x + self.width * y;
+ let tile = unsafe { self.tiles.get_unchecked(j) };
+ let y = self.height - y - 1;
+ // draw the floor first.
+ // println!("draw {tile:?} ({x}, {y})");
+ unsafe {
+ floor.as_mut().overlay_at(
+ &tile.floor(scale).borrow(),
+ scale * x as u32,
+ scale * y as u32,
+ )
+ };
+ if tile.has_ore() {
+ unsafe {
+ floor.as_mut().overlay_at(
+ &tile.ore(scale).borrow(),
+ scale * x as u32,
+ scale * y as u32,
+ )
+ };
+ }
+ }
+ }
+ },
+ || {
+ for y in 0..self.height {
+ for x in 0..self.width {
+ // Map::new() allocates w*h items
+ let j = x + self.width * y;
+ let tile = unsafe { self.tiles.get_unchecked(j) };
+ let y = self.height - y - 1;
+ // println!("draw {tile:?} ({x}, {y})");
+ if let Some(build) = tile.build() {
+ let s = build.block.get_size();
+ let x = x
+ - (match s {
+ 1 | 2 => 0,
+ 3 | 4 => 1,
+ 5 | 6 => 2,
+ 7 | 8 => 3,
+ 9 => 4,
+ // SAFETY: no block too big
+ _ => unsafe { std::hint::unreachable_unchecked() },
+ }) as usize;
+ let y = y
+ - (match s {
+ 1 => 0,
+ 2 | 3 => 1,
+ 4 | 5 => 2,
+ 6 | 7 => 3,
+ 8 | 9 => 4,
+ // SAFETY: no block too big
+ _ => unsafe { std::hint::unreachable_unchecked() },
+ }) as usize;
+ let ctx = if build.block.wants_context() {
+ let pctx = PositionContext {
+ position: GridPos(x, y),
+ width: self.width,
+ height: self.height,
+ };
+ let rctx = RenderingContext {
+ cross: self.cross(j, &pctx),
+ position: pctx,
+ };
+ Some(rctx)
+ } else {
+ None
+ };
+ unsafe {
+ top.as_mut().overlay_at(
+ &tile.build_image(ctx.as_ref(), scale).borrow(),
+ scale * x as u32,
+ scale * y as u32,
+ )
+ };
+ }
+ }
+ }
+ },
+ );
+ unsafe { floor.as_mut().overlay_at(&top.as_ref(), 0, 0) };
+ floor
+ }
+}
+
+#[test]
+fn all_blocks() {
+ use crate::block::content::Type;
+ use crate::content::Content;
+ let reg = crate::block::build_registry();
+ for t in 19..Type::WorldMessage as u16 {
+ let t = Type::try_from(t).unwrap();
+ if matches!(t, |Type::Empty| Type::SlagCentrifuge
+ | Type::HeatReactor
+ | Type::LegacyMechPad
+ | Type::LegacyUnitFactory
+ | Type::LegacyUnitFactoryAir
+ | Type::LegacyUnitFactoryGround
+ | Type::CommandCenter)
+ {
+ continue;
+ }
+ let name = dbg!(t.get_name());
+ let t = reg.get(name).unwrap();
+ let _ = t.image(
+ None,
+ Some(&RenderingContext {
+ cross: [None; 4],
+ position: PositionContext {
+ position: GridPos(0, 0),
+ width: 5,
+ height: 5,
+ },
+ }),
+ Rotation::Up,
+ Scale::Quarter,
+ );
+ }
+}
diff --git a/mindus/src/data/schematic.rs b/src/data/schematic.rs
index 55baf3f..31888c2 100644
--- a/mindus/src/data/schematic.rs
+++ b/src/data/schematic.rs
@@ -1,49 +1,47 @@
//! schematic parsing
-use fimg::DynImage;
-use std::collections::HashMap;
use std::collections::hash_map::Entry;
+use std::collections::HashMap;
use std::fmt::{self, Write};
use thiserror::Error;
-use crate::block::ratios::{Io, IoBuilder};
-use crate::block::{self, BLOCK_REGISTRY, Block, Rotation, State};
+use crate::block::{self, Block, BlockRegistry, Rotation, State};
use crate::data::base64;
-use crate::data::dynamic::{self, DynData};
+use crate::data::dynamic::{self, DynData, DynSerializer};
use crate::data::renderer::*;
-use crate::data::{self, DataRead, DataWrite, GridPos, Serializable};
+use crate::data::{self, DataRead, DataWrite, GridPos, Serializer};
use crate::item::storage::ItemStorage;
-use crate::utils::Cow;
+use crate::registry::RegistryEntry;
use crate::utils::array::Array2D;
/// biggest schematic
-pub const MAX_DIMENSION: usize = 1024;
+pub const MAX_DIMENSION: usize = 256;
/// most possible blocks
-pub const MAX_BLOCKS: u32 = 1024 * 1024;
+pub const MAX_BLOCKS: u32 = 256 * 256;
/// a placement in a schematic
-#[derive(Clone, Hash)]
-pub struct Placement {
- pub block: &'static Block,
+#[derive(Clone)]
+pub struct Placement<'l> {
+ pub block: &'l Block,
pub rot: Rotation,
state: Option<State>,
}
-impl PartialEq for Placement {
- fn eq(&self, rhs: &Placement) -> bool {
+impl PartialEq for Placement<'_> {
+ fn eq(&self, rhs: &Placement<'_>) -> bool {
self.block == rhs.block && self.rot == rhs.rot
}
}
-impl fmt::Debug for Placement {
+impl fmt::Debug for Placement<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
write!(f, "P<{}[*{}]>", self.block.name(), self.rot.ch())
}
}
-impl Placement {
+impl<'l> Placement<'l> {
/// make a placement from a block
#[must_use]
- pub const fn new(block: &'static Block) -> Self {
+ pub const fn new(block: &'l Block) -> Self {
Self {
block,
rot: Rotation::Up,
@@ -63,13 +61,16 @@ impl Placement {
}
/// draws this placement in particular
+ ///
+ /// # Safety
+ /// UB if called before [`warmup`](crate::warmup)
#[must_use]
pub fn image(
&self,
context: Option<&RenderingContext>,
rot: Rotation,
s: Scale,
- ) -> DynImage<Cow> {
+ ) -> ImageHolder<4> {
self.block.image(self.get_state(), context, rot, s)
}
@@ -85,49 +86,48 @@ impl Placement {
}
}
-impl BlockState for Placement {
- fn get_block(&self) -> Option<&'static Block> {
+impl<'l> BlockState<'l> for Placement<'l> {
+ fn get_block(&self) -> Option<&'l Block> {
Some(self.block)
}
}
-impl RotationState for Placement {
+impl RotationState for Placement<'_> {
fn get_rotation(&self) -> Option<Rotation> {
Some(self.rot)
}
}
-impl BlockState for Option<Placement> {
- fn get_block(&self) -> Option<&'static Block> {
- Some(self.as_ref()?.block)
+impl<'l> BlockState<'l> for Option<Placement<'l>> {
+ fn get_block(&self) -> Option<&'l Block> {
+ let Some(p) = self else {
+ return None;
+ };
+ Some(p.block)
}
}
-impl RotationState for Option<Placement> {
+impl RotationState for Option<Placement<'_>> {
fn get_rotation(&self) -> Option<Rotation> {
- Some(self.as_ref()?.rot)
+ let Some(p) = self else {
+ return None;
+ };
+ Some(p.rot)
}
}
#[derive(Clone, Debug)]
/// a schematic.
-pub struct Schematic {
+pub struct Schematic<'l> {
pub width: usize,
pub height: usize,
pub tags: HashMap<String, String>,
/// schems can have holes, so [Option] is used.
- pub blocks: Array2D<Option<Placement>>,
-}
-impl core::hash::Hash for Schematic {
- fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
- self.width.hash(state);
- self.height.hash(state);
- self.blocks.hash(state);
- }
+ pub blocks: Array2D<Option<Placement<'l>>>,
}
-impl PartialEq for Schematic {
- fn eq(&self, rhs: &Schematic) -> bool {
+impl<'l> PartialEq for Schematic<'l> {
+ fn eq(&self, rhs: &Schematic<'l>) -> bool {
self.width == rhs.width
&& self.height == rhs.height
&& self.blocks == rhs.blocks
@@ -135,9 +135,23 @@ impl PartialEq for Schematic {
}
}
-impl Schematic {
+impl<'l> Schematic<'l> {
+ #[must_use]
+ /// create a new schematic, panicking if too big
+ /// ```
+ /// # use mindus::Schematic;
+ /// let s = Schematic::new(5, 5);
+ /// ```
+ pub fn new(width: usize, height: usize) -> Self {
+ match Self::try_new(width, height) {
+ Ok(s) => s,
+ Err(NewError::Width(w)) => panic!("invalid schematic width ({w})"),
+ Err(NewError::Height(h)) => panic!("invalid schematic height ({h})"),
+ }
+ }
+
/// the area around a point
- pub(crate) fn cross(&self, c: &PositionContext) -> (Cross, Corners) {
+ pub(crate) fn cross(&self, c: &PositionContext) -> Cross {
let get = |x, y| {
let b = self.get(x?, y?).ok()??;
Some((b.get_block()?, b.get_rotation()?))
@@ -147,57 +161,43 @@ impl Schematic {
Some($x)
};
($a:expr => $b:expr) => {
- if $a < $b { None } else { Some($a - $b) }
+ if $a < $b {
+ None
+ } else {
+ Some($a - $b)
+ }
};
}
- (
- [
- get(s!(c.position.0), s!(c.position.1 + 1)),
- get(s!(c.position.0 + 1), s!(c.position.1)),
- get(s!(c.position.0), s!(c.position.1 => 1)),
- get(s!(c.position.0 => 1), s!(c.position.1)),
- ],
- [
- get(s!(c.position.0 => 1), s!(c.position.1 => 1)),
- get(s!(c.position.0 => 1), s!(c.position.1 + 1)),
- get(s!(c.position.0 + 1), s!(c.position.1 => 1)),
- get(s!(c.position.0 + 1), s!(c.position.1 + 1)),
- ],
- )
- }
-
- /// Ratios of this schematic.
- /// ```
- /// # #![feature(const_trait_impl)]
- /// # use mindus::Schematic;
- /// # use mindus::block::ratios::ratios;
- /// assert_eq!(Schematic::deserialize_base64("bXNjaAF4nEWMSw7CMAxEh9REVSqx5hKcCLFISxaR0o9Sg8rtSTpFePPkmWfDwTWQyY8B5z75VdE9wzrkuGicJwA2+T6kFeb+aNDtym2MW8i4LJ/sNWo4dje8ksa31zmXuyv+Y4BTgRD2iIi9M+xM7WrUgnoNhYpQESpCxfKLrUo9FsISLX6vKgwhhCVK+wX5/BtM").unwrap().ratios(),
- /// ratios![[Coal: 5.25, Lead: 10.5, Sand: 10.5, Water: 180] => [BlastCompound: 5.25, SporePod: 0.75]]);
- /// ```
- pub fn ratios(&self) -> Io {
- let mut io = IoBuilder::default();
- for p in self.blocks.iter().filter_map(|o| o.as_ref()) {
- io += p.block.io(p.state.as_ref());
- }
- io.into()
+ [
+ get(s!(c.position.0), s!(c.position.1 + 1)),
+ get(s!(c.position.0 + 1), s!(c.position.1)),
+ get(s!(c.position.0), s!(c.position.1 => 1)),
+ get(s!(c.position.0 => 1), s!(c.position.1)),
+ ]
}
- /// create a new schematic
+ /// create a new schematic, erroring if too big
/// ```
/// # use mindus::Schematic;
- /// let s = Schematic::new(5, 5);
+ /// assert!(Schematic::try_new(500, 500).is_err() == true);
/// ```
- pub fn new(width: usize, height: usize) -> Self {
+ pub fn try_new(width: usize, height: usize) -> Result<Self, NewError> {
+ if width > MAX_DIMENSION {
+ return Err(NewError::Width(width));
+ }
+ if height > MAX_DIMENSION {
+ return Err(NewError::Height(height));
+ }
let mut tags = HashMap::<String, String>::new();
tags.insert("name".to_string(), String::new());
tags.insert("description".to_string(), String::new());
tags.insert("labels".to_string(), "[]".to_string());
- Self {
+ Ok(Self {
width,
height,
tags,
blocks: Array2D::new(None, width, height),
- }
+ })
}
// #[must_use]
@@ -235,14 +235,13 @@ impl Schematic {
/// ```
/// # use mindus::Schematic;
/// # use mindus::block::Rotation;
- /// # use mindus::block::DUO;
///
/// let mut s = Schematic::new(5, 5);
/// assert!(s.get(0, 0).unwrap().is_none());
- /// s.put(0, 0, &DUO);
+ /// s.put(0, 0, &mindus::block::turrets::DUO);
/// assert!(s.get(0, 0).unwrap().is_some());
/// ```
- pub fn get(&self, x: usize, y: usize) -> Result<Option<&Placement>, PosError> {
+ pub fn get(&self, x: usize, y: usize) -> Result<Option<&Placement<'l>>, PosError> {
if x >= self.width || y >= self.height {
return Err(PosError {
x,
@@ -255,7 +254,7 @@ impl Schematic {
}
/// gets a block, mutably
- pub fn get_mut(&mut self, x: usize, y: usize) -> Result<Option<&mut Placement>, PosError> {
+ pub fn get_mut(&mut self, x: usize, y: usize) -> Result<Option<&mut Placement<'l>>, PosError> {
if x >= self.width || y >= self.height {
return Err(PosError {
x,
@@ -270,13 +269,12 @@ impl Schematic {
/// put a block in (same as [`Schematic::set`], but less arguments and builder-ness). panics!!!
/// ```
/// # use mindus::Schematic;
- /// # use mindus::block::ROUTER;
///
/// let mut s = Schematic::new(5, 5);
- /// s.put(0, 0, &ROUTER);
+ /// s.put(0, 0, &mindus::block::distribution::ROUTER);
/// assert!(s.get(0, 0).unwrap().is_some() == true);
/// ```
- pub fn put(&mut self, x: usize, y: usize, block: &'static Block) -> &mut Self {
+ pub fn put(&mut self, x: usize, y: usize, block: &'l Block) -> &mut Self {
self.set(x, y, block, DynData::Empty, Rotation::Up).unwrap();
self
}
@@ -284,19 +282,18 @@ impl Schematic {
/// set a block
/// ```
/// # use mindus::Schematic;
- /// # use mindus::data::dynamic::DynData;
+ /// # use mindus::DynData;
/// # use mindus::block::Rotation;
- /// # use mindus::block::ROUTER;
///
/// let mut s = Schematic::new(5, 5);
- /// s.set(0, 0, &ROUTER, DynData::Empty, Rotation::Right);
+ /// s.set(0, 0, &mindus::block::distribution::ROUTER, DynData::Empty, Rotation::Right);
/// assert!(s.get(0, 0).unwrap().is_some() == true);
/// ```
pub fn set(
&mut self,
x: usize,
y: usize,
- block: &'static Block,
+ block: &'l Block,
data: DynData,
rot: Rotation,
) -> Result<(), PlaceError> {
@@ -329,16 +326,17 @@ impl Schematic {
/// take out a block
/// ```
/// # use mindus::Schematic;
- /// # use mindus::block::DUO;
+ /// # use mindus::DynData;
+
/// # use mindus::block::Rotation;
///
/// let mut s = Schematic::new(5, 5);
- /// s.put(0, 0, &DUO);
+ /// s.put(0, 0, &mindus::block::turrets::DUO);
/// assert!(s.get(0, 0).unwrap().is_some() == true);
/// assert!(s.take(0, 0).unwrap().is_some() == true);
/// assert!(s.get(0, 0).unwrap().is_none() == true);
/// ```
- pub fn take(&mut self, x: usize, y: usize) -> Result<Option<Placement>, PosError> {
+ pub fn take(&mut self, x: usize, y: usize) -> Result<Option<Placement<'l>>, PosError> {
if x >= self.width || y >= self.height {
return Err(PosError {
x,
@@ -352,11 +350,13 @@ impl Schematic {
}
/// iterate over all the blocks
- pub fn block_iter(&self) -> impl Iterator<Item = (GridPos, &Placement)> {
- self.blocks
- .iter()
- .enumerate()
- .filter_map(|(i, p)| Some((GridPos(i / self.height, i % self.height), p.as_ref()?)))
+ pub fn block_iter(&self) -> impl Iterator<Item = (GridPos, &Placement<'_>)> {
+ self.blocks.iter().enumerate().filter_map(|(i, p)| {
+ let Some(p) = p else {
+ return None;
+ };
+ Some((GridPos(i / self.height, i % self.height), p))
+ })
}
#[must_use]
@@ -364,11 +364,11 @@ impl Schematic {
/// returns (cost, `is_sandbox`)
/// ```
/// # use mindus::Schematic;
+ /// # use mindus::DynData;
/// # use mindus::block::Rotation;
- /// # use mindus::block::CYCLONE;
///
/// let mut s = Schematic::new(5, 5);
- /// s.put(1, 1, &CYCLONE);
+ /// s.put(1, 1, &mindus::block::turrets::CYCLONE);
/// assert_eq!(s.compute_total_cost().0.get_total(), 405);
/// ```
pub fn compute_total_cost(&self) -> (ItemStorage, bool) {
@@ -473,10 +473,13 @@ impl fmt::Display for TruncatedError {
const SCHEMATIC_HEADER: u32 =
((b'm' as u32) << 24) | ((b's' as u32) << 16) | ((b'c' as u32) << 8) | (b'h' as u32);
-impl Serializable for Schematic {
+/// `serde_schematic`
+pub struct SchematicSerializer<'l>(pub &'l BlockRegistry<'l>);
+
+impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> {
type ReadError = ReadError;
type WriteError = WriteError;
- fn deserialize(buff: &mut DataRead<'_>) -> Result<Schematic, Self::ReadError> {
+ fn deserialize(&mut self, buff: &mut DataRead<'_>) -> Result<Schematic<'l>, Self::ReadError> {
let hdr = buff.read_u32()?;
if hdr != SCHEMATIC_HEADER {
return Err(ReadError::Header(hdr));
@@ -498,16 +501,14 @@ impl Serializable for Schematic {
if num_table < 0 {
return Err(ReadError::TableSize(num_table));
}
- let mut block_table = Vec::with_capacity(num_table as usize);
+ let mut block_table = Vec::new();
+ block_table.reserve(num_table as usize);
for _ in 0..num_table {
let name = buff.read_utf()?;
- block_table.push(
- BLOCK_REGISTRY
- .get(name)
- .copied()
- // wont get rendered
- .unwrap_or(&crate::block::METAL_FLOOR),
- );
+ match self.0.get(name) {
+ None => return Err(ReadError::NoSuchBlock(name.to_owned())),
+ Some(b) => block_table.push(b),
+ }
}
let num_blocks = buff.read_i32()?;
if num_blocks < 0 || num_blocks as u32 > MAX_BLOCKS {
@@ -523,7 +524,7 @@ impl Serializable for Schematic {
let config = if version < 1 {
block.data_from_i32(buff.read_i32()?, pos)?
} else {
- DynData::deserialize(&mut buff)?
+ DynSerializer.deserialize(&mut buff)?
};
let rot = Rotation::from(buff.read_u8()?);
schematic.set(pos.0, pos.1, block, config, rot)?;
@@ -531,20 +532,24 @@ impl Serializable for Schematic {
Ok(schematic)
}
- fn serialize(&self, buff: &mut DataWrite<'_>) -> Result<(), Self::WriteError> {
+ fn serialize(
+ &mut self,
+ buff: &mut DataWrite<'_>,
+ data: &Schematic,
+ ) -> Result<(), Self::WriteError> {
// write the header first just in case
buff.write_u32(SCHEMATIC_HEADER)?;
buff.write_u8(1)?;
let mut rbuff = DataWrite::default();
// don't have to check dimensions because they're already limited to MAX_DIMENSION
- rbuff.write_i16(self.width as i16)?;
- rbuff.write_i16(self.height as i16)?;
- if self.tags.len() > u8::MAX as usize {
- return Err(WriteError::TagCount(self.tags.len()));
+ rbuff.write_i16(data.width as i16)?;
+ rbuff.write_i16(data.height as i16)?;
+ if data.tags.len() > u8::MAX as usize {
+ return Err(WriteError::TagCount(data.tags.len()));
}
- rbuff.write_u8(self.tags.len() as u8)?;
- for (k, v) in &self.tags {
+ rbuff.write_u8(data.tags.len() as u8)?;
+ for (k, v) in &data.tags {
rbuff.write_utf(k)?;
rbuff.write_utf(v)?;
}
@@ -552,11 +557,11 @@ impl Serializable for Schematic {
let mut block_map = HashMap::new();
let mut block_table = Vec::new();
let mut block_count = 0i32;
- for curr in self.blocks.iter().filter_map(|b| b.as_ref()) {
+ for curr in data.blocks.iter().filter_map(|b| b.as_ref()) {
block_count += 1;
- if let Entry::Vacant(e) = block_map.entry(curr.block.name()) {
+ if let Entry::Vacant(e) = block_map.entry(curr.block.get_name()) {
e.insert(block_table.len() as u32);
- block_table.push(curr.block.name());
+ block_table.push(curr.block.get_name());
}
}
if block_table.len() > i8::MAX as usize {
@@ -569,14 +574,14 @@ impl Serializable for Schematic {
}
// don't have to check data.blocks.len() because dimensions don't allow exceeding MAX_BLOCKS
rbuff.write_i32(block_count)?;
- for (pos, curr) in self.block_iter() {
- rbuff.write_i8(block_map[curr.block.name()] as i8)?;
+ for (pos, curr) in data.block_iter() {
+ rbuff.write_i8(block_map[curr.block.get_name()] as i8)?;
rbuff.write_u32(pos.into())?;
let data = match curr.state {
None => DynData::Empty,
Some(ref s) => curr.block.serialize_state(s)?,
};
- data.serialize(&mut rbuff)?;
+ DynSerializer.serialize(&mut rbuff, &data)?;
rbuff.write_u8(curr.rot.into())?;
}
rbuff.inflate(buff)?;
@@ -628,24 +633,26 @@ pub enum WriteError {
Compress(#[from] super::CompressError),
}
-impl Schematic {
+impl<'l> SchematicSerializer<'l> {
/// deserializes a schematic from base64
/// ```
/// # use mindus::*;
/// let string = "bXNjaAF4nGNgZmBmZmDJS8xNZeBOyslPzlYAkwzcKanFyUWZBSWZ+XkMDAxsOYlJqTnFDEzRsYwMfAWJlTn5iSm6RfmlJalFQGlGEGJkZWSYxQAAcBkUPA==";
- /// let s = Schematic::deserialize_base64(string).unwrap();
+ /// let reg = build_registry();
+ /// let mut ss = SchematicSerializer(&reg);
+ /// let s = ss.deserialize_base64(string).unwrap();
/// assert!(s.get(1, 1).unwrap().unwrap().block.name() == "payload-router");
/// ```
- pub fn deserialize_base64(data: &str) -> Result<Schematic, R64Error> {
+ pub fn deserialize_base64(&mut self, data: &str) -> Result<Schematic<'l>, R64Error> {
let mut buff = vec![0; data.len() / 4 * 3 + 1];
let n_out = base64::decode(data.as_bytes(), buff.as_mut())?;
- Ok(Self::deserialize(&mut DataRead::new(&buff[..n_out]))?)
+ Ok(self.deserialize(&mut DataRead::new(&buff[..n_out]))?)
}
/// serialize a schematic to base64
- pub fn serialize_base64(&self) -> Result<String, W64Error> {
+ pub fn serialize_base64(&mut self, data: &Schematic<'l>) -> Result<String, W64Error> {
let mut buff = DataWrite::default();
- self.serialize(&mut buff)?;
+ self.serialize(&mut buff, data)?;
let buff = buff.get_written();
// round up because of padding
let mut text = vec![0; 4 * (buff.len() / 3 + usize::from(buff.len() % 3 != 0))];
@@ -699,12 +706,14 @@ mod test {
($name:ident, $($val:expr);+;) => {
#[test]
fn $name() {
+ let reg = crate::block::build_registry();
+ let mut ser = SchematicSerializer(&reg);
$(
- let parsed = unwrap_pretty(Schematic::deserialize_base64($val));
+ let parsed = unwrap_pretty(ser.deserialize_base64($val));
println!("\x1b[38;5;2mdeserialized\x1b[0m {}", parsed.tags.get("name").unwrap());
- let unparsed = unwrap_pretty(parsed.serialize_base64());
+ let unparsed = unwrap_pretty(ser.serialize_base64(&parsed));
println!("\x1b[38;5;2mserialized\x1b[0m {}", parsed.tags.get("name").unwrap());
- let parsed2 = unwrap_pretty(Schematic::deserialize_base64(&unparsed));
+ let parsed2 = unwrap_pretty(ser.deserialize_base64(&unparsed));
println!("\x1b[38;5;2mredeserialized\x1b[0m {}", parsed.tags.get("name").unwrap());
if parsed != parsed2 {
#[cfg(feature = "bin")]
@@ -746,7 +755,7 @@ mod test {
None
};
}
- use crate::block::*;
+ use crate::block::all::*;
let mut s = Schematic::new(3, 3);
s.put(0, 0, &DISTRIBUTOR)
.put(0, 1, &JUNCTION)
@@ -762,7 +771,10 @@ mod test {
pair!(2, 0, ROUTER);
pair!( );
];
- let s = Schematic::deserialize_base64("bXNjaAF4nDXKywqAIBQA0fFRBH1itDC7C8E01IT+vgia1VkMFmOwyR3C0N0VG/Mu1ZdwtpATMEa3SazoZdVMPqcudy7/DJovpV4peAAt0xF6").unwrap();
+ let reg = crate::block::build_registry();
+ let mut s = SchematicSerializer(&reg);
+
+ let s = s.deserialize_base64("bXNjaAF4nDXKywqAIBQA0fFRBH1itDC7C8E01IT+vgia1VkMFmOwyR3C0N0VG/Mu1ZdwtpATMEa3SazoZdVMPqcudy7/DJovpV4peAAt0xF6").unwrap();
let mut it = s.block_iter();
test_iter![it,
pair!(0, 0, CONVEYOR);
diff --git a/mindus/src/data/sector.rs b/src/data/sector.rs
index ac8c471..ac8c471 100644
--- a/mindus/src/data/sector.rs
+++ b/src/data/sector.rs
diff --git a/mindus/src/data/weather.rs b/src/data/weather.rs
index 8df9f59..8df9f59 100644
--- a/mindus/src/data/weather.rs
+++ b/src/data/weather.rs
diff --git a/src/exe/draw.rs b/src/exe/draw.rs
new file mode 100644
index 0000000..964bcac
--- /dev/null
+++ b/src/exe/draw.rs
@@ -0,0 +1,24 @@
+use mindus::build_registry;
+use mindus::Renderable;
+use mindus::SchematicSerializer;
+use std::env::Args;
+
+use crate::print_err;
+
+pub fn main(args: Args) {
+ let reg = build_registry();
+ let mut ss = SchematicSerializer(&reg);
+
+ // process schematics from command line
+ for curr in args {
+ match ss.deserialize_base64(&curr) {
+ Ok(s) => {
+ s.render().save("x.png");
+ }
+ // continue processing literals & maybe interactive mode
+ Err(e) => {
+ print_err!(e, "Could not read schematic");
+ }
+ }
+ }
+}
diff --git a/src/exe/map.rs b/src/exe/map.rs
new file mode 100644
index 0000000..cbb6477
--- /dev/null
+++ b/src/exe/map.rs
@@ -0,0 +1,48 @@
+use mindus::data::DataRead;
+use mindus::{build_registry, Renderable};
+use mindus::{MapSerializer, Serializer};
+use std::env::Args;
+use std::time::Instant;
+
+use super::print_err;
+pub fn main(args: Args) {
+ let reg = build_registry();
+ let mut ms = MapSerializer(&reg);
+ let runs = std::env::var("RUNS").map_or(10u8, |x| x.parse().unwrap_or(10u8));
+
+ // process schematics from command line
+ println!("starting timing");
+ let then = Instant::now();
+ for curr in args {
+ let Ok(s) = std::fs::read(curr) else {
+ continue;
+ };
+ let starting_deser = Instant::now();
+ match ms.deserialize(&mut DataRead::new(&s)) {
+ Err(e) => print_err!(e, "fail"),
+ Ok(m) => {
+ let deser_took = starting_deser.elapsed();
+ if let Ok(v) = std::env::var("SAVE") {
+ if v == "1" {
+ m.render().save("x.png");
+ continue;
+ }
+ }
+ let starting_render = Instant::now();
+ for _ in 0..runs {
+ drop(m.render());
+ }
+ let renders_took = starting_render.elapsed();
+ let took = then.elapsed();
+ println!(
+ "μ total: {:.2}s ({} runs) (deser: {}ms, render: {:.2}s) on map {}",
+ took.as_secs_f32() / runs as f32,
+ runs,
+ deser_took.as_millis(),
+ renders_took.as_secs_f32() / runs as f32,
+ m.tags.get("mapname").unwrap(),
+ );
+ }
+ }
+ }
+}
diff --git a/mindus/src/exe/mod.rs b/src/exe/mod.rs
index aa49f29..aa49f29 100644
--- a/mindus/src/exe/mod.rs
+++ b/src/exe/mod.rs
diff --git a/mindus/src/fluid.rs b/src/fluid/mod.rs
index 7437744..7437744 100644
--- a/mindus/src/fluid.rs
+++ b/src/fluid/mod.rs
diff --git a/mindus/src/item/mod.rs b/src/item/mod.rs
index 5d29176..5d29176 100644
--- a/mindus/src/item/mod.rs
+++ b/src/item/mod.rs
diff --git a/src/item/storage.rs b/src/item/storage.rs
new file mode 100644
index 0000000..ec7f219
--- /dev/null
+++ b/src/item/storage.rs
@@ -0,0 +1,425 @@
+use std::fmt;
+use std::iter::{Enumerate, FusedIterator};
+use std::marker::PhantomData;
+use std::slice;
+
+use crate::item;
+
+#[derive(Clone, Debug, Eq)]
+/// stores data
+pub struct Storage<T> {
+ base: Vec<u32>,
+ total: u64,
+ holds: PhantomData<T>,
+}
+
+pub type ItemStorage = Storage<item::Type>;
+
+impl<T> Default for Storage<T> {
+ fn default() -> Self {
+ Self {
+ base: Vec::default(),
+ total: 0,
+ holds: PhantomData,
+ }
+ }
+}
+
+impl<T> Storage<T>
+where
+ u16: From<T>,
+{
+ #[must_use]
+ /// create a new storage
+ ///
+ /// ```
+ /// # use mindus::item::storage::ItemStorage;
+ /// // ItemStorage is a alias to Storage<Item>
+ /// let s = ItemStorage::new();
+ /// ```
+ pub fn new() -> Self {
+ Self::default()
+ }
+
+ #[must_use]
+ /// total items
+ pub const fn get_total(&self) -> u64 {
+ self.total
+ }
+
+ #[must_use]
+ /// check if its empty
+ ///
+ /// ```
+ /// # use mindus::item::storage::ItemStorage;
+ /// # use mindus::item;
+ ///
+ /// let mut s = ItemStorage::new();
+ /// assert!(s.is_empty());
+ /// s.set(item::Type::Copper, 500);
+ /// assert!(!s.is_empty());
+ /// s.sub(item::Type::Copper, 500, 0);
+ /// assert!(s.is_empty());
+ /// ```
+ pub const fn is_empty(&self) -> bool {
+ self.total == 0
+ }
+
+ /// get item count of certain element
+ ///
+ /// ```
+ /// # use mindus::item::storage::ItemStorage;
+ /// # use mindus::item;
+ ///
+ /// let mut s = ItemStorage::new();
+ /// assert!(s.get(item::Type::Coal) == 0);
+ /// s.set(item::Type::Coal, 500);
+ /// assert!(s.get(item::Type::Titanium) == 0);
+ /// assert!(s.get(item::Type::Coal) == 500);
+ /// s.sub(item::Type::Coal, 500, 0);
+ /// assert!(s.get(item::Type::Coal) == 0);
+ /// ```
+ #[must_use]
+ pub fn get(&self, ty: T) -> u32 {
+ self.base.get(u16::from(ty) as usize).copied().unwrap_or(0)
+ }
+ /// set item count of certain element
+ ///
+ /// ```
+ /// # use mindus::item::storage::ItemStorage;
+ /// # use mindus::item;
+ ///
+ /// let mut s = ItemStorage::new();
+ /// s.set(item::Type::Coal, 500);
+ /// s.set(item::Type::Copper, 500);
+ /// assert!(s.get(item::Type::Copper) == 500);
+ /// ```
+ pub fn set(&mut self, ty: T, count: u32) -> u32 {
+ let idx = u16::from(ty) as usize;
+ match self.base.get_mut(idx) {
+ None => {
+ self.base.resize(idx + 1, 0);
+ self.base[idx] = count;
+ self.total += u64::from(count);
+ 0
+ }
+ Some(curr) => {
+ let prev = *curr;
+ self.total = self.total - u64::from(prev) + u64::from(count);
+ *curr = count;
+ prev
+ }
+ }
+ }
+
+ /// add to a certain elements item count, capping.
+ ///
+ /// ```
+ /// # use mindus::item::storage::ItemStorage;
+ /// # use mindus::item;
+ ///
+ /// let mut s = ItemStorage::new();
+ /// s.add(item::Type::Coal, 500, 500);
+ /// assert!(s.get(item::Type::Coal) == 500);
+ /// s.add(item::Type::Coal, 500, 10000);
+ /// assert!(s.get(item::Type::Coal) == 1000);
+ /// s.add(item::Type::Coal, 500, 1250);
+ /// assert!(s.get(item::Type::Coal) == 1250);
+ /// ```
+ pub fn add(&mut self, ty: T, add: u32, max: u32) -> (u32, u32) {
+ let idx = u16::from(ty) as usize;
+ match self.base.get_mut(idx) {
+ None => {
+ let actual = add.min(max);
+ self.base.resize(idx + 1, 0);
+ self.base[idx] = actual;
+ self.total += u64::from(add);
+ (actual, actual)
+ }
+ Some(curr) => {
+ if *curr < max {
+ let actual = add.min(max - *curr);
+ *curr += actual;
+ self.total += u64::from(actual);
+ (actual, *curr)
+ } else {
+ (0, *curr)
+ }
+ }
+ }
+ }
+
+ /// like [`Storage::add`] but fails
+ pub fn try_add(&mut self, ty: T, add: u32, max: u32) -> Result<(u32, u32), TryAddError> {
+ let idx = u16::from(ty) as usize;
+ match self.base.get_mut(idx) {
+ None => {
+ if add <= max {
+ self.base.resize(idx + 1, 0);
+ self.base[idx] = add;
+ self.total += u64::from(add);
+ Ok((add, add))
+ } else {
+ Err(TryAddError { have: 0, add, max })
+ }
+ }
+ Some(curr) => {
+ if *curr <= max && max - *curr <= add {
+ *curr += add;
+ self.total += u64::from(add);
+ Ok((add, *curr))
+ } else {
+ Err(TryAddError {
+ have: *curr,
+ add,
+ max,
+ })
+ }
+ }
+ }
+ }
+
+ pub fn sub(&mut self, ty: T, sub: u32, min: u32) -> (u32, u32) {
+ match self.base.get_mut(u16::from(ty) as usize) {
+ None => (0, 0),
+ Some(curr) => {
+ if *curr > min {
+ let actual = sub.min(*curr - min);
+ *curr -= actual;
+ self.total -= u64::from(actual);
+ (actual, *curr)
+ } else {
+ (0, *curr)
+ }
+ }
+ }
+ }
+
+ pub fn try_sub(&mut self, ty: T, sub: u32, min: u32) -> Result<(u32, u32), TrySubError> {
+ let idx = u16::from(ty) as usize;
+ match self.base.get_mut(idx) {
+ None => Err(TrySubError { have: 0, sub, min }),
+ Some(curr) => {
+ if *curr >= min && *curr - min >= sub {
+ *curr -= sub;
+ self.total -= u64::from(sub);
+ Ok((sub, *curr))
+ } else {
+ Err(TrySubError {
+ have: *curr,
+ sub,
+ min,
+ })
+ }
+ }
+ }
+ }
+
+ pub fn add_all(&mut self, other: &Storage<T>, max_each: u32) -> (u64, u64) {
+ let mut added = 0u64;
+ if max_each > 0 && other.total > 0 {
+ let mut iter = other.base.iter().enumerate();
+ // resize our vector only once and if necessary
+ let (last, add_last) = iter.rfind(|(_, n)| **n != 0).unwrap();
+ if self.base.len() <= last {
+ self.base.resize(last + 1, 0);
+ }
+ // process items by increasing ID
+ for (idx, add) in iter {
+ let curr = self.base[idx];
+ if curr < max_each {
+ let actual = (*add).min(max_each - curr);
+ self.base[idx] += actual;
+ added += u64::from(actual);
+ }
+ }
+ // process the final element (which we've retrieved first)
+ let curr = self.base[last];
+ if curr < max_each {
+ let actual = (*add_last).min(max_each - curr);
+ self.base[last] += actual;
+ added += u64::from(actual);
+ }
+ // update total
+ self.total += added;
+ }
+ (added, self.total)
+ }
+
+ pub fn pull_all(&mut self, other: &mut Storage<T>, max_each: u32) -> (u64, u64, u64) {
+ let mut added = 0u64;
+ if max_each > 0 && other.total > 0 {
+ let mut iter = other.base.iter_mut().enumerate();
+ // resize our vector only once and if necessary
+ let (last, add_last) = iter.rfind(|(_, n)| **n != 0).unwrap();
+ if self.base.len() <= last {
+ self.base.resize(last + 1, 0);
+ }
+ // process items by increasing ID
+ for (idx, add) in iter {
+ let curr = self.base[idx];
+ if curr < max_each {
+ let actual = (*add).min(max_each - curr);
+ self.base[idx] += actual;
+ *add -= actual;
+ added += u64::from(actual);
+ }
+ }
+ // process the final element (which we've retrieved first)
+ let curr = self.base[last];
+ if curr < max_each {
+ let actual = (*add_last).min(max_each - curr);
+ self.base[last] += actual;
+ *add_last -= actual;
+ added += u64::from(actual);
+ }
+ // update totals
+ self.total += added;
+ other.total -= added;
+ }
+ (added, self.total, other.total)
+ }
+
+ pub fn sub_all(&mut self, other: &Storage<T>, min_each: u32) -> (u64, u64) {
+ let mut subbed = 0u64;
+ if self.total > 0 && other.total > 0 {
+ // no need for resizing, we only remove
+ // process items by increasing ID
+ for (idx, sub) in other.base.iter().enumerate() {
+ if let Some(curr) = self.base.get(idx) {
+ if *curr > min_each {
+ let actual = (*sub).min(*curr - min_each);
+ self.base[idx] -= actual;
+ subbed += u64::from(actual);
+ }
+ } else {
+ break;
+ }
+ }
+ // update total
+ self.total -= subbed;
+ }
+ (subbed, self.total)
+ }
+
+ pub fn diff_all(&mut self, other: &mut Storage<T>, min_each: u32) -> (u64, u64, u64) {
+ let mut subbed = 0u64;
+ if self.total > 0 && other.total > 0 {
+ // no need for resizing, we only remove
+ // consider only indexes present in both
+ let end = self.base.len().min(other.base.len());
+ let lhs = &mut self.base[..end];
+ let rhs = &mut other.base[..end];
+ // process items by increasing ID
+ for (l, r) in lhs.iter_mut().zip(rhs) {
+ if *l > min_each && *r > min_each {
+ let actual = (*l - min_each).min(*r - min_each);
+ *l -= actual;
+ *r -= actual;
+ subbed -= u64::from(actual);
+ }
+ }
+ // update totals
+ self.total -= subbed;
+ other.total -= subbed;
+ }
+ (subbed, self.total, other.total)
+ }
+
+ #[must_use]
+ pub fn iter(&self) -> Iter<'_> {
+ Iter {
+ base: self.base.iter().enumerate(),
+ all: true,
+ }
+ }
+
+ #[must_use]
+ pub fn iter_nonzero(&self) -> Iter<'_> {
+ Iter {
+ base: self.base.iter().enumerate(),
+ all: false,
+ }
+ }
+
+ pub fn clear(&mut self) {
+ self.base.clear();
+ }
+}
+
+// manual because padding with zeros doesn't affect equality
+impl<T> PartialEq for Storage<T> {
+ fn eq(&self, other: &Self) -> bool {
+ let mut li = self.base.iter().fuse();
+ let mut ri = other.base.iter().fuse();
+ loop {
+ match (li.next(), ri.next()) {
+ (None, None) => return true,
+ (l, r) => {
+ if l.unwrap_or(&0) != r.unwrap_or(&0) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+}
+
+impl<T> fmt::Display for Storage<T>
+where
+ u16: From<T>,
+{
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let mut iter = self.iter_nonzero();
+ if let Some((ty, cnt)) = iter.next() {
+ write!(f, "{cnt} {ty}")?;
+ for (ty, cnt) in iter {
+ write!(f, ", {cnt} {ty}")?;
+ }
+ }
+ Ok(())
+ }
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)]
+#[error("adding {add} to current {have} would exceed {max}")]
+pub struct TryAddError {
+ pub have: u32,
+ pub add: u32,
+ pub max: u32,
+}
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)]
+#[error("removing {sub} from current {have} would drop below {min}")]
+pub struct TrySubError {
+ pub have: u32,
+ pub sub: u32,
+ pub min: u32,
+}
+
+#[derive(Clone, Debug)]
+pub struct Iter<'l> {
+ base: Enumerate<slice::Iter<'l, u32>>,
+ all: bool,
+}
+
+impl<'l> Iterator for Iter<'l> {
+ type Item = (item::Type, u32);
+
+ fn next(&mut self) -> Option<Self::Item> {
+ for (idx, cnt) in self.base.by_ref() {
+ if *cnt > 0 || self.all {
+ if let Ok(ty) = item::Type::try_from(idx as u16) {
+ return Some((ty, *cnt));
+ }
+ }
+ }
+ None
+ }
+
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ (0, self.base.size_hint().1)
+ }
+}
+
+impl<'l> FusedIterator for Iter<'l> where Enumerate<slice::Iter<'l, u32>>: FusedIterator {}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..1a8c302
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,32 @@
+//! crate for dealing with mindustry
+#![feature(
+ array_chunks,
+ const_trait_impl,
+ unchecked_math,
+ slice_as_chunks,
+ slice_swap_unchecked,
+ let_chains
+)]
+#![allow(clippy::missing_safety_doc, clippy::missing_const_for_fn, clippy::perf)]
+pub mod block;
+mod content;
+pub mod data;
+pub mod fluid;
+pub mod item;
+mod logic;
+pub mod modifier;
+mod registry;
+mod team;
+pub mod unit;
+mod utils;
+#[doc(inline)]
+pub use {
+ block::build_registry,
+ data::{
+ dynamic::DynData,
+ map::{Map, MapSerializer},
+ renderer::Renderable,
+ schematic::{Schematic, SchematicSerializer},
+ Serializer,
+ },
+};
diff --git a/src/logic/mod.rs b/src/logic/mod.rs
new file mode 100644
index 0000000..b5e7cc6
--- /dev/null
+++ b/src/logic/mod.rs
@@ -0,0 +1,76 @@
+use crate::content::numeric_enum;
+
+numeric_enum! {
+ pub enum LogicField for u8 | TryFromU8Error
+ {
+ TotalItems, FirstItem, TotalLiquids, TotalPower, ItemCapacity, LiquidCapacity, PowerCapacity, PowerNetCapacity, PowerNetStored, PowerNetIn,
+ PowerNetOut, Ammo, AmmoCapacity, Health, MaxHealth, Heat, Efficiency, Progress, Timescale, Rotation, PosX, PosY, ShootX, ShootY, Size, Dead, Range,
+ Shooting, Boosting, MineX, MineY, Mining, Speed, Team, Type, Flag, Controlled, Controller, Name, PayloadCount, PayloadType, Enabled, Shoot, ShootP,
+ Config, Color
+ }
+}
+
+impl LogicField {
+ #[must_use]
+ pub const fn is_readable(self) -> bool {
+ use LogicField::{
+ Ammo, AmmoCapacity, Boosting, Color, Controlled, Controller, Dead, Efficiency, Enabled,
+ FirstItem, Flag, Health, Heat, ItemCapacity, LiquidCapacity, MaxHealth, MineX, MineY,
+ Mining, Name, PayloadCount, PayloadType, PosX, PosY, PowerCapacity, PowerNetCapacity,
+ PowerNetIn, PowerNetOut, PowerNetStored, Progress, Range, Rotation, ShootX, ShootY,
+ Shooting, Size, Speed, Team, Timescale, TotalItems, TotalLiquids, TotalPower, Type,
+ };
+ matches!(
+ self,
+ TotalItems
+ | FirstItem
+ | TotalLiquids
+ | TotalPower
+ | ItemCapacity
+ | LiquidCapacity
+ | PowerCapacity
+ | PowerNetCapacity
+ | PowerNetStored
+ | PowerNetIn
+ | PowerNetOut
+ | Ammo
+ | AmmoCapacity
+ | Health
+ | MaxHealth
+ | Heat
+ | Efficiency
+ | Progress
+ | Timescale
+ | Rotation
+ | PosX
+ | PosY
+ | ShootX
+ | ShootY
+ | Size
+ | Dead
+ | Range
+ | Shooting
+ | Boosting
+ | MineX
+ | MineY
+ | Mining
+ | Speed
+ | Team
+ | Type
+ | Flag
+ | Controlled
+ | Controller
+ | Name
+ | PayloadCount
+ | PayloadType
+ | Enabled
+ | Color
+ )
+ }
+
+ #[must_use]
+ pub const fn is_writable(self) -> bool {
+ use LogicField::{Color, Config, Enabled, Shoot, ShootP};
+ matches!(self, Enabled | Shoot | ShootP | Config | Color)
+ }
+}
diff --git a/mindus/src/modifier.rs b/src/modifier.rs
index 7f9777e..bf1d867 100644
--- a/mindus/src/modifier.rs
+++ b/src/modifier.rs
@@ -28,9 +28,3 @@ content_enum! {
"invincible",
}
}
-
-impl Default for Type {
- fn default() -> Self {
- Self::None
- }
-}
diff --git a/src/registry.rs b/src/registry.rs
new file mode 100644
index 0000000..9603f59
--- /dev/null
+++ b/src/registry.rs
@@ -0,0 +1,51 @@
+use std::any::type_name;
+use std::collections::hash_map::Entry;
+use std::collections::HashMap;
+use std::error::Error;
+use std::fmt;
+
+pub trait RegistryEntry {
+ fn get_name(&self) -> &str;
+}
+
+pub struct Registry<'l, E: RegistryEntry + fmt::Debug + 'static> {
+ by_name: HashMap<&'l str, &'l E>,
+}
+
+impl<'l, E: RegistryEntry + fmt::Debug + 'static> Default for Registry<'l, E> {
+ fn default() -> Self {
+ Self {
+ by_name: HashMap::new(),
+ }
+ }
+}
+
+impl<'l, E: RegistryEntry + fmt::Debug + 'static> Registry<'l, E> {
+ pub fn register(&mut self, val: &'l E) -> Result<&'l E, RegisterError<'l, E>> {
+ match self.by_name.entry(val.get_name()) {
+ Entry::Occupied(e) => Err(RegisterError(e.get())),
+ Entry::Vacant(e) => Ok(e.insert(val)),
+ }
+ }
+
+ #[must_use]
+ pub fn get(&self, name: &str) -> Option<&'l E> {
+ self.by_name.get(name).copied()
+ }
+}
+
+#[derive(Clone, Copy, Debug)]
+pub struct RegisterError<'l, E: RegistryEntry + fmt::Debug + 'static>(pub &'l E);
+
+impl<'l, E: RegistryEntry + fmt::Debug + 'static> fmt::Display for RegisterError<'l, E> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(
+ f,
+ "{} {:?} already exists",
+ type_name::<E>(),
+ self.0.get_name()
+ )
+ }
+}
+
+impl<'l, E: RegistryEntry + fmt::Debug + 'static> Error for RegisterError<'l, E> {}
diff --git a/mindus/src/team.rs b/src/team.rs
index 70fa3b7..35a651f 100644
--- a/mindus/src/team.rs
+++ b/src/team.rs
@@ -1,10 +1,8 @@
use std::fmt;
-use atools::Chunked;
-
use crate::content::{Content, Type};
-#[derive(Clone, Copy, Debug, Eq, Ord, PartialOrd, Default, PartialEq)]
+#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub struct Team(u8);
impl Team {
@@ -109,16 +107,30 @@ impl Content for Team {
}
impl Team {
- pub const fn color(self) -> [u8; 3] {
- static COLORS: [[u8; 3]; 256] = include_bytes!("colors").chunked::<3>();
- COLORS[self.0 as usize]
+ pub const fn color(self) -> (u8, u8, u8) {
+ macro_rules! h {
+ ($x:literal) => {{
+ let v = color_hex::color_from_hex!($x);
+ (v[0], v[1], v[2])
+ }};
+ }
+ match self {
+ SHARDED => h!("ffd37f"),
+ DERELICT => h!("4d4e58"),
+ CRUX => h!("f25555"),
+ MALIS => h!("a27ce5"),
+ GREEN => h!("54d67d"),
+ BLUE => h!("6c87fd"),
+ NEOPLASTIC => h!("e05438"),
+ _ => h!("a9a9a9"),
+ }
}
-
- pub const DERELICT: Team = Team(0);
- pub const SHARDED: Team = Team(1);
- pub const CRUX: Team = Team(2);
- pub const MALIS: Team = Team(3);
- pub const GREEN: Team = Team(4);
- pub const BLUE: Team = Team(5);
- pub const NEOPLASTIC: Team = Team(6);
}
+
+pub const DERELICT: Team = Team(0);
+pub const SHARDED: Team = Team(1);
+pub const CRUX: Team = Team(2);
+pub const MALIS: Team = Team(3);
+pub const GREEN: Team = Team(4);
+pub const BLUE: Team = Team(5);
+pub const NEOPLASTIC: Team = Team(6);
diff --git a/src/unit/mod.rs b/src/unit/mod.rs
new file mode 100644
index 0000000..603b376
--- /dev/null
+++ b/src/unit/mod.rs
@@ -0,0 +1,75 @@
+//! units
+//!
+//! [source](https://github.com/Anuken/Mindustry/blob/master/core/src/mindustry/content/UnitTypes.java)
+use crate::content::content_enum;
+
+content_enum! {
+ pub enum Type / Unit for u16 | TryFromU16Error
+ {
+ "dagger",
+ "mace",
+ "fortress",
+ "scepter",
+ "reign",
+ "nova",
+ "pulsar",
+ "quasar",
+ "vela",
+ "corvus",
+ "crawler",
+ "atrax",
+ "spiroct",
+ "arkyid",
+ "toxopid",
+ "flare",
+ "horizon",
+ "zenith",
+ "antumbra",
+ "eclipse",
+ "mono",
+ "poly",
+ "mega",
+ "quad",
+ "oct",
+ "risso",
+ "minke",
+ "bryde",
+ "sei",
+ "omura",
+ "retusa",
+ "oxynoe",
+ "cyerce",
+ "aegires",
+ "navanax",
+ "alpha",
+ "beta",
+ "gamma",
+ "stell",
+ "locus",
+ "precept",
+ "vanquish",
+ "conquer",
+ "merui",
+ "cleroi",
+ "anthicus",
+ "anthicus-missile",
+ "tecta",
+ "collaris",
+ "elude",
+ "avert",
+ "obviate",
+ "quell",
+ "quell-missile",
+ "disrupt",
+ "disrupt-missile",
+ "renale",
+ "latum",
+ "evoke",
+ "incite",
+ "emanate",
+ "block",
+ "manifold",
+ "assembly-drone",
+ "scathe-missile",
+ }
+}
diff --git a/mindus/src/utils/array.rs b/src/utils/array.rs
index 8398b8a..6685baa 100644
--- a/mindus/src/utils/array.rs
+++ b/src/utils/array.rs
@@ -2,7 +2,7 @@ use std::{
fmt::{Debug, Write},
ops::Deref,
};
-#[derive(Clone, PartialEq, Eq, Hash)]
+#[derive(Clone, PartialEq, Eq)]
pub struct Array2D<T: Clone> {
width: usize,
height: usize,
diff --git a/src/utils/image.rs b/src/utils/image.rs
new file mode 100644
index 0000000..8254bb7
--- /dev/null
+++ b/src/utils/image.rs
@@ -0,0 +1,728 @@
+use fast_image_resize as fr;
+use std::{num::NonZeroU32, slice::SliceIndex};
+
+pub trait Overlay<W> {
+ /// Overlay with => self at coordinates x, y, without blending
+ /// # Safety
+ ///
+ /// UB if x, y is out of bounds
+ unsafe fn overlay_at(&mut self, with: &W, x: u32, y: u32) -> &mut Self;
+}
+
+pub trait RepeatNew {
+ type Output;
+ /// Repeat self till it fills a new image of size x, y
+ /// # Safety
+ ///
+ /// UB if self's width is not a multiple of x, or self's height is not a multiple of y
+ unsafe fn repeated(&self, x: u32, y: u32) -> Self::Output;
+}
+
+pub trait ImageUtils {
+ type With<'a>;
+ /// Tint this image with the color
+ fn tint(&mut self, color: (u8, u8, u8)) -> &mut Self;
+ /// Overlay with => self (does not blend)
+ /// # Safety
+ ///
+ /// UB if a.width != b.width || a.height != b.height
+ unsafe fn overlay(&mut self, with: Self::With<'_>) -> &mut Self;
+ /// rotate (squares only)
+ /// # Safety
+ ///
+ /// UB if image is not square
+ unsafe fn rotate(&mut self, times: u8) -> &mut Self;
+ /// flip along the horizontal axis
+ fn flip_h(&mut self) -> &mut Self;
+ /// flip along the vertical axis
+ fn flip_v(&mut self) -> &mut Self;
+ /// shadow
+ fn shadow(&mut self) -> &mut Self;
+ /// scale a image
+ fn scale(self, to: u32) -> Image<Vec<u8>, 4>;
+}
+
+macro_rules! unsafe_assert {
+ ($cond:expr) => {{
+ if !$cond {
+ #[cfg(debug_assertions)]
+ panic!("assertion failed: {} returned false", stringify!($cond));
+ #[cfg(not(debug_assertions))]
+ unsafe {
+ std::hint::unreachable_unchecked()
+ };
+ }
+ }};
+}
+
+impl Overlay<Image<&[u8], 3>> for Image<&mut [u8], 3> {
+ unsafe fn overlay_at(&mut self, with: &Image<&[u8], 3>, x: u32, y: u32) -> &mut Self {
+ for j in 0..with.height() {
+ for i in 0..with.width() {
+ let with_index = with.slice(i, j);
+ let their_px = with.buffer.get_unchecked(with_index);
+ let our_index =
+ really_unsafe_index(i.unchecked_add(x), j.unchecked_add(y), self.width())
+ .unchecked_mul(3);
+ let our_px = self
+ .buffer
+ .get_unchecked_mut(our_index..our_index.unchecked_add(3));
+ std::ptr::copy_nonoverlapping(their_px.as_ptr(), our_px.as_mut_ptr(), 3);
+ }
+ }
+ self
+ }
+}
+
+impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 3> {
+ unsafe fn overlay_at(&mut self, with: &Image<&[u8], 4>, x: u32, y: u32) -> &mut Self {
+ for j in 0..with.height() {
+ for i in 0..with.width() {
+ let with_index = really_unsafe_index(i, j, with.width()).unchecked_mul(4);
+ // solidity
+ if *with.buffer.get_unchecked(with_index.unchecked_add(3)) > 128 {
+ let their_px = with
+ .buffer
+ .get_unchecked(with_index..with_index.unchecked_add(3));
+ let our_index =
+ really_unsafe_index(i.unchecked_add(x), j.unchecked_add(y), self.width())
+ .unchecked_mul(3);
+ let our_px = self
+ .buffer
+ .get_unchecked_mut(our_index..our_index.unchecked_add(3));
+ std::ptr::copy_nonoverlapping(their_px.as_ptr(), our_px.as_mut_ptr(), 3);
+ }
+ }
+ }
+ self
+ }
+}
+
+impl Overlay<Image<&[u8], 4>> for Image<&mut [u8], 4> {
+ unsafe fn overlay_at(&mut self, with: &Image<&[u8], 4>, x: u32, y: u32) -> &mut Self {
+ for j in 0..with.height() {
+ for i in 0..with.width() {
+ let with_index = really_unsafe_index(i, j, with.width()).unchecked_mul(4);
+ let their_px = with
+ .buffer
+ .get_unchecked(with_index..with_index.unchecked_add(4));
+ if *their_px.get_unchecked(3) > 128 {
+ let our_index =
+ really_unsafe_index(i.unchecked_add(x), j.unchecked_add(y), self.width())
+ .unchecked_mul(4);
+ let our_px = self
+ .buffer
+ .get_unchecked_mut(our_index..our_index.unchecked_add(4));
+ std::ptr::copy_nonoverlapping(their_px.as_ptr(), our_px.as_mut_ptr(), 4);
+ }
+ }
+ }
+
+ self
+ }
+}
+
+impl RepeatNew for Image<&[u8], 4> {
+ type Output = Image<Vec<u8>, 4>;
+ unsafe fn repeated(&self, x: u32, y: u32) -> Self::Output {
+ let mut img = Image::alloc(x, y); // could probably optimize this a ton but eh
+ for x in 0..(x / self.width()) {
+ for y in 0..(y / self.height()) {
+ let a: &mut Image<&mut [u8], 4> = &mut img.as_mut();
+ a.overlay_at(self, x * self.width(), y * self.height());
+ }
+ }
+ img
+ }
+}
+
+pub fn flip_v<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
+ for y in 0..img.height() / 2 {
+ for x in 0..img.width() {
+ unsafe {
+ // SAFETY: cant overflow
+ let y2 = img.height().unchecked_sub(y).unchecked_sub(1);
+ // SAFETY: within bounds
+ let p2 = img.pixel(x, y2);
+ let p = img.pixel(x, y);
+ img.set_pixel(x, y2, p);
+ img.set_pixel(x, y, p2);
+ }
+ }
+ }
+}
+
+pub fn flip_h<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
+ for y in 0..img.height() {
+ for x in 0..img.width() / 2 {
+ // SAFETY: This cannot be out of bounds
+ unsafe {
+ let x2 = img.width().unchecked_sub(x).unchecked_sub(1);
+ let p2 = img.pixel(x2, y);
+ let p = img.pixel(x, y);
+ img.set_pixel(x2, y, p);
+ img.set_pixel(x, y, p2);
+ }
+ }
+ }
+}
+
+pub fn rot_180<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
+ for y in 0..img.height() / 2 {
+ for x in 0..img.width() {
+ // SAFETY: this is safe because it cannot be out of bounds
+ unsafe {
+ let p = img.pixel(x, y);
+ let x2 = img.width() - x - 1;
+ let y2 = img.height() - y - 1;
+ let p2 = img.pixel(x2, y2);
+ img.set_pixel(x, y, p2);
+ img.set_pixel(x2, y2, p);
+ }
+ }
+ }
+
+ if img.height() % 2 != 0 {
+ let middle = img.height() / 2;
+
+ for x in 0..img.width() / 2 {
+ // SAFETY: this is safe because it cannot be out of bounds
+ unsafe {
+ let p = img.pixel(x, middle);
+ let x2 = img.width() - x - 1;
+
+ let p2 = img.pixel(x2, middle);
+ img.set_pixel(x, middle, p2);
+ img.set_pixel(x2, middle, p);
+ }
+ }
+ }
+}
+
+/// # Safety
+///
+/// UB if the image is not square
+#[inline(never)]
+pub unsafe fn rot_90<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
+ debug_assert_eq!(img.width(), img.height());
+ let size = img.width();
+ flip_v(img);
+ for i in 0..size {
+ for j in i..size {
+ for c in 0..CHANNELS {
+ img.buffer.swap_unchecked(
+ (i * size + j) as usize * CHANNELS + c,
+ (j * size + i) as usize * CHANNELS + c,
+ );
+ }
+ }
+ }
+}
+
+/// # Safety
+///
+/// UB if the image is not square
+pub unsafe fn rot_270<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
+ debug_assert_eq!(img.width(), img.height());
+ flip_h(img);
+ let size = img.width();
+ for i in 0..size {
+ for j in i..size {
+ for c in 0..CHANNELS {
+ img.buffer.swap_unchecked(
+ (i * size + j) as usize * CHANNELS + c,
+ (j * size + i) as usize * CHANNELS + c,
+ );
+ }
+ }
+ }
+}
+
+impl ImageUtils for Image<&mut [u8], 4> {
+ unsafe fn rotate(&mut self, times: u8) -> &mut Self {
+ match times {
+ 2 => rot_180(self),
+ 1 => unsafe { rot_90(self) },
+ 3 => unsafe { rot_270(self) },
+ _ => {}
+ }
+ self
+ }
+
+ fn tint(&mut self, (r, g, b): (u8, u8, u8)) -> &mut Self {
+ let [tr, tg, tb] = [r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0];
+ for [r, g, b, _] in self.buffer.array_chunks_mut::<4>() {
+ *r = (*r as f32 * tr) as u8;
+ *g = (*g as f32 * tg) as u8;
+ *b = (*b as f32 * tb) as u8;
+ }
+ self
+ }
+ type With<'a> = &'a Image<&'a [u8], 4>;
+ unsafe fn overlay(&mut self, with: &Image<&[u8], 4>) -> &mut Self {
+ unsafe_assert!(self.width() == with.width());
+ unsafe_assert!(self.height() == with.height());
+ for (i, other_pixels) in with.chunked().enumerate() {
+ if other_pixels[3] > 128 {
+ unsafe {
+ let own_pixels = self
+ .buffer
+ .get_unchecked_mut(i.unchecked_mul(4)..i.unchecked_mul(4).unchecked_add(4));
+ std::ptr::copy_nonoverlapping(
+ other_pixels.as_ptr(),
+ own_pixels.as_mut_ptr(),
+ 4,
+ );
+ }
+ }
+ }
+ self
+ }
+
+ // this function is very cold but im removing image so might as well use fir
+ fn scale(self, to: u32) -> Image<Vec<u8>, 4> {
+ let from =
+ fr::Image::from_slice_u8(self.width, self.height, self.buffer, fr::PixelType::U8x4)
+ .unwrap();
+ let to = to.try_into().unwrap();
+ let mut dst = fr::Image::new(to, to, fr::PixelType::U8x4);
+ fr::Resizer::new(fr::ResizeAlg::Nearest)
+ .resize(&from.view(), &mut dst.view_mut())
+ .unwrap();
+ Image::new(to, to, dst.into_vec())
+ }
+
+ fn shadow(&mut self) -> &mut Self {
+ let mut shadow: Image<Vec<u8>, 4> =
+ Image::new(self.width, self.height, self.buffer.to_vec());
+ for [r, g, b, a] in shadow.buffer.array_chunks_mut() {
+ if *a < 128 {
+ *r /= 10;
+ *g /= 10;
+ *b /= 10;
+ }
+ }
+ blurslice::gaussian_blur_bytes::<4>(
+ &mut shadow.buffer,
+ self.width() as usize,
+ self.height() as usize,
+ 9.0,
+ )
+ .unwrap();
+ for ([r, g, b, a], &[from_r, from_g, from_b, from_a]) in self
+ .buffer
+ .array_chunks_mut()
+ .zip(shadow.buffer.array_chunks())
+ {
+ if *a == 0 {
+ (*r, *g, *b, *a) = (from_r, from_g, from_b, from_a);
+ }
+ }
+ self
+ }
+
+ #[inline]
+ fn flip_h(&mut self) -> &mut Self {
+ flip_h(self);
+ self
+ }
+
+ #[inline(always)]
+ fn flip_v(&mut self) -> &mut Self {
+ flip_v(self);
+ self
+ }
+}
+
+#[inline]
+unsafe fn really_unsafe_index(x: u32, y: u32, w: u32) -> usize {
+ // y * w + x
+ (y as usize)
+ .unchecked_mul(w as usize)
+ .unchecked_add(x as usize)
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct Image<T, const CHANNELS: usize> {
+ pub buffer: T,
+ pub width: NonZeroU32,
+ pub height: NonZeroU32,
+}
+
+impl<const CHANNELS: usize> Default for Image<&'static [u8], CHANNELS> {
+ fn default() -> Self {
+ Self {
+ buffer: &[0; CHANNELS],
+ width: NonZeroU32::new(1).unwrap(),
+ height: NonZeroU32::new(1).unwrap(),
+ }
+ }
+}
+
+impl<T, const CHANNELS: usize> Image<T, CHANNELS> {
+ #[inline]
+ pub fn height(&self) -> u32 {
+ self.height.into()
+ }
+
+ #[inline]
+ pub fn width(&self) -> u32 {
+ self.width.into()
+ }
+
+ #[inline]
+ pub const fn new(width: NonZeroU32, height: NonZeroU32, buffer: T) -> Self {
+ Image {
+ width,
+ height,
+ buffer,
+ }
+ }
+}
+
+impl<const CHANNELS: usize> Image<&[u8], CHANNELS> {
+ #[inline]
+ pub const fn copy(&self) -> Self {
+ Self {
+ width: self.width,
+ height: self.height,
+ buffer: self.buffer,
+ }
+ }
+}
+
+impl<T: std::ops::Deref<Target = [u8]>, const CHANNELS: usize> Image<T, CHANNELS> {
+ /// # Safety
+ ///
+ /// - UB if x, y is out of bounds
+ /// - UB if buffer is too small
+ #[inline]
+ pub unsafe fn slice(&self, x: u32, y: u32) -> impl SliceIndex<[u8], Output = [u8]> {
+ debug_assert!(x < self.width(), "x out of bounds");
+ debug_assert!(y < self.height(), "y out of bounds");
+ let index = really_unsafe_index(x, y, self.width()).unchecked_mul(CHANNELS);
+ debug_assert!(self.buffer.len() > index);
+ index..index.unchecked_add(CHANNELS)
+ }
+
+ #[inline]
+ pub fn chunked(&self) -> impl Iterator<Item = &[u8; CHANNELS]> {
+ unsafe_assert!(self.buffer.len() > CHANNELS);
+ unsafe_assert!(self.buffer.len() % CHANNELS == 0);
+ self.buffer.array_chunks::<CHANNELS>()
+ }
+
+ /// Return a pixel at (x, y).
+ /// # Safety
+ ///
+ /// Refer to [`slice`]
+ #[inline]
+ pub unsafe fn pixel(&self, x: u32, y: u32) -> [u8; CHANNELS] {
+ *(self.buffer.get_unchecked(self.slice(x, y)).as_ptr().cast())
+ }
+}
+impl<T: std::ops::DerefMut<Target = [u8]>, const CHANNELS: usize> Image<T, CHANNELS> {
+ /// Return a mutable reference to a pixel at (x, y).
+ /// # Safety
+ ///
+ /// Refer to [`slice`]
+ #[inline]
+ pub unsafe fn pixel_mut(&mut self, x: u32, y: u32) -> &mut [u8] {
+ let idx = self.slice(x, y);
+ self.buffer.get_unchecked_mut(idx)
+ }
+
+ #[inline]
+ pub fn chunked_mut(&mut self) -> impl Iterator<Item = &mut [u8; CHANNELS]> {
+ self.buffer.array_chunks_mut::<CHANNELS>()
+ }
+
+ #[inline]
+ pub unsafe fn set_pixel(&mut self, x: u32, y: u32, px: [u8; CHANNELS]) {
+ std::ptr::copy_nonoverlapping(px.as_ptr(), self.pixel_mut(x, y).as_mut_ptr(), CHANNELS);
+ }
+}
+
+impl<const CHANNELS: usize> Image<Vec<u8>, CHANNELS> {
+ pub fn alloc(width: u32, height: u32) -> Self {
+ Image {
+ width: width.try_into().unwrap(),
+ height: height.try_into().unwrap(),
+ buffer: vec![0; CHANNELS * width as usize * height as usize],
+ }
+ }
+
+ pub fn as_ref(&self) -> Image<&[u8], CHANNELS> {
+ Image::new(self.width, self.height, &self.buffer)
+ }
+
+ pub fn as_mut(&mut self) -> Image<&mut [u8], CHANNELS> {
+ Image::new(self.width, self.height, &mut self.buffer)
+ }
+}
+
+impl Image<Vec<u8>, 4> {
+ pub fn remove_channel(&mut self) -> Image<Vec<u8>, 3> {
+ let mut new = vec![0; self.width() as usize * self.height() as usize * 3];
+ for (&[r, g, b, _], [nr, ng, nb]) in self
+ .buffer
+ .array_chunks::<4>()
+ .zip(new.array_chunks_mut::<3>())
+ {
+ (*nr, *ng, *nb) = (r, g, b);
+ }
+ Image::new(self.width, self.height, new)
+ }
+}
+
+impl Image<Vec<u8>, 3> {
+ #[cfg(feature = "bin")]
+ pub fn save(&self, f: impl AsRef<std::path::Path>) {
+ image::save_buffer(
+ f,
+ &self.buffer,
+ self.width(),
+ self.height(),
+ image::ColorType::Rgb8,
+ )
+ .unwrap();
+ }
+}
+
+#[derive(Clone, Debug)]
+pub enum ImageHolder<const CHANNELS: usize> {
+ Borrow(Image<&'static [u8], CHANNELS>),
+ Own(Image<Vec<u8>, CHANNELS>),
+}
+
+impl<const CHANNELS: usize> ImageHolder<CHANNELS> {
+ #[must_use]
+ pub fn own(self) -> Image<Vec<u8>, CHANNELS> {
+ match self {
+ Self::Own(x) => x,
+ Self::Borrow(x) => Image::new(x.width, x.height, x.buffer.to_vec()),
+ }
+ }
+}
+
+impl<const CHANNELS: usize> ImageHolder<CHANNELS> {
+ #[must_use]
+ #[inline]
+ pub fn borrow(&self) -> Image<&[u8], CHANNELS> {
+ match self {
+ Self::Own(x) => x.as_ref(),
+ Self::Borrow(x) => x.clone(),
+ }
+ }
+
+ #[must_use]
+ #[inline]
+ pub fn borrow_mut(&mut self) -> Image<&mut [u8], CHANNELS> {
+ match self {
+ Self::Own(x) => Image::new(x.width, x.height, &mut x.buffer),
+ Self::Borrow(_) => {
+ *self = Self::from(std::mem::replace(self, Self::from(Image::default())).own());
+ self.borrow_mut()
+ }
+ }
+ }
+}
+
+impl Overlay<ImageHolder<4>> for ImageHolder<4> {
+ unsafe fn overlay_at(&mut self, with: &ImageHolder<4>, x: u32, y: u32) -> &mut Self {
+ self.borrow_mut().overlay_at(&with.borrow(), x, y);
+ self
+ }
+}
+
+impl ImageUtils for ImageHolder<4> {
+ fn tint(&mut self, color: (u8, u8, u8)) -> &mut Self {
+ self.borrow_mut().tint(color);
+ self
+ }
+ type With<'a> = &'a Self;
+ unsafe fn overlay(&mut self, with: &Self) -> &mut Self {
+ self.borrow_mut().overlay(&with.borrow());
+ self
+ }
+
+ unsafe fn rotate(&mut self, times: u8) -> &mut Self {
+ if times == 0 {
+ return self;
+ }
+ // borrow mut may clone, so try to avoid
+ self.borrow_mut().rotate(times);
+ self
+ }
+
+ fn flip_h(&mut self) -> &mut Self {
+ self.borrow_mut().flip_h();
+ self
+ }
+
+ fn flip_v(&mut self) -> &mut Self {
+ self.borrow_mut().flip_v();
+ self
+ }
+
+ fn shadow(&mut self) -> &mut Self {
+ self.borrow_mut().shadow();
+ self
+ }
+
+ fn scale(mut self, to: u32) -> Image<Vec<u8>, 4> {
+ self.borrow_mut().scale(to)
+ }
+}
+
+impl<const CHANNELS: usize> From<Image<&'static [u8], CHANNELS>> for ImageHolder<CHANNELS> {
+ fn from(value: Image<&'static [u8], CHANNELS>) -> Self {
+ Self::Borrow(value)
+ }
+}
+
+impl<const CHANNELS: usize> From<Image<Vec<u8>, CHANNELS>> for ImageHolder<CHANNELS> {
+ fn from(value: Image<Vec<u8>, CHANNELS>) -> Self {
+ Self::Own(value)
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ macro_rules! img {
+ [[$($v:literal),+] [$($v2:literal),+]] => {{
+ let from: Image<Vec<u8>, 1> = Image::new(
+ 2.try_into().unwrap(),
+ 2.try_into().unwrap(),
+ vec![$($v,)+ $($v2,)+]
+ );
+ from
+ }}
+ }
+
+ #[test]
+ fn rem_chnl_test() {
+ let mut img: Image<_, 4> = Image::alloc(2, 1);
+ unsafe { img.set_pixel(1, 0, [255, 165, 0, 241]) };
+ assert_eq!(unsafe { img.pixel(1, 0) }, [255, 165, 0, 241]);
+ assert_eq!(unsafe { img.pixel(0, 0) }, [0, 0, 0, 0]);
+ let img = img.remove_channel();
+ assert_eq!(unsafe { img.pixel(1, 0) }, [255, 165, 0]);
+ }
+
+ #[test]
+ fn rotate_90() {
+ let mut from = img![
+ [00, 01]
+ [02, 10]
+ ];
+ unsafe { rot_90(&mut from.as_mut()) };
+ assert_eq!(
+ from,
+ img![
+ [02, 00]
+ [10, 01]
+ ]
+ );
+ }
+
+ #[test]
+ fn rotate_180() {
+ let mut from = img![
+ [00, 01]
+ [02, 10]
+ ];
+ rot_180(&mut from.as_mut());
+ assert_eq!(
+ from,
+ img![
+ [10, 02]
+ [01, 00]
+ ]
+ );
+ }
+
+ #[test]
+ fn rotate_270() {
+ let mut from = img![
+ [00, 01]
+ [20, 10]
+ ];
+ unsafe { rot_270(&mut from.as_mut()) };
+ assert_eq!(
+ from,
+ img![
+ [01, 10]
+ [00, 20]
+ ]
+ );
+ }
+
+ #[test]
+ fn flip_vertical() {
+ let mut from = img![
+ [90, 01]
+ [21, 42]
+ ];
+ flip_v(&mut from.as_mut());
+ assert_eq!(
+ from,
+ img![
+ [21, 42]
+ [90, 01]
+ ]
+ )
+ }
+ #[test]
+ fn flip_horizontal() {
+ let mut from = img![
+ [90, 01]
+ [21, 42]
+ ];
+ flip_h(&mut from.as_mut());
+ assert_eq!(
+ from,
+ img![
+ [01, 90]
+ [42, 21]
+ ]
+ )
+ }
+
+ #[test]
+ fn scale() {
+ let mut from = Image::alloc(6, 6);
+ unsafe { from.set_pixel(3, 3, [255, 255, 255, 255]) };
+ let from = from.as_mut().scale(12);
+ assert_eq!(unsafe { from.pixel(6, 6) }, [255, 255, 255, 255]);
+ }
+}
+
+pub fn blend(bg: &mut [u8; 4], fg: [u8; 4]) {
+ if fg[3] == 0 {
+ return;
+ }
+ if fg[3] == 255 {
+ *bg = fg;
+ return;
+ }
+ let bg_a = bg[3] as f32 / 255.0;
+ let fg_a = fg[3] as f32 / 255.0;
+ let a = bg_a + fg_a - bg_a * fg_a;
+ if a == 0.0 {
+ return;
+ };
+ *bg = [
+ (255.0
+ * ((((fg[0] as f32 / 255.0) * fg_a) + ((bg[0] as f32 / 255.0) * bg_a) * (1.0 - fg_a))
+ / a)) as u8,
+ (255.0
+ * ((((fg[1] as f32 / 255.0) * fg_a) + ((bg[1] as f32 / 255.0) * bg_a) * (1.0 - fg_a))
+ / a)) as u8,
+ (255.0
+ * ((((fg[2] as f32 / 255.0) * fg_a) + ((bg[2] as f32 / 255.0) * bg_a) * (1.0 - fg_a))
+ / a)) as u8,
+ (255.0 * a) as u8,
+ ]
+}
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
new file mode 100644
index 0000000..6e781fe
--- /dev/null
+++ b/src/utils/mod.rs
@@ -0,0 +1,3 @@
+pub mod array;
+pub mod image;
+pub use self::image::{Image, ImageHolder, ImageUtils, Overlay, RepeatNew as Repeat};