Unnamed repository; edit this file 'description' to name the repository.
3112 files changed, 12239 insertions, 6608 deletions
diff --git a/.github/example.png b/.github/example.png Binary files differindex 2197fd0..d19d4d5 100644 --- a/.github/example.png +++ b/.github/example.png @@ -1,6 +1,7 @@ # rustc/cargo outputs -/Cargo.lock -/target +Cargo.lock +target +rustc-ice-*.txt # Visual Studio Code /.vscode @@ -1,43 +1,6 @@ -[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" +[workspace] +members = ["mindus", "lemu", "p2s"] +resolver = "2" [profile.release] debug = 2 @@ -50,6 +13,3 @@ opt-level = 3 [profile.release.build-override] opt-level = 3 - -[dev-dependencies] -diff = "0.1" @@ -1,20 +1,4 @@ # mindus - - -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(®); -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: - - +- 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 diff --git a/assets/blocks/campaign/interplanetary-accelerator.png b/assets/blocks/campaign/interplanetary-accelerator.png Binary files differdeleted file mode 100644 index 78f302b..0000000 --- a/assets/blocks/campaign/interplanetary-accelerator.png +++ /dev/null diff --git a/assets/blocks/campaign/launchpod.png b/assets/blocks/campaign/launchpod.png Binary files differdeleted file mode 100644 index 1697897..0000000 --- a/assets/blocks/campaign/launchpod.png +++ /dev/null diff --git a/assets/blocks/defense/barrier-projector-team.png b/assets/blocks/defense/barrier-projector-team.png Binary files differdeleted file mode 100644 index 9c0d534..0000000 --- a/assets/blocks/defense/barrier-projector-team.png +++ /dev/null diff --git a/assets/blocks/defense/barrier-projector.png b/assets/blocks/defense/barrier-projector.png Binary files differdeleted file mode 100644 index 0b72218..0000000 --- a/assets/blocks/defense/barrier-projector.png +++ /dev/null diff --git a/assets/blocks/defense/build-tower.png b/assets/blocks/defense/build-tower.png Binary files differdeleted file mode 100644 index cec7847..0000000 --- a/assets/blocks/defense/build-tower.png +++ /dev/null diff --git a/assets/blocks/defense/force-projector.png b/assets/blocks/defense/force-projector.png Binary files differdeleted file mode 100644 index 72bd63e..0000000 --- a/assets/blocks/defense/force-projector.png +++ /dev/null diff --git a/assets/blocks/defense/large-shield-projector-team.png b/assets/blocks/defense/large-shield-projector-team.png Binary files differdeleted file mode 100644 index b43d7d5..0000000 --- a/assets/blocks/defense/large-shield-projector-team.png +++ /dev/null diff --git a/assets/blocks/defense/large-shield-projector.png b/assets/blocks/defense/large-shield-projector.png Binary files differdeleted file mode 100644 index ec01b32..0000000 --- a/assets/blocks/defense/large-shield-projector.png +++ /dev/null diff --git a/assets/blocks/defense/mend-projector.png b/assets/blocks/defense/mend-projector.png Binary files differdeleted file mode 100644 index 0b70091..0000000 --- a/assets/blocks/defense/mend-projector.png +++ /dev/null diff --git a/assets/blocks/defense/mender.png b/assets/blocks/defense/mender.png Binary files differdeleted file mode 100644 index 669378b..0000000 --- a/assets/blocks/defense/mender.png +++ /dev/null diff --git a/assets/blocks/defense/overdrive-dome.png b/assets/blocks/defense/overdrive-dome.png Binary files differdeleted file mode 100644 index c52221e..0000000 --- a/assets/blocks/defense/overdrive-dome.png +++ /dev/null diff --git a/assets/blocks/defense/overdrive-projector.png b/assets/blocks/defense/overdrive-projector.png Binary files differdeleted file mode 100644 index 55fb163..0000000 --- a/assets/blocks/defense/overdrive-projector.png +++ /dev/null diff --git a/assets/blocks/defense/regen-projector.png b/assets/blocks/defense/regen-projector.png Binary files differdeleted file mode 100644 index 7bc0fd4..0000000 --- a/assets/blocks/defense/regen-projector.png +++ /dev/null diff --git a/assets/blocks/defense/shield-projector.png b/assets/blocks/defense/shield-projector.png Binary files differdeleted file mode 100644 index 43717ca..0000000 --- a/assets/blocks/defense/shield-projector.png +++ /dev/null diff --git a/assets/blocks/defense/shock-mine-team-top.png b/assets/blocks/defense/shock-mine-team-top.png Binary files differdeleted file mode 100644 index 4ee60bc..0000000 --- a/assets/blocks/defense/shock-mine-team-top.png +++ /dev/null diff --git a/assets/blocks/defense/shockwave-tower.png b/assets/blocks/defense/shockwave-tower.png Binary files differdeleted file mode 100644 index f6780d8..0000000 --- a/assets/blocks/defense/shockwave-tower.png +++ /dev/null diff --git a/assets/blocks/distribution/bridge-arrow.png b/assets/blocks/distribution/bridge-arrow.png Binary files differdeleted file mode 100644 index e6c8859..0000000 --- a/assets/blocks/distribution/bridge-arrow.png +++ /dev/null diff --git a/assets/blocks/distribution/bridge-conveyor-arrow.png b/assets/blocks/distribution/bridge-conveyor-arrow.png Binary files differdeleted file mode 100644 index b8b62bc..0000000 --- a/assets/blocks/distribution/bridge-conveyor-arrow.png +++ /dev/null diff --git a/assets/blocks/distribution/bridge-conveyor-bridge.png b/assets/blocks/distribution/bridge-conveyor-bridge.png Binary files differdeleted file mode 100644 index 947e48d..0000000 --- a/assets/blocks/distribution/bridge-conveyor-bridge.png +++ /dev/null diff --git a/assets/blocks/distribution/bridge-conveyor-end.png b/assets/blocks/distribution/bridge-conveyor-end.png Binary files differdeleted file mode 100644 index 48d3f85..0000000 --- a/assets/blocks/distribution/bridge-conveyor-end.png +++ /dev/null diff --git a/assets/blocks/distribution/bridge-conveyor.png b/assets/blocks/distribution/bridge-conveyor.png Binary files differdeleted file mode 100644 index 608ce88..0000000 --- a/assets/blocks/distribution/bridge-conveyor.png +++ /dev/null diff --git a/assets/blocks/distribution/center.png b/assets/blocks/distribution/center.png Binary files differdeleted file mode 100644 index 19def6b..0000000 --- a/assets/blocks/distribution/center.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png Binary files differdeleted file mode 100644 index 9becfdf..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png Binary files differdeleted file mode 100644 index 4685ab6..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png Binary files differdeleted file mode 100644 index f10b176..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png Binary files differdeleted file mode 100644 index 9c002ed..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png Binary files differdeleted file mode 100644 index 25835e4..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png Binary files differdeleted file mode 100644 index 21ed583..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png Binary files differdeleted file mode 100644 index f7c2705..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png Binary files differdeleted file mode 100644 index c31f105..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png Binary files differdeleted file mode 100644 index be087fa..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png Binary files differdeleted file mode 100644 index 5c7a30a..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png Binary files differdeleted file mode 100644 index 32bf421..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png Binary files differdeleted file mode 100644 index f2c6105..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png Binary files differdeleted file mode 100644 index 04e8329..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png Binary files differdeleted file mode 100644 index 72eba5c..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png Binary files differdeleted file mode 100644 index def3ab3..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png Binary files differdeleted file mode 100644 index efc9937..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png Binary files differdeleted file mode 100644 index 7a70978..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png Binary files differdeleted file mode 100644 index b491de9..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png Binary files differdeleted file mode 100644 index 5e846e8..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png Binary files differdeleted file mode 100644 index a5692f9..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png Binary files differdeleted file mode 100644 index 7754791..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png Binary files differdeleted file mode 100644 index 7b72bf6..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png Binary files differdeleted file mode 100644 index ce0d878..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png b/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png Binary files differdeleted file mode 100644 index 741bfdb..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png b/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png Binary files differdeleted file mode 100644 index d4893ef..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png b/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png Binary files differdeleted file mode 100644 index e0539ef..0000000 --- a/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-0-0.png b/assets/blocks/distribution/conveyors/conveyor-0-0.png Binary files differdeleted file mode 100644 index 4de81c8..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-0-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-0-1.png b/assets/blocks/distribution/conveyors/conveyor-0-1.png Binary files differdeleted file mode 100644 index e83ade5..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-0-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-0-2.png b/assets/blocks/distribution/conveyors/conveyor-0-2.png Binary files differdeleted file mode 100644 index 3855016..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-0-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-0-3.png b/assets/blocks/distribution/conveyors/conveyor-0-3.png Binary files differdeleted file mode 100644 index 5d0b247..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-0-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-1-0-h.png b/assets/blocks/distribution/conveyors/conveyor-1-0-h.png Binary files differdeleted file mode 100644 index 75b477d..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-1-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-1-0.png b/assets/blocks/distribution/conveyors/conveyor-1-0.png Binary files differdeleted file mode 100644 index a8cfa5d..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-1-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-1-1-h.png b/assets/blocks/distribution/conveyors/conveyor-1-1-h.png Binary files differdeleted file mode 100644 index 8e6eb5f..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-1-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-1-1-v.png b/assets/blocks/distribution/conveyors/conveyor-1-1-v.png Binary files differdeleted file mode 100644 index d78d194..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-1-1-v.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-1-1.png b/assets/blocks/distribution/conveyors/conveyor-1-1.png Binary files differdeleted file mode 100644 index 90220b5..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-1-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-1-2.png b/assets/blocks/distribution/conveyors/conveyor-1-2.png Binary files differdeleted file mode 100644 index 923223b..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-1-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-0-h.png b/assets/blocks/distribution/conveyors/conveyor-2-0-h.png Binary files differdeleted file mode 100644 index 6649a28..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-0-v.png b/assets/blocks/distribution/conveyors/conveyor-2-0-v.png Binary files differdeleted file mode 100644 index 4a266b0..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-0-v.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-0.png b/assets/blocks/distribution/conveyors/conveyor-2-0.png Binary files differdeleted file mode 100644 index 5d9eb5e..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-1-h.png b/assets/blocks/distribution/conveyors/conveyor-2-1-h.png Binary files differdeleted file mode 100644 index 7e8d16f..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-1.png b/assets/blocks/distribution/conveyors/conveyor-2-1.png Binary files differdeleted file mode 100644 index 798f6a6..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-2.png b/assets/blocks/distribution/conveyors/conveyor-2-2.png Binary files differdeleted file mode 100644 index 14a9d78..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-3-h.png b/assets/blocks/distribution/conveyors/conveyor-2-3-h.png Binary files differdeleted file mode 100644 index 07176a5..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-3-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-2-3.png b/assets/blocks/distribution/conveyors/conveyor-2-3.png Binary files differdeleted file mode 100644 index abcbebc..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-2-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-3-0-h.png b/assets/blocks/distribution/conveyors/conveyor-3-0-h.png Binary files differdeleted file mode 100644 index 0ca52ba..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-3-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-3-0.png b/assets/blocks/distribution/conveyors/conveyor-3-0.png Binary files differdeleted file mode 100644 index 6e38bc2..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-3-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-3-1.png b/assets/blocks/distribution/conveyors/conveyor-3-1.png Binary files differdeleted file mode 100644 index ebfd3ee..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-3-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-3-3.png b/assets/blocks/distribution/conveyors/conveyor-3-3.png Binary files differdeleted file mode 100644 index 4abdb24..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-3-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-4-1.png b/assets/blocks/distribution/conveyors/conveyor-4-1.png Binary files differdeleted file mode 100644 index cf0ba78..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-4-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/conveyor-4-3.png b/assets/blocks/distribution/conveyors/conveyor-4-3.png Binary files differdeleted file mode 100644 index 84cbd2d..0000000 --- a/assets/blocks/distribution/conveyors/conveyor-4-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png Binary files differdeleted file mode 100644 index bb2b4b2..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png Binary files differdeleted file mode 100644 index bd17828..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png Binary files differdeleted file mode 100644 index 3de01c0..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png Binary files differdeleted file mode 100644 index 5073271..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png Binary files differdeleted file mode 100644 index 749b079..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png Binary files differdeleted file mode 100644 index bc8ed5e..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png Binary files differdeleted file mode 100644 index 368e08f..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png Binary files differdeleted file mode 100644 index d17a367..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png Binary files differdeleted file mode 100644 index 3775277..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png Binary files differdeleted file mode 100644 index fd4c2fb..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png Binary files differdeleted file mode 100644 index f5ba433..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png Binary files differdeleted file mode 100644 index 39379a8..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png Binary files differdeleted file mode 100644 index 546bd31..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png Binary files differdeleted file mode 100644 index 09f7114..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png Binary files differdeleted file mode 100644 index 24525f2..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png Binary files differdeleted file mode 100644 index 2ef4cdf..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png Binary files differdeleted file mode 100644 index 4877112..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png b/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png Binary files differdeleted file mode 100644 index e2b9517..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png +++ /dev/null diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png b/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png Binary files differdeleted file mode 100644 index 2a1ca44..0000000 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-0-0.png b/assets/blocks/distribution/ducts/armored-duct-0-0.png Binary files differdeleted file mode 100644 index 7cdf0be..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-0-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-0-1.png b/assets/blocks/distribution/ducts/armored-duct-0-1.png Binary files differdeleted file mode 100644 index 9a5cd4d..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-0-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-0-2.png b/assets/blocks/distribution/ducts/armored-duct-0-2.png Binary files differdeleted file mode 100644 index 793a84b..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-0-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-0-3.png b/assets/blocks/distribution/ducts/armored-duct-0-3.png Binary files differdeleted file mode 100644 index 94aca00..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-0-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-0-h.png b/assets/blocks/distribution/ducts/armored-duct-1-0-h.png Binary files differdeleted file mode 100644 index d9a6ca8..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-0.png b/assets/blocks/distribution/ducts/armored-duct-1-0.png Binary files differdeleted file mode 100644 index 4c02046..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-1-h.png b/assets/blocks/distribution/ducts/armored-duct-1-1-h.png Binary files differdeleted file mode 100644 index 220ea63..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-1-v.png b/assets/blocks/distribution/ducts/armored-duct-1-1-v.png Binary files differdeleted file mode 100644 index 107e5e1..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-1-v.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-1.png b/assets/blocks/distribution/ducts/armored-duct-1-1.png Binary files differdeleted file mode 100644 index ba68180..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-2.png b/assets/blocks/distribution/ducts/armored-duct-1-2.png Binary files differdeleted file mode 100644 index 102b6c4..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-1-3.png b/assets/blocks/distribution/ducts/armored-duct-1-3.png Binary files differdeleted file mode 100644 index d5c7688..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-1-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-0-h.png b/assets/blocks/distribution/ducts/armored-duct-2-0-h.png Binary files differdeleted file mode 100644 index e2b75b7..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-0-v.png b/assets/blocks/distribution/ducts/armored-duct-2-0-v.png Binary files differdeleted file mode 100644 index 51690bf..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-0-v.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-0.png b/assets/blocks/distribution/ducts/armored-duct-2-0.png Binary files differdeleted file mode 100644 index fd0c731..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-1-h.png b/assets/blocks/distribution/ducts/armored-duct-2-1-h.png Binary files differdeleted file mode 100644 index 209c984..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-1.png b/assets/blocks/distribution/ducts/armored-duct-2-1.png Binary files differdeleted file mode 100644 index ab5b160..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-2.png b/assets/blocks/distribution/ducts/armored-duct-2-2.png Binary files differdeleted file mode 100644 index 3a1d156..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-3-h.png b/assets/blocks/distribution/ducts/armored-duct-2-3-h.png Binary files differdeleted file mode 100644 index 018ebc1..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-3-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-2-3.png b/assets/blocks/distribution/ducts/armored-duct-2-3.png Binary files differdeleted file mode 100644 index ee904a0..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-2-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-3-0-h.png b/assets/blocks/distribution/ducts/armored-duct-3-0-h.png Binary files differdeleted file mode 100644 index 0a384b3..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-3-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-3-0.png b/assets/blocks/distribution/ducts/armored-duct-3-0.png Binary files differdeleted file mode 100644 index 9371f1c..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-3-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-3-1.png b/assets/blocks/distribution/ducts/armored-duct-3-1.png Binary files differdeleted file mode 100644 index 2a82680..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-3-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-3-3.png b/assets/blocks/distribution/ducts/armored-duct-3-3.png Binary files differdeleted file mode 100644 index d4ef678..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-3-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-4-1.png b/assets/blocks/distribution/ducts/armored-duct-4-1.png Binary files differdeleted file mode 100644 index 44f767f..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-4-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/armored-duct-4-3.png b/assets/blocks/distribution/ducts/armored-duct-4-3.png Binary files differdeleted file mode 100644 index 4024c61..0000000 --- a/assets/blocks/distribution/ducts/armored-duct-4-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-0-0.png b/assets/blocks/distribution/ducts/duct-0-0.png Binary files differdeleted file mode 100644 index 3cec9b5..0000000 --- a/assets/blocks/distribution/ducts/duct-0-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-0-1.png b/assets/blocks/distribution/ducts/duct-0-1.png Binary files differdeleted file mode 100644 index 2db5439..0000000 --- a/assets/blocks/distribution/ducts/duct-0-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-0-2.png b/assets/blocks/distribution/ducts/duct-0-2.png Binary files differdeleted file mode 100644 index 6dac9e5..0000000 --- a/assets/blocks/distribution/ducts/duct-0-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-0-3.png b/assets/blocks/distribution/ducts/duct-0-3.png Binary files differdeleted file mode 100644 index e25d7bb..0000000 --- a/assets/blocks/distribution/ducts/duct-0-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-0-h.png b/assets/blocks/distribution/ducts/duct-1-0-h.png Binary files differdeleted file mode 100644 index 11e4482..0000000 --- a/assets/blocks/distribution/ducts/duct-1-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-0.png b/assets/blocks/distribution/ducts/duct-1-0.png Binary files differdeleted file mode 100644 index 6adcdeb..0000000 --- a/assets/blocks/distribution/ducts/duct-1-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-1-h.png b/assets/blocks/distribution/ducts/duct-1-1-h.png Binary files differdeleted file mode 100644 index 1461ef0..0000000 --- a/assets/blocks/distribution/ducts/duct-1-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-1-v.png b/assets/blocks/distribution/ducts/duct-1-1-v.png Binary files differdeleted file mode 100644 index 50bdb4f..0000000 --- a/assets/blocks/distribution/ducts/duct-1-1-v.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-1.png b/assets/blocks/distribution/ducts/duct-1-1.png Binary files differdeleted file mode 100644 index 093189f..0000000 --- a/assets/blocks/distribution/ducts/duct-1-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-2.png b/assets/blocks/distribution/ducts/duct-1-2.png Binary files differdeleted file mode 100644 index 5b7aae2..0000000 --- a/assets/blocks/distribution/ducts/duct-1-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-1-3.png b/assets/blocks/distribution/ducts/duct-1-3.png Binary files differdeleted file mode 100644 index cb72859..0000000 --- a/assets/blocks/distribution/ducts/duct-1-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-0-h.png b/assets/blocks/distribution/ducts/duct-2-0-h.png Binary files differdeleted file mode 100644 index 4ddb3d1..0000000 --- a/assets/blocks/distribution/ducts/duct-2-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-0-v.png b/assets/blocks/distribution/ducts/duct-2-0-v.png Binary files differdeleted file mode 100644 index f841ec1..0000000 --- a/assets/blocks/distribution/ducts/duct-2-0-v.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-0.png b/assets/blocks/distribution/ducts/duct-2-0.png Binary files differdeleted file mode 100644 index c0afcfb..0000000 --- a/assets/blocks/distribution/ducts/duct-2-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-1-h.png b/assets/blocks/distribution/ducts/duct-2-1-h.png Binary files differdeleted file mode 100644 index b40e77e..0000000 --- a/assets/blocks/distribution/ducts/duct-2-1-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-1.png b/assets/blocks/distribution/ducts/duct-2-1.png Binary files differdeleted file mode 100644 index 09eb774..0000000 --- a/assets/blocks/distribution/ducts/duct-2-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-2.png b/assets/blocks/distribution/ducts/duct-2-2.png Binary files differdeleted file mode 100644 index 4da21f8..0000000 --- a/assets/blocks/distribution/ducts/duct-2-2.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-3-h.png b/assets/blocks/distribution/ducts/duct-2-3-h.png Binary files differdeleted file mode 100644 index 1506bac..0000000 --- a/assets/blocks/distribution/ducts/duct-2-3-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-2-3.png b/assets/blocks/distribution/ducts/duct-2-3.png Binary files differdeleted file mode 100644 index 0dd6aa3..0000000 --- a/assets/blocks/distribution/ducts/duct-2-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-3-0-h.png b/assets/blocks/distribution/ducts/duct-3-0-h.png Binary files differdeleted file mode 100644 index 4b51f6d..0000000 --- a/assets/blocks/distribution/ducts/duct-3-0-h.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-3-0.png b/assets/blocks/distribution/ducts/duct-3-0.png Binary files differdeleted file mode 100644 index d1a331c..0000000 --- a/assets/blocks/distribution/ducts/duct-3-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-3-1.png b/assets/blocks/distribution/ducts/duct-3-1.png Binary files differdeleted file mode 100644 index 6b20424..0000000 --- a/assets/blocks/distribution/ducts/duct-3-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-3-3.png b/assets/blocks/distribution/ducts/duct-3-3.png Binary files differdeleted file mode 100644 index e457a4c..0000000 --- a/assets/blocks/distribution/ducts/duct-3-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-4-0.png b/assets/blocks/distribution/ducts/duct-4-0.png Binary files differdeleted file mode 100644 index d490c36..0000000 --- a/assets/blocks/distribution/ducts/duct-4-0.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-4-1.png b/assets/blocks/distribution/ducts/duct-4-1.png Binary files differdeleted file mode 100644 index ea57f4a..0000000 --- a/assets/blocks/distribution/ducts/duct-4-1.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-4-3.png b/assets/blocks/distribution/ducts/duct-4-3.png Binary files differdeleted file mode 100644 index 50eef92..0000000 --- a/assets/blocks/distribution/ducts/duct-4-3.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-base.png b/assets/blocks/distribution/ducts/duct-base.png Binary files differdeleted file mode 100644 index 6aa0df3..0000000 --- a/assets/blocks/distribution/ducts/duct-base.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bridge-arrow.png b/assets/blocks/distribution/ducts/duct-bridge-arrow.png Binary files differdeleted file mode 100644 index a00c8e9..0000000 --- a/assets/blocks/distribution/ducts/duct-bridge-arrow.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png b/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png Binary files differdeleted file mode 100644 index 1625679..0000000 --- a/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bridge-bridge.png b/assets/blocks/distribution/ducts/duct-bridge-bridge.png Binary files differdeleted file mode 100644 index 533f3c3..0000000 --- a/assets/blocks/distribution/ducts/duct-bridge-bridge.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bridge-dir.png b/assets/blocks/distribution/ducts/duct-bridge-dir.png Binary files differdeleted file mode 100644 index edca5f1..0000000 --- a/assets/blocks/distribution/ducts/duct-bridge-dir.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-bridge.png b/assets/blocks/distribution/ducts/duct-bridge.png Binary files differdeleted file mode 100644 index 2448bc8..0000000 --- a/assets/blocks/distribution/ducts/duct-bridge.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-router.png b/assets/blocks/distribution/ducts/duct-router.png Binary files differdeleted file mode 100644 index 2448bc8..0000000 --- a/assets/blocks/distribution/ducts/duct-router.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-unloader-top.png b/assets/blocks/distribution/ducts/duct-unloader-top.png Binary files differdeleted file mode 100644 index 781bea4..0000000 --- a/assets/blocks/distribution/ducts/duct-unloader-top.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/duct-unloader.png b/assets/blocks/distribution/ducts/duct-unloader.png Binary files differdeleted file mode 100644 index b9ba79c..0000000 --- a/assets/blocks/distribution/ducts/duct-unloader.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/surge-router.png b/assets/blocks/distribution/ducts/surge-router.png Binary files differdeleted file mode 100644 index c1cf722..0000000 --- a/assets/blocks/distribution/ducts/surge-router.png +++ /dev/null diff --git a/assets/blocks/distribution/ducts/top.png b/assets/blocks/distribution/ducts/top.png Binary files differdeleted file mode 100644 index c7f9cd6..0000000 --- a/assets/blocks/distribution/ducts/top.png +++ /dev/null diff --git a/assets/blocks/distribution/inverted-sorter.png b/assets/blocks/distribution/inverted-sorter.png Binary files differdeleted file mode 100644 index 2a75d17..0000000 --- a/assets/blocks/distribution/inverted-sorter.png +++ /dev/null diff --git a/assets/blocks/distribution/item-source.png b/assets/blocks/distribution/item-source.png Binary files differdeleted file mode 100644 index d38ce01..0000000 --- a/assets/blocks/distribution/item-source.png +++ /dev/null diff --git a/assets/blocks/distribution/item-void.png b/assets/blocks/distribution/item-void.png Binary files differdeleted file mode 100644 index 0ef9612..0000000 --- a/assets/blocks/distribution/item-void.png +++ /dev/null diff --git a/assets/blocks/distribution/mass-driver-base.png b/assets/blocks/distribution/mass-driver-base.png Binary files differdeleted file mode 100644 index 23ad8cc..0000000 --- a/assets/blocks/distribution/mass-driver-base.png +++ /dev/null diff --git a/assets/blocks/distribution/mass-driver.png b/assets/blocks/distribution/mass-driver.png Binary files differdeleted file mode 100644 index 6c65bf1..0000000 --- a/assets/blocks/distribution/mass-driver.png +++ /dev/null diff --git a/assets/blocks/distribution/overflow-gate.png b/assets/blocks/distribution/overflow-gate.png Binary files differdeleted file mode 100644 index 534859f..0000000 --- a/assets/blocks/distribution/overflow-gate.png +++ /dev/null diff --git a/assets/blocks/distribution/phase-conveyor-arrow.png b/assets/blocks/distribution/phase-conveyor-arrow.png Binary files differdeleted file mode 100644 index 22198e8..0000000 --- a/assets/blocks/distribution/phase-conveyor-arrow.png +++ /dev/null diff --git a/assets/blocks/distribution/phase-conveyor-bridge.png b/assets/blocks/distribution/phase-conveyor-bridge.png Binary files differdeleted file mode 100644 index 176c3fc..0000000 --- a/assets/blocks/distribution/phase-conveyor-bridge.png +++ /dev/null diff --git a/assets/blocks/distribution/phase-conveyor-end.png b/assets/blocks/distribution/phase-conveyor-end.png Binary files differdeleted file mode 100644 index 090155a..0000000 --- a/assets/blocks/distribution/phase-conveyor-end.png +++ /dev/null diff --git a/assets/blocks/distribution/phase-conveyor.png b/assets/blocks/distribution/phase-conveyor.png Binary files differdeleted file mode 100644 index 6911b37..0000000 --- a/assets/blocks/distribution/phase-conveyor.png +++ /dev/null diff --git a/assets/blocks/distribution/sorter.png b/assets/blocks/distribution/sorter.png Binary files differdeleted file mode 100644 index 9345206..0000000 --- a/assets/blocks/distribution/sorter.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png Binary files differdeleted file mode 100644 index 2dc44db..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png Binary files differdeleted file mode 100644 index e6d57f6..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png Binary files differdeleted file mode 100644 index 5c0272b..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png Binary files differdeleted file mode 100644 index 7057c6c..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png Binary files differdeleted file mode 100644 index cc9890d..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png Binary files differdeleted file mode 100644 index 0abdfc5..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png b/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png Binary files differdeleted file mode 100644 index 34924be..0000000 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png Binary files differdeleted file mode 100644 index 67e479f..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png Binary files differdeleted file mode 100644 index 3f3cf2d..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png Binary files differdeleted file mode 100644 index 5ef6959..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png Binary files differdeleted file mode 100644 index ccc72e5..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png Binary files differdeleted file mode 100644 index 05d6385..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png Binary files differdeleted file mode 100644 index 8ae4559..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png +++ /dev/null diff --git a/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png b/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png Binary files differdeleted file mode 100644 index 3e82595..0000000 --- a/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png +++ /dev/null diff --git a/assets/blocks/distribution/underflow-gate.png b/assets/blocks/distribution/underflow-gate.png Binary files differdeleted file mode 100644 index 92b6f26..0000000 --- a/assets/blocks/distribution/underflow-gate.png +++ /dev/null diff --git a/assets/blocks/distribution/unit-cargo-unload-point-top.png b/assets/blocks/distribution/unit-cargo-unload-point-top.png Binary files differdeleted file mode 100644 index f447882..0000000 --- a/assets/blocks/distribution/unit-cargo-unload-point-top.png +++ /dev/null diff --git a/assets/blocks/distribution/unit-cargo-unload-point.png b/assets/blocks/distribution/unit-cargo-unload-point.png Binary files differdeleted file mode 100644 index 24cae6c..0000000 --- a/assets/blocks/distribution/unit-cargo-unload-point.png +++ /dev/null diff --git a/assets/blocks/drills/blast-drill.png b/assets/blocks/drills/blast-drill.png Binary files differdeleted file mode 100644 index 13ff22b..0000000 --- a/assets/blocks/drills/blast-drill.png +++ /dev/null diff --git a/assets/blocks/drills/cliff-crusher-rotator.png b/assets/blocks/drills/cliff-crusher-rotator.png Binary files differdeleted file mode 100644 index 6db2c8b..0000000 --- a/assets/blocks/drills/cliff-crusher-rotator.png +++ /dev/null diff --git a/assets/blocks/drills/cliff-crusher.png b/assets/blocks/drills/cliff-crusher.png Binary files differdeleted file mode 100644 index 3c82a82..0000000 --- a/assets/blocks/drills/cliff-crusher.png +++ /dev/null diff --git a/assets/blocks/drills/eruption-drill.png b/assets/blocks/drills/eruption-drill.png Binary files differdeleted file mode 100644 index 0b43aa7..0000000 --- a/assets/blocks/drills/eruption-drill.png +++ /dev/null diff --git a/assets/blocks/drills/impact-drill.png b/assets/blocks/drills/impact-drill.png Binary files differdeleted file mode 100644 index 62be316..0000000 --- a/assets/blocks/drills/impact-drill.png +++ /dev/null diff --git a/assets/blocks/drills/large-plasma-bore-top.png b/assets/blocks/drills/large-plasma-bore-top.png Binary files differdeleted file mode 100644 index 6bc63a7..0000000 --- a/assets/blocks/drills/large-plasma-bore-top.png +++ /dev/null diff --git a/assets/blocks/drills/large-plasma-bore.png b/assets/blocks/drills/large-plasma-bore.png Binary files differdeleted file mode 100644 index 704a773..0000000 --- a/assets/blocks/drills/large-plasma-bore.png +++ /dev/null diff --git a/assets/blocks/drills/laser-drill.png b/assets/blocks/drills/laser-drill.png Binary files differdeleted file mode 100644 index b0f94cb..0000000 --- a/assets/blocks/drills/laser-drill.png +++ /dev/null diff --git a/assets/blocks/drills/mechanical-drill.png b/assets/blocks/drills/mechanical-drill.png Binary files differdeleted file mode 100644 index 354b9b0..0000000 --- a/assets/blocks/drills/mechanical-drill.png +++ /dev/null diff --git a/assets/blocks/drills/oil-extractor.png b/assets/blocks/drills/oil-extractor.png Binary files differdeleted file mode 100644 index 18e84d7..0000000 --- a/assets/blocks/drills/oil-extractor.png +++ /dev/null diff --git a/assets/blocks/drills/plasma-bore-top.png b/assets/blocks/drills/plasma-bore-top.png Binary files differdeleted file mode 100644 index c6cffe7..0000000 --- a/assets/blocks/drills/plasma-bore-top.png +++ /dev/null diff --git a/assets/blocks/drills/plasma-bore.png b/assets/blocks/drills/plasma-bore.png Binary files differdeleted file mode 100644 index 3fb5950..0000000 --- a/assets/blocks/drills/plasma-bore.png +++ /dev/null diff --git a/assets/blocks/drills/pneumatic-drill.png b/assets/blocks/drills/pneumatic-drill.png Binary files differdeleted file mode 100644 index 3bbada9..0000000 --- a/assets/blocks/drills/pneumatic-drill.png +++ /dev/null diff --git a/assets/blocks/drills/vent-condenser.png b/assets/blocks/drills/vent-condenser.png Binary files differdeleted file mode 100644 index ed715bd..0000000 --- a/assets/blocks/drills/vent-condenser.png +++ /dev/null diff --git a/assets/blocks/drills/water-extractor.png b/assets/blocks/drills/water-extractor.png Binary files differdeleted file mode 100644 index 3579707..0000000 --- a/assets/blocks/drills/water-extractor.png +++ /dev/null diff --git a/assets/blocks/environment/arkycite-floor.png b/assets/blocks/environment/arkycite-floor.png Binary files differdeleted file mode 100644 index 5ae0096..0000000 --- a/assets/blocks/environment/arkycite-floor.png +++ /dev/null diff --git a/assets/blocks/environment/arkyic-boulder.png b/assets/blocks/environment/arkyic-boulder.png Binary files differdeleted file mode 100644 index de89b97..0000000 --- a/assets/blocks/environment/arkyic-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/arkyic-stone.png b/assets/blocks/environment/arkyic-stone.png Binary files differdeleted file mode 100644 index 5f396a8..0000000 --- a/assets/blocks/environment/arkyic-stone.png +++ /dev/null diff --git a/assets/blocks/environment/arkyic-vent.png b/assets/blocks/environment/arkyic-vent.png Binary files differdeleted file mode 100644 index f67cbe3..0000000 --- a/assets/blocks/environment/arkyic-vent.png +++ /dev/null diff --git a/assets/blocks/environment/arkyic-wall-large.png b/assets/blocks/environment/arkyic-wall-large.png Binary files differdeleted file mode 100644 index 6e1f48a..0000000 --- a/assets/blocks/environment/arkyic-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/arkyic-wall.png b/assets/blocks/environment/arkyic-wall.png Binary files differdeleted file mode 100644 index 2977b20..0000000 --- a/assets/blocks/environment/arkyic-wall.png +++ /dev/null diff --git a/assets/blocks/environment/basalt-boulder.png b/assets/blocks/environment/basalt-boulder.png Binary files differdeleted file mode 100644 index 6f4ce91..0000000 --- a/assets/blocks/environment/basalt-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/basalt.png b/assets/blocks/environment/basalt.png Binary files differdeleted file mode 100644 index 93ee858..0000000 --- a/assets/blocks/environment/basalt.png +++ /dev/null diff --git a/assets/blocks/environment/beryllic-boulder.png b/assets/blocks/environment/beryllic-boulder.png Binary files differdeleted file mode 100644 index a039a47..0000000 --- a/assets/blocks/environment/beryllic-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/beryllic-stone-wall-large.png b/assets/blocks/environment/beryllic-stone-wall-large.png Binary files differdeleted file mode 100644 index 4f6eccf..0000000 --- a/assets/blocks/environment/beryllic-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/beryllic-stone-wall.png b/assets/blocks/environment/beryllic-stone-wall.png Binary files differdeleted file mode 100644 index 081d262..0000000 --- a/assets/blocks/environment/beryllic-stone-wall.png +++ /dev/null diff --git a/assets/blocks/environment/beryllic-stone.png b/assets/blocks/environment/beryllic-stone.png Binary files differdeleted file mode 100644 index 6a6720a..0000000 --- a/assets/blocks/environment/beryllic-stone.png +++ /dev/null diff --git a/assets/blocks/environment/bluemat.png b/assets/blocks/environment/bluemat.png Binary files differdeleted file mode 100644 index e15530a..0000000 --- a/assets/blocks/environment/bluemat.png +++ /dev/null diff --git a/assets/blocks/environment/boulder.png b/assets/blocks/environment/boulder.png Binary files differdeleted file mode 100644 index a9bf280..0000000 --- a/assets/blocks/environment/boulder.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-boulder.png b/assets/blocks/environment/carbon-boulder.png Binary files differdeleted file mode 100644 index 48c8efc..0000000 --- a/assets/blocks/environment/carbon-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-stone.png b/assets/blocks/environment/carbon-stone.png Binary files differdeleted file mode 100644 index 76bde92..0000000 --- a/assets/blocks/environment/carbon-stone.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-vent.png b/assets/blocks/environment/carbon-vent.png Binary files differdeleted file mode 100644 index d3e2570..0000000 --- a/assets/blocks/environment/carbon-vent.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-wall-large.png b/assets/blocks/environment/carbon-wall-large.png Binary files differdeleted file mode 100644 index 653ae35..0000000 --- a/assets/blocks/environment/carbon-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/carbon-wall.png b/assets/blocks/environment/carbon-wall.png Binary files differdeleted file mode 100644 index 92a5e81..0000000 --- a/assets/blocks/environment/carbon-wall.png +++ /dev/null diff --git a/assets/blocks/environment/char.png b/assets/blocks/environment/char.png Binary files differdeleted file mode 100644 index c6340ed..0000000 --- a/assets/blocks/environment/char.png +++ /dev/null diff --git a/assets/blocks/environment/core-zone.png b/assets/blocks/environment/core-zone.png Binary files differdeleted file mode 100644 index 0a7bf40..0000000 --- a/assets/blocks/environment/core-zone.png +++ /dev/null diff --git a/assets/blocks/environment/crater-stone.png b/assets/blocks/environment/crater-stone.png Binary files differdeleted file mode 100644 index 9cfc92f..0000000 --- a/assets/blocks/environment/crater-stone.png +++ /dev/null diff --git a/assets/blocks/environment/crystal-blocks.png b/assets/blocks/environment/crystal-blocks.png Binary files differdeleted file mode 100644 index 0acc3d3..0000000 --- a/assets/blocks/environment/crystal-blocks.png +++ /dev/null diff --git a/assets/blocks/environment/crystal-cluster.png b/assets/blocks/environment/crystal-cluster.png Binary files differdeleted file mode 100644 index b3454ef..0000000 --- a/assets/blocks/environment/crystal-cluster.png +++ /dev/null diff --git a/assets/blocks/environment/crystal-orbs.png b/assets/blocks/environment/crystal-orbs.png Binary files differdeleted file mode 100644 index 4055f3b..0000000 --- a/assets/blocks/environment/crystal-orbs.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-boulder.png b/assets/blocks/environment/crystalline-boulder.png Binary files differdeleted file mode 100644 index 462dccd..0000000 --- a/assets/blocks/environment/crystalline-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-stone-wall-large.png b/assets/blocks/environment/crystalline-stone-wall-large.png Binary files differdeleted file mode 100644 index 17962ee..0000000 --- a/assets/blocks/environment/crystalline-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-stone-wall.png b/assets/blocks/environment/crystalline-stone-wall.png Binary files differdeleted file mode 100644 index 427bf7f..0000000 --- a/assets/blocks/environment/crystalline-stone-wall.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-stone.png b/assets/blocks/environment/crystalline-stone.png Binary files differdeleted file mode 100644 index 01fe740..0000000 --- a/assets/blocks/environment/crystalline-stone.png +++ /dev/null diff --git a/assets/blocks/environment/crystalline-vent.png b/assets/blocks/environment/crystalline-vent.png Binary files differdeleted file mode 100644 index 2de8864..0000000 --- a/assets/blocks/environment/crystalline-vent.png +++ /dev/null diff --git a/assets/blocks/environment/dacite-boulder.png b/assets/blocks/environment/dacite-boulder.png Binary files differdeleted file mode 100644 index 1a550b2..0000000 --- a/assets/blocks/environment/dacite-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/dacite-wall-large.png b/assets/blocks/environment/dacite-wall-large.png Binary files differdeleted file mode 100644 index a1d94c5..0000000 --- a/assets/blocks/environment/dacite-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/dacite-wall.png b/assets/blocks/environment/dacite-wall.png Binary files differdeleted file mode 100644 index 23ef79d..0000000 --- a/assets/blocks/environment/dacite-wall.png +++ /dev/null diff --git a/assets/blocks/environment/dacite.png b/assets/blocks/environment/dacite.png Binary files differdeleted file mode 100644 index 470473a..0000000 --- a/assets/blocks/environment/dacite.png +++ /dev/null diff --git a/assets/blocks/environment/dark-metal-large.png b/assets/blocks/environment/dark-metal-large.png Binary files differdeleted file mode 100644 index aba348c..0000000 --- a/assets/blocks/environment/dark-metal-large.png +++ /dev/null diff --git a/assets/blocks/environment/dark-metal.png b/assets/blocks/environment/dark-metal.png Binary files differdeleted file mode 100644 index 2adeae1..0000000 --- a/assets/blocks/environment/dark-metal.png +++ /dev/null diff --git a/assets/blocks/environment/dark-panel-1.png b/assets/blocks/environment/dark-panel-1.png Binary files differdeleted file mode 100644 index 04e6b15..0000000 --- a/assets/blocks/environment/dark-panel-1.png +++ /dev/null diff --git a/assets/blocks/environment/dark-panel-2.png b/assets/blocks/environment/dark-panel-2.png Binary files differdeleted file mode 100644 index adbc44f..0000000 --- a/assets/blocks/environment/dark-panel-2.png +++ /dev/null diff --git a/assets/blocks/environment/dark-panel-3.png b/assets/blocks/environment/dark-panel-3.png Binary files differdeleted file mode 100644 index 7a3c38e..0000000 --- a/assets/blocks/environment/dark-panel-3.png +++ /dev/null diff --git a/assets/blocks/environment/dark-panel-4.png b/assets/blocks/environment/dark-panel-4.png Binary files differdeleted file mode 100644 index 3030229..0000000 --- a/assets/blocks/environment/dark-panel-4.png +++ /dev/null diff --git a/assets/blocks/environment/dark-panel-6.png b/assets/blocks/environment/dark-panel-6.png Binary files differdeleted file mode 100644 index d7d3ba2..0000000 --- a/assets/blocks/environment/dark-panel-6.png +++ /dev/null diff --git a/assets/blocks/environment/darksand-tainted-water.png b/assets/blocks/environment/darksand-tainted-water.png Binary files differdeleted file mode 100644 index 7f74cca..0000000 --- a/assets/blocks/environment/darksand-tainted-water.png +++ /dev/null diff --git a/assets/blocks/environment/darksand-water.png b/assets/blocks/environment/darksand-water.png Binary files differdeleted file mode 100644 index 61c769d..0000000 --- a/assets/blocks/environment/darksand-water.png +++ /dev/null diff --git a/assets/blocks/environment/darksand.png b/assets/blocks/environment/darksand.png Binary files differdeleted file mode 100644 index ef61797..0000000 --- a/assets/blocks/environment/darksand.png +++ /dev/null diff --git a/assets/blocks/environment/deep-tainted-water.png b/assets/blocks/environment/deep-tainted-water.png Binary files differdeleted file mode 100644 index e06ab6a..0000000 --- a/assets/blocks/environment/deep-tainted-water.png +++ /dev/null diff --git a/assets/blocks/environment/deep-water.png b/assets/blocks/environment/deep-water.png Binary files differdeleted file mode 100644 index ff4ee69..0000000 --- a/assets/blocks/environment/deep-water.png +++ /dev/null diff --git a/assets/blocks/environment/dense-red-stone.png b/assets/blocks/environment/dense-red-stone.png Binary files differdeleted file mode 100644 index 40d1694..0000000 --- a/assets/blocks/environment/dense-red-stone.png +++ /dev/null diff --git a/assets/blocks/environment/dirt-wall-large.png b/assets/blocks/environment/dirt-wall-large.png Binary files differdeleted file mode 100644 index 7e5f8f0..0000000 --- a/assets/blocks/environment/dirt-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/dirt.png b/assets/blocks/environment/dirt.png Binary files differdeleted file mode 100644 index 1f2b788..0000000 --- a/assets/blocks/environment/dirt.png +++ /dev/null diff --git a/assets/blocks/environment/dune-wall-large.png b/assets/blocks/environment/dune-wall-large.png Binary files differdeleted file mode 100644 index 737b09d..0000000 --- a/assets/blocks/environment/dune-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/dune-wall.png b/assets/blocks/environment/dune-wall.png Binary files differdeleted file mode 100644 index 22341de..0000000 --- a/assets/blocks/environment/dune-wall.png +++ /dev/null diff --git a/assets/blocks/environment/ferric-boulder.png b/assets/blocks/environment/ferric-boulder.png Binary files differdeleted file mode 100644 index e7221a8..0000000 --- a/assets/blocks/environment/ferric-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/ferric-craters.png b/assets/blocks/environment/ferric-craters.png Binary files differdeleted file mode 100644 index 83155f5..0000000 --- a/assets/blocks/environment/ferric-craters.png +++ /dev/null diff --git a/assets/blocks/environment/ferric-stone-wall-large.png b/assets/blocks/environment/ferric-stone-wall-large.png Binary files differdeleted file mode 100644 index a0bbb83..0000000 --- a/assets/blocks/environment/ferric-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/ferric-stone.png b/assets/blocks/environment/ferric-stone.png Binary files differdeleted file mode 100644 index 2dabf3d..0000000 --- a/assets/blocks/environment/ferric-stone.png +++ /dev/null diff --git a/assets/blocks/environment/graphitic-wall-large.png b/assets/blocks/environment/graphitic-wall-large.png Binary files differdeleted file mode 100644 index 0148959..0000000 --- a/assets/blocks/environment/graphitic-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/graphitic-wall.png b/assets/blocks/environment/graphitic-wall.png Binary files differdeleted file mode 100644 index 0d5bbfa..0000000 --- a/assets/blocks/environment/graphitic-wall.png +++ /dev/null diff --git a/assets/blocks/environment/grass.png b/assets/blocks/environment/grass.png Binary files differdeleted file mode 100644 index 662dc7b..0000000 --- a/assets/blocks/environment/grass.png +++ /dev/null diff --git a/assets/blocks/environment/hotrock.png b/assets/blocks/environment/hotrock.png Binary files differdeleted file mode 100644 index 1aa6bb3..0000000 --- a/assets/blocks/environment/hotrock.png +++ /dev/null diff --git a/assets/blocks/environment/ice-snow.png b/assets/blocks/environment/ice-snow.png Binary files differdeleted file mode 100644 index 3711749..0000000 --- a/assets/blocks/environment/ice-snow.png +++ /dev/null diff --git a/assets/blocks/environment/ice-wall-large.png b/assets/blocks/environment/ice-wall-large.png Binary files differdeleted file mode 100644 index e0ffd14..0000000 --- a/assets/blocks/environment/ice-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/ice-wall.png b/assets/blocks/environment/ice-wall.png Binary files differdeleted file mode 100644 index 3e38dbc..0000000 --- a/assets/blocks/environment/ice-wall.png +++ /dev/null diff --git a/assets/blocks/environment/ice.png b/assets/blocks/environment/ice.png Binary files differdeleted file mode 100644 index 664678d..0000000 --- a/assets/blocks/environment/ice.png +++ /dev/null diff --git a/assets/blocks/environment/magmarock.png b/assets/blocks/environment/magmarock.png Binary files differdeleted file mode 100644 index 45626c1..0000000 --- a/assets/blocks/environment/magmarock.png +++ /dev/null diff --git a/assets/blocks/environment/metal-floor-2.png b/assets/blocks/environment/metal-floor-2.png Binary files differdeleted file mode 100644 index 4b0569e..0000000 --- a/assets/blocks/environment/metal-floor-2.png +++ /dev/null diff --git a/assets/blocks/environment/metal-floor-3.png b/assets/blocks/environment/metal-floor-3.png Binary files differdeleted file mode 100644 index 38ecedb..0000000 --- a/assets/blocks/environment/metal-floor-3.png +++ /dev/null diff --git a/assets/blocks/environment/metal-floor-5.png b/assets/blocks/environment/metal-floor-5.png Binary files differdeleted file mode 100644 index ae13ed0..0000000 --- a/assets/blocks/environment/metal-floor-5.png +++ /dev/null diff --git a/assets/blocks/environment/metal-floor-damaged.png b/assets/blocks/environment/metal-floor-damaged.png Binary files differdeleted file mode 100644 index 5f60992..0000000 --- a/assets/blocks/environment/metal-floor-damaged.png +++ /dev/null diff --git a/assets/blocks/environment/metal-floor.png b/assets/blocks/environment/metal-floor.png Binary files differdeleted file mode 100644 index c8483c7..0000000 --- a/assets/blocks/environment/metal-floor.png +++ /dev/null diff --git a/assets/blocks/environment/molten-slag.png b/assets/blocks/environment/molten-slag.png Binary files differdeleted file mode 100644 index 1d41627..0000000 --- a/assets/blocks/environment/molten-slag.png +++ /dev/null diff --git a/assets/blocks/environment/moss.png b/assets/blocks/environment/moss.png Binary files differdeleted file mode 100644 index a835175..0000000 --- a/assets/blocks/environment/moss.png +++ /dev/null diff --git a/assets/blocks/environment/mud.png b/assets/blocks/environment/mud.png Binary files differdeleted file mode 100644 index 834c1ee..0000000 --- a/assets/blocks/environment/mud.png +++ /dev/null diff --git a/assets/blocks/environment/ore-beryllium.png b/assets/blocks/environment/ore-beryllium.png Binary files differdeleted file mode 100644 index f44c8aa..0000000 --- a/assets/blocks/environment/ore-beryllium.png +++ /dev/null diff --git a/assets/blocks/environment/ore-coal.png b/assets/blocks/environment/ore-coal.png Binary files differdeleted file mode 100644 index 1c81d5f..0000000 --- a/assets/blocks/environment/ore-coal.png +++ /dev/null diff --git a/assets/blocks/environment/ore-copper.png b/assets/blocks/environment/ore-copper.png Binary files differdeleted file mode 100644 index 2bc09fb..0000000 --- a/assets/blocks/environment/ore-copper.png +++ /dev/null diff --git a/assets/blocks/environment/ore-crystal-thorium.png b/assets/blocks/environment/ore-crystal-thorium.png Binary files differdeleted file mode 100644 index 82bd3f2..0000000 --- a/assets/blocks/environment/ore-crystal-thorium.png +++ /dev/null diff --git a/assets/blocks/environment/ore-lead.png b/assets/blocks/environment/ore-lead.png Binary files differdeleted file mode 100644 index 0058d07..0000000 --- a/assets/blocks/environment/ore-lead.png +++ /dev/null diff --git a/assets/blocks/environment/ore-scrap.png b/assets/blocks/environment/ore-scrap.png Binary files differdeleted file mode 100644 index 27f40ac..0000000 --- a/assets/blocks/environment/ore-scrap.png +++ /dev/null diff --git a/assets/blocks/environment/ore-thorium.png b/assets/blocks/environment/ore-thorium.png Binary files differdeleted file mode 100644 index f374c01..0000000 --- a/assets/blocks/environment/ore-thorium.png +++ /dev/null diff --git a/assets/blocks/environment/ore-titanium.png b/assets/blocks/environment/ore-titanium.png Binary files differdeleted file mode 100644 index 944c4ff..0000000 --- a/assets/blocks/environment/ore-titanium.png +++ /dev/null diff --git a/assets/blocks/environment/ore-tungsten.png b/assets/blocks/environment/ore-tungsten.png Binary files differdeleted file mode 100644 index 10d2923..0000000 --- a/assets/blocks/environment/ore-tungsten.png +++ /dev/null diff --git a/assets/blocks/environment/ore-wall-beryllium.png b/assets/blocks/environment/ore-wall-beryllium.png Binary files differdeleted file mode 100644 index a1116d2..0000000 --- a/assets/blocks/environment/ore-wall-beryllium.png +++ /dev/null diff --git a/assets/blocks/environment/ore-wall-thorium.png b/assets/blocks/environment/ore-wall-thorium.png Binary files differdeleted file mode 100644 index 32b255a..0000000 --- a/assets/blocks/environment/ore-wall-thorium.png +++ /dev/null diff --git a/assets/blocks/environment/ore-wall-tungsten.png b/assets/blocks/environment/ore-wall-tungsten.png Binary files differdeleted file mode 100644 index 8c1b599..0000000 --- a/assets/blocks/environment/ore-wall-tungsten.png +++ /dev/null diff --git a/assets/blocks/environment/pebbles.png b/assets/blocks/environment/pebbles.png Binary files differdeleted file mode 100644 index 03b56d6..0000000 --- a/assets/blocks/environment/pebbles.png +++ /dev/null diff --git a/assets/blocks/environment/pine.png b/assets/blocks/environment/pine.png Binary files differdeleted file mode 100644 index dd252cc..0000000 --- a/assets/blocks/environment/pine.png +++ /dev/null diff --git a/assets/blocks/environment/pooled-cryofluid.png b/assets/blocks/environment/pooled-cryofluid.png Binary files differdeleted file mode 100644 index aa36067..0000000 --- a/assets/blocks/environment/pooled-cryofluid.png +++ /dev/null diff --git a/assets/blocks/environment/pur-bush.png b/assets/blocks/environment/pur-bush.png Binary files differdeleted file mode 100644 index 24fee97..0000000 --- a/assets/blocks/environment/pur-bush.png +++ /dev/null diff --git a/assets/blocks/environment/red-diamond-wall.png b/assets/blocks/environment/red-diamond-wall.png Binary files differdeleted file mode 100644 index b751674..0000000 --- a/assets/blocks/environment/red-diamond-wall.png +++ /dev/null diff --git a/assets/blocks/environment/red-ice-boulder.png b/assets/blocks/environment/red-ice-boulder.png Binary files differdeleted file mode 100644 index 4ad47a5..0000000 --- a/assets/blocks/environment/red-ice-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/red-ice-wall-large.png b/assets/blocks/environment/red-ice-wall-large.png Binary files differdeleted file mode 100644 index 7fe0b04..0000000 --- a/assets/blocks/environment/red-ice-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/red-ice-wall.png b/assets/blocks/environment/red-ice-wall.png Binary files differdeleted file mode 100644 index 048c572..0000000 --- a/assets/blocks/environment/red-ice-wall.png +++ /dev/null diff --git a/assets/blocks/environment/red-ice.png b/assets/blocks/environment/red-ice.png Binary files differdeleted file mode 100644 index d54cf8a..0000000 --- a/assets/blocks/environment/red-ice.png +++ /dev/null diff --git a/assets/blocks/environment/red-stone-boulder.png b/assets/blocks/environment/red-stone-boulder.png Binary files differdeleted file mode 100644 index 2770255..0000000 --- a/assets/blocks/environment/red-stone-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/red-stone-vent.png b/assets/blocks/environment/red-stone-vent.png Binary files differdeleted file mode 100644 index b71ab18..0000000 --- a/assets/blocks/environment/red-stone-vent.png +++ /dev/null diff --git a/assets/blocks/environment/red-stone-wall-large.png b/assets/blocks/environment/red-stone-wall-large.png Binary files differdeleted file mode 100644 index 1cb7808..0000000 --- a/assets/blocks/environment/red-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/red-stone.png b/assets/blocks/environment/red-stone.png Binary files differdeleted file mode 100644 index 66e5b06..0000000 --- a/assets/blocks/environment/red-stone.png +++ /dev/null diff --git a/assets/blocks/environment/redmat.png b/assets/blocks/environment/redmat.png Binary files differdeleted file mode 100644 index f9df183..0000000 --- a/assets/blocks/environment/redmat.png +++ /dev/null diff --git a/assets/blocks/environment/redweed.png b/assets/blocks/environment/redweed.png Binary files differdeleted file mode 100644 index 2ac97d5..0000000 --- a/assets/blocks/environment/redweed.png +++ /dev/null diff --git a/assets/blocks/environment/regolith-wall-large.png b/assets/blocks/environment/regolith-wall-large.png Binary files differdeleted file mode 100644 index 271ed82..0000000 --- a/assets/blocks/environment/regolith-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/regolith-wall.png b/assets/blocks/environment/regolith-wall.png Binary files differdeleted file mode 100644 index a8b0ec4..0000000 --- a/assets/blocks/environment/regolith-wall.png +++ /dev/null diff --git a/assets/blocks/environment/regolith.png b/assets/blocks/environment/regolith.png Binary files differdeleted file mode 100644 index cb318b5..0000000 --- a/assets/blocks/environment/regolith.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-boulder.png b/assets/blocks/environment/rhyolite-boulder.png Binary files differdeleted file mode 100644 index 26bb4e4..0000000 --- a/assets/blocks/environment/rhyolite-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-crater.png b/assets/blocks/environment/rhyolite-crater.png Binary files differdeleted file mode 100644 index e35a1b3..0000000 --- a/assets/blocks/environment/rhyolite-crater.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-vent.png b/assets/blocks/environment/rhyolite-vent.png Binary files differdeleted file mode 100644 index d7b7ed0..0000000 --- a/assets/blocks/environment/rhyolite-vent.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-wall-large.png b/assets/blocks/environment/rhyolite-wall-large.png Binary files differdeleted file mode 100644 index 187550b..0000000 --- a/assets/blocks/environment/rhyolite-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite-wall.png b/assets/blocks/environment/rhyolite-wall.png Binary files differdeleted file mode 100644 index 5b84e45..0000000 --- a/assets/blocks/environment/rhyolite-wall.png +++ /dev/null diff --git a/assets/blocks/environment/rhyolite.png b/assets/blocks/environment/rhyolite.png Binary files differdeleted file mode 100644 index 37fba67..0000000 --- a/assets/blocks/environment/rhyolite.png +++ /dev/null diff --git a/assets/blocks/environment/rough-rhyolite.png b/assets/blocks/environment/rough-rhyolite.png Binary files differdeleted file mode 100644 index 9700fff..0000000 --- a/assets/blocks/environment/rough-rhyolite.png +++ /dev/null diff --git a/assets/blocks/environment/salt-wall.png b/assets/blocks/environment/salt-wall.png Binary files differdeleted file mode 100644 index 037a1ce..0000000 --- a/assets/blocks/environment/salt-wall.png +++ /dev/null diff --git a/assets/blocks/environment/salt.png b/assets/blocks/environment/salt.png Binary files differdeleted file mode 100644 index a693c13..0000000 --- a/assets/blocks/environment/salt.png +++ /dev/null diff --git a/assets/blocks/environment/sand-boulder.png b/assets/blocks/environment/sand-boulder.png Binary files differdeleted file mode 100644 index 3019018..0000000 --- a/assets/blocks/environment/sand-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/sand-floor.png b/assets/blocks/environment/sand-floor.png Binary files differdeleted file mode 100644 index 9c5f4e9..0000000 --- a/assets/blocks/environment/sand-floor.png +++ /dev/null diff --git a/assets/blocks/environment/sand-wall-large.png b/assets/blocks/environment/sand-wall-large.png Binary files differdeleted file mode 100644 index eed7bc9..0000000 --- a/assets/blocks/environment/sand-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/sand-wall.png b/assets/blocks/environment/sand-wall.png Binary files differdeleted file mode 100644 index a67d570..0000000 --- a/assets/blocks/environment/sand-wall.png +++ /dev/null diff --git a/assets/blocks/environment/sand-water.png b/assets/blocks/environment/sand-water.png Binary files differdeleted file mode 100644 index 0ff663c..0000000 --- a/assets/blocks/environment/sand-water.png +++ /dev/null diff --git a/assets/blocks/environment/shale-boulder.png b/assets/blocks/environment/shale-boulder.png Binary files differdeleted file mode 100644 index b12a026..0000000 --- a/assets/blocks/environment/shale-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/shale-wall-large.png b/assets/blocks/environment/shale-wall-large.png Binary files differdeleted file mode 100644 index 0bdf3e2..0000000 --- a/assets/blocks/environment/shale-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/shale-wall.png b/assets/blocks/environment/shale-wall.png Binary files differdeleted file mode 100644 index a102590..0000000 --- a/assets/blocks/environment/shale-wall.png +++ /dev/null diff --git a/assets/blocks/environment/shale.png b/assets/blocks/environment/shale.png Binary files differdeleted file mode 100644 index a0469bc..0000000 --- a/assets/blocks/environment/shale.png +++ /dev/null diff --git a/assets/blocks/environment/shallow-water.png b/assets/blocks/environment/shallow-water.png Binary files differdeleted file mode 100644 index 16dc4d0..0000000 --- a/assets/blocks/environment/shallow-water.png +++ /dev/null diff --git a/assets/blocks/environment/shrubs-large.png b/assets/blocks/environment/shrubs-large.png Binary files differdeleted file mode 100644 index 26fb5d3..0000000 --- a/assets/blocks/environment/shrubs-large.png +++ /dev/null diff --git a/assets/blocks/environment/shrubs.png b/assets/blocks/environment/shrubs.png Binary files differdeleted file mode 100644 index 635a0d2..0000000 --- a/assets/blocks/environment/shrubs.png +++ /dev/null diff --git a/assets/blocks/environment/snow-boulder.png b/assets/blocks/environment/snow-boulder.png Binary files differdeleted file mode 100644 index f0cd270..0000000 --- a/assets/blocks/environment/snow-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/snow-pine.png b/assets/blocks/environment/snow-pine.png Binary files differdeleted file mode 100644 index bb2d115..0000000 --- a/assets/blocks/environment/snow-pine.png +++ /dev/null diff --git a/assets/blocks/environment/snow-wall-large.png b/assets/blocks/environment/snow-wall-large.png Binary files differdeleted file mode 100644 index d597a66..0000000 --- a/assets/blocks/environment/snow-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/snow-wall.png b/assets/blocks/environment/snow-wall.png Binary files differdeleted file mode 100644 index 718cff7..0000000 --- a/assets/blocks/environment/snow-wall.png +++ /dev/null diff --git a/assets/blocks/environment/snow.png b/assets/blocks/environment/snow.png Binary files differdeleted file mode 100644 index afad902..0000000 --- a/assets/blocks/environment/snow.png +++ /dev/null diff --git a/assets/blocks/environment/spawn.png b/assets/blocks/environment/spawn.png Binary files differdeleted file mode 100644 index 01da5b5..0000000 --- a/assets/blocks/environment/spawn.png +++ /dev/null diff --git a/assets/blocks/environment/spore-cluster.png b/assets/blocks/environment/spore-cluster.png Binary files differdeleted file mode 100644 index 4b272a3..0000000 --- a/assets/blocks/environment/spore-cluster.png +++ /dev/null diff --git a/assets/blocks/environment/spore-moss.png b/assets/blocks/environment/spore-moss.png Binary files differdeleted file mode 100644 index 3661e8b..0000000 --- a/assets/blocks/environment/spore-moss.png +++ /dev/null diff --git a/assets/blocks/environment/spore-pine.png b/assets/blocks/environment/spore-pine.png Binary files differdeleted file mode 100644 index 14f6f59..0000000 --- a/assets/blocks/environment/spore-pine.png +++ /dev/null diff --git a/assets/blocks/environment/spore-wall-large.png b/assets/blocks/environment/spore-wall-large.png Binary files differdeleted file mode 100644 index 3e5b976..0000000 --- a/assets/blocks/environment/spore-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/spore-wall.png b/assets/blocks/environment/spore-wall.png Binary files differdeleted file mode 100644 index b2dec36..0000000 --- a/assets/blocks/environment/spore-wall.png +++ /dev/null diff --git a/assets/blocks/environment/stone-wall-large.png b/assets/blocks/environment/stone-wall-large.png Binary files differdeleted file mode 100644 index 26173e9..0000000 --- a/assets/blocks/environment/stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/stone-wall.png b/assets/blocks/environment/stone-wall.png Binary files differdeleted file mode 100644 index 39c0d9c..0000000 --- a/assets/blocks/environment/stone-wall.png +++ /dev/null diff --git a/assets/blocks/environment/stone.png b/assets/blocks/environment/stone.png Binary files differdeleted file mode 100644 index 9fdeff0..0000000 --- a/assets/blocks/environment/stone.png +++ /dev/null diff --git a/assets/blocks/environment/tainted-water.png b/assets/blocks/environment/tainted-water.png Binary files differdeleted file mode 100644 index 244610a..0000000 --- a/assets/blocks/environment/tainted-water.png +++ /dev/null diff --git a/assets/blocks/environment/tendrils.png b/assets/blocks/environment/tendrils.png Binary files differdeleted file mode 100644 index 31727ee..0000000 --- a/assets/blocks/environment/tendrils.png +++ /dev/null diff --git a/assets/blocks/environment/vibrant-crystal-cluster.png b/assets/blocks/environment/vibrant-crystal-cluster.png Binary files differdeleted file mode 100644 index 0f61531..0000000 --- a/assets/blocks/environment/vibrant-crystal-cluster.png +++ /dev/null diff --git a/assets/blocks/environment/white-tree-dead.png b/assets/blocks/environment/white-tree-dead.png Binary files differdeleted file mode 100644 index f313de4..0000000 --- a/assets/blocks/environment/white-tree-dead.png +++ /dev/null diff --git a/assets/blocks/environment/yellow-stone-boulder.png b/assets/blocks/environment/yellow-stone-boulder.png Binary files differdeleted file mode 100644 index bafe3b5..0000000 --- a/assets/blocks/environment/yellow-stone-boulder.png +++ /dev/null diff --git a/assets/blocks/environment/yellow-stone-vent.png b/assets/blocks/environment/yellow-stone-vent.png Binary files differdeleted file mode 100644 index effb1ca..0000000 --- a/assets/blocks/environment/yellow-stone-vent.png +++ /dev/null diff --git a/assets/blocks/environment/yellow-stone-wall-large.png b/assets/blocks/environment/yellow-stone-wall-large.png Binary files differdeleted file mode 100644 index d3189b2..0000000 --- a/assets/blocks/environment/yellow-stone-wall-large.png +++ /dev/null diff --git a/assets/blocks/environment/yellow-stone.png b/assets/blocks/environment/yellow-stone.png Binary files differdeleted file mode 100644 index fb0c640..0000000 --- a/assets/blocks/environment/yellow-stone.png +++ /dev/null diff --git a/assets/blocks/environment/yellowcoral.png b/assets/blocks/environment/yellowcoral.png Binary files differdeleted file mode 100644 index 5e3d6cc..0000000 --- a/assets/blocks/environment/yellowcoral.png +++ /dev/null diff --git a/assets/blocks/liquid/bridge-conduit-arrow.png b/assets/blocks/liquid/bridge-conduit-arrow.png Binary files differdeleted file mode 100644 index b8b62bc..0000000 --- a/assets/blocks/liquid/bridge-conduit-arrow.png +++ /dev/null diff --git a/assets/blocks/liquid/bridge-conduit-bridge.png b/assets/blocks/liquid/bridge-conduit-bridge.png Binary files differdeleted file mode 100644 index 5f23ff3..0000000 --- a/assets/blocks/liquid/bridge-conduit-bridge.png +++ /dev/null diff --git a/assets/blocks/liquid/bridge-conduit-end.png b/assets/blocks/liquid/bridge-conduit-end.png Binary files differdeleted file mode 100644 index 844be19..0000000 --- a/assets/blocks/liquid/bridge-conduit-end.png +++ /dev/null diff --git a/assets/blocks/liquid/bridge-conduit.png b/assets/blocks/liquid/bridge-conduit.png Binary files differdeleted file mode 100644 index d57c2bb..0000000 --- a/assets/blocks/liquid/bridge-conduit.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-0-0.png b/assets/blocks/liquid/conduits/conduit-0-0.png Binary files differdeleted file mode 100644 index 89e0a19..0000000 --- a/assets/blocks/liquid/conduits/conduit-0-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-0-2.png b/assets/blocks/liquid/conduits/conduit-0-2.png Binary files differdeleted file mode 100644 index 96b202c..0000000 --- a/assets/blocks/liquid/conduits/conduit-0-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-0-h.png b/assets/blocks/liquid/conduits/conduit-1-0-h.png Binary files differdeleted file mode 100644 index 90ef53c..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-0.png b/assets/blocks/liquid/conduits/conduit-1-0.png Binary files differdeleted file mode 100644 index dc86dd4..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-1-h.png b/assets/blocks/liquid/conduits/conduit-1-1-h.png Binary files differdeleted file mode 100644 index 3e2dec1..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-1-v.png b/assets/blocks/liquid/conduits/conduit-1-1-v.png Binary files differdeleted file mode 100644 index ed292b3..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-1-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-1.png b/assets/blocks/liquid/conduits/conduit-1-1.png Binary files differdeleted file mode 100644 index 678f81a..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-2.png b/assets/blocks/liquid/conduits/conduit-1-2.png Binary files differdeleted file mode 100644 index 69c4473..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-1-3.png b/assets/blocks/liquid/conduits/conduit-1-3.png Binary files differdeleted file mode 100644 index 90ef53c..0000000 --- a/assets/blocks/liquid/conduits/conduit-1-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-2-0-h.png b/assets/blocks/liquid/conduits/conduit-2-0-h.png Binary files differdeleted file mode 100644 index d30d5f4..0000000 --- a/assets/blocks/liquid/conduits/conduit-2-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-2-0-v.png b/assets/blocks/liquid/conduits/conduit-2-0-v.png Binary files differdeleted file mode 100644 index 67d0833..0000000 --- a/assets/blocks/liquid/conduits/conduit-2-0-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-2-0.png b/assets/blocks/liquid/conduits/conduit-2-0.png Binary files differdeleted file mode 100644 index e8a7bb0..0000000 --- a/assets/blocks/liquid/conduits/conduit-2-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-2-2.png b/assets/blocks/liquid/conduits/conduit-2-2.png Binary files differdeleted file mode 100644 index a3bbaab..0000000 --- a/assets/blocks/liquid/conduits/conduit-2-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-2-3-h.png b/assets/blocks/liquid/conduits/conduit-2-3-h.png Binary files differdeleted file mode 100644 index 6815dd9..0000000 --- a/assets/blocks/liquid/conduits/conduit-2-3-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-3-0-h.png b/assets/blocks/liquid/conduits/conduit-3-0-h.png Binary files differdeleted file mode 100644 index 31a4dec..0000000 --- a/assets/blocks/liquid/conduits/conduit-3-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-3-0.png b/assets/blocks/liquid/conduits/conduit-3-0.png Binary files differdeleted file mode 100644 index d27ac67..0000000 --- a/assets/blocks/liquid/conduits/conduit-3-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-3-1.png b/assets/blocks/liquid/conduits/conduit-3-1.png Binary files differdeleted file mode 100644 index 0911857..0000000 --- a/assets/blocks/liquid/conduits/conduit-3-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-3-3.png b/assets/blocks/liquid/conduits/conduit-3-3.png Binary files differdeleted file mode 100644 index 0f57eef..0000000 --- a/assets/blocks/liquid/conduits/conduit-3-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-4-0.png b/assets/blocks/liquid/conduits/conduit-4-0.png Binary files differdeleted file mode 100644 index 3d0f869..0000000 --- a/assets/blocks/liquid/conduits/conduit-4-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-4-1.png b/assets/blocks/liquid/conduits/conduit-4-1.png Binary files differdeleted file mode 100644 index 37cd8a9..0000000 --- a/assets/blocks/liquid/conduits/conduit-4-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-4-3.png b/assets/blocks/liquid/conduits/conduit-4-3.png Binary files differdeleted file mode 100644 index 76501b4..0000000 --- a/assets/blocks/liquid/conduits/conduit-4-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-bottom-0.png b/assets/blocks/liquid/conduits/conduit-bottom-0.png Binary files differdeleted file mode 100644 index b5f2d11..0000000 --- a/assets/blocks/liquid/conduits/conduit-bottom-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/conduit-bottom-1.png b/assets/blocks/liquid/conduits/conduit-bottom-1.png Binary files differdeleted file mode 100644 index 82bcbcb..0000000 --- a/assets/blocks/liquid/conduits/conduit-bottom-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-0.png b/assets/blocks/liquid/conduits/plated-conduit-0-0.png Binary files differdeleted file mode 100644 index 9b1dcd0..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-0-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-1.png b/assets/blocks/liquid/conduits/plated-conduit-0-1.png Binary files differdeleted file mode 100644 index 6363f68..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-0-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-2.png b/assets/blocks/liquid/conduits/plated-conduit-0-2.png Binary files differdeleted file mode 100644 index 2450421..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-0-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-0-3.png b/assets/blocks/liquid/conduits/plated-conduit-0-3.png Binary files differdeleted file mode 100644 index e3f2046..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-0-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png b/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png Binary files differdeleted file mode 100644 index deb7005..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-0.png b/assets/blocks/liquid/conduits/plated-conduit-1-0.png Binary files differdeleted file mode 100644 index 201ffa2..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png b/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png Binary files differdeleted file mode 100644 index 4bef575..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png b/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png Binary files differdeleted file mode 100644 index ffb6987..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-1.png b/assets/blocks/liquid/conduits/plated-conduit-1-1.png Binary files differdeleted file mode 100644 index 6d6733a..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-2.png b/assets/blocks/liquid/conduits/plated-conduit-1-2.png Binary files differdeleted file mode 100644 index 8cff629..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-1-3.png b/assets/blocks/liquid/conduits/plated-conduit-1-3.png Binary files differdeleted file mode 100644 index deb7005..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-1-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png b/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png Binary files differdeleted file mode 100644 index 8f2ce35..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png b/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png Binary files differdeleted file mode 100644 index 222edf9..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-0.png b/assets/blocks/liquid/conduits/plated-conduit-2-0.png Binary files differdeleted file mode 100644 index 4a32d66..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-2-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png b/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png Binary files differdeleted file mode 100644 index 67385d9..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-2.png b/assets/blocks/liquid/conduits/plated-conduit-2-2.png Binary files differdeleted file mode 100644 index 334adad..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-2-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png b/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png Binary files differdeleted file mode 100644 index 416a574..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png b/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png Binary files differdeleted file mode 100644 index cdff048..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-0.png b/assets/blocks/liquid/conduits/plated-conduit-3-0.png Binary files differdeleted file mode 100644 index ea24f9a..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-3-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-1.png b/assets/blocks/liquid/conduits/plated-conduit-3-1.png Binary files differdeleted file mode 100644 index a13c498..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-3-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-3-3.png b/assets/blocks/liquid/conduits/plated-conduit-3-3.png Binary files differdeleted file mode 100644 index a78f468..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-3-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-4-1.png b/assets/blocks/liquid/conduits/plated-conduit-4-1.png Binary files differdeleted file mode 100644 index 70e0859..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-4-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/plated-conduit-4-3.png b/assets/blocks/liquid/conduits/plated-conduit-4-3.png Binary files differdeleted file mode 100644 index 8c0c95f..0000000 --- a/assets/blocks/liquid/conduits/plated-conduit-4-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-0.png b/assets/blocks/liquid/conduits/pulse-conduit-0-0.png Binary files differdeleted file mode 100644 index 09ee3e3..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-0-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-2.png b/assets/blocks/liquid/conduits/pulse-conduit-0-2.png Binary files differdeleted file mode 100644 index 875ebfa..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-0-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-3.png b/assets/blocks/liquid/conduits/pulse-conduit-0-3.png Binary files differdeleted file mode 100644 index b641d4d..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-0-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png b/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png Binary files differdeleted file mode 100644 index 2f57ce8..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-0.png b/assets/blocks/liquid/conduits/pulse-conduit-1-0.png Binary files differdeleted file mode 100644 index 170ffc9..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png b/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png Binary files differdeleted file mode 100644 index 7d7acf2..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png b/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png Binary files differdeleted file mode 100644 index ab23178..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-1.png b/assets/blocks/liquid/conduits/pulse-conduit-1-1.png Binary files differdeleted file mode 100644 index fbbbc9c..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-2.png b/assets/blocks/liquid/conduits/pulse-conduit-1-2.png Binary files differdeleted file mode 100644 index ff58bf2..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-1-3.png b/assets/blocks/liquid/conduits/pulse-conduit-1-3.png Binary files differdeleted file mode 100644 index 2f57ce8..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-1-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png b/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png Binary files differdeleted file mode 100644 index 6e2f52b..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png b/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png Binary files differdeleted file mode 100644 index 7ee5d5d..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-0.png b/assets/blocks/liquid/conduits/pulse-conduit-2-0.png Binary files differdeleted file mode 100644 index 35d1735..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png b/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png Binary files differdeleted file mode 100644 index b2978fb..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-2.png b/assets/blocks/liquid/conduits/pulse-conduit-2-2.png Binary files differdeleted file mode 100644 index 831d55e..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png b/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png Binary files differdeleted file mode 100644 index 56a7446..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png b/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png Binary files differdeleted file mode 100644 index 6527245..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-0.png b/assets/blocks/liquid/conduits/pulse-conduit-3-0.png Binary files differdeleted file mode 100644 index b7a411b..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-3-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-1.png b/assets/blocks/liquid/conduits/pulse-conduit-3-1.png Binary files differdeleted file mode 100644 index ffb0e87..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-3-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-3-3.png b/assets/blocks/liquid/conduits/pulse-conduit-3-3.png Binary files differdeleted file mode 100644 index cf614d2..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-3-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-4-0.png b/assets/blocks/liquid/conduits/pulse-conduit-4-0.png Binary files differdeleted file mode 100644 index 7958647..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-4-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-4-1.png b/assets/blocks/liquid/conduits/pulse-conduit-4-1.png Binary files differdeleted file mode 100644 index d4a5e50..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-4-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/pulse-conduit-4-3.png b/assets/blocks/liquid/conduits/pulse-conduit-4-3.png Binary files differdeleted file mode 100644 index 949c1e2..0000000 --- a/assets/blocks/liquid/conduits/pulse-conduit-4-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png Binary files differdeleted file mode 100644 index 6280303..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png Binary files differdeleted file mode 100644 index 033767c..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png Binary files differdeleted file mode 100644 index ec838d6..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png Binary files differdeleted file mode 100644 index f795439..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png Binary files differdeleted file mode 100644 index 5fb892c..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png Binary files differdeleted file mode 100644 index e393c9c..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png Binary files differdeleted file mode 100644 index 2f4f9e9..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png Binary files differdeleted file mode 100644 index c303f7d..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png Binary files differdeleted file mode 100644 index 2dce114..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png Binary files differdeleted file mode 100644 index 115b526..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png Binary files differdeleted file mode 100644 index 95c1d9f..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png Binary files differdeleted file mode 100644 index eb069a9..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png Binary files differdeleted file mode 100644 index c6b9470..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png Binary files differdeleted file mode 100644 index 5099798..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png Binary files differdeleted file mode 100644 index 35606ba..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png Binary files differdeleted file mode 100644 index 8037de2..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png Binary files differdeleted file mode 100644 index 3402395..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png Binary files differdeleted file mode 100644 index 32a2fd2..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png Binary files differdeleted file mode 100644 index 80ce744..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png Binary files differdeleted file mode 100644 index f2ef533..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png Binary files differdeleted file mode 100644 index 2ed95f1..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png Binary files differdeleted file mode 100644 index e52c759..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png Binary files differdeleted file mode 100644 index 3e6195d..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png b/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png Binary files differdeleted file mode 100644 index 46deb70..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png b/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png Binary files differdeleted file mode 100644 index 14845e4..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png +++ /dev/null diff --git a/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png b/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png Binary files differdeleted file mode 100644 index 4901d38..0000000 --- a/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png +++ /dev/null diff --git a/assets/blocks/liquid/impulse-pump-liquid.png b/assets/blocks/liquid/impulse-pump-liquid.png Binary files differdeleted file mode 100644 index bd62682..0000000 --- a/assets/blocks/liquid/impulse-pump-liquid.png +++ /dev/null diff --git a/assets/blocks/liquid/impulse-pump.png b/assets/blocks/liquid/impulse-pump.png Binary files differdeleted file mode 100644 index 7f41faf..0000000 --- a/assets/blocks/liquid/impulse-pump.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-container.png b/assets/blocks/liquid/liquid-container.png Binary files differdeleted file mode 100644 index 5336e28..0000000 --- a/assets/blocks/liquid/liquid-container.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-junction.png b/assets/blocks/liquid/liquid-junction.png Binary files differdeleted file mode 100644 index 0c92792..0000000 --- a/assets/blocks/liquid/liquid-junction.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-router.png b/assets/blocks/liquid/liquid-router.png Binary files differdeleted file mode 100644 index 75adcb1..0000000 --- a/assets/blocks/liquid/liquid-router.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-source.png b/assets/blocks/liquid/liquid-source.png Binary files differdeleted file mode 100644 index 3f230be..0000000 --- a/assets/blocks/liquid/liquid-source.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-tank-bottom.png b/assets/blocks/liquid/liquid-tank-bottom.png Binary files differdeleted file mode 100644 index 5133507..0000000 --- a/assets/blocks/liquid/liquid-tank-bottom.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-tank.png b/assets/blocks/liquid/liquid-tank.png Binary files differdeleted file mode 100644 index f4e9396..0000000 --- a/assets/blocks/liquid/liquid-tank.png +++ /dev/null diff --git a/assets/blocks/liquid/liquid-void.png b/assets/blocks/liquid/liquid-void.png Binary files differdeleted file mode 100644 index 34b20dd..0000000 --- a/assets/blocks/liquid/liquid-void.png +++ /dev/null diff --git a/assets/blocks/liquid/mechanical-pump-liquid.png b/assets/blocks/liquid/mechanical-pump-liquid.png Binary files differdeleted file mode 100644 index bd62682..0000000 --- a/assets/blocks/liquid/mechanical-pump-liquid.png +++ /dev/null diff --git a/assets/blocks/liquid/mechanical-pump.png b/assets/blocks/liquid/mechanical-pump.png Binary files differdeleted file mode 100644 index 771d52d..0000000 --- a/assets/blocks/liquid/mechanical-pump.png +++ /dev/null diff --git a/assets/blocks/liquid/phase-conduit-arrow.png b/assets/blocks/liquid/phase-conduit-arrow.png Binary files differdeleted file mode 100644 index 62bcb0c..0000000 --- a/assets/blocks/liquid/phase-conduit-arrow.png +++ /dev/null diff --git a/assets/blocks/liquid/phase-conduit-bridge.png b/assets/blocks/liquid/phase-conduit-bridge.png Binary files differdeleted file mode 100644 index fcdef72..0000000 --- a/assets/blocks/liquid/phase-conduit-bridge.png +++ /dev/null diff --git a/assets/blocks/liquid/phase-conduit-end.png b/assets/blocks/liquid/phase-conduit-end.png Binary files differdeleted file mode 100644 index cdcc522..0000000 --- a/assets/blocks/liquid/phase-conduit-end.png +++ /dev/null diff --git a/assets/blocks/liquid/phase-conduit.png b/assets/blocks/liquid/phase-conduit.png Binary files differdeleted file mode 100644 index a571e30..0000000 --- a/assets/blocks/liquid/phase-conduit.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png b/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png Binary files differdeleted file mode 100644 index 5309b37..0000000 --- a/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png b/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png Binary files differdeleted file mode 100644 index afef676..0000000 --- a/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png b/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png Binary files differdeleted file mode 100644 index 12c5bde..0000000 --- a/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-dir.png b/assets/blocks/liquid/reinforced-bridge-conduit-dir.png Binary files differdeleted file mode 100644 index 233e43a..0000000 --- a/assets/blocks/liquid/reinforced-bridge-conduit-dir.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png b/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png Binary files differdeleted file mode 100644 index 6c42419..0000000 --- a/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-bridge-conduit.png b/assets/blocks/liquid/reinforced-bridge-conduit.png Binary files differdeleted file mode 100644 index 9e694e0..0000000 --- a/assets/blocks/liquid/reinforced-bridge-conduit.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-liquid-container.png b/assets/blocks/liquid/reinforced-liquid-container.png Binary files differdeleted file mode 100644 index b769691..0000000 --- a/assets/blocks/liquid/reinforced-liquid-container.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-liquid-junction.png b/assets/blocks/liquid/reinforced-liquid-junction.png Binary files differdeleted file mode 100644 index 778c5a6..0000000 --- a/assets/blocks/liquid/reinforced-liquid-junction.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-liquid-tank-bottom.png b/assets/blocks/liquid/reinforced-liquid-tank-bottom.png Binary files differdeleted file mode 100644 index 9b95d26..0000000 --- a/assets/blocks/liquid/reinforced-liquid-tank-bottom.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-pump-liquid.png b/assets/blocks/liquid/reinforced-pump-liquid.png Binary files differdeleted file mode 100644 index 25f07b0..0000000 --- a/assets/blocks/liquid/reinforced-pump-liquid.png +++ /dev/null diff --git a/assets/blocks/liquid/reinforced-pump.png b/assets/blocks/liquid/reinforced-pump.png Binary files differdeleted file mode 100644 index 22f25d4..0000000 --- a/assets/blocks/liquid/reinforced-pump.png +++ /dev/null diff --git a/assets/blocks/liquid/rotary-pump-liquid.png b/assets/blocks/liquid/rotary-pump-liquid.png Binary files differdeleted file mode 100644 index bd62682..0000000 --- a/assets/blocks/liquid/rotary-pump-liquid.png +++ /dev/null diff --git a/assets/blocks/liquid/rotary-pump.png b/assets/blocks/liquid/rotary-pump.png Binary files differdeleted file mode 100644 index 0b94fea..0000000 --- a/assets/blocks/liquid/rotary-pump.png +++ /dev/null diff --git a/assets/blocks/logic/canvas.png b/assets/blocks/logic/canvas.png Binary files differdeleted file mode 100644 index 8f05174..0000000 --- a/assets/blocks/logic/canvas.png +++ /dev/null diff --git a/assets/blocks/logic/hyper-processor.png b/assets/blocks/logic/hyper-processor.png Binary files differdeleted file mode 100644 index 7976567..0000000 --- a/assets/blocks/logic/hyper-processor.png +++ /dev/null diff --git a/assets/blocks/logic/large-logic-display.png b/assets/blocks/logic/large-logic-display.png Binary files differdeleted file mode 100644 index 28c8c75..0000000 --- a/assets/blocks/logic/large-logic-display.png +++ /dev/null diff --git a/assets/blocks/logic/logic-display.png b/assets/blocks/logic/logic-display.png Binary files differdeleted file mode 100644 index 5d38ebe..0000000 --- a/assets/blocks/logic/logic-display.png +++ /dev/null diff --git a/assets/blocks/logic/logic-processor.png b/assets/blocks/logic/logic-processor.png Binary files differdeleted file mode 100644 index 85dffe9..0000000 --- a/assets/blocks/logic/logic-processor.png +++ /dev/null diff --git a/assets/blocks/logic/memory-bank.png b/assets/blocks/logic/memory-bank.png Binary files differdeleted file mode 100644 index f4a4b48..0000000 --- a/assets/blocks/logic/memory-bank.png +++ /dev/null diff --git a/assets/blocks/logic/memory-cell.png b/assets/blocks/logic/memory-cell.png Binary files differdeleted file mode 100644 index a8a5343..0000000 --- a/assets/blocks/logic/memory-cell.png +++ /dev/null diff --git a/assets/blocks/logic/message.png b/assets/blocks/logic/message.png Binary files differdeleted file mode 100644 index 0e7b631..0000000 --- a/assets/blocks/logic/message.png +++ /dev/null diff --git a/assets/blocks/logic/micro-processor.png b/assets/blocks/logic/micro-processor.png Binary files differdeleted file mode 100644 index 9995834..0000000 --- a/assets/blocks/logic/micro-processor.png +++ /dev/null diff --git a/assets/blocks/logic/reinforced-message.png b/assets/blocks/logic/reinforced-message.png Binary files differdeleted file mode 100644 index 7ed093c..0000000 --- a/assets/blocks/logic/reinforced-message.png +++ /dev/null diff --git a/assets/blocks/logic/switch-on.png b/assets/blocks/logic/switch-on.png Binary files differdeleted file mode 100644 index 5560abf..0000000 --- a/assets/blocks/logic/switch-on.png +++ /dev/null diff --git a/assets/blocks/logic/switch.png b/assets/blocks/logic/switch.png Binary files differdeleted file mode 100644 index 37a1c02..0000000 --- a/assets/blocks/logic/switch.png +++ /dev/null diff --git a/assets/blocks/logic/world-cell.png b/assets/blocks/logic/world-cell.png Binary files differdeleted file mode 100644 index 4397cb2..0000000 --- a/assets/blocks/logic/world-cell.png +++ /dev/null diff --git a/assets/blocks/logic/world-message.png b/assets/blocks/logic/world-message.png Binary files differdeleted file mode 100644 index 6fa79f9..0000000 --- a/assets/blocks/logic/world-message.png +++ /dev/null diff --git a/assets/blocks/logic/world-processor.png b/assets/blocks/logic/world-processor.png Binary files differdeleted file mode 100644 index 7638016..0000000 --- a/assets/blocks/logic/world-processor.png +++ /dev/null diff --git a/assets/blocks/payload/constructor-top.png b/assets/blocks/payload/constructor-top.png Binary files differdeleted file mode 100644 index ca8288c..0000000 --- a/assets/blocks/payload/constructor-top.png +++ /dev/null diff --git a/assets/blocks/payload/constructor.png b/assets/blocks/payload/constructor.png Binary files differdeleted file mode 100644 index c982f18..0000000 --- a/assets/blocks/payload/constructor.png +++ /dev/null diff --git a/assets/blocks/payload/deconstructor-top.png b/assets/blocks/payload/deconstructor-top.png Binary files differdeleted file mode 100644 index 102c5fb..0000000 --- a/assets/blocks/payload/deconstructor-top.png +++ /dev/null diff --git a/assets/blocks/payload/deconstructor.png b/assets/blocks/payload/deconstructor.png Binary files differdeleted file mode 100644 index f2dd416..0000000 --- a/assets/blocks/payload/deconstructor.png +++ /dev/null diff --git a/assets/blocks/payload/factory-in-3-dark.png b/assets/blocks/payload/factory-in-3-dark.png Binary files differdeleted file mode 100644 index c7a3c0e..0000000 --- a/assets/blocks/payload/factory-in-3-dark.png +++ /dev/null diff --git a/assets/blocks/payload/factory-in-3.png b/assets/blocks/payload/factory-in-3.png Binary files differdeleted file mode 100644 index 19f0b7d..0000000 --- a/assets/blocks/payload/factory-in-3.png +++ /dev/null diff --git a/assets/blocks/payload/factory-in-5-dark.png b/assets/blocks/payload/factory-in-5-dark.png Binary files differdeleted file mode 100644 index c6eb89b..0000000 --- a/assets/blocks/payload/factory-in-5-dark.png +++ /dev/null diff --git a/assets/blocks/payload/factory-in-5.png b/assets/blocks/payload/factory-in-5.png Binary files differdeleted file mode 100644 index 1a65fed..0000000 --- a/assets/blocks/payload/factory-in-5.png +++ /dev/null diff --git a/assets/blocks/payload/factory-out-3-dark.png b/assets/blocks/payload/factory-out-3-dark.png Binary files differdeleted file mode 100644 index 11d66aa..0000000 --- a/assets/blocks/payload/factory-out-3-dark.png +++ /dev/null diff --git a/assets/blocks/payload/factory-out-3.png b/assets/blocks/payload/factory-out-3.png Binary files differdeleted file mode 100644 index da9153d..0000000 --- a/assets/blocks/payload/factory-out-3.png +++ /dev/null diff --git a/assets/blocks/payload/factory-out-5-dark.png b/assets/blocks/payload/factory-out-5-dark.png Binary files differdeleted file mode 100644 index 40a3ed8..0000000 --- a/assets/blocks/payload/factory-out-5-dark.png +++ /dev/null diff --git a/assets/blocks/payload/factory-out-5.png b/assets/blocks/payload/factory-out-5.png Binary files differdeleted file mode 100644 index 3a8d9ed..0000000 --- a/assets/blocks/payload/factory-out-5.png +++ /dev/null diff --git a/assets/blocks/payload/factory-out-7.png b/assets/blocks/payload/factory-out-7.png Binary files differdeleted file mode 100644 index c1fcf4b..0000000 --- a/assets/blocks/payload/factory-out-7.png +++ /dev/null diff --git a/assets/blocks/payload/factory-out-9.png b/assets/blocks/payload/factory-out-9.png Binary files differdeleted file mode 100644 index 007369a..0000000 --- a/assets/blocks/payload/factory-out-9.png +++ /dev/null diff --git a/assets/blocks/payload/factory-top-3.png b/assets/blocks/payload/factory-top-3.png Binary files differdeleted file mode 100644 index 2b69b0a..0000000 --- a/assets/blocks/payload/factory-top-3.png +++ /dev/null diff --git a/assets/blocks/payload/large-constructor-top.png b/assets/blocks/payload/large-constructor-top.png Binary files differdeleted file mode 100644 index ef4e9fc..0000000 --- a/assets/blocks/payload/large-constructor-top.png +++ /dev/null diff --git a/assets/blocks/payload/large-constructor.png b/assets/blocks/payload/large-constructor.png Binary files differdeleted file mode 100644 index b45e650..0000000 --- a/assets/blocks/payload/large-constructor.png +++ /dev/null diff --git a/assets/blocks/payload/large-payload-mass-driver.png b/assets/blocks/payload/large-payload-mass-driver.png Binary files differdeleted file mode 100644 index 42e9350..0000000 --- a/assets/blocks/payload/large-payload-mass-driver.png +++ /dev/null diff --git a/assets/blocks/payload/payload-conveyor.png b/assets/blocks/payload/payload-conveyor.png Binary files differdeleted file mode 100644 index ea511d4..0000000 --- a/assets/blocks/payload/payload-conveyor.png +++ /dev/null diff --git a/assets/blocks/payload/payload-loader-top.png b/assets/blocks/payload/payload-loader-top.png Binary files differdeleted file mode 100644 index 3612bef..0000000 --- a/assets/blocks/payload/payload-loader-top.png +++ /dev/null diff --git a/assets/blocks/payload/payload-loader.png b/assets/blocks/payload/payload-loader.png Binary files differdeleted file mode 100644 index acbb9a6..0000000 --- a/assets/blocks/payload/payload-loader.png +++ /dev/null diff --git a/assets/blocks/payload/payload-mass-driver.png b/assets/blocks/payload/payload-mass-driver.png Binary files differdeleted file mode 100644 index df38883..0000000 --- a/assets/blocks/payload/payload-mass-driver.png +++ /dev/null diff --git a/assets/blocks/payload/payload-router.png b/assets/blocks/payload/payload-router.png Binary files differdeleted file mode 100644 index 43e4c68..0000000 --- a/assets/blocks/payload/payload-router.png +++ /dev/null diff --git a/assets/blocks/payload/payload-source-top.png b/assets/blocks/payload/payload-source-top.png Binary files differdeleted file mode 100644 index 6b54ca6..0000000 --- a/assets/blocks/payload/payload-source-top.png +++ /dev/null diff --git a/assets/blocks/payload/payload-unloader-top.png b/assets/blocks/payload/payload-unloader-top.png Binary files differdeleted file mode 100644 index caad844..0000000 --- a/assets/blocks/payload/payload-unloader-top.png +++ /dev/null diff --git a/assets/blocks/payload/payload-unloader.png b/assets/blocks/payload/payload-unloader.png Binary files differdeleted file mode 100644 index 9b564db..0000000 --- a/assets/blocks/payload/payload-unloader.png +++ /dev/null diff --git a/assets/blocks/payload/payload-void-top.png b/assets/blocks/payload/payload-void-top.png Binary files differdeleted file mode 100644 index 8725a43..0000000 --- a/assets/blocks/payload/payload-void-top.png +++ /dev/null diff --git a/assets/blocks/payload/payload-void.png b/assets/blocks/payload/payload-void.png Binary files differdeleted file mode 100644 index a2390c4..0000000 --- a/assets/blocks/payload/payload-void.png +++ /dev/null diff --git a/assets/blocks/payload/reinforced-payload-conveyor.png b/assets/blocks/payload/reinforced-payload-conveyor.png Binary files differdeleted file mode 100644 index ee67544..0000000 --- a/assets/blocks/payload/reinforced-payload-conveyor.png +++ /dev/null diff --git a/assets/blocks/payload/reinforced-payload-router.png b/assets/blocks/payload/reinforced-payload-router.png Binary files differdeleted file mode 100644 index 4d426a9..0000000 --- a/assets/blocks/payload/reinforced-payload-router.png +++ /dev/null diff --git a/assets/blocks/payload/small-deconstructor-top.png b/assets/blocks/payload/small-deconstructor-top.png Binary files differdeleted file mode 100644 index e9b25ed..0000000 --- a/assets/blocks/payload/small-deconstructor-top.png +++ /dev/null diff --git a/assets/blocks/payload/small-deconstructor.png b/assets/blocks/payload/small-deconstructor.png Binary files differdeleted file mode 100644 index c04f6d4..0000000 --- a/assets/blocks/payload/small-deconstructor.png +++ /dev/null diff --git a/assets/blocks/power/battery-large.png b/assets/blocks/power/battery-large.png Binary files differdeleted file mode 100644 index bc90f9c..0000000 --- a/assets/blocks/power/battery-large.png +++ /dev/null diff --git a/assets/blocks/power/battery.png b/assets/blocks/power/battery.png Binary files differdeleted file mode 100644 index 66aea4b..0000000 --- a/assets/blocks/power/battery.png +++ /dev/null diff --git a/assets/blocks/power/beam-link.png b/assets/blocks/power/beam-link.png Binary files differdeleted file mode 100644 index 1804555..0000000 --- a/assets/blocks/power/beam-link.png +++ /dev/null diff --git a/assets/blocks/power/beam-node.png b/assets/blocks/power/beam-node.png Binary files differdeleted file mode 100644 index 67c3a94..0000000 --- a/assets/blocks/power/beam-node.png +++ /dev/null diff --git a/assets/blocks/power/beam-tower.png b/assets/blocks/power/beam-tower.png Binary files differdeleted file mode 100644 index f86568c..0000000 --- a/assets/blocks/power/beam-tower.png +++ /dev/null diff --git a/assets/blocks/power/chemical-combustion-chamber.png b/assets/blocks/power/chemical-combustion-chamber.png Binary files differdeleted file mode 100644 index 9d25357..0000000 --- a/assets/blocks/power/chemical-combustion-chamber.png +++ /dev/null diff --git a/assets/blocks/power/combustion-generator.png b/assets/blocks/power/combustion-generator.png Binary files differdeleted file mode 100644 index dcf2039..0000000 --- a/assets/blocks/power/combustion-generator.png +++ /dev/null diff --git a/assets/blocks/power/differential-generator-liquid.png b/assets/blocks/power/differential-generator-liquid.png Binary files differdeleted file mode 100644 index 83eb5ca..0000000 --- a/assets/blocks/power/differential-generator-liquid.png +++ /dev/null diff --git a/assets/blocks/power/differential-generator.png b/assets/blocks/power/differential-generator.png Binary files differdeleted file mode 100644 index a4986a6..0000000 --- a/assets/blocks/power/differential-generator.png +++ /dev/null diff --git a/assets/blocks/power/diode-arrow.png b/assets/blocks/power/diode-arrow.png Binary files differdeleted file mode 100644 index 91b3090..0000000 --- a/assets/blocks/power/diode-arrow.png +++ /dev/null diff --git a/assets/blocks/power/diode.png b/assets/blocks/power/diode.png Binary files differdeleted file mode 100644 index 3963401..0000000 --- a/assets/blocks/power/diode.png +++ /dev/null diff --git a/assets/blocks/power/flux-reactor-bottom.png b/assets/blocks/power/flux-reactor-bottom.png Binary files differdeleted file mode 100644 index 31b441e..0000000 --- a/assets/blocks/power/flux-reactor-bottom.png +++ /dev/null diff --git a/assets/blocks/power/flux-reactor-mid.png b/assets/blocks/power/flux-reactor-mid.png Binary files differdeleted file mode 100644 index 25c0b27..0000000 --- a/assets/blocks/power/flux-reactor-mid.png +++ /dev/null diff --git a/assets/blocks/power/flux-reactor.png b/assets/blocks/power/flux-reactor.png Binary files differdeleted file mode 100644 index 5cbbb43..0000000 --- a/assets/blocks/power/flux-reactor.png +++ /dev/null diff --git a/assets/blocks/power/illuminator.png b/assets/blocks/power/illuminator.png Binary files differdeleted file mode 100644 index 5c7607d..0000000 --- a/assets/blocks/power/illuminator.png +++ /dev/null diff --git a/assets/blocks/power/impact-reactor-bottom.png b/assets/blocks/power/impact-reactor-bottom.png Binary files differdeleted file mode 100644 index 40d985c..0000000 --- a/assets/blocks/power/impact-reactor-bottom.png +++ /dev/null diff --git a/assets/blocks/power/impact-reactor.png b/assets/blocks/power/impact-reactor.png Binary files differdeleted file mode 100644 index 1f3d2dd..0000000 --- a/assets/blocks/power/impact-reactor.png +++ /dev/null diff --git a/assets/blocks/power/neoplasia-reactor-bottom.png b/assets/blocks/power/neoplasia-reactor-bottom.png Binary files differdeleted file mode 100644 index 25cd97e..0000000 --- a/assets/blocks/power/neoplasia-reactor-bottom.png +++ /dev/null diff --git a/assets/blocks/power/neoplasia-reactor-center.png b/assets/blocks/power/neoplasia-reactor-center.png Binary files differdeleted file mode 100644 index 7336772..0000000 --- a/assets/blocks/power/neoplasia-reactor-center.png +++ /dev/null diff --git a/assets/blocks/power/neoplasia-reactor.png b/assets/blocks/power/neoplasia-reactor.png Binary files differdeleted file mode 100644 index 3376dec..0000000 --- a/assets/blocks/power/neoplasia-reactor.png +++ /dev/null diff --git a/assets/blocks/power/power-node-large.png b/assets/blocks/power/power-node-large.png Binary files differdeleted file mode 100644 index a5ebe5e..0000000 --- a/assets/blocks/power/power-node-large.png +++ /dev/null diff --git a/assets/blocks/power/power-node.png b/assets/blocks/power/power-node.png Binary files differdeleted file mode 100644 index 3d98ab0..0000000 --- a/assets/blocks/power/power-node.png +++ /dev/null diff --git a/assets/blocks/power/power-source.png b/assets/blocks/power/power-source.png Binary files differdeleted file mode 100644 index 9d5c8ed..0000000 --- a/assets/blocks/power/power-source.png +++ /dev/null diff --git a/assets/blocks/power/power-void.png b/assets/blocks/power/power-void.png Binary files differdeleted file mode 100644 index 5fd2c22..0000000 --- a/assets/blocks/power/power-void.png +++ /dev/null diff --git a/assets/blocks/power/pyrolysis-generator.png b/assets/blocks/power/pyrolysis-generator.png Binary files differdeleted file mode 100644 index 5f6556d..0000000 --- a/assets/blocks/power/pyrolysis-generator.png +++ /dev/null diff --git a/assets/blocks/power/rtg-generator.png b/assets/blocks/power/rtg-generator.png Binary files differdeleted file mode 100644 index 3578bbc..0000000 --- a/assets/blocks/power/rtg-generator.png +++ /dev/null diff --git a/assets/blocks/power/solar-panel-large.png b/assets/blocks/power/solar-panel-large.png Binary files differdeleted file mode 100644 index a994aaf..0000000 --- a/assets/blocks/power/solar-panel-large.png +++ /dev/null diff --git a/assets/blocks/power/solar-panel.png b/assets/blocks/power/solar-panel.png Binary files differdeleted file mode 100644 index af53536..0000000 --- a/assets/blocks/power/solar-panel.png +++ /dev/null diff --git a/assets/blocks/power/steam-generator-liquid.png b/assets/blocks/power/steam-generator-liquid.png Binary files differdeleted file mode 100644 index da16999..0000000 --- a/assets/blocks/power/steam-generator-liquid.png +++ /dev/null diff --git a/assets/blocks/power/steam-generator.png b/assets/blocks/power/steam-generator.png Binary files differdeleted file mode 100644 index 3b2bcd6..0000000 --- a/assets/blocks/power/steam-generator.png +++ /dev/null diff --git a/assets/blocks/power/thermal-generator.png b/assets/blocks/power/thermal-generator.png Binary files differdeleted file mode 100644 index 6700994..0000000 --- a/assets/blocks/power/thermal-generator.png +++ /dev/null diff --git a/assets/blocks/power/thorium-reactor.png b/assets/blocks/power/thorium-reactor.png Binary files differdeleted file mode 100644 index f7dfb2e..0000000 --- a/assets/blocks/power/thorium-reactor.png +++ /dev/null diff --git a/assets/blocks/power/turbine-condenser.png b/assets/blocks/power/turbine-condenser.png Binary files differdeleted file mode 100644 index 3c29973..0000000 --- a/assets/blocks/power/turbine-condenser.png +++ /dev/null diff --git a/assets/blocks/production/atmospheric-concentrator-bottom.png b/assets/blocks/production/atmospheric-concentrator-bottom.png Binary files differdeleted file mode 100644 index 61dde0d..0000000 --- a/assets/blocks/production/atmospheric-concentrator-bottom.png +++ /dev/null diff --git a/assets/blocks/production/atmospheric-concentrator.png b/assets/blocks/production/atmospheric-concentrator.png Binary files differdeleted file mode 100644 index f535fde..0000000 --- a/assets/blocks/production/atmospheric-concentrator.png +++ /dev/null diff --git a/assets/blocks/production/blast-mixer.png b/assets/blocks/production/blast-mixer.png Binary files differdeleted file mode 100644 index 81e8d86..0000000 --- a/assets/blocks/production/blast-mixer.png +++ /dev/null diff --git a/assets/blocks/production/carbide-crucible-bottom.png b/assets/blocks/production/carbide-crucible-bottom.png Binary files differdeleted file mode 100644 index 3fcb6ab..0000000 --- a/assets/blocks/production/carbide-crucible-bottom.png +++ /dev/null diff --git a/assets/blocks/production/carbide-crucible.png b/assets/blocks/production/carbide-crucible.png Binary files differdeleted file mode 100644 index 309d70f..0000000 --- a/assets/blocks/production/carbide-crucible.png +++ /dev/null diff --git a/assets/blocks/production/coal-centrifuge.png b/assets/blocks/production/coal-centrifuge.png Binary files differdeleted file mode 100644 index 10265b6..0000000 --- a/assets/blocks/production/coal-centrifuge.png +++ /dev/null diff --git a/assets/blocks/production/cryofluid-mixer.png b/assets/blocks/production/cryofluid-mixer.png Binary files differdeleted file mode 100644 index e9e4ecb..0000000 --- a/assets/blocks/production/cryofluid-mixer.png +++ /dev/null diff --git a/assets/blocks/production/cultivator.png b/assets/blocks/production/cultivator.png Binary files differdeleted file mode 100644 index 5d7e152..0000000 --- a/assets/blocks/production/cultivator.png +++ /dev/null diff --git a/assets/blocks/production/cyanogen-synthesizer-bottom.png b/assets/blocks/production/cyanogen-synthesizer-bottom.png Binary files differdeleted file mode 100644 index 3452f9d..0000000 --- a/assets/blocks/production/cyanogen-synthesizer-bottom.png +++ /dev/null diff --git a/assets/blocks/production/cyanogen-synthesizer.png b/assets/blocks/production/cyanogen-synthesizer.png Binary files differdeleted file mode 100644 index b67f16f..0000000 --- a/assets/blocks/production/cyanogen-synthesizer.png +++ /dev/null diff --git a/assets/blocks/production/disassembler-bottom.png b/assets/blocks/production/disassembler-bottom.png Binary files differdeleted file mode 100644 index 87f0295..0000000 --- a/assets/blocks/production/disassembler-bottom.png +++ /dev/null diff --git a/assets/blocks/production/disassembler.png b/assets/blocks/production/disassembler.png Binary files differdeleted file mode 100644 index 9860ac0..0000000 --- a/assets/blocks/production/disassembler.png +++ /dev/null diff --git a/assets/blocks/production/electric-heater-top1.png b/assets/blocks/production/electric-heater-top1.png Binary files differdeleted file mode 100644 index b807ab9..0000000 --- a/assets/blocks/production/electric-heater-top1.png +++ /dev/null diff --git a/assets/blocks/production/electric-heater-top2.png b/assets/blocks/production/electric-heater-top2.png Binary files differdeleted file mode 100644 index 78c0e49..0000000 --- a/assets/blocks/production/electric-heater-top2.png +++ /dev/null diff --git a/assets/blocks/production/electric-heater.png b/assets/blocks/production/electric-heater.png Binary files differdeleted file mode 100644 index 62ca7c7..0000000 --- a/assets/blocks/production/electric-heater.png +++ /dev/null diff --git a/assets/blocks/production/electrolyzer-bottom.png b/assets/blocks/production/electrolyzer-bottom.png Binary files differdeleted file mode 100644 index bb2d46e..0000000 --- a/assets/blocks/production/electrolyzer-bottom.png +++ /dev/null diff --git a/assets/blocks/production/electrolyzer.png b/assets/blocks/production/electrolyzer.png Binary files differdeleted file mode 100644 index c8d66e4..0000000 --- a/assets/blocks/production/electrolyzer.png +++ /dev/null diff --git a/assets/blocks/production/heat-redirector-top2.png b/assets/blocks/production/heat-redirector-top2.png Binary files differdeleted file mode 100644 index 2f6fc72..0000000 --- a/assets/blocks/production/heat-redirector-top2.png +++ /dev/null diff --git a/assets/blocks/production/heat-redirector.png b/assets/blocks/production/heat-redirector.png Binary files differdeleted file mode 100644 index fd7dc0b..0000000 --- a/assets/blocks/production/heat-redirector.png +++ /dev/null diff --git a/assets/blocks/production/heat-router-top1.png b/assets/blocks/production/heat-router-top1.png Binary files differdeleted file mode 100644 index 75a62a4..0000000 --- a/assets/blocks/production/heat-router-top1.png +++ /dev/null diff --git a/assets/blocks/production/heat-router.png b/assets/blocks/production/heat-router.png Binary files differdeleted file mode 100644 index 7f71e4d..0000000 --- a/assets/blocks/production/heat-router.png +++ /dev/null diff --git a/assets/blocks/production/heat-source.png b/assets/blocks/production/heat-source.png Binary files differdeleted file mode 100644 index b4f09d9..0000000 --- a/assets/blocks/production/heat-source.png +++ /dev/null diff --git a/assets/blocks/production/incinerator.png b/assets/blocks/production/incinerator.png Binary files differdeleted file mode 100644 index ae6a34f..0000000 --- a/assets/blocks/production/incinerator.png +++ /dev/null diff --git a/assets/blocks/production/kiln.png b/assets/blocks/production/kiln.png Binary files differdeleted file mode 100644 index 4180563..0000000 --- a/assets/blocks/production/kiln.png +++ /dev/null diff --git a/assets/blocks/production/melter.png b/assets/blocks/production/melter.png Binary files differdeleted file mode 100644 index 97b0278..0000000 --- a/assets/blocks/production/melter.png +++ /dev/null diff --git a/assets/blocks/production/multi-press.png b/assets/blocks/production/multi-press.png Binary files differdeleted file mode 100644 index d8874fd..0000000 --- a/assets/blocks/production/multi-press.png +++ /dev/null diff --git a/assets/blocks/production/oxidation-chamber-top1.png b/assets/blocks/production/oxidation-chamber-top1.png Binary files differdeleted file mode 100644 index 580c74b..0000000 --- a/assets/blocks/production/oxidation-chamber-top1.png +++ /dev/null diff --git a/assets/blocks/production/oxidation-chamber-top2.png b/assets/blocks/production/oxidation-chamber-top2.png Binary files differdeleted file mode 100644 index 9e5489f..0000000 --- a/assets/blocks/production/oxidation-chamber-top2.png +++ /dev/null diff --git a/assets/blocks/production/oxidation-chamber.png b/assets/blocks/production/oxidation-chamber.png Binary files differdeleted file mode 100644 index 55ce729..0000000 --- a/assets/blocks/production/oxidation-chamber.png +++ /dev/null diff --git a/assets/blocks/production/phase-heater-top1.png b/assets/blocks/production/phase-heater-top1.png Binary files differdeleted file mode 100644 index 2374f39..0000000 --- a/assets/blocks/production/phase-heater-top1.png +++ /dev/null diff --git a/assets/blocks/production/phase-heater-top2.png b/assets/blocks/production/phase-heater-top2.png Binary files differdeleted file mode 100644 index 750434c..0000000 --- a/assets/blocks/production/phase-heater-top2.png +++ /dev/null diff --git a/assets/blocks/production/phase-heater.png b/assets/blocks/production/phase-heater.png Binary files differdeleted file mode 100644 index 28302b2..0000000 --- a/assets/blocks/production/phase-heater.png +++ /dev/null diff --git a/assets/blocks/production/phase-synthesizer.png b/assets/blocks/production/phase-synthesizer.png Binary files differdeleted file mode 100644 index 8081f6d..0000000 --- a/assets/blocks/production/phase-synthesizer.png +++ /dev/null diff --git a/assets/blocks/production/phase-weaver.png b/assets/blocks/production/phase-weaver.png Binary files differdeleted file mode 100644 index 576fa32..0000000 --- a/assets/blocks/production/phase-weaver.png +++ /dev/null diff --git a/assets/blocks/production/plastanium-compressor.png b/assets/blocks/production/plastanium-compressor.png Binary files differdeleted file mode 100644 index 2556143..0000000 --- a/assets/blocks/production/plastanium-compressor.png +++ /dev/null diff --git a/assets/blocks/production/pulverizer.png b/assets/blocks/production/pulverizer.png Binary files differdeleted file mode 100644 index 0d5d93a..0000000 --- a/assets/blocks/production/pulverizer.png +++ /dev/null diff --git a/assets/blocks/production/pyratite-mixer.png b/assets/blocks/production/pyratite-mixer.png Binary files differdeleted file mode 100644 index 206a970..0000000 --- a/assets/blocks/production/pyratite-mixer.png +++ /dev/null diff --git a/assets/blocks/production/separator.png b/assets/blocks/production/separator.png Binary files differdeleted file mode 100644 index 7c72cc3..0000000 --- a/assets/blocks/production/separator.png +++ /dev/null diff --git a/assets/blocks/production/silicon-arc-furnace.png b/assets/blocks/production/silicon-arc-furnace.png Binary files differdeleted file mode 100644 index 6d4f0b5..0000000 --- a/assets/blocks/production/silicon-arc-furnace.png +++ /dev/null diff --git a/assets/blocks/production/silicon-crucible.png b/assets/blocks/production/silicon-crucible.png Binary files differdeleted file mode 100644 index 2efe121..0000000 --- a/assets/blocks/production/silicon-crucible.png +++ /dev/null diff --git a/assets/blocks/production/silicon-smelter.png b/assets/blocks/production/silicon-smelter.png Binary files differdeleted file mode 100644 index 4cb470e..0000000 --- a/assets/blocks/production/silicon-smelter.png +++ /dev/null diff --git a/assets/blocks/production/slag-heater-bottom.png b/assets/blocks/production/slag-heater-bottom.png Binary files differdeleted file mode 100644 index 836d531..0000000 --- a/assets/blocks/production/slag-heater-bottom.png +++ /dev/null diff --git a/assets/blocks/production/slag-heater.png b/assets/blocks/production/slag-heater.png Binary files differdeleted file mode 100644 index 4709577..0000000 --- a/assets/blocks/production/slag-heater.png +++ /dev/null diff --git a/assets/blocks/production/slag-incinerator-liquid.png b/assets/blocks/production/slag-incinerator-liquid.png Binary files differdeleted file mode 100644 index 618be80..0000000 --- a/assets/blocks/production/slag-incinerator-liquid.png +++ /dev/null diff --git a/assets/blocks/production/slag-incinerator.png b/assets/blocks/production/slag-incinerator.png Binary files differdeleted file mode 100644 index 8cb0be7..0000000 --- a/assets/blocks/production/slag-incinerator.png +++ /dev/null diff --git a/assets/blocks/production/spore-press.png b/assets/blocks/production/spore-press.png Binary files differdeleted file mode 100644 index 6d9271c..0000000 --- a/assets/blocks/production/spore-press.png +++ /dev/null diff --git a/assets/blocks/production/surge-crucible-bottom.png b/assets/blocks/production/surge-crucible-bottom.png Binary files differdeleted file mode 100644 index 302d76b..0000000 --- a/assets/blocks/production/surge-crucible-bottom.png +++ /dev/null diff --git a/assets/blocks/production/surge-crucible-liquid.png b/assets/blocks/production/surge-crucible-liquid.png Binary files differdeleted file mode 100644 index e628a34..0000000 --- a/assets/blocks/production/surge-crucible-liquid.png +++ /dev/null diff --git a/assets/blocks/production/surge-crucible.png b/assets/blocks/production/surge-crucible.png Binary files differdeleted file mode 100644 index 33af200..0000000 --- a/assets/blocks/production/surge-crucible.png +++ /dev/null diff --git a/assets/blocks/production/surge-smelter.png b/assets/blocks/production/surge-smelter.png Binary files differdeleted file mode 100644 index a0f863b..0000000 --- a/assets/blocks/production/surge-smelter.png +++ /dev/null diff --git a/assets/blocks/storage/core-acropolis-team.png b/assets/blocks/storage/core-acropolis-team.png Binary files differdeleted file mode 100644 index 1c7a3f0..0000000 --- a/assets/blocks/storage/core-acropolis-team.png +++ /dev/null diff --git a/assets/blocks/storage/core-acropolis.png b/assets/blocks/storage/core-acropolis.png Binary files differdeleted file mode 100644 index 5ad4e3e..0000000 --- a/assets/blocks/storage/core-acropolis.png +++ /dev/null diff --git a/assets/blocks/storage/core-bastion-team.png b/assets/blocks/storage/core-bastion-team.png Binary files differdeleted file mode 100644 index 8848dff..0000000 --- a/assets/blocks/storage/core-bastion-team.png +++ /dev/null diff --git a/assets/blocks/storage/core-bastion.png b/assets/blocks/storage/core-bastion.png Binary files differdeleted file mode 100644 index 0e8f6e5..0000000 --- a/assets/blocks/storage/core-bastion.png +++ /dev/null diff --git a/assets/blocks/storage/core-citadel-team.png b/assets/blocks/storage/core-citadel-team.png Binary files differdeleted file mode 100644 index 1df2773..0000000 --- a/assets/blocks/storage/core-citadel-team.png +++ /dev/null diff --git a/assets/blocks/storage/core-citadel.png b/assets/blocks/storage/core-citadel.png Binary files differdeleted file mode 100644 index 9451f70..0000000 --- a/assets/blocks/storage/core-citadel.png +++ /dev/null diff --git a/assets/blocks/storage/core-foundation-team.png b/assets/blocks/storage/core-foundation-team.png Binary files differdeleted file mode 100644 index d8a5374..0000000 --- a/assets/blocks/storage/core-foundation-team.png +++ /dev/null diff --git a/assets/blocks/storage/core-foundation.png b/assets/blocks/storage/core-foundation.png Binary files differdeleted file mode 100644 index 8c02e4f..0000000 --- a/assets/blocks/storage/core-foundation.png +++ /dev/null diff --git a/assets/blocks/storage/core-nucleus-team.png b/assets/blocks/storage/core-nucleus-team.png Binary files differdeleted file mode 100644 index 0b9533d..0000000 --- a/assets/blocks/storage/core-nucleus-team.png +++ /dev/null diff --git a/assets/blocks/storage/core-shard-team.png b/assets/blocks/storage/core-shard-team.png Binary files differdeleted file mode 100644 index d8cef0e..0000000 --- a/assets/blocks/storage/core-shard-team.png +++ /dev/null diff --git a/assets/blocks/storage/core-shard.png b/assets/blocks/storage/core-shard.png Binary files differdeleted file mode 100644 index f6ce140..0000000 --- a/assets/blocks/storage/core-shard.png +++ /dev/null diff --git a/assets/blocks/storage/reinforced-container-team.png b/assets/blocks/storage/reinforced-container-team.png Binary files differdeleted file mode 100644 index 9283811..0000000 --- a/assets/blocks/storage/reinforced-container-team.png +++ /dev/null diff --git a/assets/blocks/storage/reinforced-container.png b/assets/blocks/storage/reinforced-container.png Binary files differdeleted file mode 100644 index 2c52768..0000000 --- a/assets/blocks/storage/reinforced-container.png +++ /dev/null diff --git a/assets/blocks/storage/reinforced-vault.png b/assets/blocks/storage/reinforced-vault.png Binary files differdeleted file mode 100644 index 82afb8c..0000000 --- a/assets/blocks/storage/reinforced-vault.png +++ /dev/null diff --git a/assets/blocks/storage/unloader-center.png b/assets/blocks/storage/unloader-center.png Binary files differdeleted file mode 100644 index 847b884..0000000 --- a/assets/blocks/storage/unloader-center.png +++ /dev/null diff --git a/assets/blocks/storage/unloader.png b/assets/blocks/storage/unloader.png Binary files differdeleted file mode 100644 index e5f891e..0000000 --- a/assets/blocks/storage/unloader.png +++ /dev/null diff --git a/assets/blocks/storage/vault-team.png b/assets/blocks/storage/vault-team.png Binary files differdeleted file mode 100644 index be63faf..0000000 --- a/assets/blocks/storage/vault-team.png +++ /dev/null diff --git a/assets/blocks/turrets/afflict.png b/assets/blocks/turrets/afflict.png Binary files differdeleted file mode 100644 index 7b37826..0000000 --- a/assets/blocks/turrets/afflict.png +++ /dev/null diff --git a/assets/blocks/turrets/arc.png b/assets/blocks/turrets/arc.png Binary files differdeleted file mode 100644 index be61590..0000000 --- a/assets/blocks/turrets/arc.png +++ /dev/null diff --git a/assets/blocks/turrets/breach.png b/assets/blocks/turrets/breach.png Binary files differdeleted file mode 100644 index e9a490c..0000000 --- a/assets/blocks/turrets/breach.png +++ /dev/null diff --git a/assets/blocks/turrets/cyclone.png b/assets/blocks/turrets/cyclone.png Binary files differdeleted file mode 100644 index 96cabd4..0000000 --- a/assets/blocks/turrets/cyclone.png +++ /dev/null diff --git a/assets/blocks/turrets/diffuse.png b/assets/blocks/turrets/diffuse.png Binary files differdeleted file mode 100644 index 3475747..0000000 --- a/assets/blocks/turrets/diffuse.png +++ /dev/null diff --git a/assets/blocks/turrets/disperse.png b/assets/blocks/turrets/disperse.png Binary files differdeleted file mode 100644 index 641ae4b..0000000 --- a/assets/blocks/turrets/disperse.png +++ /dev/null diff --git a/assets/blocks/turrets/duo.png b/assets/blocks/turrets/duo.png Binary files differdeleted file mode 100644 index 2f7e385..0000000 --- a/assets/blocks/turrets/duo.png +++ /dev/null diff --git a/assets/blocks/turrets/foreshadow.png b/assets/blocks/turrets/foreshadow.png Binary files differdeleted file mode 100644 index 381a2fe..0000000 --- a/assets/blocks/turrets/foreshadow.png +++ /dev/null diff --git a/assets/blocks/turrets/fuse.png b/assets/blocks/turrets/fuse.png Binary files differdeleted file mode 100644 index bb9a0b6..0000000 --- a/assets/blocks/turrets/fuse.png +++ /dev/null diff --git a/assets/blocks/turrets/hail.png b/assets/blocks/turrets/hail.png Binary files differdeleted file mode 100644 index 8250d37..0000000 --- a/assets/blocks/turrets/hail.png +++ /dev/null diff --git a/assets/blocks/turrets/lancer.png b/assets/blocks/turrets/lancer.png Binary files differdeleted file mode 100644 index 9fff5ba..0000000 --- a/assets/blocks/turrets/lancer.png +++ /dev/null diff --git a/assets/blocks/turrets/lustre.png b/assets/blocks/turrets/lustre.png Binary files differdeleted file mode 100644 index e436f52..0000000 --- a/assets/blocks/turrets/lustre.png +++ /dev/null diff --git a/assets/blocks/turrets/malign.png b/assets/blocks/turrets/malign.png Binary files differdeleted file mode 100644 index 03e692f..0000000 --- a/assets/blocks/turrets/malign.png +++ /dev/null diff --git a/assets/blocks/turrets/meltdown.png b/assets/blocks/turrets/meltdown.png Binary files differdeleted file mode 100644 index d63c8fb..0000000 --- a/assets/blocks/turrets/meltdown.png +++ /dev/null diff --git a/assets/blocks/turrets/parallax.png b/assets/blocks/turrets/parallax.png Binary files differdeleted file mode 100644 index 4d581dd..0000000 --- a/assets/blocks/turrets/parallax.png +++ /dev/null diff --git a/assets/blocks/turrets/ripple.png b/assets/blocks/turrets/ripple.png Binary files differdeleted file mode 100644 index 507f0b6..0000000 --- a/assets/blocks/turrets/ripple.png +++ /dev/null diff --git a/assets/blocks/turrets/salvo.png b/assets/blocks/turrets/salvo.png Binary files differdeleted file mode 100644 index 09136e0..0000000 --- a/assets/blocks/turrets/salvo.png +++ /dev/null diff --git a/assets/blocks/turrets/scathe.png b/assets/blocks/turrets/scathe.png Binary files differdeleted file mode 100644 index 897532a..0000000 --- a/assets/blocks/turrets/scathe.png +++ /dev/null diff --git a/assets/blocks/turrets/scatter.png b/assets/blocks/turrets/scatter.png Binary files differdeleted file mode 100644 index 1cc620a..0000000 --- a/assets/blocks/turrets/scatter.png +++ /dev/null diff --git a/assets/blocks/turrets/scorch.png b/assets/blocks/turrets/scorch.png Binary files differdeleted file mode 100644 index 473e8d3..0000000 --- a/assets/blocks/turrets/scorch.png +++ /dev/null diff --git a/assets/blocks/turrets/segment.png b/assets/blocks/turrets/segment.png Binary files differdeleted file mode 100644 index c34929c..0000000 --- a/assets/blocks/turrets/segment.png +++ /dev/null diff --git a/assets/blocks/turrets/smite.png b/assets/blocks/turrets/smite.png Binary files differdeleted file mode 100644 index 3402149..0000000 --- a/assets/blocks/turrets/smite.png +++ /dev/null diff --git a/assets/blocks/turrets/spectre.png b/assets/blocks/turrets/spectre.png Binary files differdeleted file mode 100644 index 811ef6e..0000000 --- a/assets/blocks/turrets/spectre.png +++ /dev/null diff --git a/assets/blocks/turrets/sublimate.png b/assets/blocks/turrets/sublimate.png Binary files differdeleted file mode 100644 index 5155235..0000000 --- a/assets/blocks/turrets/sublimate.png +++ /dev/null diff --git a/assets/blocks/turrets/swarmer.png b/assets/blocks/turrets/swarmer.png Binary files differdeleted file mode 100644 index 1680beb..0000000 --- a/assets/blocks/turrets/swarmer.png +++ /dev/null diff --git a/assets/blocks/turrets/titan.png b/assets/blocks/turrets/titan.png Binary files differdeleted file mode 100644 index e781843..0000000 --- a/assets/blocks/turrets/titan.png +++ /dev/null diff --git a/assets/blocks/turrets/tsunami.png b/assets/blocks/turrets/tsunami.png Binary files differdeleted file mode 100644 index 6f72793..0000000 --- a/assets/blocks/turrets/tsunami.png +++ /dev/null diff --git a/assets/blocks/turrets/wave.png b/assets/blocks/turrets/wave.png Binary files differdeleted file mode 100644 index 360994d..0000000 --- a/assets/blocks/turrets/wave.png +++ /dev/null diff --git a/assets/blocks/units/additive-reconstructor-top.png b/assets/blocks/units/additive-reconstructor-top.png Binary files differdeleted file mode 100644 index 235e672..0000000 --- a/assets/blocks/units/additive-reconstructor-top.png +++ /dev/null diff --git a/assets/blocks/units/additive-reconstructor.png b/assets/blocks/units/additive-reconstructor.png Binary files differdeleted file mode 100644 index fbc893b..0000000 --- a/assets/blocks/units/additive-reconstructor.png +++ /dev/null diff --git a/assets/blocks/units/air-factory.png b/assets/blocks/units/air-factory.png Binary files differdeleted file mode 100644 index 0644c21..0000000 --- a/assets/blocks/units/air-factory.png +++ /dev/null diff --git a/assets/blocks/units/basic-assembler-module-side1.png b/assets/blocks/units/basic-assembler-module-side1.png Binary files differdeleted file mode 100644 index 2bc2f85..0000000 --- a/assets/blocks/units/basic-assembler-module-side1.png +++ /dev/null diff --git a/assets/blocks/units/basic-assembler-module-side2.png b/assets/blocks/units/basic-assembler-module-side2.png Binary files differdeleted file mode 100644 index 6ac7279..0000000 --- a/assets/blocks/units/basic-assembler-module-side2.png +++ /dev/null diff --git a/assets/blocks/units/basic-assembler-module.png b/assets/blocks/units/basic-assembler-module.png Binary files differdeleted file mode 100644 index 328c982..0000000 --- a/assets/blocks/units/basic-assembler-module.png +++ /dev/null diff --git a/assets/blocks/units/exponential-reconstructor-top.png b/assets/blocks/units/exponential-reconstructor-top.png Binary files differdeleted file mode 100644 index fb14b35..0000000 --- a/assets/blocks/units/exponential-reconstructor-top.png +++ /dev/null diff --git a/assets/blocks/units/exponential-reconstructor.png b/assets/blocks/units/exponential-reconstructor.png Binary files differdeleted file mode 100644 index d448f39..0000000 --- a/assets/blocks/units/exponential-reconstructor.png +++ /dev/null diff --git a/assets/blocks/units/ground-factory.png b/assets/blocks/units/ground-factory.png Binary files differdeleted file mode 100644 index 4897ec4..0000000 --- a/assets/blocks/units/ground-factory.png +++ /dev/null diff --git a/assets/blocks/units/mech-assembler-side1.png b/assets/blocks/units/mech-assembler-side1.png Binary files differdeleted file mode 100644 index bfa591c..0000000 --- a/assets/blocks/units/mech-assembler-side1.png +++ /dev/null diff --git a/assets/blocks/units/mech-assembler-side2.png b/assets/blocks/units/mech-assembler-side2.png Binary files differdeleted file mode 100644 index 9cd4cde..0000000 --- a/assets/blocks/units/mech-assembler-side2.png +++ /dev/null diff --git a/assets/blocks/units/mech-assembler-top.png b/assets/blocks/units/mech-assembler-top.png Binary files differdeleted file mode 100644 index eaeb699..0000000 --- a/assets/blocks/units/mech-assembler-top.png +++ /dev/null diff --git a/assets/blocks/units/mech-assembler.png b/assets/blocks/units/mech-assembler.png Binary files differdeleted file mode 100644 index d49f5a2..0000000 --- a/assets/blocks/units/mech-assembler.png +++ /dev/null diff --git a/assets/blocks/units/mech-fabricator-top.png b/assets/blocks/units/mech-fabricator-top.png Binary files differdeleted file mode 100644 index d4e4d62..0000000 --- a/assets/blocks/units/mech-fabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/mech-fabricator.png b/assets/blocks/units/mech-fabricator.png Binary files differdeleted file mode 100644 index 2556a96..0000000 --- a/assets/blocks/units/mech-fabricator.png +++ /dev/null diff --git a/assets/blocks/units/mech-refabricator-top.png b/assets/blocks/units/mech-refabricator-top.png Binary files differdeleted file mode 100644 index 48446c0..0000000 --- a/assets/blocks/units/mech-refabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/mech-refabricator.png b/assets/blocks/units/mech-refabricator.png Binary files differdeleted file mode 100644 index 5d89f8f..0000000 --- a/assets/blocks/units/mech-refabricator.png +++ /dev/null diff --git a/assets/blocks/units/multiplicative-reconstructor-top.png b/assets/blocks/units/multiplicative-reconstructor-top.png Binary files differdeleted file mode 100644 index e319530..0000000 --- a/assets/blocks/units/multiplicative-reconstructor-top.png +++ /dev/null diff --git a/assets/blocks/units/multiplicative-reconstructor.png b/assets/blocks/units/multiplicative-reconstructor.png Binary files differdeleted file mode 100644 index 5ea5f9f..0000000 --- a/assets/blocks/units/multiplicative-reconstructor.png +++ /dev/null diff --git a/assets/blocks/units/naval-factory.png b/assets/blocks/units/naval-factory.png Binary files differdeleted file mode 100644 index f022ba2..0000000 --- a/assets/blocks/units/naval-factory.png +++ /dev/null diff --git a/assets/blocks/units/prime-refabricator-top.png b/assets/blocks/units/prime-refabricator-top.png Binary files differdeleted file mode 100644 index 675639a..0000000 --- a/assets/blocks/units/prime-refabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/prime-refabricator.png b/assets/blocks/units/prime-refabricator.png Binary files differdeleted file mode 100644 index d48e63c..0000000 --- a/assets/blocks/units/prime-refabricator.png +++ /dev/null diff --git a/assets/blocks/units/repair-point.png b/assets/blocks/units/repair-point.png Binary files differdeleted file mode 100644 index 1f81c2c..0000000 --- a/assets/blocks/units/repair-point.png +++ /dev/null diff --git a/assets/blocks/units/repair-turret.png b/assets/blocks/units/repair-turret.png Binary files differdeleted file mode 100644 index f410dbf..0000000 --- a/assets/blocks/units/repair-turret.png +++ /dev/null diff --git a/assets/blocks/units/ship-assembler-side1.png b/assets/blocks/units/ship-assembler-side1.png Binary files differdeleted file mode 100644 index ec57520..0000000 --- a/assets/blocks/units/ship-assembler-side1.png +++ /dev/null diff --git a/assets/blocks/units/ship-assembler-side2.png b/assets/blocks/units/ship-assembler-side2.png Binary files differdeleted file mode 100644 index 5bac81c..0000000 --- a/assets/blocks/units/ship-assembler-side2.png +++ /dev/null diff --git a/assets/blocks/units/ship-assembler-top.png b/assets/blocks/units/ship-assembler-top.png Binary files differdeleted file mode 100644 index c055289..0000000 --- a/assets/blocks/units/ship-assembler-top.png +++ /dev/null diff --git a/assets/blocks/units/ship-assembler.png b/assets/blocks/units/ship-assembler.png Binary files differdeleted file mode 100644 index 1617c27..0000000 --- a/assets/blocks/units/ship-assembler.png +++ /dev/null diff --git a/assets/blocks/units/ship-fabricator-top.png b/assets/blocks/units/ship-fabricator-top.png Binary files differdeleted file mode 100644 index b120238..0000000 --- a/assets/blocks/units/ship-fabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/ship-fabricator.png b/assets/blocks/units/ship-fabricator.png Binary files differdeleted file mode 100644 index 3f02145..0000000 --- a/assets/blocks/units/ship-fabricator.png +++ /dev/null diff --git a/assets/blocks/units/ship-refabricator-top.png b/assets/blocks/units/ship-refabricator-top.png Binary files differdeleted file mode 100644 index aa8cc85..0000000 --- a/assets/blocks/units/ship-refabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/ship-refabricator.png b/assets/blocks/units/ship-refabricator.png Binary files differdeleted file mode 100644 index 1c921a4..0000000 --- a/assets/blocks/units/ship-refabricator.png +++ /dev/null diff --git a/assets/blocks/units/tank-assembler-side1.png b/assets/blocks/units/tank-assembler-side1.png Binary files differdeleted file mode 100644 index 6ea0859..0000000 --- a/assets/blocks/units/tank-assembler-side1.png +++ /dev/null diff --git a/assets/blocks/units/tank-assembler-side2.png b/assets/blocks/units/tank-assembler-side2.png Binary files differdeleted file mode 100644 index c549831..0000000 --- a/assets/blocks/units/tank-assembler-side2.png +++ /dev/null diff --git a/assets/blocks/units/tank-assembler-top.png b/assets/blocks/units/tank-assembler-top.png Binary files differdeleted file mode 100644 index 1478f2c..0000000 --- a/assets/blocks/units/tank-assembler-top.png +++ /dev/null diff --git a/assets/blocks/units/tank-assembler.png b/assets/blocks/units/tank-assembler.png Binary files differdeleted file mode 100644 index 74e2017..0000000 --- a/assets/blocks/units/tank-assembler.png +++ /dev/null diff --git a/assets/blocks/units/tank-fabricator-top.png b/assets/blocks/units/tank-fabricator-top.png Binary files differdeleted file mode 100644 index 18ef34f..0000000 --- a/assets/blocks/units/tank-fabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/tank-fabricator.png b/assets/blocks/units/tank-fabricator.png Binary files differdeleted file mode 100644 index 91eec5d..0000000 --- a/assets/blocks/units/tank-fabricator.png +++ /dev/null diff --git a/assets/blocks/units/tank-refabricator-top.png b/assets/blocks/units/tank-refabricator-top.png Binary files differdeleted file mode 100644 index f57933e..0000000 --- a/assets/blocks/units/tank-refabricator-top.png +++ /dev/null diff --git a/assets/blocks/units/tank-refabricator.png b/assets/blocks/units/tank-refabricator.png Binary files differdeleted file mode 100644 index 3d73664..0000000 --- a/assets/blocks/units/tank-refabricator.png +++ /dev/null diff --git a/assets/blocks/units/tetrative-reconstructor-top.png b/assets/blocks/units/tetrative-reconstructor-top.png Binary files differdeleted file mode 100644 index 9db3308..0000000 --- a/assets/blocks/units/tetrative-reconstructor-top.png +++ /dev/null diff --git a/assets/blocks/units/tetrative-reconstructor.png b/assets/blocks/units/tetrative-reconstructor.png Binary files differdeleted file mode 100644 index 391f483..0000000 --- a/assets/blocks/units/tetrative-reconstructor.png +++ /dev/null diff --git a/assets/blocks/units/unit-cargo-loader.png b/assets/blocks/units/unit-cargo-loader.png Binary files differdeleted file mode 100644 index 6b8de38..0000000 --- a/assets/blocks/units/unit-cargo-loader.png +++ /dev/null diff --git a/assets/blocks/units/unit-repair-tower.png b/assets/blocks/units/unit-repair-tower.png Binary files differdeleted file mode 100644 index 59530d8..0000000 --- a/assets/blocks/units/unit-repair-tower.png +++ /dev/null diff --git a/assets/blocks/walls/beryllium-wall-large.png b/assets/blocks/walls/beryllium-wall-large.png Binary files differdeleted file mode 100644 index 6280f13..0000000 --- a/assets/blocks/walls/beryllium-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/beryllium-wall.png b/assets/blocks/walls/beryllium-wall.png Binary files differdeleted file mode 100644 index 575bfe0..0000000 --- a/assets/blocks/walls/beryllium-wall.png +++ /dev/null diff --git a/assets/blocks/walls/blast-door-open.png b/assets/blocks/walls/blast-door-open.png Binary files differdeleted file mode 100644 index ba18d5a..0000000 --- a/assets/blocks/walls/blast-door-open.png +++ /dev/null diff --git a/assets/blocks/walls/blast-door.png b/assets/blocks/walls/blast-door.png Binary files differdeleted file mode 100644 index 088eed5..0000000 --- a/assets/blocks/walls/blast-door.png +++ /dev/null diff --git a/assets/blocks/walls/carbide-wall-large.png b/assets/blocks/walls/carbide-wall-large.png Binary files differdeleted file mode 100644 index 959b005..0000000 --- a/assets/blocks/walls/carbide-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/carbide-wall.png b/assets/blocks/walls/carbide-wall.png Binary files differdeleted file mode 100644 index 98ea5f4..0000000 --- a/assets/blocks/walls/carbide-wall.png +++ /dev/null diff --git a/assets/blocks/walls/copper-wall.png b/assets/blocks/walls/copper-wall.png Binary files differdeleted file mode 100644 index 04d0cf8..0000000 --- a/assets/blocks/walls/copper-wall.png +++ /dev/null diff --git a/assets/blocks/walls/door-large-open.png b/assets/blocks/walls/door-large-open.png Binary files differdeleted file mode 100644 index bd1a2b1..0000000 --- a/assets/blocks/walls/door-large-open.png +++ /dev/null diff --git a/assets/blocks/walls/door-large.png b/assets/blocks/walls/door-large.png Binary files differdeleted file mode 100644 index 3527334..0000000 --- a/assets/blocks/walls/door-large.png +++ /dev/null diff --git a/assets/blocks/walls/door-open.png b/assets/blocks/walls/door-open.png Binary files differdeleted file mode 100644 index 78e5708..0000000 --- a/assets/blocks/walls/door-open.png +++ /dev/null diff --git a/assets/blocks/walls/door.png b/assets/blocks/walls/door.png Binary files differdeleted file mode 100644 index 63d2431..0000000 --- a/assets/blocks/walls/door.png +++ /dev/null diff --git a/assets/blocks/walls/phase-wall-large.png b/assets/blocks/walls/phase-wall-large.png Binary files differdeleted file mode 100644 index c571315..0000000 --- a/assets/blocks/walls/phase-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/phase-wall.png b/assets/blocks/walls/phase-wall.png Binary files differdeleted file mode 100644 index ffd84f0..0000000 --- a/assets/blocks/walls/phase-wall.png +++ /dev/null diff --git a/assets/blocks/walls/plastanium-wall-large.png b/assets/blocks/walls/plastanium-wall-large.png Binary files differdeleted file mode 100644 index 3c61d22..0000000 --- a/assets/blocks/walls/plastanium-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/plastanium-wall.png b/assets/blocks/walls/plastanium-wall.png Binary files differdeleted file mode 100644 index 2278aa3..0000000 --- a/assets/blocks/walls/plastanium-wall.png +++ /dev/null diff --git a/assets/blocks/walls/reinforced-surge-wall-large.png b/assets/blocks/walls/reinforced-surge-wall-large.png Binary files differdeleted file mode 100644 index 626dc9e..0000000 --- a/assets/blocks/walls/reinforced-surge-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/reinforced-surge-wall.png b/assets/blocks/walls/reinforced-surge-wall.png Binary files differdeleted file mode 100644 index 2268733..0000000 --- a/assets/blocks/walls/reinforced-surge-wall.png +++ /dev/null diff --git a/assets/blocks/walls/scrap-wall-huge.png b/assets/blocks/walls/scrap-wall-huge.png Binary files differdeleted file mode 100644 index d5c5822..0000000 --- a/assets/blocks/walls/scrap-wall-huge.png +++ /dev/null diff --git a/assets/blocks/walls/scrap-wall-large.png b/assets/blocks/walls/scrap-wall-large.png Binary files differdeleted file mode 100644 index 5785da4..0000000 --- a/assets/blocks/walls/scrap-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/scrap-wall.png b/assets/blocks/walls/scrap-wall.png Binary files differdeleted file mode 100644 index 49ac797..0000000 --- a/assets/blocks/walls/scrap-wall.png +++ /dev/null diff --git a/assets/blocks/walls/surge-wall-large.png b/assets/blocks/walls/surge-wall-large.png Binary files differdeleted file mode 100644 index 6ecdbfa..0000000 --- a/assets/blocks/walls/surge-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/surge-wall.png b/assets/blocks/walls/surge-wall.png Binary files differdeleted file mode 100644 index 5a24918..0000000 --- a/assets/blocks/walls/surge-wall.png +++ /dev/null diff --git a/assets/blocks/walls/thorium-wall.png b/assets/blocks/walls/thorium-wall.png Binary files differdeleted file mode 100644 index 6e10b09..0000000 --- a/assets/blocks/walls/thorium-wall.png +++ /dev/null diff --git a/assets/blocks/walls/thruster-top.png b/assets/blocks/walls/thruster-top.png Binary files differdeleted file mode 100644 index 4b8e315..0000000 --- a/assets/blocks/walls/thruster-top.png +++ /dev/null diff --git a/assets/blocks/walls/titanium-wall.png b/assets/blocks/walls/titanium-wall.png Binary files differdeleted file mode 100644 index d712b42..0000000 --- a/assets/blocks/walls/titanium-wall.png +++ /dev/null diff --git a/assets/blocks/walls/tungsten-wall-large.png b/assets/blocks/walls/tungsten-wall-large.png Binary files differdeleted file mode 100644 index 8f10e22..0000000 --- a/assets/blocks/walls/tungsten-wall-large.png +++ /dev/null diff --git a/assets/blocks/walls/tungsten-wall.png b/assets/blocks/walls/tungsten-wall.png Binary files differdeleted file mode 100644 index d8d7615..0000000 --- a/assets/blocks/walls/tungsten-wall.png +++ /dev/null diff --git a/build.rs b/build.rs deleted file mode 100644 index 94230a4..0000000 --- a/build.rs +++ /dev/null @@ -1,115 +0,0 @@ -#![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/lemu/.gitignore b/lemu/.gitignore new file mode 100644 index 0000000..53739ff --- /dev/null +++ b/lemu/.gitignore @@ -0,0 +1 @@ +image*.png diff --git a/lemu/Cargo.toml b/lemu/Cargo.toml new file mode 100644 index 0000000..551d41f --- /dev/null +++ b/lemu/Cargo.toml @@ -0,0 +1,36 @@ +[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 new file mode 100644 index 0000000..8c33164 --- /dev/null +++ b/lemu/LICENSE @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..34044f9 --- /dev/null +++ b/lemu/README.md @@ -0,0 +1,11 @@ +# 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 new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/lemu/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly" diff --git a/lemu/rustfmt.toml b/lemu/rustfmt.toml new file mode 100644 index 0000000..d4d3d50 --- /dev/null +++ b/lemu/rustfmt.toml @@ -0,0 +1 @@ +version = "Two"
\ No newline at end of file diff --git a/lemu/speed.mlog b/lemu/speed.mlog new file mode 100644 index 0000000..3931523 --- /dev/null +++ b/lemu/speed.mlog @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..d0a53ec --- /dev/null +++ b/lemu/src/celliterate.mlog @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..b57cb55 --- /dev/null +++ b/lemu/src/code.rs @@ -0,0 +1,62 @@ +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 new file mode 100644 index 0000000..e23f23b --- /dev/null +++ b/lemu/src/debug/info.rs @@ -0,0 +1,58 @@ +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 new file mode 100644 index 0000000..4d7ba0a --- /dev/null +++ b/lemu/src/debug/mod.rs @@ -0,0 +1,24 @@ +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 new file mode 100644 index 0000000..243da57 --- /dev/null +++ b/lemu/src/debug/printable.rs @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..83bec1e --- /dev/null +++ b/lemu/src/executor/builder.rs @@ -0,0 +1,159 @@ +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 new file mode 100644 index 0000000..0989bc0 --- /dev/null +++ b/lemu/src/executor/mod.rs @@ -0,0 +1,320 @@ +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 new file mode 100644 index 0000000..6c09c3e --- /dev/null +++ b/lemu/src/fib.mlog @@ -0,0 +1,15 @@ + 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 new file mode 100644 index 0000000..3aac8c4 --- /dev/null +++ b/lemu/src/hello.mlog @@ -0,0 +1,2 @@ +print "hello world" +stop diff --git a/lemu/src/instructions/cop.rs b/lemu/src/instructions/cop.rs new file mode 100644 index 0000000..0079bfa --- /dev/null +++ b/lemu/src/instructions/cop.rs @@ -0,0 +1,40 @@ +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 new file mode 100644 index 0000000..1644da0 --- /dev/null +++ b/lemu/src/instructions/draw.rs @@ -0,0 +1,601 @@ +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 new file mode 100644 index 0000000..22d1b52 --- /dev/null +++ b/lemu/src/instructions/io.rs @@ -0,0 +1,90 @@ +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 new file mode 100644 index 0000000..6724ed1 --- /dev/null +++ b/lemu/src/instructions/mod.rs @@ -0,0 +1,500 @@ +//! 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 new file mode 100644 index 0000000..715cd3d --- /dev/null +++ b/lemu/src/instructions/mop.rs @@ -0,0 +1,79 @@ +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 new file mode 100644 index 0000000..7751736 --- /dev/null +++ b/lemu/src/instructions/mop2.rs @@ -0,0 +1,140 @@ +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 new file mode 100644 index 0000000..e6b85c6 --- /dev/null +++ b/lemu/src/lexer.rs @@ -0,0 +1,213 @@ +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 new file mode 100644 index 0000000..25d571b --- /dev/null +++ b/lemu/src/lib.rs @@ -0,0 +1,185 @@ +//! 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 new file mode 100644 index 0000000..36eb84f --- /dev/null +++ b/lemu/src/main.rs @@ -0,0 +1,34 @@ +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 new file mode 100644 index 0000000..bd9ca52 --- /dev/null +++ b/lemu/src/memory.rs @@ -0,0 +1,185 @@ +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 new file mode 100644 index 0000000..120ae6d --- /dev/null +++ b/lemu/src/numbers.mlog @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..c2b053b --- /dev/null +++ b/lemu/src/parser/error.rs @@ -0,0 +1,442 @@ +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 new file mode 100644 index 0000000..0764189 --- /dev/null +++ b/lemu/src/parser/mod.rs @@ -0,0 +1,856 @@ +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 new file mode 100644 index 0000000..67defe2 --- /dev/null +++ b/lemu/src/primes.mlog @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..7186860 --- /dev/null +++ b/lemu/yes.mlog @@ -0,0 +1,4 @@ +set a 1 +select result notEqual x false a 2 +print result +printflush message1 diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml new file mode 100644 index 0000000..8015603 --- /dev/null +++ b/mindus/Cargo.toml @@ -0,0 +1,69 @@ +[package] +name = "mindus" +version = "5.0.46" +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.1" +base64 = "0.22" +paste = "1.0" +strconv = "0.1" +amap = "0.1" +color-hex = "0.2" +thiserror = "2.0" +bobbin-bits = "0.1" +enum_dispatch = "0.3" +phf = { version = "0.14", features = ["macros"] } +fimg = { version = "0.4.56", features = [ + "scale", + "blur", + "save", +], default-features = false } +atools = "0.1.11" +either = "1.17.0" +implicit-fn = "0.1.0" +lower = "0.2.1" +car = "0.1.4" + +[features] +bin = ["fimg/save"] +square = [] +default = ["bin"] + +[build-dependencies] +fimg = { version = "0.4.56", features = [ + "scale", + "blur", + "save", +], default-features = false } +walkdir = "2" +rand = "0.10.2" + +[[bin]] +name = "mindus" +doc = false +required-features = ["bin"] +path = "src/exe/mod.rs" + +[dev-dependencies] +diff = "0.1" + +[profile.release] +debug = 2 +opt-level = 3 +lto = "thin" +incremental = true + +[package.metadata.docs.rs] +rustdoc-args = ["--generate-link-to-definition"] diff --git a/LICENSE.txt b/mindus/LICENSE.txt index f288702..f288702 100644 --- a/LICENSE.txt +++ b/mindus/LICENSE.txt diff --git a/mindus/README.md b/mindus/README.md new file mode 100644 index 0000000..28e1a26 --- /dev/null +++ b/mindus/README.md @@ -0,0 +1,18 @@ +# mindus + + + +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: + + diff --git a/mindus/assets/blocks/autotiles/colored-floor-0.png b/mindus/assets/blocks/autotiles/colored-floor-0.png Binary files differnew file mode 100644 index 0000000..22cba9c --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-0.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-1.png b/mindus/assets/blocks/autotiles/colored-floor-1.png Binary files differnew file mode 100644 index 0000000..496a56f --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-1.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-10.png b/mindus/assets/blocks/autotiles/colored-floor-10.png Binary files differnew file mode 100644 index 0000000..ee8388b --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-10.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-11.png b/mindus/assets/blocks/autotiles/colored-floor-11.png Binary files differnew file mode 100644 index 0000000..a2be8be --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-11.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-12.png b/mindus/assets/blocks/autotiles/colored-floor-12.png Binary files differnew file mode 100644 index 0000000..af62702 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-12.png diff --git a/assets/blocks/liquid/conduits/conduit-bottom-2.png b/mindus/assets/blocks/autotiles/colored-floor-13.png Binary files differindex 0d9e7e3..0d9e7e3 100644 --- a/assets/blocks/liquid/conduits/conduit-bottom-2.png +++ b/mindus/assets/blocks/autotiles/colored-floor-13.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-14.png b/mindus/assets/blocks/autotiles/colored-floor-14.png Binary files differnew file mode 100644 index 0000000..2b71568 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-14.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-15.png b/mindus/assets/blocks/autotiles/colored-floor-15.png Binary files differnew file mode 100644 index 0000000..6013abb --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-15.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-16.png b/mindus/assets/blocks/autotiles/colored-floor-16.png Binary files differnew file mode 100644 index 0000000..2e03b49 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-16.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-17.png b/mindus/assets/blocks/autotiles/colored-floor-17.png Binary files differnew file mode 100644 index 0000000..fc704f0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-17.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-18.png b/mindus/assets/blocks/autotiles/colored-floor-18.png Binary files differnew file mode 100644 index 0000000..9cae9d9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-18.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-19.png b/mindus/assets/blocks/autotiles/colored-floor-19.png Binary files differnew file mode 100644 index 0000000..f27a86f --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-19.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-2.png b/mindus/assets/blocks/autotiles/colored-floor-2.png Binary files differnew file mode 100644 index 0000000..8b2c939 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-2.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-20.png b/mindus/assets/blocks/autotiles/colored-floor-20.png Binary files differnew file mode 100644 index 0000000..45988d0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-20.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-21.png b/mindus/assets/blocks/autotiles/colored-floor-21.png Binary files differnew file mode 100644 index 0000000..67efd86 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-21.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-22.png b/mindus/assets/blocks/autotiles/colored-floor-22.png Binary files differnew file mode 100644 index 0000000..a1ea3c2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-22.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-23.png b/mindus/assets/blocks/autotiles/colored-floor-23.png Binary files differnew file mode 100644 index 0000000..65842ba --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-23.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-24.png b/mindus/assets/blocks/autotiles/colored-floor-24.png Binary files differnew file mode 100644 index 0000000..a870b78 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-24.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-25.png b/mindus/assets/blocks/autotiles/colored-floor-25.png Binary files differnew file mode 100644 index 0000000..cef04bc --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-25.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-26.png b/mindus/assets/blocks/autotiles/colored-floor-26.png Binary files differnew file mode 100644 index 0000000..825af4d --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-26.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-27.png b/mindus/assets/blocks/autotiles/colored-floor-27.png Binary files differnew file mode 100644 index 0000000..49f3705 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-27.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-28.png b/mindus/assets/blocks/autotiles/colored-floor-28.png Binary files differnew file mode 100644 index 0000000..80457c4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-28.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-29.png b/mindus/assets/blocks/autotiles/colored-floor-29.png Binary files differnew file mode 100644 index 0000000..e1a7996 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-29.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-3.png b/mindus/assets/blocks/autotiles/colored-floor-3.png Binary files differnew file mode 100644 index 0000000..8565698 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-3.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-30.png b/mindus/assets/blocks/autotiles/colored-floor-30.png Binary files differnew file mode 100644 index 0000000..11a82b7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-30.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-31.png b/mindus/assets/blocks/autotiles/colored-floor-31.png Binary files differnew file mode 100644 index 0000000..2b7f223 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-31.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-32.png b/mindus/assets/blocks/autotiles/colored-floor-32.png Binary files differnew file mode 100644 index 0000000..63fa0a3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-32.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-33.png b/mindus/assets/blocks/autotiles/colored-floor-33.png Binary files differnew file mode 100644 index 0000000..4e911e5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-33.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-34.png b/mindus/assets/blocks/autotiles/colored-floor-34.png Binary files differnew file mode 100644 index 0000000..7e6965e --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-34.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-35.png b/mindus/assets/blocks/autotiles/colored-floor-35.png Binary files differnew file mode 100644 index 0000000..532bf65 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-35.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-36.png b/mindus/assets/blocks/autotiles/colored-floor-36.png Binary files differnew file mode 100644 index 0000000..22ca968 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-36.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-37.png b/mindus/assets/blocks/autotiles/colored-floor-37.png Binary files differnew file mode 100644 index 0000000..2ecd96d --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-37.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-38.png b/mindus/assets/blocks/autotiles/colored-floor-38.png Binary files differnew file mode 100644 index 0000000..d0b8c0a --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-38.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-39.png b/mindus/assets/blocks/autotiles/colored-floor-39.png Binary files differnew file mode 100644 index 0000000..1b72549 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-39.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-4.png b/mindus/assets/blocks/autotiles/colored-floor-4.png Binary files differnew file mode 100644 index 0000000..caf12f3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-4.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-40.png b/mindus/assets/blocks/autotiles/colored-floor-40.png Binary files differnew file mode 100644 index 0000000..ca27e4f --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-40.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-41.png b/mindus/assets/blocks/autotiles/colored-floor-41.png Binary files differnew file mode 100644 index 0000000..e0cc528 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-41.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-42.png b/mindus/assets/blocks/autotiles/colored-floor-42.png Binary files differnew file mode 100644 index 0000000..d508a2b --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-42.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-43.png b/mindus/assets/blocks/autotiles/colored-floor-43.png Binary files differnew file mode 100644 index 0000000..25d0499 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-43.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-44.png b/mindus/assets/blocks/autotiles/colored-floor-44.png Binary files differnew file mode 100644 index 0000000..52e5881 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-44.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-45.png b/mindus/assets/blocks/autotiles/colored-floor-45.png Binary files differnew file mode 100644 index 0000000..82b0df7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-45.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-46.png b/mindus/assets/blocks/autotiles/colored-floor-46.png Binary files differnew file mode 100644 index 0000000..9afe451 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-46.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-5.png b/mindus/assets/blocks/autotiles/colored-floor-5.png Binary files differnew file mode 100644 index 0000000..01c394c --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-5.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-6.png b/mindus/assets/blocks/autotiles/colored-floor-6.png Binary files differnew file mode 100644 index 0000000..5a87652 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-6.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-7.png b/mindus/assets/blocks/autotiles/colored-floor-7.png Binary files differnew file mode 100644 index 0000000..9b2725a --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-7.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-8.png b/mindus/assets/blocks/autotiles/colored-floor-8.png Binary files differnew file mode 100644 index 0000000..5c55479 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-8.png diff --git a/mindus/assets/blocks/autotiles/colored-floor-9.png b/mindus/assets/blocks/autotiles/colored-floor-9.png Binary files differnew file mode 100644 index 0000000..e60dcad --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-floor-9.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-0.png b/mindus/assets/blocks/autotiles/colored-wall-0.png Binary files differnew file mode 100644 index 0000000..39f5afe --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-0.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-1.png b/mindus/assets/blocks/autotiles/colored-wall-1.png Binary files differnew file mode 100644 index 0000000..2faa0ce --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-1.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-10.png b/mindus/assets/blocks/autotiles/colored-wall-10.png Binary files differnew file mode 100644 index 0000000..ac30b61 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-10.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-11.png b/mindus/assets/blocks/autotiles/colored-wall-11.png Binary files differnew file mode 100644 index 0000000..953f79a --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-11.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-12.png b/mindus/assets/blocks/autotiles/colored-wall-12.png Binary files differnew file mode 100644 index 0000000..2d15a99 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-12.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-13.png b/mindus/assets/blocks/autotiles/colored-wall-13.png Binary files differnew file mode 100644 index 0000000..3f8fe05 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-13.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-14.png b/mindus/assets/blocks/autotiles/colored-wall-14.png Binary files differnew file mode 100644 index 0000000..b024a1e --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-14.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-15.png b/mindus/assets/blocks/autotiles/colored-wall-15.png Binary files differnew file mode 100644 index 0000000..a763093 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-15.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-16.png b/mindus/assets/blocks/autotiles/colored-wall-16.png Binary files differnew file mode 100644 index 0000000..5ab4f5d --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-16.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-17.png b/mindus/assets/blocks/autotiles/colored-wall-17.png Binary files differnew file mode 100644 index 0000000..015096a --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-17.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-18.png b/mindus/assets/blocks/autotiles/colored-wall-18.png Binary files differnew file mode 100644 index 0000000..159f514 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-18.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-19.png b/mindus/assets/blocks/autotiles/colored-wall-19.png Binary files differnew file mode 100644 index 0000000..f5c0b66 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-19.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-2.png b/mindus/assets/blocks/autotiles/colored-wall-2.png Binary files differnew file mode 100644 index 0000000..1637868 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-2.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-20.png b/mindus/assets/blocks/autotiles/colored-wall-20.png Binary files differnew file mode 100644 index 0000000..0acb776 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-20.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-21.png b/mindus/assets/blocks/autotiles/colored-wall-21.png Binary files differnew file mode 100644 index 0000000..eb9ee89 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-21.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-22.png b/mindus/assets/blocks/autotiles/colored-wall-22.png Binary files differnew file mode 100644 index 0000000..57b4256 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-22.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-23.png b/mindus/assets/blocks/autotiles/colored-wall-23.png Binary files differnew file mode 100644 index 0000000..1c68e75 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-23.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-24.png b/mindus/assets/blocks/autotiles/colored-wall-24.png Binary files differnew file mode 100644 index 0000000..85118cb --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-24.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-25.png b/mindus/assets/blocks/autotiles/colored-wall-25.png Binary files differnew file mode 100644 index 0000000..14c7dec --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-25.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-26.png b/mindus/assets/blocks/autotiles/colored-wall-26.png Binary files differnew file mode 100644 index 0000000..30d878f --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-26.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-27.png b/mindus/assets/blocks/autotiles/colored-wall-27.png Binary files differnew file mode 100644 index 0000000..f8aadb1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-27.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-28.png b/mindus/assets/blocks/autotiles/colored-wall-28.png Binary files differnew file mode 100644 index 0000000..8562d0e --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-28.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-29.png b/mindus/assets/blocks/autotiles/colored-wall-29.png Binary files differnew file mode 100644 index 0000000..01db88b --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-29.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-3.png b/mindus/assets/blocks/autotiles/colored-wall-3.png Binary files differnew file mode 100644 index 0000000..be2b548 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-3.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-30.png b/mindus/assets/blocks/autotiles/colored-wall-30.png Binary files differnew file mode 100644 index 0000000..9642c50 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-30.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-31.png b/mindus/assets/blocks/autotiles/colored-wall-31.png Binary files differnew file mode 100644 index 0000000..b620bf7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-31.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-32.png b/mindus/assets/blocks/autotiles/colored-wall-32.png Binary files differnew file mode 100644 index 0000000..a023297 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-32.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-33.png b/mindus/assets/blocks/autotiles/colored-wall-33.png Binary files differnew file mode 100644 index 0000000..07883ad --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-33.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-34.png b/mindus/assets/blocks/autotiles/colored-wall-34.png Binary files differnew file mode 100644 index 0000000..2613d3f --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-34.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-35.png b/mindus/assets/blocks/autotiles/colored-wall-35.png Binary files differnew file mode 100644 index 0000000..889550b --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-35.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-36.png b/mindus/assets/blocks/autotiles/colored-wall-36.png Binary files differnew file mode 100644 index 0000000..adaf0c6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-36.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-37.png b/mindus/assets/blocks/autotiles/colored-wall-37.png Binary files differnew file mode 100644 index 0000000..294c8df --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-37.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-38.png b/mindus/assets/blocks/autotiles/colored-wall-38.png Binary files differnew file mode 100644 index 0000000..3f195d0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-38.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-39.png b/mindus/assets/blocks/autotiles/colored-wall-39.png Binary files differnew file mode 100644 index 0000000..214cea2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-39.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-4.png b/mindus/assets/blocks/autotiles/colored-wall-4.png Binary files differnew file mode 100644 index 0000000..dae6d01 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-4.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-40.png b/mindus/assets/blocks/autotiles/colored-wall-40.png Binary files differnew file mode 100644 index 0000000..2e8e172 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-40.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-41.png b/mindus/assets/blocks/autotiles/colored-wall-41.png Binary files differnew file mode 100644 index 0000000..5935f75 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-41.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-42.png b/mindus/assets/blocks/autotiles/colored-wall-42.png Binary files differnew file mode 100644 index 0000000..2710d91 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-42.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-43.png b/mindus/assets/blocks/autotiles/colored-wall-43.png Binary files differnew file mode 100644 index 0000000..858b978 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-43.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-44.png b/mindus/assets/blocks/autotiles/colored-wall-44.png Binary files differnew file mode 100644 index 0000000..f89cc7b --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-44.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-45.png b/mindus/assets/blocks/autotiles/colored-wall-45.png Binary files differnew file mode 100644 index 0000000..ed8396e --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-45.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-46.png b/mindus/assets/blocks/autotiles/colored-wall-46.png Binary files differnew file mode 100644 index 0000000..ce677fc --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-46.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-5.png b/mindus/assets/blocks/autotiles/colored-wall-5.png Binary files differnew file mode 100644 index 0000000..8375151 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-5.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-6.png b/mindus/assets/blocks/autotiles/colored-wall-6.png Binary files differnew file mode 100644 index 0000000..dad87ce --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-6.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-7.png b/mindus/assets/blocks/autotiles/colored-wall-7.png Binary files differnew file mode 100644 index 0000000..244c1e8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-7.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-8.png b/mindus/assets/blocks/autotiles/colored-wall-8.png Binary files differnew file mode 100644 index 0000000..b5e45d3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-8.png diff --git a/mindus/assets/blocks/autotiles/colored-wall-9.png b/mindus/assets/blocks/autotiles/colored-wall-9.png Binary files differnew file mode 100644 index 0000000..12beb83 --- /dev/null +++ b/mindus/assets/blocks/autotiles/colored-wall-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-0.png b/mindus/assets/blocks/autotiles/metal-tiles-1-0.png Binary files differnew file mode 100644 index 0000000..a83370c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-1.png b/mindus/assets/blocks/autotiles/metal-tiles-1-1.png Binary files differnew file mode 100644 index 0000000..e53a55c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-10.png b/mindus/assets/blocks/autotiles/metal-tiles-1-10.png Binary files differnew file mode 100644 index 0000000..f6547c0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-11.png b/mindus/assets/blocks/autotiles/metal-tiles-1-11.png Binary files differnew file mode 100644 index 0000000..3d93492 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-12.png b/mindus/assets/blocks/autotiles/metal-tiles-1-12.png Binary files differnew file mode 100644 index 0000000..3b79fe6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-13.png b/mindus/assets/blocks/autotiles/metal-tiles-1-13.png Binary files differnew file mode 100644 index 0000000..08176d1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-14.png b/mindus/assets/blocks/autotiles/metal-tiles-1-14.png Binary files differnew file mode 100644 index 0000000..0396648 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-15.png b/mindus/assets/blocks/autotiles/metal-tiles-1-15.png Binary files differnew file mode 100644 index 0000000..a808501 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-16.png b/mindus/assets/blocks/autotiles/metal-tiles-1-16.png Binary files differnew file mode 100644 index 0000000..3ac250e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-17.png b/mindus/assets/blocks/autotiles/metal-tiles-1-17.png Binary files differnew file mode 100644 index 0000000..d7567a9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-18.png b/mindus/assets/blocks/autotiles/metal-tiles-1-18.png Binary files differnew file mode 100644 index 0000000..33297d6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-19.png b/mindus/assets/blocks/autotiles/metal-tiles-1-19.png Binary files differnew file mode 100644 index 0000000..997c4f5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-2.png b/mindus/assets/blocks/autotiles/metal-tiles-1-2.png Binary files differnew file mode 100644 index 0000000..a9dd2e0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-20.png b/mindus/assets/blocks/autotiles/metal-tiles-1-20.png Binary files differnew file mode 100644 index 0000000..461deeb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-21.png b/mindus/assets/blocks/autotiles/metal-tiles-1-21.png Binary files differnew file mode 100644 index 0000000..20e80c5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-22.png b/mindus/assets/blocks/autotiles/metal-tiles-1-22.png Binary files differnew file mode 100644 index 0000000..797209d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-23.png b/mindus/assets/blocks/autotiles/metal-tiles-1-23.png Binary files differnew file mode 100644 index 0000000..7ec5230 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-24.png b/mindus/assets/blocks/autotiles/metal-tiles-1-24.png Binary files differnew file mode 100644 index 0000000..315befc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-25.png b/mindus/assets/blocks/autotiles/metal-tiles-1-25.png Binary files differnew file mode 100644 index 0000000..24b3f24 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-26.png b/mindus/assets/blocks/autotiles/metal-tiles-1-26.png Binary files differnew file mode 100644 index 0000000..551ce8f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-27.png b/mindus/assets/blocks/autotiles/metal-tiles-1-27.png Binary files differnew file mode 100644 index 0000000..a4807ae --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-28.png b/mindus/assets/blocks/autotiles/metal-tiles-1-28.png Binary files differnew file mode 100644 index 0000000..5007413 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-29.png b/mindus/assets/blocks/autotiles/metal-tiles-1-29.png Binary files differnew file mode 100644 index 0000000..be6a420 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-3.png b/mindus/assets/blocks/autotiles/metal-tiles-1-3.png Binary files differnew file mode 100644 index 0000000..3c7e43d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-30.png b/mindus/assets/blocks/autotiles/metal-tiles-1-30.png Binary files differnew file mode 100644 index 0000000..a148a2f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-31.png b/mindus/assets/blocks/autotiles/metal-tiles-1-31.png Binary files differnew file mode 100644 index 0000000..df72b88 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-32.png b/mindus/assets/blocks/autotiles/metal-tiles-1-32.png Binary files differnew file mode 100644 index 0000000..4ec33ff --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-33.png b/mindus/assets/blocks/autotiles/metal-tiles-1-33.png Binary files differnew file mode 100644 index 0000000..3f42613 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-34.png b/mindus/assets/blocks/autotiles/metal-tiles-1-34.png Binary files differnew file mode 100644 index 0000000..2637b42 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-35.png b/mindus/assets/blocks/autotiles/metal-tiles-1-35.png Binary files differnew file mode 100644 index 0000000..9e9e603 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-36.png b/mindus/assets/blocks/autotiles/metal-tiles-1-36.png Binary files differnew file mode 100644 index 0000000..1aec490 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-37.png b/mindus/assets/blocks/autotiles/metal-tiles-1-37.png Binary files differnew file mode 100644 index 0000000..4142f49 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-38.png b/mindus/assets/blocks/autotiles/metal-tiles-1-38.png Binary files differnew file mode 100644 index 0000000..ab35995 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-39.png b/mindus/assets/blocks/autotiles/metal-tiles-1-39.png Binary files differnew file mode 100644 index 0000000..bf3f08d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-4.png b/mindus/assets/blocks/autotiles/metal-tiles-1-4.png Binary files differnew file mode 100644 index 0000000..affdc8e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-40.png b/mindus/assets/blocks/autotiles/metal-tiles-1-40.png Binary files differnew file mode 100644 index 0000000..c87e37d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-41.png b/mindus/assets/blocks/autotiles/metal-tiles-1-41.png Binary files differnew file mode 100644 index 0000000..e69c9f5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-42.png b/mindus/assets/blocks/autotiles/metal-tiles-1-42.png Binary files differnew file mode 100644 index 0000000..b3d26f6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-43.png b/mindus/assets/blocks/autotiles/metal-tiles-1-43.png Binary files differnew file mode 100644 index 0000000..6ce4f3e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-44.png b/mindus/assets/blocks/autotiles/metal-tiles-1-44.png Binary files differnew file mode 100644 index 0000000..091ac7a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-45.png b/mindus/assets/blocks/autotiles/metal-tiles-1-45.png Binary files differnew file mode 100644 index 0000000..d9eb3bf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-46.png b/mindus/assets/blocks/autotiles/metal-tiles-1-46.png Binary files differnew file mode 100644 index 0000000..ab44352 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-5.png b/mindus/assets/blocks/autotiles/metal-tiles-1-5.png Binary files differnew file mode 100644 index 0000000..e65e1ec --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-6.png b/mindus/assets/blocks/autotiles/metal-tiles-1-6.png Binary files differnew file mode 100644 index 0000000..9fab62b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-7.png b/mindus/assets/blocks/autotiles/metal-tiles-1-7.png Binary files differnew file mode 100644 index 0000000..bc34b3a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-8.png b/mindus/assets/blocks/autotiles/metal-tiles-1-8.png Binary files differnew file mode 100644 index 0000000..01a866c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-1-9.png b/mindus/assets/blocks/autotiles/metal-tiles-1-9.png Binary files differnew file mode 100644 index 0000000..41c7fd4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-1-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-0.png b/mindus/assets/blocks/autotiles/metal-tiles-10-0.png Binary files differnew file mode 100644 index 0000000..e9d0477 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-1.png b/mindus/assets/blocks/autotiles/metal-tiles-10-1.png Binary files differnew file mode 100644 index 0000000..a0ca0b1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-10.png b/mindus/assets/blocks/autotiles/metal-tiles-10-10.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-11.png b/mindus/assets/blocks/autotiles/metal-tiles-10-11.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-12.png b/mindus/assets/blocks/autotiles/metal-tiles-10-12.png Binary files differnew file mode 100644 index 0000000..fd71dc5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-13.png b/mindus/assets/blocks/autotiles/metal-tiles-10-13.png Binary files differnew file mode 100644 index 0000000..28ee0f5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-14.png b/mindus/assets/blocks/autotiles/metal-tiles-10-14.png Binary files differnew file mode 100644 index 0000000..98abbdb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-15.png b/mindus/assets/blocks/autotiles/metal-tiles-10-15.png Binary files differnew file mode 100644 index 0000000..57e4557 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-16.png b/mindus/assets/blocks/autotiles/metal-tiles-10-16.png Binary files differnew file mode 100644 index 0000000..906257e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-17.png b/mindus/assets/blocks/autotiles/metal-tiles-10-17.png Binary files differnew file mode 100644 index 0000000..6a52c03 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-18.png b/mindus/assets/blocks/autotiles/metal-tiles-10-18.png Binary files differnew file mode 100644 index 0000000..09b9a12 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-19.png b/mindus/assets/blocks/autotiles/metal-tiles-10-19.png Binary files differnew file mode 100644 index 0000000..29628fd --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-2.png b/mindus/assets/blocks/autotiles/metal-tiles-10-2.png Binary files differnew file mode 100644 index 0000000..a77dafd --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-20.png b/mindus/assets/blocks/autotiles/metal-tiles-10-20.png Binary files differnew file mode 100644 index 0000000..c888c24 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-21.png b/mindus/assets/blocks/autotiles/metal-tiles-10-21.png Binary files differnew file mode 100644 index 0000000..b854935 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-22.png b/mindus/assets/blocks/autotiles/metal-tiles-10-22.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-23.png b/mindus/assets/blocks/autotiles/metal-tiles-10-23.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-24.png b/mindus/assets/blocks/autotiles/metal-tiles-10-24.png Binary files differnew file mode 100644 index 0000000..95364a0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-25.png b/mindus/assets/blocks/autotiles/metal-tiles-10-25.png Binary files differnew file mode 100644 index 0000000..1e4f75c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-26.png b/mindus/assets/blocks/autotiles/metal-tiles-10-26.png Binary files differnew file mode 100644 index 0000000..2bcd97b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-27.png b/mindus/assets/blocks/autotiles/metal-tiles-10-27.png Binary files differnew file mode 100644 index 0000000..032a8af --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-28.png b/mindus/assets/blocks/autotiles/metal-tiles-10-28.png Binary files differnew file mode 100644 index 0000000..1b086b8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-29.png b/mindus/assets/blocks/autotiles/metal-tiles-10-29.png Binary files differnew file mode 100644 index 0000000..82f3e1c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-3.png b/mindus/assets/blocks/autotiles/metal-tiles-10-3.png Binary files differnew file mode 100644 index 0000000..f08b31c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-30.png b/mindus/assets/blocks/autotiles/metal-tiles-10-30.png Binary files differnew file mode 100644 index 0000000..1b086b8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-31.png b/mindus/assets/blocks/autotiles/metal-tiles-10-31.png Binary files differnew file mode 100644 index 0000000..82f3e1c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-32.png b/mindus/assets/blocks/autotiles/metal-tiles-10-32.png Binary files differnew file mode 100644 index 0000000..cf94896 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-33.png b/mindus/assets/blocks/autotiles/metal-tiles-10-33.png Binary files differnew file mode 100644 index 0000000..70f62ab --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-34.png b/mindus/assets/blocks/autotiles/metal-tiles-10-34.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-35.png b/mindus/assets/blocks/autotiles/metal-tiles-10-35.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-36.png b/mindus/assets/blocks/autotiles/metal-tiles-10-36.png Binary files differnew file mode 100644 index 0000000..28baa1d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-37.png b/mindus/assets/blocks/autotiles/metal-tiles-10-37.png Binary files differnew file mode 100644 index 0000000..4bf374c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-38.png b/mindus/assets/blocks/autotiles/metal-tiles-10-38.png Binary files differnew file mode 100644 index 0000000..4e46578 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-39.png b/mindus/assets/blocks/autotiles/metal-tiles-10-39.png Binary files differnew file mode 100644 index 0000000..6e7049e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-4.png b/mindus/assets/blocks/autotiles/metal-tiles-10-4.png Binary files differnew file mode 100644 index 0000000..5cd68ff --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-40.png b/mindus/assets/blocks/autotiles/metal-tiles-10-40.png Binary files differnew file mode 100644 index 0000000..c888c24 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-41.png b/mindus/assets/blocks/autotiles/metal-tiles-10-41.png Binary files differnew file mode 100644 index 0000000..b854935 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-42.png b/mindus/assets/blocks/autotiles/metal-tiles-10-42.png Binary files differnew file mode 100644 index 0000000..c888c24 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-43.png b/mindus/assets/blocks/autotiles/metal-tiles-10-43.png Binary files differnew file mode 100644 index 0000000..b854935 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-44.png b/mindus/assets/blocks/autotiles/metal-tiles-10-44.png Binary files differnew file mode 100644 index 0000000..e888cb2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-45.png b/mindus/assets/blocks/autotiles/metal-tiles-10-45.png Binary files differnew file mode 100644 index 0000000..d384228 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-46.png b/mindus/assets/blocks/autotiles/metal-tiles-10-46.png Binary files differnew file mode 100644 index 0000000..34d1f84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-5.png b/mindus/assets/blocks/autotiles/metal-tiles-10-5.png Binary files differnew file mode 100644 index 0000000..fe97ef0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-6.png b/mindus/assets/blocks/autotiles/metal-tiles-10-6.png Binary files differnew file mode 100644 index 0000000..cae903d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-7.png b/mindus/assets/blocks/autotiles/metal-tiles-10-7.png Binary files differnew file mode 100644 index 0000000..65bb3d9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-8.png b/mindus/assets/blocks/autotiles/metal-tiles-10-8.png Binary files differnew file mode 100644 index 0000000..1b086b8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-10-9.png b/mindus/assets/blocks/autotiles/metal-tiles-10-9.png Binary files differnew file mode 100644 index 0000000..82f3e1c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-10-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-0.png b/mindus/assets/blocks/autotiles/metal-tiles-11-0.png Binary files differnew file mode 100644 index 0000000..bfd2d60 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-1.png b/mindus/assets/blocks/autotiles/metal-tiles-11-1.png Binary files differnew file mode 100644 index 0000000..be39313 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-10.png b/mindus/assets/blocks/autotiles/metal-tiles-11-10.png Binary files differnew file mode 100644 index 0000000..4a3c2a0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-11.png b/mindus/assets/blocks/autotiles/metal-tiles-11-11.png Binary files differnew file mode 100644 index 0000000..d1db125 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-12.png b/mindus/assets/blocks/autotiles/metal-tiles-11-12.png Binary files differnew file mode 100644 index 0000000..3528ba8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-13.png b/mindus/assets/blocks/autotiles/metal-tiles-11-13.png Binary files differnew file mode 100644 index 0000000..65b69e6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-14.png b/mindus/assets/blocks/autotiles/metal-tiles-11-14.png Binary files differnew file mode 100644 index 0000000..832e8f5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-15.png b/mindus/assets/blocks/autotiles/metal-tiles-11-15.png Binary files differnew file mode 100644 index 0000000..ef36066 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-16.png b/mindus/assets/blocks/autotiles/metal-tiles-11-16.png Binary files differnew file mode 100644 index 0000000..cac8453 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-17.png b/mindus/assets/blocks/autotiles/metal-tiles-11-17.png Binary files differnew file mode 100644 index 0000000..8671dd2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-18.png b/mindus/assets/blocks/autotiles/metal-tiles-11-18.png Binary files differnew file mode 100644 index 0000000..305acd1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-19.png b/mindus/assets/blocks/autotiles/metal-tiles-11-19.png Binary files differnew file mode 100644 index 0000000..3e3e186 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-2.png b/mindus/assets/blocks/autotiles/metal-tiles-11-2.png Binary files differnew file mode 100644 index 0000000..73f5b1f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-20.png b/mindus/assets/blocks/autotiles/metal-tiles-11-20.png Binary files differnew file mode 100644 index 0000000..4e35692 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-21.png b/mindus/assets/blocks/autotiles/metal-tiles-11-21.png Binary files differnew file mode 100644 index 0000000..f11d990 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-22.png b/mindus/assets/blocks/autotiles/metal-tiles-11-22.png Binary files differnew file mode 100644 index 0000000..53cb47f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-23.png b/mindus/assets/blocks/autotiles/metal-tiles-11-23.png Binary files differnew file mode 100644 index 0000000..3888c61 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-24.png b/mindus/assets/blocks/autotiles/metal-tiles-11-24.png Binary files differnew file mode 100644 index 0000000..ab4a140 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-25.png b/mindus/assets/blocks/autotiles/metal-tiles-11-25.png Binary files differnew file mode 100644 index 0000000..f3fd1df --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-26.png b/mindus/assets/blocks/autotiles/metal-tiles-11-26.png Binary files differnew file mode 100644 index 0000000..4020303 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-27.png b/mindus/assets/blocks/autotiles/metal-tiles-11-27.png Binary files differnew file mode 100644 index 0000000..43ad8e5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-28.png b/mindus/assets/blocks/autotiles/metal-tiles-11-28.png Binary files differnew file mode 100644 index 0000000..e847622 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-29.png b/mindus/assets/blocks/autotiles/metal-tiles-11-29.png Binary files differnew file mode 100644 index 0000000..c6c6a83 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-3.png b/mindus/assets/blocks/autotiles/metal-tiles-11-3.png Binary files differnew file mode 100644 index 0000000..95a795f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-30.png b/mindus/assets/blocks/autotiles/metal-tiles-11-30.png Binary files differnew file mode 100644 index 0000000..4333147 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-31.png b/mindus/assets/blocks/autotiles/metal-tiles-11-31.png Binary files differnew file mode 100644 index 0000000..2a46fe4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-32.png b/mindus/assets/blocks/autotiles/metal-tiles-11-32.png Binary files differnew file mode 100644 index 0000000..9476b23 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-33.png b/mindus/assets/blocks/autotiles/metal-tiles-11-33.png Binary files differnew file mode 100644 index 0000000..fa3c88d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-34.png b/mindus/assets/blocks/autotiles/metal-tiles-11-34.png Binary files differnew file mode 100644 index 0000000..22bbf43 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-35.png b/mindus/assets/blocks/autotiles/metal-tiles-11-35.png Binary files differnew file mode 100644 index 0000000..0f18e6a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-36.png b/mindus/assets/blocks/autotiles/metal-tiles-11-36.png Binary files differnew file mode 100644 index 0000000..10c825b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-37.png b/mindus/assets/blocks/autotiles/metal-tiles-11-37.png Binary files differnew file mode 100644 index 0000000..cc2cb5c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-38.png b/mindus/assets/blocks/autotiles/metal-tiles-11-38.png Binary files differnew file mode 100644 index 0000000..62b20d8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-39.png b/mindus/assets/blocks/autotiles/metal-tiles-11-39.png Binary files differnew file mode 100644 index 0000000..c2e4f68 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-4.png b/mindus/assets/blocks/autotiles/metal-tiles-11-4.png Binary files differnew file mode 100644 index 0000000..88e57c5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-40.png b/mindus/assets/blocks/autotiles/metal-tiles-11-40.png Binary files differnew file mode 100644 index 0000000..f019568 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-41.png b/mindus/assets/blocks/autotiles/metal-tiles-11-41.png Binary files differnew file mode 100644 index 0000000..b9e126c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-42.png b/mindus/assets/blocks/autotiles/metal-tiles-11-42.png Binary files differnew file mode 100644 index 0000000..76e63e4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-43.png b/mindus/assets/blocks/autotiles/metal-tiles-11-43.png Binary files differnew file mode 100644 index 0000000..3278744 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-44.png b/mindus/assets/blocks/autotiles/metal-tiles-11-44.png Binary files differnew file mode 100644 index 0000000..fb2acbc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-45.png b/mindus/assets/blocks/autotiles/metal-tiles-11-45.png Binary files differnew file mode 100644 index 0000000..6ed640e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-46.png b/mindus/assets/blocks/autotiles/metal-tiles-11-46.png Binary files differnew file mode 100644 index 0000000..248e481 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-5.png b/mindus/assets/blocks/autotiles/metal-tiles-11-5.png Binary files differnew file mode 100644 index 0000000..0420352 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-6.png b/mindus/assets/blocks/autotiles/metal-tiles-11-6.png Binary files differnew file mode 100644 index 0000000..18c94e3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-7.png b/mindus/assets/blocks/autotiles/metal-tiles-11-7.png Binary files differnew file mode 100644 index 0000000..902c08a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-8.png b/mindus/assets/blocks/autotiles/metal-tiles-11-8.png Binary files differnew file mode 100644 index 0000000..dd7ebb3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-11-9.png b/mindus/assets/blocks/autotiles/metal-tiles-11-9.png Binary files differnew file mode 100644 index 0000000..ca97c56 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-11-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-0.png b/mindus/assets/blocks/autotiles/metal-tiles-12-0.png Binary files differnew file mode 100644 index 0000000..cf5cd97 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-1.png b/mindus/assets/blocks/autotiles/metal-tiles-12-1.png Binary files differnew file mode 100644 index 0000000..92f79d4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-10.png b/mindus/assets/blocks/autotiles/metal-tiles-12-10.png Binary files differnew file mode 100644 index 0000000..c26b212 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-11.png b/mindus/assets/blocks/autotiles/metal-tiles-12-11.png Binary files differnew file mode 100644 index 0000000..5e9a5cf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-12.png b/mindus/assets/blocks/autotiles/metal-tiles-12-12.png Binary files differnew file mode 100644 index 0000000..d127031 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-13.png b/mindus/assets/blocks/autotiles/metal-tiles-12-13.png Binary files differnew file mode 100644 index 0000000..65b69e6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-14.png b/mindus/assets/blocks/autotiles/metal-tiles-12-14.png Binary files differnew file mode 100644 index 0000000..6616ee1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-15.png b/mindus/assets/blocks/autotiles/metal-tiles-12-15.png Binary files differnew file mode 100644 index 0000000..75fc960 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-16.png b/mindus/assets/blocks/autotiles/metal-tiles-12-16.png Binary files differnew file mode 100644 index 0000000..889bfa4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-17.png b/mindus/assets/blocks/autotiles/metal-tiles-12-17.png Binary files differnew file mode 100644 index 0000000..0766e09 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-18.png b/mindus/assets/blocks/autotiles/metal-tiles-12-18.png Binary files differnew file mode 100644 index 0000000..85010d7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-19.png b/mindus/assets/blocks/autotiles/metal-tiles-12-19.png Binary files differnew file mode 100644 index 0000000..b269ab5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-2.png b/mindus/assets/blocks/autotiles/metal-tiles-12-2.png Binary files differnew file mode 100644 index 0000000..7c7a991 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-20.png b/mindus/assets/blocks/autotiles/metal-tiles-12-20.png Binary files differnew file mode 100644 index 0000000..63717db --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-21.png b/mindus/assets/blocks/autotiles/metal-tiles-12-21.png Binary files differnew file mode 100644 index 0000000..848afba --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-22.png b/mindus/assets/blocks/autotiles/metal-tiles-12-22.png Binary files differnew file mode 100644 index 0000000..b48307c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-23.png b/mindus/assets/blocks/autotiles/metal-tiles-12-23.png Binary files differnew file mode 100644 index 0000000..33b462a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-24.png b/mindus/assets/blocks/autotiles/metal-tiles-12-24.png Binary files differnew file mode 100644 index 0000000..54ea1a3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-25.png b/mindus/assets/blocks/autotiles/metal-tiles-12-25.png Binary files differnew file mode 100644 index 0000000..e936dae --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-26.png b/mindus/assets/blocks/autotiles/metal-tiles-12-26.png Binary files differnew file mode 100644 index 0000000..1ac09d9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-27.png b/mindus/assets/blocks/autotiles/metal-tiles-12-27.png Binary files differnew file mode 100644 index 0000000..37d0a65 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-28.png b/mindus/assets/blocks/autotiles/metal-tiles-12-28.png Binary files differnew file mode 100644 index 0000000..9ec4070 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-29.png b/mindus/assets/blocks/autotiles/metal-tiles-12-29.png Binary files differnew file mode 100644 index 0000000..8d219de --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-3.png b/mindus/assets/blocks/autotiles/metal-tiles-12-3.png Binary files differnew file mode 100644 index 0000000..fba8e12 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-30.png b/mindus/assets/blocks/autotiles/metal-tiles-12-30.png Binary files differnew file mode 100644 index 0000000..7ae9281 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-31.png b/mindus/assets/blocks/autotiles/metal-tiles-12-31.png Binary files differnew file mode 100644 index 0000000..b7c9bee --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-32.png b/mindus/assets/blocks/autotiles/metal-tiles-12-32.png Binary files differnew file mode 100644 index 0000000..faef954 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-33.png b/mindus/assets/blocks/autotiles/metal-tiles-12-33.png Binary files differnew file mode 100644 index 0000000..dbc4e6c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-34.png b/mindus/assets/blocks/autotiles/metal-tiles-12-34.png Binary files differnew file mode 100644 index 0000000..5989738 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-35.png b/mindus/assets/blocks/autotiles/metal-tiles-12-35.png Binary files differnew file mode 100644 index 0000000..80b3d72 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-36.png b/mindus/assets/blocks/autotiles/metal-tiles-12-36.png Binary files differnew file mode 100644 index 0000000..721eac2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-37.png b/mindus/assets/blocks/autotiles/metal-tiles-12-37.png Binary files differnew file mode 100644 index 0000000..a535792 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-38.png b/mindus/assets/blocks/autotiles/metal-tiles-12-38.png Binary files differnew file mode 100644 index 0000000..37e0c53 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-39.png b/mindus/assets/blocks/autotiles/metal-tiles-12-39.png Binary files differnew file mode 100644 index 0000000..98b5cf5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-4.png b/mindus/assets/blocks/autotiles/metal-tiles-12-4.png Binary files differnew file mode 100644 index 0000000..ad846b0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-40.png b/mindus/assets/blocks/autotiles/metal-tiles-12-40.png Binary files differnew file mode 100644 index 0000000..78f14e2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-41.png b/mindus/assets/blocks/autotiles/metal-tiles-12-41.png Binary files differnew file mode 100644 index 0000000..a22f9bd --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-42.png b/mindus/assets/blocks/autotiles/metal-tiles-12-42.png Binary files differnew file mode 100644 index 0000000..07ee905 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-43.png b/mindus/assets/blocks/autotiles/metal-tiles-12-43.png Binary files differnew file mode 100644 index 0000000..36f2892 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-44.png b/mindus/assets/blocks/autotiles/metal-tiles-12-44.png Binary files differnew file mode 100644 index 0000000..4987599 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-45.png b/mindus/assets/blocks/autotiles/metal-tiles-12-45.png Binary files differnew file mode 100644 index 0000000..a24214b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-46.png b/mindus/assets/blocks/autotiles/metal-tiles-12-46.png Binary files differnew file mode 100644 index 0000000..8ff4705 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-5.png b/mindus/assets/blocks/autotiles/metal-tiles-12-5.png Binary files differnew file mode 100644 index 0000000..6ed3b7e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-6.png b/mindus/assets/blocks/autotiles/metal-tiles-12-6.png Binary files differnew file mode 100644 index 0000000..603498a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-7.png b/mindus/assets/blocks/autotiles/metal-tiles-12-7.png Binary files differnew file mode 100644 index 0000000..27f2e1d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-8.png b/mindus/assets/blocks/autotiles/metal-tiles-12-8.png Binary files differnew file mode 100644 index 0000000..14085b4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-12-9.png b/mindus/assets/blocks/autotiles/metal-tiles-12-9.png Binary files differnew file mode 100644 index 0000000..35e059c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-12-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-0.png b/mindus/assets/blocks/autotiles/metal-tiles-13-0.png Binary files differnew file mode 100644 index 0000000..3332ddc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-1.png b/mindus/assets/blocks/autotiles/metal-tiles-13-1.png Binary files differnew file mode 100644 index 0000000..ca7f99b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-10.png b/mindus/assets/blocks/autotiles/metal-tiles-13-10.png Binary files differnew file mode 100644 index 0000000..b9b6377 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-11.png b/mindus/assets/blocks/autotiles/metal-tiles-13-11.png Binary files differnew file mode 100644 index 0000000..f737cd3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-12.png b/mindus/assets/blocks/autotiles/metal-tiles-13-12.png Binary files differnew file mode 100644 index 0000000..46f5c8a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-13.png b/mindus/assets/blocks/autotiles/metal-tiles-13-13.png Binary files differnew file mode 100644 index 0000000..9b23b42 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-14.png b/mindus/assets/blocks/autotiles/metal-tiles-13-14.png Binary files differnew file mode 100644 index 0000000..fa894c7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-15.png b/mindus/assets/blocks/autotiles/metal-tiles-13-15.png Binary files differnew file mode 100644 index 0000000..6141753 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-16.png b/mindus/assets/blocks/autotiles/metal-tiles-13-16.png Binary files differnew file mode 100644 index 0000000..f118cc9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-17.png b/mindus/assets/blocks/autotiles/metal-tiles-13-17.png Binary files differnew file mode 100644 index 0000000..f381884 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-18.png b/mindus/assets/blocks/autotiles/metal-tiles-13-18.png Binary files differnew file mode 100644 index 0000000..5327c77 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-19.png b/mindus/assets/blocks/autotiles/metal-tiles-13-19.png Binary files differnew file mode 100644 index 0000000..9cac53f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-2.png b/mindus/assets/blocks/autotiles/metal-tiles-13-2.png Binary files differnew file mode 100644 index 0000000..d9ee678 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-20.png b/mindus/assets/blocks/autotiles/metal-tiles-13-20.png Binary files differnew file mode 100644 index 0000000..34a9b97 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-21.png b/mindus/assets/blocks/autotiles/metal-tiles-13-21.png Binary files differnew file mode 100644 index 0000000..c7d711a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-22.png b/mindus/assets/blocks/autotiles/metal-tiles-13-22.png Binary files differnew file mode 100644 index 0000000..f839f76 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-23.png b/mindus/assets/blocks/autotiles/metal-tiles-13-23.png Binary files differnew file mode 100644 index 0000000..a6dd10f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-24.png b/mindus/assets/blocks/autotiles/metal-tiles-13-24.png Binary files differnew file mode 100644 index 0000000..dc8ce47 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-25.png b/mindus/assets/blocks/autotiles/metal-tiles-13-25.png Binary files differnew file mode 100644 index 0000000..351991c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-26.png b/mindus/assets/blocks/autotiles/metal-tiles-13-26.png Binary files differnew file mode 100644 index 0000000..60e350a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-27.png b/mindus/assets/blocks/autotiles/metal-tiles-13-27.png Binary files differnew file mode 100644 index 0000000..4ffdf70 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-28.png b/mindus/assets/blocks/autotiles/metal-tiles-13-28.png Binary files differnew file mode 100644 index 0000000..5252471 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-29.png b/mindus/assets/blocks/autotiles/metal-tiles-13-29.png Binary files differnew file mode 100644 index 0000000..03d8fad --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-3.png b/mindus/assets/blocks/autotiles/metal-tiles-13-3.png Binary files differnew file mode 100644 index 0000000..b8258ab --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-30.png b/mindus/assets/blocks/autotiles/metal-tiles-13-30.png Binary files differnew file mode 100644 index 0000000..1ad7c5d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-31.png b/mindus/assets/blocks/autotiles/metal-tiles-13-31.png Binary files differnew file mode 100644 index 0000000..d489929 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-32.png b/mindus/assets/blocks/autotiles/metal-tiles-13-32.png Binary files differnew file mode 100644 index 0000000..ad62d60 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-33.png b/mindus/assets/blocks/autotiles/metal-tiles-13-33.png Binary files differnew file mode 100644 index 0000000..1579858 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-34.png b/mindus/assets/blocks/autotiles/metal-tiles-13-34.png Binary files differnew file mode 100644 index 0000000..f9f1fd3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-35.png b/mindus/assets/blocks/autotiles/metal-tiles-13-35.png Binary files differnew file mode 100644 index 0000000..408c336 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-36.png b/mindus/assets/blocks/autotiles/metal-tiles-13-36.png Binary files differnew file mode 100644 index 0000000..4dbbaa3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-37.png b/mindus/assets/blocks/autotiles/metal-tiles-13-37.png Binary files differnew file mode 100644 index 0000000..97ca011 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-38.png b/mindus/assets/blocks/autotiles/metal-tiles-13-38.png Binary files differnew file mode 100644 index 0000000..3e81d7e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-39.png b/mindus/assets/blocks/autotiles/metal-tiles-13-39.png Binary files differnew file mode 100644 index 0000000..4f1c6d9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-4.png b/mindus/assets/blocks/autotiles/metal-tiles-13-4.png Binary files differnew file mode 100644 index 0000000..e22663c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-40.png b/mindus/assets/blocks/autotiles/metal-tiles-13-40.png Binary files differnew file mode 100644 index 0000000..4d4192b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-41.png b/mindus/assets/blocks/autotiles/metal-tiles-13-41.png Binary files differnew file mode 100644 index 0000000..8fe32f0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-42.png b/mindus/assets/blocks/autotiles/metal-tiles-13-42.png Binary files differnew file mode 100644 index 0000000..4a21be1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-43.png b/mindus/assets/blocks/autotiles/metal-tiles-13-43.png Binary files differnew file mode 100644 index 0000000..7157336 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-44.png b/mindus/assets/blocks/autotiles/metal-tiles-13-44.png Binary files differnew file mode 100644 index 0000000..871051a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-45.png b/mindus/assets/blocks/autotiles/metal-tiles-13-45.png Binary files differnew file mode 100644 index 0000000..b3af2f7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-46.png b/mindus/assets/blocks/autotiles/metal-tiles-13-46.png Binary files differnew file mode 100644 index 0000000..f5286b9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-5.png b/mindus/assets/blocks/autotiles/metal-tiles-13-5.png Binary files differnew file mode 100644 index 0000000..237b627 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-6.png b/mindus/assets/blocks/autotiles/metal-tiles-13-6.png Binary files differnew file mode 100644 index 0000000..49f5386 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-7.png b/mindus/assets/blocks/autotiles/metal-tiles-13-7.png Binary files differnew file mode 100644 index 0000000..8ef2e71 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-8.png b/mindus/assets/blocks/autotiles/metal-tiles-13-8.png Binary files differnew file mode 100644 index 0000000..47433e2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-13-9.png b/mindus/assets/blocks/autotiles/metal-tiles-13-9.png Binary files differnew file mode 100644 index 0000000..6c47f48 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-13-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-0.png b/mindus/assets/blocks/autotiles/metal-tiles-2-0.png Binary files differnew file mode 100644 index 0000000..caeab95 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-1.png b/mindus/assets/blocks/autotiles/metal-tiles-2-1.png Binary files differnew file mode 100644 index 0000000..c4698a0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-10.png b/mindus/assets/blocks/autotiles/metal-tiles-2-10.png Binary files differnew file mode 100644 index 0000000..1ba4986 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-11.png b/mindus/assets/blocks/autotiles/metal-tiles-2-11.png Binary files differnew file mode 100644 index 0000000..097785d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-12.png b/mindus/assets/blocks/autotiles/metal-tiles-2-12.png Binary files differnew file mode 100644 index 0000000..f35577d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-13.png b/mindus/assets/blocks/autotiles/metal-tiles-2-13.png Binary files differnew file mode 100644 index 0000000..9b51823 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-14.png b/mindus/assets/blocks/autotiles/metal-tiles-2-14.png Binary files differnew file mode 100644 index 0000000..e779740 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-15.png b/mindus/assets/blocks/autotiles/metal-tiles-2-15.png Binary files differnew file mode 100644 index 0000000..ba79b92 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-16.png b/mindus/assets/blocks/autotiles/metal-tiles-2-16.png Binary files differnew file mode 100644 index 0000000..3c18fd3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-17.png b/mindus/assets/blocks/autotiles/metal-tiles-2-17.png Binary files differnew file mode 100644 index 0000000..173cf84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-18.png b/mindus/assets/blocks/autotiles/metal-tiles-2-18.png Binary files differnew file mode 100644 index 0000000..d340820 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-19.png b/mindus/assets/blocks/autotiles/metal-tiles-2-19.png Binary files differnew file mode 100644 index 0000000..32bd595 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-2.png b/mindus/assets/blocks/autotiles/metal-tiles-2-2.png Binary files differnew file mode 100644 index 0000000..d955dff --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-20.png b/mindus/assets/blocks/autotiles/metal-tiles-2-20.png Binary files differnew file mode 100644 index 0000000..8e1d65d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-21.png b/mindus/assets/blocks/autotiles/metal-tiles-2-21.png Binary files differnew file mode 100644 index 0000000..7dac136 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-22.png b/mindus/assets/blocks/autotiles/metal-tiles-2-22.png Binary files differnew file mode 100644 index 0000000..029dc90 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-23.png b/mindus/assets/blocks/autotiles/metal-tiles-2-23.png Binary files differnew file mode 100644 index 0000000..6263765 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-24.png b/mindus/assets/blocks/autotiles/metal-tiles-2-24.png Binary files differnew file mode 100644 index 0000000..b5ae8d3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-25.png b/mindus/assets/blocks/autotiles/metal-tiles-2-25.png Binary files differnew file mode 100644 index 0000000..50e8f3d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-26.png b/mindus/assets/blocks/autotiles/metal-tiles-2-26.png Binary files differnew file mode 100644 index 0000000..f797daf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-27.png b/mindus/assets/blocks/autotiles/metal-tiles-2-27.png Binary files differnew file mode 100644 index 0000000..5ee3c8b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-28.png b/mindus/assets/blocks/autotiles/metal-tiles-2-28.png Binary files differnew file mode 100644 index 0000000..dc096ad --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-29.png b/mindus/assets/blocks/autotiles/metal-tiles-2-29.png Binary files differnew file mode 100644 index 0000000..785e827 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-3.png b/mindus/assets/blocks/autotiles/metal-tiles-2-3.png Binary files differnew file mode 100644 index 0000000..30131f2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-30.png b/mindus/assets/blocks/autotiles/metal-tiles-2-30.png Binary files differnew file mode 100644 index 0000000..eca0259 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-31.png b/mindus/assets/blocks/autotiles/metal-tiles-2-31.png Binary files differnew file mode 100644 index 0000000..32cd971 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-32.png b/mindus/assets/blocks/autotiles/metal-tiles-2-32.png Binary files differnew file mode 100644 index 0000000..1bc9a79 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-33.png b/mindus/assets/blocks/autotiles/metal-tiles-2-33.png Binary files differnew file mode 100644 index 0000000..7669099 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-34.png b/mindus/assets/blocks/autotiles/metal-tiles-2-34.png Binary files differnew file mode 100644 index 0000000..f9811fc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-35.png b/mindus/assets/blocks/autotiles/metal-tiles-2-35.png Binary files differnew file mode 100644 index 0000000..1e76135 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-36.png b/mindus/assets/blocks/autotiles/metal-tiles-2-36.png Binary files differnew file mode 100644 index 0000000..779b2e6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-37.png b/mindus/assets/blocks/autotiles/metal-tiles-2-37.png Binary files differnew file mode 100644 index 0000000..bb687e2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-38.png b/mindus/assets/blocks/autotiles/metal-tiles-2-38.png Binary files differnew file mode 100644 index 0000000..4cbc0a7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-39.png b/mindus/assets/blocks/autotiles/metal-tiles-2-39.png Binary files differnew file mode 100644 index 0000000..b52513d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-4.png b/mindus/assets/blocks/autotiles/metal-tiles-2-4.png Binary files differnew file mode 100644 index 0000000..713c38d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-40.png b/mindus/assets/blocks/autotiles/metal-tiles-2-40.png Binary files differnew file mode 100644 index 0000000..b0eb224 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-41.png b/mindus/assets/blocks/autotiles/metal-tiles-2-41.png Binary files differnew file mode 100644 index 0000000..f96f95c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-42.png b/mindus/assets/blocks/autotiles/metal-tiles-2-42.png Binary files differnew file mode 100644 index 0000000..76c52b9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-43.png b/mindus/assets/blocks/autotiles/metal-tiles-2-43.png Binary files differnew file mode 100644 index 0000000..ad5cdcf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-44.png b/mindus/assets/blocks/autotiles/metal-tiles-2-44.png Binary files differnew file mode 100644 index 0000000..d06d356 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-45.png b/mindus/assets/blocks/autotiles/metal-tiles-2-45.png Binary files differnew file mode 100644 index 0000000..52ef069 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-46.png b/mindus/assets/blocks/autotiles/metal-tiles-2-46.png Binary files differnew file mode 100644 index 0000000..7330cc5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-5.png b/mindus/assets/blocks/autotiles/metal-tiles-2-5.png Binary files differnew file mode 100644 index 0000000..4679da5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-6.png b/mindus/assets/blocks/autotiles/metal-tiles-2-6.png Binary files differnew file mode 100644 index 0000000..f63a416 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-7.png b/mindus/assets/blocks/autotiles/metal-tiles-2-7.png Binary files differnew file mode 100644 index 0000000..0be8c91 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-8.png b/mindus/assets/blocks/autotiles/metal-tiles-2-8.png Binary files differnew file mode 100644 index 0000000..311edc2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-2-9.png b/mindus/assets/blocks/autotiles/metal-tiles-2-9.png Binary files differnew file mode 100644 index 0000000..e2a0e42 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-2-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-0.png b/mindus/assets/blocks/autotiles/metal-tiles-3-0.png Binary files differnew file mode 100644 index 0000000..bdae22e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-1.png b/mindus/assets/blocks/autotiles/metal-tiles-3-1.png Binary files differnew file mode 100644 index 0000000..7520c5a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-10.png b/mindus/assets/blocks/autotiles/metal-tiles-3-10.png Binary files differnew file mode 100644 index 0000000..c925ff0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-11.png b/mindus/assets/blocks/autotiles/metal-tiles-3-11.png Binary files differnew file mode 100644 index 0000000..9a1a7c5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-12.png b/mindus/assets/blocks/autotiles/metal-tiles-3-12.png Binary files differnew file mode 100644 index 0000000..15e6f17 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-13.png b/mindus/assets/blocks/autotiles/metal-tiles-3-13.png Binary files differnew file mode 100644 index 0000000..85fd4fc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-14.png b/mindus/assets/blocks/autotiles/metal-tiles-3-14.png Binary files differnew file mode 100644 index 0000000..a322a5d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-15.png b/mindus/assets/blocks/autotiles/metal-tiles-3-15.png Binary files differnew file mode 100644 index 0000000..da52500 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-16.png b/mindus/assets/blocks/autotiles/metal-tiles-3-16.png Binary files differnew file mode 100644 index 0000000..d72d97b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-17.png b/mindus/assets/blocks/autotiles/metal-tiles-3-17.png Binary files differnew file mode 100644 index 0000000..832b149 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-18.png b/mindus/assets/blocks/autotiles/metal-tiles-3-18.png Binary files differnew file mode 100644 index 0000000..4379723 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-19.png b/mindus/assets/blocks/autotiles/metal-tiles-3-19.png Binary files differnew file mode 100644 index 0000000..93b266a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-2.png b/mindus/assets/blocks/autotiles/metal-tiles-3-2.png Binary files differnew file mode 100644 index 0000000..50cd686 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-20.png b/mindus/assets/blocks/autotiles/metal-tiles-3-20.png Binary files differnew file mode 100644 index 0000000..0a72dad --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-21.png b/mindus/assets/blocks/autotiles/metal-tiles-3-21.png Binary files differnew file mode 100644 index 0000000..ce12293 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-22.png b/mindus/assets/blocks/autotiles/metal-tiles-3-22.png Binary files differnew file mode 100644 index 0000000..902e067 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-23.png b/mindus/assets/blocks/autotiles/metal-tiles-3-23.png Binary files differnew file mode 100644 index 0000000..a4007b5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-24.png b/mindus/assets/blocks/autotiles/metal-tiles-3-24.png Binary files differnew file mode 100644 index 0000000..755a3b6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-25.png b/mindus/assets/blocks/autotiles/metal-tiles-3-25.png Binary files differnew file mode 100644 index 0000000..a4445fb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-26.png b/mindus/assets/blocks/autotiles/metal-tiles-3-26.png Binary files differnew file mode 100644 index 0000000..3f875f6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-27.png b/mindus/assets/blocks/autotiles/metal-tiles-3-27.png Binary files differnew file mode 100644 index 0000000..4dac529 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-28.png b/mindus/assets/blocks/autotiles/metal-tiles-3-28.png Binary files differnew file mode 100644 index 0000000..7321f5f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-29.png b/mindus/assets/blocks/autotiles/metal-tiles-3-29.png Binary files differnew file mode 100644 index 0000000..2af14c9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-3.png b/mindus/assets/blocks/autotiles/metal-tiles-3-3.png Binary files differnew file mode 100644 index 0000000..88d3a5c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-30.png b/mindus/assets/blocks/autotiles/metal-tiles-3-30.png Binary files differnew file mode 100644 index 0000000..bd38ece --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-31.png b/mindus/assets/blocks/autotiles/metal-tiles-3-31.png Binary files differnew file mode 100644 index 0000000..f4abdc5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-32.png b/mindus/assets/blocks/autotiles/metal-tiles-3-32.png Binary files differnew file mode 100644 index 0000000..b9cb1b4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-33.png b/mindus/assets/blocks/autotiles/metal-tiles-3-33.png Binary files differnew file mode 100644 index 0000000..fc69dba --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-34.png b/mindus/assets/blocks/autotiles/metal-tiles-3-34.png Binary files differnew file mode 100644 index 0000000..711447f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-35.png b/mindus/assets/blocks/autotiles/metal-tiles-3-35.png Binary files differnew file mode 100644 index 0000000..4655808 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-36.png b/mindus/assets/blocks/autotiles/metal-tiles-3-36.png Binary files differnew file mode 100644 index 0000000..74c02f8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-37.png b/mindus/assets/blocks/autotiles/metal-tiles-3-37.png Binary files differnew file mode 100644 index 0000000..1184018 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-38.png b/mindus/assets/blocks/autotiles/metal-tiles-3-38.png Binary files differnew file mode 100644 index 0000000..d551d84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-39.png b/mindus/assets/blocks/autotiles/metal-tiles-3-39.png Binary files differnew file mode 100644 index 0000000..87e8748 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-4.png b/mindus/assets/blocks/autotiles/metal-tiles-3-4.png Binary files differnew file mode 100644 index 0000000..76e25a5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-40.png b/mindus/assets/blocks/autotiles/metal-tiles-3-40.png Binary files differnew file mode 100644 index 0000000..ff585e0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-41.png b/mindus/assets/blocks/autotiles/metal-tiles-3-41.png Binary files differnew file mode 100644 index 0000000..44b13f1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-42.png b/mindus/assets/blocks/autotiles/metal-tiles-3-42.png Binary files differnew file mode 100644 index 0000000..89b5b22 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-43.png b/mindus/assets/blocks/autotiles/metal-tiles-3-43.png Binary files differnew file mode 100644 index 0000000..7dfc972 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-44.png b/mindus/assets/blocks/autotiles/metal-tiles-3-44.png Binary files differnew file mode 100644 index 0000000..bdca804 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-45.png b/mindus/assets/blocks/autotiles/metal-tiles-3-45.png Binary files differnew file mode 100644 index 0000000..eb5007e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-46.png b/mindus/assets/blocks/autotiles/metal-tiles-3-46.png Binary files differnew file mode 100644 index 0000000..548e6f6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-5.png b/mindus/assets/blocks/autotiles/metal-tiles-3-5.png Binary files differnew file mode 100644 index 0000000..72c9e0d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-6.png b/mindus/assets/blocks/autotiles/metal-tiles-3-6.png Binary files differnew file mode 100644 index 0000000..11ee010 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-7.png b/mindus/assets/blocks/autotiles/metal-tiles-3-7.png Binary files differnew file mode 100644 index 0000000..4170a58 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-8.png b/mindus/assets/blocks/autotiles/metal-tiles-3-8.png Binary files differnew file mode 100644 index 0000000..a9eefdc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-3-9.png b/mindus/assets/blocks/autotiles/metal-tiles-3-9.png Binary files differnew file mode 100644 index 0000000..3a35a5d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-3-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-0.png b/mindus/assets/blocks/autotiles/metal-tiles-4-0.png Binary files differnew file mode 100644 index 0000000..00b4ad8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-1.png b/mindus/assets/blocks/autotiles/metal-tiles-4-1.png Binary files differnew file mode 100644 index 0000000..82275e2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-10.png b/mindus/assets/blocks/autotiles/metal-tiles-4-10.png Binary files differnew file mode 100644 index 0000000..10c768e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-11.png b/mindus/assets/blocks/autotiles/metal-tiles-4-11.png Binary files differnew file mode 100644 index 0000000..b95958a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-12.png b/mindus/assets/blocks/autotiles/metal-tiles-4-12.png Binary files differnew file mode 100644 index 0000000..35a4e45 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-13.png b/mindus/assets/blocks/autotiles/metal-tiles-4-13.png Binary files differnew file mode 100644 index 0000000..6ae9f4a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-14.png b/mindus/assets/blocks/autotiles/metal-tiles-4-14.png Binary files differnew file mode 100644 index 0000000..83747f9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-15.png b/mindus/assets/blocks/autotiles/metal-tiles-4-15.png Binary files differnew file mode 100644 index 0000000..c821401 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-16.png b/mindus/assets/blocks/autotiles/metal-tiles-4-16.png Binary files differnew file mode 100644 index 0000000..d529f3c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-17.png b/mindus/assets/blocks/autotiles/metal-tiles-4-17.png Binary files differnew file mode 100644 index 0000000..b6f09b7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-18.png b/mindus/assets/blocks/autotiles/metal-tiles-4-18.png Binary files differnew file mode 100644 index 0000000..d4a6738 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-19.png b/mindus/assets/blocks/autotiles/metal-tiles-4-19.png Binary files differnew file mode 100644 index 0000000..fa0d55b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-2.png b/mindus/assets/blocks/autotiles/metal-tiles-4-2.png Binary files differnew file mode 100644 index 0000000..7449f92 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-20.png b/mindus/assets/blocks/autotiles/metal-tiles-4-20.png Binary files differnew file mode 100644 index 0000000..2346538 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-21.png b/mindus/assets/blocks/autotiles/metal-tiles-4-21.png Binary files differnew file mode 100644 index 0000000..e232b9d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-22.png b/mindus/assets/blocks/autotiles/metal-tiles-4-22.png Binary files differnew file mode 100644 index 0000000..4a0e524 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-23.png b/mindus/assets/blocks/autotiles/metal-tiles-4-23.png Binary files differnew file mode 100644 index 0000000..74597c6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-24.png b/mindus/assets/blocks/autotiles/metal-tiles-4-24.png Binary files differnew file mode 100644 index 0000000..60f97bd --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-25.png b/mindus/assets/blocks/autotiles/metal-tiles-4-25.png Binary files differnew file mode 100644 index 0000000..6acc66c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-26.png b/mindus/assets/blocks/autotiles/metal-tiles-4-26.png Binary files differnew file mode 100644 index 0000000..e830d09 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-27.png b/mindus/assets/blocks/autotiles/metal-tiles-4-27.png Binary files differnew file mode 100644 index 0000000..078e3de --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-28.png b/mindus/assets/blocks/autotiles/metal-tiles-4-28.png Binary files differnew file mode 100644 index 0000000..9de1388 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-29.png b/mindus/assets/blocks/autotiles/metal-tiles-4-29.png Binary files differnew file mode 100644 index 0000000..1810900 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-3.png b/mindus/assets/blocks/autotiles/metal-tiles-4-3.png Binary files differnew file mode 100644 index 0000000..287abbf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-30.png b/mindus/assets/blocks/autotiles/metal-tiles-4-30.png Binary files differnew file mode 100644 index 0000000..7531ec6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-31.png b/mindus/assets/blocks/autotiles/metal-tiles-4-31.png Binary files differnew file mode 100644 index 0000000..e64da1a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-32.png b/mindus/assets/blocks/autotiles/metal-tiles-4-32.png Binary files differnew file mode 100644 index 0000000..c6264f0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-33.png b/mindus/assets/blocks/autotiles/metal-tiles-4-33.png Binary files differnew file mode 100644 index 0000000..895288c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-34.png b/mindus/assets/blocks/autotiles/metal-tiles-4-34.png Binary files differnew file mode 100644 index 0000000..ff0557e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-35.png b/mindus/assets/blocks/autotiles/metal-tiles-4-35.png Binary files differnew file mode 100644 index 0000000..9b2bceb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-36.png b/mindus/assets/blocks/autotiles/metal-tiles-4-36.png Binary files differnew file mode 100644 index 0000000..8db4055 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-37.png b/mindus/assets/blocks/autotiles/metal-tiles-4-37.png Binary files differnew file mode 100644 index 0000000..0182b7a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-38.png b/mindus/assets/blocks/autotiles/metal-tiles-4-38.png Binary files differnew file mode 100644 index 0000000..f7820a3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-39.png b/mindus/assets/blocks/autotiles/metal-tiles-4-39.png Binary files differnew file mode 100644 index 0000000..3537e61 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-4.png b/mindus/assets/blocks/autotiles/metal-tiles-4-4.png Binary files differnew file mode 100644 index 0000000..cbaa305 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-40.png b/mindus/assets/blocks/autotiles/metal-tiles-4-40.png Binary files differnew file mode 100644 index 0000000..b21107f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-41.png b/mindus/assets/blocks/autotiles/metal-tiles-4-41.png Binary files differnew file mode 100644 index 0000000..9c40fa8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-42.png b/mindus/assets/blocks/autotiles/metal-tiles-4-42.png Binary files differnew file mode 100644 index 0000000..cb814d3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-43.png b/mindus/assets/blocks/autotiles/metal-tiles-4-43.png Binary files differnew file mode 100644 index 0000000..bc1dbd5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-44.png b/mindus/assets/blocks/autotiles/metal-tiles-4-44.png Binary files differnew file mode 100644 index 0000000..563fb3c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-45.png b/mindus/assets/blocks/autotiles/metal-tiles-4-45.png Binary files differnew file mode 100644 index 0000000..b4a3b75 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-46.png b/mindus/assets/blocks/autotiles/metal-tiles-4-46.png Binary files differnew file mode 100644 index 0000000..4691589 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-5.png b/mindus/assets/blocks/autotiles/metal-tiles-4-5.png Binary files differnew file mode 100644 index 0000000..9a9ff32 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-6.png b/mindus/assets/blocks/autotiles/metal-tiles-4-6.png Binary files differnew file mode 100644 index 0000000..457ffa6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-7.png b/mindus/assets/blocks/autotiles/metal-tiles-4-7.png Binary files differnew file mode 100644 index 0000000..49c18a5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-8.png b/mindus/assets/blocks/autotiles/metal-tiles-4-8.png Binary files differnew file mode 100644 index 0000000..2ed38c4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-4-9.png b/mindus/assets/blocks/autotiles/metal-tiles-4-9.png Binary files differnew file mode 100644 index 0000000..a353fc2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-4-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-0.png b/mindus/assets/blocks/autotiles/metal-tiles-5-0.png Binary files differnew file mode 100644 index 0000000..69467f2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-1.png b/mindus/assets/blocks/autotiles/metal-tiles-5-1.png Binary files differnew file mode 100644 index 0000000..22ead22 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-10.png b/mindus/assets/blocks/autotiles/metal-tiles-5-10.png Binary files differnew file mode 100644 index 0000000..cf16663 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-11.png b/mindus/assets/blocks/autotiles/metal-tiles-5-11.png Binary files differnew file mode 100644 index 0000000..95e9503 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-12.png b/mindus/assets/blocks/autotiles/metal-tiles-5-12.png Binary files differnew file mode 100644 index 0000000..f439d21 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-13.png b/mindus/assets/blocks/autotiles/metal-tiles-5-13.png Binary files differnew file mode 100644 index 0000000..5798fae --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-14.png b/mindus/assets/blocks/autotiles/metal-tiles-5-14.png Binary files differnew file mode 100644 index 0000000..0569883 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-15.png b/mindus/assets/blocks/autotiles/metal-tiles-5-15.png Binary files differnew file mode 100644 index 0000000..62a79ae --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-16.png b/mindus/assets/blocks/autotiles/metal-tiles-5-16.png Binary files differnew file mode 100644 index 0000000..ee0235a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-17.png b/mindus/assets/blocks/autotiles/metal-tiles-5-17.png Binary files differnew file mode 100644 index 0000000..a15bbc9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-18.png b/mindus/assets/blocks/autotiles/metal-tiles-5-18.png Binary files differnew file mode 100644 index 0000000..c76569b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-19.png b/mindus/assets/blocks/autotiles/metal-tiles-5-19.png Binary files differnew file mode 100644 index 0000000..d54b262 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-2.png b/mindus/assets/blocks/autotiles/metal-tiles-5-2.png Binary files differnew file mode 100644 index 0000000..cd1f86a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-20.png b/mindus/assets/blocks/autotiles/metal-tiles-5-20.png Binary files differnew file mode 100644 index 0000000..a593240 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-21.png b/mindus/assets/blocks/autotiles/metal-tiles-5-21.png Binary files differnew file mode 100644 index 0000000..13e19ce --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-22.png b/mindus/assets/blocks/autotiles/metal-tiles-5-22.png Binary files differnew file mode 100644 index 0000000..5623e69 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-23.png b/mindus/assets/blocks/autotiles/metal-tiles-5-23.png Binary files differnew file mode 100644 index 0000000..53c0630 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-24.png b/mindus/assets/blocks/autotiles/metal-tiles-5-24.png Binary files differnew file mode 100644 index 0000000..7dbc8ae --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-25.png b/mindus/assets/blocks/autotiles/metal-tiles-5-25.png Binary files differnew file mode 100644 index 0000000..79e5db2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-26.png b/mindus/assets/blocks/autotiles/metal-tiles-5-26.png Binary files differnew file mode 100644 index 0000000..d6bad14 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-27.png b/mindus/assets/blocks/autotiles/metal-tiles-5-27.png Binary files differnew file mode 100644 index 0000000..70cbdee --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-28.png b/mindus/assets/blocks/autotiles/metal-tiles-5-28.png Binary files differnew file mode 100644 index 0000000..2225801 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-29.png b/mindus/assets/blocks/autotiles/metal-tiles-5-29.png Binary files differnew file mode 100644 index 0000000..4abb670 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-3.png b/mindus/assets/blocks/autotiles/metal-tiles-5-3.png Binary files differnew file mode 100644 index 0000000..ba62f58 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-30.png b/mindus/assets/blocks/autotiles/metal-tiles-5-30.png Binary files differnew file mode 100644 index 0000000..53b87ce --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-31.png b/mindus/assets/blocks/autotiles/metal-tiles-5-31.png Binary files differnew file mode 100644 index 0000000..06a4bf4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-32.png b/mindus/assets/blocks/autotiles/metal-tiles-5-32.png Binary files differnew file mode 100644 index 0000000..d79b4ef --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-33.png b/mindus/assets/blocks/autotiles/metal-tiles-5-33.png Binary files differnew file mode 100644 index 0000000..fcdc443 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-34.png b/mindus/assets/blocks/autotiles/metal-tiles-5-34.png Binary files differnew file mode 100644 index 0000000..9a1e3e5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-35.png b/mindus/assets/blocks/autotiles/metal-tiles-5-35.png Binary files differnew file mode 100644 index 0000000..59a4ec5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-36.png b/mindus/assets/blocks/autotiles/metal-tiles-5-36.png Binary files differnew file mode 100644 index 0000000..c1b25ae --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-37.png b/mindus/assets/blocks/autotiles/metal-tiles-5-37.png Binary files differnew file mode 100644 index 0000000..4c6905d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-38.png b/mindus/assets/blocks/autotiles/metal-tiles-5-38.png Binary files differnew file mode 100644 index 0000000..9888aec --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-39.png b/mindus/assets/blocks/autotiles/metal-tiles-5-39.png Binary files differnew file mode 100644 index 0000000..95185ac --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-4.png b/mindus/assets/blocks/autotiles/metal-tiles-5-4.png Binary files differnew file mode 100644 index 0000000..e59e637 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-40.png b/mindus/assets/blocks/autotiles/metal-tiles-5-40.png Binary files differnew file mode 100644 index 0000000..c50d43e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-41.png b/mindus/assets/blocks/autotiles/metal-tiles-5-41.png Binary files differnew file mode 100644 index 0000000..3298734 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-42.png b/mindus/assets/blocks/autotiles/metal-tiles-5-42.png Binary files differnew file mode 100644 index 0000000..c50d43e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-43.png b/mindus/assets/blocks/autotiles/metal-tiles-5-43.png Binary files differnew file mode 100644 index 0000000..a477f91 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-44.png b/mindus/assets/blocks/autotiles/metal-tiles-5-44.png Binary files differnew file mode 100644 index 0000000..d35790a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-45.png b/mindus/assets/blocks/autotiles/metal-tiles-5-45.png Binary files differnew file mode 100644 index 0000000..af47e8f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-46.png b/mindus/assets/blocks/autotiles/metal-tiles-5-46.png Binary files differnew file mode 100644 index 0000000..3026e07 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-5.png b/mindus/assets/blocks/autotiles/metal-tiles-5-5.png Binary files differnew file mode 100644 index 0000000..92aedb7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-6.png b/mindus/assets/blocks/autotiles/metal-tiles-5-6.png Binary files differnew file mode 100644 index 0000000..64ed301 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-7.png b/mindus/assets/blocks/autotiles/metal-tiles-5-7.png Binary files differnew file mode 100644 index 0000000..07fd707 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-8.png b/mindus/assets/blocks/autotiles/metal-tiles-5-8.png Binary files differnew file mode 100644 index 0000000..339280d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-5-9.png b/mindus/assets/blocks/autotiles/metal-tiles-5-9.png Binary files differnew file mode 100644 index 0000000..4fdbfde --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-5-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-0.png b/mindus/assets/blocks/autotiles/metal-tiles-6-0.png Binary files differnew file mode 100644 index 0000000..ad7d00d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-1.png b/mindus/assets/blocks/autotiles/metal-tiles-6-1.png Binary files differnew file mode 100644 index 0000000..1f48765 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-10.png b/mindus/assets/blocks/autotiles/metal-tiles-6-10.png Binary files differnew file mode 100644 index 0000000..bb073b3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-11.png b/mindus/assets/blocks/autotiles/metal-tiles-6-11.png Binary files differnew file mode 100644 index 0000000..42b80ef --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-12.png b/mindus/assets/blocks/autotiles/metal-tiles-6-12.png Binary files differnew file mode 100644 index 0000000..8b7be57 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-13.png b/mindus/assets/blocks/autotiles/metal-tiles-6-13.png Binary files differnew file mode 100644 index 0000000..6ef9434 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-14.png b/mindus/assets/blocks/autotiles/metal-tiles-6-14.png Binary files differnew file mode 100644 index 0000000..61f2d64 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-15.png b/mindus/assets/blocks/autotiles/metal-tiles-6-15.png Binary files differnew file mode 100644 index 0000000..26aae39 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-16.png b/mindus/assets/blocks/autotiles/metal-tiles-6-16.png Binary files differnew file mode 100644 index 0000000..b9030ed --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-17.png b/mindus/assets/blocks/autotiles/metal-tiles-6-17.png Binary files differnew file mode 100644 index 0000000..be1ef5c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-18.png b/mindus/assets/blocks/autotiles/metal-tiles-6-18.png Binary files differnew file mode 100644 index 0000000..6af4202 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-19.png b/mindus/assets/blocks/autotiles/metal-tiles-6-19.png Binary files differnew file mode 100644 index 0000000..2788249 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-2.png b/mindus/assets/blocks/autotiles/metal-tiles-6-2.png Binary files differnew file mode 100644 index 0000000..8b88cf9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-20.png b/mindus/assets/blocks/autotiles/metal-tiles-6-20.png Binary files differnew file mode 100644 index 0000000..5ac2000 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-21.png b/mindus/assets/blocks/autotiles/metal-tiles-6-21.png Binary files differnew file mode 100644 index 0000000..6610907 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-22.png b/mindus/assets/blocks/autotiles/metal-tiles-6-22.png Binary files differnew file mode 100644 index 0000000..ef14ca5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-23.png b/mindus/assets/blocks/autotiles/metal-tiles-6-23.png Binary files differnew file mode 100644 index 0000000..9f57666 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-24.png b/mindus/assets/blocks/autotiles/metal-tiles-6-24.png Binary files differnew file mode 100644 index 0000000..5f8db4c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-25.png b/mindus/assets/blocks/autotiles/metal-tiles-6-25.png Binary files differnew file mode 100644 index 0000000..696885b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-26.png b/mindus/assets/blocks/autotiles/metal-tiles-6-26.png Binary files differnew file mode 100644 index 0000000..b353e68 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-27.png b/mindus/assets/blocks/autotiles/metal-tiles-6-27.png Binary files differnew file mode 100644 index 0000000..c7c051e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-28.png b/mindus/assets/blocks/autotiles/metal-tiles-6-28.png Binary files differnew file mode 100644 index 0000000..d39925e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-29.png b/mindus/assets/blocks/autotiles/metal-tiles-6-29.png Binary files differnew file mode 100644 index 0000000..6c8ce52 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-3.png b/mindus/assets/blocks/autotiles/metal-tiles-6-3.png Binary files differnew file mode 100644 index 0000000..3a9e4c4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-30.png b/mindus/assets/blocks/autotiles/metal-tiles-6-30.png Binary files differnew file mode 100644 index 0000000..a6cb0e6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-31.png b/mindus/assets/blocks/autotiles/metal-tiles-6-31.png Binary files differnew file mode 100644 index 0000000..92416de --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-32.png b/mindus/assets/blocks/autotiles/metal-tiles-6-32.png Binary files differnew file mode 100644 index 0000000..194d2fa --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-33.png b/mindus/assets/blocks/autotiles/metal-tiles-6-33.png Binary files differnew file mode 100644 index 0000000..65ac22d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-34.png b/mindus/assets/blocks/autotiles/metal-tiles-6-34.png Binary files differnew file mode 100644 index 0000000..554f821 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-35.png b/mindus/assets/blocks/autotiles/metal-tiles-6-35.png Binary files differnew file mode 100644 index 0000000..eaafb33 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-36.png b/mindus/assets/blocks/autotiles/metal-tiles-6-36.png Binary files differnew file mode 100644 index 0000000..4cfa1fb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-37.png b/mindus/assets/blocks/autotiles/metal-tiles-6-37.png Binary files differnew file mode 100644 index 0000000..902f4f0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-38.png b/mindus/assets/blocks/autotiles/metal-tiles-6-38.png Binary files differnew file mode 100644 index 0000000..d6bd022 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-39.png b/mindus/assets/blocks/autotiles/metal-tiles-6-39.png Binary files differnew file mode 100644 index 0000000..9d2985d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-4.png b/mindus/assets/blocks/autotiles/metal-tiles-6-4.png Binary files differnew file mode 100644 index 0000000..a88d5dd --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-40.png b/mindus/assets/blocks/autotiles/metal-tiles-6-40.png Binary files differnew file mode 100644 index 0000000..9f48b4c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-41.png b/mindus/assets/blocks/autotiles/metal-tiles-6-41.png Binary files differnew file mode 100644 index 0000000..b0dac68 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-42.png b/mindus/assets/blocks/autotiles/metal-tiles-6-42.png Binary files differnew file mode 100644 index 0000000..85efe7c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-43.png b/mindus/assets/blocks/autotiles/metal-tiles-6-43.png Binary files differnew file mode 100644 index 0000000..5bc8a6d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-44.png b/mindus/assets/blocks/autotiles/metal-tiles-6-44.png Binary files differnew file mode 100644 index 0000000..b405c26 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-45.png b/mindus/assets/blocks/autotiles/metal-tiles-6-45.png Binary files differnew file mode 100644 index 0000000..75c89f9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-46.png b/mindus/assets/blocks/autotiles/metal-tiles-6-46.png Binary files differnew file mode 100644 index 0000000..76b180f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-5.png b/mindus/assets/blocks/autotiles/metal-tiles-6-5.png Binary files differnew file mode 100644 index 0000000..3b271b8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-6.png b/mindus/assets/blocks/autotiles/metal-tiles-6-6.png Binary files differnew file mode 100644 index 0000000..995d78d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-7.png b/mindus/assets/blocks/autotiles/metal-tiles-6-7.png Binary files differnew file mode 100644 index 0000000..bb96155 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-8.png b/mindus/assets/blocks/autotiles/metal-tiles-6-8.png Binary files differnew file mode 100644 index 0000000..8880f0d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-6-9.png b/mindus/assets/blocks/autotiles/metal-tiles-6-9.png Binary files differnew file mode 100644 index 0000000..d76bf54 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-6-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-0.png b/mindus/assets/blocks/autotiles/metal-tiles-7-0.png Binary files differnew file mode 100644 index 0000000..7ba2ee7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-1.png b/mindus/assets/blocks/autotiles/metal-tiles-7-1.png Binary files differnew file mode 100644 index 0000000..7630513 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-10.png b/mindus/assets/blocks/autotiles/metal-tiles-7-10.png Binary files differnew file mode 100644 index 0000000..d83daa7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-11.png b/mindus/assets/blocks/autotiles/metal-tiles-7-11.png Binary files differnew file mode 100644 index 0000000..e008042 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-12.png b/mindus/assets/blocks/autotiles/metal-tiles-7-12.png Binary files differnew file mode 100644 index 0000000..1db011b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-13.png b/mindus/assets/blocks/autotiles/metal-tiles-7-13.png Binary files differnew file mode 100644 index 0000000..a62e783 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-14.png b/mindus/assets/blocks/autotiles/metal-tiles-7-14.png Binary files differnew file mode 100644 index 0000000..9006361 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-15.png b/mindus/assets/blocks/autotiles/metal-tiles-7-15.png Binary files differnew file mode 100644 index 0000000..74e7dc8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-16.png b/mindus/assets/blocks/autotiles/metal-tiles-7-16.png Binary files differnew file mode 100644 index 0000000..b1e540d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-17.png b/mindus/assets/blocks/autotiles/metal-tiles-7-17.png Binary files differnew file mode 100644 index 0000000..26292ea --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-18.png b/mindus/assets/blocks/autotiles/metal-tiles-7-18.png Binary files differnew file mode 100644 index 0000000..79e5eba --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-19.png b/mindus/assets/blocks/autotiles/metal-tiles-7-19.png Binary files differnew file mode 100644 index 0000000..0e066e6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-2.png b/mindus/assets/blocks/autotiles/metal-tiles-7-2.png Binary files differnew file mode 100644 index 0000000..e7fa6c3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-20.png b/mindus/assets/blocks/autotiles/metal-tiles-7-20.png Binary files differnew file mode 100644 index 0000000..1f1755c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-21.png b/mindus/assets/blocks/autotiles/metal-tiles-7-21.png Binary files differnew file mode 100644 index 0000000..c6115d2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-22.png b/mindus/assets/blocks/autotiles/metal-tiles-7-22.png Binary files differnew file mode 100644 index 0000000..bc8db04 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-23.png b/mindus/assets/blocks/autotiles/metal-tiles-7-23.png Binary files differnew file mode 100644 index 0000000..6b4e32b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-24.png b/mindus/assets/blocks/autotiles/metal-tiles-7-24.png Binary files differnew file mode 100644 index 0000000..0352e7a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-25.png b/mindus/assets/blocks/autotiles/metal-tiles-7-25.png Binary files differnew file mode 100644 index 0000000..8368129 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-26.png b/mindus/assets/blocks/autotiles/metal-tiles-7-26.png Binary files differnew file mode 100644 index 0000000..a8e5f4b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-27.png b/mindus/assets/blocks/autotiles/metal-tiles-7-27.png Binary files differnew file mode 100644 index 0000000..7559e43 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-28.png b/mindus/assets/blocks/autotiles/metal-tiles-7-28.png Binary files differnew file mode 100644 index 0000000..96acd2d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-29.png b/mindus/assets/blocks/autotiles/metal-tiles-7-29.png Binary files differnew file mode 100644 index 0000000..36f0e81 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-3.png b/mindus/assets/blocks/autotiles/metal-tiles-7-3.png Binary files differnew file mode 100644 index 0000000..388fd85 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-30.png b/mindus/assets/blocks/autotiles/metal-tiles-7-30.png Binary files differnew file mode 100644 index 0000000..581bb1e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-31.png b/mindus/assets/blocks/autotiles/metal-tiles-7-31.png Binary files differnew file mode 100644 index 0000000..e92efb0 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-32.png b/mindus/assets/blocks/autotiles/metal-tiles-7-32.png Binary files differnew file mode 100644 index 0000000..36f3ff9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-33.png b/mindus/assets/blocks/autotiles/metal-tiles-7-33.png Binary files differnew file mode 100644 index 0000000..b66baf7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-34.png b/mindus/assets/blocks/autotiles/metal-tiles-7-34.png Binary files differnew file mode 100644 index 0000000..3c5c929 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-35.png b/mindus/assets/blocks/autotiles/metal-tiles-7-35.png Binary files differnew file mode 100644 index 0000000..4e06511 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-36.png b/mindus/assets/blocks/autotiles/metal-tiles-7-36.png Binary files differnew file mode 100644 index 0000000..1e7b97d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-37.png b/mindus/assets/blocks/autotiles/metal-tiles-7-37.png Binary files differnew file mode 100644 index 0000000..54cd643 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-38.png b/mindus/assets/blocks/autotiles/metal-tiles-7-38.png Binary files differnew file mode 100644 index 0000000..04940da --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-39.png b/mindus/assets/blocks/autotiles/metal-tiles-7-39.png Binary files differnew file mode 100644 index 0000000..c5398c2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-4.png b/mindus/assets/blocks/autotiles/metal-tiles-7-4.png Binary files differnew file mode 100644 index 0000000..25211e9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-40.png b/mindus/assets/blocks/autotiles/metal-tiles-7-40.png Binary files differnew file mode 100644 index 0000000..63407a9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-41.png b/mindus/assets/blocks/autotiles/metal-tiles-7-41.png Binary files differnew file mode 100644 index 0000000..9d44b4b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-42.png b/mindus/assets/blocks/autotiles/metal-tiles-7-42.png Binary files differnew file mode 100644 index 0000000..8bf50db --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-43.png b/mindus/assets/blocks/autotiles/metal-tiles-7-43.png Binary files differnew file mode 100644 index 0000000..ab97444 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-44.png b/mindus/assets/blocks/autotiles/metal-tiles-7-44.png Binary files differnew file mode 100644 index 0000000..33f4f60 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-45.png b/mindus/assets/blocks/autotiles/metal-tiles-7-45.png Binary files differnew file mode 100644 index 0000000..4b115a6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-46.png b/mindus/assets/blocks/autotiles/metal-tiles-7-46.png Binary files differnew file mode 100644 index 0000000..9a3a890 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-5.png b/mindus/assets/blocks/autotiles/metal-tiles-7-5.png Binary files differnew file mode 100644 index 0000000..51bf85b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-6.png b/mindus/assets/blocks/autotiles/metal-tiles-7-6.png Binary files differnew file mode 100644 index 0000000..bfeb5cc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-7.png b/mindus/assets/blocks/autotiles/metal-tiles-7-7.png Binary files differnew file mode 100644 index 0000000..ee557d8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-8.png b/mindus/assets/blocks/autotiles/metal-tiles-7-8.png Binary files differnew file mode 100644 index 0000000..18aed09 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-7-9.png b/mindus/assets/blocks/autotiles/metal-tiles-7-9.png Binary files differnew file mode 100644 index 0000000..b9b2494 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-7-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-0.png b/mindus/assets/blocks/autotiles/metal-tiles-8-0.png Binary files differnew file mode 100644 index 0000000..5daca87 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-1.png b/mindus/assets/blocks/autotiles/metal-tiles-8-1.png Binary files differnew file mode 100644 index 0000000..3222ca6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-10.png b/mindus/assets/blocks/autotiles/metal-tiles-8-10.png Binary files differnew file mode 100644 index 0000000..3d4f15a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-11.png b/mindus/assets/blocks/autotiles/metal-tiles-8-11.png Binary files differnew file mode 100644 index 0000000..912ff0e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-12.png b/mindus/assets/blocks/autotiles/metal-tiles-8-12.png Binary files differnew file mode 100644 index 0000000..72aee98 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-13.png b/mindus/assets/blocks/autotiles/metal-tiles-8-13.png Binary files differnew file mode 100644 index 0000000..32fb643 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-14.png b/mindus/assets/blocks/autotiles/metal-tiles-8-14.png Binary files differnew file mode 100644 index 0000000..da69402 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-15.png b/mindus/assets/blocks/autotiles/metal-tiles-8-15.png Binary files differnew file mode 100644 index 0000000..76f44f5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-16.png b/mindus/assets/blocks/autotiles/metal-tiles-8-16.png Binary files differnew file mode 100644 index 0000000..4121ab6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-17.png b/mindus/assets/blocks/autotiles/metal-tiles-8-17.png Binary files differnew file mode 100644 index 0000000..ca7efdc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-18.png b/mindus/assets/blocks/autotiles/metal-tiles-8-18.png Binary files differnew file mode 100644 index 0000000..f2ca665 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-19.png b/mindus/assets/blocks/autotiles/metal-tiles-8-19.png Binary files differnew file mode 100644 index 0000000..eba78b2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-2.png b/mindus/assets/blocks/autotiles/metal-tiles-8-2.png Binary files differnew file mode 100644 index 0000000..2860522 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-20.png b/mindus/assets/blocks/autotiles/metal-tiles-8-20.png Binary files differnew file mode 100644 index 0000000..18923e5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-21.png b/mindus/assets/blocks/autotiles/metal-tiles-8-21.png Binary files differnew file mode 100644 index 0000000..e5d31bc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-22.png b/mindus/assets/blocks/autotiles/metal-tiles-8-22.png Binary files differnew file mode 100644 index 0000000..8ea22d4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-23.png b/mindus/assets/blocks/autotiles/metal-tiles-8-23.png Binary files differnew file mode 100644 index 0000000..f955a49 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-24.png b/mindus/assets/blocks/autotiles/metal-tiles-8-24.png Binary files differnew file mode 100644 index 0000000..e0af7c8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-25.png b/mindus/assets/blocks/autotiles/metal-tiles-8-25.png Binary files differnew file mode 100644 index 0000000..29d1faa --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-26.png b/mindus/assets/blocks/autotiles/metal-tiles-8-26.png Binary files differnew file mode 100644 index 0000000..466603a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-27.png b/mindus/assets/blocks/autotiles/metal-tiles-8-27.png Binary files differnew file mode 100644 index 0000000..a81a289 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-28.png b/mindus/assets/blocks/autotiles/metal-tiles-8-28.png Binary files differnew file mode 100644 index 0000000..4a6c8ba --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-29.png b/mindus/assets/blocks/autotiles/metal-tiles-8-29.png Binary files differnew file mode 100644 index 0000000..825cdd9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-3.png b/mindus/assets/blocks/autotiles/metal-tiles-8-3.png Binary files differnew file mode 100644 index 0000000..7c37a25 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-30.png b/mindus/assets/blocks/autotiles/metal-tiles-8-30.png Binary files differnew file mode 100644 index 0000000..6c54357 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-31.png b/mindus/assets/blocks/autotiles/metal-tiles-8-31.png Binary files differnew file mode 100644 index 0000000..3070669 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-32.png b/mindus/assets/blocks/autotiles/metal-tiles-8-32.png Binary files differnew file mode 100644 index 0000000..5e1de66 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-33.png b/mindus/assets/blocks/autotiles/metal-tiles-8-33.png Binary files differnew file mode 100644 index 0000000..602f00e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-34.png b/mindus/assets/blocks/autotiles/metal-tiles-8-34.png Binary files differnew file mode 100644 index 0000000..df9382a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-35.png b/mindus/assets/blocks/autotiles/metal-tiles-8-35.png Binary files differnew file mode 100644 index 0000000..e3be791 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-36.png b/mindus/assets/blocks/autotiles/metal-tiles-8-36.png Binary files differnew file mode 100644 index 0000000..e8c2913 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-37.png b/mindus/assets/blocks/autotiles/metal-tiles-8-37.png Binary files differnew file mode 100644 index 0000000..88c2253 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-38.png b/mindus/assets/blocks/autotiles/metal-tiles-8-38.png Binary files differnew file mode 100644 index 0000000..61eb19f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-39.png b/mindus/assets/blocks/autotiles/metal-tiles-8-39.png Binary files differnew file mode 100644 index 0000000..ddb8223 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-4.png b/mindus/assets/blocks/autotiles/metal-tiles-8-4.png Binary files differnew file mode 100644 index 0000000..852bfed --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-40.png b/mindus/assets/blocks/autotiles/metal-tiles-8-40.png Binary files differnew file mode 100644 index 0000000..71b9e6d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-41.png b/mindus/assets/blocks/autotiles/metal-tiles-8-41.png Binary files differnew file mode 100644 index 0000000..a22f761 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-42.png b/mindus/assets/blocks/autotiles/metal-tiles-8-42.png Binary files differnew file mode 100644 index 0000000..cc9c418 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-43.png b/mindus/assets/blocks/autotiles/metal-tiles-8-43.png Binary files differnew file mode 100644 index 0000000..142d834 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-44.png b/mindus/assets/blocks/autotiles/metal-tiles-8-44.png Binary files differnew file mode 100644 index 0000000..2f263ef --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-45.png b/mindus/assets/blocks/autotiles/metal-tiles-8-45.png Binary files differnew file mode 100644 index 0000000..203bc62 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-46.png b/mindus/assets/blocks/autotiles/metal-tiles-8-46.png Binary files differnew file mode 100644 index 0000000..d2fe08b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-5.png b/mindus/assets/blocks/autotiles/metal-tiles-8-5.png Binary files differnew file mode 100644 index 0000000..7bdee26 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-6.png b/mindus/assets/blocks/autotiles/metal-tiles-8-6.png Binary files differnew file mode 100644 index 0000000..1c564b6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-7.png b/mindus/assets/blocks/autotiles/metal-tiles-8-7.png Binary files differnew file mode 100644 index 0000000..9211d7e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-8.png b/mindus/assets/blocks/autotiles/metal-tiles-8-8.png Binary files differnew file mode 100644 index 0000000..7c76914 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-8-9.png b/mindus/assets/blocks/autotiles/metal-tiles-8-9.png Binary files differnew file mode 100644 index 0000000..0c45540 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-8-9.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-0.png b/mindus/assets/blocks/autotiles/metal-tiles-9-0.png Binary files differnew file mode 100644 index 0000000..24ee982 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-0.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-1.png b/mindus/assets/blocks/autotiles/metal-tiles-9-1.png Binary files differnew file mode 100644 index 0000000..68e0d16 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-1.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-10.png b/mindus/assets/blocks/autotiles/metal-tiles-9-10.png Binary files differnew file mode 100644 index 0000000..85c444e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-10.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-11.png b/mindus/assets/blocks/autotiles/metal-tiles-9-11.png Binary files differnew file mode 100644 index 0000000..7187e7a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-11.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-12.png b/mindus/assets/blocks/autotiles/metal-tiles-9-12.png Binary files differnew file mode 100644 index 0000000..26287cf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-12.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-13.png b/mindus/assets/blocks/autotiles/metal-tiles-9-13.png Binary files differnew file mode 100644 index 0000000..0ae157d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-13.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-14.png b/mindus/assets/blocks/autotiles/metal-tiles-9-14.png Binary files differnew file mode 100644 index 0000000..9c0fc7c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-14.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-15.png b/mindus/assets/blocks/autotiles/metal-tiles-9-15.png Binary files differnew file mode 100644 index 0000000..e767068 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-15.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-16.png b/mindus/assets/blocks/autotiles/metal-tiles-9-16.png Binary files differnew file mode 100644 index 0000000..90ae779 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-16.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-17.png b/mindus/assets/blocks/autotiles/metal-tiles-9-17.png Binary files differnew file mode 100644 index 0000000..f6b7c5a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-17.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-18.png b/mindus/assets/blocks/autotiles/metal-tiles-9-18.png Binary files differnew file mode 100644 index 0000000..854d6b8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-18.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-19.png b/mindus/assets/blocks/autotiles/metal-tiles-9-19.png Binary files differnew file mode 100644 index 0000000..89e0add --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-19.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-2.png b/mindus/assets/blocks/autotiles/metal-tiles-9-2.png Binary files differnew file mode 100644 index 0000000..5860da6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-2.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-20.png b/mindus/assets/blocks/autotiles/metal-tiles-9-20.png Binary files differnew file mode 100644 index 0000000..35997e4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-20.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-21.png b/mindus/assets/blocks/autotiles/metal-tiles-9-21.png Binary files differnew file mode 100644 index 0000000..8de8ae8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-21.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-22.png b/mindus/assets/blocks/autotiles/metal-tiles-9-22.png Binary files differnew file mode 100644 index 0000000..92d6dc7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-22.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-23.png b/mindus/assets/blocks/autotiles/metal-tiles-9-23.png Binary files differnew file mode 100644 index 0000000..5b488d7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-23.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-24.png b/mindus/assets/blocks/autotiles/metal-tiles-9-24.png Binary files differnew file mode 100644 index 0000000..49591fb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-24.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-25.png b/mindus/assets/blocks/autotiles/metal-tiles-9-25.png Binary files differnew file mode 100644 index 0000000..2f7299c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-25.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-26.png b/mindus/assets/blocks/autotiles/metal-tiles-9-26.png Binary files differnew file mode 100644 index 0000000..5983f77 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-26.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-27.png b/mindus/assets/blocks/autotiles/metal-tiles-9-27.png Binary files differnew file mode 100644 index 0000000..e79bd60 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-27.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-28.png b/mindus/assets/blocks/autotiles/metal-tiles-9-28.png Binary files differnew file mode 100644 index 0000000..99cdba3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-28.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-29.png b/mindus/assets/blocks/autotiles/metal-tiles-9-29.png Binary files differnew file mode 100644 index 0000000..220ea61 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-29.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-3.png b/mindus/assets/blocks/autotiles/metal-tiles-9-3.png Binary files differnew file mode 100644 index 0000000..83235e5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-3.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-30.png b/mindus/assets/blocks/autotiles/metal-tiles-9-30.png Binary files differnew file mode 100644 index 0000000..bd9f5ec --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-30.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-31.png b/mindus/assets/blocks/autotiles/metal-tiles-9-31.png Binary files differnew file mode 100644 index 0000000..aaffc8c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-31.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-32.png b/mindus/assets/blocks/autotiles/metal-tiles-9-32.png Binary files differnew file mode 100644 index 0000000..021965b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-32.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-33.png b/mindus/assets/blocks/autotiles/metal-tiles-9-33.png Binary files differnew file mode 100644 index 0000000..334667d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-33.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-34.png b/mindus/assets/blocks/autotiles/metal-tiles-9-34.png Binary files differnew file mode 100644 index 0000000..e4f3c9a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-34.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-35.png b/mindus/assets/blocks/autotiles/metal-tiles-9-35.png Binary files differnew file mode 100644 index 0000000..89ec484 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-35.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-36.png b/mindus/assets/blocks/autotiles/metal-tiles-9-36.png Binary files differnew file mode 100644 index 0000000..14d5ada --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-36.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-37.png b/mindus/assets/blocks/autotiles/metal-tiles-9-37.png Binary files differnew file mode 100644 index 0000000..f33cf39 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-37.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-38.png b/mindus/assets/blocks/autotiles/metal-tiles-9-38.png Binary files differnew file mode 100644 index 0000000..33f11e7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-38.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-39.png b/mindus/assets/blocks/autotiles/metal-tiles-9-39.png Binary files differnew file mode 100644 index 0000000..aa9a2bb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-39.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-4.png b/mindus/assets/blocks/autotiles/metal-tiles-9-4.png Binary files differnew file mode 100644 index 0000000..13a2232 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-4.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-40.png b/mindus/assets/blocks/autotiles/metal-tiles-9-40.png Binary files differnew file mode 100644 index 0000000..3f7d666 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-40.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-41.png b/mindus/assets/blocks/autotiles/metal-tiles-9-41.png Binary files differnew file mode 100644 index 0000000..b8b38e1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-41.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-42.png b/mindus/assets/blocks/autotiles/metal-tiles-9-42.png Binary files differnew file mode 100644 index 0000000..8a53630 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-42.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-43.png b/mindus/assets/blocks/autotiles/metal-tiles-9-43.png Binary files differnew file mode 100644 index 0000000..8b06f92 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-43.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-44.png b/mindus/assets/blocks/autotiles/metal-tiles-9-44.png Binary files differnew file mode 100644 index 0000000..5704e30 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-44.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-45.png b/mindus/assets/blocks/autotiles/metal-tiles-9-45.png Binary files differnew file mode 100644 index 0000000..bccab8c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-45.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-46.png b/mindus/assets/blocks/autotiles/metal-tiles-9-46.png Binary files differnew file mode 100644 index 0000000..47e1dfe --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-46.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-5.png b/mindus/assets/blocks/autotiles/metal-tiles-9-5.png Binary files differnew file mode 100644 index 0000000..e3c1a9e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-5.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-6.png b/mindus/assets/blocks/autotiles/metal-tiles-9-6.png Binary files differnew file mode 100644 index 0000000..e198733 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-6.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-7.png b/mindus/assets/blocks/autotiles/metal-tiles-9-7.png Binary files differnew file mode 100644 index 0000000..470f4f2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-7.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-8.png b/mindus/assets/blocks/autotiles/metal-tiles-9-8.png Binary files differnew file mode 100644 index 0000000..fb2c08c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-8.png diff --git a/mindus/assets/blocks/autotiles/metal-tiles-9-9.png b/mindus/assets/blocks/autotiles/metal-tiles-9-9.png Binary files differnew file mode 100644 index 0000000..caa3924 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-tiles-9-9.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-0.png b/mindus/assets/blocks/autotiles/metal-wall-1-0.png Binary files differnew file mode 100644 index 0000000..640609b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-0.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-1.png b/mindus/assets/blocks/autotiles/metal-wall-1-1.png Binary files differnew file mode 100644 index 0000000..a1e90f7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-1.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-10.png b/mindus/assets/blocks/autotiles/metal-wall-1-10.png Binary files differnew file mode 100644 index 0000000..52125b4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-10.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-11.png b/mindus/assets/blocks/autotiles/metal-wall-1-11.png Binary files differnew file mode 100644 index 0000000..e8b1d7e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-11.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-12.png b/mindus/assets/blocks/autotiles/metal-wall-1-12.png Binary files differnew file mode 100644 index 0000000..0073c49 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-12.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-13.png b/mindus/assets/blocks/autotiles/metal-wall-1-13.png Binary files differnew file mode 100644 index 0000000..d49c80a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-13.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-14.png b/mindus/assets/blocks/autotiles/metal-wall-1-14.png Binary files differnew file mode 100644 index 0000000..d44aeb1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-14.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-15.png b/mindus/assets/blocks/autotiles/metal-wall-1-15.png Binary files differnew file mode 100644 index 0000000..e631fec --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-15.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-16.png b/mindus/assets/blocks/autotiles/metal-wall-1-16.png Binary files differnew file mode 100644 index 0000000..3676779 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-16.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-17.png b/mindus/assets/blocks/autotiles/metal-wall-1-17.png Binary files differnew file mode 100644 index 0000000..268b491 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-17.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-18.png b/mindus/assets/blocks/autotiles/metal-wall-1-18.png Binary files differnew file mode 100644 index 0000000..5dfa25a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-18.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-19.png b/mindus/assets/blocks/autotiles/metal-wall-1-19.png Binary files differnew file mode 100644 index 0000000..4b658c4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-19.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-2.png b/mindus/assets/blocks/autotiles/metal-wall-1-2.png Binary files differnew file mode 100644 index 0000000..b9df68f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-2.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-20.png b/mindus/assets/blocks/autotiles/metal-wall-1-20.png Binary files differnew file mode 100644 index 0000000..4522fa3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-20.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-21.png b/mindus/assets/blocks/autotiles/metal-wall-1-21.png Binary files differnew file mode 100644 index 0000000..d0f1a56 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-21.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-22.png b/mindus/assets/blocks/autotiles/metal-wall-1-22.png Binary files differnew file mode 100644 index 0000000..edf89f4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-22.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-23.png b/mindus/assets/blocks/autotiles/metal-wall-1-23.png Binary files differnew file mode 100644 index 0000000..040824c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-23.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-24.png b/mindus/assets/blocks/autotiles/metal-wall-1-24.png Binary files differnew file mode 100644 index 0000000..6d0a49e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-24.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-25.png b/mindus/assets/blocks/autotiles/metal-wall-1-25.png Binary files differnew file mode 100644 index 0000000..221364f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-25.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-26.png b/mindus/assets/blocks/autotiles/metal-wall-1-26.png Binary files differnew file mode 100644 index 0000000..4928345 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-26.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-27.png b/mindus/assets/blocks/autotiles/metal-wall-1-27.png Binary files differnew file mode 100644 index 0000000..eebb24b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-27.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-28.png b/mindus/assets/blocks/autotiles/metal-wall-1-28.png Binary files differnew file mode 100644 index 0000000..e2fb598 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-28.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-29.png b/mindus/assets/blocks/autotiles/metal-wall-1-29.png Binary files differnew file mode 100644 index 0000000..15a78d3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-29.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-3.png b/mindus/assets/blocks/autotiles/metal-wall-1-3.png Binary files differnew file mode 100644 index 0000000..41fab9c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-3.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-30.png b/mindus/assets/blocks/autotiles/metal-wall-1-30.png Binary files differnew file mode 100644 index 0000000..0fba650 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-30.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-31.png b/mindus/assets/blocks/autotiles/metal-wall-1-31.png Binary files differnew file mode 100644 index 0000000..98a9922 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-31.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-32.png b/mindus/assets/blocks/autotiles/metal-wall-1-32.png Binary files differnew file mode 100644 index 0000000..5ab8034 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-32.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-33.png b/mindus/assets/blocks/autotiles/metal-wall-1-33.png Binary files differnew file mode 100644 index 0000000..4749954 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-33.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-34.png b/mindus/assets/blocks/autotiles/metal-wall-1-34.png Binary files differnew file mode 100644 index 0000000..d87fe4d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-34.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-35.png b/mindus/assets/blocks/autotiles/metal-wall-1-35.png Binary files differnew file mode 100644 index 0000000..307ed89 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-35.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-36.png b/mindus/assets/blocks/autotiles/metal-wall-1-36.png Binary files differnew file mode 100644 index 0000000..f834622 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-36.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-37.png b/mindus/assets/blocks/autotiles/metal-wall-1-37.png Binary files differnew file mode 100644 index 0000000..8a26104 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-37.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-38.png b/mindus/assets/blocks/autotiles/metal-wall-1-38.png Binary files differnew file mode 100644 index 0000000..a11902c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-38.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-39.png b/mindus/assets/blocks/autotiles/metal-wall-1-39.png Binary files differnew file mode 100644 index 0000000..b28bd3f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-39.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-4.png b/mindus/assets/blocks/autotiles/metal-wall-1-4.png Binary files differnew file mode 100644 index 0000000..63d4abf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-4.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-40.png b/mindus/assets/blocks/autotiles/metal-wall-1-40.png Binary files differnew file mode 100644 index 0000000..ba00ff4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-40.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-41.png b/mindus/assets/blocks/autotiles/metal-wall-1-41.png Binary files differnew file mode 100644 index 0000000..eede726 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-41.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-42.png b/mindus/assets/blocks/autotiles/metal-wall-1-42.png Binary files differnew file mode 100644 index 0000000..67ba1b8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-42.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-43.png b/mindus/assets/blocks/autotiles/metal-wall-1-43.png Binary files differnew file mode 100644 index 0000000..8f9ca02 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-43.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-44.png b/mindus/assets/blocks/autotiles/metal-wall-1-44.png Binary files differnew file mode 100644 index 0000000..e12b71e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-44.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-45.png b/mindus/assets/blocks/autotiles/metal-wall-1-45.png Binary files differnew file mode 100644 index 0000000..5400826 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-45.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-46.png b/mindus/assets/blocks/autotiles/metal-wall-1-46.png Binary files differnew file mode 100644 index 0000000..ee1e6f6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-46.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-5.png b/mindus/assets/blocks/autotiles/metal-wall-1-5.png Binary files differnew file mode 100644 index 0000000..ca1d63e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-5.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-6.png b/mindus/assets/blocks/autotiles/metal-wall-1-6.png Binary files differnew file mode 100644 index 0000000..70c5a91 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-6.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-7.png b/mindus/assets/blocks/autotiles/metal-wall-1-7.png Binary files differnew file mode 100644 index 0000000..bab16a5 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-7.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-8.png b/mindus/assets/blocks/autotiles/metal-wall-1-8.png Binary files differnew file mode 100644 index 0000000..cf967dc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-8.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-1-9.png b/mindus/assets/blocks/autotiles/metal-wall-1-9.png Binary files differnew file mode 100644 index 0000000..f84fa03 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-1-9.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-0.png b/mindus/assets/blocks/autotiles/metal-wall-2-0.png Binary files differnew file mode 100644 index 0000000..04a0ae8 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-0.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-1.png b/mindus/assets/blocks/autotiles/metal-wall-2-1.png Binary files differnew file mode 100644 index 0000000..a8acbc3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-1.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-10.png b/mindus/assets/blocks/autotiles/metal-wall-2-10.png Binary files differnew file mode 100644 index 0000000..48e51ba --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-10.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-11.png b/mindus/assets/blocks/autotiles/metal-wall-2-11.png Binary files differnew file mode 100644 index 0000000..c15fa03 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-11.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-12.png b/mindus/assets/blocks/autotiles/metal-wall-2-12.png Binary files differnew file mode 100644 index 0000000..33dc92e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-12.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-13.png b/mindus/assets/blocks/autotiles/metal-wall-2-13.png Binary files differnew file mode 100644 index 0000000..4b78b5a --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-13.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-14.png b/mindus/assets/blocks/autotiles/metal-wall-2-14.png Binary files differnew file mode 100644 index 0000000..c00cc7d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-14.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-15.png b/mindus/assets/blocks/autotiles/metal-wall-2-15.png Binary files differnew file mode 100644 index 0000000..fe7cd06 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-15.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-16.png b/mindus/assets/blocks/autotiles/metal-wall-2-16.png Binary files differnew file mode 100644 index 0000000..3f56550 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-16.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-17.png b/mindus/assets/blocks/autotiles/metal-wall-2-17.png Binary files differnew file mode 100644 index 0000000..b80c98c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-17.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-18.png b/mindus/assets/blocks/autotiles/metal-wall-2-18.png Binary files differnew file mode 100644 index 0000000..bc0c112 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-18.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-19.png b/mindus/assets/blocks/autotiles/metal-wall-2-19.png Binary files differnew file mode 100644 index 0000000..951f456 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-19.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-2.png b/mindus/assets/blocks/autotiles/metal-wall-2-2.png Binary files differnew file mode 100644 index 0000000..ce10177 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-2.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-20.png b/mindus/assets/blocks/autotiles/metal-wall-2-20.png Binary files differnew file mode 100644 index 0000000..a3ed77f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-20.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-21.png b/mindus/assets/blocks/autotiles/metal-wall-2-21.png Binary files differnew file mode 100644 index 0000000..397bd21 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-21.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-22.png b/mindus/assets/blocks/autotiles/metal-wall-2-22.png Binary files differnew file mode 100644 index 0000000..edfd93b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-22.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-23.png b/mindus/assets/blocks/autotiles/metal-wall-2-23.png Binary files differnew file mode 100644 index 0000000..7c2b2a2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-23.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-24.png b/mindus/assets/blocks/autotiles/metal-wall-2-24.png Binary files differnew file mode 100644 index 0000000..2298d69 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-24.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-25.png b/mindus/assets/blocks/autotiles/metal-wall-2-25.png Binary files differnew file mode 100644 index 0000000..a433744 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-25.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-26.png b/mindus/assets/blocks/autotiles/metal-wall-2-26.png Binary files differnew file mode 100644 index 0000000..0f242fe --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-26.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-27.png b/mindus/assets/blocks/autotiles/metal-wall-2-27.png Binary files differnew file mode 100644 index 0000000..f9130e7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-27.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-28.png b/mindus/assets/blocks/autotiles/metal-wall-2-28.png Binary files differnew file mode 100644 index 0000000..ae38e48 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-28.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-29.png b/mindus/assets/blocks/autotiles/metal-wall-2-29.png Binary files differnew file mode 100644 index 0000000..7f9302d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-29.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-3.png b/mindus/assets/blocks/autotiles/metal-wall-2-3.png Binary files differnew file mode 100644 index 0000000..7ef2049 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-3.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-30.png b/mindus/assets/blocks/autotiles/metal-wall-2-30.png Binary files differnew file mode 100644 index 0000000..5846ddf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-30.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-31.png b/mindus/assets/blocks/autotiles/metal-wall-2-31.png Binary files differnew file mode 100644 index 0000000..ca9488e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-31.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-32.png b/mindus/assets/blocks/autotiles/metal-wall-2-32.png Binary files differnew file mode 100644 index 0000000..d5d7088 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-32.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-33.png b/mindus/assets/blocks/autotiles/metal-wall-2-33.png Binary files differnew file mode 100644 index 0000000..11122b1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-33.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-34.png b/mindus/assets/blocks/autotiles/metal-wall-2-34.png Binary files differnew file mode 100644 index 0000000..ece8ebb --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-34.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-35.png b/mindus/assets/blocks/autotiles/metal-wall-2-35.png Binary files differnew file mode 100644 index 0000000..de8930f --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-35.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-36.png b/mindus/assets/blocks/autotiles/metal-wall-2-36.png Binary files differnew file mode 100644 index 0000000..02c4bba --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-36.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-37.png b/mindus/assets/blocks/autotiles/metal-wall-2-37.png Binary files differnew file mode 100644 index 0000000..adf0bfe --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-37.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-38.png b/mindus/assets/blocks/autotiles/metal-wall-2-38.png Binary files differnew file mode 100644 index 0000000..4f72695 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-38.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-39.png b/mindus/assets/blocks/autotiles/metal-wall-2-39.png Binary files differnew file mode 100644 index 0000000..a913a43 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-39.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-4.png b/mindus/assets/blocks/autotiles/metal-wall-2-4.png Binary files differnew file mode 100644 index 0000000..68f933c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-4.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-40.png b/mindus/assets/blocks/autotiles/metal-wall-2-40.png Binary files differnew file mode 100644 index 0000000..9174e84 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-40.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-41.png b/mindus/assets/blocks/autotiles/metal-wall-2-41.png Binary files differnew file mode 100644 index 0000000..4118b39 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-41.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-42.png b/mindus/assets/blocks/autotiles/metal-wall-2-42.png Binary files differnew file mode 100644 index 0000000..aad6bee --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-42.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-43.png b/mindus/assets/blocks/autotiles/metal-wall-2-43.png Binary files differnew file mode 100644 index 0000000..da630ff --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-43.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-44.png b/mindus/assets/blocks/autotiles/metal-wall-2-44.png Binary files differnew file mode 100644 index 0000000..a554111 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-44.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-45.png b/mindus/assets/blocks/autotiles/metal-wall-2-45.png Binary files differnew file mode 100644 index 0000000..72ed549 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-45.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-46.png b/mindus/assets/blocks/autotiles/metal-wall-2-46.png Binary files differnew file mode 100644 index 0000000..8f4ae93 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-46.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-5.png b/mindus/assets/blocks/autotiles/metal-wall-2-5.png Binary files differnew file mode 100644 index 0000000..eada091 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-5.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-6.png b/mindus/assets/blocks/autotiles/metal-wall-2-6.png Binary files differnew file mode 100644 index 0000000..afdfbfe --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-6.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-7.png b/mindus/assets/blocks/autotiles/metal-wall-2-7.png Binary files differnew file mode 100644 index 0000000..7613a24 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-7.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-8.png b/mindus/assets/blocks/autotiles/metal-wall-2-8.png Binary files differnew file mode 100644 index 0000000..162b264 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-8.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-2-9.png b/mindus/assets/blocks/autotiles/metal-wall-2-9.png Binary files differnew file mode 100644 index 0000000..5062801 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-2-9.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-0.png b/mindus/assets/blocks/autotiles/metal-wall-3-0.png Binary files differnew file mode 100644 index 0000000..3311205 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-0.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-1.png b/mindus/assets/blocks/autotiles/metal-wall-3-1.png Binary files differnew file mode 100644 index 0000000..747d2cf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-1.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-10.png b/mindus/assets/blocks/autotiles/metal-wall-3-10.png Binary files differnew file mode 100644 index 0000000..dc5ce4e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-10.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-11.png b/mindus/assets/blocks/autotiles/metal-wall-3-11.png Binary files differnew file mode 100644 index 0000000..f212f2d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-11.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-12.png b/mindus/assets/blocks/autotiles/metal-wall-3-12.png Binary files differnew file mode 100644 index 0000000..ab7d94d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-12.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-13.png b/mindus/assets/blocks/autotiles/metal-wall-3-13.png Binary files differnew file mode 100644 index 0000000..7cdeb16 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-13.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-14.png b/mindus/assets/blocks/autotiles/metal-wall-3-14.png Binary files differnew file mode 100644 index 0000000..a04cb74 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-14.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-15.png b/mindus/assets/blocks/autotiles/metal-wall-3-15.png Binary files differnew file mode 100644 index 0000000..d57a07e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-15.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-16.png b/mindus/assets/blocks/autotiles/metal-wall-3-16.png Binary files differnew file mode 100644 index 0000000..0653d44 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-16.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-17.png b/mindus/assets/blocks/autotiles/metal-wall-3-17.png Binary files differnew file mode 100644 index 0000000..c3e731d --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-17.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-18.png b/mindus/assets/blocks/autotiles/metal-wall-3-18.png Binary files differnew file mode 100644 index 0000000..0726f83 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-18.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-19.png b/mindus/assets/blocks/autotiles/metal-wall-3-19.png Binary files differnew file mode 100644 index 0000000..0c7b8c4 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-19.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-2.png b/mindus/assets/blocks/autotiles/metal-wall-3-2.png Binary files differnew file mode 100644 index 0000000..6feccb1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-2.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-20.png b/mindus/assets/blocks/autotiles/metal-wall-3-20.png Binary files differnew file mode 100644 index 0000000..fc1548c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-20.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-21.png b/mindus/assets/blocks/autotiles/metal-wall-3-21.png Binary files differnew file mode 100644 index 0000000..45725bf --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-21.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-22.png b/mindus/assets/blocks/autotiles/metal-wall-3-22.png Binary files differnew file mode 100644 index 0000000..f781950 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-22.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-23.png b/mindus/assets/blocks/autotiles/metal-wall-3-23.png Binary files differnew file mode 100644 index 0000000..1f7dabc --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-23.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-24.png b/mindus/assets/blocks/autotiles/metal-wall-3-24.png Binary files differnew file mode 100644 index 0000000..45ec175 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-24.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-25.png b/mindus/assets/blocks/autotiles/metal-wall-3-25.png Binary files differnew file mode 100644 index 0000000..acd70e7 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-25.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-26.png b/mindus/assets/blocks/autotiles/metal-wall-3-26.png Binary files differnew file mode 100644 index 0000000..9a8fcde --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-26.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-27.png b/mindus/assets/blocks/autotiles/metal-wall-3-27.png Binary files differnew file mode 100644 index 0000000..506eef3 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-27.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-28.png b/mindus/assets/blocks/autotiles/metal-wall-3-28.png Binary files differnew file mode 100644 index 0000000..f1902d1 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-28.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-29.png b/mindus/assets/blocks/autotiles/metal-wall-3-29.png Binary files differnew file mode 100644 index 0000000..5c21785 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-29.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-3.png b/mindus/assets/blocks/autotiles/metal-wall-3-3.png Binary files differnew file mode 100644 index 0000000..c6a8e8e --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-3.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-30.png b/mindus/assets/blocks/autotiles/metal-wall-3-30.png Binary files differnew file mode 100644 index 0000000..0bbb313 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-30.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-31.png b/mindus/assets/blocks/autotiles/metal-wall-3-31.png Binary files differnew file mode 100644 index 0000000..36351ab --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-31.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-32.png b/mindus/assets/blocks/autotiles/metal-wall-3-32.png Binary files differnew file mode 100644 index 0000000..e34b6ec --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-32.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-33.png b/mindus/assets/blocks/autotiles/metal-wall-3-33.png Binary files differnew file mode 100644 index 0000000..0a3b85c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-33.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-34.png b/mindus/assets/blocks/autotiles/metal-wall-3-34.png Binary files differnew file mode 100644 index 0000000..080c108 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-34.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-35.png b/mindus/assets/blocks/autotiles/metal-wall-3-35.png Binary files differnew file mode 100644 index 0000000..72315a9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-35.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-36.png b/mindus/assets/blocks/autotiles/metal-wall-3-36.png Binary files differnew file mode 100644 index 0000000..099f81c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-36.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-37.png b/mindus/assets/blocks/autotiles/metal-wall-3-37.png Binary files differnew file mode 100644 index 0000000..5801a27 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-37.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-38.png b/mindus/assets/blocks/autotiles/metal-wall-3-38.png Binary files differnew file mode 100644 index 0000000..a07afb9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-38.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-39.png b/mindus/assets/blocks/autotiles/metal-wall-3-39.png Binary files differnew file mode 100644 index 0000000..703fcd9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-39.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-4.png b/mindus/assets/blocks/autotiles/metal-wall-3-4.png Binary files differnew file mode 100644 index 0000000..1409b76 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-4.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-40.png b/mindus/assets/blocks/autotiles/metal-wall-3-40.png Binary files differnew file mode 100644 index 0000000..c77e1f2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-40.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-41.png b/mindus/assets/blocks/autotiles/metal-wall-3-41.png Binary files differnew file mode 100644 index 0000000..5261ec6 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-41.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-42.png b/mindus/assets/blocks/autotiles/metal-wall-3-42.png Binary files differnew file mode 100644 index 0000000..2703bf2 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-42.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-43.png b/mindus/assets/blocks/autotiles/metal-wall-3-43.png Binary files differnew file mode 100644 index 0000000..149b85c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-43.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-44.png b/mindus/assets/blocks/autotiles/metal-wall-3-44.png Binary files differnew file mode 100644 index 0000000..92672ad --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-44.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-45.png b/mindus/assets/blocks/autotiles/metal-wall-3-45.png Binary files differnew file mode 100644 index 0000000..94ccd2b --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-45.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-46.png b/mindus/assets/blocks/autotiles/metal-wall-3-46.png Binary files differnew file mode 100644 index 0000000..29c6146 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-46.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-5.png b/mindus/assets/blocks/autotiles/metal-wall-3-5.png Binary files differnew file mode 100644 index 0000000..57c6bb9 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-5.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-6.png b/mindus/assets/blocks/autotiles/metal-wall-3-6.png Binary files differnew file mode 100644 index 0000000..726397c --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-6.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-7.png b/mindus/assets/blocks/autotiles/metal-wall-3-7.png Binary files differnew file mode 100644 index 0000000..dc4d5db --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-7.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-8.png b/mindus/assets/blocks/autotiles/metal-wall-3-8.png Binary files differnew file mode 100644 index 0000000..151dbed --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-8.png diff --git a/mindus/assets/blocks/autotiles/metal-wall-3-9.png b/mindus/assets/blocks/autotiles/metal-wall-3-9.png Binary files differnew file mode 100644 index 0000000..9113075 --- /dev/null +++ b/mindus/assets/blocks/autotiles/metal-wall-3-9.png diff --git a/mindus/assets/blocks/campaign/advanced-launch-pad.png b/mindus/assets/blocks/campaign/advanced-launch-pad.png Binary files differnew file mode 100644 index 0000000..1ead655 --- /dev/null +++ b/mindus/assets/blocks/campaign/advanced-launch-pad.png diff --git a/mindus/assets/blocks/campaign/interplanetary-accelerator.png b/mindus/assets/blocks/campaign/interplanetary-accelerator.png Binary files differnew file mode 100644 index 0000000..7009ad1 --- /dev/null +++ b/mindus/assets/blocks/campaign/interplanetary-accelerator.png diff --git a/mindus/assets/blocks/campaign/landing-pad-bg.png b/mindus/assets/blocks/campaign/landing-pad-bg.png Binary files differnew file mode 100644 index 0000000..f02ccb8 --- /dev/null +++ b/mindus/assets/blocks/campaign/landing-pad-bg.png diff --git a/mindus/assets/blocks/campaign/landing-pad.png b/mindus/assets/blocks/campaign/landing-pad.png Binary files differnew file mode 100644 index 0000000..1978d09 --- /dev/null +++ b/mindus/assets/blocks/campaign/landing-pad.png diff --git a/assets/blocks/campaign/launch-pad.png b/mindus/assets/blocks/campaign/launch-pad.png Binary files differindex 3dcca24..3dcca24 100644 --- a/assets/blocks/campaign/launch-pad.png +++ b/mindus/assets/blocks/campaign/launch-pad.png diff --git a/mindus/assets/blocks/characters/character-overlay0.png b/mindus/assets/blocks/characters/character-overlay0.png Binary files differnew file mode 100644 index 0000000..ab31084 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay0.png diff --git a/mindus/assets/blocks/characters/character-overlay1.png b/mindus/assets/blocks/characters/character-overlay1.png Binary files differnew file mode 100644 index 0000000..7b5b7bf --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay1.png diff --git a/mindus/assets/blocks/characters/character-overlay10.png b/mindus/assets/blocks/characters/character-overlay10.png Binary files differnew file mode 100644 index 0000000..3bebe9f --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay10.png diff --git a/mindus/assets/blocks/characters/character-overlay11.png b/mindus/assets/blocks/characters/character-overlay11.png Binary files differnew file mode 100644 index 0000000..8a360b8 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay11.png diff --git a/mindus/assets/blocks/characters/character-overlay12.png b/mindus/assets/blocks/characters/character-overlay12.png Binary files differnew file mode 100644 index 0000000..2a57d8d --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay12.png diff --git a/mindus/assets/blocks/characters/character-overlay13.png b/mindus/assets/blocks/characters/character-overlay13.png Binary files differnew file mode 100644 index 0000000..9c8d6de --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay13.png diff --git a/mindus/assets/blocks/characters/character-overlay14.png b/mindus/assets/blocks/characters/character-overlay14.png Binary files differnew file mode 100644 index 0000000..6eaae36 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay14.png diff --git a/mindus/assets/blocks/characters/character-overlay15.png b/mindus/assets/blocks/characters/character-overlay15.png Binary files differnew file mode 100644 index 0000000..d0db8a5 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay15.png diff --git a/mindus/assets/blocks/characters/character-overlay16.png b/mindus/assets/blocks/characters/character-overlay16.png Binary files differnew file mode 100644 index 0000000..59f71c7 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay16.png diff --git a/mindus/assets/blocks/characters/character-overlay17.png b/mindus/assets/blocks/characters/character-overlay17.png Binary files differnew file mode 100644 index 0000000..a61deb9 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay17.png diff --git a/mindus/assets/blocks/characters/character-overlay18.png b/mindus/assets/blocks/characters/character-overlay18.png Binary files differnew file mode 100644 index 0000000..f9b1c9b --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay18.png diff --git a/mindus/assets/blocks/characters/character-overlay19.png b/mindus/assets/blocks/characters/character-overlay19.png Binary files differnew file mode 100644 index 0000000..3b4b4af --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay19.png diff --git a/mindus/assets/blocks/characters/character-overlay2.png b/mindus/assets/blocks/characters/character-overlay2.png Binary files differnew file mode 100644 index 0000000..d1fe91a --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay2.png diff --git a/mindus/assets/blocks/characters/character-overlay20.png b/mindus/assets/blocks/characters/character-overlay20.png Binary files differnew file mode 100644 index 0000000..29e1154 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay20.png diff --git a/mindus/assets/blocks/characters/character-overlay21.png b/mindus/assets/blocks/characters/character-overlay21.png Binary files differnew file mode 100644 index 0000000..796910f --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay21.png diff --git a/mindus/assets/blocks/characters/character-overlay22.png b/mindus/assets/blocks/characters/character-overlay22.png Binary files differnew file mode 100644 index 0000000..092046c --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay22.png diff --git a/mindus/assets/blocks/characters/character-overlay23.png b/mindus/assets/blocks/characters/character-overlay23.png Binary files differnew file mode 100644 index 0000000..3b83f8d --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay23.png diff --git a/mindus/assets/blocks/characters/character-overlay24.png b/mindus/assets/blocks/characters/character-overlay24.png Binary files differnew file mode 100644 index 0000000..f33968c --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay24.png diff --git a/mindus/assets/blocks/characters/character-overlay25.png b/mindus/assets/blocks/characters/character-overlay25.png Binary files differnew file mode 100644 index 0000000..3240b77 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay25.png diff --git a/mindus/assets/blocks/characters/character-overlay26.png b/mindus/assets/blocks/characters/character-overlay26.png Binary files differnew file mode 100644 index 0000000..226386a --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay26.png diff --git a/mindus/assets/blocks/characters/character-overlay27.png b/mindus/assets/blocks/characters/character-overlay27.png Binary files differnew file mode 100644 index 0000000..b5b478f --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay27.png diff --git a/mindus/assets/blocks/characters/character-overlay28.png b/mindus/assets/blocks/characters/character-overlay28.png Binary files differnew file mode 100644 index 0000000..961b593 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay28.png diff --git a/mindus/assets/blocks/characters/character-overlay29.png b/mindus/assets/blocks/characters/character-overlay29.png Binary files differnew file mode 100644 index 0000000..c8b9ecc --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay29.png diff --git a/mindus/assets/blocks/characters/character-overlay3.png b/mindus/assets/blocks/characters/character-overlay3.png Binary files differnew file mode 100644 index 0000000..36e9a5f --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay3.png diff --git a/mindus/assets/blocks/characters/character-overlay30.png b/mindus/assets/blocks/characters/character-overlay30.png Binary files differnew file mode 100644 index 0000000..31827bd --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay30.png diff --git a/mindus/assets/blocks/characters/character-overlay31.png b/mindus/assets/blocks/characters/character-overlay31.png Binary files differnew file mode 100644 index 0000000..2dc061c --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay31.png diff --git a/mindus/assets/blocks/characters/character-overlay32.png b/mindus/assets/blocks/characters/character-overlay32.png Binary files differnew file mode 100644 index 0000000..1b199c4 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay32.png diff --git a/mindus/assets/blocks/characters/character-overlay33.png b/mindus/assets/blocks/characters/character-overlay33.png Binary files differnew file mode 100644 index 0000000..82dd71b --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay33.png diff --git a/mindus/assets/blocks/characters/character-overlay34.png b/mindus/assets/blocks/characters/character-overlay34.png Binary files differnew file mode 100644 index 0000000..3d4d52a --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay34.png diff --git a/mindus/assets/blocks/characters/character-overlay35.png b/mindus/assets/blocks/characters/character-overlay35.png Binary files differnew file mode 100644 index 0000000..e425182 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay35.png diff --git a/mindus/assets/blocks/characters/character-overlay36.png b/mindus/assets/blocks/characters/character-overlay36.png Binary files differnew file mode 100644 index 0000000..dbfeea3 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay36.png diff --git a/mindus/assets/blocks/characters/character-overlay37.png b/mindus/assets/blocks/characters/character-overlay37.png Binary files differnew file mode 100644 index 0000000..cd8e963 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay37.png diff --git a/mindus/assets/blocks/characters/character-overlay38.png b/mindus/assets/blocks/characters/character-overlay38.png Binary files differnew file mode 100644 index 0000000..8c4b51e --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay38.png diff --git a/mindus/assets/blocks/characters/character-overlay39.png b/mindus/assets/blocks/characters/character-overlay39.png Binary files differnew file mode 100644 index 0000000..a5539d8 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay39.png diff --git a/mindus/assets/blocks/characters/character-overlay4.png b/mindus/assets/blocks/characters/character-overlay4.png Binary files differnew file mode 100644 index 0000000..6925c6b --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay4.png diff --git a/mindus/assets/blocks/characters/character-overlay40.png b/mindus/assets/blocks/characters/character-overlay40.png Binary files differnew file mode 100644 index 0000000..6dbf897 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay40.png diff --git a/mindus/assets/blocks/characters/character-overlay41.png b/mindus/assets/blocks/characters/character-overlay41.png Binary files differnew file mode 100644 index 0000000..1cd03b9 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay41.png diff --git a/mindus/assets/blocks/characters/character-overlay42.png b/mindus/assets/blocks/characters/character-overlay42.png Binary files differnew file mode 100644 index 0000000..2a1e1aa --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay42.png diff --git a/mindus/assets/blocks/characters/character-overlay43.png b/mindus/assets/blocks/characters/character-overlay43.png Binary files differnew file mode 100644 index 0000000..3d7f4a6 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay43.png diff --git a/mindus/assets/blocks/characters/character-overlay44.png b/mindus/assets/blocks/characters/character-overlay44.png Binary files differnew file mode 100644 index 0000000..8d8a8a2 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay44.png diff --git a/mindus/assets/blocks/characters/character-overlay45.png b/mindus/assets/blocks/characters/character-overlay45.png Binary files differnew file mode 100644 index 0000000..54260f0 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay45.png diff --git a/mindus/assets/blocks/characters/character-overlay46.png b/mindus/assets/blocks/characters/character-overlay46.png Binary files differnew file mode 100644 index 0000000..63f1212 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay46.png diff --git a/mindus/assets/blocks/characters/character-overlay47.png b/mindus/assets/blocks/characters/character-overlay47.png Binary files differnew file mode 100644 index 0000000..0888925 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay47.png diff --git a/mindus/assets/blocks/characters/character-overlay48.png b/mindus/assets/blocks/characters/character-overlay48.png Binary files differnew file mode 100644 index 0000000..5284335 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay48.png diff --git a/mindus/assets/blocks/characters/character-overlay49.png b/mindus/assets/blocks/characters/character-overlay49.png Binary files differnew file mode 100644 index 0000000..02ea7c7 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay49.png diff --git a/mindus/assets/blocks/characters/character-overlay5.png b/mindus/assets/blocks/characters/character-overlay5.png Binary files differnew file mode 100644 index 0000000..abf33bc --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay5.png diff --git a/mindus/assets/blocks/characters/character-overlay50.png b/mindus/assets/blocks/characters/character-overlay50.png Binary files differnew file mode 100644 index 0000000..eb59850 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay50.png diff --git a/mindus/assets/blocks/characters/character-overlay51.png b/mindus/assets/blocks/characters/character-overlay51.png Binary files differnew file mode 100644 index 0000000..4dbe595 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay51.png diff --git a/mindus/assets/blocks/characters/character-overlay52.png b/mindus/assets/blocks/characters/character-overlay52.png Binary files differnew file mode 100644 index 0000000..bee0c72 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay52.png diff --git a/mindus/assets/blocks/characters/character-overlay53.png b/mindus/assets/blocks/characters/character-overlay53.png Binary files differnew file mode 100644 index 0000000..e167b56 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay53.png diff --git a/mindus/assets/blocks/characters/character-overlay54.png b/mindus/assets/blocks/characters/character-overlay54.png Binary files differnew file mode 100644 index 0000000..81645eb --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay54.png diff --git a/mindus/assets/blocks/characters/character-overlay55.png b/mindus/assets/blocks/characters/character-overlay55.png Binary files differnew file mode 100644 index 0000000..e297fff --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay55.png diff --git a/mindus/assets/blocks/characters/character-overlay56.png b/mindus/assets/blocks/characters/character-overlay56.png Binary files differnew file mode 100644 index 0000000..3c49de4 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay56.png diff --git a/mindus/assets/blocks/characters/character-overlay57.png b/mindus/assets/blocks/characters/character-overlay57.png Binary files differnew file mode 100644 index 0000000..b7ffe02 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay57.png diff --git a/mindus/assets/blocks/characters/character-overlay58.png b/mindus/assets/blocks/characters/character-overlay58.png Binary files differnew file mode 100644 index 0000000..51f7496 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay58.png diff --git a/mindus/assets/blocks/characters/character-overlay59.png b/mindus/assets/blocks/characters/character-overlay59.png Binary files differnew file mode 100644 index 0000000..ae66afc --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay59.png diff --git a/mindus/assets/blocks/characters/character-overlay6.png b/mindus/assets/blocks/characters/character-overlay6.png Binary files differnew file mode 100644 index 0000000..4f4d924 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay6.png diff --git a/mindus/assets/blocks/characters/character-overlay60.png b/mindus/assets/blocks/characters/character-overlay60.png Binary files differnew file mode 100644 index 0000000..2581705 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay60.png diff --git a/mindus/assets/blocks/characters/character-overlay61.png b/mindus/assets/blocks/characters/character-overlay61.png Binary files differnew file mode 100644 index 0000000..c983753 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay61.png diff --git a/mindus/assets/blocks/characters/character-overlay62.png b/mindus/assets/blocks/characters/character-overlay62.png Binary files differnew file mode 100644 index 0000000..e4e32ed --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay62.png diff --git a/mindus/assets/blocks/characters/character-overlay63.png b/mindus/assets/blocks/characters/character-overlay63.png Binary files differnew file mode 100644 index 0000000..0194a9b --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay63.png diff --git a/mindus/assets/blocks/characters/character-overlay7.png b/mindus/assets/blocks/characters/character-overlay7.png Binary files differnew file mode 100644 index 0000000..68c0c61 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay7.png diff --git a/mindus/assets/blocks/characters/character-overlay8.png b/mindus/assets/blocks/characters/character-overlay8.png Binary files differnew file mode 100644 index 0000000..eff4986 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay8.png diff --git a/mindus/assets/blocks/characters/character-overlay9.png b/mindus/assets/blocks/characters/character-overlay9.png Binary files differnew file mode 100644 index 0000000..ce4c494 --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay9.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux0.png b/mindus/assets/blocks/characters/rune-overlay-crux0.png Binary files differnew file mode 100644 index 0000000..6d2f70d --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux0.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux1.png b/mindus/assets/blocks/characters/rune-overlay-crux1.png Binary files differnew file mode 100644 index 0000000..b238f6f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux1.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux10.png b/mindus/assets/blocks/characters/rune-overlay-crux10.png Binary files differnew file mode 100644 index 0000000..3cbf48a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux10.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux100.png b/mindus/assets/blocks/characters/rune-overlay-crux100.png Binary files differnew file mode 100644 index 0000000..2ad0de1 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux100.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux101.png b/mindus/assets/blocks/characters/rune-overlay-crux101.png Binary files differnew file mode 100644 index 0000000..1d8a7f5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux101.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux102.png b/mindus/assets/blocks/characters/rune-overlay-crux102.png Binary files differnew file mode 100644 index 0000000..964b9cb --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux102.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux103.png b/mindus/assets/blocks/characters/rune-overlay-crux103.png Binary files differnew file mode 100644 index 0000000..841b5ab --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux103.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux104.png b/mindus/assets/blocks/characters/rune-overlay-crux104.png Binary files differnew file mode 100644 index 0000000..e35b0af --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux104.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux105.png b/mindus/assets/blocks/characters/rune-overlay-crux105.png Binary files differnew file mode 100644 index 0000000..67463a5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux105.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux106.png b/mindus/assets/blocks/characters/rune-overlay-crux106.png Binary files differnew file mode 100644 index 0000000..376d8d2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux106.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux107.png b/mindus/assets/blocks/characters/rune-overlay-crux107.png Binary files differnew file mode 100644 index 0000000..bded9ae --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux107.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux108.png b/mindus/assets/blocks/characters/rune-overlay-crux108.png Binary files differnew file mode 100644 index 0000000..68a9335 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux108.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux11.png b/mindus/assets/blocks/characters/rune-overlay-crux11.png Binary files differnew file mode 100644 index 0000000..98f3dee --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux11.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux12.png b/mindus/assets/blocks/characters/rune-overlay-crux12.png Binary files differnew file mode 100644 index 0000000..5d79d97 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux12.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux13.png b/mindus/assets/blocks/characters/rune-overlay-crux13.png Binary files differnew file mode 100644 index 0000000..8a18c13 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux13.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux14.png b/mindus/assets/blocks/characters/rune-overlay-crux14.png Binary files differnew file mode 100644 index 0000000..a812a11 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux14.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux15.png b/mindus/assets/blocks/characters/rune-overlay-crux15.png Binary files differnew file mode 100644 index 0000000..8933bca --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux15.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux16.png b/mindus/assets/blocks/characters/rune-overlay-crux16.png Binary files differnew file mode 100644 index 0000000..006c9e7 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux16.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux17.png b/mindus/assets/blocks/characters/rune-overlay-crux17.png Binary files differnew file mode 100644 index 0000000..abdf83c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux17.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux18.png b/mindus/assets/blocks/characters/rune-overlay-crux18.png Binary files differnew file mode 100644 index 0000000..c4ee9ca --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux18.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux19.png b/mindus/assets/blocks/characters/rune-overlay-crux19.png Binary files differnew file mode 100644 index 0000000..38e89db --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux19.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux2.png b/mindus/assets/blocks/characters/rune-overlay-crux2.png Binary files differnew file mode 100644 index 0000000..8df495a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux2.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux20.png b/mindus/assets/blocks/characters/rune-overlay-crux20.png Binary files differnew file mode 100644 index 0000000..cdcee3a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux20.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux21.png b/mindus/assets/blocks/characters/rune-overlay-crux21.png Binary files differnew file mode 100644 index 0000000..af42b3d --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux21.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux22.png b/mindus/assets/blocks/characters/rune-overlay-crux22.png Binary files differnew file mode 100644 index 0000000..2c6b962 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux22.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux23.png b/mindus/assets/blocks/characters/rune-overlay-crux23.png Binary files differnew file mode 100644 index 0000000..bc16215 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux23.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux24.png b/mindus/assets/blocks/characters/rune-overlay-crux24.png Binary files differnew file mode 100644 index 0000000..8a08984 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux24.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux25.png b/mindus/assets/blocks/characters/rune-overlay-crux25.png Binary files differnew file mode 100644 index 0000000..a9aa34e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux25.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux26.png b/mindus/assets/blocks/characters/rune-overlay-crux26.png Binary files differnew file mode 100644 index 0000000..77c447b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux26.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux27.png b/mindus/assets/blocks/characters/rune-overlay-crux27.png Binary files differnew file mode 100644 index 0000000..99645a5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux27.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux28.png b/mindus/assets/blocks/characters/rune-overlay-crux28.png Binary files differnew file mode 100644 index 0000000..50a45a7 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux28.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux29.png b/mindus/assets/blocks/characters/rune-overlay-crux29.png Binary files differnew file mode 100644 index 0000000..3f3eb3e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux29.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux3.png b/mindus/assets/blocks/characters/rune-overlay-crux3.png Binary files differnew file mode 100644 index 0000000..54cd8b2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux3.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux30.png b/mindus/assets/blocks/characters/rune-overlay-crux30.png Binary files differnew file mode 100644 index 0000000..05c9b3e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux30.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux31.png b/mindus/assets/blocks/characters/rune-overlay-crux31.png Binary files differnew file mode 100644 index 0000000..542ff0c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux31.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux32.png b/mindus/assets/blocks/characters/rune-overlay-crux32.png Binary files differnew file mode 100644 index 0000000..30a8a5b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux32.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux33.png b/mindus/assets/blocks/characters/rune-overlay-crux33.png Binary files differnew file mode 100644 index 0000000..c273844 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux33.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux34.png b/mindus/assets/blocks/characters/rune-overlay-crux34.png Binary files differnew file mode 100644 index 0000000..a945709 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux34.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux35.png b/mindus/assets/blocks/characters/rune-overlay-crux35.png Binary files differnew file mode 100644 index 0000000..1ae586e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux35.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux36.png b/mindus/assets/blocks/characters/rune-overlay-crux36.png Binary files differnew file mode 100644 index 0000000..5d0fd51 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux36.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux37.png b/mindus/assets/blocks/characters/rune-overlay-crux37.png Binary files differnew file mode 100644 index 0000000..0ea4d04 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux37.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux38.png b/mindus/assets/blocks/characters/rune-overlay-crux38.png Binary files differnew file mode 100644 index 0000000..e9b8f33 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux38.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux39.png b/mindus/assets/blocks/characters/rune-overlay-crux39.png Binary files differnew file mode 100644 index 0000000..2dd308a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux39.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux4.png b/mindus/assets/blocks/characters/rune-overlay-crux4.png Binary files differnew file mode 100644 index 0000000..7dc9fe6 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux4.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux40.png b/mindus/assets/blocks/characters/rune-overlay-crux40.png Binary files differnew file mode 100644 index 0000000..60aa9b6 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux40.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux41.png b/mindus/assets/blocks/characters/rune-overlay-crux41.png Binary files differnew file mode 100644 index 0000000..d8a077c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux41.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux42.png b/mindus/assets/blocks/characters/rune-overlay-crux42.png Binary files differnew file mode 100644 index 0000000..e6bc7d6 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux42.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux43.png b/mindus/assets/blocks/characters/rune-overlay-crux43.png Binary files differnew file mode 100644 index 0000000..bc0fc4a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux43.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux44.png b/mindus/assets/blocks/characters/rune-overlay-crux44.png Binary files differnew file mode 100644 index 0000000..06a57c6 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux44.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux45.png b/mindus/assets/blocks/characters/rune-overlay-crux45.png Binary files differnew file mode 100644 index 0000000..f262dcd --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux45.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux46.png b/mindus/assets/blocks/characters/rune-overlay-crux46.png Binary files differnew file mode 100644 index 0000000..84505b7 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux46.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux47.png b/mindus/assets/blocks/characters/rune-overlay-crux47.png Binary files differnew file mode 100644 index 0000000..8ebca6b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux47.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux48.png b/mindus/assets/blocks/characters/rune-overlay-crux48.png Binary files differnew file mode 100644 index 0000000..c483142 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux48.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux49.png b/mindus/assets/blocks/characters/rune-overlay-crux49.png Binary files differnew file mode 100644 index 0000000..1cbbf74 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux49.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux5.png b/mindus/assets/blocks/characters/rune-overlay-crux5.png Binary files differnew file mode 100644 index 0000000..2cc022b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux5.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux50.png b/mindus/assets/blocks/characters/rune-overlay-crux50.png Binary files differnew file mode 100644 index 0000000..d1e852d --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux50.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux51.png b/mindus/assets/blocks/characters/rune-overlay-crux51.png Binary files differnew file mode 100644 index 0000000..0a013e9 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux51.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux52.png b/mindus/assets/blocks/characters/rune-overlay-crux52.png Binary files differnew file mode 100644 index 0000000..4a9d262 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux52.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux53.png b/mindus/assets/blocks/characters/rune-overlay-crux53.png Binary files differnew file mode 100644 index 0000000..1e0a7d6 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux53.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux54.png b/mindus/assets/blocks/characters/rune-overlay-crux54.png Binary files differnew file mode 100644 index 0000000..672e194 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux54.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux55.png b/mindus/assets/blocks/characters/rune-overlay-crux55.png Binary files differnew file mode 100644 index 0000000..b96b760 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux55.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux56.png b/mindus/assets/blocks/characters/rune-overlay-crux56.png Binary files differnew file mode 100644 index 0000000..ef8ced4 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux56.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux57.png b/mindus/assets/blocks/characters/rune-overlay-crux57.png Binary files differnew file mode 100644 index 0000000..ec49477 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux57.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux58.png b/mindus/assets/blocks/characters/rune-overlay-crux58.png Binary files differnew file mode 100644 index 0000000..66404b1 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux58.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux59.png b/mindus/assets/blocks/characters/rune-overlay-crux59.png Binary files differnew file mode 100644 index 0000000..0457f94 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux59.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux6.png b/mindus/assets/blocks/characters/rune-overlay-crux6.png Binary files differnew file mode 100644 index 0000000..7b7ff04 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux6.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux60.png b/mindus/assets/blocks/characters/rune-overlay-crux60.png Binary files differnew file mode 100644 index 0000000..b82a757 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux60.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux61.png b/mindus/assets/blocks/characters/rune-overlay-crux61.png Binary files differnew file mode 100644 index 0000000..d208652 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux61.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux62.png b/mindus/assets/blocks/characters/rune-overlay-crux62.png Binary files differnew file mode 100644 index 0000000..49d3ec2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux62.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux63.png b/mindus/assets/blocks/characters/rune-overlay-crux63.png Binary files differnew file mode 100644 index 0000000..1875a75 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux63.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux64.png b/mindus/assets/blocks/characters/rune-overlay-crux64.png Binary files differnew file mode 100644 index 0000000..897c02c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux64.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux65.png b/mindus/assets/blocks/characters/rune-overlay-crux65.png Binary files differnew file mode 100644 index 0000000..d3889d7 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux65.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux66.png b/mindus/assets/blocks/characters/rune-overlay-crux66.png Binary files differnew file mode 100644 index 0000000..c42fa4b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux66.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux67.png b/mindus/assets/blocks/characters/rune-overlay-crux67.png Binary files differnew file mode 100644 index 0000000..3cf7699 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux67.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux68.png b/mindus/assets/blocks/characters/rune-overlay-crux68.png Binary files differnew file mode 100644 index 0000000..14f8025 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux68.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux69.png b/mindus/assets/blocks/characters/rune-overlay-crux69.png Binary files differnew file mode 100644 index 0000000..7c6656a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux69.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux7.png b/mindus/assets/blocks/characters/rune-overlay-crux7.png Binary files differnew file mode 100644 index 0000000..53060a0 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux7.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux70.png b/mindus/assets/blocks/characters/rune-overlay-crux70.png Binary files differnew file mode 100644 index 0000000..2456468 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux70.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux71.png b/mindus/assets/blocks/characters/rune-overlay-crux71.png Binary files differnew file mode 100644 index 0000000..f7d1b12 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux71.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux72.png b/mindus/assets/blocks/characters/rune-overlay-crux72.png Binary files differnew file mode 100644 index 0000000..e3c6db3 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux72.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux73.png b/mindus/assets/blocks/characters/rune-overlay-crux73.png Binary files differnew file mode 100644 index 0000000..f63d4cc --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux73.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux74.png b/mindus/assets/blocks/characters/rune-overlay-crux74.png Binary files differnew file mode 100644 index 0000000..6d6db43 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux74.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux75.png b/mindus/assets/blocks/characters/rune-overlay-crux75.png Binary files differnew file mode 100644 index 0000000..0f39439 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux75.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux76.png b/mindus/assets/blocks/characters/rune-overlay-crux76.png Binary files differnew file mode 100644 index 0000000..9e29658 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux76.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux77.png b/mindus/assets/blocks/characters/rune-overlay-crux77.png Binary files differnew file mode 100644 index 0000000..82b4eaf --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux77.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux78.png b/mindus/assets/blocks/characters/rune-overlay-crux78.png Binary files differnew file mode 100644 index 0000000..7e471b5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux78.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux79.png b/mindus/assets/blocks/characters/rune-overlay-crux79.png Binary files differnew file mode 100644 index 0000000..4b887af --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux79.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux8.png b/mindus/assets/blocks/characters/rune-overlay-crux8.png Binary files differnew file mode 100644 index 0000000..bf6b5d5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux8.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux80.png b/mindus/assets/blocks/characters/rune-overlay-crux80.png Binary files differnew file mode 100644 index 0000000..5fa1728 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux80.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux81.png b/mindus/assets/blocks/characters/rune-overlay-crux81.png Binary files differnew file mode 100644 index 0000000..3567d7f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux81.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux82.png b/mindus/assets/blocks/characters/rune-overlay-crux82.png Binary files differnew file mode 100644 index 0000000..7046d94 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux82.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux83.png b/mindus/assets/blocks/characters/rune-overlay-crux83.png Binary files differnew file mode 100644 index 0000000..9bcab0e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux83.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux84.png b/mindus/assets/blocks/characters/rune-overlay-crux84.png Binary files differnew file mode 100644 index 0000000..0cdfdee --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux84.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux85.png b/mindus/assets/blocks/characters/rune-overlay-crux85.png Binary files differnew file mode 100644 index 0000000..338575b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux85.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux86.png b/mindus/assets/blocks/characters/rune-overlay-crux86.png Binary files differnew file mode 100644 index 0000000..7ea4899 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux86.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux87.png b/mindus/assets/blocks/characters/rune-overlay-crux87.png Binary files differnew file mode 100644 index 0000000..e801acd --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux87.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux88.png b/mindus/assets/blocks/characters/rune-overlay-crux88.png Binary files differnew file mode 100644 index 0000000..cc76da4 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux88.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux89.png b/mindus/assets/blocks/characters/rune-overlay-crux89.png Binary files differnew file mode 100644 index 0000000..7d1a220 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux89.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux9.png b/mindus/assets/blocks/characters/rune-overlay-crux9.png Binary files differnew file mode 100644 index 0000000..9b1e288 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux9.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux90.png b/mindus/assets/blocks/characters/rune-overlay-crux90.png Binary files differnew file mode 100644 index 0000000..a47a233 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux90.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux91.png b/mindus/assets/blocks/characters/rune-overlay-crux91.png Binary files differnew file mode 100644 index 0000000..24d03e3 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux91.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux92.png b/mindus/assets/blocks/characters/rune-overlay-crux92.png Binary files differnew file mode 100644 index 0000000..67f103c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux92.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux93.png b/mindus/assets/blocks/characters/rune-overlay-crux93.png Binary files differnew file mode 100644 index 0000000..25821bf --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux93.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux94.png b/mindus/assets/blocks/characters/rune-overlay-crux94.png Binary files differnew file mode 100644 index 0000000..aa7c7d1 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux94.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux95.png b/mindus/assets/blocks/characters/rune-overlay-crux95.png Binary files differnew file mode 100644 index 0000000..7a31bba --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux95.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux96.png b/mindus/assets/blocks/characters/rune-overlay-crux96.png Binary files differnew file mode 100644 index 0000000..67111b6 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux96.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux97.png b/mindus/assets/blocks/characters/rune-overlay-crux97.png Binary files differnew file mode 100644 index 0000000..c710323 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux97.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux98.png b/mindus/assets/blocks/characters/rune-overlay-crux98.png Binary files differnew file mode 100644 index 0000000..e4d40e1 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux98.png diff --git a/mindus/assets/blocks/characters/rune-overlay-crux99.png b/mindus/assets/blocks/characters/rune-overlay-crux99.png Binary files differnew file mode 100644 index 0000000..e6fd0d0 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay-crux99.png diff --git a/mindus/assets/blocks/characters/rune-overlay0.png b/mindus/assets/blocks/characters/rune-overlay0.png Binary files differnew file mode 100644 index 0000000..50b167f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay0.png diff --git a/mindus/assets/blocks/characters/rune-overlay1.png b/mindus/assets/blocks/characters/rune-overlay1.png Binary files differnew file mode 100644 index 0000000..59b547e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay1.png diff --git a/mindus/assets/blocks/characters/rune-overlay10.png b/mindus/assets/blocks/characters/rune-overlay10.png Binary files differnew file mode 100644 index 0000000..6fb852f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay10.png diff --git a/mindus/assets/blocks/characters/rune-overlay100.png b/mindus/assets/blocks/characters/rune-overlay100.png Binary files differnew file mode 100644 index 0000000..ad0c976 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay100.png diff --git a/mindus/assets/blocks/characters/rune-overlay101.png b/mindus/assets/blocks/characters/rune-overlay101.png Binary files differnew file mode 100644 index 0000000..12a6d9f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay101.png diff --git a/mindus/assets/blocks/characters/rune-overlay102.png b/mindus/assets/blocks/characters/rune-overlay102.png Binary files differnew file mode 100644 index 0000000..6f0b1b7 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay102.png diff --git a/mindus/assets/blocks/characters/rune-overlay103.png b/mindus/assets/blocks/characters/rune-overlay103.png Binary files differnew file mode 100644 index 0000000..63274c2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay103.png diff --git a/mindus/assets/blocks/characters/rune-overlay104.png b/mindus/assets/blocks/characters/rune-overlay104.png Binary files differnew file mode 100644 index 0000000..1cba8cc --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay104.png diff --git a/mindus/assets/blocks/characters/rune-overlay105.png b/mindus/assets/blocks/characters/rune-overlay105.png Binary files differnew file mode 100644 index 0000000..759fc03 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay105.png diff --git a/mindus/assets/blocks/characters/rune-overlay106.png b/mindus/assets/blocks/characters/rune-overlay106.png Binary files differnew file mode 100644 index 0000000..3a40e7b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay106.png diff --git a/mindus/assets/blocks/characters/rune-overlay107.png b/mindus/assets/blocks/characters/rune-overlay107.png Binary files differnew file mode 100644 index 0000000..29e2e11 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay107.png diff --git a/mindus/assets/blocks/characters/rune-overlay108.png b/mindus/assets/blocks/characters/rune-overlay108.png Binary files differnew file mode 100644 index 0000000..7851e84 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay108.png diff --git a/mindus/assets/blocks/characters/rune-overlay11.png b/mindus/assets/blocks/characters/rune-overlay11.png Binary files differnew file mode 100644 index 0000000..89207d0 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay11.png diff --git a/mindus/assets/blocks/characters/rune-overlay12.png b/mindus/assets/blocks/characters/rune-overlay12.png Binary files differnew file mode 100644 index 0000000..18638a5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay12.png diff --git a/mindus/assets/blocks/characters/rune-overlay13.png b/mindus/assets/blocks/characters/rune-overlay13.png Binary files differnew file mode 100644 index 0000000..14669c8 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay13.png diff --git a/mindus/assets/blocks/characters/rune-overlay14.png b/mindus/assets/blocks/characters/rune-overlay14.png Binary files differnew file mode 100644 index 0000000..1a1313e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay14.png diff --git a/mindus/assets/blocks/characters/rune-overlay15.png b/mindus/assets/blocks/characters/rune-overlay15.png Binary files differnew file mode 100644 index 0000000..4c36143 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay15.png diff --git a/mindus/assets/blocks/characters/rune-overlay16.png b/mindus/assets/blocks/characters/rune-overlay16.png Binary files differnew file mode 100644 index 0000000..46959bb --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay16.png diff --git a/mindus/assets/blocks/characters/rune-overlay17.png b/mindus/assets/blocks/characters/rune-overlay17.png Binary files differnew file mode 100644 index 0000000..eaa6ef9 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay17.png diff --git a/mindus/assets/blocks/characters/rune-overlay18.png b/mindus/assets/blocks/characters/rune-overlay18.png Binary files differnew file mode 100644 index 0000000..a2b27f9 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay18.png diff --git a/mindus/assets/blocks/characters/rune-overlay19.png b/mindus/assets/blocks/characters/rune-overlay19.png Binary files differnew file mode 100644 index 0000000..4ae4801 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay19.png diff --git a/mindus/assets/blocks/characters/rune-overlay2.png b/mindus/assets/blocks/characters/rune-overlay2.png Binary files differnew file mode 100644 index 0000000..bc77232 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay2.png diff --git a/mindus/assets/blocks/characters/rune-overlay20.png b/mindus/assets/blocks/characters/rune-overlay20.png Binary files differnew file mode 100644 index 0000000..353cb26 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay20.png diff --git a/mindus/assets/blocks/characters/rune-overlay21.png b/mindus/assets/blocks/characters/rune-overlay21.png Binary files differnew file mode 100644 index 0000000..8d08e8e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay21.png diff --git a/mindus/assets/blocks/characters/rune-overlay22.png b/mindus/assets/blocks/characters/rune-overlay22.png Binary files differnew file mode 100644 index 0000000..4e2453c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay22.png diff --git a/mindus/assets/blocks/characters/rune-overlay23.png b/mindus/assets/blocks/characters/rune-overlay23.png Binary files differnew file mode 100644 index 0000000..f87ffd3 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay23.png diff --git a/mindus/assets/blocks/characters/rune-overlay24.png b/mindus/assets/blocks/characters/rune-overlay24.png Binary files differnew file mode 100644 index 0000000..49a28f8 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay24.png diff --git a/mindus/assets/blocks/characters/rune-overlay25.png b/mindus/assets/blocks/characters/rune-overlay25.png Binary files differnew file mode 100644 index 0000000..e9e1086 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay25.png diff --git a/mindus/assets/blocks/characters/rune-overlay26.png b/mindus/assets/blocks/characters/rune-overlay26.png Binary files differnew file mode 100644 index 0000000..6cab8e5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay26.png diff --git a/mindus/assets/blocks/characters/rune-overlay27.png b/mindus/assets/blocks/characters/rune-overlay27.png Binary files differnew file mode 100644 index 0000000..d8801a3 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay27.png diff --git a/mindus/assets/blocks/characters/rune-overlay28.png b/mindus/assets/blocks/characters/rune-overlay28.png Binary files differnew file mode 100644 index 0000000..814312e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay28.png diff --git a/mindus/assets/blocks/characters/rune-overlay29.png b/mindus/assets/blocks/characters/rune-overlay29.png Binary files differnew file mode 100644 index 0000000..91209b5 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay29.png diff --git a/mindus/assets/blocks/characters/rune-overlay3.png b/mindus/assets/blocks/characters/rune-overlay3.png Binary files differnew file mode 100644 index 0000000..012ecca --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay3.png diff --git a/mindus/assets/blocks/characters/rune-overlay30.png b/mindus/assets/blocks/characters/rune-overlay30.png Binary files differnew file mode 100644 index 0000000..db6fe7a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay30.png diff --git a/mindus/assets/blocks/characters/rune-overlay31.png b/mindus/assets/blocks/characters/rune-overlay31.png Binary files differnew file mode 100644 index 0000000..d2b089f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay31.png diff --git a/mindus/assets/blocks/characters/rune-overlay32.png b/mindus/assets/blocks/characters/rune-overlay32.png Binary files differnew file mode 100644 index 0000000..6b444fe --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay32.png diff --git a/mindus/assets/blocks/characters/rune-overlay33.png b/mindus/assets/blocks/characters/rune-overlay33.png Binary files differnew file mode 100644 index 0000000..b4cd89f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay33.png diff --git a/mindus/assets/blocks/characters/rune-overlay34.png b/mindus/assets/blocks/characters/rune-overlay34.png Binary files differnew file mode 100644 index 0000000..86de197 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay34.png diff --git a/mindus/assets/blocks/characters/rune-overlay35.png b/mindus/assets/blocks/characters/rune-overlay35.png Binary files differnew file mode 100644 index 0000000..e4f0237 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay35.png diff --git a/mindus/assets/blocks/characters/rune-overlay36.png b/mindus/assets/blocks/characters/rune-overlay36.png Binary files differnew file mode 100644 index 0000000..ba69315 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay36.png diff --git a/mindus/assets/blocks/characters/rune-overlay37.png b/mindus/assets/blocks/characters/rune-overlay37.png Binary files differnew file mode 100644 index 0000000..f576b68 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay37.png diff --git a/mindus/assets/blocks/characters/rune-overlay38.png b/mindus/assets/blocks/characters/rune-overlay38.png Binary files differnew file mode 100644 index 0000000..553937c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay38.png diff --git a/mindus/assets/blocks/characters/rune-overlay39.png b/mindus/assets/blocks/characters/rune-overlay39.png Binary files differnew file mode 100644 index 0000000..77f60b7 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay39.png diff --git a/mindus/assets/blocks/characters/rune-overlay4.png b/mindus/assets/blocks/characters/rune-overlay4.png Binary files differnew file mode 100644 index 0000000..ee6c317 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay4.png diff --git a/mindus/assets/blocks/characters/rune-overlay40.png b/mindus/assets/blocks/characters/rune-overlay40.png Binary files differnew file mode 100644 index 0000000..bf56c74 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay40.png diff --git a/mindus/assets/blocks/characters/rune-overlay41.png b/mindus/assets/blocks/characters/rune-overlay41.png Binary files differnew file mode 100644 index 0000000..47fba77 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay41.png diff --git a/mindus/assets/blocks/characters/rune-overlay42.png b/mindus/assets/blocks/characters/rune-overlay42.png Binary files differnew file mode 100644 index 0000000..e231ca3 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay42.png diff --git a/mindus/assets/blocks/characters/rune-overlay43.png b/mindus/assets/blocks/characters/rune-overlay43.png Binary files differnew file mode 100644 index 0000000..0b78d57 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay43.png diff --git a/mindus/assets/blocks/characters/rune-overlay44.png b/mindus/assets/blocks/characters/rune-overlay44.png Binary files differnew file mode 100644 index 0000000..5f247e0 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay44.png diff --git a/mindus/assets/blocks/characters/rune-overlay45.png b/mindus/assets/blocks/characters/rune-overlay45.png Binary files differnew file mode 100644 index 0000000..1e3bbd3 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay45.png diff --git a/mindus/assets/blocks/characters/rune-overlay46.png b/mindus/assets/blocks/characters/rune-overlay46.png Binary files differnew file mode 100644 index 0000000..d569595 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay46.png diff --git a/mindus/assets/blocks/characters/rune-overlay47.png b/mindus/assets/blocks/characters/rune-overlay47.png Binary files differnew file mode 100644 index 0000000..7068249 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay47.png diff --git a/mindus/assets/blocks/characters/rune-overlay48.png b/mindus/assets/blocks/characters/rune-overlay48.png Binary files differnew file mode 100644 index 0000000..478dc04 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay48.png diff --git a/mindus/assets/blocks/characters/rune-overlay49.png b/mindus/assets/blocks/characters/rune-overlay49.png Binary files differnew file mode 100644 index 0000000..4de1595 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay49.png diff --git a/mindus/assets/blocks/characters/rune-overlay5.png b/mindus/assets/blocks/characters/rune-overlay5.png Binary files differnew file mode 100644 index 0000000..3f9ca5d --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay5.png diff --git a/mindus/assets/blocks/characters/rune-overlay50.png b/mindus/assets/blocks/characters/rune-overlay50.png Binary files differnew file mode 100644 index 0000000..fc1d6ee --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay50.png diff --git a/mindus/assets/blocks/characters/rune-overlay51.png b/mindus/assets/blocks/characters/rune-overlay51.png Binary files differnew file mode 100644 index 0000000..5a6fd41 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay51.png diff --git a/mindus/assets/blocks/characters/rune-overlay52.png b/mindus/assets/blocks/characters/rune-overlay52.png Binary files differnew file mode 100644 index 0000000..7afee30 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay52.png diff --git a/mindus/assets/blocks/characters/rune-overlay53.png b/mindus/assets/blocks/characters/rune-overlay53.png Binary files differnew file mode 100644 index 0000000..4dba710 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay53.png diff --git a/mindus/assets/blocks/characters/rune-overlay54.png b/mindus/assets/blocks/characters/rune-overlay54.png Binary files differnew file mode 100644 index 0000000..b6e7ed9 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay54.png diff --git a/mindus/assets/blocks/characters/rune-overlay55.png b/mindus/assets/blocks/characters/rune-overlay55.png Binary files differnew file mode 100644 index 0000000..c1b5041 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay55.png diff --git a/mindus/assets/blocks/characters/rune-overlay56.png b/mindus/assets/blocks/characters/rune-overlay56.png Binary files differnew file mode 100644 index 0000000..c6b6cc8 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay56.png diff --git a/mindus/assets/blocks/characters/rune-overlay57.png b/mindus/assets/blocks/characters/rune-overlay57.png Binary files differnew file mode 100644 index 0000000..05a1ee9 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay57.png diff --git a/mindus/assets/blocks/characters/rune-overlay58.png b/mindus/assets/blocks/characters/rune-overlay58.png Binary files differnew file mode 100644 index 0000000..d49ad16 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay58.png diff --git a/mindus/assets/blocks/characters/rune-overlay59.png b/mindus/assets/blocks/characters/rune-overlay59.png Binary files differnew file mode 100644 index 0000000..83b38b1 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay59.png diff --git a/mindus/assets/blocks/characters/rune-overlay6.png b/mindus/assets/blocks/characters/rune-overlay6.png Binary files differnew file mode 100644 index 0000000..d21ba0e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay6.png diff --git a/mindus/assets/blocks/characters/rune-overlay60.png b/mindus/assets/blocks/characters/rune-overlay60.png Binary files differnew file mode 100644 index 0000000..50fd227 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay60.png diff --git a/mindus/assets/blocks/characters/rune-overlay61.png b/mindus/assets/blocks/characters/rune-overlay61.png Binary files differnew file mode 100644 index 0000000..e85ae24 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay61.png diff --git a/mindus/assets/blocks/characters/rune-overlay62.png b/mindus/assets/blocks/characters/rune-overlay62.png Binary files differnew file mode 100644 index 0000000..3588ba2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay62.png diff --git a/mindus/assets/blocks/characters/rune-overlay63.png b/mindus/assets/blocks/characters/rune-overlay63.png Binary files differnew file mode 100644 index 0000000..5e8b9eb --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay63.png diff --git a/mindus/assets/blocks/characters/rune-overlay64.png b/mindus/assets/blocks/characters/rune-overlay64.png Binary files differnew file mode 100644 index 0000000..c0dae86 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay64.png diff --git a/mindus/assets/blocks/characters/rune-overlay65.png b/mindus/assets/blocks/characters/rune-overlay65.png Binary files differnew file mode 100644 index 0000000..a3665ab --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay65.png diff --git a/mindus/assets/blocks/characters/rune-overlay66.png b/mindus/assets/blocks/characters/rune-overlay66.png Binary files differnew file mode 100644 index 0000000..43f7aeb --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay66.png diff --git a/mindus/assets/blocks/characters/rune-overlay67.png b/mindus/assets/blocks/characters/rune-overlay67.png Binary files differnew file mode 100644 index 0000000..baa6d33 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay67.png diff --git a/mindus/assets/blocks/characters/rune-overlay68.png b/mindus/assets/blocks/characters/rune-overlay68.png Binary files differnew file mode 100644 index 0000000..ba53de2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay68.png diff --git a/mindus/assets/blocks/characters/rune-overlay69.png b/mindus/assets/blocks/characters/rune-overlay69.png Binary files differnew file mode 100644 index 0000000..1242827 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay69.png diff --git a/mindus/assets/blocks/characters/rune-overlay7.png b/mindus/assets/blocks/characters/rune-overlay7.png Binary files differnew file mode 100644 index 0000000..23bac5d --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay7.png diff --git a/mindus/assets/blocks/characters/rune-overlay70.png b/mindus/assets/blocks/characters/rune-overlay70.png Binary files differnew file mode 100644 index 0000000..45e8a86 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay70.png diff --git a/mindus/assets/blocks/characters/rune-overlay71.png b/mindus/assets/blocks/characters/rune-overlay71.png Binary files differnew file mode 100644 index 0000000..d95cfe2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay71.png diff --git a/mindus/assets/blocks/characters/rune-overlay72.png b/mindus/assets/blocks/characters/rune-overlay72.png Binary files differnew file mode 100644 index 0000000..2ddde55 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay72.png diff --git a/mindus/assets/blocks/characters/rune-overlay73.png b/mindus/assets/blocks/characters/rune-overlay73.png Binary files differnew file mode 100644 index 0000000..76e1d13 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay73.png diff --git a/mindus/assets/blocks/characters/rune-overlay74.png b/mindus/assets/blocks/characters/rune-overlay74.png Binary files differnew file mode 100644 index 0000000..f577cde --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay74.png diff --git a/mindus/assets/blocks/characters/rune-overlay75.png b/mindus/assets/blocks/characters/rune-overlay75.png Binary files differnew file mode 100644 index 0000000..df89b7e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay75.png diff --git a/mindus/assets/blocks/characters/rune-overlay76.png b/mindus/assets/blocks/characters/rune-overlay76.png Binary files differnew file mode 100644 index 0000000..4180b2c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay76.png diff --git a/mindus/assets/blocks/characters/rune-overlay77.png b/mindus/assets/blocks/characters/rune-overlay77.png Binary files differnew file mode 100644 index 0000000..d66113b --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay77.png diff --git a/mindus/assets/blocks/characters/rune-overlay78.png b/mindus/assets/blocks/characters/rune-overlay78.png Binary files differnew file mode 100644 index 0000000..458b52f --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay78.png diff --git a/mindus/assets/blocks/characters/rune-overlay79.png b/mindus/assets/blocks/characters/rune-overlay79.png Binary files differnew file mode 100644 index 0000000..c423c4c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay79.png diff --git a/mindus/assets/blocks/characters/rune-overlay8.png b/mindus/assets/blocks/characters/rune-overlay8.png Binary files differnew file mode 100644 index 0000000..5318fab --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay8.png diff --git a/mindus/assets/blocks/characters/rune-overlay80.png b/mindus/assets/blocks/characters/rune-overlay80.png Binary files differnew file mode 100644 index 0000000..158f09e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay80.png diff --git a/mindus/assets/blocks/characters/rune-overlay81.png b/mindus/assets/blocks/characters/rune-overlay81.png Binary files differnew file mode 100644 index 0000000..106eb5e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay81.png diff --git a/mindus/assets/blocks/characters/rune-overlay82.png b/mindus/assets/blocks/characters/rune-overlay82.png Binary files differnew file mode 100644 index 0000000..1735b2c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay82.png diff --git a/mindus/assets/blocks/characters/rune-overlay83.png b/mindus/assets/blocks/characters/rune-overlay83.png Binary files differnew file mode 100644 index 0000000..17a2693 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay83.png diff --git a/mindus/assets/blocks/characters/rune-overlay84.png b/mindus/assets/blocks/characters/rune-overlay84.png Binary files differnew file mode 100644 index 0000000..39bf525 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay84.png diff --git a/mindus/assets/blocks/characters/rune-overlay85.png b/mindus/assets/blocks/characters/rune-overlay85.png Binary files differnew file mode 100644 index 0000000..04c8228 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay85.png diff --git a/mindus/assets/blocks/characters/rune-overlay86.png b/mindus/assets/blocks/characters/rune-overlay86.png Binary files differnew file mode 100644 index 0000000..1c75129 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay86.png diff --git a/mindus/assets/blocks/characters/rune-overlay87.png b/mindus/assets/blocks/characters/rune-overlay87.png Binary files differnew file mode 100644 index 0000000..f3137e2 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay87.png diff --git a/mindus/assets/blocks/characters/rune-overlay88.png b/mindus/assets/blocks/characters/rune-overlay88.png Binary files differnew file mode 100644 index 0000000..9f58b32 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay88.png diff --git a/mindus/assets/blocks/characters/rune-overlay89.png b/mindus/assets/blocks/characters/rune-overlay89.png Binary files differnew file mode 100644 index 0000000..87e13e0 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay89.png diff --git a/mindus/assets/blocks/characters/rune-overlay9.png b/mindus/assets/blocks/characters/rune-overlay9.png Binary files differnew file mode 100644 index 0000000..2148e25 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay9.png diff --git a/mindus/assets/blocks/characters/rune-overlay90.png b/mindus/assets/blocks/characters/rune-overlay90.png Binary files differnew file mode 100644 index 0000000..3624c48 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay90.png diff --git a/mindus/assets/blocks/characters/rune-overlay91.png b/mindus/assets/blocks/characters/rune-overlay91.png Binary files differnew file mode 100644 index 0000000..b1b9739 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay91.png diff --git a/mindus/assets/blocks/characters/rune-overlay92.png b/mindus/assets/blocks/characters/rune-overlay92.png Binary files differnew file mode 100644 index 0000000..e703928 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay92.png diff --git a/mindus/assets/blocks/characters/rune-overlay93.png b/mindus/assets/blocks/characters/rune-overlay93.png Binary files differnew file mode 100644 index 0000000..d15e35e --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay93.png diff --git a/mindus/assets/blocks/characters/rune-overlay94.png b/mindus/assets/blocks/characters/rune-overlay94.png Binary files differnew file mode 100644 index 0000000..0d5f8f1 --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay94.png diff --git a/mindus/assets/blocks/characters/rune-overlay95.png b/mindus/assets/blocks/characters/rune-overlay95.png Binary files differnew file mode 100644 index 0000000..b1b168c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay95.png diff --git a/mindus/assets/blocks/characters/rune-overlay96.png b/mindus/assets/blocks/characters/rune-overlay96.png Binary files differnew file mode 100644 index 0000000..3972fbc --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay96.png diff --git a/mindus/assets/blocks/characters/rune-overlay97.png b/mindus/assets/blocks/characters/rune-overlay97.png Binary files differnew file mode 100644 index 0000000..e8d044a --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay97.png diff --git a/mindus/assets/blocks/characters/rune-overlay98.png b/mindus/assets/blocks/characters/rune-overlay98.png Binary files differnew file mode 100644 index 0000000..d8c7bee --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay98.png diff --git a/mindus/assets/blocks/characters/rune-overlay99.png b/mindus/assets/blocks/characters/rune-overlay99.png Binary files differnew file mode 100644 index 0000000..1e3dc3c --- /dev/null +++ b/mindus/assets/blocks/characters/rune-overlay99.png diff --git a/mindus/assets/blocks/defense/build-tower.png b/mindus/assets/blocks/defense/build-tower.png Binary files differnew file mode 100644 index 0000000..44f6219 --- /dev/null +++ b/mindus/assets/blocks/defense/build-tower.png diff --git a/assets/blocks/defense/force-projector-team.png b/mindus/assets/blocks/defense/force-projector-team.png Binary files differindex 86614cb..86614cb 100644 --- a/assets/blocks/defense/force-projector-team.png +++ b/mindus/assets/blocks/defense/force-projector-team.png diff --git a/mindus/assets/blocks/defense/force-projector.png b/mindus/assets/blocks/defense/force-projector.png Binary files differnew file mode 100644 index 0000000..69ef992 --- /dev/null +++ b/mindus/assets/blocks/defense/force-projector.png diff --git a/mindus/assets/blocks/defense/large-shield-projector-team.png b/mindus/assets/blocks/defense/large-shield-projector-team.png Binary files differnew file mode 100644 index 0000000..d369c30 --- /dev/null +++ b/mindus/assets/blocks/defense/large-shield-projector-team.png diff --git a/mindus/assets/blocks/defense/large-shield-projector.png b/mindus/assets/blocks/defense/large-shield-projector.png Binary files differnew file mode 100644 index 0000000..7c2c862 --- /dev/null +++ b/mindus/assets/blocks/defense/large-shield-projector.png diff --git a/mindus/assets/blocks/defense/mend-projector.png b/mindus/assets/blocks/defense/mend-projector.png Binary files differnew file mode 100644 index 0000000..6fbdedc --- /dev/null +++ b/mindus/assets/blocks/defense/mend-projector.png diff --git a/mindus/assets/blocks/defense/mender.png b/mindus/assets/blocks/defense/mender.png Binary files differnew file mode 100644 index 0000000..019d224 --- /dev/null +++ b/mindus/assets/blocks/defense/mender.png diff --git a/mindus/assets/blocks/defense/overdrive-dome.png b/mindus/assets/blocks/defense/overdrive-dome.png Binary files differnew file mode 100644 index 0000000..a27f18b --- /dev/null +++ b/mindus/assets/blocks/defense/overdrive-dome.png diff --git a/mindus/assets/blocks/defense/overdrive-projector.png b/mindus/assets/blocks/defense/overdrive-projector.png Binary files differnew file mode 100644 index 0000000..0e91627 --- /dev/null +++ b/mindus/assets/blocks/defense/overdrive-projector.png diff --git a/assets/blocks/defense/radar.png b/mindus/assets/blocks/defense/radar.png Binary files differindex 701beac..701beac 100644 --- a/assets/blocks/defense/radar.png +++ b/mindus/assets/blocks/defense/radar.png diff --git a/mindus/assets/blocks/defense/regen-projector.png b/mindus/assets/blocks/defense/regen-projector.png Binary files differnew file mode 100644 index 0000000..c246600 --- /dev/null +++ b/mindus/assets/blocks/defense/regen-projector.png diff --git a/assets/blocks/defense/shield-projector-team.png b/mindus/assets/blocks/defense/shield-projector-team.png Binary files differindex fdc00a2..fdc00a2 100644 --- a/assets/blocks/defense/shield-projector-team.png +++ b/mindus/assets/blocks/defense/shield-projector-team.png diff --git a/mindus/assets/blocks/defense/shield-projector.png b/mindus/assets/blocks/defense/shield-projector.png Binary files differnew file mode 100644 index 0000000..df7374e --- /dev/null +++ b/mindus/assets/blocks/defense/shield-projector.png diff --git a/mindus/assets/blocks/defense/shock-mine-team-top.png b/mindus/assets/blocks/defense/shock-mine-team-top.png Binary files differnew file mode 100644 index 0000000..aa16dc3 --- /dev/null +++ b/mindus/assets/blocks/defense/shock-mine-team-top.png diff --git a/assets/blocks/defense/shock-mine.png b/mindus/assets/blocks/defense/shock-mine.png Binary files differindex 2f18055..2f18055 100644 --- a/assets/blocks/defense/shock-mine.png +++ b/mindus/assets/blocks/defense/shock-mine.png diff --git a/mindus/assets/blocks/defense/shockwave-tower.png b/mindus/assets/blocks/defense/shockwave-tower.png Binary files differnew file mode 100644 index 0000000..25a1f24 --- /dev/null +++ b/mindus/assets/blocks/defense/shockwave-tower.png diff --git a/mindus/assets/blocks/defense/target-dummy.png b/mindus/assets/blocks/defense/target-dummy.png Binary files differnew file mode 100644 index 0000000..f3d06d7 --- /dev/null +++ b/mindus/assets/blocks/defense/target-dummy.png diff --git a/mindus/assets/blocks/distribution/bridge-arrow.png b/mindus/assets/blocks/distribution/bridge-arrow.png Binary files differnew file mode 100644 index 0000000..ea708c8 --- /dev/null +++ b/mindus/assets/blocks/distribution/bridge-arrow.png diff --git a/mindus/assets/blocks/distribution/bridge-conveyor-arrow.png b/mindus/assets/blocks/distribution/bridge-conveyor-arrow.png Binary files differnew file mode 100644 index 0000000..2740e90 --- /dev/null +++ b/mindus/assets/blocks/distribution/bridge-conveyor-arrow.png diff --git a/mindus/assets/blocks/distribution/bridge-conveyor-bridge.png b/mindus/assets/blocks/distribution/bridge-conveyor-bridge.png Binary files differnew file mode 100644 index 0000000..c7b09d9 --- /dev/null +++ b/mindus/assets/blocks/distribution/bridge-conveyor-bridge.png diff --git a/mindus/assets/blocks/distribution/bridge-conveyor-end.png b/mindus/assets/blocks/distribution/bridge-conveyor-end.png Binary files differnew file mode 100644 index 0000000..25ccdde --- /dev/null +++ b/mindus/assets/blocks/distribution/bridge-conveyor-end.png diff --git a/mindus/assets/blocks/distribution/bridge-conveyor.png b/mindus/assets/blocks/distribution/bridge-conveyor.png Binary files differnew file mode 100644 index 0000000..b1a53c6 --- /dev/null +++ b/mindus/assets/blocks/distribution/bridge-conveyor.png diff --git a/mindus/assets/blocks/distribution/center.png b/mindus/assets/blocks/distribution/center.png Binary files differnew file mode 100644 index 0000000..7579691 --- /dev/null +++ b/mindus/assets/blocks/distribution/center.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png Binary files differnew file mode 100644 index 0000000..ddc867d --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png Binary files differnew file mode 100644 index 0000000..03595e1 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png Binary files differnew file mode 100644 index 0000000..5043934 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-2.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png Binary files differnew file mode 100644 index 0000000..d209c5b --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-0-3.png 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 Binary files differnew file mode 100644 index 0000000..8c27096 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png Binary files differnew file mode 100644 index 0000000..e90c44d --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-0.png 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 Binary files differnew file mode 100644 index 0000000..571a0d8 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-h.png 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 Binary files differnew file mode 100644 index 0000000..48dd10e --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1-v.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png Binary files differnew file mode 100644 index 0000000..ed13d44 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-1.png 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 Binary files differnew file mode 100644 index 0000000..df0bddb --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png Binary files differnew file mode 100644 index 0000000..ffa04ec --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-2.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png Binary files differnew file mode 100644 index 0000000..b15a6d6 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-1-3.png 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 Binary files differnew file mode 100644 index 0000000..eb76bd3 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-h.png 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 Binary files differnew file mode 100644 index 0000000..0bb92f4 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0-v.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png Binary files differnew file mode 100644 index 0000000..be686e7 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-0.png 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 Binary files differnew file mode 100644 index 0000000..9dd21ed --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png Binary files differnew file mode 100644 index 0000000..22a56fe --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png Binary files differnew file mode 100644 index 0000000..21ebc71 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-2.png 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 Binary files differnew file mode 100644 index 0000000..aee031c --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png Binary files differnew file mode 100644 index 0000000..304675d --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-2-3.png 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 Binary files differnew file mode 100644 index 0000000..ab40269 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png Binary files differnew file mode 100644 index 0000000..8055767 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png Binary files differnew file mode 100644 index 0000000..c8bafb4 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png Binary files differnew file mode 100644 index 0000000..1c3e100 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-3-3.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png Binary files differnew file mode 100644 index 0000000..f05cccc --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png Binary files differnew file mode 100644 index 0000000..386c9c0 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png Binary files differnew file mode 100644 index 0000000..bfa7c8c --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/armored-conveyor-4-3.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-0.png Binary files differnew file mode 100644 index 0000000..5183db1 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-0-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-1.png Binary files differnew file mode 100644 index 0000000..7389c94 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-0-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-2.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-2.png Binary files differnew file mode 100644 index 0000000..0030870 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-0-2.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-0-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-0-3.png Binary files differnew file mode 100644 index 0000000..9580d6e --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-0-3.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.png Binary files differnew file mode 100644 index 0000000..7928ed9 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-0.png Binary files differnew file mode 100644 index 0000000..08b63fa --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.png Binary files differnew file mode 100644 index 0000000..2d8ba7d --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.png Binary files differnew file mode 100644 index 0000000..93dbcfa --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1-v.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1.png Binary files differnew file mode 100644 index 0000000..9611e68 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.png Binary files differnew file mode 100644 index 0000000..cd37f16 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-2-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-1-2.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-2.png Binary files differnew file mode 100644 index 0000000..d9be4bf --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-2.png diff --git a/assets/blocks/distribution/conveyors/conveyor-1-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-1-3.png Binary files differindex 2905d1a..2905d1a 100644 --- a/assets/blocks/distribution/conveyors/conveyor-1-3.png +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-1-3.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.png Binary files differnew file mode 100644 index 0000000..eea615a --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.png Binary files differnew file mode 100644 index 0000000..16dacf3 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0-v.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0.png Binary files differnew file mode 100644 index 0000000..721cb2b --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.png Binary files differnew file mode 100644 index 0000000..96e0b30 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-1-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-1.png Binary files differnew file mode 100644 index 0000000..e66aaf6 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-2.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-2.png Binary files differnew file mode 100644 index 0000000..3681c62 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-2.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.png Binary files differnew file mode 100644 index 0000000..1817c05 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-3-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-2-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-2-3.png Binary files differnew file mode 100644 index 0000000..385528a --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-2-3.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.png Binary files differnew file mode 100644 index 0000000..3c2d6ed --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-3-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-0.png Binary files differnew file mode 100644 index 0000000..5734a72 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-3-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-1.png Binary files differnew file mode 100644 index 0000000..743e834 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-3-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-3-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-3-3.png Binary files differnew file mode 100644 index 0000000..54008b5 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-3-3.png diff --git a/assets/blocks/distribution/conveyors/conveyor-4-0.png b/mindus/assets/blocks/distribution/conveyors/conveyor-4-0.png Binary files differindex b788db9..b788db9 100644 --- a/assets/blocks/distribution/conveyors/conveyor-4-0.png +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-4-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-4-1.png b/mindus/assets/blocks/distribution/conveyors/conveyor-4-1.png Binary files differnew file mode 100644 index 0000000..c2c31d5 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-4-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/conveyor-4-3.png b/mindus/assets/blocks/distribution/conveyors/conveyor-4-3.png Binary files differnew file mode 100644 index 0000000..4573bda --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/conveyor-4-3.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png Binary files differnew file mode 100644 index 0000000..0f1aecb --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png Binary files differnew file mode 100644 index 0000000..9ec7ec7 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png Binary files differnew file mode 100644 index 0000000..dcdd5ae --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-2.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png Binary files differnew file mode 100644 index 0000000..ed690ac --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-0-3.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png Binary files differindex 99602c3..99602c3 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png Binary files differnew file mode 100644 index 0000000..21fd562 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-0.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png Binary files differindex e02adb4..e02adb4 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-h.png 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 Binary files differnew file mode 100644 index 0000000..e370aa6 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1-v.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png Binary files differindex b50f7cf..b50f7cf 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-1.png 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 Binary files differnew file mode 100644 index 0000000..3888ce7 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png Binary files differnew file mode 100644 index 0000000..a47b05a --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-2.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png Binary files differnew file mode 100644 index 0000000..6cba533 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-1-3.png 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 Binary files differnew file mode 100644 index 0000000..7a10cdf --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-h.png 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 Binary files differnew file mode 100644 index 0000000..a3aa7a3 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0-v.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png Binary files differnew file mode 100644 index 0000000..6f4629f --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-0.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png Binary files differindex 0ba3653..0ba3653 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1-h.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png Binary files differindex 4f5b154..4f5b154 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png Binary files differnew file mode 100644 index 0000000..2125244 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-2.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png Binary files differindex 3bd7270..3bd7270 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png Binary files differnew file mode 100644 index 0000000..50d8b09 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-2-3.png 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 Binary files differnew file mode 100644 index 0000000..1506859 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0-h.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png Binary files differnew file mode 100644 index 0000000..0746226 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png Binary files differnew file mode 100644 index 0000000..4af1e1c --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png Binary files differnew file mode 100644 index 0000000..840a63e --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-3-3.png diff --git a/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png Binary files differindex 079d383..079d383 100644 --- a/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-0.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png Binary files differnew file mode 100644 index 0000000..4f24d2a --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-1.png diff --git a/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png Binary files differnew file mode 100644 index 0000000..0a92002 --- /dev/null +++ b/mindus/assets/blocks/distribution/conveyors/titanium-conveyor-4-3.png diff --git a/assets/blocks/distribution/distributor.png b/mindus/assets/blocks/distribution/distributor.png Binary files differindex e4445dd..e4445dd 100644 --- a/assets/blocks/distribution/distributor.png +++ b/mindus/assets/blocks/distribution/distributor.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-0.png Binary files differnew file mode 100644 index 0000000..ccd7a06 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-0-0.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-1.png Binary files differnew file mode 100644 index 0000000..8a75a73 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-0-1.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-2.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-2.png Binary files differnew file mode 100644 index 0000000..d89d76e --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-0-2.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-0-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-0-3.png Binary files differnew file mode 100644 index 0000000..ad204f3 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-0-3.png 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 Binary files differnew file mode 100644 index 0000000..b9d6bce --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-0-h.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-0.png Binary files differnew file mode 100644 index 0000000..63a6c48 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-0.png 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 Binary files differnew file mode 100644 index 0000000..2104e28 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-h.png 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 Binary files differnew file mode 100644 index 0000000..4a22d5b --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1-v.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1.png Binary files differnew file mode 100644 index 0000000..29b47b0 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-1.png 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 Binary files differnew file mode 100644 index 0000000..c6c3cbf --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-2-h.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-2.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-2.png Binary files differnew file mode 100644 index 0000000..819cb63 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-2.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-1-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-1-3.png Binary files differnew file mode 100644 index 0000000..ef7d864 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-1-3.png 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 Binary files differnew file mode 100644 index 0000000..2937ad7 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-h.png 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 Binary files differnew file mode 100644 index 0000000..dd5c2d1 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0-v.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0.png Binary files differnew file mode 100644 index 0000000..e6df835 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-0.png 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 Binary files differnew file mode 100644 index 0000000..077c9b9 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-1-h.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-1.png Binary files differnew file mode 100644 index 0000000..9086194 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-1.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-2.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-2.png Binary files differnew file mode 100644 index 0000000..aae911e --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-2.png 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 Binary files differnew file mode 100644 index 0000000..5587009 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-3-h.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-2-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-2-3.png Binary files differnew file mode 100644 index 0000000..14ce864 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-2-3.png 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 Binary files differnew file mode 100644 index 0000000..1ba0792 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-3-0-h.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-0.png Binary files differnew file mode 100644 index 0000000..e760e24 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-3-0.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-1.png Binary files differnew file mode 100644 index 0000000..78402ae --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-3-1.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-3-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-3-3.png Binary files differnew file mode 100644 index 0000000..b7ae486 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-3-3.png diff --git a/assets/blocks/distribution/ducts/armored-duct-4-0.png b/mindus/assets/blocks/distribution/ducts/armored-duct-4-0.png Binary files differindex 985626c..985626c 100644 --- a/assets/blocks/distribution/ducts/armored-duct-4-0.png +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-4-0.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-4-1.png b/mindus/assets/blocks/distribution/ducts/armored-duct-4-1.png Binary files differnew file mode 100644 index 0000000..dc1c0c1 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-4-1.png diff --git a/mindus/assets/blocks/distribution/ducts/armored-duct-4-3.png b/mindus/assets/blocks/distribution/ducts/armored-duct-4-3.png Binary files differnew file mode 100644 index 0000000..efac19e --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/armored-duct-4-3.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-0.png b/mindus/assets/blocks/distribution/ducts/duct-0-0.png Binary files differnew file mode 100644 index 0000000..6f3b636 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-0-0.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-1.png b/mindus/assets/blocks/distribution/ducts/duct-0-1.png Binary files differnew file mode 100644 index 0000000..8b24d1f --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-0-1.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-2.png b/mindus/assets/blocks/distribution/ducts/duct-0-2.png Binary files differnew file mode 100644 index 0000000..5b61fdd --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-0-2.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-0-3.png b/mindus/assets/blocks/distribution/ducts/duct-0-3.png Binary files differnew file mode 100644 index 0000000..372e0af --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-0-3.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-0-h.png b/mindus/assets/blocks/distribution/ducts/duct-1-0-h.png Binary files differnew file mode 100644 index 0000000..2db6afd --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-0-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-0.png b/mindus/assets/blocks/distribution/ducts/duct-1-0.png Binary files differnew file mode 100644 index 0000000..8b2723a --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-0.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-1-h.png b/mindus/assets/blocks/distribution/ducts/duct-1-1-h.png Binary files differnew file mode 100644 index 0000000..845d114 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-1-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-1-v.png b/mindus/assets/blocks/distribution/ducts/duct-1-1-v.png Binary files differnew file mode 100644 index 0000000..cb9b2af --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-1-v.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-1.png b/mindus/assets/blocks/distribution/ducts/duct-1-1.png Binary files differnew file mode 100644 index 0000000..cf8eebf --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-1.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-2-h.png b/mindus/assets/blocks/distribution/ducts/duct-1-2-h.png Binary files differnew file mode 100644 index 0000000..872b989 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-2-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-2.png b/mindus/assets/blocks/distribution/ducts/duct-1-2.png Binary files differnew file mode 100644 index 0000000..c67a087 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-2.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-1-3.png b/mindus/assets/blocks/distribution/ducts/duct-1-3.png Binary files differnew file mode 100644 index 0000000..77951fd --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-1-3.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-0-h.png b/mindus/assets/blocks/distribution/ducts/duct-2-0-h.png Binary files differnew file mode 100644 index 0000000..92b36be --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-0-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-0-v.png b/mindus/assets/blocks/distribution/ducts/duct-2-0-v.png Binary files differnew file mode 100644 index 0000000..ebc4aad --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-0-v.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-0.png b/mindus/assets/blocks/distribution/ducts/duct-2-0.png Binary files differnew file mode 100644 index 0000000..8963650 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-0.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-1-h.png b/mindus/assets/blocks/distribution/ducts/duct-2-1-h.png Binary files differnew file mode 100644 index 0000000..dde07de --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-1-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-1.png b/mindus/assets/blocks/distribution/ducts/duct-2-1.png Binary files differnew file mode 100644 index 0000000..7ae058a --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-1.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-2.png b/mindus/assets/blocks/distribution/ducts/duct-2-2.png Binary files differnew file mode 100644 index 0000000..a7ff8fe --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-2.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-3-h.png b/mindus/assets/blocks/distribution/ducts/duct-2-3-h.png Binary files differnew file mode 100644 index 0000000..7f838f3 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-3-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-2-3.png b/mindus/assets/blocks/distribution/ducts/duct-2-3.png Binary files differnew file mode 100644 index 0000000..09fe070 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-2-3.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-0-h.png b/mindus/assets/blocks/distribution/ducts/duct-3-0-h.png Binary files differnew file mode 100644 index 0000000..771dba4 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-3-0-h.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-0.png b/mindus/assets/blocks/distribution/ducts/duct-3-0.png Binary files differnew file mode 100644 index 0000000..c89b476 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-3-0.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-1.png b/mindus/assets/blocks/distribution/ducts/duct-3-1.png Binary files differnew file mode 100644 index 0000000..2a4c902 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-3-1.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-3-3.png b/mindus/assets/blocks/distribution/ducts/duct-3-3.png Binary files differnew file mode 100644 index 0000000..1cd719b --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-3-3.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-4-0.png b/mindus/assets/blocks/distribution/ducts/duct-4-0.png Binary files differnew file mode 100644 index 0000000..8f07d03 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-4-0.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-4-1.png b/mindus/assets/blocks/distribution/ducts/duct-4-1.png Binary files differnew file mode 100644 index 0000000..584da12 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-4-1.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-4-3.png b/mindus/assets/blocks/distribution/ducts/duct-4-3.png Binary files differnew file mode 100644 index 0000000..db314a6 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-4-3.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-base.png b/mindus/assets/blocks/distribution/ducts/duct-base.png Binary files differnew file mode 100644 index 0000000..58d266d --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-base.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.png Binary files differnew file mode 100644 index 0000000..78bb451 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-bridge-arrow.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png Binary files differnew file mode 100644 index 0000000..15da706 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge-bottom.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.png Binary files differnew file mode 100644 index 0000000..62b944a --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-bridge-bridge.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge-dir.png b/mindus/assets/blocks/distribution/ducts/duct-bridge-dir.png Binary files differnew file mode 100644 index 0000000..bdc7975 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-bridge-dir.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-bridge.png b/mindus/assets/blocks/distribution/ducts/duct-bridge.png Binary files differnew file mode 100644 index 0000000..29cf409 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-bridge.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-router.png b/mindus/assets/blocks/distribution/ducts/duct-router.png Binary files differnew file mode 100644 index 0000000..29cf409 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-router.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.png b/mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.png Binary files differnew file mode 100644 index 0000000..9af78ca --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-unloader-arrows.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-unloader-top.png b/mindus/assets/blocks/distribution/ducts/duct-unloader-top.png Binary files differnew file mode 100644 index 0000000..8e78864 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-unloader-top.png diff --git a/mindus/assets/blocks/distribution/ducts/duct-unloader.png b/mindus/assets/blocks/distribution/ducts/duct-unloader.png Binary files differnew file mode 100644 index 0000000..71e5674 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/duct-unloader.png diff --git a/assets/blocks/distribution/ducts/overflow-duct.png b/mindus/assets/blocks/distribution/ducts/overflow-duct.png Binary files differindex 6b3e6d0..6b3e6d0 100644 --- a/assets/blocks/distribution/ducts/overflow-duct.png +++ b/mindus/assets/blocks/distribution/ducts/overflow-duct.png diff --git a/mindus/assets/blocks/distribution/ducts/surge-router.png b/mindus/assets/blocks/distribution/ducts/surge-router.png Binary files differnew file mode 100644 index 0000000..0d61b11 --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/surge-router.png diff --git a/mindus/assets/blocks/distribution/ducts/top.png b/mindus/assets/blocks/distribution/ducts/top.png Binary files differnew file mode 100644 index 0000000..d0315ef --- /dev/null +++ b/mindus/assets/blocks/distribution/ducts/top.png diff --git a/assets/blocks/distribution/ducts/underflow-duct.png b/mindus/assets/blocks/distribution/ducts/underflow-duct.png Binary files differindex f36bc41..f36bc41 100644 --- a/assets/blocks/distribution/ducts/underflow-duct.png +++ b/mindus/assets/blocks/distribution/ducts/underflow-duct.png diff --git a/mindus/assets/blocks/distribution/inverted-sorter.png b/mindus/assets/blocks/distribution/inverted-sorter.png Binary files differnew file mode 100644 index 0000000..9cdc258 --- /dev/null +++ b/mindus/assets/blocks/distribution/inverted-sorter.png diff --git a/mindus/assets/blocks/distribution/item-source.png b/mindus/assets/blocks/distribution/item-source.png Binary files differnew file mode 100644 index 0000000..f0a8b3f --- /dev/null +++ b/mindus/assets/blocks/distribution/item-source.png diff --git a/mindus/assets/blocks/distribution/item-void.png b/mindus/assets/blocks/distribution/item-void.png Binary files differnew file mode 100644 index 0000000..30b0834 --- /dev/null +++ b/mindus/assets/blocks/distribution/item-void.png diff --git a/assets/blocks/distribution/junction.png b/mindus/assets/blocks/distribution/junction.png Binary files differindex 0cdb020..0cdb020 100644 --- a/assets/blocks/distribution/junction.png +++ b/mindus/assets/blocks/distribution/junction.png diff --git a/mindus/assets/blocks/distribution/mass-driver-base.png b/mindus/assets/blocks/distribution/mass-driver-base.png Binary files differnew file mode 100644 index 0000000..4f263c9 --- /dev/null +++ b/mindus/assets/blocks/distribution/mass-driver-base.png diff --git a/mindus/assets/blocks/distribution/mass-driver.png b/mindus/assets/blocks/distribution/mass-driver.png Binary files differnew file mode 100644 index 0000000..9c0e632 --- /dev/null +++ b/mindus/assets/blocks/distribution/mass-driver.png diff --git a/mindus/assets/blocks/distribution/overflow-gate.png b/mindus/assets/blocks/distribution/overflow-gate.png Binary files differnew file mode 100644 index 0000000..3e626c0 --- /dev/null +++ b/mindus/assets/blocks/distribution/overflow-gate.png diff --git a/mindus/assets/blocks/distribution/phase-conveyor-arrow.png b/mindus/assets/blocks/distribution/phase-conveyor-arrow.png Binary files differnew file mode 100644 index 0000000..ec3654c --- /dev/null +++ b/mindus/assets/blocks/distribution/phase-conveyor-arrow.png diff --git a/mindus/assets/blocks/distribution/phase-conveyor-bridge.png b/mindus/assets/blocks/distribution/phase-conveyor-bridge.png Binary files differnew file mode 100644 index 0000000..9c51a42 --- /dev/null +++ b/mindus/assets/blocks/distribution/phase-conveyor-bridge.png diff --git a/mindus/assets/blocks/distribution/phase-conveyor-end.png b/mindus/assets/blocks/distribution/phase-conveyor-end.png Binary files differnew file mode 100644 index 0000000..3692778 --- /dev/null +++ b/mindus/assets/blocks/distribution/phase-conveyor-end.png diff --git a/mindus/assets/blocks/distribution/phase-conveyor.png b/mindus/assets/blocks/distribution/phase-conveyor.png Binary files differnew file mode 100644 index 0000000..415b83d --- /dev/null +++ b/mindus/assets/blocks/distribution/phase-conveyor.png diff --git a/assets/blocks/distribution/router.png b/mindus/assets/blocks/distribution/router.png Binary files differindex c45605f..c45605f 100644 --- a/assets/blocks/distribution/router.png +++ b/mindus/assets/blocks/distribution/router.png diff --git a/mindus/assets/blocks/distribution/sorter.png b/mindus/assets/blocks/distribution/sorter.png Binary files differnew file mode 100644 index 0000000..a0c2321 --- /dev/null +++ b/mindus/assets/blocks/distribution/sorter.png diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png Binary files differnew file mode 100644 index 0000000..b597da7 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-0.png diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png Binary files differnew file mode 100644 index 0000000..7aeacc7 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-1.png diff --git a/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png Binary files differnew file mode 100644 index 0000000..0c8c484 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-2.png 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 Binary files differnew file mode 100644 index 0000000..f98e3c9 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-0.png 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 Binary files differnew file mode 100644 index 0000000..7fc91a5 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-1.png 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 Binary files differnew file mode 100644 index 0000000..2d1e2a7 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-2.png 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 Binary files differnew file mode 100644 index 0000000..febbed5 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-edge-3.png diff --git a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png Binary files differindex a0e5afe..dd3cd77 100644 --- a/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png +++ b/mindus/assets/blocks/distribution/stack-conveyors/plastanium-conveyor-stack.png diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png Binary files differnew file mode 100644 index 0000000..8f63f2a --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-0.png diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png Binary files differnew file mode 100644 index 0000000..ec328ab --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-1.png 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 Binary files differnew file mode 100644 index 0000000..ec10480 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-0.png 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 Binary files differnew file mode 100644 index 0000000..f12784a --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-1.png 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 Binary files differnew file mode 100644 index 0000000..983da52 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-2.png 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 Binary files differnew file mode 100644 index 0000000..767a05f --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-edge-3.png diff --git a/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png Binary files differnew file mode 100644 index 0000000..6cdcac9 --- /dev/null +++ b/mindus/assets/blocks/distribution/stack-conveyors/surge-conveyor-stack.png diff --git a/mindus/assets/blocks/distribution/underflow-gate.png b/mindus/assets/blocks/distribution/underflow-gate.png Binary files differnew file mode 100644 index 0000000..c875229 --- /dev/null +++ b/mindus/assets/blocks/distribution/underflow-gate.png diff --git a/mindus/assets/blocks/distribution/unit-cargo-unload-point-top.png b/mindus/assets/blocks/distribution/unit-cargo-unload-point-top.png Binary files differnew file mode 100644 index 0000000..a960f5d --- /dev/null +++ b/mindus/assets/blocks/distribution/unit-cargo-unload-point-top.png diff --git a/mindus/assets/blocks/distribution/unit-cargo-unload-point.png b/mindus/assets/blocks/distribution/unit-cargo-unload-point.png Binary files differnew file mode 100644 index 0000000..a870a8d --- /dev/null +++ b/mindus/assets/blocks/distribution/unit-cargo-unload-point.png diff --git a/mindus/assets/blocks/drills/blast-drill.png b/mindus/assets/blocks/drills/blast-drill.png Binary files differnew file mode 100644 index 0000000..0867bce --- /dev/null +++ b/mindus/assets/blocks/drills/blast-drill.png diff --git a/mindus/assets/blocks/drills/cliff-crusher-rotator.png b/mindus/assets/blocks/drills/cliff-crusher-rotator.png Binary files differnew file mode 100644 index 0000000..40c4077 --- /dev/null +++ b/mindus/assets/blocks/drills/cliff-crusher-rotator.png diff --git a/assets/blocks/drills/cliff-crusher-top.png b/mindus/assets/blocks/drills/cliff-crusher-top.png Binary files differindex d883816..d883816 100644 --- a/assets/blocks/drills/cliff-crusher-top.png +++ b/mindus/assets/blocks/drills/cliff-crusher-top.png diff --git a/mindus/assets/blocks/drills/cliff-crusher.png b/mindus/assets/blocks/drills/cliff-crusher.png Binary files differnew file mode 100644 index 0000000..f6c8c1a --- /dev/null +++ b/mindus/assets/blocks/drills/cliff-crusher.png diff --git a/mindus/assets/blocks/drills/eruption-drill.png b/mindus/assets/blocks/drills/eruption-drill.png Binary files differnew file mode 100644 index 0000000..24c3ab3 --- /dev/null +++ b/mindus/assets/blocks/drills/eruption-drill.png diff --git a/mindus/assets/blocks/drills/impact-drill.png b/mindus/assets/blocks/drills/impact-drill.png Binary files differnew file mode 100644 index 0000000..40ad1b6 --- /dev/null +++ b/mindus/assets/blocks/drills/impact-drill.png diff --git a/mindus/assets/blocks/drills/large-cliff-crusher-top.png b/mindus/assets/blocks/drills/large-cliff-crusher-top.png Binary files differnew file mode 100644 index 0000000..ac0a2a3 --- /dev/null +++ b/mindus/assets/blocks/drills/large-cliff-crusher-top.png diff --git a/mindus/assets/blocks/drills/large-cliff-crusher.png b/mindus/assets/blocks/drills/large-cliff-crusher.png Binary files differnew file mode 100644 index 0000000..c475da0 --- /dev/null +++ b/mindus/assets/blocks/drills/large-cliff-crusher.png diff --git a/mindus/assets/blocks/drills/large-plasma-bore-top.png b/mindus/assets/blocks/drills/large-plasma-bore-top.png Binary files differnew file mode 100644 index 0000000..7eb8a48 --- /dev/null +++ b/mindus/assets/blocks/drills/large-plasma-bore-top.png diff --git a/mindus/assets/blocks/drills/large-plasma-bore.png b/mindus/assets/blocks/drills/large-plasma-bore.png Binary files differnew file mode 100644 index 0000000..1dffdd6 --- /dev/null +++ b/mindus/assets/blocks/drills/large-plasma-bore.png diff --git a/mindus/assets/blocks/drills/laser-drill.png b/mindus/assets/blocks/drills/laser-drill.png Binary files differnew file mode 100644 index 0000000..25180d0 --- /dev/null +++ b/mindus/assets/blocks/drills/laser-drill.png diff --git a/mindus/assets/blocks/drills/mechanical-drill.png b/mindus/assets/blocks/drills/mechanical-drill.png Binary files differnew file mode 100644 index 0000000..3df3745 --- /dev/null +++ b/mindus/assets/blocks/drills/mechanical-drill.png diff --git a/mindus/assets/blocks/drills/oil-extractor.png b/mindus/assets/blocks/drills/oil-extractor.png Binary files differnew file mode 100644 index 0000000..bb31a49 --- /dev/null +++ b/mindus/assets/blocks/drills/oil-extractor.png diff --git a/mindus/assets/blocks/drills/plasma-bore-top.png b/mindus/assets/blocks/drills/plasma-bore-top.png Binary files differnew file mode 100644 index 0000000..3aa417c --- /dev/null +++ b/mindus/assets/blocks/drills/plasma-bore-top.png diff --git a/mindus/assets/blocks/drills/plasma-bore.png b/mindus/assets/blocks/drills/plasma-bore.png Binary files differnew file mode 100644 index 0000000..223986f --- /dev/null +++ b/mindus/assets/blocks/drills/plasma-bore.png diff --git a/mindus/assets/blocks/drills/pneumatic-drill.png b/mindus/assets/blocks/drills/pneumatic-drill.png Binary files differnew file mode 100644 index 0000000..dbd2cc0 --- /dev/null +++ b/mindus/assets/blocks/drills/pneumatic-drill.png diff --git a/mindus/assets/blocks/drills/vent-condenser.png b/mindus/assets/blocks/drills/vent-condenser.png Binary files differnew file mode 100644 index 0000000..fcadd48 --- /dev/null +++ b/mindus/assets/blocks/drills/vent-condenser.png diff --git a/mindus/assets/blocks/drills/water-extractor.png b/mindus/assets/blocks/drills/water-extractor.png Binary files differnew file mode 100644 index 0000000..42b28f6 --- /dev/null +++ b/mindus/assets/blocks/drills/water-extractor.png diff --git a/mindus/assets/blocks/environment/arkycite-floor.png b/mindus/assets/blocks/environment/arkycite-floor.png Binary files differnew file mode 100644 index 0000000..e0d5732 --- /dev/null +++ b/mindus/assets/blocks/environment/arkycite-floor.png diff --git a/mindus/assets/blocks/environment/arkyic-boulder1.png b/mindus/assets/blocks/environment/arkyic-boulder1.png Binary files differnew file mode 100644 index 0000000..f31b289 --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-boulder1.png diff --git a/mindus/assets/blocks/environment/arkyic-boulder2.png b/mindus/assets/blocks/environment/arkyic-boulder2.png Binary files differnew file mode 100644 index 0000000..22e6ccd --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-boulder2.png diff --git a/mindus/assets/blocks/environment/arkyic-boulder3.png b/mindus/assets/blocks/environment/arkyic-boulder3.png Binary files differnew file mode 100644 index 0000000..fda485e --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-boulder3.png diff --git a/mindus/assets/blocks/environment/arkyic-stone1.png b/mindus/assets/blocks/environment/arkyic-stone1.png Binary files differnew file mode 100644 index 0000000..e25f347 --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-stone1.png diff --git a/mindus/assets/blocks/environment/arkyic-stone2.png b/mindus/assets/blocks/environment/arkyic-stone2.png Binary files differnew file mode 100644 index 0000000..5ed8b4c --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-stone2.png diff --git a/mindus/assets/blocks/environment/arkyic-stone3.png b/mindus/assets/blocks/environment/arkyic-stone3.png Binary files differnew file mode 100644 index 0000000..a16a58a --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-stone3.png diff --git a/mindus/assets/blocks/environment/arkyic-vent1.png b/mindus/assets/blocks/environment/arkyic-vent1.png Binary files differnew file mode 100644 index 0000000..5f6a480 --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-vent1.png diff --git a/mindus/assets/blocks/environment/arkyic-vent2.png b/mindus/assets/blocks/environment/arkyic-vent2.png Binary files differnew file mode 100644 index 0000000..10ec406 --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-vent2.png diff --git a/mindus/assets/blocks/environment/arkyic-wall-large.png b/mindus/assets/blocks/environment/arkyic-wall-large.png Binary files differnew file mode 100644 index 0000000..55dc3ae --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-wall-large.png diff --git a/mindus/assets/blocks/environment/arkyic-wall1.png b/mindus/assets/blocks/environment/arkyic-wall1.png Binary files differnew file mode 100644 index 0000000..83dceed --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-wall1.png diff --git a/mindus/assets/blocks/environment/arkyic-wall2.png b/mindus/assets/blocks/environment/arkyic-wall2.png Binary files differnew file mode 100644 index 0000000..0abd6ae --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-wall2.png diff --git a/mindus/assets/blocks/environment/arkyic-wall3.png b/mindus/assets/blocks/environment/arkyic-wall3.png Binary files differnew file mode 100644 index 0000000..23a66e9 --- /dev/null +++ b/mindus/assets/blocks/environment/arkyic-wall3.png diff --git a/mindus/assets/blocks/environment/basalt-boulder1.png b/mindus/assets/blocks/environment/basalt-boulder1.png Binary files differnew file mode 100644 index 0000000..dc52a70 --- /dev/null +++ b/mindus/assets/blocks/environment/basalt-boulder1.png diff --git a/mindus/assets/blocks/environment/basalt-boulder2.png b/mindus/assets/blocks/environment/basalt-boulder2.png Binary files differnew file mode 100644 index 0000000..dfee5c7 --- /dev/null +++ b/mindus/assets/blocks/environment/basalt-boulder2.png diff --git a/mindus/assets/blocks/environment/basalt-vent1.png b/mindus/assets/blocks/environment/basalt-vent1.png Binary files differnew file mode 100644 index 0000000..416a2fd --- /dev/null +++ b/mindus/assets/blocks/environment/basalt-vent1.png diff --git a/mindus/assets/blocks/environment/basalt1.png b/mindus/assets/blocks/environment/basalt1.png Binary files differnew file mode 100644 index 0000000..cf15a4e --- /dev/null +++ b/mindus/assets/blocks/environment/basalt1.png diff --git a/mindus/assets/blocks/environment/basalt2.png b/mindus/assets/blocks/environment/basalt2.png Binary files differnew file mode 100644 index 0000000..db27743 --- /dev/null +++ b/mindus/assets/blocks/environment/basalt2.png diff --git a/mindus/assets/blocks/environment/basalt3.png b/mindus/assets/blocks/environment/basalt3.png Binary files differnew file mode 100644 index 0000000..26ea402 --- /dev/null +++ b/mindus/assets/blocks/environment/basalt3.png diff --git a/mindus/assets/blocks/environment/beryllic-boulder1.png b/mindus/assets/blocks/environment/beryllic-boulder1.png Binary files differnew file mode 100644 index 0000000..b9eaa44 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-boulder1.png diff --git a/mindus/assets/blocks/environment/beryllic-boulder2.png b/mindus/assets/blocks/environment/beryllic-boulder2.png Binary files differnew file mode 100644 index 0000000..ff5a723 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-boulder2.png diff --git a/mindus/assets/blocks/environment/beryllic-stone-wall-large.png b/mindus/assets/blocks/environment/beryllic-stone-wall-large.png Binary files differnew file mode 100644 index 0000000..e660522 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone-wall-large.png diff --git a/mindus/assets/blocks/environment/beryllic-stone-wall1.png b/mindus/assets/blocks/environment/beryllic-stone-wall1.png Binary files differnew file mode 100644 index 0000000..5203226 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone-wall1.png diff --git a/mindus/assets/blocks/environment/beryllic-stone-wall2.png b/mindus/assets/blocks/environment/beryllic-stone-wall2.png Binary files differnew file mode 100644 index 0000000..e936059 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone-wall2.png diff --git a/mindus/assets/blocks/environment/beryllic-stone1.png b/mindus/assets/blocks/environment/beryllic-stone1.png Binary files differnew file mode 100644 index 0000000..31da580 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone1.png diff --git a/mindus/assets/blocks/environment/beryllic-stone2.png b/mindus/assets/blocks/environment/beryllic-stone2.png Binary files differnew file mode 100644 index 0000000..e5c57ce --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone2.png diff --git a/mindus/assets/blocks/environment/beryllic-stone3.png b/mindus/assets/blocks/environment/beryllic-stone3.png Binary files differnew file mode 100644 index 0000000..e41a051 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone3.png diff --git a/mindus/assets/blocks/environment/beryllic-stone4.png b/mindus/assets/blocks/environment/beryllic-stone4.png Binary files differnew file mode 100644 index 0000000..9c67991 --- /dev/null +++ b/mindus/assets/blocks/environment/beryllic-stone4.png diff --git a/mindus/assets/blocks/environment/bluemat1.png b/mindus/assets/blocks/environment/bluemat1.png Binary files differnew file mode 100644 index 0000000..f53787d --- /dev/null +++ b/mindus/assets/blocks/environment/bluemat1.png diff --git a/mindus/assets/blocks/environment/bluemat2.png b/mindus/assets/blocks/environment/bluemat2.png Binary files differnew file mode 100644 index 0000000..d493309 --- /dev/null +++ b/mindus/assets/blocks/environment/bluemat2.png diff --git a/mindus/assets/blocks/environment/bluemat3.png b/mindus/assets/blocks/environment/bluemat3.png Binary files differnew file mode 100644 index 0000000..a4e955f --- /dev/null +++ b/mindus/assets/blocks/environment/bluemat3.png diff --git a/mindus/assets/blocks/environment/boulder1.png b/mindus/assets/blocks/environment/boulder1.png Binary files differnew file mode 100644 index 0000000..22d4929 --- /dev/null +++ b/mindus/assets/blocks/environment/boulder1.png diff --git a/mindus/assets/blocks/environment/boulder2.png b/mindus/assets/blocks/environment/boulder2.png Binary files differnew file mode 100644 index 0000000..8379417 --- /dev/null +++ b/mindus/assets/blocks/environment/boulder2.png diff --git a/mindus/assets/blocks/environment/carbon-boulder1.png b/mindus/assets/blocks/environment/carbon-boulder1.png Binary files differnew file mode 100644 index 0000000..d48f298 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-boulder1.png diff --git a/mindus/assets/blocks/environment/carbon-boulder2.png b/mindus/assets/blocks/environment/carbon-boulder2.png Binary files differnew file mode 100644 index 0000000..a3ae84b --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-boulder2.png diff --git a/mindus/assets/blocks/environment/carbon-stone1.png b/mindus/assets/blocks/environment/carbon-stone1.png Binary files differnew file mode 100644 index 0000000..241cc18 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-stone1.png diff --git a/mindus/assets/blocks/environment/carbon-stone2.png b/mindus/assets/blocks/environment/carbon-stone2.png Binary files differnew file mode 100644 index 0000000..90c80b1 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-stone2.png diff --git a/mindus/assets/blocks/environment/carbon-stone3.png b/mindus/assets/blocks/environment/carbon-stone3.png Binary files differnew file mode 100644 index 0000000..dc56e9c --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-stone3.png diff --git a/mindus/assets/blocks/environment/carbon-stone4.png b/mindus/assets/blocks/environment/carbon-stone4.png Binary files differnew file mode 100644 index 0000000..9a2a163 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-stone4.png diff --git a/mindus/assets/blocks/environment/carbon-vent.png b/mindus/assets/blocks/environment/carbon-vent.png Binary files differnew file mode 100644 index 0000000..583fe20 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-vent.png diff --git a/mindus/assets/blocks/environment/carbon-vent1.png b/mindus/assets/blocks/environment/carbon-vent1.png Binary files differnew file mode 100644 index 0000000..ccbf2f7 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-vent1.png diff --git a/mindus/assets/blocks/environment/carbon-vent2.png b/mindus/assets/blocks/environment/carbon-vent2.png Binary files differnew file mode 100644 index 0000000..a87225c --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-vent2.png diff --git a/mindus/assets/blocks/environment/carbon-wall-large.png b/mindus/assets/blocks/environment/carbon-wall-large.png Binary files differnew file mode 100644 index 0000000..8367461 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-wall-large.png diff --git a/mindus/assets/blocks/environment/carbon-wall1.png b/mindus/assets/blocks/environment/carbon-wall1.png Binary files differnew file mode 100644 index 0000000..9558777 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-wall1.png diff --git a/mindus/assets/blocks/environment/carbon-wall2.png b/mindus/assets/blocks/environment/carbon-wall2.png Binary files differnew file mode 100644 index 0000000..98a5334 --- /dev/null +++ b/mindus/assets/blocks/environment/carbon-wall2.png diff --git a/mindus/assets/blocks/environment/char1.png b/mindus/assets/blocks/environment/char1.png Binary files differnew file mode 100644 index 0000000..94ce8df --- /dev/null +++ b/mindus/assets/blocks/environment/char1.png diff --git a/mindus/assets/blocks/environment/char2.png b/mindus/assets/blocks/environment/char2.png Binary files differnew file mode 100644 index 0000000..47db29c --- /dev/null +++ b/mindus/assets/blocks/environment/char2.png diff --git a/mindus/assets/blocks/environment/char3.png b/mindus/assets/blocks/environment/char3.png Binary files differnew file mode 100644 index 0000000..be117bb --- /dev/null +++ b/mindus/assets/blocks/environment/char3.png diff --git a/mindus/assets/blocks/environment/core-zone.png b/mindus/assets/blocks/environment/core-zone.png Binary files differnew file mode 100644 index 0000000..8b3e389 --- /dev/null +++ b/mindus/assets/blocks/environment/core-zone.png diff --git a/mindus/assets/blocks/environment/crater-stone1.png b/mindus/assets/blocks/environment/crater-stone1.png Binary files differnew file mode 100644 index 0000000..0cd39f7 --- /dev/null +++ b/mindus/assets/blocks/environment/crater-stone1.png diff --git a/mindus/assets/blocks/environment/crater-stone2.png b/mindus/assets/blocks/environment/crater-stone2.png Binary files differnew file mode 100644 index 0000000..48c8560 --- /dev/null +++ b/mindus/assets/blocks/environment/crater-stone2.png diff --git a/mindus/assets/blocks/environment/crater-stone3.png b/mindus/assets/blocks/environment/crater-stone3.png Binary files differnew file mode 100644 index 0000000..a5246a5 --- /dev/null +++ b/mindus/assets/blocks/environment/crater-stone3.png diff --git a/mindus/assets/blocks/environment/crater-stone4.png b/mindus/assets/blocks/environment/crater-stone4.png Binary files differnew file mode 100644 index 0000000..24ccffa --- /dev/null +++ b/mindus/assets/blocks/environment/crater-stone4.png diff --git a/mindus/assets/blocks/environment/crater-stone5.png b/mindus/assets/blocks/environment/crater-stone5.png Binary files differnew file mode 100644 index 0000000..f9407bb --- /dev/null +++ b/mindus/assets/blocks/environment/crater-stone5.png diff --git a/mindus/assets/blocks/environment/crater-stone6.png b/mindus/assets/blocks/environment/crater-stone6.png Binary files differnew file mode 100644 index 0000000..632d3ef --- /dev/null +++ b/mindus/assets/blocks/environment/crater-stone6.png diff --git a/mindus/assets/blocks/environment/crystal-blocks1.png b/mindus/assets/blocks/environment/crystal-blocks1.png Binary files differnew file mode 100644 index 0000000..a65944b --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-blocks1.png diff --git a/mindus/assets/blocks/environment/crystal-blocks2.png b/mindus/assets/blocks/environment/crystal-blocks2.png Binary files differnew file mode 100644 index 0000000..0ccf6f7 --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-blocks2.png diff --git a/mindus/assets/blocks/environment/crystal-blocks3.png b/mindus/assets/blocks/environment/crystal-blocks3.png Binary files differnew file mode 100644 index 0000000..e90907b --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-blocks3.png diff --git a/mindus/assets/blocks/environment/crystal-cluster1.png b/mindus/assets/blocks/environment/crystal-cluster1.png Binary files differnew file mode 100644 index 0000000..946cbdc --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-cluster1.png diff --git a/mindus/assets/blocks/environment/crystal-cluster2.png b/mindus/assets/blocks/environment/crystal-cluster2.png Binary files differnew file mode 100644 index 0000000..2e1e8ef --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-cluster2.png diff --git a/mindus/assets/blocks/environment/crystal-cluster3.png b/mindus/assets/blocks/environment/crystal-cluster3.png Binary files differnew file mode 100644 index 0000000..b1a6f40 --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-cluster3.png diff --git a/assets/blocks/environment/crystal-floor.png b/mindus/assets/blocks/environment/crystal-floor1.png Binary files differindex 4ff6b86..4ff6b86 100644 --- a/assets/blocks/environment/crystal-floor.png +++ b/mindus/assets/blocks/environment/crystal-floor1.png diff --git a/mindus/assets/blocks/environment/crystal-floor2.png b/mindus/assets/blocks/environment/crystal-floor2.png Binary files differnew file mode 100644 index 0000000..545c355 --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-floor2.png diff --git a/mindus/assets/blocks/environment/crystal-floor3.png b/mindus/assets/blocks/environment/crystal-floor3.png Binary files differnew file mode 100644 index 0000000..824898f --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-floor3.png diff --git a/mindus/assets/blocks/environment/crystal-floor4.png b/mindus/assets/blocks/environment/crystal-floor4.png Binary files differnew file mode 100644 index 0000000..3ed7a8b --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-floor4.png diff --git a/mindus/assets/blocks/environment/crystal-orbs1.png b/mindus/assets/blocks/environment/crystal-orbs1.png Binary files differnew file mode 100644 index 0000000..945acb3 --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-orbs1.png diff --git a/mindus/assets/blocks/environment/crystal-orbs2.png b/mindus/assets/blocks/environment/crystal-orbs2.png Binary files differnew file mode 100644 index 0000000..fb91877 --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-orbs2.png diff --git a/mindus/assets/blocks/environment/crystal-orbs3.png b/mindus/assets/blocks/environment/crystal-orbs3.png Binary files differnew file mode 100644 index 0000000..f66e334 --- /dev/null +++ b/mindus/assets/blocks/environment/crystal-orbs3.png diff --git a/mindus/assets/blocks/environment/crystalline-boulder1.png b/mindus/assets/blocks/environment/crystalline-boulder1.png Binary files differnew file mode 100644 index 0000000..3625fcf --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-boulder1.png diff --git a/mindus/assets/blocks/environment/crystalline-boulder2.png b/mindus/assets/blocks/environment/crystalline-boulder2.png Binary files differnew file mode 100644 index 0000000..621efab --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-boulder2.png diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall-large.png b/mindus/assets/blocks/environment/crystalline-stone-wall-large.png Binary files differnew file mode 100644 index 0000000..9d146ea --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone-wall-large.png diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall1.png b/mindus/assets/blocks/environment/crystalline-stone-wall1.png Binary files differnew file mode 100644 index 0000000..a2c90a5 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone-wall1.png diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall2.png b/mindus/assets/blocks/environment/crystalline-stone-wall2.png Binary files differnew file mode 100644 index 0000000..565eee9 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone-wall2.png diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall3.png b/mindus/assets/blocks/environment/crystalline-stone-wall3.png Binary files differnew file mode 100644 index 0000000..20e4299 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone-wall3.png diff --git a/mindus/assets/blocks/environment/crystalline-stone-wall4.png b/mindus/assets/blocks/environment/crystalline-stone-wall4.png Binary files differnew file mode 100644 index 0000000..4d9b5d8 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone-wall4.png diff --git a/mindus/assets/blocks/environment/crystalline-stone1.png b/mindus/assets/blocks/environment/crystalline-stone1.png Binary files differnew file mode 100644 index 0000000..578de4b --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone1.png diff --git a/mindus/assets/blocks/environment/crystalline-stone2.png b/mindus/assets/blocks/environment/crystalline-stone2.png Binary files differnew file mode 100644 index 0000000..d4bba9b --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone2.png diff --git a/mindus/assets/blocks/environment/crystalline-stone3.png b/mindus/assets/blocks/environment/crystalline-stone3.png Binary files differnew file mode 100644 index 0000000..5e53179 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone3.png diff --git a/mindus/assets/blocks/environment/crystalline-stone4.png b/mindus/assets/blocks/environment/crystalline-stone4.png Binary files differnew file mode 100644 index 0000000..22ce7a7 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone4.png diff --git a/mindus/assets/blocks/environment/crystalline-stone5.png b/mindus/assets/blocks/environment/crystalline-stone5.png Binary files differnew file mode 100644 index 0000000..3963dbc --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-stone5.png diff --git a/mindus/assets/blocks/environment/crystalline-vent.png b/mindus/assets/blocks/environment/crystalline-vent.png Binary files differnew file mode 100644 index 0000000..a974831 --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-vent.png diff --git a/mindus/assets/blocks/environment/crystalline-vent1.png b/mindus/assets/blocks/environment/crystalline-vent1.png Binary files differnew file mode 100644 index 0000000..1df332b --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-vent1.png diff --git a/mindus/assets/blocks/environment/crystalline-vent2.png b/mindus/assets/blocks/environment/crystalline-vent2.png Binary files differnew file mode 100644 index 0000000..97f35eb --- /dev/null +++ b/mindus/assets/blocks/environment/crystalline-vent2.png diff --git a/mindus/assets/blocks/environment/dacite-boulder1.png b/mindus/assets/blocks/environment/dacite-boulder1.png Binary files differnew file mode 100644 index 0000000..6d87dcd --- /dev/null +++ b/mindus/assets/blocks/environment/dacite-boulder1.png diff --git a/mindus/assets/blocks/environment/dacite-boulder2.png b/mindus/assets/blocks/environment/dacite-boulder2.png Binary files differnew file mode 100644 index 0000000..6704524 --- /dev/null +++ b/mindus/assets/blocks/environment/dacite-boulder2.png diff --git a/mindus/assets/blocks/environment/dacite-wall-large.png b/mindus/assets/blocks/environment/dacite-wall-large.png Binary files differnew file mode 100644 index 0000000..12be810 --- /dev/null +++ b/mindus/assets/blocks/environment/dacite-wall-large.png diff --git a/mindus/assets/blocks/environment/dacite-wall1.png b/mindus/assets/blocks/environment/dacite-wall1.png Binary files differnew file mode 100644 index 0000000..40c36d0 --- /dev/null +++ b/mindus/assets/blocks/environment/dacite-wall1.png diff --git a/mindus/assets/blocks/environment/dacite-wall2.png b/mindus/assets/blocks/environment/dacite-wall2.png Binary files differnew file mode 100644 index 0000000..a4bae3e --- /dev/null +++ b/mindus/assets/blocks/environment/dacite-wall2.png diff --git a/mindus/assets/blocks/environment/dacite1.png b/mindus/assets/blocks/environment/dacite1.png Binary files differnew file mode 100644 index 0000000..ef65267 --- /dev/null +++ b/mindus/assets/blocks/environment/dacite1.png diff --git a/mindus/assets/blocks/environment/dacite2.png b/mindus/assets/blocks/environment/dacite2.png Binary files differnew file mode 100644 index 0000000..f9d9115 --- /dev/null +++ b/mindus/assets/blocks/environment/dacite2.png diff --git a/mindus/assets/blocks/environment/dacite3.png b/mindus/assets/blocks/environment/dacite3.png Binary files differnew file mode 100644 index 0000000..8a1621d --- /dev/null +++ b/mindus/assets/blocks/environment/dacite3.png diff --git a/mindus/assets/blocks/environment/dark-metal-large.png b/mindus/assets/blocks/environment/dark-metal-large.png Binary files differnew file mode 100644 index 0000000..a1efe07 --- /dev/null +++ b/mindus/assets/blocks/environment/dark-metal-large.png diff --git a/mindus/assets/blocks/environment/dark-metal1.png b/mindus/assets/blocks/environment/dark-metal1.png Binary files differnew file mode 100644 index 0000000..c284e63 --- /dev/null +++ b/mindus/assets/blocks/environment/dark-metal1.png diff --git a/mindus/assets/blocks/environment/dark-metal2.png b/mindus/assets/blocks/environment/dark-metal2.png Binary files differnew file mode 100644 index 0000000..207575a --- /dev/null +++ b/mindus/assets/blocks/environment/dark-metal2.png diff --git a/mindus/assets/blocks/environment/dark-panel-1.png b/mindus/assets/blocks/environment/dark-panel-1.png Binary files differnew file mode 100644 index 0000000..fe2683a --- /dev/null +++ b/mindus/assets/blocks/environment/dark-panel-1.png diff --git a/mindus/assets/blocks/environment/dark-panel-2.png b/mindus/assets/blocks/environment/dark-panel-2.png Binary files differnew file mode 100644 index 0000000..e45e817 --- /dev/null +++ b/mindus/assets/blocks/environment/dark-panel-2.png diff --git a/mindus/assets/blocks/environment/dark-panel-3.png b/mindus/assets/blocks/environment/dark-panel-3.png Binary files differnew file mode 100644 index 0000000..8734637 --- /dev/null +++ b/mindus/assets/blocks/environment/dark-panel-3.png diff --git a/mindus/assets/blocks/environment/dark-panel-4.png b/mindus/assets/blocks/environment/dark-panel-4.png Binary files differnew file mode 100644 index 0000000..cb277a0 --- /dev/null +++ b/mindus/assets/blocks/environment/dark-panel-4.png diff --git a/assets/blocks/environment/dark-panel-5.png b/mindus/assets/blocks/environment/dark-panel-5.png Binary files differindex c956695..c956695 100644 --- a/assets/blocks/environment/dark-panel-5.png +++ b/mindus/assets/blocks/environment/dark-panel-5.png diff --git a/mindus/assets/blocks/environment/dark-panel-6.png b/mindus/assets/blocks/environment/dark-panel-6.png Binary files differnew file mode 100644 index 0000000..d3b9251 --- /dev/null +++ b/mindus/assets/blocks/environment/dark-panel-6.png diff --git a/mindus/assets/blocks/environment/darksand-tainted-water.png b/mindus/assets/blocks/environment/darksand-tainted-water.png Binary files differnew file mode 100644 index 0000000..a687787 --- /dev/null +++ b/mindus/assets/blocks/environment/darksand-tainted-water.png diff --git a/mindus/assets/blocks/environment/darksand-water.png b/mindus/assets/blocks/environment/darksand-water.png Binary files differnew file mode 100644 index 0000000..f2e6968 --- /dev/null +++ b/mindus/assets/blocks/environment/darksand-water.png diff --git a/mindus/assets/blocks/environment/darksand1.png b/mindus/assets/blocks/environment/darksand1.png Binary files differnew file mode 100644 index 0000000..91866e5 --- /dev/null +++ b/mindus/assets/blocks/environment/darksand1.png diff --git a/mindus/assets/blocks/environment/darksand2.png b/mindus/assets/blocks/environment/darksand2.png Binary files differnew file mode 100644 index 0000000..c8eb59e --- /dev/null +++ b/mindus/assets/blocks/environment/darksand2.png diff --git a/mindus/assets/blocks/environment/darksand3.png b/mindus/assets/blocks/environment/darksand3.png Binary files differnew file mode 100644 index 0000000..c8ece42 --- /dev/null +++ b/mindus/assets/blocks/environment/darksand3.png diff --git a/mindus/assets/blocks/environment/deep-tainted-water.png b/mindus/assets/blocks/environment/deep-tainted-water.png Binary files differnew file mode 100644 index 0000000..f1f8a47 --- /dev/null +++ b/mindus/assets/blocks/environment/deep-tainted-water.png diff --git a/mindus/assets/blocks/environment/deep-water.png b/mindus/assets/blocks/environment/deep-water.png Binary files differnew file mode 100644 index 0000000..a0d0e10 --- /dev/null +++ b/mindus/assets/blocks/environment/deep-water.png diff --git a/mindus/assets/blocks/environment/dense-red-stone1.png b/mindus/assets/blocks/environment/dense-red-stone1.png Binary files differnew file mode 100644 index 0000000..05a3455 --- /dev/null +++ b/mindus/assets/blocks/environment/dense-red-stone1.png diff --git a/mindus/assets/blocks/environment/dense-red-stone2.png b/mindus/assets/blocks/environment/dense-red-stone2.png Binary files differnew file mode 100644 index 0000000..6fe1899 --- /dev/null +++ b/mindus/assets/blocks/environment/dense-red-stone2.png diff --git a/mindus/assets/blocks/environment/dense-red-stone3.png b/mindus/assets/blocks/environment/dense-red-stone3.png Binary files differnew file mode 100644 index 0000000..a484201 --- /dev/null +++ b/mindus/assets/blocks/environment/dense-red-stone3.png diff --git a/mindus/assets/blocks/environment/dense-red-stone4.png b/mindus/assets/blocks/environment/dense-red-stone4.png Binary files differnew file mode 100644 index 0000000..dfa2ef8 --- /dev/null +++ b/mindus/assets/blocks/environment/dense-red-stone4.png diff --git a/mindus/assets/blocks/environment/dirt-wall-large.png b/mindus/assets/blocks/environment/dirt-wall-large.png Binary files differnew file mode 100644 index 0000000..db43337 --- /dev/null +++ b/mindus/assets/blocks/environment/dirt-wall-large.png diff --git a/mindus/assets/blocks/environment/dirt-wall1.png b/mindus/assets/blocks/environment/dirt-wall1.png Binary files differnew file mode 100644 index 0000000..6eb65e0 --- /dev/null +++ b/mindus/assets/blocks/environment/dirt-wall1.png diff --git a/assets/blocks/environment/dirt-wall.png b/mindus/assets/blocks/environment/dirt-wall2.png Binary files differindex f76d30d..f76d30d 100644 --- a/assets/blocks/environment/dirt-wall.png +++ b/mindus/assets/blocks/environment/dirt-wall2.png diff --git a/mindus/assets/blocks/environment/dirt1.png b/mindus/assets/blocks/environment/dirt1.png Binary files differnew file mode 100644 index 0000000..38f11e7 --- /dev/null +++ b/mindus/assets/blocks/environment/dirt1.png diff --git a/mindus/assets/blocks/environment/dirt2.png b/mindus/assets/blocks/environment/dirt2.png Binary files differnew file mode 100644 index 0000000..e4aa286 --- /dev/null +++ b/mindus/assets/blocks/environment/dirt2.png diff --git a/mindus/assets/blocks/environment/dirt3.png b/mindus/assets/blocks/environment/dirt3.png Binary files differnew file mode 100644 index 0000000..ff65a1f --- /dev/null +++ b/mindus/assets/blocks/environment/dirt3.png diff --git a/mindus/assets/blocks/environment/dune-wall-large.png b/mindus/assets/blocks/environment/dune-wall-large.png Binary files differnew file mode 100644 index 0000000..d2a69ea --- /dev/null +++ b/mindus/assets/blocks/environment/dune-wall-large.png diff --git a/mindus/assets/blocks/environment/dune-wall1.png b/mindus/assets/blocks/environment/dune-wall1.png Binary files differnew file mode 100644 index 0000000..5b4462f --- /dev/null +++ b/mindus/assets/blocks/environment/dune-wall1.png diff --git a/mindus/assets/blocks/environment/dune-wall2.png b/mindus/assets/blocks/environment/dune-wall2.png Binary files differnew file mode 100644 index 0000000..f849893 --- /dev/null +++ b/mindus/assets/blocks/environment/dune-wall2.png diff --git a/mindus/assets/blocks/environment/edge-stencil.png b/mindus/assets/blocks/environment/edge-stencil.png Binary files differnew file mode 100644 index 0000000..0bd0cb7 --- /dev/null +++ b/mindus/assets/blocks/environment/edge-stencil.png diff --git a/mindus/assets/blocks/environment/edge.png b/mindus/assets/blocks/environment/edge.png Binary files differnew file mode 100644 index 0000000..12c3b44 --- /dev/null +++ b/mindus/assets/blocks/environment/edge.png diff --git a/mindus/assets/blocks/environment/env-error.png b/mindus/assets/blocks/environment/env-error.png Binary files differnew file mode 100644 index 0000000..d851d7f --- /dev/null +++ b/mindus/assets/blocks/environment/env-error.png diff --git a/mindus/assets/blocks/environment/ferric-boulder1.png b/mindus/assets/blocks/environment/ferric-boulder1.png Binary files differnew file mode 100644 index 0000000..56bcb4b --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-boulder1.png diff --git a/mindus/assets/blocks/environment/ferric-boulder2.png b/mindus/assets/blocks/environment/ferric-boulder2.png Binary files differnew file mode 100644 index 0000000..acba7d4 --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-boulder2.png diff --git a/mindus/assets/blocks/environment/ferric-craters1.png b/mindus/assets/blocks/environment/ferric-craters1.png Binary files differnew file mode 100644 index 0000000..3249fe9 --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-craters1.png diff --git a/mindus/assets/blocks/environment/ferric-craters2.png b/mindus/assets/blocks/environment/ferric-craters2.png Binary files differnew file mode 100644 index 0000000..91586af --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-craters2.png diff --git a/mindus/assets/blocks/environment/ferric-craters3.png b/mindus/assets/blocks/environment/ferric-craters3.png Binary files differnew file mode 100644 index 0000000..8b25404 --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-craters3.png diff --git a/mindus/assets/blocks/environment/ferric-stone-wall-large.png b/mindus/assets/blocks/environment/ferric-stone-wall-large.png Binary files differnew file mode 100644 index 0000000..399cf4f --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-stone-wall-large.png diff --git a/mindus/assets/blocks/environment/ferric-stone-wall1.png b/mindus/assets/blocks/environment/ferric-stone-wall1.png Binary files differnew file mode 100644 index 0000000..580ef7d --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-stone-wall1.png diff --git a/assets/blocks/environment/ferric-stone-wall.png b/mindus/assets/blocks/environment/ferric-stone-wall2.png Binary files differindex fac2fcc..fac2fcc 100644 --- a/assets/blocks/environment/ferric-stone-wall.png +++ b/mindus/assets/blocks/environment/ferric-stone-wall2.png diff --git a/mindus/assets/blocks/environment/ferric-stone1.png b/mindus/assets/blocks/environment/ferric-stone1.png Binary files differnew file mode 100644 index 0000000..4a1a0bc --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-stone1.png diff --git a/mindus/assets/blocks/environment/ferric-stone2.png b/mindus/assets/blocks/environment/ferric-stone2.png Binary files differnew file mode 100644 index 0000000..f4e9af5 --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-stone2.png diff --git a/mindus/assets/blocks/environment/ferric-stone3.png b/mindus/assets/blocks/environment/ferric-stone3.png Binary files differnew file mode 100644 index 0000000..1bc4111 --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-stone3.png diff --git a/mindus/assets/blocks/environment/ferric-stone4.png b/mindus/assets/blocks/environment/ferric-stone4.png Binary files differnew file mode 100644 index 0000000..17ed876 --- /dev/null +++ b/mindus/assets/blocks/environment/ferric-stone4.png diff --git a/mindus/assets/blocks/environment/graphitic-wall-large.png b/mindus/assets/blocks/environment/graphitic-wall-large.png Binary files differnew file mode 100644 index 0000000..476879a --- /dev/null +++ b/mindus/assets/blocks/environment/graphitic-wall-large.png diff --git a/mindus/assets/blocks/environment/graphitic-wall1.png b/mindus/assets/blocks/environment/graphitic-wall1.png Binary files differnew file mode 100644 index 0000000..21454de --- /dev/null +++ b/mindus/assets/blocks/environment/graphitic-wall1.png diff --git a/mindus/assets/blocks/environment/graphitic-wall2.png b/mindus/assets/blocks/environment/graphitic-wall2.png Binary files differnew file mode 100644 index 0000000..aa78bd8 --- /dev/null +++ b/mindus/assets/blocks/environment/graphitic-wall2.png diff --git a/mindus/assets/blocks/environment/graphitic-wall3.png b/mindus/assets/blocks/environment/graphitic-wall3.png Binary files differnew file mode 100644 index 0000000..8419091 --- /dev/null +++ b/mindus/assets/blocks/environment/graphitic-wall3.png diff --git a/mindus/assets/blocks/environment/grass1.png b/mindus/assets/blocks/environment/grass1.png Binary files differnew file mode 100644 index 0000000..9b4c556 --- /dev/null +++ b/mindus/assets/blocks/environment/grass1.png diff --git a/mindus/assets/blocks/environment/grass2.png b/mindus/assets/blocks/environment/grass2.png Binary files differnew file mode 100644 index 0000000..d858821 --- /dev/null +++ b/mindus/assets/blocks/environment/grass2.png diff --git a/mindus/assets/blocks/environment/grass3.png b/mindus/assets/blocks/environment/grass3.png Binary files differnew file mode 100644 index 0000000..9e1aca0 --- /dev/null +++ b/mindus/assets/blocks/environment/grass3.png diff --git a/mindus/assets/blocks/environment/hotrock1.png b/mindus/assets/blocks/environment/hotrock1.png Binary files differnew file mode 100644 index 0000000..9b1f60d --- /dev/null +++ b/mindus/assets/blocks/environment/hotrock1.png diff --git a/mindus/assets/blocks/environment/hotrock2.png b/mindus/assets/blocks/environment/hotrock2.png Binary files differnew file mode 100644 index 0000000..04435af --- /dev/null +++ b/mindus/assets/blocks/environment/hotrock2.png diff --git a/mindus/assets/blocks/environment/hotrock3.png b/mindus/assets/blocks/environment/hotrock3.png Binary files differnew file mode 100644 index 0000000..87beeef --- /dev/null +++ b/mindus/assets/blocks/environment/hotrock3.png diff --git a/mindus/assets/blocks/environment/ice-snow1.png b/mindus/assets/blocks/environment/ice-snow1.png Binary files differnew file mode 100644 index 0000000..05fa939 --- /dev/null +++ b/mindus/assets/blocks/environment/ice-snow1.png diff --git a/mindus/assets/blocks/environment/ice-snow2.png b/mindus/assets/blocks/environment/ice-snow2.png Binary files differnew file mode 100644 index 0000000..71c7b59 --- /dev/null +++ b/mindus/assets/blocks/environment/ice-snow2.png diff --git a/mindus/assets/blocks/environment/ice-snow3.png b/mindus/assets/blocks/environment/ice-snow3.png Binary files differnew file mode 100644 index 0000000..946bad2 --- /dev/null +++ b/mindus/assets/blocks/environment/ice-snow3.png diff --git a/mindus/assets/blocks/environment/ice-wall-large.png b/mindus/assets/blocks/environment/ice-wall-large.png Binary files differnew file mode 100644 index 0000000..4ef7e53 --- /dev/null +++ b/mindus/assets/blocks/environment/ice-wall-large.png diff --git a/mindus/assets/blocks/environment/ice-wall1.png b/mindus/assets/blocks/environment/ice-wall1.png Binary files differnew file mode 100644 index 0000000..56f647f --- /dev/null +++ b/mindus/assets/blocks/environment/ice-wall1.png diff --git a/mindus/assets/blocks/environment/ice-wall2.png b/mindus/assets/blocks/environment/ice-wall2.png Binary files differnew file mode 100644 index 0000000..99674f6 --- /dev/null +++ b/mindus/assets/blocks/environment/ice-wall2.png diff --git a/mindus/assets/blocks/environment/ice1.png b/mindus/assets/blocks/environment/ice1.png Binary files differnew file mode 100644 index 0000000..355ed2d --- /dev/null +++ b/mindus/assets/blocks/environment/ice1.png diff --git a/mindus/assets/blocks/environment/ice2.png b/mindus/assets/blocks/environment/ice2.png Binary files differnew file mode 100644 index 0000000..eb53e77 --- /dev/null +++ b/mindus/assets/blocks/environment/ice2.png diff --git a/mindus/assets/blocks/environment/ice3.png b/mindus/assets/blocks/environment/ice3.png Binary files differnew file mode 100644 index 0000000..6b1b8b0 --- /dev/null +++ b/mindus/assets/blocks/environment/ice3.png diff --git a/mindus/assets/blocks/environment/magmarock1.png b/mindus/assets/blocks/environment/magmarock1.png Binary files differnew file mode 100644 index 0000000..7218a6f --- /dev/null +++ b/mindus/assets/blocks/environment/magmarock1.png diff --git a/mindus/assets/blocks/environment/magmarock2.png b/mindus/assets/blocks/environment/magmarock2.png Binary files differnew file mode 100644 index 0000000..6a3330c --- /dev/null +++ b/mindus/assets/blocks/environment/magmarock2.png diff --git a/mindus/assets/blocks/environment/magmarock3.png b/mindus/assets/blocks/environment/magmarock3.png Binary files differnew file mode 100644 index 0000000..2921b1a --- /dev/null +++ b/mindus/assets/blocks/environment/magmarock3.png diff --git a/mindus/assets/blocks/environment/metal-floor-2.png b/mindus/assets/blocks/environment/metal-floor-2.png Binary files differnew file mode 100644 index 0000000..26ddfa3 --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor-2.png diff --git a/mindus/assets/blocks/environment/metal-floor-3.png b/mindus/assets/blocks/environment/metal-floor-3.png Binary files differnew file mode 100644 index 0000000..e5f1b58 --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor-3.png diff --git a/assets/blocks/environment/metal-floor-4.png b/mindus/assets/blocks/environment/metal-floor-4.png Binary files differindex 6c17203..6c17203 100644 --- a/assets/blocks/environment/metal-floor-4.png +++ b/mindus/assets/blocks/environment/metal-floor-4.png diff --git a/mindus/assets/blocks/environment/metal-floor-5.png b/mindus/assets/blocks/environment/metal-floor-5.png Binary files differnew file mode 100644 index 0000000..7b7cf40 --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor-5.png diff --git a/mindus/assets/blocks/environment/metal-floor-damaged1.png b/mindus/assets/blocks/environment/metal-floor-damaged1.png Binary files differnew file mode 100644 index 0000000..500d2a1 --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor-damaged1.png diff --git a/mindus/assets/blocks/environment/metal-floor-damaged2.png b/mindus/assets/blocks/environment/metal-floor-damaged2.png Binary files differnew file mode 100644 index 0000000..0346965 --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor-damaged2.png diff --git a/mindus/assets/blocks/environment/metal-floor-damaged3.png b/mindus/assets/blocks/environment/metal-floor-damaged3.png Binary files differnew file mode 100644 index 0000000..59dad1b --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor-damaged3.png diff --git a/mindus/assets/blocks/environment/metal-floor.png b/mindus/assets/blocks/environment/metal-floor.png Binary files differnew file mode 100644 index 0000000..ca564d0 --- /dev/null +++ b/mindus/assets/blocks/environment/metal-floor.png diff --git a/mindus/assets/blocks/environment/molten-slag1.png b/mindus/assets/blocks/environment/molten-slag1.png Binary files differnew file mode 100644 index 0000000..07db3b0 --- /dev/null +++ b/mindus/assets/blocks/environment/molten-slag1.png diff --git a/mindus/assets/blocks/environment/moss1.png b/mindus/assets/blocks/environment/moss1.png Binary files differnew file mode 100644 index 0000000..69d8abd --- /dev/null +++ b/mindus/assets/blocks/environment/moss1.png diff --git a/mindus/assets/blocks/environment/moss2.png b/mindus/assets/blocks/environment/moss2.png Binary files differnew file mode 100644 index 0000000..181c54a --- /dev/null +++ b/mindus/assets/blocks/environment/moss2.png diff --git a/mindus/assets/blocks/environment/moss3.png b/mindus/assets/blocks/environment/moss3.png Binary files differnew file mode 100644 index 0000000..f9b0b7b --- /dev/null +++ b/mindus/assets/blocks/environment/moss3.png diff --git a/mindus/assets/blocks/environment/mud1.png b/mindus/assets/blocks/environment/mud1.png Binary files differnew file mode 100644 index 0000000..b3bde63 --- /dev/null +++ b/mindus/assets/blocks/environment/mud1.png diff --git a/mindus/assets/blocks/environment/mud2.png b/mindus/assets/blocks/environment/mud2.png Binary files differnew file mode 100644 index 0000000..12a52d6 --- /dev/null +++ b/mindus/assets/blocks/environment/mud2.png diff --git a/mindus/assets/blocks/environment/mud3.png b/mindus/assets/blocks/environment/mud3.png Binary files differnew file mode 100644 index 0000000..325eaf4 --- /dev/null +++ b/mindus/assets/blocks/environment/mud3.png diff --git a/mindus/assets/blocks/environment/ore-beryllium1.png b/mindus/assets/blocks/environment/ore-beryllium1.png Binary files differnew file mode 100644 index 0000000..4d682b8 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-beryllium1.png diff --git a/mindus/assets/blocks/environment/ore-beryllium2.png b/mindus/assets/blocks/environment/ore-beryllium2.png Binary files differnew file mode 100644 index 0000000..baa2364 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-beryllium2.png diff --git a/mindus/assets/blocks/environment/ore-beryllium3.png b/mindus/assets/blocks/environment/ore-beryllium3.png Binary files differnew file mode 100644 index 0000000..05a9465 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-beryllium3.png diff --git a/mindus/assets/blocks/environment/ore-coal1.png b/mindus/assets/blocks/environment/ore-coal1.png Binary files differnew file mode 100644 index 0000000..6b5a5ee --- /dev/null +++ b/mindus/assets/blocks/environment/ore-coal1.png diff --git a/mindus/assets/blocks/environment/ore-coal2.png b/mindus/assets/blocks/environment/ore-coal2.png Binary files differnew file mode 100644 index 0000000..4e6f721 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-coal2.png diff --git a/mindus/assets/blocks/environment/ore-coal3.png b/mindus/assets/blocks/environment/ore-coal3.png Binary files differnew file mode 100644 index 0000000..4e8fb4e --- /dev/null +++ b/mindus/assets/blocks/environment/ore-coal3.png diff --git a/mindus/assets/blocks/environment/ore-copper1.png b/mindus/assets/blocks/environment/ore-copper1.png Binary files differnew file mode 100644 index 0000000..578b5b4 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-copper1.png diff --git a/mindus/assets/blocks/environment/ore-copper2.png b/mindus/assets/blocks/environment/ore-copper2.png Binary files differnew file mode 100644 index 0000000..3afab6a --- /dev/null +++ b/mindus/assets/blocks/environment/ore-copper2.png diff --git a/mindus/assets/blocks/environment/ore-copper3.png b/mindus/assets/blocks/environment/ore-copper3.png Binary files differnew file mode 100644 index 0000000..561d14c --- /dev/null +++ b/mindus/assets/blocks/environment/ore-copper3.png diff --git a/mindus/assets/blocks/environment/ore-crystal-thorium1.png b/mindus/assets/blocks/environment/ore-crystal-thorium1.png Binary files differnew file mode 100644 index 0000000..9ba038e --- /dev/null +++ b/mindus/assets/blocks/environment/ore-crystal-thorium1.png diff --git a/mindus/assets/blocks/environment/ore-crystal-thorium2.png b/mindus/assets/blocks/environment/ore-crystal-thorium2.png Binary files differnew file mode 100644 index 0000000..219adc2 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-crystal-thorium2.png diff --git a/mindus/assets/blocks/environment/ore-crystal-thorium3.png b/mindus/assets/blocks/environment/ore-crystal-thorium3.png Binary files differnew file mode 100644 index 0000000..daa6ace --- /dev/null +++ b/mindus/assets/blocks/environment/ore-crystal-thorium3.png diff --git a/mindus/assets/blocks/environment/ore-lead1.png b/mindus/assets/blocks/environment/ore-lead1.png Binary files differnew file mode 100644 index 0000000..94eed99 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-lead1.png diff --git a/mindus/assets/blocks/environment/ore-lead2.png b/mindus/assets/blocks/environment/ore-lead2.png Binary files differnew file mode 100644 index 0000000..c86de92 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-lead2.png diff --git a/mindus/assets/blocks/environment/ore-lead3.png b/mindus/assets/blocks/environment/ore-lead3.png Binary files differnew file mode 100644 index 0000000..c99376f --- /dev/null +++ b/mindus/assets/blocks/environment/ore-lead3.png diff --git a/mindus/assets/blocks/environment/ore-scrap1.png b/mindus/assets/blocks/environment/ore-scrap1.png Binary files differnew file mode 100644 index 0000000..8973fe2 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-scrap1.png diff --git a/mindus/assets/blocks/environment/ore-scrap2.png b/mindus/assets/blocks/environment/ore-scrap2.png Binary files differnew file mode 100644 index 0000000..9a196d1 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-scrap2.png diff --git a/mindus/assets/blocks/environment/ore-scrap3.png b/mindus/assets/blocks/environment/ore-scrap3.png Binary files differnew file mode 100644 index 0000000..e5e88a2 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-scrap3.png diff --git a/mindus/assets/blocks/environment/ore-thorium1.png b/mindus/assets/blocks/environment/ore-thorium1.png Binary files differnew file mode 100644 index 0000000..f07faf6 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-thorium1.png diff --git a/mindus/assets/blocks/environment/ore-thorium2.png b/mindus/assets/blocks/environment/ore-thorium2.png Binary files differnew file mode 100644 index 0000000..41787f4 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-thorium2.png diff --git a/mindus/assets/blocks/environment/ore-thorium3.png b/mindus/assets/blocks/environment/ore-thorium3.png Binary files differnew file mode 100644 index 0000000..d2604e0 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-thorium3.png diff --git a/mindus/assets/blocks/environment/ore-titanium1.png b/mindus/assets/blocks/environment/ore-titanium1.png Binary files differnew file mode 100644 index 0000000..95e95ed --- /dev/null +++ b/mindus/assets/blocks/environment/ore-titanium1.png diff --git a/mindus/assets/blocks/environment/ore-titanium2.png b/mindus/assets/blocks/environment/ore-titanium2.png Binary files differnew file mode 100644 index 0000000..d4e5327 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-titanium2.png diff --git a/mindus/assets/blocks/environment/ore-titanium3.png b/mindus/assets/blocks/environment/ore-titanium3.png Binary files differnew file mode 100644 index 0000000..6bfae17 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-titanium3.png diff --git a/mindus/assets/blocks/environment/ore-tungsten1.png b/mindus/assets/blocks/environment/ore-tungsten1.png Binary files differnew file mode 100644 index 0000000..094ef3e --- /dev/null +++ b/mindus/assets/blocks/environment/ore-tungsten1.png diff --git a/mindus/assets/blocks/environment/ore-tungsten2.png b/mindus/assets/blocks/environment/ore-tungsten2.png Binary files differnew file mode 100644 index 0000000..4b6b9e2 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-tungsten2.png diff --git a/mindus/assets/blocks/environment/ore-tungsten3.png b/mindus/assets/blocks/environment/ore-tungsten3.png Binary files differnew file mode 100644 index 0000000..c379d30 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-tungsten3.png diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium1.png b/mindus/assets/blocks/environment/ore-wall-beryllium1.png Binary files differnew file mode 100644 index 0000000..e9a3cc3 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-beryllium1.png diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium2.png b/mindus/assets/blocks/environment/ore-wall-beryllium2.png Binary files differnew file mode 100644 index 0000000..0904e0d --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-beryllium2.png diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium3.png b/mindus/assets/blocks/environment/ore-wall-beryllium3.png Binary files differnew file mode 100644 index 0000000..5c9b8c7 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-beryllium3.png diff --git a/mindus/assets/blocks/environment/ore-wall-graphite1.png b/mindus/assets/blocks/environment/ore-wall-graphite1.png Binary files differnew file mode 100644 index 0000000..12b7df9 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-graphite1.png diff --git a/mindus/assets/blocks/environment/ore-wall-graphite2.png b/mindus/assets/blocks/environment/ore-wall-graphite2.png Binary files differnew file mode 100644 index 0000000..5132f76 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-graphite2.png diff --git a/mindus/assets/blocks/environment/ore-wall-graphite3.png b/mindus/assets/blocks/environment/ore-wall-graphite3.png Binary files differnew file mode 100644 index 0000000..5369276 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-graphite3.png diff --git a/mindus/assets/blocks/environment/ore-wall-thorium1.png b/mindus/assets/blocks/environment/ore-wall-thorium1.png Binary files differnew file mode 100644 index 0000000..05342af --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-thorium1.png diff --git a/mindus/assets/blocks/environment/ore-wall-thorium2.png b/mindus/assets/blocks/environment/ore-wall-thorium2.png Binary files differnew file mode 100644 index 0000000..ed21d0d --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-thorium2.png diff --git a/mindus/assets/blocks/environment/ore-wall-thorium3.png b/mindus/assets/blocks/environment/ore-wall-thorium3.png Binary files differnew file mode 100644 index 0000000..5a58f15 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-thorium3.png diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten1.png b/mindus/assets/blocks/environment/ore-wall-tungsten1.png Binary files differnew file mode 100644 index 0000000..81e61e1 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-tungsten1.png diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten2.png b/mindus/assets/blocks/environment/ore-wall-tungsten2.png Binary files differnew file mode 100644 index 0000000..6ed7eba --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-tungsten2.png diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten3.png b/mindus/assets/blocks/environment/ore-wall-tungsten3.png Binary files differnew file mode 100644 index 0000000..d1e7993 --- /dev/null +++ b/mindus/assets/blocks/environment/ore-wall-tungsten3.png diff --git a/mindus/assets/blocks/environment/pebbles1.png b/mindus/assets/blocks/environment/pebbles1.png Binary files differnew file mode 100644 index 0000000..8c8cf52 --- /dev/null +++ b/mindus/assets/blocks/environment/pebbles1.png diff --git a/mindus/assets/blocks/environment/pebbles2.png b/mindus/assets/blocks/environment/pebbles2.png Binary files differnew file mode 100644 index 0000000..4360626 --- /dev/null +++ b/mindus/assets/blocks/environment/pebbles2.png diff --git a/mindus/assets/blocks/environment/pebbles3.png b/mindus/assets/blocks/environment/pebbles3.png Binary files differnew file mode 100644 index 0000000..a542a96 --- /dev/null +++ b/mindus/assets/blocks/environment/pebbles3.png diff --git a/mindus/assets/blocks/environment/pine.png b/mindus/assets/blocks/environment/pine.png Binary files differnew file mode 100644 index 0000000..9f746c3 --- /dev/null +++ b/mindus/assets/blocks/environment/pine.png diff --git a/mindus/assets/blocks/environment/pooled-cryofluid.png b/mindus/assets/blocks/environment/pooled-cryofluid.png Binary files differnew file mode 100644 index 0000000..3dac992 --- /dev/null +++ b/mindus/assets/blocks/environment/pooled-cryofluid.png diff --git a/mindus/assets/blocks/environment/pur-bush.png b/mindus/assets/blocks/environment/pur-bush.png Binary files differnew file mode 100644 index 0000000..32c7201 --- /dev/null +++ b/mindus/assets/blocks/environment/pur-bush.png diff --git a/mindus/assets/blocks/environment/red-diamond-wall1.png b/mindus/assets/blocks/environment/red-diamond-wall1.png Binary files differnew file mode 100644 index 0000000..8eb8d9b --- /dev/null +++ b/mindus/assets/blocks/environment/red-diamond-wall1.png diff --git a/mindus/assets/blocks/environment/red-diamond-wall2.png b/mindus/assets/blocks/environment/red-diamond-wall2.png Binary files differnew file mode 100644 index 0000000..1901166 --- /dev/null +++ b/mindus/assets/blocks/environment/red-diamond-wall2.png diff --git a/mindus/assets/blocks/environment/red-diamond-wall3.png b/mindus/assets/blocks/environment/red-diamond-wall3.png Binary files differnew file mode 100644 index 0000000..a2c5220 --- /dev/null +++ b/mindus/assets/blocks/environment/red-diamond-wall3.png diff --git a/mindus/assets/blocks/environment/red-ice-boulder1.png b/mindus/assets/blocks/environment/red-ice-boulder1.png Binary files differnew file mode 100644 index 0000000..2c49e57 --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice-boulder1.png diff --git a/mindus/assets/blocks/environment/red-ice-boulder2.png b/mindus/assets/blocks/environment/red-ice-boulder2.png Binary files differnew file mode 100644 index 0000000..b6935e1 --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice-boulder2.png diff --git a/mindus/assets/blocks/environment/red-ice-boulder3.png b/mindus/assets/blocks/environment/red-ice-boulder3.png Binary files differnew file mode 100644 index 0000000..1e1b542 --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice-boulder3.png diff --git a/mindus/assets/blocks/environment/red-ice-wall-large.png b/mindus/assets/blocks/environment/red-ice-wall-large.png Binary files differnew file mode 100644 index 0000000..0d09b3b --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice-wall-large.png diff --git a/mindus/assets/blocks/environment/red-ice-wall1.png b/mindus/assets/blocks/environment/red-ice-wall1.png Binary files differnew file mode 100644 index 0000000..2ed857c --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice-wall1.png diff --git a/mindus/assets/blocks/environment/red-ice-wall2.png b/mindus/assets/blocks/environment/red-ice-wall2.png Binary files differnew file mode 100644 index 0000000..931929e --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice-wall2.png diff --git a/mindus/assets/blocks/environment/red-ice1.png b/mindus/assets/blocks/environment/red-ice1.png Binary files differnew file mode 100644 index 0000000..c03c486 --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice1.png diff --git a/mindus/assets/blocks/environment/red-ice2.png b/mindus/assets/blocks/environment/red-ice2.png Binary files differnew file mode 100644 index 0000000..e3e309f --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice2.png diff --git a/mindus/assets/blocks/environment/red-ice3.png b/mindus/assets/blocks/environment/red-ice3.png Binary files differnew file mode 100644 index 0000000..f33ec98 --- /dev/null +++ b/mindus/assets/blocks/environment/red-ice3.png diff --git a/mindus/assets/blocks/environment/red-stone-boulder1.png b/mindus/assets/blocks/environment/red-stone-boulder1.png Binary files differnew file mode 100644 index 0000000..c7df230 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-boulder1.png diff --git a/mindus/assets/blocks/environment/red-stone-boulder2.png b/mindus/assets/blocks/environment/red-stone-boulder2.png Binary files differnew file mode 100644 index 0000000..2fe2ad2 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-boulder2.png diff --git a/mindus/assets/blocks/environment/red-stone-boulder3.png b/mindus/assets/blocks/environment/red-stone-boulder3.png Binary files differnew file mode 100644 index 0000000..62e2616 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-boulder3.png diff --git a/mindus/assets/blocks/environment/red-stone-boulder4.png b/mindus/assets/blocks/environment/red-stone-boulder4.png Binary files differnew file mode 100644 index 0000000..2d3d0c3 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-boulder4.png diff --git a/mindus/assets/blocks/environment/red-stone-vent1.png b/mindus/assets/blocks/environment/red-stone-vent1.png Binary files differnew file mode 100644 index 0000000..09d370f --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-vent1.png diff --git a/mindus/assets/blocks/environment/red-stone-vent2.png b/mindus/assets/blocks/environment/red-stone-vent2.png Binary files differnew file mode 100644 index 0000000..a454baa --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-vent2.png diff --git a/mindus/assets/blocks/environment/red-stone-wall-large.png b/mindus/assets/blocks/environment/red-stone-wall-large.png Binary files differnew file mode 100644 index 0000000..a0c4a5c --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-wall-large.png diff --git a/mindus/assets/blocks/environment/red-stone-wall1.png b/mindus/assets/blocks/environment/red-stone-wall1.png Binary files differnew file mode 100644 index 0000000..a14f6f7 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-wall1.png diff --git a/mindus/assets/blocks/environment/red-stone-wall2.png b/mindus/assets/blocks/environment/red-stone-wall2.png Binary files differnew file mode 100644 index 0000000..18b79ea --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone-wall2.png diff --git a/assets/blocks/environment/red-stone-wall.png b/mindus/assets/blocks/environment/red-stone-wall3.png Binary files differindex 9c9182c..9c9182c 100644 --- a/assets/blocks/environment/red-stone-wall.png +++ b/mindus/assets/blocks/environment/red-stone-wall3.png diff --git a/mindus/assets/blocks/environment/red-stone1.png b/mindus/assets/blocks/environment/red-stone1.png Binary files differnew file mode 100644 index 0000000..bcad408 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone1.png diff --git a/mindus/assets/blocks/environment/red-stone2.png b/mindus/assets/blocks/environment/red-stone2.png Binary files differnew file mode 100644 index 0000000..b857043 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone2.png diff --git a/mindus/assets/blocks/environment/red-stone3.png b/mindus/assets/blocks/environment/red-stone3.png Binary files differnew file mode 100644 index 0000000..5fae657 --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone3.png diff --git a/mindus/assets/blocks/environment/red-stone4.png b/mindus/assets/blocks/environment/red-stone4.png Binary files differnew file mode 100644 index 0000000..b1931ec --- /dev/null +++ b/mindus/assets/blocks/environment/red-stone4.png diff --git a/mindus/assets/blocks/environment/redmat1.png b/mindus/assets/blocks/environment/redmat1.png Binary files differnew file mode 100644 index 0000000..daa3995 --- /dev/null +++ b/mindus/assets/blocks/environment/redmat1.png diff --git a/mindus/assets/blocks/environment/redmat2.png b/mindus/assets/blocks/environment/redmat2.png Binary files differnew file mode 100644 index 0000000..b5fca70 --- /dev/null +++ b/mindus/assets/blocks/environment/redmat2.png diff --git a/mindus/assets/blocks/environment/redmat3.png b/mindus/assets/blocks/environment/redmat3.png Binary files differnew file mode 100644 index 0000000..88e06a4 --- /dev/null +++ b/mindus/assets/blocks/environment/redmat3.png diff --git a/mindus/assets/blocks/environment/redweed1.png b/mindus/assets/blocks/environment/redweed1.png Binary files differnew file mode 100644 index 0000000..a981a01 --- /dev/null +++ b/mindus/assets/blocks/environment/redweed1.png diff --git a/mindus/assets/blocks/environment/redweed2.png b/mindus/assets/blocks/environment/redweed2.png Binary files differnew file mode 100644 index 0000000..d1d0b4b --- /dev/null +++ b/mindus/assets/blocks/environment/redweed2.png diff --git a/mindus/assets/blocks/environment/redweed3.png b/mindus/assets/blocks/environment/redweed3.png Binary files differnew file mode 100644 index 0000000..b9fd3a8 --- /dev/null +++ b/mindus/assets/blocks/environment/redweed3.png diff --git a/mindus/assets/blocks/environment/regolith-wall-large.png b/mindus/assets/blocks/environment/regolith-wall-large.png Binary files differnew file mode 100644 index 0000000..1721a2a --- /dev/null +++ b/mindus/assets/blocks/environment/regolith-wall-large.png diff --git a/mindus/assets/blocks/environment/regolith-wall1.png b/mindus/assets/blocks/environment/regolith-wall1.png Binary files differnew file mode 100644 index 0000000..7b46145 --- /dev/null +++ b/mindus/assets/blocks/environment/regolith-wall1.png diff --git a/mindus/assets/blocks/environment/regolith-wall2.png b/mindus/assets/blocks/environment/regolith-wall2.png Binary files differnew file mode 100644 index 0000000..41ae883 --- /dev/null +++ b/mindus/assets/blocks/environment/regolith-wall2.png diff --git a/mindus/assets/blocks/environment/regolith1.png b/mindus/assets/blocks/environment/regolith1.png Binary files differnew file mode 100644 index 0000000..dad9752 --- /dev/null +++ b/mindus/assets/blocks/environment/regolith1.png diff --git a/mindus/assets/blocks/environment/regolith2.png b/mindus/assets/blocks/environment/regolith2.png Binary files differnew file mode 100644 index 0000000..a700e03 --- /dev/null +++ b/mindus/assets/blocks/environment/regolith2.png diff --git a/mindus/assets/blocks/environment/regolith3.png b/mindus/assets/blocks/environment/regolith3.png Binary files differnew file mode 100644 index 0000000..91ad120 --- /dev/null +++ b/mindus/assets/blocks/environment/regolith3.png diff --git a/mindus/assets/blocks/environment/rhyolite-boulder1.png b/mindus/assets/blocks/environment/rhyolite-boulder1.png Binary files differnew file mode 100644 index 0000000..47cb5ef --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-boulder1.png diff --git a/mindus/assets/blocks/environment/rhyolite-boulder2.png b/mindus/assets/blocks/environment/rhyolite-boulder2.png Binary files differnew file mode 100644 index 0000000..de1c76b --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-boulder2.png diff --git a/mindus/assets/blocks/environment/rhyolite-boulder3.png b/mindus/assets/blocks/environment/rhyolite-boulder3.png Binary files differnew file mode 100644 index 0000000..331a2b7 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-boulder3.png diff --git a/mindus/assets/blocks/environment/rhyolite-crater1.png b/mindus/assets/blocks/environment/rhyolite-crater1.png Binary files differnew file mode 100644 index 0000000..0174a41 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-crater1.png diff --git a/mindus/assets/blocks/environment/rhyolite-crater2.png b/mindus/assets/blocks/environment/rhyolite-crater2.png Binary files differnew file mode 100644 index 0000000..6cddef9 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-crater2.png diff --git a/mindus/assets/blocks/environment/rhyolite-crater3.png b/mindus/assets/blocks/environment/rhyolite-crater3.png Binary files differnew file mode 100644 index 0000000..0bd8f0e --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-crater3.png diff --git a/mindus/assets/blocks/environment/rhyolite-vent.png b/mindus/assets/blocks/environment/rhyolite-vent.png Binary files differnew file mode 100644 index 0000000..c1a5c99 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-vent.png diff --git a/mindus/assets/blocks/environment/rhyolite-vent1.png b/mindus/assets/blocks/environment/rhyolite-vent1.png Binary files differnew file mode 100644 index 0000000..6ec1110 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-vent1.png diff --git a/mindus/assets/blocks/environment/rhyolite-vent2.png b/mindus/assets/blocks/environment/rhyolite-vent2.png Binary files differnew file mode 100644 index 0000000..0ffaf96 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-vent2.png diff --git a/mindus/assets/blocks/environment/rhyolite-wall-large.png b/mindus/assets/blocks/environment/rhyolite-wall-large.png Binary files differnew file mode 100644 index 0000000..c88a15e --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-wall-large.png diff --git a/mindus/assets/blocks/environment/rhyolite-wall1.png b/mindus/assets/blocks/environment/rhyolite-wall1.png Binary files differnew file mode 100644 index 0000000..6ea6923 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-wall1.png diff --git a/mindus/assets/blocks/environment/rhyolite-wall2.png b/mindus/assets/blocks/environment/rhyolite-wall2.png Binary files differnew file mode 100644 index 0000000..2e83246 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite-wall2.png diff --git a/mindus/assets/blocks/environment/rhyolite1.png b/mindus/assets/blocks/environment/rhyolite1.png Binary files differnew file mode 100644 index 0000000..c55fd56 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite1.png diff --git a/mindus/assets/blocks/environment/rhyolite2.png b/mindus/assets/blocks/environment/rhyolite2.png Binary files differnew file mode 100644 index 0000000..37b482f --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite2.png diff --git a/mindus/assets/blocks/environment/rhyolite3.png b/mindus/assets/blocks/environment/rhyolite3.png Binary files differnew file mode 100644 index 0000000..8fdb670 --- /dev/null +++ b/mindus/assets/blocks/environment/rhyolite3.png diff --git a/mindus/assets/blocks/environment/rough-rhyolite1.png b/mindus/assets/blocks/environment/rough-rhyolite1.png Binary files differnew file mode 100644 index 0000000..1917ede --- /dev/null +++ b/mindus/assets/blocks/environment/rough-rhyolite1.png diff --git a/mindus/assets/blocks/environment/rough-rhyolite2.png b/mindus/assets/blocks/environment/rough-rhyolite2.png Binary files differnew file mode 100644 index 0000000..c3a4d2d --- /dev/null +++ b/mindus/assets/blocks/environment/rough-rhyolite2.png diff --git a/mindus/assets/blocks/environment/rough-rhyolite3.png b/mindus/assets/blocks/environment/rough-rhyolite3.png Binary files differnew file mode 100644 index 0000000..9cb78eb --- /dev/null +++ b/mindus/assets/blocks/environment/rough-rhyolite3.png diff --git a/mindus/assets/blocks/environment/rough-rhyolite4.png b/mindus/assets/blocks/environment/rough-rhyolite4.png Binary files differnew file mode 100644 index 0000000..71c6f8d --- /dev/null +++ b/mindus/assets/blocks/environment/rough-rhyolite4.png diff --git a/assets/blocks/environment/salt-wall-large.png b/mindus/assets/blocks/environment/salt-wall-large.png Binary files differindex 48aa491..48aa491 100644 --- a/assets/blocks/environment/salt-wall-large.png +++ b/mindus/assets/blocks/environment/salt-wall-large.png diff --git a/mindus/assets/blocks/environment/salt-wall1.png b/mindus/assets/blocks/environment/salt-wall1.png Binary files differnew file mode 100644 index 0000000..63bb165 --- /dev/null +++ b/mindus/assets/blocks/environment/salt-wall1.png diff --git a/mindus/assets/blocks/environment/salt-wall2.png b/mindus/assets/blocks/environment/salt-wall2.png Binary files differnew file mode 100644 index 0000000..ae324d3 --- /dev/null +++ b/mindus/assets/blocks/environment/salt-wall2.png diff --git a/mindus/assets/blocks/environment/salt1.png b/mindus/assets/blocks/environment/salt1.png Binary files differnew file mode 100644 index 0000000..285babf --- /dev/null +++ b/mindus/assets/blocks/environment/salt1.png diff --git a/mindus/assets/blocks/environment/sand-boulder1.png b/mindus/assets/blocks/environment/sand-boulder1.png Binary files differnew file mode 100644 index 0000000..573469b --- /dev/null +++ b/mindus/assets/blocks/environment/sand-boulder1.png diff --git a/mindus/assets/blocks/environment/sand-boulder2.png b/mindus/assets/blocks/environment/sand-boulder2.png Binary files differnew file mode 100644 index 0000000..667529f --- /dev/null +++ b/mindus/assets/blocks/environment/sand-boulder2.png diff --git a/mindus/assets/blocks/environment/sand-floor1.png b/mindus/assets/blocks/environment/sand-floor1.png Binary files differnew file mode 100644 index 0000000..40d4916 --- /dev/null +++ b/mindus/assets/blocks/environment/sand-floor1.png diff --git a/mindus/assets/blocks/environment/sand-floor2.png b/mindus/assets/blocks/environment/sand-floor2.png Binary files differnew file mode 100644 index 0000000..1a22960 --- /dev/null +++ b/mindus/assets/blocks/environment/sand-floor2.png diff --git a/mindus/assets/blocks/environment/sand-floor3.png b/mindus/assets/blocks/environment/sand-floor3.png Binary files differnew file mode 100644 index 0000000..71e6f7b --- /dev/null +++ b/mindus/assets/blocks/environment/sand-floor3.png diff --git a/mindus/assets/blocks/environment/sand-wall-large.png b/mindus/assets/blocks/environment/sand-wall-large.png Binary files differnew file mode 100644 index 0000000..dd8b463 --- /dev/null +++ b/mindus/assets/blocks/environment/sand-wall-large.png diff --git a/mindus/assets/blocks/environment/sand-wall1.png b/mindus/assets/blocks/environment/sand-wall1.png Binary files differnew file mode 100644 index 0000000..ee4e4bd --- /dev/null +++ b/mindus/assets/blocks/environment/sand-wall1.png diff --git a/mindus/assets/blocks/environment/sand-wall2.png b/mindus/assets/blocks/environment/sand-wall2.png Binary files differnew file mode 100644 index 0000000..62c70f4 --- /dev/null +++ b/mindus/assets/blocks/environment/sand-wall2.png diff --git a/mindus/assets/blocks/environment/sand-water.png b/mindus/assets/blocks/environment/sand-water.png Binary files differnew file mode 100644 index 0000000..a4683d3 --- /dev/null +++ b/mindus/assets/blocks/environment/sand-water.png diff --git a/mindus/assets/blocks/environment/shale-boulder1.png b/mindus/assets/blocks/environment/shale-boulder1.png Binary files differnew file mode 100644 index 0000000..199c6c0 --- /dev/null +++ b/mindus/assets/blocks/environment/shale-boulder1.png diff --git a/mindus/assets/blocks/environment/shale-boulder2.png b/mindus/assets/blocks/environment/shale-boulder2.png Binary files differnew file mode 100644 index 0000000..3cee755 --- /dev/null +++ b/mindus/assets/blocks/environment/shale-boulder2.png diff --git a/mindus/assets/blocks/environment/shale-wall-large.png b/mindus/assets/blocks/environment/shale-wall-large.png Binary files differnew file mode 100644 index 0000000..9ce1dcd --- /dev/null +++ b/mindus/assets/blocks/environment/shale-wall-large.png diff --git a/mindus/assets/blocks/environment/shale-wall1.png b/mindus/assets/blocks/environment/shale-wall1.png Binary files differnew file mode 100644 index 0000000..b983bc6 --- /dev/null +++ b/mindus/assets/blocks/environment/shale-wall1.png diff --git a/mindus/assets/blocks/environment/shale-wall2.png b/mindus/assets/blocks/environment/shale-wall2.png Binary files differnew file mode 100644 index 0000000..f89fed6 --- /dev/null +++ b/mindus/assets/blocks/environment/shale-wall2.png diff --git a/mindus/assets/blocks/environment/shale1.png b/mindus/assets/blocks/environment/shale1.png Binary files differnew file mode 100644 index 0000000..328e286 --- /dev/null +++ b/mindus/assets/blocks/environment/shale1.png diff --git a/mindus/assets/blocks/environment/shale2.png b/mindus/assets/blocks/environment/shale2.png Binary files differnew file mode 100644 index 0000000..e2cda57 --- /dev/null +++ b/mindus/assets/blocks/environment/shale2.png diff --git a/mindus/assets/blocks/environment/shale3.png b/mindus/assets/blocks/environment/shale3.png Binary files differnew file mode 100644 index 0000000..fde0c72 --- /dev/null +++ b/mindus/assets/blocks/environment/shale3.png diff --git a/mindus/assets/blocks/environment/shallow-water.png b/mindus/assets/blocks/environment/shallow-water.png Binary files differnew file mode 100644 index 0000000..21e323f --- /dev/null +++ b/mindus/assets/blocks/environment/shallow-water.png diff --git a/mindus/assets/blocks/environment/shrubs-large.png b/mindus/assets/blocks/environment/shrubs-large.png Binary files differnew file mode 100644 index 0000000..e2fe1ab --- /dev/null +++ b/mindus/assets/blocks/environment/shrubs-large.png diff --git a/mindus/assets/blocks/environment/shrubs1.png b/mindus/assets/blocks/environment/shrubs1.png Binary files differnew file mode 100644 index 0000000..d9596f7 --- /dev/null +++ b/mindus/assets/blocks/environment/shrubs1.png diff --git a/mindus/assets/blocks/environment/shrubs2.png b/mindus/assets/blocks/environment/shrubs2.png Binary files differnew file mode 100644 index 0000000..8758541 --- /dev/null +++ b/mindus/assets/blocks/environment/shrubs2.png diff --git a/mindus/assets/blocks/environment/single/colored-floor.png b/mindus/assets/blocks/environment/single/colored-floor.png new file mode 120000 index 0000000..a20bf5a --- /dev/null +++ b/mindus/assets/blocks/environment/single/colored-floor.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..7afe834 --- /dev/null +++ b/mindus/assets/blocks/environment/single/colored-wall.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..fb2babd --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-1.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..17482a9 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-10.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..7f60b5a --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-11.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..2f3a9a2 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-12.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..5169a49 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-2.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..dfb955e --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-3.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..e72949a --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-4.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..2d26ff4 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-5.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..53cee72 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-6.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..79c26ee --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-7.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..7e3bd9b --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-8.png @@ -0,0 +1 @@ +../../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 new file mode 120000 index 0000000..ecaf110 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-tiles-9.png @@ -0,0 +1 @@ +../../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 Binary files differnew file mode 100644 index 0000000..1a7fadb --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-wall-1.png diff --git a/mindus/assets/blocks/environment/single/metal-wall-2.png b/mindus/assets/blocks/environment/single/metal-wall-2.png Binary files differnew file mode 100644 index 0000000..a913a43 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-wall-2.png diff --git a/mindus/assets/blocks/environment/single/metal-wall-3.png b/mindus/assets/blocks/environment/single/metal-wall-3.png Binary files differnew file mode 100644 index 0000000..703fcd9 --- /dev/null +++ b/mindus/assets/blocks/environment/single/metal-wall-3.png diff --git a/mindus/assets/blocks/environment/snow-boulder1.png b/mindus/assets/blocks/environment/snow-boulder1.png Binary files differnew file mode 100644 index 0000000..8e8e6f9 --- /dev/null +++ b/mindus/assets/blocks/environment/snow-boulder1.png diff --git a/mindus/assets/blocks/environment/snow-boulder2.png b/mindus/assets/blocks/environment/snow-boulder2.png Binary files differnew file mode 100644 index 0000000..5f530c0 --- /dev/null +++ b/mindus/assets/blocks/environment/snow-boulder2.png diff --git a/mindus/assets/blocks/environment/snow-pine.png b/mindus/assets/blocks/environment/snow-pine.png Binary files differnew file mode 100644 index 0000000..036c20c --- /dev/null +++ b/mindus/assets/blocks/environment/snow-pine.png diff --git a/mindus/assets/blocks/environment/snow-wall-large.png b/mindus/assets/blocks/environment/snow-wall-large.png Binary files differnew file mode 100644 index 0000000..b7ff809 --- /dev/null +++ b/mindus/assets/blocks/environment/snow-wall-large.png diff --git a/mindus/assets/blocks/environment/snow-wall1.png b/mindus/assets/blocks/environment/snow-wall1.png Binary files differnew file mode 100644 index 0000000..6655c37 --- /dev/null +++ b/mindus/assets/blocks/environment/snow-wall1.png diff --git a/mindus/assets/blocks/environment/snow-wall2.png b/mindus/assets/blocks/environment/snow-wall2.png Binary files differnew file mode 100644 index 0000000..40ba359 --- /dev/null +++ b/mindus/assets/blocks/environment/snow-wall2.png diff --git a/mindus/assets/blocks/environment/snow1.png b/mindus/assets/blocks/environment/snow1.png Binary files differnew file mode 100644 index 0000000..3387f23 --- /dev/null +++ b/mindus/assets/blocks/environment/snow1.png diff --git a/mindus/assets/blocks/environment/snow2.png b/mindus/assets/blocks/environment/snow2.png Binary files differnew file mode 100644 index 0000000..013c458 --- /dev/null +++ b/mindus/assets/blocks/environment/snow2.png diff --git a/mindus/assets/blocks/environment/snow3.png b/mindus/assets/blocks/environment/snow3.png Binary files differnew file mode 100644 index 0000000..baa63ec --- /dev/null +++ b/mindus/assets/blocks/environment/snow3.png diff --git a/assets/blocks/environment/space.png b/mindus/assets/blocks/environment/space.png Binary files differindex bccf464..bccf464 100644 --- a/assets/blocks/environment/space.png +++ b/mindus/assets/blocks/environment/space.png diff --git a/mindus/assets/blocks/environment/spawn.png b/mindus/assets/blocks/environment/spawn.png Binary files differnew file mode 100644 index 0000000..d8b2859 --- /dev/null +++ b/mindus/assets/blocks/environment/spawn.png diff --git a/mindus/assets/blocks/environment/spore-cluster1.png b/mindus/assets/blocks/environment/spore-cluster1.png Binary files differnew file mode 100644 index 0000000..c28dc43 --- /dev/null +++ b/mindus/assets/blocks/environment/spore-cluster1.png diff --git a/mindus/assets/blocks/environment/spore-cluster2.png b/mindus/assets/blocks/environment/spore-cluster2.png Binary files differnew file mode 100644 index 0000000..725f1b9 --- /dev/null +++ b/mindus/assets/blocks/environment/spore-cluster2.png diff --git a/mindus/assets/blocks/environment/spore-cluster3.png b/mindus/assets/blocks/environment/spore-cluster3.png Binary files differnew file mode 100644 index 0000000..7b5e93e --- /dev/null +++ b/mindus/assets/blocks/environment/spore-cluster3.png diff --git a/mindus/assets/blocks/environment/spore-moss1.png b/mindus/assets/blocks/environment/spore-moss1.png Binary files differnew file mode 100644 index 0000000..dacdf4c --- /dev/null +++ b/mindus/assets/blocks/environment/spore-moss1.png diff --git a/mindus/assets/blocks/environment/spore-moss2.png b/mindus/assets/blocks/environment/spore-moss2.png Binary files differnew file mode 100644 index 0000000..475e877 --- /dev/null +++ b/mindus/assets/blocks/environment/spore-moss2.png diff --git a/mindus/assets/blocks/environment/spore-moss3.png b/mindus/assets/blocks/environment/spore-moss3.png Binary files differnew file mode 100644 index 0000000..69e7656 --- /dev/null +++ b/mindus/assets/blocks/environment/spore-moss3.png diff --git a/mindus/assets/blocks/environment/spore-pine.png b/mindus/assets/blocks/environment/spore-pine.png Binary files differnew file mode 100644 index 0000000..bdb2f9c --- /dev/null +++ b/mindus/assets/blocks/environment/spore-pine.png diff --git a/mindus/assets/blocks/environment/spore-wall-large.png b/mindus/assets/blocks/environment/spore-wall-large.png Binary files differnew file mode 100644 index 0000000..1f1fec5 --- /dev/null +++ b/mindus/assets/blocks/environment/spore-wall-large.png diff --git a/mindus/assets/blocks/environment/spore-wall1.png b/mindus/assets/blocks/environment/spore-wall1.png Binary files differnew file mode 100644 index 0000000..c0ee3ef --- /dev/null +++ b/mindus/assets/blocks/environment/spore-wall1.png diff --git a/mindus/assets/blocks/environment/spore-wall2.png b/mindus/assets/blocks/environment/spore-wall2.png Binary files differnew file mode 100644 index 0000000..0a83a69 --- /dev/null +++ b/mindus/assets/blocks/environment/spore-wall2.png diff --git a/mindus/assets/blocks/environment/stone-vent.png b/mindus/assets/blocks/environment/stone-vent.png Binary files differnew file mode 100644 index 0000000..c8dd9e4 --- /dev/null +++ b/mindus/assets/blocks/environment/stone-vent.png diff --git a/mindus/assets/blocks/environment/stone-wall-large.png b/mindus/assets/blocks/environment/stone-wall-large.png Binary files differnew file mode 100644 index 0000000..76d3ca3 --- /dev/null +++ b/mindus/assets/blocks/environment/stone-wall-large.png diff --git a/mindus/assets/blocks/environment/stone-wall1.png b/mindus/assets/blocks/environment/stone-wall1.png Binary files differnew file mode 100644 index 0000000..358e36e --- /dev/null +++ b/mindus/assets/blocks/environment/stone-wall1.png diff --git a/mindus/assets/blocks/environment/stone-wall2.png b/mindus/assets/blocks/environment/stone-wall2.png Binary files differnew file mode 100644 index 0000000..326d88f --- /dev/null +++ b/mindus/assets/blocks/environment/stone-wall2.png diff --git a/mindus/assets/blocks/environment/stone1.png b/mindus/assets/blocks/environment/stone1.png Binary files differnew file mode 100644 index 0000000..73d29a1 --- /dev/null +++ b/mindus/assets/blocks/environment/stone1.png diff --git a/mindus/assets/blocks/environment/stone2.png b/mindus/assets/blocks/environment/stone2.png Binary files differnew file mode 100644 index 0000000..c0b9dc6 --- /dev/null +++ b/mindus/assets/blocks/environment/stone2.png diff --git a/mindus/assets/blocks/environment/stone3.png b/mindus/assets/blocks/environment/stone3.png Binary files differnew file mode 100644 index 0000000..df94fbd --- /dev/null +++ b/mindus/assets/blocks/environment/stone3.png diff --git a/mindus/assets/blocks/environment/tainted-water.png b/mindus/assets/blocks/environment/tainted-water.png Binary files differnew file mode 100644 index 0000000..7a46957 --- /dev/null +++ b/mindus/assets/blocks/environment/tainted-water.png diff --git a/assets/blocks/environment/tar.png b/mindus/assets/blocks/environment/tar.png Binary files differindex a9bafc3..a9bafc3 100644 --- a/assets/blocks/environment/tar.png +++ b/mindus/assets/blocks/environment/tar.png diff --git a/mindus/assets/blocks/environment/tendrils1.png b/mindus/assets/blocks/environment/tendrils1.png Binary files differnew file mode 100644 index 0000000..c9f8aa8 --- /dev/null +++ b/mindus/assets/blocks/environment/tendrils1.png diff --git a/mindus/assets/blocks/environment/tendrils2.png b/mindus/assets/blocks/environment/tendrils2.png Binary files differnew file mode 100644 index 0000000..dc55153 --- /dev/null +++ b/mindus/assets/blocks/environment/tendrils2.png diff --git a/mindus/assets/blocks/environment/tendrils3.png b/mindus/assets/blocks/environment/tendrils3.png Binary files differnew file mode 100644 index 0000000..5a95f59 --- /dev/null +++ b/mindus/assets/blocks/environment/tendrils3.png diff --git a/mindus/assets/blocks/environment/vibrant-crystal-cluster1.png b/mindus/assets/blocks/environment/vibrant-crystal-cluster1.png Binary files differnew file mode 100644 index 0000000..0b9946b --- /dev/null +++ b/mindus/assets/blocks/environment/vibrant-crystal-cluster1.png diff --git a/mindus/assets/blocks/environment/vibrant-crystal-cluster2.png b/mindus/assets/blocks/environment/vibrant-crystal-cluster2.png Binary files differnew file mode 100644 index 0000000..db826af --- /dev/null +++ b/mindus/assets/blocks/environment/vibrant-crystal-cluster2.png diff --git a/mindus/assets/blocks/environment/vibrant-crystal-cluster3.png b/mindus/assets/blocks/environment/vibrant-crystal-cluster3.png Binary files differnew file mode 100644 index 0000000..380e598 --- /dev/null +++ b/mindus/assets/blocks/environment/vibrant-crystal-cluster3.png diff --git a/mindus/assets/blocks/environment/white-tree-dead.png b/mindus/assets/blocks/environment/white-tree-dead.png Binary files differnew file mode 100644 index 0000000..1f25959 --- /dev/null +++ b/mindus/assets/blocks/environment/white-tree-dead.png diff --git a/assets/blocks/environment/white-tree.png b/mindus/assets/blocks/environment/white-tree.png Binary files differindex 7e6b30e..7daea26 100644 --- a/assets/blocks/environment/white-tree.png +++ b/mindus/assets/blocks/environment/white-tree.png diff --git a/mindus/assets/blocks/environment/yellow-stone-boulder1.png b/mindus/assets/blocks/environment/yellow-stone-boulder1.png Binary files differnew file mode 100644 index 0000000..3045f0a --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-boulder1.png diff --git a/mindus/assets/blocks/environment/yellow-stone-boulder2.png b/mindus/assets/blocks/environment/yellow-stone-boulder2.png Binary files differnew file mode 100644 index 0000000..2b8e408 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-boulder2.png diff --git a/mindus/assets/blocks/environment/yellow-stone-plates1.png b/mindus/assets/blocks/environment/yellow-stone-plates1.png Binary files differnew file mode 100644 index 0000000..e4e4728 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-plates1.png diff --git a/mindus/assets/blocks/environment/yellow-stone-plates2.png b/mindus/assets/blocks/environment/yellow-stone-plates2.png Binary files differnew file mode 100644 index 0000000..29364f9 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-plates2.png diff --git a/assets/blocks/environment/yellow-stone-plates.png b/mindus/assets/blocks/environment/yellow-stone-plates3.png Binary files differindex 9f8a04b..9f8a04b 100644 --- a/assets/blocks/environment/yellow-stone-plates.png +++ b/mindus/assets/blocks/environment/yellow-stone-plates3.png diff --git a/mindus/assets/blocks/environment/yellow-stone-vent1.png b/mindus/assets/blocks/environment/yellow-stone-vent1.png Binary files differnew file mode 100644 index 0000000..cc4f172 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-vent1.png diff --git a/mindus/assets/blocks/environment/yellow-stone-vent2.png b/mindus/assets/blocks/environment/yellow-stone-vent2.png Binary files differnew file mode 100644 index 0000000..1125d80 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-vent2.png diff --git a/mindus/assets/blocks/environment/yellow-stone-wall-large.png b/mindus/assets/blocks/environment/yellow-stone-wall-large.png Binary files differnew file mode 100644 index 0000000..e8eafea --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-wall-large.png diff --git a/mindus/assets/blocks/environment/yellow-stone-wall1.png b/mindus/assets/blocks/environment/yellow-stone-wall1.png Binary files differnew file mode 100644 index 0000000..7f8a7e5 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone-wall1.png diff --git a/assets/blocks/environment/yellow-stone-wall.png b/mindus/assets/blocks/environment/yellow-stone-wall2.png Binary files differindex dc91f82..dc91f82 100644 --- a/assets/blocks/environment/yellow-stone-wall.png +++ b/mindus/assets/blocks/environment/yellow-stone-wall2.png diff --git a/mindus/assets/blocks/environment/yellow-stone1.png b/mindus/assets/blocks/environment/yellow-stone1.png Binary files differnew file mode 100644 index 0000000..9b5b23c --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone1.png diff --git a/mindus/assets/blocks/environment/yellow-stone2.png b/mindus/assets/blocks/environment/yellow-stone2.png Binary files differnew file mode 100644 index 0000000..6837526 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone2.png diff --git a/mindus/assets/blocks/environment/yellow-stone3.png b/mindus/assets/blocks/environment/yellow-stone3.png Binary files differnew file mode 100644 index 0000000..2a73445 --- /dev/null +++ b/mindus/assets/blocks/environment/yellow-stone3.png diff --git a/mindus/assets/blocks/environment/yellowcoral.png b/mindus/assets/blocks/environment/yellowcoral.png Binary files differnew file mode 100644 index 0000000..bbc76b4 --- /dev/null +++ b/mindus/assets/blocks/environment/yellowcoral.png diff --git a/mindus/assets/blocks/liquid/bridge-conduit-arrow.png b/mindus/assets/blocks/liquid/bridge-conduit-arrow.png Binary files differnew file mode 100644 index 0000000..2740e90 --- /dev/null +++ b/mindus/assets/blocks/liquid/bridge-conduit-arrow.png diff --git a/mindus/assets/blocks/liquid/bridge-conduit-bridge.png b/mindus/assets/blocks/liquid/bridge-conduit-bridge.png Binary files differnew file mode 100644 index 0000000..6d31c10 --- /dev/null +++ b/mindus/assets/blocks/liquid/bridge-conduit-bridge.png diff --git a/mindus/assets/blocks/liquid/bridge-conduit-end.png b/mindus/assets/blocks/liquid/bridge-conduit-end.png Binary files differnew file mode 100644 index 0000000..940184b --- /dev/null +++ b/mindus/assets/blocks/liquid/bridge-conduit-end.png diff --git a/mindus/assets/blocks/liquid/bridge-conduit.png b/mindus/assets/blocks/liquid/bridge-conduit.png Binary files differnew file mode 100644 index 0000000..f630f96 --- /dev/null +++ b/mindus/assets/blocks/liquid/bridge-conduit.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/conduit-0-0.png Binary files differnew file mode 100644 index 0000000..15ba9bb --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-0-0.png diff --git a/assets/blocks/liquid/conduits/conduit-0-1.png b/mindus/assets/blocks/liquid/conduits/conduit-0-1.png Binary files differindex 163d8c1..163d8c1 100644 --- a/assets/blocks/liquid/conduits/conduit-0-1.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-0-1.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/conduit-0-2.png Binary files differnew file mode 100644 index 0000000..13dad3b --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-0-2.png diff --git a/assets/blocks/liquid/conduits/conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/conduit-0-3.png Binary files differindex 02eaeb8..02eaeb8 100644 --- a/assets/blocks/liquid/conduits/conduit-0-3.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-0-3.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-0-h.png b/mindus/assets/blocks/liquid/conduits/conduit-1-0-h.png Binary files differnew file mode 100644 index 0000000..61ee4e8 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/conduit-1-0.png Binary files differnew file mode 100644 index 0000000..215a33a --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-0.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-1-h.png b/mindus/assets/blocks/liquid/conduits/conduit-1-1-h.png Binary files differnew file mode 100644 index 0000000..e6dd640 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-1-h.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-1-v.png b/mindus/assets/blocks/liquid/conduits/conduit-1-1-v.png Binary files differnew file mode 100644 index 0000000..f3457cd --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-1-v.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/conduit-1-1.png Binary files differnew file mode 100644 index 0000000..1379f29 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-1.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-2-h.png b/mindus/assets/blocks/liquid/conduits/conduit-1-2-h.png Binary files differnew file mode 100644 index 0000000..8e844b9 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-2-h.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/conduit-1-2.png Binary files differnew file mode 100644 index 0000000..e6dd640 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-2.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/conduit-1-3.png Binary files differnew file mode 100644 index 0000000..61ee4e8 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-1-3.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-0-h.png b/mindus/assets/blocks/liquid/conduits/conduit-2-0-h.png Binary files differnew file mode 100644 index 0000000..20316a5 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-0-v.png b/mindus/assets/blocks/liquid/conduits/conduit-2-0-v.png Binary files differnew file mode 100644 index 0000000..89f0046 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-0-v.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/conduit-2-0.png Binary files differnew file mode 100644 index 0000000..defe522 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-0.png diff --git a/assets/blocks/liquid/conduits/conduit-2-1-h.png b/mindus/assets/blocks/liquid/conduits/conduit-2-1-h.png Binary files differindex 8122549..8122549 100644 --- a/assets/blocks/liquid/conduits/conduit-2-1-h.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-1-h.png diff --git a/assets/blocks/liquid/conduits/conduit-2-1.png b/mindus/assets/blocks/liquid/conduits/conduit-2-1.png Binary files differindex 92f8b2a..92f8b2a 100644 --- a/assets/blocks/liquid/conduits/conduit-2-1.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-1.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/conduit-2-2.png Binary files differnew file mode 100644 index 0000000..4d70997 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-2.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-2-3-h.png b/mindus/assets/blocks/liquid/conduits/conduit-2-3-h.png Binary files differnew file mode 100644 index 0000000..6d01066 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-3-h.png diff --git a/assets/blocks/liquid/conduits/conduit-2-3.png b/mindus/assets/blocks/liquid/conduits/conduit-2-3.png Binary files differindex 9759bb9..9759bb9 100644 --- a/assets/blocks/liquid/conduits/conduit-2-3.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-2-3.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-0-h.png b/mindus/assets/blocks/liquid/conduits/conduit-3-0-h.png Binary files differnew file mode 100644 index 0000000..b61158e --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-3-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/conduit-3-0.png Binary files differnew file mode 100644 index 0000000..9683ba0 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-3-0.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/conduit-3-1.png Binary files differnew file mode 100644 index 0000000..1e5d060 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-3-1.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/conduit-3-3.png Binary files differnew file mode 100644 index 0000000..48a748d --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-3-3.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/conduit-4-0.png Binary files differnew file mode 100644 index 0000000..558b75d --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-4-0.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/conduit-4-1.png Binary files differnew file mode 100644 index 0000000..0c03820 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-4-1.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/conduit-4-3.png Binary files differnew file mode 100644 index 0000000..b20c51d --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-4-3.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-0.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-0.png Binary files differnew file mode 100644 index 0000000..a794853 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-bottom-0.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-1.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-1.png Binary files differnew file mode 100644 index 0000000..aeeef59 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-bottom-1.png diff --git a/assets/blocks/liquid/conduits/conduit-bottom-3.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-2.png Binary files differindex 0d9e7e3..0d9e7e3 100644 --- a/assets/blocks/liquid/conduits/conduit-bottom-3.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-bottom-2.png diff --git a/assets/blocks/liquid/conduits/conduit-bottom-4.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-3.png Binary files differindex 0d9e7e3..0d9e7e3 100644 --- a/assets/blocks/liquid/conduits/conduit-bottom-4.png +++ b/mindus/assets/blocks/liquid/conduits/conduit-bottom-3.png diff --git a/mindus/assets/blocks/liquid/conduits/conduit-bottom-4.png b/mindus/assets/blocks/liquid/conduits/conduit-bottom-4.png Binary files differnew file mode 100644 index 0000000..0d9e7e3 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/conduit-bottom-4.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.png Binary files differnew file mode 100644 index 0000000..4cade4e --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-0.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.png Binary files differnew file mode 100644 index 0000000..4a2c98d --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-1.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.png Binary files differnew file mode 100644 index 0000000..8a7262a --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-2.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.png Binary files differnew file mode 100644 index 0000000..80afc01 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-0-3.png 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 Binary files differnew file mode 100644 index 0000000..109ede5 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.png Binary files differnew file mode 100644 index 0000000..94f689f --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-0.png 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 Binary files differnew file mode 100644 index 0000000..fe8ad2b --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-h.png 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 Binary files differnew file mode 100644 index 0000000..6312882 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1-v.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.png Binary files differnew file mode 100644 index 0000000..8fb1ea5 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-1.png 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 Binary files differnew file mode 100644 index 0000000..6443295 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2-h.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.png Binary files differnew file mode 100644 index 0000000..fe8ad2b --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-2.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.png Binary files differnew file mode 100644 index 0000000..109ede5 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-1-3.png 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 Binary files differnew file mode 100644 index 0000000..19660c2 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-h.png 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 Binary files differnew file mode 100644 index 0000000..29008a8 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0-v.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.png Binary files differnew file mode 100644 index 0000000..7bd7dae --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-0.png 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 Binary files differnew file mode 100644 index 0000000..bbdee9c --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1-h.png diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1.png Binary files differindex 8130059..8130059 100644 --- a/assets/blocks/liquid/conduits/plated-conduit-2-1.png +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-1.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.png Binary files differnew file mode 100644 index 0000000..0bbda2b --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-2.png 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 Binary files differnew file mode 100644 index 0000000..a97100e --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3-h.png diff --git a/assets/blocks/liquid/conduits/plated-conduit-2-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3.png Binary files differindex acd19b0..acd19b0 100644 --- a/assets/blocks/liquid/conduits/plated-conduit-2-3.png +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-2-3.png 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 Binary files differnew file mode 100644 index 0000000..d9cab71 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.png Binary files differnew file mode 100644 index 0000000..946a7a9 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-0.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.png Binary files differnew file mode 100644 index 0000000..df12caa --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-1.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.png Binary files differnew file mode 100644 index 0000000..51a2fcb --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-3-3.png diff --git a/assets/blocks/liquid/conduits/plated-conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-0.png Binary files differindex 5fd7ae2..5fd7ae2 100644 --- a/assets/blocks/liquid/conduits/plated-conduit-4-0.png +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-0.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.png Binary files differnew file mode 100644 index 0000000..b617458 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-1.png diff --git a/mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.png Binary files differnew file mode 100644 index 0000000..bd19694 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-4-3.png diff --git a/assets/blocks/liquid/conduits/plated-conduit-cap.png b/mindus/assets/blocks/liquid/conduits/plated-conduit-cap.png Binary files differindex 6a9f67d..6a9f67d 100644 --- a/assets/blocks/liquid/conduits/plated-conduit-cap.png +++ b/mindus/assets/blocks/liquid/conduits/plated-conduit-cap.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.png Binary files differnew file mode 100644 index 0000000..e97c0e1 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-0.png diff --git a/assets/blocks/liquid/conduits/pulse-conduit-0-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-1.png Binary files differindex 36053a8..36053a8 100644 --- a/assets/blocks/liquid/conduits/pulse-conduit-0-1.png +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-1.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.png Binary files differnew file mode 100644 index 0000000..73c32ac --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-2.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.png Binary files differnew file mode 100644 index 0000000..5d104a8 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-0-3.png 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 Binary files differnew file mode 100644 index 0000000..1f5af36 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.png Binary files differnew file mode 100644 index 0000000..b967435 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-0.png 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 Binary files differnew file mode 100644 index 0000000..5b1e4e3 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-h.png 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 Binary files differnew file mode 100644 index 0000000..b6b1328 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1-v.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.png Binary files differnew file mode 100644 index 0000000..5bf489a --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-1.png 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 Binary files differnew file mode 100644 index 0000000..0907c3e --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2-h.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.png Binary files differnew file mode 100644 index 0000000..5b1e4e3 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-2.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.png Binary files differnew file mode 100644 index 0000000..1f5af36 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-1-3.png 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 Binary files differnew file mode 100644 index 0000000..90fdd36 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-h.png 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 Binary files differnew file mode 100644 index 0000000..3b205bf --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0-v.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.png Binary files differnew file mode 100644 index 0000000..ae563da --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-0.png 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 Binary files differnew file mode 100644 index 0000000..0adfb39 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1-h.png diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1.png Binary files differindex 31d5bed..31d5bed 100644 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-1.png +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-1.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.png Binary files differnew file mode 100644 index 0000000..7bbddb5 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-2.png 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 Binary files differnew file mode 100644 index 0000000..fd38269 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3-h.png diff --git a/assets/blocks/liquid/conduits/pulse-conduit-2-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3.png Binary files differindex 82de4d3..82de4d3 100644 --- a/assets/blocks/liquid/conduits/pulse-conduit-2-3.png +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-2-3.png 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 Binary files differnew file mode 100644 index 0000000..96c3a73 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.png Binary files differnew file mode 100644 index 0000000..0b49250 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-0.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.png Binary files differnew file mode 100644 index 0000000..074c17a --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-1.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.png Binary files differnew file mode 100644 index 0000000..a874674 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-3-3.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.png Binary files differnew file mode 100644 index 0000000..d807f19 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-0.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.png Binary files differnew file mode 100644 index 0000000..2053317 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-1.png diff --git a/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.png Binary files differnew file mode 100644 index 0000000..660170e --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/pulse-conduit-4-3.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png Binary files differnew file mode 100644 index 0000000..448d07a --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-0.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png Binary files differnew file mode 100644 index 0000000..b15f447 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-1.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png Binary files differnew file mode 100644 index 0000000..5aec990 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-2.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png Binary files differnew file mode 100644 index 0000000..e61572d --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-0-3.png 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 Binary files differnew file mode 100644 index 0000000..7964512 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png Binary files differnew file mode 100644 index 0000000..fdb649c --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-0.png 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 Binary files differnew file mode 100644 index 0000000..4671ac4 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-h.png 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 Binary files differnew file mode 100644 index 0000000..6cf4efd --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1-v.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png Binary files differnew file mode 100644 index 0000000..523f009 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-1.png 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 Binary files differnew file mode 100644 index 0000000..ababa67 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2-h.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png Binary files differnew file mode 100644 index 0000000..cb7f02f --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-2.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png Binary files differnew file mode 100644 index 0000000..1a482f7 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-1-3.png 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 Binary files differnew file mode 100644 index 0000000..48ded48 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-h.png 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 Binary files differnew file mode 100644 index 0000000..4e6a10e --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0-v.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png Binary files differnew file mode 100644 index 0000000..cc3b39c --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-0.png 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 Binary files differnew file mode 100644 index 0000000..2059f05 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1-h.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png Binary files differnew file mode 100644 index 0000000..38611a0 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-1.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png Binary files differnew file mode 100644 index 0000000..0bb24ba --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-2.png 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 Binary files differnew file mode 100644 index 0000000..2e3ee2f --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3-h.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png Binary files differnew file mode 100644 index 0000000..9f854fb --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-2-3.png 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 Binary files differnew file mode 100644 index 0000000..0ed0aef --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0-h.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png Binary files differnew file mode 100644 index 0000000..615f6ef --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-0.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png Binary files differnew file mode 100644 index 0000000..42de74b --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-1.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png Binary files differnew file mode 100644 index 0000000..22b1555 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-3-3.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png Binary files differnew file mode 100644 index 0000000..197dfc0 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-0.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png Binary files differnew file mode 100644 index 0000000..5610b46 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-1.png diff --git a/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png Binary files differnew file mode 100644 index 0000000..932f914 --- /dev/null +++ b/mindus/assets/blocks/liquid/conduits/reinforced-conduit-4-3.png diff --git a/mindus/assets/blocks/liquid/impulse-pump-liquid.png b/mindus/assets/blocks/liquid/impulse-pump-liquid.png Binary files differnew file mode 100644 index 0000000..f2d696c --- /dev/null +++ b/mindus/assets/blocks/liquid/impulse-pump-liquid.png diff --git a/mindus/assets/blocks/liquid/impulse-pump.png b/mindus/assets/blocks/liquid/impulse-pump.png Binary files differnew file mode 100644 index 0000000..bf73079 --- /dev/null +++ b/mindus/assets/blocks/liquid/impulse-pump.png diff --git a/assets/blocks/liquid/liquid-container-bottom.png b/mindus/assets/blocks/liquid/liquid-container-bottom.png Binary files differindex 46f2081..46f2081 100644 --- a/assets/blocks/liquid/liquid-container-bottom.png +++ b/mindus/assets/blocks/liquid/liquid-container-bottom.png diff --git a/mindus/assets/blocks/liquid/liquid-container.png b/mindus/assets/blocks/liquid/liquid-container.png Binary files differnew file mode 100644 index 0000000..19bc701 --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-container.png diff --git a/mindus/assets/blocks/liquid/liquid-junction.png b/mindus/assets/blocks/liquid/liquid-junction.png Binary files differnew file mode 100644 index 0000000..1f34b73 --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-junction.png diff --git a/assets/blocks/liquid/liquid-router-bottom.png b/mindus/assets/blocks/liquid/liquid-router-bottom.png Binary files differindex 977f5d8..977f5d8 100644 --- a/assets/blocks/liquid/liquid-router-bottom.png +++ b/mindus/assets/blocks/liquid/liquid-router-bottom.png diff --git a/mindus/assets/blocks/liquid/liquid-router.png b/mindus/assets/blocks/liquid/liquid-router.png Binary files differnew file mode 100644 index 0000000..5621822 --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-router.png diff --git a/mindus/assets/blocks/liquid/liquid-source.png b/mindus/assets/blocks/liquid/liquid-source.png Binary files differnew file mode 100644 index 0000000..c6f65ac --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-source.png diff --git a/mindus/assets/blocks/liquid/liquid-tank-bottom.png b/mindus/assets/blocks/liquid/liquid-tank-bottom.png Binary files differnew file mode 100644 index 0000000..440f475 --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-tank-bottom.png diff --git a/mindus/assets/blocks/liquid/liquid-tank.png b/mindus/assets/blocks/liquid/liquid-tank.png Binary files differnew file mode 100644 index 0000000..b9dc52a --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-tank.png diff --git a/mindus/assets/blocks/liquid/liquid-void.png b/mindus/assets/blocks/liquid/liquid-void.png Binary files differnew file mode 100644 index 0000000..956cfe8 --- /dev/null +++ b/mindus/assets/blocks/liquid/liquid-void.png diff --git a/mindus/assets/blocks/liquid/mechanical-pump-liquid.png b/mindus/assets/blocks/liquid/mechanical-pump-liquid.png Binary files differnew file mode 100644 index 0000000..f2d696c --- /dev/null +++ b/mindus/assets/blocks/liquid/mechanical-pump-liquid.png diff --git a/mindus/assets/blocks/liquid/mechanical-pump.png b/mindus/assets/blocks/liquid/mechanical-pump.png Binary files differnew file mode 100644 index 0000000..9ffc837 --- /dev/null +++ b/mindus/assets/blocks/liquid/mechanical-pump.png diff --git a/mindus/assets/blocks/liquid/phase-conduit-arrow.png b/mindus/assets/blocks/liquid/phase-conduit-arrow.png Binary files differnew file mode 100644 index 0000000..9bd3c6c --- /dev/null +++ b/mindus/assets/blocks/liquid/phase-conduit-arrow.png diff --git a/mindus/assets/blocks/liquid/phase-conduit-bridge.png b/mindus/assets/blocks/liquid/phase-conduit-bridge.png Binary files differnew file mode 100644 index 0000000..6eab161 --- /dev/null +++ b/mindus/assets/blocks/liquid/phase-conduit-bridge.png diff --git a/mindus/assets/blocks/liquid/phase-conduit-end.png b/mindus/assets/blocks/liquid/phase-conduit-end.png Binary files differnew file mode 100644 index 0000000..d8b3f61 --- /dev/null +++ b/mindus/assets/blocks/liquid/phase-conduit-end.png diff --git a/mindus/assets/blocks/liquid/phase-conduit.png b/mindus/assets/blocks/liquid/phase-conduit.png Binary files differnew file mode 100644 index 0000000..2f7b8cd --- /dev/null +++ b/mindus/assets/blocks/liquid/phase-conduit.png diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png Binary files differnew file mode 100644 index 0000000..d7c908d --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-arrow.png diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png Binary files differnew file mode 100644 index 0000000..f5b99bf --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge-liquid.png diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png Binary files differnew file mode 100644 index 0000000..c4d4321 --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-bridge.png diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.png Binary files differnew file mode 100644 index 0000000..e1028a7 --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-dir.png diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png Binary files differnew file mode 100644 index 0000000..5a6d0a5 --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-bridge-conduit-liquid.png diff --git a/mindus/assets/blocks/liquid/reinforced-bridge-conduit.png b/mindus/assets/blocks/liquid/reinforced-bridge-conduit.png Binary files differnew file mode 100644 index 0000000..7af3870 --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-bridge-conduit.png diff --git a/assets/blocks/liquid/reinforced-liquid-container-bottom.png b/mindus/assets/blocks/liquid/reinforced-liquid-container-bottom.png Binary files differindex 85194f9..85194f9 100644 --- a/assets/blocks/liquid/reinforced-liquid-container-bottom.png +++ b/mindus/assets/blocks/liquid/reinforced-liquid-container-bottom.png diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-container.png b/mindus/assets/blocks/liquid/reinforced-liquid-container.png Binary files differnew file mode 100644 index 0000000..434b1ac --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-liquid-container.png diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-junction.png b/mindus/assets/blocks/liquid/reinforced-liquid-junction.png Binary files differnew file mode 100644 index 0000000..bfb52e9 --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-liquid-junction.png diff --git a/assets/blocks/liquid/reinforced-liquid-router-bottom.png b/mindus/assets/blocks/liquid/reinforced-liquid-router-bottom.png Binary files differindex 3b2c81c..3b2c81c 100644 --- a/assets/blocks/liquid/reinforced-liquid-router-bottom.png +++ b/mindus/assets/blocks/liquid/reinforced-liquid-router-bottom.png diff --git a/assets/blocks/liquid/reinforced-liquid-router.png b/mindus/assets/blocks/liquid/reinforced-liquid-router.png Binary files differindex 0fdb7ba..0fdb7ba 100644 --- a/assets/blocks/liquid/reinforced-liquid-router.png +++ b/mindus/assets/blocks/liquid/reinforced-liquid-router.png diff --git a/mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.png b/mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.png Binary files differnew file mode 100644 index 0000000..2b69b7b --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-liquid-tank-bottom.png diff --git a/assets/blocks/liquid/reinforced-liquid-tank.png b/mindus/assets/blocks/liquid/reinforced-liquid-tank.png Binary files differindex 94cbfe1..94cbfe1 100644 --- a/assets/blocks/liquid/reinforced-liquid-tank.png +++ b/mindus/assets/blocks/liquid/reinforced-liquid-tank.png diff --git a/mindus/assets/blocks/liquid/reinforced-pump-liquid.png b/mindus/assets/blocks/liquid/reinforced-pump-liquid.png Binary files differnew file mode 100644 index 0000000..04173af --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-pump-liquid.png diff --git a/mindus/assets/blocks/liquid/reinforced-pump.png b/mindus/assets/blocks/liquid/reinforced-pump.png Binary files differnew file mode 100644 index 0000000..51f06ca --- /dev/null +++ b/mindus/assets/blocks/liquid/reinforced-pump.png diff --git a/mindus/assets/blocks/liquid/rotary-pump-liquid.png b/mindus/assets/blocks/liquid/rotary-pump-liquid.png Binary files differnew file mode 100644 index 0000000..f2d696c --- /dev/null +++ b/mindus/assets/blocks/liquid/rotary-pump-liquid.png diff --git a/mindus/assets/blocks/liquid/rotary-pump.png b/mindus/assets/blocks/liquid/rotary-pump.png Binary files differnew file mode 100644 index 0000000..5c82434 --- /dev/null +++ b/mindus/assets/blocks/liquid/rotary-pump.png diff --git a/mindus/assets/blocks/logic/canvas.png b/mindus/assets/blocks/logic/canvas.png Binary files differnew file mode 100644 index 0000000..a70c306 --- /dev/null +++ b/mindus/assets/blocks/logic/canvas.png diff --git a/mindus/assets/blocks/logic/hyper-processor.png b/mindus/assets/blocks/logic/hyper-processor.png Binary files differnew file mode 100644 index 0000000..1915cd9 --- /dev/null +++ b/mindus/assets/blocks/logic/hyper-processor.png diff --git a/mindus/assets/blocks/logic/large-canvas.png b/mindus/assets/blocks/logic/large-canvas.png Binary files differnew file mode 100644 index 0000000..36c0312 --- /dev/null +++ b/mindus/assets/blocks/logic/large-canvas.png diff --git a/mindus/assets/blocks/logic/large-logic-display.png b/mindus/assets/blocks/logic/large-logic-display.png Binary files differnew file mode 100644 index 0000000..bf64634 --- /dev/null +++ b/mindus/assets/blocks/logic/large-logic-display.png diff --git a/mindus/assets/blocks/logic/logic-display.png b/mindus/assets/blocks/logic/logic-display.png Binary files differnew file mode 100644 index 0000000..bd2fc32 --- /dev/null +++ b/mindus/assets/blocks/logic/logic-display.png diff --git a/mindus/assets/blocks/logic/logic-processor.png b/mindus/assets/blocks/logic/logic-processor.png Binary files differnew file mode 100644 index 0000000..af50383 --- /dev/null +++ b/mindus/assets/blocks/logic/logic-processor.png diff --git a/mindus/assets/blocks/logic/memory-bank.png b/mindus/assets/blocks/logic/memory-bank.png Binary files differnew file mode 100644 index 0000000..5ea0e6c --- /dev/null +++ b/mindus/assets/blocks/logic/memory-bank.png diff --git a/mindus/assets/blocks/logic/memory-cell.png b/mindus/assets/blocks/logic/memory-cell.png Binary files differnew file mode 100644 index 0000000..34a8c2c --- /dev/null +++ b/mindus/assets/blocks/logic/memory-cell.png diff --git a/mindus/assets/blocks/logic/message.png b/mindus/assets/blocks/logic/message.png Binary files differnew file mode 100644 index 0000000..48aedde --- /dev/null +++ b/mindus/assets/blocks/logic/message.png diff --git a/mindus/assets/blocks/logic/micro-processor.png b/mindus/assets/blocks/logic/micro-processor.png Binary files differnew file mode 100644 index 0000000..76f4885 --- /dev/null +++ b/mindus/assets/blocks/logic/micro-processor.png diff --git a/mindus/assets/blocks/logic/reinforced-message.png b/mindus/assets/blocks/logic/reinforced-message.png Binary files differnew file mode 100644 index 0000000..37df68d --- /dev/null +++ b/mindus/assets/blocks/logic/reinforced-message.png diff --git a/mindus/assets/blocks/logic/switch-on.png b/mindus/assets/blocks/logic/switch-on.png Binary files differnew file mode 100644 index 0000000..68e1d2d --- /dev/null +++ b/mindus/assets/blocks/logic/switch-on.png diff --git a/mindus/assets/blocks/logic/switch.png b/mindus/assets/blocks/logic/switch.png Binary files differnew file mode 100644 index 0000000..5dcd363 --- /dev/null +++ b/mindus/assets/blocks/logic/switch.png diff --git a/mindus/assets/blocks/logic/tile-logic-display.png b/mindus/assets/blocks/logic/tile-logic-display.png Binary files differnew file mode 100644 index 0000000..977f5d8 --- /dev/null +++ b/mindus/assets/blocks/logic/tile-logic-display.png 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 Binary files differnew file mode 100644 index 0000000..9be4484 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-0.png 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 Binary files differnew file mode 100644 index 0000000..f76df94 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-1.png 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 Binary files differnew file mode 100644 index 0000000..760d3b4 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-10.png 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 Binary files differnew file mode 100644 index 0000000..f8f0009 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-11.png 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 Binary files differnew file mode 100644 index 0000000..bc3ef87 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-12.png 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 Binary files differnew file mode 100644 index 0000000..3917ed0 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-13.png 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 Binary files differnew file mode 100644 index 0000000..9be8d2d --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-14.png 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 Binary files differnew file mode 100644 index 0000000..24cbf45 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-15.png 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 Binary files differnew file mode 100644 index 0000000..030c04d --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-16.png 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 Binary files differnew file mode 100644 index 0000000..2e10d7a --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-17.png 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 Binary files differnew file mode 100644 index 0000000..32e6748 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-18.png 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 Binary files differnew file mode 100644 index 0000000..e319f4d --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-19.png 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 Binary files differnew file mode 100644 index 0000000..a9aee0b --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-2.png 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 Binary files differnew file mode 100644 index 0000000..d9e5150 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-20.png 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 Binary files differnew file mode 100644 index 0000000..8e2c760 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-21.png 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 Binary files differnew file mode 100644 index 0000000..4195407 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-22.png 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 Binary files differnew file mode 100644 index 0000000..a588cd0 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-23.png 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 Binary files differnew file mode 100644 index 0000000..f516680 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-24.png 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 Binary files differnew file mode 100644 index 0000000..2b59262 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-25.png 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 Binary files differnew file mode 100644 index 0000000..35af5d4 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-26.png 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 Binary files differnew file mode 100644 index 0000000..3941118 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-27.png 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 Binary files differnew file mode 100644 index 0000000..3517bec --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-28.png 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 Binary files differnew file mode 100644 index 0000000..cd705e7 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-29.png 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 Binary files differnew file mode 100644 index 0000000..028cf04 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-3.png 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 Binary files differnew file mode 100644 index 0000000..f6a711b --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-30.png 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 Binary files differnew file mode 100644 index 0000000..68aebb4 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-31.png 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 Binary files differnew file mode 100644 index 0000000..883257c --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-32.png 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 Binary files differnew file mode 100644 index 0000000..f3fb63a --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-33.png 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 Binary files differnew file mode 100644 index 0000000..537303f --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-34.png 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 Binary files differnew file mode 100644 index 0000000..932e934 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-35.png 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 Binary files differnew file mode 100644 index 0000000..50237ac --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-36.png 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 Binary files differnew file mode 100644 index 0000000..7ff182b --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-37.png 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 Binary files differnew file mode 100644 index 0000000..e4d823c --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-38.png 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 Binary files differnew file mode 100644 index 0000000..b037e0d --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-39.png 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 Binary files differnew file mode 100644 index 0000000..cdc2ed9 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-4.png 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 Binary files differnew file mode 100644 index 0000000..5bf94a0 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-40.png 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 Binary files differnew file mode 100644 index 0000000..9086970 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-41.png 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 Binary files differnew file mode 100644 index 0000000..653c075 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-42.png 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 Binary files differnew file mode 100644 index 0000000..03b8c5a --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-43.png 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 Binary files differnew file mode 100644 index 0000000..fcad3bb --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-44.png 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 Binary files differnew file mode 100644 index 0000000..c25438f --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-45.png 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 Binary files differnew file mode 100644 index 0000000..aa1d559 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-46.png 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 Binary files differnew file mode 100644 index 0000000..bb8dfda --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-5.png 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 Binary files differnew file mode 100644 index 0000000..a389f86 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-6.png 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 Binary files differnew file mode 100644 index 0000000..5fa02ec --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-7.png 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 Binary files differnew file mode 100644 index 0000000..4d4a5dc --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-8.png 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 Binary files differnew file mode 100644 index 0000000..0ac5dd1 --- /dev/null +++ b/mindus/assets/blocks/logic/tiled-display/tile-logic-display-9.png diff --git a/mindus/assets/blocks/logic/world-cell.png b/mindus/assets/blocks/logic/world-cell.png Binary files differnew file mode 100644 index 0000000..cfc5d87 --- /dev/null +++ b/mindus/assets/blocks/logic/world-cell.png diff --git a/mindus/assets/blocks/logic/world-message.png b/mindus/assets/blocks/logic/world-message.png Binary files differnew file mode 100644 index 0000000..a94bb57 --- /dev/null +++ b/mindus/assets/blocks/logic/world-message.png diff --git a/mindus/assets/blocks/logic/world-processor.png b/mindus/assets/blocks/logic/world-processor.png Binary files differnew file mode 100644 index 0000000..01e1a0c --- /dev/null +++ b/mindus/assets/blocks/logic/world-processor.png diff --git a/mindus/assets/blocks/logic/world-switch-on.png b/mindus/assets/blocks/logic/world-switch-on.png Binary files differnew file mode 100644 index 0000000..47d19d9 --- /dev/null +++ b/mindus/assets/blocks/logic/world-switch-on.png diff --git a/mindus/assets/blocks/logic/world-switch.png b/mindus/assets/blocks/logic/world-switch.png Binary files differnew file mode 100644 index 0000000..8afcf14 --- /dev/null +++ b/mindus/assets/blocks/logic/world-switch.png diff --git a/mindus/assets/blocks/payload/constructor-top.png b/mindus/assets/blocks/payload/constructor-top.png Binary files differnew file mode 100644 index 0000000..7db4670 --- /dev/null +++ b/mindus/assets/blocks/payload/constructor-top.png diff --git a/mindus/assets/blocks/payload/constructor.png b/mindus/assets/blocks/payload/constructor.png Binary files differnew file mode 100644 index 0000000..8740a1b --- /dev/null +++ b/mindus/assets/blocks/payload/constructor.png diff --git a/mindus/assets/blocks/payload/deconstructor-top.png b/mindus/assets/blocks/payload/deconstructor-top.png Binary files differnew file mode 100644 index 0000000..8cee26d --- /dev/null +++ b/mindus/assets/blocks/payload/deconstructor-top.png diff --git a/mindus/assets/blocks/payload/deconstructor.png b/mindus/assets/blocks/payload/deconstructor.png Binary files differnew file mode 100644 index 0000000..1dc96a1 --- /dev/null +++ b/mindus/assets/blocks/payload/deconstructor.png diff --git a/mindus/assets/blocks/payload/factory-in-3-dark.png b/mindus/assets/blocks/payload/factory-in-3-dark.png Binary files differnew file mode 100644 index 0000000..21f3c72 --- /dev/null +++ b/mindus/assets/blocks/payload/factory-in-3-dark.png diff --git a/mindus/assets/blocks/payload/factory-in-3.png b/mindus/assets/blocks/payload/factory-in-3.png Binary files differnew file mode 100644 index 0000000..47c8a1c --- /dev/null +++ b/mindus/assets/blocks/payload/factory-in-3.png diff --git a/mindus/assets/blocks/payload/factory-in-5-dark.png b/mindus/assets/blocks/payload/factory-in-5-dark.png Binary files differnew file mode 100644 index 0000000..49b528b --- /dev/null +++ b/mindus/assets/blocks/payload/factory-in-5-dark.png diff --git a/mindus/assets/blocks/payload/factory-in-5.png b/mindus/assets/blocks/payload/factory-in-5.png Binary files differnew file mode 100644 index 0000000..969d1b7 --- /dev/null +++ b/mindus/assets/blocks/payload/factory-in-5.png diff --git a/assets/blocks/payload/factory-in-7.png b/mindus/assets/blocks/payload/factory-in-7.png Binary files differindex e7f4f07..d67986a 100644 --- a/assets/blocks/payload/factory-in-7.png +++ b/mindus/assets/blocks/payload/factory-in-7.png diff --git a/assets/blocks/payload/factory-in-9.png b/mindus/assets/blocks/payload/factory-in-9.png Binary files differindex 75638ba..6f7dc51 100644 --- a/assets/blocks/payload/factory-in-9.png +++ b/mindus/assets/blocks/payload/factory-in-9.png diff --git a/mindus/assets/blocks/payload/factory-out-3-dark.png b/mindus/assets/blocks/payload/factory-out-3-dark.png Binary files differnew file mode 100644 index 0000000..c9e11fa --- /dev/null +++ b/mindus/assets/blocks/payload/factory-out-3-dark.png diff --git a/mindus/assets/blocks/payload/factory-out-3.png b/mindus/assets/blocks/payload/factory-out-3.png Binary files differnew file mode 100644 index 0000000..4d84664 --- /dev/null +++ b/mindus/assets/blocks/payload/factory-out-3.png diff --git a/mindus/assets/blocks/payload/factory-out-5-dark.png b/mindus/assets/blocks/payload/factory-out-5-dark.png Binary files differnew file mode 100644 index 0000000..87f5a34 --- /dev/null +++ b/mindus/assets/blocks/payload/factory-out-5-dark.png diff --git a/mindus/assets/blocks/payload/factory-out-5.png b/mindus/assets/blocks/payload/factory-out-5.png Binary files differnew file mode 100644 index 0000000..713f5fe --- /dev/null +++ b/mindus/assets/blocks/payload/factory-out-5.png diff --git a/mindus/assets/blocks/payload/factory-out-7.png b/mindus/assets/blocks/payload/factory-out-7.png Binary files differnew file mode 100644 index 0000000..d2946b3 --- /dev/null +++ b/mindus/assets/blocks/payload/factory-out-7.png diff --git a/mindus/assets/blocks/payload/factory-out-9.png b/mindus/assets/blocks/payload/factory-out-9.png Binary files differnew file mode 100644 index 0000000..840ca36 --- /dev/null +++ b/mindus/assets/blocks/payload/factory-out-9.png diff --git a/mindus/assets/blocks/payload/factory-top-3.png b/mindus/assets/blocks/payload/factory-top-3.png Binary files differnew file mode 100644 index 0000000..ff972ca --- /dev/null +++ b/mindus/assets/blocks/payload/factory-top-3.png diff --git a/mindus/assets/blocks/payload/large-constructor-top.png b/mindus/assets/blocks/payload/large-constructor-top.png Binary files differnew file mode 100644 index 0000000..b664c4c --- /dev/null +++ b/mindus/assets/blocks/payload/large-constructor-top.png diff --git a/mindus/assets/blocks/payload/large-constructor.png b/mindus/assets/blocks/payload/large-constructor.png Binary files differnew file mode 100644 index 0000000..ec19fb3 --- /dev/null +++ b/mindus/assets/blocks/payload/large-constructor.png diff --git a/mindus/assets/blocks/payload/large-payload-mass-driver.png b/mindus/assets/blocks/payload/large-payload-mass-driver.png Binary files differnew file mode 100644 index 0000000..f5745e1 --- /dev/null +++ b/mindus/assets/blocks/payload/large-payload-mass-driver.png diff --git a/mindus/assets/blocks/payload/payload-conveyor.png b/mindus/assets/blocks/payload/payload-conveyor.png Binary files differnew file mode 100644 index 0000000..6909b63 --- /dev/null +++ b/mindus/assets/blocks/payload/payload-conveyor.png diff --git a/mindus/assets/blocks/payload/payload-loader-top.png b/mindus/assets/blocks/payload/payload-loader-top.png Binary files differnew file mode 100644 index 0000000..97296ba --- /dev/null +++ b/mindus/assets/blocks/payload/payload-loader-top.png diff --git a/mindus/assets/blocks/payload/payload-loader.png b/mindus/assets/blocks/payload/payload-loader.png Binary files differnew file mode 100644 index 0000000..b950f6d --- /dev/null +++ b/mindus/assets/blocks/payload/payload-loader.png diff --git a/mindus/assets/blocks/payload/payload-mass-driver.png b/mindus/assets/blocks/payload/payload-mass-driver.png Binary files differnew file mode 100644 index 0000000..24875c1 --- /dev/null +++ b/mindus/assets/blocks/payload/payload-mass-driver.png diff --git a/assets/blocks/payload/payload-router-over.png b/mindus/assets/blocks/payload/payload-router-over.png Binary files differindex 5166951..5166951 100644 --- a/assets/blocks/payload/payload-router-over.png +++ b/mindus/assets/blocks/payload/payload-router-over.png diff --git a/mindus/assets/blocks/payload/payload-router.png b/mindus/assets/blocks/payload/payload-router.png Binary files differnew file mode 100644 index 0000000..8cb68e4 --- /dev/null +++ b/mindus/assets/blocks/payload/payload-router.png diff --git a/mindus/assets/blocks/payload/payload-source-top.png b/mindus/assets/blocks/payload/payload-source-top.png Binary files differnew file mode 100644 index 0000000..31136c7 --- /dev/null +++ b/mindus/assets/blocks/payload/payload-source-top.png diff --git a/assets/blocks/payload/payload-source.png b/mindus/assets/blocks/payload/payload-source.png Binary files differindex 1c4585b..cf0844c 100644 --- a/assets/blocks/payload/payload-source.png +++ b/mindus/assets/blocks/payload/payload-source.png diff --git a/mindus/assets/blocks/payload/payload-unloader-top.png b/mindus/assets/blocks/payload/payload-unloader-top.png Binary files differnew file mode 100644 index 0000000..bd4c21e --- /dev/null +++ b/mindus/assets/blocks/payload/payload-unloader-top.png diff --git a/mindus/assets/blocks/payload/payload-unloader.png b/mindus/assets/blocks/payload/payload-unloader.png Binary files differnew file mode 100644 index 0000000..d62f642 --- /dev/null +++ b/mindus/assets/blocks/payload/payload-unloader.png diff --git a/mindus/assets/blocks/payload/payload-void-top.png b/mindus/assets/blocks/payload/payload-void-top.png Binary files differnew file mode 100644 index 0000000..48a8592 --- /dev/null +++ b/mindus/assets/blocks/payload/payload-void-top.png diff --git a/mindus/assets/blocks/payload/payload-void.png b/mindus/assets/blocks/payload/payload-void.png Binary files differnew file mode 100644 index 0000000..b1fac7d --- /dev/null +++ b/mindus/assets/blocks/payload/payload-void.png diff --git a/mindus/assets/blocks/payload/reinforced-payload-conveyor.png b/mindus/assets/blocks/payload/reinforced-payload-conveyor.png Binary files differnew file mode 100644 index 0000000..deaa4ed --- /dev/null +++ b/mindus/assets/blocks/payload/reinforced-payload-conveyor.png diff --git a/assets/blocks/payload/reinforced-payload-router-over.png b/mindus/assets/blocks/payload/reinforced-payload-router-over.png Binary files differindex 14dda8a..14dda8a 100644 --- a/assets/blocks/payload/reinforced-payload-router-over.png +++ b/mindus/assets/blocks/payload/reinforced-payload-router-over.png diff --git a/mindus/assets/blocks/payload/reinforced-payload-router.png b/mindus/assets/blocks/payload/reinforced-payload-router.png Binary files differnew file mode 100644 index 0000000..c4be5da --- /dev/null +++ b/mindus/assets/blocks/payload/reinforced-payload-router.png diff --git a/mindus/assets/blocks/payload/small-deconstructor-top.png b/mindus/assets/blocks/payload/small-deconstructor-top.png Binary files differnew file mode 100644 index 0000000..316b304 --- /dev/null +++ b/mindus/assets/blocks/payload/small-deconstructor-top.png diff --git a/mindus/assets/blocks/payload/small-deconstructor.png b/mindus/assets/blocks/payload/small-deconstructor.png Binary files differnew file mode 100644 index 0000000..2b3337e --- /dev/null +++ b/mindus/assets/blocks/payload/small-deconstructor.png diff --git a/mindus/assets/blocks/power/battery-large.png b/mindus/assets/blocks/power/battery-large.png Binary files differnew file mode 100644 index 0000000..7513fe5 --- /dev/null +++ b/mindus/assets/blocks/power/battery-large.png diff --git a/mindus/assets/blocks/power/battery.png b/mindus/assets/blocks/power/battery.png Binary files differnew file mode 100644 index 0000000..4282103 --- /dev/null +++ b/mindus/assets/blocks/power/battery.png diff --git a/mindus/assets/blocks/power/beam-link.png b/mindus/assets/blocks/power/beam-link.png Binary files differnew file mode 100644 index 0000000..a4ebbb9 --- /dev/null +++ b/mindus/assets/blocks/power/beam-link.png diff --git a/mindus/assets/blocks/power/beam-node.png b/mindus/assets/blocks/power/beam-node.png Binary files differnew file mode 100644 index 0000000..ba86cc0 --- /dev/null +++ b/mindus/assets/blocks/power/beam-node.png diff --git a/mindus/assets/blocks/power/beam-tower.png b/mindus/assets/blocks/power/beam-tower.png Binary files differnew file mode 100644 index 0000000..17da542 --- /dev/null +++ b/mindus/assets/blocks/power/beam-tower.png diff --git a/mindus/assets/blocks/power/chemical-combustion-chamber.png b/mindus/assets/blocks/power/chemical-combustion-chamber.png Binary files differnew file mode 100644 index 0000000..26770b5 --- /dev/null +++ b/mindus/assets/blocks/power/chemical-combustion-chamber.png diff --git a/mindus/assets/blocks/power/combustion-generator.png b/mindus/assets/blocks/power/combustion-generator.png Binary files differnew file mode 100644 index 0000000..ee7caae --- /dev/null +++ b/mindus/assets/blocks/power/combustion-generator.png diff --git a/mindus/assets/blocks/power/differential-generator-liquid.png b/mindus/assets/blocks/power/differential-generator-liquid.png Binary files differnew file mode 100644 index 0000000..081edf7 --- /dev/null +++ b/mindus/assets/blocks/power/differential-generator-liquid.png diff --git a/mindus/assets/blocks/power/differential-generator.png b/mindus/assets/blocks/power/differential-generator.png Binary files differnew file mode 100644 index 0000000..42f1fbf --- /dev/null +++ b/mindus/assets/blocks/power/differential-generator.png diff --git a/mindus/assets/blocks/power/diode-arrow.png b/mindus/assets/blocks/power/diode-arrow.png Binary files differnew file mode 100644 index 0000000..a34dd68 --- /dev/null +++ b/mindus/assets/blocks/power/diode-arrow.png diff --git a/mindus/assets/blocks/power/diode.png b/mindus/assets/blocks/power/diode.png Binary files differnew file mode 100644 index 0000000..19f3990 --- /dev/null +++ b/mindus/assets/blocks/power/diode.png diff --git a/mindus/assets/blocks/power/flux-reactor-bottom.png b/mindus/assets/blocks/power/flux-reactor-bottom.png Binary files differnew file mode 100644 index 0000000..2c2d987 --- /dev/null +++ b/mindus/assets/blocks/power/flux-reactor-bottom.png diff --git a/mindus/assets/blocks/power/flux-reactor-mid.png b/mindus/assets/blocks/power/flux-reactor-mid.png Binary files differnew file mode 100644 index 0000000..5f3b0df --- /dev/null +++ b/mindus/assets/blocks/power/flux-reactor-mid.png diff --git a/mindus/assets/blocks/power/flux-reactor.png b/mindus/assets/blocks/power/flux-reactor.png Binary files differnew file mode 100644 index 0000000..55d3d2b --- /dev/null +++ b/mindus/assets/blocks/power/flux-reactor.png diff --git a/mindus/assets/blocks/power/illuminator.png b/mindus/assets/blocks/power/illuminator.png Binary files differnew file mode 100644 index 0000000..5ec0f18 --- /dev/null +++ b/mindus/assets/blocks/power/illuminator.png diff --git a/mindus/assets/blocks/power/impact-reactor-bottom.png b/mindus/assets/blocks/power/impact-reactor-bottom.png Binary files differnew file mode 100644 index 0000000..0ac351d --- /dev/null +++ b/mindus/assets/blocks/power/impact-reactor-bottom.png diff --git a/mindus/assets/blocks/power/impact-reactor.png b/mindus/assets/blocks/power/impact-reactor.png Binary files differnew file mode 100644 index 0000000..4ea795a --- /dev/null +++ b/mindus/assets/blocks/power/impact-reactor.png diff --git a/mindus/assets/blocks/power/neoplasia-reactor-bottom.png b/mindus/assets/blocks/power/neoplasia-reactor-bottom.png Binary files differnew file mode 100644 index 0000000..8c106dc --- /dev/null +++ b/mindus/assets/blocks/power/neoplasia-reactor-bottom.png diff --git a/mindus/assets/blocks/power/neoplasia-reactor-center.png b/mindus/assets/blocks/power/neoplasia-reactor-center.png Binary files differnew file mode 100644 index 0000000..30e3a57 --- /dev/null +++ b/mindus/assets/blocks/power/neoplasia-reactor-center.png diff --git a/assets/blocks/power/neoplasia-reactor-top1.png b/mindus/assets/blocks/power/neoplasia-reactor-top1.png Binary files differindex 73ecc4d..73ecc4d 100644 --- a/assets/blocks/power/neoplasia-reactor-top1.png +++ b/mindus/assets/blocks/power/neoplasia-reactor-top1.png diff --git a/assets/blocks/power/neoplasia-reactor-top2.png b/mindus/assets/blocks/power/neoplasia-reactor-top2.png Binary files differindex 08a24c4..08a24c4 100644 --- a/assets/blocks/power/neoplasia-reactor-top2.png +++ b/mindus/assets/blocks/power/neoplasia-reactor-top2.png diff --git a/mindus/assets/blocks/power/neoplasia-reactor.png b/mindus/assets/blocks/power/neoplasia-reactor.png Binary files differnew file mode 100644 index 0000000..445f340 --- /dev/null +++ b/mindus/assets/blocks/power/neoplasia-reactor.png diff --git a/mindus/assets/blocks/power/power-node-large.png b/mindus/assets/blocks/power/power-node-large.png Binary files differnew file mode 100644 index 0000000..495de11 --- /dev/null +++ b/mindus/assets/blocks/power/power-node-large.png diff --git a/mindus/assets/blocks/power/power-node.png b/mindus/assets/blocks/power/power-node.png Binary files differnew file mode 100644 index 0000000..22af588 --- /dev/null +++ b/mindus/assets/blocks/power/power-node.png diff --git a/mindus/assets/blocks/power/power-source.png b/mindus/assets/blocks/power/power-source.png Binary files differnew file mode 100644 index 0000000..c7210da --- /dev/null +++ b/mindus/assets/blocks/power/power-source.png diff --git a/mindus/assets/blocks/power/power-void.png b/mindus/assets/blocks/power/power-void.png Binary files differnew file mode 100644 index 0000000..92354a9 --- /dev/null +++ b/mindus/assets/blocks/power/power-void.png diff --git a/mindus/assets/blocks/power/pyrolysis-generator.png b/mindus/assets/blocks/power/pyrolysis-generator.png Binary files differnew file mode 100644 index 0000000..890ac4e --- /dev/null +++ b/mindus/assets/blocks/power/pyrolysis-generator.png diff --git a/mindus/assets/blocks/power/rtg-generator.png b/mindus/assets/blocks/power/rtg-generator.png Binary files differnew file mode 100644 index 0000000..aefdc12 --- /dev/null +++ b/mindus/assets/blocks/power/rtg-generator.png diff --git a/mindus/assets/blocks/power/solar-panel-large.png b/mindus/assets/blocks/power/solar-panel-large.png Binary files differnew file mode 100644 index 0000000..e292111 --- /dev/null +++ b/mindus/assets/blocks/power/solar-panel-large.png diff --git a/mindus/assets/blocks/power/solar-panel.png b/mindus/assets/blocks/power/solar-panel.png Binary files differnew file mode 100644 index 0000000..61ef3f0 --- /dev/null +++ b/mindus/assets/blocks/power/solar-panel.png diff --git a/mindus/assets/blocks/power/steam-generator-liquid.png b/mindus/assets/blocks/power/steam-generator-liquid.png Binary files differnew file mode 100644 index 0000000..91db8f2 --- /dev/null +++ b/mindus/assets/blocks/power/steam-generator-liquid.png diff --git a/mindus/assets/blocks/power/steam-generator.png b/mindus/assets/blocks/power/steam-generator.png Binary files differnew file mode 100644 index 0000000..2bdb951 --- /dev/null +++ b/mindus/assets/blocks/power/steam-generator.png diff --git a/assets/blocks/power/surge-tower.png b/mindus/assets/blocks/power/surge-tower.png Binary files differindex abf3ce1..abf3ce1 100644 --- a/assets/blocks/power/surge-tower.png +++ b/mindus/assets/blocks/power/surge-tower.png diff --git a/mindus/assets/blocks/power/thermal-generator.png b/mindus/assets/blocks/power/thermal-generator.png Binary files differnew file mode 100644 index 0000000..f5e9dba --- /dev/null +++ b/mindus/assets/blocks/power/thermal-generator.png diff --git a/mindus/assets/blocks/power/thorium-reactor.png b/mindus/assets/blocks/power/thorium-reactor.png Binary files differnew file mode 100644 index 0000000..f6a7994 --- /dev/null +++ b/mindus/assets/blocks/power/thorium-reactor.png diff --git a/mindus/assets/blocks/power/turbine-condenser.png b/mindus/assets/blocks/power/turbine-condenser.png Binary files differnew file mode 100644 index 0000000..bc7f761 --- /dev/null +++ b/mindus/assets/blocks/power/turbine-condenser.png diff --git a/mindus/assets/blocks/production/atmospheric-concentrator-bottom.png b/mindus/assets/blocks/production/atmospheric-concentrator-bottom.png Binary files differnew file mode 100644 index 0000000..4082ee1 --- /dev/null +++ b/mindus/assets/blocks/production/atmospheric-concentrator-bottom.png diff --git a/mindus/assets/blocks/production/atmospheric-concentrator.png b/mindus/assets/blocks/production/atmospheric-concentrator.png Binary files differnew file mode 100644 index 0000000..ad5690f --- /dev/null +++ b/mindus/assets/blocks/production/atmospheric-concentrator.png diff --git a/mindus/assets/blocks/production/blast-mixer.png b/mindus/assets/blocks/production/blast-mixer.png Binary files differnew file mode 100644 index 0000000..b2e0adb --- /dev/null +++ b/mindus/assets/blocks/production/blast-mixer.png diff --git a/mindus/assets/blocks/production/carbide-crucible-bottom.png b/mindus/assets/blocks/production/carbide-crucible-bottom.png Binary files differnew file mode 100644 index 0000000..22ae9dc --- /dev/null +++ b/mindus/assets/blocks/production/carbide-crucible-bottom.png diff --git a/mindus/assets/blocks/production/carbide-crucible.png b/mindus/assets/blocks/production/carbide-crucible.png Binary files differnew file mode 100644 index 0000000..bb1ebf4 --- /dev/null +++ b/mindus/assets/blocks/production/carbide-crucible.png diff --git a/mindus/assets/blocks/production/coal-centrifuge.png b/mindus/assets/blocks/production/coal-centrifuge.png Binary files differnew file mode 100644 index 0000000..44a9e66 --- /dev/null +++ b/mindus/assets/blocks/production/coal-centrifuge.png diff --git a/assets/blocks/production/cryofluid-mixer-bottom.png b/mindus/assets/blocks/production/cryofluid-mixer-bottom.png Binary files differindex 6e5ed2c..6e5ed2c 100644 --- a/assets/blocks/production/cryofluid-mixer-bottom.png +++ b/mindus/assets/blocks/production/cryofluid-mixer-bottom.png diff --git a/mindus/assets/blocks/production/cryofluid-mixer.png b/mindus/assets/blocks/production/cryofluid-mixer.png Binary files differnew file mode 100644 index 0000000..43ed388 --- /dev/null +++ b/mindus/assets/blocks/production/cryofluid-mixer.png diff --git a/mindus/assets/blocks/production/cultivator.png b/mindus/assets/blocks/production/cultivator.png Binary files differnew file mode 100644 index 0000000..805253c --- /dev/null +++ b/mindus/assets/blocks/production/cultivator.png diff --git a/mindus/assets/blocks/production/cyanogen-synthesizer-bottom.png b/mindus/assets/blocks/production/cyanogen-synthesizer-bottom.png Binary files differnew file mode 100644 index 0000000..91824e3 --- /dev/null +++ b/mindus/assets/blocks/production/cyanogen-synthesizer-bottom.png diff --git a/mindus/assets/blocks/production/cyanogen-synthesizer.png b/mindus/assets/blocks/production/cyanogen-synthesizer.png Binary files differnew file mode 100644 index 0000000..3cae436 --- /dev/null +++ b/mindus/assets/blocks/production/cyanogen-synthesizer.png diff --git a/mindus/assets/blocks/production/disassembler-bottom.png b/mindus/assets/blocks/production/disassembler-bottom.png Binary files differnew file mode 100644 index 0000000..e12a0c6 --- /dev/null +++ b/mindus/assets/blocks/production/disassembler-bottom.png diff --git a/mindus/assets/blocks/production/disassembler.png b/mindus/assets/blocks/production/disassembler.png Binary files differnew file mode 100644 index 0000000..5a432bf --- /dev/null +++ b/mindus/assets/blocks/production/disassembler.png diff --git a/mindus/assets/blocks/production/electric-heater-top1.png b/mindus/assets/blocks/production/electric-heater-top1.png Binary files differnew file mode 100644 index 0000000..12cf9db --- /dev/null +++ b/mindus/assets/blocks/production/electric-heater-top1.png diff --git a/mindus/assets/blocks/production/electric-heater-top2.png b/mindus/assets/blocks/production/electric-heater-top2.png Binary files differnew file mode 100644 index 0000000..f4f84ab --- /dev/null +++ b/mindus/assets/blocks/production/electric-heater-top2.png diff --git a/mindus/assets/blocks/production/electric-heater.png b/mindus/assets/blocks/production/electric-heater.png Binary files differnew file mode 100644 index 0000000..70637d7 --- /dev/null +++ b/mindus/assets/blocks/production/electric-heater.png diff --git a/mindus/assets/blocks/production/electrolyzer-bottom.png b/mindus/assets/blocks/production/electrolyzer-bottom.png Binary files differnew file mode 100644 index 0000000..e133e4e --- /dev/null +++ b/mindus/assets/blocks/production/electrolyzer-bottom.png diff --git a/assets/blocks/production/electrolyzer-hydrogen-output1.png b/mindus/assets/blocks/production/electrolyzer-hydrogen-output1.png Binary files differindex defb12c..defb12c 100644 --- a/assets/blocks/production/electrolyzer-hydrogen-output1.png +++ b/mindus/assets/blocks/production/electrolyzer-hydrogen-output1.png diff --git a/assets/blocks/production/electrolyzer-hydrogen-output2.png b/mindus/assets/blocks/production/electrolyzer-hydrogen-output2.png Binary files differindex b62e50c..b62e50c 100644 --- a/assets/blocks/production/electrolyzer-hydrogen-output2.png +++ b/mindus/assets/blocks/production/electrolyzer-hydrogen-output2.png diff --git a/assets/blocks/production/electrolyzer-ozone-output1.png b/mindus/assets/blocks/production/electrolyzer-ozone-output1.png Binary files differindex 6601210..6601210 100644 --- a/assets/blocks/production/electrolyzer-ozone-output1.png +++ b/mindus/assets/blocks/production/electrolyzer-ozone-output1.png diff --git a/assets/blocks/production/electrolyzer-ozone-output2.png b/mindus/assets/blocks/production/electrolyzer-ozone-output2.png Binary files differindex f8a5a9b..f8a5a9b 100644 --- a/assets/blocks/production/electrolyzer-ozone-output2.png +++ b/mindus/assets/blocks/production/electrolyzer-ozone-output2.png diff --git a/mindus/assets/blocks/production/electrolyzer.png b/mindus/assets/blocks/production/electrolyzer.png Binary files differnew file mode 100644 index 0000000..272184f --- /dev/null +++ b/mindus/assets/blocks/production/electrolyzer.png diff --git a/assets/blocks/production/graphite-press.png b/mindus/assets/blocks/production/graphite-press.png Binary files differindex a356104..6f965a0 100644 --- a/assets/blocks/production/graphite-press.png +++ b/mindus/assets/blocks/production/graphite-press.png diff --git a/mindus/assets/blocks/production/heat-reactor-top1.png b/mindus/assets/blocks/production/heat-reactor-top1.png Binary files differnew file mode 100644 index 0000000..b9648a8 --- /dev/null +++ b/mindus/assets/blocks/production/heat-reactor-top1.png diff --git a/mindus/assets/blocks/production/heat-reactor-top2.png b/mindus/assets/blocks/production/heat-reactor-top2.png Binary files differnew file mode 100644 index 0000000..f0415fd --- /dev/null +++ b/mindus/assets/blocks/production/heat-reactor-top2.png diff --git a/mindus/assets/blocks/production/heat-reactor.png b/mindus/assets/blocks/production/heat-reactor.png Binary files differnew file mode 100644 index 0000000..4f5c72d --- /dev/null +++ b/mindus/assets/blocks/production/heat-reactor.png diff --git a/assets/blocks/production/heat-redirector-top1.png b/mindus/assets/blocks/production/heat-redirector-top1.png Binary files differindex b0610a9..70fd7f6 100644 --- a/assets/blocks/production/heat-redirector-top1.png +++ b/mindus/assets/blocks/production/heat-redirector-top1.png diff --git a/mindus/assets/blocks/production/heat-redirector-top2.png b/mindus/assets/blocks/production/heat-redirector-top2.png Binary files differnew file mode 100644 index 0000000..8f554e8 --- /dev/null +++ b/mindus/assets/blocks/production/heat-redirector-top2.png diff --git a/mindus/assets/blocks/production/heat-redirector.png b/mindus/assets/blocks/production/heat-redirector.png Binary files differnew file mode 100644 index 0000000..65ea982 --- /dev/null +++ b/mindus/assets/blocks/production/heat-redirector.png diff --git a/mindus/assets/blocks/production/heat-router-top1.png b/mindus/assets/blocks/production/heat-router-top1.png Binary files differnew file mode 100644 index 0000000..27bf1ca --- /dev/null +++ b/mindus/assets/blocks/production/heat-router-top1.png diff --git a/assets/blocks/production/heat-router-top2.png b/mindus/assets/blocks/production/heat-router-top2.png Binary files differindex c592618..c592618 100644 --- a/assets/blocks/production/heat-router-top2.png +++ b/mindus/assets/blocks/production/heat-router-top2.png diff --git a/mindus/assets/blocks/production/heat-router.png b/mindus/assets/blocks/production/heat-router.png Binary files differnew file mode 100644 index 0000000..bd22dfe --- /dev/null +++ b/mindus/assets/blocks/production/heat-router.png diff --git a/assets/blocks/production/heat-source-top1.png b/mindus/assets/blocks/production/heat-source-top1.png Binary files differindex 3f53d54..3f53d54 100644 --- a/assets/blocks/production/heat-source-top1.png +++ b/mindus/assets/blocks/production/heat-source-top1.png diff --git a/assets/blocks/production/heat-source-top2.png b/mindus/assets/blocks/production/heat-source-top2.png Binary files differindex 523d20f..523d20f 100644 --- a/assets/blocks/production/heat-source-top2.png +++ b/mindus/assets/blocks/production/heat-source-top2.png diff --git a/mindus/assets/blocks/production/heat-source.png b/mindus/assets/blocks/production/heat-source.png Binary files differnew file mode 100644 index 0000000..facde20 --- /dev/null +++ b/mindus/assets/blocks/production/heat-source.png diff --git a/mindus/assets/blocks/production/incinerator.png b/mindus/assets/blocks/production/incinerator.png Binary files differnew file mode 100644 index 0000000..7251cc1 --- /dev/null +++ b/mindus/assets/blocks/production/incinerator.png diff --git a/mindus/assets/blocks/production/kiln.png b/mindus/assets/blocks/production/kiln.png Binary files differnew file mode 100644 index 0000000..7fb4dcb --- /dev/null +++ b/mindus/assets/blocks/production/kiln.png diff --git a/assets/blocks/production/melter-bottom.png b/mindus/assets/blocks/production/melter-bottom.png Binary files differindex 380776f..380776f 100644 --- a/assets/blocks/production/melter-bottom.png +++ b/mindus/assets/blocks/production/melter-bottom.png diff --git a/mindus/assets/blocks/production/melter.png b/mindus/assets/blocks/production/melter.png Binary files differnew file mode 100644 index 0000000..3ff8633 --- /dev/null +++ b/mindus/assets/blocks/production/melter.png diff --git a/mindus/assets/blocks/production/multi-press.png b/mindus/assets/blocks/production/multi-press.png Binary files differnew file mode 100644 index 0000000..46d7ac8 --- /dev/null +++ b/mindus/assets/blocks/production/multi-press.png diff --git a/assets/blocks/production/oxidation-chamber-liquid.png b/mindus/assets/blocks/production/oxidation-chamber-liquid.png Binary files differindex 84098de..84098de 100644 --- a/assets/blocks/production/oxidation-chamber-liquid.png +++ b/mindus/assets/blocks/production/oxidation-chamber-liquid.png diff --git a/mindus/assets/blocks/production/oxidation-chamber-top1.png b/mindus/assets/blocks/production/oxidation-chamber-top1.png Binary files differnew file mode 100644 index 0000000..c4fbf98 --- /dev/null +++ b/mindus/assets/blocks/production/oxidation-chamber-top1.png diff --git a/mindus/assets/blocks/production/oxidation-chamber-top2.png b/mindus/assets/blocks/production/oxidation-chamber-top2.png Binary files differnew file mode 100644 index 0000000..281930b --- /dev/null +++ b/mindus/assets/blocks/production/oxidation-chamber-top2.png diff --git a/mindus/assets/blocks/production/oxidation-chamber.png b/mindus/assets/blocks/production/oxidation-chamber.png Binary files differnew file mode 100644 index 0000000..9c58748 --- /dev/null +++ b/mindus/assets/blocks/production/oxidation-chamber.png diff --git a/mindus/assets/blocks/production/phase-heater-top1.png b/mindus/assets/blocks/production/phase-heater-top1.png Binary files differnew file mode 100644 index 0000000..c0f2131 --- /dev/null +++ b/mindus/assets/blocks/production/phase-heater-top1.png diff --git a/mindus/assets/blocks/production/phase-heater-top2.png b/mindus/assets/blocks/production/phase-heater-top2.png Binary files differnew file mode 100644 index 0000000..f03df8d --- /dev/null +++ b/mindus/assets/blocks/production/phase-heater-top2.png diff --git a/mindus/assets/blocks/production/phase-heater.png b/mindus/assets/blocks/production/phase-heater.png Binary files differnew file mode 100644 index 0000000..4b3a398 --- /dev/null +++ b/mindus/assets/blocks/production/phase-heater.png diff --git a/mindus/assets/blocks/production/phase-synthesizer.png b/mindus/assets/blocks/production/phase-synthesizer.png Binary files differnew file mode 100644 index 0000000..c69129e --- /dev/null +++ b/mindus/assets/blocks/production/phase-synthesizer.png diff --git a/mindus/assets/blocks/production/phase-weaver.png b/mindus/assets/blocks/production/phase-weaver.png Binary files differnew file mode 100644 index 0000000..8d76b9a --- /dev/null +++ b/mindus/assets/blocks/production/phase-weaver.png diff --git a/mindus/assets/blocks/production/plastanium-compressor.png b/mindus/assets/blocks/production/plastanium-compressor.png Binary files differnew file mode 100644 index 0000000..eebc615 --- /dev/null +++ b/mindus/assets/blocks/production/plastanium-compressor.png diff --git a/mindus/assets/blocks/production/pulverizer.png b/mindus/assets/blocks/production/pulverizer.png Binary files differnew file mode 100644 index 0000000..b2ef8b6 --- /dev/null +++ b/mindus/assets/blocks/production/pulverizer.png diff --git a/mindus/assets/blocks/production/pyratite-mixer.png b/mindus/assets/blocks/production/pyratite-mixer.png Binary files differnew file mode 100644 index 0000000..0f74418 --- /dev/null +++ b/mindus/assets/blocks/production/pyratite-mixer.png diff --git a/mindus/assets/blocks/production/separator.png b/mindus/assets/blocks/production/separator.png Binary files differnew file mode 100644 index 0000000..d7de549 --- /dev/null +++ b/mindus/assets/blocks/production/separator.png diff --git a/mindus/assets/blocks/production/silicon-arc-furnace.png b/mindus/assets/blocks/production/silicon-arc-furnace.png Binary files differnew file mode 100644 index 0000000..e3debd7 --- /dev/null +++ b/mindus/assets/blocks/production/silicon-arc-furnace.png diff --git a/mindus/assets/blocks/production/silicon-crucible.png b/mindus/assets/blocks/production/silicon-crucible.png Binary files differnew file mode 100644 index 0000000..80f11bb --- /dev/null +++ b/mindus/assets/blocks/production/silicon-crucible.png diff --git a/mindus/assets/blocks/production/silicon-smelter.png b/mindus/assets/blocks/production/silicon-smelter.png Binary files differnew file mode 100644 index 0000000..915d206 --- /dev/null +++ b/mindus/assets/blocks/production/silicon-smelter.png diff --git a/mindus/assets/blocks/production/slag-centrifuge.png b/mindus/assets/blocks/production/slag-centrifuge.png Binary files differnew file mode 100644 index 0000000..80c5220 --- /dev/null +++ b/mindus/assets/blocks/production/slag-centrifuge.png diff --git a/mindus/assets/blocks/production/slag-heater-bottom.png b/mindus/assets/blocks/production/slag-heater-bottom.png Binary files differnew file mode 100644 index 0000000..5966a6c --- /dev/null +++ b/mindus/assets/blocks/production/slag-heater-bottom.png diff --git a/assets/blocks/production/slag-heater-top1.png b/mindus/assets/blocks/production/slag-heater-top1.png Binary files differindex 72ab2df..72ab2df 100644 --- a/assets/blocks/production/slag-heater-top1.png +++ b/mindus/assets/blocks/production/slag-heater-top1.png diff --git a/assets/blocks/production/slag-heater-top2.png b/mindus/assets/blocks/production/slag-heater-top2.png Binary files differindex 4d21c9e..4d21c9e 100644 --- a/assets/blocks/production/slag-heater-top2.png +++ b/mindus/assets/blocks/production/slag-heater-top2.png diff --git a/mindus/assets/blocks/production/slag-heater.png b/mindus/assets/blocks/production/slag-heater.png Binary files differnew file mode 100644 index 0000000..7f997f9 --- /dev/null +++ b/mindus/assets/blocks/production/slag-heater.png diff --git a/mindus/assets/blocks/production/slag-incinerator-liquid.png b/mindus/assets/blocks/production/slag-incinerator-liquid.png Binary files differnew file mode 100644 index 0000000..3f4b8d4 --- /dev/null +++ b/mindus/assets/blocks/production/slag-incinerator-liquid.png diff --git a/mindus/assets/blocks/production/slag-incinerator.png b/mindus/assets/blocks/production/slag-incinerator.png Binary files differnew file mode 100644 index 0000000..ffa2be3 --- /dev/null +++ b/mindus/assets/blocks/production/slag-incinerator.png diff --git a/mindus/assets/blocks/production/small-heat-redirector-top1.png b/mindus/assets/blocks/production/small-heat-redirector-top1.png Binary files differnew file mode 100644 index 0000000..51da879 --- /dev/null +++ b/mindus/assets/blocks/production/small-heat-redirector-top1.png diff --git a/mindus/assets/blocks/production/small-heat-redirector-top2.png b/mindus/assets/blocks/production/small-heat-redirector-top2.png Binary files differnew file mode 100644 index 0000000..775fac4 --- /dev/null +++ b/mindus/assets/blocks/production/small-heat-redirector-top2.png diff --git a/mindus/assets/blocks/production/small-heat-redirector.png b/mindus/assets/blocks/production/small-heat-redirector.png Binary files differnew file mode 100644 index 0000000..9b98756 --- /dev/null +++ b/mindus/assets/blocks/production/small-heat-redirector.png diff --git a/mindus/assets/blocks/production/spore-press.png b/mindus/assets/blocks/production/spore-press.png Binary files differnew file mode 100644 index 0000000..2fdfa23 --- /dev/null +++ b/mindus/assets/blocks/production/spore-press.png diff --git a/mindus/assets/blocks/production/surge-crucible-bottom.png b/mindus/assets/blocks/production/surge-crucible-bottom.png Binary files differnew file mode 100644 index 0000000..4c1b11c --- /dev/null +++ b/mindus/assets/blocks/production/surge-crucible-bottom.png diff --git a/mindus/assets/blocks/production/surge-crucible-liquid.png b/mindus/assets/blocks/production/surge-crucible-liquid.png Binary files differnew file mode 100644 index 0000000..7579101 --- /dev/null +++ b/mindus/assets/blocks/production/surge-crucible-liquid.png diff --git a/mindus/assets/blocks/production/surge-crucible.png b/mindus/assets/blocks/production/surge-crucible.png Binary files differnew file mode 100644 index 0000000..5479202 --- /dev/null +++ b/mindus/assets/blocks/production/surge-crucible.png diff --git a/mindus/assets/blocks/production/surge-smelter.png b/mindus/assets/blocks/production/surge-smelter.png Binary files differnew file mode 100644 index 0000000..9188278 --- /dev/null +++ b/mindus/assets/blocks/production/surge-smelter.png diff --git a/assets/blocks/storage/container-team.png b/mindus/assets/blocks/storage/container-team.png Binary files differindex 3aa6105..3aa6105 100644 --- a/assets/blocks/storage/container-team.png +++ b/mindus/assets/blocks/storage/container-team.png diff --git a/assets/blocks/storage/container.png b/mindus/assets/blocks/storage/container.png Binary files differindex ff346df..ff346df 100644 --- a/assets/blocks/storage/container.png +++ b/mindus/assets/blocks/storage/container.png diff --git a/mindus/assets/blocks/storage/core-acropolis-team.png b/mindus/assets/blocks/storage/core-acropolis-team.png Binary files differnew file mode 100644 index 0000000..63b3e38 --- /dev/null +++ b/mindus/assets/blocks/storage/core-acropolis-team.png diff --git a/mindus/assets/blocks/storage/core-acropolis.png b/mindus/assets/blocks/storage/core-acropolis.png Binary files differnew file mode 100644 index 0000000..24cfcb1 --- /dev/null +++ b/mindus/assets/blocks/storage/core-acropolis.png diff --git a/mindus/assets/blocks/storage/core-bastion-team.png b/mindus/assets/blocks/storage/core-bastion-team.png Binary files differnew file mode 100644 index 0000000..5ff4f59 --- /dev/null +++ b/mindus/assets/blocks/storage/core-bastion-team.png diff --git a/mindus/assets/blocks/storage/core-bastion.png b/mindus/assets/blocks/storage/core-bastion.png Binary files differnew file mode 100644 index 0000000..91a45f6 --- /dev/null +++ b/mindus/assets/blocks/storage/core-bastion.png diff --git a/mindus/assets/blocks/storage/core-citadel-team.png b/mindus/assets/blocks/storage/core-citadel-team.png Binary files differnew file mode 100644 index 0000000..0115133 --- /dev/null +++ b/mindus/assets/blocks/storage/core-citadel-team.png diff --git a/mindus/assets/blocks/storage/core-citadel.png b/mindus/assets/blocks/storage/core-citadel.png Binary files differnew file mode 100644 index 0000000..e525927 --- /dev/null +++ b/mindus/assets/blocks/storage/core-citadel.png diff --git a/mindus/assets/blocks/storage/core-foundation-team.png b/mindus/assets/blocks/storage/core-foundation-team.png Binary files differnew file mode 100644 index 0000000..f4b33c6 --- /dev/null +++ b/mindus/assets/blocks/storage/core-foundation-team.png diff --git a/mindus/assets/blocks/storage/core-foundation.png b/mindus/assets/blocks/storage/core-foundation.png Binary files differnew file mode 100644 index 0000000..05fc9ed --- /dev/null +++ b/mindus/assets/blocks/storage/core-foundation.png diff --git a/mindus/assets/blocks/storage/core-nucleus-team.png b/mindus/assets/blocks/storage/core-nucleus-team.png Binary files differnew file mode 100644 index 0000000..89d975b --- /dev/null +++ b/mindus/assets/blocks/storage/core-nucleus-team.png diff --git a/assets/blocks/storage/core-nucleus.png b/mindus/assets/blocks/storage/core-nucleus.png Binary files differindex 59394e4..59394e4 100644 --- a/assets/blocks/storage/core-nucleus.png +++ b/mindus/assets/blocks/storage/core-nucleus.png diff --git a/mindus/assets/blocks/storage/core-shard-team.png b/mindus/assets/blocks/storage/core-shard-team.png Binary files differnew file mode 100644 index 0000000..f2ffa19 --- /dev/null +++ b/mindus/assets/blocks/storage/core-shard-team.png diff --git a/mindus/assets/blocks/storage/core-shard.png b/mindus/assets/blocks/storage/core-shard.png Binary files differnew file mode 100644 index 0000000..81ee21d --- /dev/null +++ b/mindus/assets/blocks/storage/core-shard.png diff --git a/mindus/assets/blocks/storage/reinforced-container-team.png b/mindus/assets/blocks/storage/reinforced-container-team.png Binary files differnew file mode 100644 index 0000000..032d615 --- /dev/null +++ b/mindus/assets/blocks/storage/reinforced-container-team.png diff --git a/mindus/assets/blocks/storage/reinforced-container.png b/mindus/assets/blocks/storage/reinforced-container.png Binary files differnew file mode 100644 index 0000000..c7933ef --- /dev/null +++ b/mindus/assets/blocks/storage/reinforced-container.png diff --git a/assets/blocks/storage/reinforced-vault-team.png b/mindus/assets/blocks/storage/reinforced-vault-team.png Binary files differindex 429e1e3..429e1e3 100644 --- a/assets/blocks/storage/reinforced-vault-team.png +++ b/mindus/assets/blocks/storage/reinforced-vault-team.png diff --git a/mindus/assets/blocks/storage/reinforced-vault.png b/mindus/assets/blocks/storage/reinforced-vault.png Binary files differnew file mode 100644 index 0000000..108cd16 --- /dev/null +++ b/mindus/assets/blocks/storage/reinforced-vault.png diff --git a/mindus/assets/blocks/storage/unloader-center.png b/mindus/assets/blocks/storage/unloader-center.png Binary files differnew file mode 100644 index 0000000..3a8220b --- /dev/null +++ b/mindus/assets/blocks/storage/unloader-center.png diff --git a/mindus/assets/blocks/storage/unloader.png b/mindus/assets/blocks/storage/unloader.png Binary files differnew file mode 100644 index 0000000..6020a6f --- /dev/null +++ b/mindus/assets/blocks/storage/unloader.png diff --git a/mindus/assets/blocks/storage/vault-team.png b/mindus/assets/blocks/storage/vault-team.png Binary files differnew file mode 100644 index 0000000..e6a76aa --- /dev/null +++ b/mindus/assets/blocks/storage/vault-team.png diff --git a/assets/blocks/storage/vault.png b/mindus/assets/blocks/storage/vault.png Binary files differindex 43eda41..43eda41 100644 --- a/assets/blocks/storage/vault.png +++ b/mindus/assets/blocks/storage/vault.png diff --git a/mindus/assets/blocks/turrets/afflict.png b/mindus/assets/blocks/turrets/afflict.png Binary files differnew file mode 100644 index 0000000..36a7b05 --- /dev/null +++ b/mindus/assets/blocks/turrets/afflict.png diff --git a/mindus/assets/blocks/turrets/arc.png b/mindus/assets/blocks/turrets/arc.png Binary files differnew file mode 100644 index 0000000..ae233bb --- /dev/null +++ b/mindus/assets/blocks/turrets/arc.png diff --git a/mindus/assets/blocks/turrets/breach.png b/mindus/assets/blocks/turrets/breach.png Binary files differnew file mode 100644 index 0000000..2db1e45 --- /dev/null +++ b/mindus/assets/blocks/turrets/breach.png diff --git a/mindus/assets/blocks/turrets/cyclone.png b/mindus/assets/blocks/turrets/cyclone.png Binary files differnew file mode 100644 index 0000000..1681eb2 --- /dev/null +++ b/mindus/assets/blocks/turrets/cyclone.png diff --git a/mindus/assets/blocks/turrets/diffuse.png b/mindus/assets/blocks/turrets/diffuse.png Binary files differnew file mode 100644 index 0000000..41d1eab --- /dev/null +++ b/mindus/assets/blocks/turrets/diffuse.png diff --git a/mindus/assets/blocks/turrets/disperse.png b/mindus/assets/blocks/turrets/disperse.png Binary files differnew file mode 100644 index 0000000..45b7073 --- /dev/null +++ b/mindus/assets/blocks/turrets/disperse.png diff --git a/mindus/assets/blocks/turrets/duo.png b/mindus/assets/blocks/turrets/duo.png Binary files differnew file mode 100644 index 0000000..22dbab0 --- /dev/null +++ b/mindus/assets/blocks/turrets/duo.png diff --git a/mindus/assets/blocks/turrets/foreshadow.png b/mindus/assets/blocks/turrets/foreshadow.png Binary files differnew file mode 100644 index 0000000..e7b4a7d --- /dev/null +++ b/mindus/assets/blocks/turrets/foreshadow.png diff --git a/mindus/assets/blocks/turrets/fuse.png b/mindus/assets/blocks/turrets/fuse.png Binary files differnew file mode 100644 index 0000000..8091476 --- /dev/null +++ b/mindus/assets/blocks/turrets/fuse.png diff --git a/mindus/assets/blocks/turrets/hail.png b/mindus/assets/blocks/turrets/hail.png Binary files differnew file mode 100644 index 0000000..7e6cff8 --- /dev/null +++ b/mindus/assets/blocks/turrets/hail.png diff --git a/mindus/assets/blocks/turrets/lancer.png b/mindus/assets/blocks/turrets/lancer.png Binary files differnew file mode 100644 index 0000000..872e9b1 --- /dev/null +++ b/mindus/assets/blocks/turrets/lancer.png diff --git a/mindus/assets/blocks/turrets/lustre.png b/mindus/assets/blocks/turrets/lustre.png Binary files differnew file mode 100644 index 0000000..680f4bc --- /dev/null +++ b/mindus/assets/blocks/turrets/lustre.png diff --git a/mindus/assets/blocks/turrets/malign.png b/mindus/assets/blocks/turrets/malign.png Binary files differnew file mode 100644 index 0000000..267729b --- /dev/null +++ b/mindus/assets/blocks/turrets/malign.png diff --git a/mindus/assets/blocks/turrets/meltdown.png b/mindus/assets/blocks/turrets/meltdown.png Binary files differnew file mode 100644 index 0000000..f60d55f --- /dev/null +++ b/mindus/assets/blocks/turrets/meltdown.png diff --git a/mindus/assets/blocks/turrets/parallax.png b/mindus/assets/blocks/turrets/parallax.png Binary files differnew file mode 100644 index 0000000..5616f34 --- /dev/null +++ b/mindus/assets/blocks/turrets/parallax.png diff --git a/mindus/assets/blocks/turrets/ripple.png b/mindus/assets/blocks/turrets/ripple.png Binary files differnew file mode 100644 index 0000000..cd86d4b --- /dev/null +++ b/mindus/assets/blocks/turrets/ripple.png diff --git a/mindus/assets/blocks/turrets/salvo.png b/mindus/assets/blocks/turrets/salvo.png Binary files differnew file mode 100644 index 0000000..3efea07 --- /dev/null +++ b/mindus/assets/blocks/turrets/salvo.png diff --git a/mindus/assets/blocks/turrets/scathe.png b/mindus/assets/blocks/turrets/scathe.png Binary files differnew file mode 100644 index 0000000..aafddc4 --- /dev/null +++ b/mindus/assets/blocks/turrets/scathe.png diff --git a/mindus/assets/blocks/turrets/scatter.png b/mindus/assets/blocks/turrets/scatter.png Binary files differnew file mode 100644 index 0000000..95d411f --- /dev/null +++ b/mindus/assets/blocks/turrets/scatter.png diff --git a/mindus/assets/blocks/turrets/scorch.png b/mindus/assets/blocks/turrets/scorch.png Binary files differnew file mode 100644 index 0000000..8629eb8 --- /dev/null +++ b/mindus/assets/blocks/turrets/scorch.png diff --git a/mindus/assets/blocks/turrets/segment.png b/mindus/assets/blocks/turrets/segment.png Binary files differnew file mode 100644 index 0000000..1d83425 --- /dev/null +++ b/mindus/assets/blocks/turrets/segment.png diff --git a/mindus/assets/blocks/turrets/smite.png b/mindus/assets/blocks/turrets/smite.png Binary files differnew file mode 100644 index 0000000..4f5164f --- /dev/null +++ b/mindus/assets/blocks/turrets/smite.png diff --git a/mindus/assets/blocks/turrets/spectre.png b/mindus/assets/blocks/turrets/spectre.png Binary files differnew file mode 100644 index 0000000..e8de5dc --- /dev/null +++ b/mindus/assets/blocks/turrets/spectre.png diff --git a/mindus/assets/blocks/turrets/sublimate.png b/mindus/assets/blocks/turrets/sublimate.png Binary files differnew file mode 100644 index 0000000..8765018 --- /dev/null +++ b/mindus/assets/blocks/turrets/sublimate.png diff --git a/mindus/assets/blocks/turrets/swarmer.png b/mindus/assets/blocks/turrets/swarmer.png Binary files differnew file mode 100644 index 0000000..3408f0a --- /dev/null +++ b/mindus/assets/blocks/turrets/swarmer.png diff --git a/mindus/assets/blocks/turrets/titan.png b/mindus/assets/blocks/turrets/titan.png Binary files differnew file mode 100644 index 0000000..5649f91 --- /dev/null +++ b/mindus/assets/blocks/turrets/titan.png diff --git a/mindus/assets/blocks/turrets/tsunami.png b/mindus/assets/blocks/turrets/tsunami.png Binary files differnew file mode 100644 index 0000000..eea1b10 --- /dev/null +++ b/mindus/assets/blocks/turrets/tsunami.png diff --git a/mindus/assets/blocks/turrets/wave.png b/mindus/assets/blocks/turrets/wave.png Binary files differnew file mode 100644 index 0000000..ac6aa6f --- /dev/null +++ b/mindus/assets/blocks/turrets/wave.png diff --git a/mindus/assets/blocks/units/additive-reconstructor-top.png b/mindus/assets/blocks/units/additive-reconstructor-top.png Binary files differnew file mode 100644 index 0000000..4bebb1f --- /dev/null +++ b/mindus/assets/blocks/units/additive-reconstructor-top.png diff --git a/mindus/assets/blocks/units/additive-reconstructor.png b/mindus/assets/blocks/units/additive-reconstructor.png Binary files differnew file mode 100644 index 0000000..7adf765 --- /dev/null +++ b/mindus/assets/blocks/units/additive-reconstructor.png diff --git a/mindus/assets/blocks/units/air-factory.png b/mindus/assets/blocks/units/air-factory.png Binary files differnew file mode 100644 index 0000000..457c7b7 --- /dev/null +++ b/mindus/assets/blocks/units/air-factory.png diff --git a/mindus/assets/blocks/units/basic-assembler-module-side1.png b/mindus/assets/blocks/units/basic-assembler-module-side1.png Binary files differnew file mode 100644 index 0000000..ec16f60 --- /dev/null +++ b/mindus/assets/blocks/units/basic-assembler-module-side1.png diff --git a/mindus/assets/blocks/units/basic-assembler-module-side2.png b/mindus/assets/blocks/units/basic-assembler-module-side2.png Binary files differnew file mode 100644 index 0000000..fec9314 --- /dev/null +++ b/mindus/assets/blocks/units/basic-assembler-module-side2.png diff --git a/mindus/assets/blocks/units/basic-assembler-module.png b/mindus/assets/blocks/units/basic-assembler-module.png Binary files differnew file mode 100644 index 0000000..cf6d2a7 --- /dev/null +++ b/mindus/assets/blocks/units/basic-assembler-module.png diff --git a/mindus/assets/blocks/units/exponential-reconstructor-top.png b/mindus/assets/blocks/units/exponential-reconstructor-top.png Binary files differnew file mode 100644 index 0000000..4b8429d --- /dev/null +++ b/mindus/assets/blocks/units/exponential-reconstructor-top.png diff --git a/mindus/assets/blocks/units/exponential-reconstructor.png b/mindus/assets/blocks/units/exponential-reconstructor.png Binary files differnew file mode 100644 index 0000000..45fc0ed --- /dev/null +++ b/mindus/assets/blocks/units/exponential-reconstructor.png diff --git a/mindus/assets/blocks/units/ground-factory.png b/mindus/assets/blocks/units/ground-factory.png Binary files differnew file mode 100644 index 0000000..17c34c1 --- /dev/null +++ b/mindus/assets/blocks/units/ground-factory.png diff --git a/mindus/assets/blocks/units/mech-assembler-side1.png b/mindus/assets/blocks/units/mech-assembler-side1.png Binary files differnew file mode 100644 index 0000000..670ea14 --- /dev/null +++ b/mindus/assets/blocks/units/mech-assembler-side1.png diff --git a/mindus/assets/blocks/units/mech-assembler-side2.png b/mindus/assets/blocks/units/mech-assembler-side2.png Binary files differnew file mode 100644 index 0000000..9aa22ee --- /dev/null +++ b/mindus/assets/blocks/units/mech-assembler-side2.png diff --git a/mindus/assets/blocks/units/mech-assembler-top.png b/mindus/assets/blocks/units/mech-assembler-top.png Binary files differnew file mode 100644 index 0000000..a24db54 --- /dev/null +++ b/mindus/assets/blocks/units/mech-assembler-top.png diff --git a/mindus/assets/blocks/units/mech-assembler.png b/mindus/assets/blocks/units/mech-assembler.png Binary files differnew file mode 100644 index 0000000..523a036 --- /dev/null +++ b/mindus/assets/blocks/units/mech-assembler.png diff --git a/mindus/assets/blocks/units/mech-fabricator-top.png b/mindus/assets/blocks/units/mech-fabricator-top.png Binary files differnew file mode 100644 index 0000000..38608fd --- /dev/null +++ b/mindus/assets/blocks/units/mech-fabricator-top.png diff --git a/mindus/assets/blocks/units/mech-fabricator.png b/mindus/assets/blocks/units/mech-fabricator.png Binary files differnew file mode 100644 index 0000000..5095ced --- /dev/null +++ b/mindus/assets/blocks/units/mech-fabricator.png diff --git a/mindus/assets/blocks/units/mech-refabricator-top.png b/mindus/assets/blocks/units/mech-refabricator-top.png Binary files differnew file mode 100644 index 0000000..96ed2d6 --- /dev/null +++ b/mindus/assets/blocks/units/mech-refabricator-top.png diff --git a/mindus/assets/blocks/units/mech-refabricator.png b/mindus/assets/blocks/units/mech-refabricator.png Binary files differnew file mode 100644 index 0000000..919d506 --- /dev/null +++ b/mindus/assets/blocks/units/mech-refabricator.png diff --git a/mindus/assets/blocks/units/multiplicative-reconstructor-top.png b/mindus/assets/blocks/units/multiplicative-reconstructor-top.png Binary files differnew file mode 100644 index 0000000..fafb3d1 --- /dev/null +++ b/mindus/assets/blocks/units/multiplicative-reconstructor-top.png diff --git a/mindus/assets/blocks/units/multiplicative-reconstructor.png b/mindus/assets/blocks/units/multiplicative-reconstructor.png Binary files differnew file mode 100644 index 0000000..01325bb --- /dev/null +++ b/mindus/assets/blocks/units/multiplicative-reconstructor.png diff --git a/mindus/assets/blocks/units/naval-factory.png b/mindus/assets/blocks/units/naval-factory.png Binary files differnew file mode 100644 index 0000000..1d28a1c --- /dev/null +++ b/mindus/assets/blocks/units/naval-factory.png diff --git a/mindus/assets/blocks/units/prime-refabricator-top.png b/mindus/assets/blocks/units/prime-refabricator-top.png Binary files differnew file mode 100644 index 0000000..96e98f5 --- /dev/null +++ b/mindus/assets/blocks/units/prime-refabricator-top.png diff --git a/mindus/assets/blocks/units/prime-refabricator.png b/mindus/assets/blocks/units/prime-refabricator.png Binary files differnew file mode 100644 index 0000000..3211f45 --- /dev/null +++ b/mindus/assets/blocks/units/prime-refabricator.png diff --git a/mindus/assets/blocks/units/repair-point.png b/mindus/assets/blocks/units/repair-point.png Binary files differnew file mode 100644 index 0000000..30f82c6 --- /dev/null +++ b/mindus/assets/blocks/units/repair-point.png diff --git a/mindus/assets/blocks/units/repair-turret.png b/mindus/assets/blocks/units/repair-turret.png Binary files differnew file mode 100644 index 0000000..2ff7843 --- /dev/null +++ b/mindus/assets/blocks/units/repair-turret.png diff --git a/mindus/assets/blocks/units/ship-assembler-side1.png b/mindus/assets/blocks/units/ship-assembler-side1.png Binary files differnew file mode 100644 index 0000000..7ae1060 --- /dev/null +++ b/mindus/assets/blocks/units/ship-assembler-side1.png diff --git a/mindus/assets/blocks/units/ship-assembler-side2.png b/mindus/assets/blocks/units/ship-assembler-side2.png Binary files differnew file mode 100644 index 0000000..5391be4 --- /dev/null +++ b/mindus/assets/blocks/units/ship-assembler-side2.png diff --git a/mindus/assets/blocks/units/ship-assembler-top.png b/mindus/assets/blocks/units/ship-assembler-top.png Binary files differnew file mode 100644 index 0000000..7949283 --- /dev/null +++ b/mindus/assets/blocks/units/ship-assembler-top.png diff --git a/mindus/assets/blocks/units/ship-assembler.png b/mindus/assets/blocks/units/ship-assembler.png Binary files differnew file mode 100644 index 0000000..5fef2a0 --- /dev/null +++ b/mindus/assets/blocks/units/ship-assembler.png diff --git a/mindus/assets/blocks/units/ship-fabricator-top.png b/mindus/assets/blocks/units/ship-fabricator-top.png Binary files differnew file mode 100644 index 0000000..20ae525 --- /dev/null +++ b/mindus/assets/blocks/units/ship-fabricator-top.png diff --git a/mindus/assets/blocks/units/ship-fabricator.png b/mindus/assets/blocks/units/ship-fabricator.png Binary files differnew file mode 100644 index 0000000..3d88ae1 --- /dev/null +++ b/mindus/assets/blocks/units/ship-fabricator.png diff --git a/mindus/assets/blocks/units/ship-refabricator-top.png b/mindus/assets/blocks/units/ship-refabricator-top.png Binary files differnew file mode 100644 index 0000000..08bfb7d --- /dev/null +++ b/mindus/assets/blocks/units/ship-refabricator-top.png diff --git a/mindus/assets/blocks/units/ship-refabricator.png b/mindus/assets/blocks/units/ship-refabricator.png Binary files differnew file mode 100644 index 0000000..bc8e7b1 --- /dev/null +++ b/mindus/assets/blocks/units/ship-refabricator.png diff --git a/mindus/assets/blocks/units/tank-assembler-side1.png b/mindus/assets/blocks/units/tank-assembler-side1.png Binary files differnew file mode 100644 index 0000000..ac67f7b --- /dev/null +++ b/mindus/assets/blocks/units/tank-assembler-side1.png diff --git a/mindus/assets/blocks/units/tank-assembler-side2.png b/mindus/assets/blocks/units/tank-assembler-side2.png Binary files differnew file mode 100644 index 0000000..56df93f --- /dev/null +++ b/mindus/assets/blocks/units/tank-assembler-side2.png diff --git a/mindus/assets/blocks/units/tank-assembler-top.png b/mindus/assets/blocks/units/tank-assembler-top.png Binary files differnew file mode 100644 index 0000000..8301360 --- /dev/null +++ b/mindus/assets/blocks/units/tank-assembler-top.png diff --git a/mindus/assets/blocks/units/tank-assembler.png b/mindus/assets/blocks/units/tank-assembler.png Binary files differnew file mode 100644 index 0000000..0fdcd4f --- /dev/null +++ b/mindus/assets/blocks/units/tank-assembler.png diff --git a/mindus/assets/blocks/units/tank-fabricator-top.png b/mindus/assets/blocks/units/tank-fabricator-top.png Binary files differnew file mode 100644 index 0000000..73984a1 --- /dev/null +++ b/mindus/assets/blocks/units/tank-fabricator-top.png diff --git a/mindus/assets/blocks/units/tank-fabricator.png b/mindus/assets/blocks/units/tank-fabricator.png Binary files differnew file mode 100644 index 0000000..ee0ce46 --- /dev/null +++ b/mindus/assets/blocks/units/tank-fabricator.png diff --git a/mindus/assets/blocks/units/tank-refabricator-top.png b/mindus/assets/blocks/units/tank-refabricator-top.png Binary files differnew file mode 100644 index 0000000..2206ae2 --- /dev/null +++ b/mindus/assets/blocks/units/tank-refabricator-top.png diff --git a/mindus/assets/blocks/units/tank-refabricator.png b/mindus/assets/blocks/units/tank-refabricator.png Binary files differnew file mode 100644 index 0000000..ef43609 --- /dev/null +++ b/mindus/assets/blocks/units/tank-refabricator.png diff --git a/mindus/assets/blocks/units/tetrative-reconstructor-top.png b/mindus/assets/blocks/units/tetrative-reconstructor-top.png Binary files differnew file mode 100644 index 0000000..5675ecc --- /dev/null +++ b/mindus/assets/blocks/units/tetrative-reconstructor-top.png diff --git a/mindus/assets/blocks/units/tetrative-reconstructor.png b/mindus/assets/blocks/units/tetrative-reconstructor.png Binary files differnew file mode 100644 index 0000000..40e1f56 --- /dev/null +++ b/mindus/assets/blocks/units/tetrative-reconstructor.png diff --git a/mindus/assets/blocks/units/unit-cargo-loader.png b/mindus/assets/blocks/units/unit-cargo-loader.png Binary files differnew file mode 100644 index 0000000..883973e --- /dev/null +++ b/mindus/assets/blocks/units/unit-cargo-loader.png diff --git a/mindus/assets/blocks/units/unit-repair-tower.png b/mindus/assets/blocks/units/unit-repair-tower.png Binary files differnew file mode 100644 index 0000000..87abdaa --- /dev/null +++ b/mindus/assets/blocks/units/unit-repair-tower.png diff --git a/mindus/assets/blocks/walls/beryllium-wall-large.png b/mindus/assets/blocks/walls/beryllium-wall-large.png Binary files differnew file mode 100644 index 0000000..c067d99 --- /dev/null +++ b/mindus/assets/blocks/walls/beryllium-wall-large.png diff --git a/mindus/assets/blocks/walls/beryllium-wall.png b/mindus/assets/blocks/walls/beryllium-wall.png Binary files differnew file mode 100644 index 0000000..3fbe9ea --- /dev/null +++ b/mindus/assets/blocks/walls/beryllium-wall.png diff --git a/mindus/assets/blocks/walls/blast-door-open.png b/mindus/assets/blocks/walls/blast-door-open.png Binary files differnew file mode 100644 index 0000000..4b7f59b --- /dev/null +++ b/mindus/assets/blocks/walls/blast-door-open.png diff --git a/mindus/assets/blocks/walls/blast-door.png b/mindus/assets/blocks/walls/blast-door.png Binary files differnew file mode 100644 index 0000000..5f6ac3f --- /dev/null +++ b/mindus/assets/blocks/walls/blast-door.png diff --git a/mindus/assets/blocks/walls/carbide-wall-large.png b/mindus/assets/blocks/walls/carbide-wall-large.png Binary files differnew file mode 100644 index 0000000..a6e21ce --- /dev/null +++ b/mindus/assets/blocks/walls/carbide-wall-large.png diff --git a/mindus/assets/blocks/walls/carbide-wall.png b/mindus/assets/blocks/walls/carbide-wall.png Binary files differnew file mode 100644 index 0000000..ee23407 --- /dev/null +++ b/mindus/assets/blocks/walls/carbide-wall.png diff --git a/assets/blocks/walls/copper-wall-large.png b/mindus/assets/blocks/walls/copper-wall-large.png Binary files differindex 3d4286e..3d4286e 100644 --- a/assets/blocks/walls/copper-wall-large.png +++ b/mindus/assets/blocks/walls/copper-wall-large.png diff --git a/mindus/assets/blocks/walls/copper-wall.png b/mindus/assets/blocks/walls/copper-wall.png Binary files differnew file mode 100644 index 0000000..a9ed4f6 --- /dev/null +++ b/mindus/assets/blocks/walls/copper-wall.png diff --git a/mindus/assets/blocks/walls/door-large-open.png b/mindus/assets/blocks/walls/door-large-open.png Binary files differnew file mode 100644 index 0000000..cfd8cf3 --- /dev/null +++ b/mindus/assets/blocks/walls/door-large-open.png diff --git a/mindus/assets/blocks/walls/door-large.png b/mindus/assets/blocks/walls/door-large.png Binary files differnew file mode 100644 index 0000000..aaaf2c7 --- /dev/null +++ b/mindus/assets/blocks/walls/door-large.png diff --git a/mindus/assets/blocks/walls/door-open.png b/mindus/assets/blocks/walls/door-open.png Binary files differnew file mode 100644 index 0000000..f07b341 --- /dev/null +++ b/mindus/assets/blocks/walls/door-open.png diff --git a/mindus/assets/blocks/walls/door.png b/mindus/assets/blocks/walls/door.png Binary files differnew file mode 100644 index 0000000..e80493c --- /dev/null +++ b/mindus/assets/blocks/walls/door.png diff --git a/mindus/assets/blocks/walls/phase-wall-large.png b/mindus/assets/blocks/walls/phase-wall-large.png Binary files differnew file mode 100644 index 0000000..ced55cf --- /dev/null +++ b/mindus/assets/blocks/walls/phase-wall-large.png diff --git a/mindus/assets/blocks/walls/phase-wall.png b/mindus/assets/blocks/walls/phase-wall.png Binary files differnew file mode 100644 index 0000000..2cc4580 --- /dev/null +++ b/mindus/assets/blocks/walls/phase-wall.png diff --git a/mindus/assets/blocks/walls/plastanium-wall-large.png b/mindus/assets/blocks/walls/plastanium-wall-large.png Binary files differnew file mode 100644 index 0000000..bcd7e44 --- /dev/null +++ b/mindus/assets/blocks/walls/plastanium-wall-large.png diff --git a/mindus/assets/blocks/walls/plastanium-wall.png b/mindus/assets/blocks/walls/plastanium-wall.png Binary files differnew file mode 100644 index 0000000..11038ff --- /dev/null +++ b/mindus/assets/blocks/walls/plastanium-wall.png diff --git a/mindus/assets/blocks/walls/reinforced-surge-wall-large.png b/mindus/assets/blocks/walls/reinforced-surge-wall-large.png Binary files differnew file mode 100644 index 0000000..9a8c943 --- /dev/null +++ b/mindus/assets/blocks/walls/reinforced-surge-wall-large.png diff --git a/mindus/assets/blocks/walls/reinforced-surge-wall.png b/mindus/assets/blocks/walls/reinforced-surge-wall.png Binary files differnew file mode 100644 index 0000000..1777cbb --- /dev/null +++ b/mindus/assets/blocks/walls/reinforced-surge-wall.png diff --git a/assets/blocks/walls/scrap-wall-gigantic.png b/mindus/assets/blocks/walls/scrap-wall-gigantic.png Binary files differindex c503468..c503468 100644 --- a/assets/blocks/walls/scrap-wall-gigantic.png +++ b/mindus/assets/blocks/walls/scrap-wall-gigantic.png diff --git a/mindus/assets/blocks/walls/scrap-wall-huge.png b/mindus/assets/blocks/walls/scrap-wall-huge.png Binary files differnew file mode 100644 index 0000000..a22f775 --- /dev/null +++ b/mindus/assets/blocks/walls/scrap-wall-huge.png diff --git a/mindus/assets/blocks/walls/scrap-wall-large.png b/mindus/assets/blocks/walls/scrap-wall-large.png Binary files differnew file mode 100644 index 0000000..f755c40 --- /dev/null +++ b/mindus/assets/blocks/walls/scrap-wall-large.png diff --git a/mindus/assets/blocks/walls/scrap-wall.png b/mindus/assets/blocks/walls/scrap-wall.png Binary files differnew file mode 100644 index 0000000..84ad269 --- /dev/null +++ b/mindus/assets/blocks/walls/scrap-wall.png diff --git a/assets/blocks/walls/shielded-wall.png b/mindus/assets/blocks/walls/shielded-wall.png Binary files differindex 1c6f453..1c6f453 100644 --- a/assets/blocks/walls/shielded-wall.png +++ b/mindus/assets/blocks/walls/shielded-wall.png diff --git a/mindus/assets/blocks/walls/surge-wall-large.png b/mindus/assets/blocks/walls/surge-wall-large.png Binary files differnew file mode 100644 index 0000000..b83ffce --- /dev/null +++ b/mindus/assets/blocks/walls/surge-wall-large.png diff --git a/mindus/assets/blocks/walls/surge-wall.png b/mindus/assets/blocks/walls/surge-wall.png Binary files differnew file mode 100644 index 0000000..c9f7b1e --- /dev/null +++ b/mindus/assets/blocks/walls/surge-wall.png diff --git a/assets/blocks/walls/thorium-wall-large.png b/mindus/assets/blocks/walls/thorium-wall-large.png Binary files differindex 551f775..551f775 100644 --- a/assets/blocks/walls/thorium-wall-large.png +++ b/mindus/assets/blocks/walls/thorium-wall-large.png diff --git a/mindus/assets/blocks/walls/thorium-wall.png b/mindus/assets/blocks/walls/thorium-wall.png Binary files differnew file mode 100644 index 0000000..0167e34 --- /dev/null +++ b/mindus/assets/blocks/walls/thorium-wall.png diff --git a/mindus/assets/blocks/walls/thruster-top.png b/mindus/assets/blocks/walls/thruster-top.png Binary files differnew file mode 100644 index 0000000..8cbce9b --- /dev/null +++ b/mindus/assets/blocks/walls/thruster-top.png diff --git a/assets/blocks/walls/thruster.png b/mindus/assets/blocks/walls/thruster.png Binary files differindex ec800a0..ec800a0 100644 --- a/assets/blocks/walls/thruster.png +++ b/mindus/assets/blocks/walls/thruster.png diff --git a/assets/blocks/walls/titanium-wall-large.png b/mindus/assets/blocks/walls/titanium-wall-large.png Binary files differindex 6573133..6573133 100644 --- a/assets/blocks/walls/titanium-wall-large.png +++ b/mindus/assets/blocks/walls/titanium-wall-large.png diff --git a/mindus/assets/blocks/walls/titanium-wall.png b/mindus/assets/blocks/walls/titanium-wall.png Binary files differnew file mode 100644 index 0000000..e26c955 --- /dev/null +++ b/mindus/assets/blocks/walls/titanium-wall.png diff --git a/mindus/assets/blocks/walls/tungsten-wall-large.png b/mindus/assets/blocks/walls/tungsten-wall-large.png Binary files differnew file mode 100644 index 0000000..97cc952 --- /dev/null +++ b/mindus/assets/blocks/walls/tungsten-wall-large.png diff --git a/mindus/assets/blocks/walls/tungsten-wall.png b/mindus/assets/blocks/walls/tungsten-wall.png Binary files differnew file mode 100644 index 0000000..774f819 --- /dev/null +++ b/mindus/assets/blocks/walls/tungsten-wall.png diff --git a/mindus/assets/units/aegires.png b/mindus/assets/units/aegires.png Binary files differnew file mode 100644 index 0000000..0b7baf9 --- /dev/null +++ b/mindus/assets/units/aegires.png diff --git a/mindus/assets/units/alpha.png b/mindus/assets/units/alpha.png Binary files differnew file mode 100644 index 0000000..868df0d --- /dev/null +++ b/mindus/assets/units/alpha.png diff --git a/mindus/assets/units/anthicus-missile.png b/mindus/assets/units/anthicus-missile.png Binary files differnew file mode 100644 index 0000000..406dc4b --- /dev/null +++ b/mindus/assets/units/anthicus-missile.png diff --git a/mindus/assets/units/anthicus.png b/mindus/assets/units/anthicus.png Binary files differnew file mode 100644 index 0000000..96e6674 --- /dev/null +++ b/mindus/assets/units/anthicus.png diff --git a/mindus/assets/units/antumbra.png b/mindus/assets/units/antumbra.png Binary files differnew file mode 100644 index 0000000..ae10200 --- /dev/null +++ b/mindus/assets/units/antumbra.png diff --git a/mindus/assets/units/arkyid.png b/mindus/assets/units/arkyid.png Binary files differnew file mode 100644 index 0000000..39ec11e --- /dev/null +++ b/mindus/assets/units/arkyid.png diff --git a/mindus/assets/units/assembly-drone.png b/mindus/assets/units/assembly-drone.png Binary files differnew file mode 100644 index 0000000..bb9104b --- /dev/null +++ b/mindus/assets/units/assembly-drone.png diff --git a/mindus/assets/units/atrax.png b/mindus/assets/units/atrax.png Binary files differnew file mode 100644 index 0000000..5de4da8 --- /dev/null +++ b/mindus/assets/units/atrax.png diff --git a/mindus/assets/units/avert.png b/mindus/assets/units/avert.png Binary files differnew file mode 100644 index 0000000..451e5ee --- /dev/null +++ b/mindus/assets/units/avert.png diff --git a/mindus/assets/units/beta.png b/mindus/assets/units/beta.png Binary files differnew file mode 100644 index 0000000..4739bb8 --- /dev/null +++ b/mindus/assets/units/beta.png diff --git a/mindus/assets/units/bryde.png b/mindus/assets/units/bryde.png Binary files differnew file mode 100644 index 0000000..2b95dc1 --- /dev/null +++ b/mindus/assets/units/bryde.png diff --git a/mindus/assets/units/cleroi.png b/mindus/assets/units/cleroi.png Binary files differnew file mode 100644 index 0000000..8d90617 --- /dev/null +++ b/mindus/assets/units/cleroi.png diff --git a/mindus/assets/units/collaris.png b/mindus/assets/units/collaris.png Binary files differnew file mode 100644 index 0000000..5858a88 --- /dev/null +++ b/mindus/assets/units/collaris.png diff --git a/mindus/assets/units/conquer.png b/mindus/assets/units/conquer.png Binary files differnew file mode 100644 index 0000000..d1d73b6 --- /dev/null +++ b/mindus/assets/units/conquer.png diff --git a/mindus/assets/units/corvus.png b/mindus/assets/units/corvus.png Binary files differnew file mode 100644 index 0000000..84a4c18 --- /dev/null +++ b/mindus/assets/units/corvus.png diff --git a/mindus/assets/units/crawler.png b/mindus/assets/units/crawler.png Binary files differnew file mode 100644 index 0000000..df0b6b0 --- /dev/null +++ b/mindus/assets/units/crawler.png diff --git a/mindus/assets/units/cyerce.png b/mindus/assets/units/cyerce.png Binary files differnew file mode 100644 index 0000000..903fbe3 --- /dev/null +++ b/mindus/assets/units/cyerce.png diff --git a/mindus/assets/units/dagger.png b/mindus/assets/units/dagger.png Binary files differnew file mode 100644 index 0000000..609f158 --- /dev/null +++ b/mindus/assets/units/dagger.png diff --git a/mindus/assets/units/disrupt-missile.png b/mindus/assets/units/disrupt-missile.png Binary files differnew file mode 100644 index 0000000..6d0ad76 --- /dev/null +++ b/mindus/assets/units/disrupt-missile.png diff --git a/mindus/assets/units/disrupt.png b/mindus/assets/units/disrupt.png Binary files differnew file mode 100644 index 0000000..f25c032 --- /dev/null +++ b/mindus/assets/units/disrupt.png diff --git a/mindus/assets/units/eclipse.png b/mindus/assets/units/eclipse.png Binary files differnew file mode 100644 index 0000000..ca644ca --- /dev/null +++ b/mindus/assets/units/eclipse.png diff --git a/mindus/assets/units/elude.png b/mindus/assets/units/elude.png Binary files differnew file mode 100644 index 0000000..09e0de0 --- /dev/null +++ b/mindus/assets/units/elude.png diff --git a/mindus/assets/units/emanate.png b/mindus/assets/units/emanate.png Binary files differnew file mode 100644 index 0000000..e4109fc --- /dev/null +++ b/mindus/assets/units/emanate.png diff --git a/mindus/assets/units/evoke.png b/mindus/assets/units/evoke.png Binary files differnew file mode 100644 index 0000000..891ff30 --- /dev/null +++ b/mindus/assets/units/evoke.png diff --git a/mindus/assets/units/flare.png b/mindus/assets/units/flare.png Binary files differnew file mode 100644 index 0000000..6000f66 --- /dev/null +++ b/mindus/assets/units/flare.png diff --git a/mindus/assets/units/fortress.png b/mindus/assets/units/fortress.png Binary files differnew file mode 100644 index 0000000..bbdf6e1 --- /dev/null +++ b/mindus/assets/units/fortress.png diff --git a/mindus/assets/units/gamma.png b/mindus/assets/units/gamma.png Binary files differnew file mode 100644 index 0000000..bcb08df --- /dev/null +++ b/mindus/assets/units/gamma.png diff --git a/mindus/assets/units/horizon.png b/mindus/assets/units/horizon.png Binary files differnew file mode 100644 index 0000000..11d2739 --- /dev/null +++ b/mindus/assets/units/horizon.png diff --git a/mindus/assets/units/incite.png b/mindus/assets/units/incite.png Binary files differnew file mode 100644 index 0000000..34131f3 --- /dev/null +++ b/mindus/assets/units/incite.png diff --git a/mindus/assets/units/latum.png b/mindus/assets/units/latum.png Binary files differnew file mode 100644 index 0000000..ecba602 --- /dev/null +++ b/mindus/assets/units/latum.png diff --git a/mindus/assets/units/locus.png b/mindus/assets/units/locus.png Binary files differnew file mode 100644 index 0000000..1cb66bf --- /dev/null +++ b/mindus/assets/units/locus.png diff --git a/mindus/assets/units/mace.png b/mindus/assets/units/mace.png Binary files differnew file mode 100644 index 0000000..0b4a6a2 --- /dev/null +++ b/mindus/assets/units/mace.png diff --git a/mindus/assets/units/manifold.png b/mindus/assets/units/manifold.png Binary files differnew file mode 100644 index 0000000..d42d391 --- /dev/null +++ b/mindus/assets/units/manifold.png diff --git a/mindus/assets/units/mega.png b/mindus/assets/units/mega.png Binary files differnew file mode 100644 index 0000000..7f58fab --- /dev/null +++ b/mindus/assets/units/mega.png diff --git a/mindus/assets/units/merui.png b/mindus/assets/units/merui.png Binary files differnew file mode 100644 index 0000000..a28422c --- /dev/null +++ b/mindus/assets/units/merui.png diff --git a/mindus/assets/units/minke.png b/mindus/assets/units/minke.png Binary files differnew file mode 100644 index 0000000..0cc85e7 --- /dev/null +++ b/mindus/assets/units/minke.png diff --git a/mindus/assets/units/mono.png b/mindus/assets/units/mono.png Binary files differnew file mode 100644 index 0000000..533a3ed --- /dev/null +++ b/mindus/assets/units/mono.png diff --git a/mindus/assets/units/navanax.png b/mindus/assets/units/navanax.png Binary files differnew file mode 100644 index 0000000..da64343 --- /dev/null +++ b/mindus/assets/units/navanax.png diff --git a/mindus/assets/units/nova.png b/mindus/assets/units/nova.png Binary files differnew file mode 100644 index 0000000..7ab100d --- /dev/null +++ b/mindus/assets/units/nova.png diff --git a/mindus/assets/units/obviate.png b/mindus/assets/units/obviate.png Binary files differnew file mode 100644 index 0000000..a836265 --- /dev/null +++ b/mindus/assets/units/obviate.png diff --git a/mindus/assets/units/oct.png b/mindus/assets/units/oct.png Binary files differnew file mode 100644 index 0000000..8c18198 --- /dev/null +++ b/mindus/assets/units/oct.png diff --git a/mindus/assets/units/omura.png b/mindus/assets/units/omura.png Binary files differnew file mode 100644 index 0000000..be703c6 --- /dev/null +++ b/mindus/assets/units/omura.png diff --git a/mindus/assets/units/oxynoe.png b/mindus/assets/units/oxynoe.png Binary files differnew file mode 100644 index 0000000..87fc11a --- /dev/null +++ b/mindus/assets/units/oxynoe.png diff --git a/mindus/assets/units/poly.png b/mindus/assets/units/poly.png Binary files differnew file mode 100644 index 0000000..e792d5e --- /dev/null +++ b/mindus/assets/units/poly.png diff --git a/mindus/assets/units/precept.png b/mindus/assets/units/precept.png Binary files differnew file mode 100644 index 0000000..32fe877 --- /dev/null +++ b/mindus/assets/units/precept.png diff --git a/mindus/assets/units/pulsar.png b/mindus/assets/units/pulsar.png Binary files differnew file mode 100644 index 0000000..152c365 --- /dev/null +++ b/mindus/assets/units/pulsar.png diff --git a/mindus/assets/units/quad.png b/mindus/assets/units/quad.png Binary files differnew file mode 100644 index 0000000..09986db --- /dev/null +++ b/mindus/assets/units/quad.png diff --git a/mindus/assets/units/quasar.png b/mindus/assets/units/quasar.png Binary files differnew file mode 100644 index 0000000..cc9ac31 --- /dev/null +++ b/mindus/assets/units/quasar.png diff --git a/mindus/assets/units/quell-missile.png b/mindus/assets/units/quell-missile.png Binary files differnew file mode 100644 index 0000000..dd05d06 --- /dev/null +++ b/mindus/assets/units/quell-missile.png diff --git a/mindus/assets/units/quell.png b/mindus/assets/units/quell.png Binary files differnew file mode 100644 index 0000000..f724c4e --- /dev/null +++ b/mindus/assets/units/quell.png diff --git a/mindus/assets/units/reign.png b/mindus/assets/units/reign.png Binary files differnew file mode 100644 index 0000000..55701e6 --- /dev/null +++ b/mindus/assets/units/reign.png diff --git a/mindus/assets/units/renale.png b/mindus/assets/units/renale.png Binary files differnew file mode 100644 index 0000000..d4283d4 --- /dev/null +++ b/mindus/assets/units/renale.png diff --git a/mindus/assets/units/retusa.png b/mindus/assets/units/retusa.png Binary files differnew file mode 100644 index 0000000..3e7ebbd --- /dev/null +++ b/mindus/assets/units/retusa.png diff --git a/mindus/assets/units/risso.png b/mindus/assets/units/risso.png Binary files differnew file mode 100644 index 0000000..97d9d2f --- /dev/null +++ b/mindus/assets/units/risso.png diff --git a/mindus/assets/units/scathe-missile.png b/mindus/assets/units/scathe-missile.png Binary files differnew file mode 100644 index 0000000..1138357 --- /dev/null +++ b/mindus/assets/units/scathe-missile.png diff --git a/mindus/assets/units/scepter.png b/mindus/assets/units/scepter.png Binary files differnew file mode 100644 index 0000000..61b87a6 --- /dev/null +++ b/mindus/assets/units/scepter.png diff --git a/mindus/assets/units/sei.png b/mindus/assets/units/sei.png Binary files differnew file mode 100644 index 0000000..695824e --- /dev/null +++ b/mindus/assets/units/sei.png diff --git a/mindus/assets/units/spiroct.png b/mindus/assets/units/spiroct.png Binary files differnew file mode 100644 index 0000000..2670acc --- /dev/null +++ b/mindus/assets/units/spiroct.png diff --git a/mindus/assets/units/stell.png b/mindus/assets/units/stell.png Binary files differnew file mode 100644 index 0000000..0d06858 --- /dev/null +++ b/mindus/assets/units/stell.png diff --git a/mindus/assets/units/tecta.png b/mindus/assets/units/tecta.png Binary files differnew file mode 100644 index 0000000..66f473c --- /dev/null +++ b/mindus/assets/units/tecta.png diff --git a/mindus/assets/units/toxopid.png b/mindus/assets/units/toxopid.png Binary files differnew file mode 100644 index 0000000..04349f5 --- /dev/null +++ b/mindus/assets/units/toxopid.png diff --git a/mindus/assets/units/vanquish.png b/mindus/assets/units/vanquish.png Binary files differnew file mode 100644 index 0000000..09b8c51 --- /dev/null +++ b/mindus/assets/units/vanquish.png diff --git a/mindus/assets/units/vela.png b/mindus/assets/units/vela.png Binary files differnew file mode 100644 index 0000000..a76ec93 --- /dev/null +++ b/mindus/assets/units/vela.png diff --git a/mindus/assets/units/zenith.png b/mindus/assets/units/zenith.png Binary files differnew file mode 100644 index 0000000..a015009 --- /dev/null +++ b/mindus/assets/units/zenith.png diff --git a/mindus/build.rs b/mindus/build.rs new file mode 100644 index 0000000..2edc445 --- /dev/null +++ b/mindus/build.rs @@ -0,0 +1,187 @@ +use fimg::DynImage; +use rand::RngExt; +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/items.py b/mindus/items.py index 922cc30..922cc30 100644 --- a/items.py +++ b/mindus/items.py diff --git a/res/team_names.txt b/mindus/res/team_names.txt index 37adee8..37adee8 100644 --- a/res/team_names.txt +++ b/mindus/res/team_names.txt diff --git a/mindus/src/block/campaign.rs b/mindus/src/block/campaign.rs new file mode 100644 index 0000000..8b0e52e --- /dev/null +++ b/mindus/src/block/campaign.rs @@ -0,0 +1,90 @@ +use fimg::Overlay; + +use crate::{ + block::{ + BlockLogic, DataConvertError, DeserializeError, SerializeError, State, + all::{ItemConvertError, ItemDeserializeError}, + impl_block, + simple::{BuildCost, state_impl}, + }, + content, + data::{ + GridPos, + dynamic::{DynData, DynType}, + }, + item::Type as Item, + load, + utils::{ImageHolder, ImageUtils}, +}; + +pub struct LandingPadBlock { + size: u8, + symmetric: bool, + build_cost: BuildCost, +} + +impl LandingPadBlock { + #[must_use] + pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> LandingPadBlock { + assert!(size != 0, "invalid size"); + + Self { + size, + symmetric, + build_cost, + } + } + + state_impl!(pub Option<Item>); +} + +impl BlockLogic for LandingPadBlock { + 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(ItemConvertError(config)))); + } + Ok(DynData::Content(content::Type::Item, 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::Item, id) => Ok(Some(Self::create_state(Some( + ItemDeserializeError::forward(Item::try_from(id))?, + )))), + DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new( + ItemDeserializeError::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).map_or(DynData::Empty, |item| { + DynData::Content(content::Type::Item, item.into()) + })) + } + fn draw( + &self, + _: &str, + state: Option<&State>, + _: Option<&crate::data::autotile::RenderingContext>, + _: super::Rotation, + scale: crate::data::renderer::Scale, + ) -> crate::utils::ImageHolder<4> { + let mut i: ImageHolder<4> = load!("landing-pad", scale); + + match state.map(Self::get_state) { + Some(Some(item)) => { + let mut x = load!("landing-pad-bg", scale); + unsafe { i.overlay(x.tint(item.color())) }; + } + _ => {} + } + i + } +} diff --git a/mindus/src/block/content.rs b/mindus/src/block/content.rs new file mode 100644 index 0000000..afec25a --- /dev/null +++ b/mindus/src/block/content.rs @@ -0,0 +1,455 @@ +//! 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", + "large-canvas", + "target-dummy", + } +} diff --git a/mindus/src/block/defense.rs b/mindus/src/block/defense.rs new file mode 100644 index 0000000..3a1a4d4 --- /dev/null +++ b/mindus/src/block/defense.rs @@ -0,0 +1,20 @@ +//! 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/src/block/distribution.rs b/mindus/src/block/distribution.rs index e185d3a..bf3b77e 100644 --- a/src/block/distribution.rs +++ b/mindus/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,23 +28,21 @@ 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); - unsafe { - // SAFETY: any load() is square - top.rotate(rot.rotated(false).count()); - // SAFETY: same size - base.overlay(&top); - } + // SAFETY: any load!() is square + unsafe { top.rotate(rot.rotated(false).count()) }; + // SAFETY: same size + unsafe { base.overlay(&top) }; base }); @@ -80,7 +78,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 != name); + let empty = ctx.cross[rot.count() as usize].map_or(true, |(v, _)| v.name.get_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 @@ -118,47 +116,21 @@ make_simple!( // format: // - link: `i32` // - cooldown: `f32` - |_, _, _, buff: &mut DataRead| buff.skip(8) + |_, 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) ); -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_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, &[]); -} +make_simple!(UnitCargoLoader => |_, buff: &mut DataRead| buff.skip(4)); pub struct ItemBlock { size: u8, @@ -225,26 +197,31 @@ 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())) }; - return p; - } - match name { - "duct-router" => { - unsafe { p.overlay(&load!("top", s).rotate(rot.rotated(false).count())) }; - } - "duct-unloader" => { + if name == "duct-unloader" { unsafe { - p.overlay(&load!("duct-unloader-top", s).rotate(rot.rotated(false).count())) - }; + 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) }; + } p } @@ -258,13 +235,7 @@ impl BlockLogic for ItemBlock { /// (unit-cargo-unload-point) /// - item: `u16` as item /// - stale: `bool` - fn read( - &self, - b: &mut Build, - _: &BlockRegistry, - _: &EntityMapping, - buff: &mut DataRead, - ) -> Result<(), DataReadError> { + fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> { match b.block.name() { "duct-unloader" => { let n = buff.read_i16()?; @@ -410,7 +381,7 @@ impl BlockLogic for BridgeBlock { fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> { match Self::get_state(state) { - None => Ok(DynData::Empty), + None => Ok(DynData::Point2(-1, -1)), Some((dx, dy)) => Ok(DynData::Point2(*dx, *dy)), } } @@ -436,8 +407,6 @@ 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() { @@ -445,7 +414,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(r, e, buff)?; + crate::block::payload::read_payload_block(buff)?; buff.skip(19)?; } // no state? @@ -478,10 +447,8 @@ impl BlockLogic for BridgeBlock { _ => "reinforced-bridge-conduit-dir", } ); - unsafe { - arrow.rotate(r.rotated(false).count()); - base.overlay(&arrow) - }; + unsafe { arrow.rotate(r.rotated(false).count()) }; + unsafe { base.overlay(&arrow) }; base } // "bridge-conveyor" | "phase-conveyor" | "bridge-conduit" | "phase-conduit" | "payload-mass-driver" | "large-payload-mass-driver" @@ -500,9 +467,10 @@ pub struct BridgeConvertError { /// format; /// - call [`read_item_bridge`] /// - become [`read_item_buffer`] -fn read_buffered_item_bridge(buff: &mut DataRead) -> Result<(), DataReadError> { - read_item_bridge(buff)?; - read_item_buffer(buff) +fn read_buffered_item_bridge(_buff: &mut DataRead) -> Result<(), DataReadError> { + // read_item_bridge(buff)?; + // read_item_buffer(buff) + Ok(()) } /// format: @@ -523,8 +491,10 @@ fn read_item_buffer(buff: &mut DataRead) -> Result<(), DataReadError> { /// - moved: `bool` fn read_item_bridge(buff: &mut DataRead) -> Result<(), DataReadError> { buff.skip(8)?; - let n = buff.read_u8()? as usize; - buff.skip((n * 4) + 1) + let _n = buff.read_i8()?; + // buff.skip((n as usize * 4) + 1) + // bug? + Ok(()) } /// format: diff --git a/mindus/src/block/drills.rs b/mindus/src/block/drills.rs new file mode 100644 index 0000000..50a3d6a --- /dev/null +++ b/mindus/src/block/drills.rs @@ -0,0 +1,31 @@ +//! 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 new file mode 100644 index 0000000..384dc98 --- /dev/null +++ b/mindus/src/block/liquid.rs @@ -0,0 +1,128 @@ +//! 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/src/block/logic.rs b/mindus/src/block/logic.rs index a099765..4626730 100644 --- a/src/block/logic.rs +++ b/mindus/src/block/logic.rs @@ -3,14 +3,14 @@ use std::borrow::Cow; use std::string::FromUtf8Error; use crate::block::simple::*; -use crate::data::dynamic::{DynSerializer, DynType}; -use crate::{block::*, Serializer}; +use crate::data::dynamic::DynType; +use crate::{Serializable, block::*}; use crate::data::{self, CompressError, DataRead, DataWrite}; make_simple!( MemoryBlock => - |_, _, _, buff: &mut DataRead| { + |_, buff: &mut DataRead| { // format: // - iterate [`u32`] // - memory: [`f64`] @@ -19,29 +19,12 @@ 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, build_cost: BuildCost, canvas_size: u8, + pal: &'static [(u8, u8, u8)], } macro_rules! h { @@ -50,7 +33,25 @@ macro_rules! h { (v[0], v[1], v[2]) }}; } -const PALETTE: &[(u8, u8, u8); 8] = &[ +pub const L_PALETTE: &[(u8, u8, u8); 16] = &[ + h!("#452b3f"), + h!("#8a5865"), + h!("#e08d51"), + h!("#fabf61"), + h!("#f5eeb0"), + h!("#2c5e3b"), + h!("#609c4f"), + h!("#c6cc54"), + h!("#78c2d6"), + h!("#5479b0"), + h!("#56546e"), + h!("#839fa6"), + h!("#e0d3c8"), + h!("#f05b5b"), + h!("#8f325f"), + h!("#eb6c98"), +]; +pub const S_PALETTE: &[(u8, u8, u8); 8] = &[ h!("#362944"), h!("#c45d9f"), h!("#e39aac"), @@ -63,7 +64,13 @@ const PALETTE: &[(u8, u8, u8); 8] = &[ impl CanvasBlock { #[must_use] - pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost, canvas_size: u8) -> Self { + pub const fn new( + size: u8, + symmetric: bool, + build_cost: BuildCost, + canvas_size: u8, + pal: &'static [(u8, u8, u8)], + ) -> Self { assert!(size != 0, "invalid size"); assert!(canvas_size != 0, "invalid size"); Self { @@ -71,22 +78,23 @@ impl CanvasBlock { symmetric, build_cost, canvas_size, + pal, } } - state_impl!(pub Image<Vec<u8>, 1>); + state_impl!(pub Image<Box<[u8]>, 1>); } -fn deser_canvas_image(b: &[u8], size: usize) -> Image<Vec<u8>, 1> { - let mut p = Image::alloc(size as u32, size as u32); +fn deser_canvas_image(b: &[u8], size: usize, bpp: usize) -> Image<Box<[u8]>, 1> { + let mut p = Image::alloc(size as u32, size as u32).boxed(); for i in 0..(size * size) { - let offset = i * 3; + let offset = i * bpp; let mut n = 0; - for i in 0..3 { + for i in 0..bpp { let word = (i + offset) >> 3; - n |= (((b[word] & (1 << ((i + offset) & 7))) != 0) as u8) << i; + n |= (((b[word] & (1u8 << ((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 } @@ -103,6 +111,7 @@ impl BlockLogic for CanvasBlock { DynData::ByteArray(b) => Ok(Some(Self::create_state(deser_canvas_image( &b, self.canvas_size as usize, + self.pal.len().next_power_of_two().ilog2() as _, )))), _ => Err(DeserializeError::InvalidType { have: data.get_type(), @@ -112,17 +121,18 @@ impl BlockLogic for CanvasBlock { } fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> { + let bpp = self.pal.len().next_power_of_two().ilog2() as usize; let mut o = vec![0; self.canvas_size as usize * self.canvas_size as usize * 3]; let p = Self::get_state(state); for i in 0..(self.canvas_size * self.canvas_size) as usize { - let index = unsafe { + let &[index] = unsafe { p.pixel( i as u32 % self.canvas_size as u32, i as u32 / self.canvas_size as u32, - )[0] + ) }; - let offset = i * 3; - for i in 0..3 { + let offset = i * bpp; + for i in 0..bpp { let word = (i + offset) >> 3; if index >> i & 1 == 0 { o[word] &= !(1 << ((i + offset) & 7)); @@ -137,7 +147,7 @@ impl BlockLogic for CanvasBlock { /// i thought about drawing the borders and stuff but it felt like too much work fn draw( &self, - _: &str, + n: &str, state: Option<&State>, _: Option<&RenderingContext>, _: Rotation, @@ -152,44 +162,40 @@ 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()) { - (*r, *g, *b) = PALETTE[y as usize]; + for ([r, g, b, a], &y) in img.chunked_mut().zip(p.buffer().iter()) { + (*r, *g, *b) = self.pal[y as usize]; *a = 255; } - let img = img.as_mut().scale((s * self.size as u32) - offset * 2); - let mut borders = load!("canvas", s); - unsafe { - borders - .borrow_mut() - .overlay_at(&img.as_ref(), offset, offset) - }; + let img = img.scale::<fimg::scale::Nearest>( + (s * self.size as u32) - offset * 2, + (s * self.size as u32) - offset * 2, + ); + + let mut borders = load!(from n which is ["canvas" | "large-canvas"], s); + unsafe { borders.overlay_at(&img, offset, offset) }; return borders; } - 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]; + // 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() { + (*r, *g, *b) = self.pal[0]; *a = 255; } - ImageHolder::from(def) + unsafe { def.mapped(crate::utils::Cow::Own) } } /// format: /// - len: [`i32`] /// - read(len) -> [`deser_canvas_image`] - fn read( - &self, - build: &mut Build, - _: &BlockRegistry, - _: &EntityMapping, - buff: &mut DataRead, - ) -> Result<(), DataReadError> { + fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> { let n = buff.read_i32()? as usize; let mut b = vec![0; n]; buff.read_bytes(&mut b)?; build.state = Some(Self::create_state(deser_canvas_image( &b, self.canvas_size as usize, + self.pal.len().next_power_of_two().ilog2() as _, ))); Ok(()) } @@ -252,13 +258,7 @@ impl BlockLogic for MessageLogic { Ok(DynData::String(Some(Self::get_state(state).clone()))) } - fn read( - &self, - b: &mut Build, - _: &BlockRegistry, - _: &EntityMapping, - buff: &mut DataRead, - ) -> Result<(), DataReadError> { + fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> { b.state = Some(Self::create_state(buff.read_utf()?.to_string())); Ok(()) } @@ -306,29 +306,23 @@ impl BlockLogic for SwitchLogic { Ok(DynData::Boolean(*Self::get_state(state))) } - fn read( - &self, - build: &mut Build, - _: &BlockRegistry, - _: &EntityMapping, - buff: &mut DataRead, - ) -> Result<(), DataReadError> { + fn read(&self, build: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> { build.state = Some(Self::create_state(buff.read_bool()?)); Ok(()) } fn draw( &self, - _: &str, + name: &str, state: Option<&State>, _: Option<&RenderingContext>, _: Rotation, s: Scale, ) -> ImageHolder<4> { - let mut base = load!("switch", s); + let mut base = load!(from name which is ["switch" | "world-switch"], s); if let Some(state) = state { if *Self::get_state(state) { - let on = load!("switch-on", s); + let on = load!(concat "on" => name which is ["switch" | "world-switch"], s); unsafe { base.overlay(&on) }; return base; } @@ -371,8 +365,7 @@ 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![]; - links.reserve(link_cnt); + let mut links = Vec::with_capacity(link_cnt); for _ in 0..link_cnt { let name = buff.read_utf()?; let x = buff.read_i16()?; @@ -412,13 +405,7 @@ impl BlockLogic for ProcessorLogic { } } - fn read( - &self, - b: &mut Build, - _: &BlockRegistry, - _: &EntityMapping, - buff: &mut DataRead, - ) -> Result<(), DataReadError> { + fn read(&self, b: &mut Build, buff: &mut DataRead) -> Result<(), DataReadError> { let n = buff.read_u32()? as usize; let mut v = vec![0; n]; buff.read_bytes(&mut v)?; @@ -428,7 +415,7 @@ impl BlockLogic for ProcessorLogic { )); for _ in 0..buff.read_u32()? { let _ = buff.read_utf()?; - let _ = DynSerializer.deserialize(buff).unwrap(); + let _ = DynData::deserialize(buff).unwrap(); } let memory = buff.read_u32()? as usize; buff.skip(memory * 8)?; @@ -512,7 +499,7 @@ impl ProcessorSerializeError { } } -#[derive(Clone, Debug, Eq, PartialEq, Default)] +#[derive(Clone, Debug, Eq, PartialEq, Default, Hash)] pub struct ProcessorLink { name: String, x: i16, @@ -545,7 +532,7 @@ impl ProcessorLink { } } -#[derive(Clone, Debug, Eq, PartialEq, Default)] +#[derive(Clone, Debug, Eq, PartialEq, Default, Hash)] pub struct ProcessorState { code: String, links: Vec<ProcessorLink>, @@ -629,3 +616,28 @@ 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/mindus/src/block/mod.rs b/mindus/src/block/mod.rs new file mode 100644 index 0000000..3b57d07 --- /dev/null +++ b/mindus/src/block/mod.rs @@ -0,0 +1,1094 @@ +//! 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::{L_PALETTE, S_PALETTE, 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 campaign +} + +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; + } + $( + const impl 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, + LandingPadBlock, +} + +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 const 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, + }; } + }; +} +impl content::Type { + pub const FLOOR: [Self; 96] = { + let mut i = 0; + let mut bl = [Self::OreCopper; _]; + let mut oi = 0; + while i < Self::ALL.len() { + if let Some(b) = Self::ALL[i].to_block() + && b.image + == Some(&car::map!( + crate::data::renderer::load!("empty4"), + DynImage::from + )) + { + bl[oi] = Self::ALL[i]; + oi += 1; + } + i += 1; + } + bl + }; +} +// 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; + "stone-vent" > 1; + "basalt-vent" > 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" -> ProductionBlock::new(3, true, cost!()); + // 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" => LandingPadBlock::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: 10, Beryllium: 10), 12, S_PALETTE); + "large-canvas" => CanvasBlock::new(3, true, cost!(Silicon: 15, Beryllium: 15, SurgeAlloy: 15), 24, L_PALETTE); + "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, &[]); + "target-dummy" -> BasicBlock::new(2, true, &[]); +} diff --git a/mindus/src/block/payload.rs b/mindus/src/block/payload.rs new file mode 100644 index 0000000..80a8a6f --- /dev/null +++ b/mindus/src/block/payload.rs @@ -0,0 +1,272 @@ +//! 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 new file mode 100644 index 0000000..3fde947 --- /dev/null +++ b/mindus/src/block/power.rs @@ -0,0 +1,213 @@ +//! 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 new file mode 100644 index 0000000..589e73c --- /dev/null +++ b/mindus/src/block/production.rs @@ -0,0 +1,98 @@ +//! 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 new file mode 100644 index 0000000..ebaa51d --- /dev/null +++ b/mindus/src/block/ratios.rs @@ -0,0 +1,266 @@ +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), +} + +const impl super::ConstFrom<crate::item::Type> for Resource { + fn fro(value: crate::item::Type) -> Self { + Self::Item(value) + } +} + +const impl 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 }); +rats!(LandingPadBlock { none }); diff --git a/src/block/simple.rs b/mindus/src/block/simple.rs index 5c4c326..057eb7c 100644 --- a/src/block/simple.rs +++ b/mindus/src/block/simple.rs @@ -54,13 +54,13 @@ macro_rules! make_simple { &self, _: i32, _: crate::data::GridPos, - ) -> Result<crate::DynData, crate::block::DataConvertError> { - Ok(crate::DynData::Empty) + ) -> Result<crate::data::dynamic::DynData, crate::block::DataConvertError> { + Ok(crate::data::dynamic::DynData::Empty) } fn deserialize_state( &self, - _: crate::DynData, + _: crate::data::dynamic::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::DynData, crate::block::SerializeError> { - Ok(crate::DynData::Empty) + ) -> Result<crate::data::dynamic::DynData, crate::block::SerializeError> { + Ok(crate::data::dynamic::DynData::Empty) } fn draw( @@ -88,24 +88,20 @@ 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> { - #[allow(clippy::redundant_closure_call)] - $read(build, reg, entity_mapping, buff) + $read(build, 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); @@ -117,11 +113,7 @@ 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}")); @@ -132,7 +124,7 @@ pub(crate) use make_simple; pub type BuildCost = &'static [(item::Type, u32)]; macro_rules! cost { - ($($item:ident: $cnt:expr),+) => { + ($($item:ident: $cnt:expr),*) => { &[$((crate::item::Type::$item, $cnt)),*] }; } diff --git a/mindus/src/block/turrets.rs b/mindus/src/block/turrets.rs new file mode 100644 index 0000000..d9c83d1 --- /dev/null +++ b/mindus/src/block/turrets.rs @@ -0,0 +1,49 @@ +//! 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 new file mode 100644 index 0000000..6e1bb0f --- /dev/null +++ b/mindus/src/block/units.rs @@ -0,0 +1,341 @@ +//! 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 new file mode 100644 index 0000000..4c2e6c4 --- /dev/null +++ b/mindus/src/block/walls.rs @@ -0,0 +1,80 @@ +//! 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))), + DynData::Empty => Ok(Some(Self::create_state(false))), + _ => 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 new file mode 100644 index 0000000..9906470 --- /dev/null +++ b/mindus/src/block/x.rs @@ -0,0 +1,18 @@ +[ + 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 new file mode 100644 index 0000000..2e7b740 --- /dev/null +++ b/mindus/src/color_mapped @@ -0,0 +1,390 @@ +{ 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 new file mode 100644 index 0000000..c4a1a85 --- /dev/null +++ b/mindus/src/color_mapping.rs @@ -0,0 +1,3 @@ +/// 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 Binary files differnew file mode 100644 index 0000000..68e89f3 --- /dev/null +++ b/mindus/src/colors diff --git a/mindus/src/content.rs b/mindus/src/content.rs new file mode 100644 index 0000000..50acdcf --- /dev/null +++ b/mindus/src/content.rs @@ -0,0 +1,210 @@ +//! 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() + } + } + const 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 { + 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/src/data/autotile.rs b/mindus/src/data/autotile.rs index 92ef1b4..ef73554 100644 --- a/src/data/autotile.rs +++ b/mindus/src/data/autotile.rs @@ -1,6 +1,6 @@ -use super::renderer::*; use super::GridPos; -use crate::block::{Block, Rotation}; +use super::renderer::*; +use crate::block::{Block, Rotation, content::Type}; use bobbin_bits::U4; #[cfg(test)] @@ -24,10 +24,7 @@ macro_rules! conv { None }; ($dir:tt) => { - Some(( - &crate::block::distribution::CONVEYOR, - crate::data::autotile::dir!($dir), - )) + Some((&crate::block::CONVEYOR, crate::data::autotile::dir!($dir))) }; } #[cfg(test)] @@ -49,16 +46,18 @@ pub(crate) use define; #[cfg(test)] pub(crate) use dir; -pub type Cross<'l> = [Option<(&'l Block, Rotation)>; 4]; +pub type Cross = [Option<(&'static Block, Rotation)>; 4]; +pub type Corners = [Option<(&'static Block, Rotation)>; 4]; /// holds the 4 bordering blocks #[derive(Copy, Clone)] -pub struct RenderingContext<'l> { - pub cross: Cross<'l>, +pub struct RenderingContext { + pub cross: Cross, + pub corners: Corners, pub position: PositionContext, } /// holds positions -#[derive(Copy, Clone, Eq, PartialEq)] +#[derive(Copy, Clone, Eq, PartialEq, Default)] pub struct PositionContext { pub position: GridPos, pub width: usize, @@ -76,7 +75,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 { @@ -92,7 +91,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) } @@ -114,9 +113,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-1"), // ┌ - Rotation::Up => p!("0-3"), // │ + Rotation::Left => p!("1-2"), // ┐ + Rotation::Right => p!("1-2-h"), // ┌ + Rotation::Up => p!("0-3"), // │ Rotation::Down => unreachable!(), }, // from bottom + left @@ -224,24 +223,64 @@ 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<'l> { - fn get_block(&'l self) -> Option<&'l Block>; -} -pub trait Crossable { - fn cross(&self, j: usize, c: &PositionContext) -> Cross; +pub trait BlockState { + fn get_block(&self) -> Option<&'static Block>; } #[test] fn test_cross() { - let mut reg = crate::block::BlockRegistry::default(); - crate::block::distribution::register(&mut reg); - let mut ss = super::schematic::SchematicSerializer(®); macro_rules! test { ($schem: literal => $($a:tt,$b:tt,$c:tt,$d:tt)*) => { - let s = ss.deserialize_base64($schem).unwrap(); + let s = crate::Schematic::deserialize_base64($schem).unwrap(); let mut c = vec![]; println!("{:#?}", s.blocks); for (position, _) in s.block_iter() { @@ -250,7 +289,7 @@ fn test_cross() { width: s.width, height: s.height, }; - c.push(s.cross(&pctx)); + c.push(s.cross(&pctx).0); } let n = s.tags.get("name").map_or("<unknown>", |x| &x); let cc: Vec<Cross> = vec![ @@ -362,6 +401,7 @@ fn test_mask() { width: 10, height: 10, }, + corners: Default::default(), cross: $cross, }, dir!($rot), diff --git a/src/data/base64.rs b/mindus/src/data/base64.rs index 303e9e0..341dd6d 100644 --- a/src/data/base64.rs +++ b/mindus/src/data/base64.rs @@ -1,5 +1,5 @@ -use base64::{engine::general_purpose, engine::Engine as _}; pub use base64::{DecodeSliceError as DecodeError, EncodeSliceError as EncodeError}; +use base64::{engine::Engine as _, engine::general_purpose}; const BASE64: general_purpose::GeneralPurpose = general_purpose::STANDARD; diff --git a/mindus/src/data/command.rs b/mindus/src/data/command.rs new file mode 100644 index 0000000..f4d679d --- /dev/null +++ b/mindus/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, EnterPayload, LoadUnits, LoadBlocks, UnloadPayload, LoopPayload + } +} diff --git a/src/data/dynamic.rs b/mindus/src/data/dynamic.rs index 344144b..2f4fc2e 100644 --- a/src/data/dynamic.rs +++ b/mindus/src/data/dynamic.rs @@ -3,8 +3,7 @@ use thiserror::Error; use crate::content; use crate::data::command::{self, UnitCommand}; -use crate::data::{self, DataRead, DataWrite, GridPos, Serializer}; -use crate::logic::LogicField; +use crate::data::{self, DataRead, DataWrite, GridPos, Serializable}; use crate::team::Team; macro_rules! datamaker { @@ -30,6 +29,31 @@ 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,)+ + } + } + } } } } @@ -43,7 +67,6 @@ datamaker! { Boolean(bool), Double(f64), Building(GridPos), - LogicField(LogicField), ByteArray(Vec<u8>), UnitCommand(UnitCommand), BoolArray(Vec<bool>), @@ -52,67 +75,11 @@ datamaker! { Team(Team), } -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 { +impl Serializable for DynData { type ReadError = ReadError; type WriteError = WriteError; - fn deserialize(&mut self, buff: &mut DataRead<'_>) -> Result<DynData, Self::ReadError> { + fn deserialize(buff: &mut DataRead<'_>) -> Result<DynData, Self::ReadError> { match buff.read_u8()? { 0 => Ok(DynData::Empty), 1 => Ok(DynData::from(buff.read_i32()?)), @@ -160,7 +127,6 @@ impl Serializer<DynData> for DynSerializer { 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 { @@ -175,10 +141,9 @@ impl Serializer<DynData> for DynSerializer { let Ok(len) = usize::try_from(len) else { return Err(ReadError::BoolArrayLen(len)); }; - let mut result = vec![]; - result.reserve(len); - for _ in 0..len { - result.push(buff.read_bool()?); + let mut result = vec![false; len]; + for item in result.iter_mut() { + *item = buff.read_bool()?; } Ok(DynData::from(result)) } @@ -196,6 +161,11 @@ impl Serializer<DynData> for DynSerializer { } 19 => Ok(DynData::Vec2(buff.read_f32()?, buff.read_f32()?)), 20 => Ok(DynData::from(Team::of(buff.read_u8()?))), + 21 => Ok(DynData::IntArray( + (0..dbg!(buff.read_u16()? as usize)) + .map(|_| buff.read_i32()) + .collect::<Result<Vec<_>, _>>()?, + )), 23 => Ok(DynData::from( UnitCommand::try_from(buff.read_i16()? as u8)?, )), @@ -203,12 +173,8 @@ impl Serializer<DynData> for DynSerializer { } } - fn serialize( - &mut self, - buff: &mut DataWrite<'_>, - data: &DynData, - ) -> Result<(), Self::WriteError> { - match data { + fn serialize(&self, buff: &mut DataWrite<'_>) -> Result<(), Self::WriteError> { + match self { DynData::Empty => { buff.write_u8(0)?; Ok(()) @@ -294,11 +260,6 @@ impl Serializer<DynData> for DynSerializer { 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())); @@ -368,8 +329,6 @@ 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")] @@ -399,7 +358,7 @@ pub enum WriteError { #[cfg(test)] mod test { use super::*; - use crate::team::{CRUX, DERELICT, SHARDED}; + use crate::team::Team; macro_rules! _zero { ($tt:tt) => { @@ -416,7 +375,7 @@ mod test { let mut writer = DataWrite::default(); for (i, d) in input.iter().enumerate() { - assert_eq!(DynSerializer.serialize(&mut writer, d), Ok(())); + assert_eq!(d.serialize(&mut writer), Ok(())); positions[i] = writer.get_written().len(); } let written = writer.get_written(); @@ -424,7 +383,7 @@ mod test { let mut reader = DataRead::new(written); for (i, original) in input.iter().enumerate() { - match DynSerializer.deserialize(&mut reader) + match DynData::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:?}"), @@ -509,12 +468,6 @@ 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()) @@ -543,8 +496,8 @@ mod test { ); make_dyn_test!( reparse_team, - DynData::Team(SHARDED), - DynData::Team(CRUX), - DynData::Team(DERELICT) + DynData::Team(Team::SHARDED), + DynData::Team(Team::CRUX), + DynData::Team(Team::DERELICT) ); } diff --git a/mindus/src/data/entity_mapping.rs b/mindus/src/data/entity_mapping.rs new file mode 100644 index 0000000..beed2b4 --- /dev/null +++ b/mindus/src/data/entity_mapping.rs @@ -0,0 +1,31 @@ +#[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 new file mode 100644 index 0000000..afd1497 --- /dev/null +++ b/mindus/src/data/map.rs @@ -0,0 +1,1024 @@ +//! 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()?; + matches!(x, 7..=11 | 13) + .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), + x => unreachable!("{x:?}"), + } + 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 _revision = 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()?; + if buff.version >= 12 { + buff.skip()?; + } + 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 new file mode 100644 index 0000000..9f7959f --- /dev/null +++ b/mindus/src/data/mod.rs @@ -0,0 +1,499 @@ +//! 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/src/data/planet.rs b/mindus/src/data/planet.rs index ff20bcd..ff20bcd 100644 --- a/src/data/planet.rs +++ b/mindus/src/data/planet.rs diff --git a/mindus/src/data/renderer.rs b/mindus/src/data/renderer.rs new file mode 100644 index 0000000..a698b30 --- /dev/null +++ b/mindus/src/data/renderer.rs @@ -0,0 +1,862 @@ +//! 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, OverlayAtClipping, 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, + ); + } + } + if Type::FLOOR.contains(&tile.ore) { + unsafe { + img.overlay_at(&table(tile.ore, 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, + } + }); + let i = tile.build_image(ctx.as_ref(), scale); + let x = scale * x as u32; + let y = scale * y as u32; + if i.width() + x > img.width() || y + i.height() > img.height() { + img.as_mut().clipping_overlay_at(&i, x, y); + } else { + unsafe { img.as_mut().overlay_at(&i, x, y) }; + } + } + } + } + // 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 % 109][scale as usize], + scale * x as u32, + scale * y as u32, + ); + }, + Type::RuneOverlayCrux => unsafe { + img.overlay_at( + &RUNES.1[tile.nd[2] as usize % 109][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, + ) + }; + } + o if Type::FLOOR.contains(&o) => {} + 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, + lower::saturating::math! { 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::HeatReactor + | Type::LegacyMechPad + | Type::LegacyUnitFactory + | Type::LegacyUnitFactoryAir + | Type::LegacyUnitFactoryGround + | Type::CommandCenter) + || t.get_name().starts_with("metal-tiles") + || t.get_name().starts_with("rune") + || t.get_name().starts_with("character") + { + 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/src/data/schematic.rs b/mindus/src/data/schematic.rs index 31888c2..55baf3f 100644 --- a/src/data/schematic.rs +++ b/mindus/src/data/schematic.rs @@ -1,47 +1,49 @@ //! schematic parsing -use std::collections::hash_map::Entry; +use fimg::DynImage; use std::collections::HashMap; +use std::collections::hash_map::Entry; use std::fmt::{self, Write}; use thiserror::Error; -use crate::block::{self, Block, BlockRegistry, Rotation, State}; +use crate::block::ratios::{Io, IoBuilder}; +use crate::block::{self, BLOCK_REGISTRY, Block, Rotation, State}; use crate::data::base64; -use crate::data::dynamic::{self, DynData, DynSerializer}; +use crate::data::dynamic::{self, DynData}; use crate::data::renderer::*; -use crate::data::{self, DataRead, DataWrite, GridPos, Serializer}; +use crate::data::{self, DataRead, DataWrite, GridPos, Serializable}; use crate::item::storage::ItemStorage; -use crate::registry::RegistryEntry; +use crate::utils::Cow; use crate::utils::array::Array2D; /// biggest schematic -pub const MAX_DIMENSION: usize = 256; +pub const MAX_DIMENSION: usize = 1024; /// most possible blocks -pub const MAX_BLOCKS: u32 = 256 * 256; +pub const MAX_BLOCKS: u32 = 1024 * 1024; /// a placement in a schematic -#[derive(Clone)] -pub struct Placement<'l> { - pub block: &'l Block, +#[derive(Clone, Hash)] +pub struct Placement { + pub block: &'static 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<'l> Placement<'l> { +impl Placement { /// make a placement from a block #[must_use] - pub const fn new(block: &'l Block) -> Self { + pub const fn new(block: &'static Block) -> Self { Self { block, rot: Rotation::Up, @@ -61,16 +63,13 @@ impl<'l> Placement<'l> { } /// 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, - ) -> ImageHolder<4> { + ) -> DynImage<Cow> { self.block.image(self.get_state(), context, rot, s) } @@ -86,48 +85,49 @@ impl<'l> Placement<'l> { } } -impl<'l> BlockState<'l> for Placement<'l> { - fn get_block(&self) -> Option<&'l Block> { +impl BlockState for Placement { + fn get_block(&self) -> Option<&'static Block> { Some(self.block) } } -impl RotationState for Placement<'_> { +impl RotationState for Placement { fn get_rotation(&self) -> Option<Rotation> { Some(self.rot) } } -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 BlockState for Option<Placement> { + fn get_block(&self) -> Option<&'static Block> { + Some(self.as_ref()?.block) } } -impl RotationState for Option<Placement<'_>> { +impl RotationState for Option<Placement> { fn get_rotation(&self) -> Option<Rotation> { - let Some(p) = self else { - return None; - }; - Some(p.rot) + Some(self.as_ref()?.rot) } } #[derive(Clone, Debug)] /// a schematic. -pub struct Schematic<'l> { +pub struct Schematic { pub width: usize, pub height: usize, pub tags: HashMap<String, String>, /// schems can have holes, so [Option] is used. - pub blocks: Array2D<Option<Placement<'l>>>, + 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); + } } -impl<'l> PartialEq for Schematic<'l> { - fn eq(&self, rhs: &Schematic<'l>) -> bool { +impl PartialEq for Schematic { + fn eq(&self, rhs: &Schematic) -> bool { self.width == rhs.width && self.height == rhs.height && self.blocks == rhs.blocks @@ -135,23 +135,9 @@ impl<'l> PartialEq for Schematic<'l> { } } -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})"), - } - } - +impl Schematic { /// the area around a point - pub(crate) fn cross(&self, c: &PositionContext) -> Cross { + pub(crate) fn cross(&self, c: &PositionContext) -> (Cross, Corners) { let get = |x, y| { let b = self.get(x?, y?).ok()??; Some((b.get_block()?, b.get_rotation()?)) @@ -161,43 +147,57 @@ impl<'l> Schematic<'l> { 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), 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() } - /// create a new schematic, erroring if too big + /// create a new schematic /// ``` /// # use mindus::Schematic; - /// assert!(Schematic::try_new(500, 500).is_err() == true); + /// let s = Schematic::new(5, 5); /// ``` - 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)); - } + pub fn new(width: usize, height: usize) -> Self { 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()); - Ok(Self { + Self { width, height, tags, blocks: Array2D::new(None, width, height), - }) + } } // #[must_use] @@ -235,13 +235,14 @@ impl<'l> Schematic<'l> { /// ``` /// # 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, &mindus::block::turrets::DUO); + /// s.put(0, 0, &DUO); /// assert!(s.get(0, 0).unwrap().is_some()); /// ``` - pub fn get(&self, x: usize, y: usize) -> Result<Option<&Placement<'l>>, PosError> { + pub fn get(&self, x: usize, y: usize) -> Result<Option<&Placement>, PosError> { if x >= self.width || y >= self.height { return Err(PosError { x, @@ -254,7 +255,7 @@ impl<'l> Schematic<'l> { } /// gets a block, mutably - pub fn get_mut(&mut self, x: usize, y: usize) -> Result<Option<&mut Placement<'l>>, PosError> { + pub fn get_mut(&mut self, x: usize, y: usize) -> Result<Option<&mut Placement>, PosError> { if x >= self.width || y >= self.height { return Err(PosError { x, @@ -269,12 +270,13 @@ impl<'l> Schematic<'l> { /// 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, &mindus::block::distribution::ROUTER); + /// s.put(0, 0, &ROUTER); /// assert!(s.get(0, 0).unwrap().is_some() == true); /// ``` - pub fn put(&mut self, x: usize, y: usize, block: &'l Block) -> &mut Self { + pub fn put(&mut self, x: usize, y: usize, block: &'static Block) -> &mut Self { self.set(x, y, block, DynData::Empty, Rotation::Up).unwrap(); self } @@ -282,18 +284,19 @@ impl<'l> Schematic<'l> { /// set a block /// ``` /// # use mindus::Schematic; - /// # use mindus::DynData; + /// # use mindus::data::dynamic::DynData; /// # use mindus::block::Rotation; + /// # use mindus::block::ROUTER; /// /// let mut s = Schematic::new(5, 5); - /// s.set(0, 0, &mindus::block::distribution::ROUTER, DynData::Empty, Rotation::Right); + /// s.set(0, 0, &ROUTER, DynData::Empty, Rotation::Right); /// assert!(s.get(0, 0).unwrap().is_some() == true); /// ``` pub fn set( &mut self, x: usize, y: usize, - block: &'l Block, + block: &'static Block, data: DynData, rot: Rotation, ) -> Result<(), PlaceError> { @@ -326,17 +329,16 @@ impl<'l> Schematic<'l> { /// take out a block /// ``` /// # use mindus::Schematic; - /// # use mindus::DynData; - + /// # use mindus::block::DUO; /// # use mindus::block::Rotation; /// /// let mut s = Schematic::new(5, 5); - /// s.put(0, 0, &mindus::block::turrets::DUO); + /// s.put(0, 0, &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<'l>>, PosError> { + pub fn take(&mut self, x: usize, y: usize) -> Result<Option<Placement>, PosError> { if x >= self.width || y >= self.height { return Err(PosError { x, @@ -350,13 +352,11 @@ impl<'l> Schematic<'l> { } /// iterate over all the blocks - 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)) - }) + 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()?))) } #[must_use] @@ -364,11 +364,11 @@ impl<'l> Schematic<'l> { /// 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, &mindus::block::turrets::CYCLONE); + /// s.put(1, 1, &CYCLONE); /// assert_eq!(s.compute_total_cost().0.get_total(), 405); /// ``` pub fn compute_total_cost(&self) -> (ItemStorage, bool) { @@ -473,13 +473,10 @@ 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); -/// `serde_schematic` -pub struct SchematicSerializer<'l>(pub &'l BlockRegistry<'l>); - -impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> { +impl Serializable for Schematic { type ReadError = ReadError; type WriteError = WriteError; - fn deserialize(&mut self, buff: &mut DataRead<'_>) -> Result<Schematic<'l>, Self::ReadError> { + fn deserialize(buff: &mut DataRead<'_>) -> Result<Schematic, Self::ReadError> { let hdr = buff.read_u32()?; if hdr != SCHEMATIC_HEADER { return Err(ReadError::Header(hdr)); @@ -501,14 +498,16 @@ impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> { if num_table < 0 { return Err(ReadError::TableSize(num_table)); } - let mut block_table = Vec::new(); - block_table.reserve(num_table as usize); + let mut block_table = Vec::with_capacity(num_table as usize); for _ in 0..num_table { let name = buff.read_utf()?; - match self.0.get(name) { - None => return Err(ReadError::NoSuchBlock(name.to_owned())), - Some(b) => block_table.push(b), - } + block_table.push( + BLOCK_REGISTRY + .get(name) + .copied() + // wont get rendered + .unwrap_or(&crate::block::METAL_FLOOR), + ); } let num_blocks = buff.read_i32()?; if num_blocks < 0 || num_blocks as u32 > MAX_BLOCKS { @@ -524,7 +523,7 @@ impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> { let config = if version < 1 { block.data_from_i32(buff.read_i32()?, pos)? } else { - DynSerializer.deserialize(&mut buff)? + DynData::deserialize(&mut buff)? }; let rot = Rotation::from(buff.read_u8()?); schematic.set(pos.0, pos.1, block, config, rot)?; @@ -532,24 +531,20 @@ impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> { Ok(schematic) } - fn serialize( - &mut self, - buff: &mut DataWrite<'_>, - data: &Schematic, - ) -> Result<(), Self::WriteError> { + fn serialize(&self, buff: &mut DataWrite<'_>) -> 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(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_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_u8(data.tags.len() as u8)?; - for (k, v) in &data.tags { + rbuff.write_u8(self.tags.len() as u8)?; + for (k, v) in &self.tags { rbuff.write_utf(k)?; rbuff.write_utf(v)?; } @@ -557,11 +552,11 @@ impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> { let mut block_map = HashMap::new(); let mut block_table = Vec::new(); let mut block_count = 0i32; - for curr in data.blocks.iter().filter_map(|b| b.as_ref()) { + for curr in self.blocks.iter().filter_map(|b| b.as_ref()) { block_count += 1; - if let Entry::Vacant(e) = block_map.entry(curr.block.get_name()) { + if let Entry::Vacant(e) = block_map.entry(curr.block.name()) { e.insert(block_table.len() as u32); - block_table.push(curr.block.get_name()); + block_table.push(curr.block.name()); } } if block_table.len() > i8::MAX as usize { @@ -574,14 +569,14 @@ impl<'l> Serializer<Schematic<'l>> for SchematicSerializer<'l> { } // 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 data.block_iter() { - rbuff.write_i8(block_map[curr.block.get_name()] as i8)?; + for (pos, curr) in self.block_iter() { + rbuff.write_i8(block_map[curr.block.name()] as i8)?; rbuff.write_u32(pos.into())?; let data = match curr.state { None => DynData::Empty, Some(ref s) => curr.block.serialize_state(s)?, }; - DynSerializer.serialize(&mut rbuff, &data)?; + data.serialize(&mut rbuff)?; rbuff.write_u8(curr.rot.into())?; } rbuff.inflate(buff)?; @@ -633,26 +628,24 @@ pub enum WriteError { Compress(#[from] super::CompressError), } -impl<'l> SchematicSerializer<'l> { +impl Schematic { /// deserializes a schematic from base64 /// ``` /// # use mindus::*; /// let string = "bXNjaAF4nGNgZmBmZmDJS8xNZeBOyslPzlYAkwzcKanFyUWZBSWZ+XkMDAxsOYlJqTnFDEzRsYwMfAWJlTn5iSm6RfmlJalFQGlGEGJkZWSYxQAAcBkUPA=="; - /// let reg = build_registry(); - /// let mut ss = SchematicSerializer(®); - /// let s = ss.deserialize_base64(string).unwrap(); + /// let s = Schematic::deserialize_base64(string).unwrap(); /// assert!(s.get(1, 1).unwrap().unwrap().block.name() == "payload-router"); /// ``` - pub fn deserialize_base64(&mut self, data: &str) -> Result<Schematic<'l>, R64Error> { + pub fn deserialize_base64(data: &str) -> Result<Schematic, 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(&mut self, data: &Schematic<'l>) -> Result<String, W64Error> { + pub fn serialize_base64(&self) -> Result<String, W64Error> { let mut buff = DataWrite::default(); - self.serialize(&mut buff, data)?; + self.serialize(&mut buff)?; 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))]; @@ -706,14 +699,12 @@ mod test { ($name:ident, $($val:expr);+;) => { #[test] fn $name() { - let reg = crate::block::build_registry(); - let mut ser = SchematicSerializer(®); $( - let parsed = unwrap_pretty(ser.deserialize_base64($val)); + let parsed = unwrap_pretty(Schematic::deserialize_base64($val)); println!("\x1b[38;5;2mdeserialized\x1b[0m {}", parsed.tags.get("name").unwrap()); - let unparsed = unwrap_pretty(ser.serialize_base64(&parsed)); + let unparsed = unwrap_pretty(parsed.serialize_base64()); println!("\x1b[38;5;2mserialized\x1b[0m {}", parsed.tags.get("name").unwrap()); - let parsed2 = unwrap_pretty(ser.deserialize_base64(&unparsed)); + let parsed2 = unwrap_pretty(Schematic::deserialize_base64(&unparsed)); println!("\x1b[38;5;2mredeserialized\x1b[0m {}", parsed.tags.get("name").unwrap()); if parsed != parsed2 { #[cfg(feature = "bin")] @@ -755,7 +746,7 @@ mod test { None }; } - use crate::block::all::*; + use crate::block::*; let mut s = Schematic::new(3, 3); s.put(0, 0, &DISTRIBUTOR) .put(0, 1, &JUNCTION) @@ -771,10 +762,7 @@ mod test { pair!(2, 0, ROUTER); pair!( ); ]; - let reg = crate::block::build_registry(); - let mut s = SchematicSerializer(®); - - let s = s.deserialize_base64("bXNjaAF4nDXKywqAIBQA0fFRBH1itDC7C8E01IT+vgia1VkMFmOwyR3C0N0VG/Mu1ZdwtpATMEa3SazoZdVMPqcudy7/DJovpV4peAAt0xF6").unwrap(); + let s = Schematic::deserialize_base64("bXNjaAF4nDXKywqAIBQA0fFRBH1itDC7C8E01IT+vgia1VkMFmOwyR3C0N0VG/Mu1ZdwtpATMEa3SazoZdVMPqcudy7/DJovpV4peAAt0xF6").unwrap(); let mut it = s.block_iter(); test_iter![it, pair!(0, 0, CONVEYOR); diff --git a/src/data/sector.rs b/mindus/src/data/sector.rs index ac8c471..ac8c471 100644 --- a/src/data/sector.rs +++ b/mindus/src/data/sector.rs diff --git a/src/data/weather.rs b/mindus/src/data/weather.rs index 8df9f59..8df9f59 100644 --- a/src/data/weather.rs +++ b/mindus/src/data/weather.rs diff --git a/mindus/src/exe/draw.rs b/mindus/src/exe/draw.rs new file mode 100644 index 0000000..6bf8895 --- /dev/null +++ b/mindus/src/exe/draw.rs @@ -0,0 +1,41 @@ +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 new file mode 100644 index 0000000..f571761 --- /dev/null +++ b/mindus/src/exe/map.rs @@ -0,0 +1,32 @@ +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/src/exe/mod.rs b/mindus/src/exe/mod.rs index aa49f29..aa49f29 100644 --- a/src/exe/mod.rs +++ b/mindus/src/exe/mod.rs diff --git a/src/fluid/mod.rs b/mindus/src/fluid.rs index 7437744..7437744 100644 --- a/src/fluid/mod.rs +++ b/mindus/src/fluid.rs diff --git a/src/item/mod.rs b/mindus/src/item/mod.rs index 5d29176..5d29176 100644 --- a/src/item/mod.rs +++ b/mindus/src/item/mod.rs diff --git a/mindus/src/item/storage.rs b/mindus/src/item/storage.rs new file mode 100644 index 0000000..7fccccc --- /dev/null +++ b/mindus/src/item/storage.rs @@ -0,0 +1,442 @@ +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 new file mode 100644 index 0000000..c7967ad --- /dev/null +++ b/mindus/src/lib.rs @@ -0,0 +1,37 @@ +//! crate for dealing with mindustry +#![feature( + error_generic_member_access, + stmt_expr_attributes, + generic_const_exprs, + const_trait_impl, + coroutine_trait, + likely_unlikely, + portable_simd, + const_convert, + vec_from_fn, + try_blocks, + coroutines, + const_cmp, + doc_cfg +)] +#![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/src/modifier.rs b/mindus/src/modifier.rs index bf1d867..7f9777e 100644 --- a/src/modifier.rs +++ b/mindus/src/modifier.rs @@ -28,3 +28,9 @@ content_enum! { "invincible", } } + +impl Default for Type { + fn default() -> Self { + Self::None + } +} diff --git a/src/team.rs b/mindus/src/team.rs index 35a651f..70fa3b7 100644 --- a/src/team.rs +++ b/mindus/src/team.rs @@ -1,8 +1,10 @@ use std::fmt; +use atools::Chunked; + use crate::content::{Content, Type}; -#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +#[derive(Clone, Copy, Debug, Eq, Ord, PartialOrd, Default, PartialEq)] pub struct Team(u8); impl Team { @@ -107,30 +109,16 @@ impl Content for Team { } impl Team { - 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 fn color(self) -> [u8; 3] { + static COLORS: [[u8; 3]; 256] = include_bytes!("colors").chunked::<3>(); + COLORS[self.0 as usize] } -} -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/mindus/src/unit.rs b/mindus/src/unit.rs new file mode 100644 index 0000000..a0fd75e --- /dev/null +++ b/mindus/src/unit.rs @@ -0,0 +1,429 @@ +//! units +//! +//! [source](https://github.com/Anuken/Mindustry/blob/master/core/src/mindustry/content/UnitTypes.java) +#![allow(dead_code)] +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; 10], + 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_or(Type::ScatheMissile); // shrug + 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; 10], ReadError> { + let mut status = [Status::None; 10]; + for i in 0..buff.read_i32()? { + let this = Status::try_from(buff.read_u16()?); + buff.skip(4)?; + if let Ok(s) = this + && i < 10 + { + 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/src/utils/array.rs b/mindus/src/utils/array.rs index 6685baa..8398b8a 100644 --- a/src/utils/array.rs +++ b/mindus/src/utils/array.rs @@ -2,7 +2,7 @@ use std::{ fmt::{Debug, Write}, ops::Deref, }; -#[derive(Clone, PartialEq, Eq)] +#[derive(Clone, PartialEq, Eq, Hash)] pub struct Array2D<T: Clone> { width: usize, height: usize, diff --git a/mindus/src/utils/image/holder.rs b/mindus/src/utils/image/holder.rs new file mode 100644 index 0000000..45aab38 --- /dev/null +++ b/mindus/src/utils/image/holder.rs @@ -0,0 +1,48 @@ +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 new file mode 100644 index 0000000..5953ade --- /dev/null +++ b/mindus/src/utils/image/mod.rs @@ -0,0 +1,72 @@ +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 new file mode 100644 index 0000000..7183f0e --- /dev/null +++ b/mindus/src/utils/mod.rs @@ -0,0 +1,3 @@ +pub mod array; +pub mod image; +pub use self::image::{Cow, Image, ImageHolder, ImageUtils, Overlay, OverlayAt}; diff --git a/p2s/.gitignore b/p2s/.gitignore new file mode 100644 index 0000000..b68bac7 --- /dev/null +++ b/p2s/.gitignore @@ -0,0 +1 @@ +quant.png diff --git a/p2s/Cargo.toml b/p2s/Cargo.toml new file mode 100644 index 0000000..2411584 --- /dev/null +++ b/p2s/Cargo.toml @@ -0,0 +1,11 @@ +[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 new file mode 100644 index 0000000..f8f2d1f --- /dev/null +++ b/p2s/README.md @@ -0,0 +1,4 @@ +# 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 new file mode 100644 index 0000000..7f894eb --- /dev/null +++ b/p2s/src/main.rs @@ -0,0 +1,101 @@ +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/src/block/campaign.rs b/src/block/campaign.rs deleted file mode 100644 index 1283f3e..0000000 --- a/src/block/campaign.rs +++ /dev/null @@ -1,7 +0,0 @@ -//! 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 deleted file mode 100644 index d07eb05..0000000 --- a/src/block/content.rs +++ /dev/null @@ -1,420 +0,0 @@ -//! 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 deleted file mode 100644 index b1548bc..0000000 --- a/src/block/defense.rs +++ /dev/null @@ -1,37 +0,0 @@ -//! 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/src/block/drills.rs b/src/block/drills.rs deleted file mode 100644 index 4558666..0000000 --- a/src/block/drills.rs +++ /dev/null @@ -1,44 +0,0 @@ -//! 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 deleted file mode 100644 index 3fff74f..0000000 --- a/src/block/environment.rs +++ /dev/null @@ -1,192 +0,0 @@ -//! 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 deleted file mode 100644 index d20fb47..0000000 --- a/src/block/liquid.rs +++ /dev/null @@ -1,158 +0,0 @@ -//! 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/src/block/mod.rs b/src/block/mod.rs deleted file mode 100644 index 15b6d97..0000000 --- a/src/block/mod.rs +++ /dev/null @@ -1,642 +0,0 @@ -//! 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 deleted file mode 100644 index 6a8ef11..0000000 --- a/src/block/payload.rs +++ /dev/null @@ -1,324 +0,0 @@ -//! 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), - ®, - &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), - ®, - &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 deleted file mode 100644 index 62f32f8..0000000 --- a/src/block/power.rs +++ /dev/null @@ -1,251 +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); - 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 deleted file mode 100644 index cd48482..0000000 --- a/src/block/production.rs +++ /dev/null @@ -1,120 +0,0 @@ -//! 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/src/block/storage.rs b/src/block/storage.rs deleted file mode 100644 index c28b7bd..0000000 --- a/src/block/storage.rs +++ /dev/null @@ -1,16 +0,0 @@ -//! 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 deleted file mode 100644 index 3e65ebe..0000000 --- a/src/block/turrets.rs +++ /dev/null @@ -1,82 +0,0 @@ -//! 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 deleted file mode 100644 index 83b39af..0000000 --- a/src/block/units.rs +++ /dev/null @@ -1,380 +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); - 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 deleted file mode 100644 index 4eaad5c..0000000 --- a/src/block/walls.rs +++ /dev/null @@ -1,118 +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 -}); - -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 deleted file mode 100644 index 6c2872c..0000000 --- a/src/content.rs +++ /dev/null @@ -1,179 +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! 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/src/data/command.rs b/src/data/command.rs deleted file mode 100644 index 7d5298c..0000000 --- a/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, - } -} diff --git a/src/data/map.rs b/src/data/map.rs deleted file mode 100644 index 636e3f3..0000000 --- a/src/data/map.rs +++ /dev/null @@ -1,696 +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` -//! - 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 deleted file mode 100644 index 0583ea4..0000000 --- a/src/data/mod.rs +++ /dev/null @@ -1,530 +0,0 @@ -//! 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/src/data/renderer.rs b/src/data/renderer.rs deleted file mode 100644 index 4bbcbe7..0000000 --- a/src/data/renderer.rs +++ /dev/null @@ -1,296 +0,0 @@ -//! 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/src/exe/draw.rs b/src/exe/draw.rs deleted file mode 100644 index 964bcac..0000000 --- a/src/exe/draw.rs +++ /dev/null @@ -1,24 +0,0 @@ -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(®); - - // 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 deleted file mode 100644 index cbb6477..0000000 --- a/src/exe/map.rs +++ /dev/null @@ -1,48 +0,0 @@ -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(®); - 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/src/item/storage.rs b/src/item/storage.rs deleted file mode 100644 index ec7f219..0000000 --- a/src/item/storage.rs +++ /dev/null @@ -1,425 +0,0 @@ -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 deleted file mode 100644 index 1a8c302..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,32 +0,0 @@ -//! 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 deleted file mode 100644 index b5e7cc6..0000000 --- a/src/logic/mod.rs +++ /dev/null @@ -1,76 +0,0 @@ -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/src/registry.rs b/src/registry.rs deleted file mode 100644 index 9603f59..0000000 --- a/src/registry.rs +++ /dev/null @@ -1,51 +0,0 @@ -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/src/unit/mod.rs b/src/unit/mod.rs deleted file mode 100644 index 603b376..0000000 --- a/src/unit/mod.rs +++ /dev/null @@ -1,75 +0,0 @@ -//! 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/src/utils/image.rs b/src/utils/image.rs deleted file mode 100644 index 8254bb7..0000000 --- a/src/utils/image.rs +++ /dev/null @@ -1,728 +0,0 @@ -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 deleted file mode 100644 index 6e781fe..0000000 --- a/src/utils/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod array; -pub mod image; -pub use self::image::{Image, ImageHolder, ImageUtils, Overlay, RepeatNew as Repeat}; |