mindustry logic execution, map- and schematic- parsing and rendering
render all content
95 files changed, 213 insertions, 142 deletions
diff --git a/assets/blocks/drills/vent-condenser.png b/assets/blocks/drills/vent-condenser.png Binary files differnew file mode 100644 index 0000000..34bfc68 --- /dev/null +++ b/assets/blocks/drills/vent-condenser.png diff --git a/assets/blocks/environment/pur-bush-bot.png b/assets/blocks/environment/pur-bush-bot.png Binary files differdeleted file mode 100644 index 5704eb7..0000000 --- a/assets/blocks/environment/pur-bush-bot.png +++ /dev/null diff --git a/assets/blocks/environment/pur-bush.png b/assets/blocks/environment/pur-bush.png Binary files differindex 98b5faf..7642561 100644 --- a/assets/blocks/environment/pur-bush.png +++ b/assets/blocks/environment/pur-bush.png diff --git a/assets/blocks/environment/tendrils1.png b/assets/blocks/environment/tendrils1.png Binary files differnew file mode 100644 index 0000000..90345f2 --- /dev/null +++ b/assets/blocks/environment/tendrils1.png diff --git a/assets/blocks/environment/tendrils2.png b/assets/blocks/environment/tendrils2.png Binary files differnew file mode 100644 index 0000000..b234cc4 --- /dev/null +++ b/assets/blocks/environment/tendrils2.png diff --git a/assets/blocks/environment/tendrils3.png b/assets/blocks/environment/tendrils3.png Binary files differnew file mode 100644 index 0000000..e998b41 --- /dev/null +++ b/assets/blocks/environment/tendrils3.png diff --git a/assets/blocks/environment/yellowcoral.png b/assets/blocks/environment/yellowcoral.png Binary files differnew file mode 100644 index 0000000..c78ee38 --- /dev/null +++ b/assets/blocks/environment/yellowcoral.png diff --git a/assets/blocks/production/vent-condenser-bottom.png b/assets/blocks/production/vent-condenser-bottom.png Binary files differdeleted file mode 100644 index 3fb7182..0000000 --- a/assets/blocks/production/vent-condenser-bottom.png +++ /dev/null diff --git a/assets/blocks/production/vent-condenser-mid.png b/assets/blocks/production/vent-condenser-mid.png Binary files differdeleted file mode 100644 index b70942b..0000000 --- a/assets/blocks/production/vent-condenser-mid.png +++ /dev/null diff --git a/assets/blocks/production/vent-condenser-rotator-blur.png b/assets/blocks/production/vent-condenser-rotator-blur.png Binary files differdeleted file mode 100644 index c0121f9..0000000 --- a/assets/blocks/production/vent-condenser-rotator-blur.png +++ /dev/null diff --git a/assets/blocks/production/vent-condenser-rotator.png b/assets/blocks/production/vent-condenser-rotator.png Binary files differdeleted file mode 100644 index 7711d4b..0000000 --- a/assets/blocks/production/vent-condenser-rotator.png +++ /dev/null diff --git a/assets/blocks/production/vent-condenser.png b/assets/blocks/production/vent-condenser.png Binary files differdeleted file mode 100644 index ac3d311..0000000 --- a/assets/blocks/production/vent-condenser.png +++ /dev/null diff --git a/assets/blocks/props/arkyic-boulder-shadow1.png b/assets/blocks/props/arkyic-boulder-shadow1.png Binary files differdeleted file mode 100644 index 48dd992..0000000 --- a/assets/blocks/props/arkyic-boulder-shadow1.png +++ /dev/null diff --git a/assets/blocks/props/arkyic-boulder-shadow2.png b/assets/blocks/props/arkyic-boulder-shadow2.png Binary files differdeleted file mode 100644 index 7015713..0000000 --- a/assets/blocks/props/arkyic-boulder-shadow2.png +++ /dev/null diff --git a/assets/blocks/props/arkyic-boulder-shadow3.png b/assets/blocks/props/arkyic-boulder-shadow3.png Binary files differdeleted file mode 100644 index e509e05..0000000 --- a/assets/blocks/props/arkyic-boulder-shadow3.png +++ /dev/null diff --git a/assets/blocks/props/arkyic-boulder1.png b/assets/blocks/props/arkyic-boulder1.png Binary files differdeleted file mode 100644 index 4f668f4..0000000 --- a/assets/blocks/props/arkyic-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/arkyic-boulder2.png b/assets/blocks/props/arkyic-boulder2.png Binary files differdeleted file mode 100644 index b83d01c..0000000 --- a/assets/blocks/props/arkyic-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/arkyic-boulder3.png b/assets/blocks/props/arkyic-boulder3.png Binary files differdeleted file mode 100644 index 0e41b06..0000000 --- a/assets/blocks/props/arkyic-boulder3.png +++ /dev/null diff --git a/assets/blocks/props/basalt-boulder1.png b/assets/blocks/props/basalt-boulder1.png Binary files differdeleted file mode 100644 index ef36971..0000000 --- a/assets/blocks/props/basalt-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/basalt-boulder2.png b/assets/blocks/props/basalt-boulder2.png Binary files differdeleted file mode 100644 index dd1adb5..0000000 --- a/assets/blocks/props/basalt-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/beryllic-boulder1.png b/assets/blocks/props/beryllic-boulder1.png Binary files differdeleted file mode 100644 index 430e721..0000000 --- a/assets/blocks/props/beryllic-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/beryllic-boulder2.png b/assets/blocks/props/beryllic-boulder2.png Binary files differdeleted file mode 100644 index bb1bf75..0000000 --- a/assets/blocks/props/beryllic-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/boulder1.png b/assets/blocks/props/boulder1.png Binary files differdeleted file mode 100644 index ae54a00..0000000 --- a/assets/blocks/props/boulder1.png +++ /dev/null diff --git a/assets/blocks/props/boulder2.png b/assets/blocks/props/boulder2.png Binary files differdeleted file mode 100644 index 6e6e310..0000000 --- a/assets/blocks/props/boulder2.png +++ /dev/null diff --git a/assets/blocks/props/carbon-boulder1.png b/assets/blocks/props/carbon-boulder1.png Binary files differdeleted file mode 100644 index b418f9a..0000000 --- a/assets/blocks/props/carbon-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/carbon-boulder2.png b/assets/blocks/props/carbon-boulder2.png Binary files differdeleted file mode 100644 index 11b7b92..0000000 --- a/assets/blocks/props/carbon-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-blocks-shadow1.png b/assets/blocks/props/crystal-blocks-shadow1.png Binary files differdeleted file mode 100644 index 0d9145b..0000000 --- a/assets/blocks/props/crystal-blocks-shadow1.png +++ /dev/null diff --git a/assets/blocks/props/crystal-blocks-shadow2.png b/assets/blocks/props/crystal-blocks-shadow2.png Binary files differdeleted file mode 100644 index 4e39edb..0000000 --- a/assets/blocks/props/crystal-blocks-shadow2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-blocks-shadow3.png b/assets/blocks/props/crystal-blocks-shadow3.png Binary files differdeleted file mode 100644 index 75b6d51..0000000 --- a/assets/blocks/props/crystal-blocks-shadow3.png +++ /dev/null diff --git a/assets/blocks/props/crystal-blocks1.png b/assets/blocks/props/crystal-blocks1.png Binary files differdeleted file mode 100644 index c82f923..0000000 --- a/assets/blocks/props/crystal-blocks1.png +++ /dev/null diff --git a/assets/blocks/props/crystal-blocks2.png b/assets/blocks/props/crystal-blocks2.png Binary files differdeleted file mode 100644 index 0fd20e9..0000000 --- a/assets/blocks/props/crystal-blocks2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-blocks3.png b/assets/blocks/props/crystal-blocks3.png Binary files differdeleted file mode 100644 index c9f656c..0000000 --- a/assets/blocks/props/crystal-blocks3.png +++ /dev/null diff --git a/assets/blocks/props/crystal-cluster-shadow1.png b/assets/blocks/props/crystal-cluster-shadow1.png Binary files differdeleted file mode 100644 index d24059e..0000000 --- a/assets/blocks/props/crystal-cluster-shadow1.png +++ /dev/null diff --git a/assets/blocks/props/crystal-cluster-shadow2.png b/assets/blocks/props/crystal-cluster-shadow2.png Binary files differdeleted file mode 100644 index 7c3a8a3..0000000 --- a/assets/blocks/props/crystal-cluster-shadow2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-cluster-shadow3.png b/assets/blocks/props/crystal-cluster-shadow3.png Binary files differdeleted file mode 100644 index 575e8c3..0000000 --- a/assets/blocks/props/crystal-cluster-shadow3.png +++ /dev/null diff --git a/assets/blocks/props/crystal-cluster1.png b/assets/blocks/props/crystal-cluster1.png Binary files differdeleted file mode 100644 index 9b05cde..0000000 --- a/assets/blocks/props/crystal-cluster1.png +++ /dev/null diff --git a/assets/blocks/props/crystal-cluster2.png b/assets/blocks/props/crystal-cluster2.png Binary files differdeleted file mode 100644 index 0ada3fc..0000000 --- a/assets/blocks/props/crystal-cluster2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-cluster3.png b/assets/blocks/props/crystal-cluster3.png Binary files differdeleted file mode 100644 index a9503c2..0000000 --- a/assets/blocks/props/crystal-cluster3.png +++ /dev/null diff --git a/assets/blocks/props/crystal-orbs-shadow1.png b/assets/blocks/props/crystal-orbs-shadow1.png Binary files differdeleted file mode 100644 index dda2465..0000000 --- a/assets/blocks/props/crystal-orbs-shadow1.png +++ /dev/null diff --git a/assets/blocks/props/crystal-orbs-shadow2.png b/assets/blocks/props/crystal-orbs-shadow2.png Binary files differdeleted file mode 100644 index b741cae..0000000 --- a/assets/blocks/props/crystal-orbs-shadow2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-orbs-shadow3.png b/assets/blocks/props/crystal-orbs-shadow3.png Binary files differdeleted file mode 100644 index e3fe7e1..0000000 --- a/assets/blocks/props/crystal-orbs-shadow3.png +++ /dev/null diff --git a/assets/blocks/props/crystal-orbs1.png b/assets/blocks/props/crystal-orbs1.png Binary files differdeleted file mode 100644 index 44c6e37..0000000 --- a/assets/blocks/props/crystal-orbs1.png +++ /dev/null diff --git a/assets/blocks/props/crystal-orbs2.png b/assets/blocks/props/crystal-orbs2.png Binary files differdeleted file mode 100644 index 5ef0a4f..0000000 --- a/assets/blocks/props/crystal-orbs2.png +++ /dev/null diff --git a/assets/blocks/props/crystal-orbs3.png b/assets/blocks/props/crystal-orbs3.png Binary files differdeleted file mode 100644 index 2eef963..0000000 --- a/assets/blocks/props/crystal-orbs3.png +++ /dev/null diff --git a/assets/blocks/props/crystalline-boulder1.png b/assets/blocks/props/crystalline-boulder1.png Binary files differdeleted file mode 100644 index 68e7fe8..0000000 --- a/assets/blocks/props/crystalline-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/crystalline-boulder2.png b/assets/blocks/props/crystalline-boulder2.png Binary files differdeleted file mode 100644 index bcb2be2..0000000 --- a/assets/blocks/props/crystalline-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/dacite-boulder1.png b/assets/blocks/props/dacite-boulder1.png Binary files differdeleted file mode 100644 index d489222..0000000 --- a/assets/blocks/props/dacite-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/dacite-boulder2.png b/assets/blocks/props/dacite-boulder2.png Binary files differdeleted file mode 100644 index 659655e..0000000 --- a/assets/blocks/props/dacite-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/ferric-boulder1.png b/assets/blocks/props/ferric-boulder1.png Binary files differdeleted file mode 100644 index 4489a8e..0000000 --- a/assets/blocks/props/ferric-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/ferric-boulder2.png b/assets/blocks/props/ferric-boulder2.png Binary files differdeleted file mode 100644 index e2526b7..0000000 --- a/assets/blocks/props/ferric-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/pur-bush-bot.png b/assets/blocks/props/pur-bush-bot.png Binary files differdeleted file mode 100644 index 5704eb7..0000000 --- a/assets/blocks/props/pur-bush-bot.png +++ /dev/null diff --git a/assets/blocks/props/pur-bush.png b/assets/blocks/props/pur-bush.png Binary files differdeleted file mode 100644 index 98b5faf..0000000 --- a/assets/blocks/props/pur-bush.png +++ /dev/null diff --git a/assets/blocks/props/red-ice-boulder1.png b/assets/blocks/props/red-ice-boulder1.png Binary files differdeleted file mode 100644 index 37ee2b8..0000000 --- a/assets/blocks/props/red-ice-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/red-ice-boulder2.png b/assets/blocks/props/red-ice-boulder2.png Binary files differdeleted file mode 100644 index 4f1c2df..0000000 --- a/assets/blocks/props/red-ice-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/red-ice-boulder3.png b/assets/blocks/props/red-ice-boulder3.png Binary files differdeleted file mode 100644 index 4b11113..0000000 --- a/assets/blocks/props/red-ice-boulder3.png +++ /dev/null diff --git a/assets/blocks/props/red-stone-boulder1.png b/assets/blocks/props/red-stone-boulder1.png Binary files differdeleted file mode 100644 index c0570c6..0000000 --- a/assets/blocks/props/red-stone-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/red-stone-boulder2.png b/assets/blocks/props/red-stone-boulder2.png Binary files differdeleted file mode 100644 index 2b877ab..0000000 --- a/assets/blocks/props/red-stone-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/red-stone-boulder3.png b/assets/blocks/props/red-stone-boulder3.png Binary files differdeleted file mode 100644 index 4e5567d..0000000 --- a/assets/blocks/props/red-stone-boulder3.png +++ /dev/null diff --git a/assets/blocks/props/red-stone-boulder4.png b/assets/blocks/props/red-stone-boulder4.png Binary files differdeleted file mode 100644 index f40ecb9..0000000 --- a/assets/blocks/props/red-stone-boulder4.png +++ /dev/null diff --git a/assets/blocks/props/redweed1.png b/assets/blocks/props/redweed1.png Binary files differdeleted file mode 100644 index 2fbbd9e..0000000 --- a/assets/blocks/props/redweed1.png +++ /dev/null diff --git a/assets/blocks/props/redweed2.png b/assets/blocks/props/redweed2.png Binary files differdeleted file mode 100644 index 30243ff..0000000 --- a/assets/blocks/props/redweed2.png +++ /dev/null diff --git a/assets/blocks/props/redweed3.png b/assets/blocks/props/redweed3.png Binary files differdeleted file mode 100644 index a8bec50..0000000 --- a/assets/blocks/props/redweed3.png +++ /dev/null diff --git a/assets/blocks/props/rhyolite-boulder1.png b/assets/blocks/props/rhyolite-boulder1.png Binary files differdeleted file mode 100644 index a2f8e72..0000000 --- a/assets/blocks/props/rhyolite-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/rhyolite-boulder2.png b/assets/blocks/props/rhyolite-boulder2.png Binary files differdeleted file mode 100644 index 7281bd6..0000000 --- a/assets/blocks/props/rhyolite-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/rhyolite-boulder3.png b/assets/blocks/props/rhyolite-boulder3.png Binary files differdeleted file mode 100644 index 1c2cbf6..0000000 --- a/assets/blocks/props/rhyolite-boulder3.png +++ /dev/null diff --git a/assets/blocks/props/sand-boulder1.png b/assets/blocks/props/sand-boulder1.png Binary files differdeleted file mode 100644 index 4c2cbd9..0000000 --- a/assets/blocks/props/sand-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/sand-boulder2.png b/assets/blocks/props/sand-boulder2.png Binary files differdeleted file mode 100644 index 902a0d7..0000000 --- a/assets/blocks/props/sand-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/shale-boulder1.png b/assets/blocks/props/shale-boulder1.png Binary files differdeleted file mode 100644 index 6d280cc..0000000 --- a/assets/blocks/props/shale-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/shale-boulder2.png b/assets/blocks/props/shale-boulder2.png Binary files differdeleted file mode 100644 index 5ba4033..0000000 --- a/assets/blocks/props/shale-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/snow-boulder1.png b/assets/blocks/props/snow-boulder1.png Binary files differdeleted file mode 100644 index c7feac2..0000000 --- a/assets/blocks/props/snow-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/snow-boulder2.png b/assets/blocks/props/snow-boulder2.png Binary files differdeleted file mode 100644 index 5f148d7..0000000 --- a/assets/blocks/props/snow-boulder2.png +++ /dev/null diff --git a/assets/blocks/props/spore-cluster1.png b/assets/blocks/props/spore-cluster1.png Binary files differdeleted file mode 100644 index 50475fa..0000000 --- a/assets/blocks/props/spore-cluster1.png +++ /dev/null diff --git a/assets/blocks/props/spore-cluster2.png b/assets/blocks/props/spore-cluster2.png Binary files differdeleted file mode 100644 index 4d19d2d..0000000 --- a/assets/blocks/props/spore-cluster2.png +++ /dev/null diff --git a/assets/blocks/props/spore-cluster3.png b/assets/blocks/props/spore-cluster3.png Binary files differdeleted file mode 100644 index 3802836..0000000 --- a/assets/blocks/props/spore-cluster3.png +++ /dev/null diff --git a/assets/blocks/props/vibrant-crystal-cluster-shadow1.png b/assets/blocks/props/vibrant-crystal-cluster-shadow1.png Binary files differdeleted file mode 100644 index 5d68525..0000000 --- a/assets/blocks/props/vibrant-crystal-cluster-shadow1.png +++ /dev/null diff --git a/assets/blocks/props/vibrant-crystal-cluster-shadow2.png b/assets/blocks/props/vibrant-crystal-cluster-shadow2.png Binary files differdeleted file mode 100644 index 5c055e1..0000000 --- a/assets/blocks/props/vibrant-crystal-cluster-shadow2.png +++ /dev/null diff --git a/assets/blocks/props/vibrant-crystal-cluster-shadow3.png b/assets/blocks/props/vibrant-crystal-cluster-shadow3.png Binary files differdeleted file mode 100644 index 0f65c30..0000000 --- a/assets/blocks/props/vibrant-crystal-cluster-shadow3.png +++ /dev/null diff --git a/assets/blocks/props/vibrant-crystal-cluster1.png b/assets/blocks/props/vibrant-crystal-cluster1.png Binary files differdeleted file mode 100644 index 65825d8..0000000 --- a/assets/blocks/props/vibrant-crystal-cluster1.png +++ /dev/null diff --git a/assets/blocks/props/vibrant-crystal-cluster2.png b/assets/blocks/props/vibrant-crystal-cluster2.png Binary files differdeleted file mode 100644 index 3fd79a5..0000000 --- a/assets/blocks/props/vibrant-crystal-cluster2.png +++ /dev/null diff --git a/assets/blocks/props/vibrant-crystal-cluster3.png b/assets/blocks/props/vibrant-crystal-cluster3.png Binary files differdeleted file mode 100644 index 71b8ac8..0000000 --- a/assets/blocks/props/vibrant-crystal-cluster3.png +++ /dev/null diff --git a/assets/blocks/props/white-tree-dead-shadow.png b/assets/blocks/props/white-tree-dead-shadow.png Binary files differdeleted file mode 100644 index f95d982..0000000 --- a/assets/blocks/props/white-tree-dead-shadow.png +++ /dev/null diff --git a/assets/blocks/props/white-tree-dead.png b/assets/blocks/props/white-tree-dead.png Binary files differdeleted file mode 100644 index 0a6e16c..0000000 --- a/assets/blocks/props/white-tree-dead.png +++ /dev/null diff --git a/assets/blocks/props/white-tree-shadow.png b/assets/blocks/props/white-tree-shadow.png Binary files differdeleted file mode 100644 index 8ce60aa..0000000 --- a/assets/blocks/props/white-tree-shadow.png +++ /dev/null diff --git a/assets/blocks/props/white-tree.png b/assets/blocks/props/white-tree.png Binary files differdeleted file mode 100644 index a3a3a7a..0000000 --- a/assets/blocks/props/white-tree.png +++ /dev/null diff --git a/assets/blocks/props/yellow-stone-boulder1.png b/assets/blocks/props/yellow-stone-boulder1.png Binary files differdeleted file mode 100644 index 7f5166e..0000000 --- a/assets/blocks/props/yellow-stone-boulder1.png +++ /dev/null diff --git a/assets/blocks/props/yellow-stone-boulder2.png b/assets/blocks/props/yellow-stone-boulder2.png Binary files differdeleted file mode 100644 index 9d7f152..0000000 --- a/assets/blocks/props/yellow-stone-boulder2.png +++ /dev/null diff --git a/src/block/distribution.rs b/src/block/distribution.rs index 9a80e45..a8e1c5d 100644 --- a/src/block/distribution.rs +++ b/src/block/distribution.rs @@ -297,8 +297,8 @@ make_register! { "overflow-gate" => ControlBlock::new(1, true, cost!(Copper: 4, Lead: 2)); "underflow-gate" => ControlBlock::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" => ConveyorBlock::new(1, false, cost!(Beryllium: 1)); - "armored-duct" => ConveyorBlock::new(1, false, cost!(Beryllium: 2, Tungsten: 1)); + "duct" => ControlBlock::new(1, false, cost!(Beryllium: 1)); + "armored-duct" => ControlBlock::new(1, false, cost!(Beryllium: 2, Tungsten: 1)); "duct-router" => ItemBlock::new(1, true, cost!(Beryllium: 10)); "overflow-duct" => ControlBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8)); "underflow-duct" => ControlBlock::new(1, true, cost!(Graphite: 8, Beryllium: 8)); @@ -310,7 +310,7 @@ make_register! { "unit-cargo-unload-point" => ItemBlock::new(2, true, cost!(Silicon: 60, Tungsten: 60)); // sandbox only "item-source" => ItemBlock::new(1, true, &[]); - "item-void" => ConveyorBlock::new(1, true, &[]); + "item-void" => ControlBlock::new(1, true, &[]); } pub struct ItemBlock { diff --git a/src/block/environment.rs b/src/block/environment.rs index 0796230..1f1a1f8 100644 --- a/src/block/environment.rs +++ b/src/block/environment.rs @@ -109,11 +109,14 @@ register_env! { "ore-wall-beryllium": 1@3; "ore-wall-thorium": 1@3; "ore-wall-tungsten": 1@3; + "graphitic-wall": 1@3; + "graphitic-wall-large": 2@1; "pebbles": 1@3; "pine": 1@1; "pooled-cryofluid": 1@1; "red-diamond-wall": 1@3; "red-ice-wall-large": 2@1; + "red-ice-wall": 1@2; "red-ice": 1@3; "red-stone-vent": 3@2; "red-stone-wall-large": 2@1; @@ -121,6 +124,7 @@ register_env! { "red-stone": 1@4; "redmat": 1@3; "regolith-wall-large": 2@1; + "regolith-wall": 1@2; "regolith": 1@3; "rhyolite-crater": 1@3; "rhyolite-vent": 3@2; @@ -162,6 +166,7 @@ register_env! { "yellow-stone-wall": 1@2; "yellow-stone": 1@3; // props + "yellow-stone-boulder": 1@2; "snow-boulder": 1@2; "shale-boulder": 1@2; "arkyic-boulder": 1@3; @@ -177,8 +182,16 @@ register_env! { "rhyolite-boulder": 1@3; "sand-boulder": 1@2; "yellow-sand-boulder": 1@2; - // these are tall but uh + "pur-bush": 1@1; + "tendrils": 1@3; + // these are tall but uh (TODO layering) + "white-tree-dead": 1@1; + "yellowcoral": 1@1; + "white-tree": 1@1; + "redweed": 1@3; + "spore-cluster": 1@3; "crystal-blocks": 1@3; - "crytal-cluster": 1@3; + "crystal-cluster": 1@3; + "vibrant-crystal-cluster": 1@3; "crystal-orbs": 1@3; } diff --git a/src/block/mod.rs b/src/block/mod.rs index e5e8a49..5b5936e 100644 --- a/src/block/mod.rs +++ b/src/block/mod.rs @@ -27,7 +27,7 @@ macro_rules! mods { } mods! { - campaign content defense distribution drills environment liquid logic payload power production storage turrets walls + campaign content defense distribution drills environment liquid logic payload power production storage turrets walls units } mod simple; @@ -480,4 +480,5 @@ fn register(reg: &mut BlockRegistry<'_>) { logic::register(reg); walls::register(reg); environment::register(reg); + units::register(reg); } diff --git a/src/block/payload.rs b/src/block/payload.rs index 83f9700..416adaf 100644 --- a/src/block/payload.rs +++ b/src/block/payload.rs @@ -12,149 +12,26 @@ use crate::unit; use super::BlockRegistry; -make_simple!(ConstructorBlock); - -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_simple!(SimplePayloadBlock); make_register! { - "ground-factory" => AssemblerBlock::new(3, false, cost!(Copper: 50, Lead: 120, Silicon: 80), GROUND_UNITS); - "air-factory" => AssemblerBlock::new(3, false, cost!(Copper: 60, Lead: 70), AIR_UNITS); - "naval-factory" => AssemblerBlock::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" => ConstructorBlock::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20)); - "repair-turret" => ConstructorBlock::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60)); - "tank-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 200, Beryllium: 150)); - "ship-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 250, Beryllium: 200)); - "mech-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60)); - "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" => ConstructorBlock::new(5, true, cost!(Thorium: 500, Oxide: 150, Carbide: 80, Silicon: 500)); - "ship-assembler" => ConstructorBlock::new(5, true, cost!(Carbide: 100, Oxide: 200, Tungsten: 500, Silicon: 800, Thorium: 400)); - "mech-assembler" => ConstructorBlock::new(5, true, cost!(Carbide: 200, Thorium: 600, Oxide: 200, Tungsten: 500, Silicon: 900)); // smh collaris - "basic-assembler-module" => ConstructorBlock::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block - // payload - "payload-conveyor" => ConstructorBlock::new(3, false, cost!(Copper: 10, Graphite: 10)); + "payload-conveyor" => SimplePayloadBlock::new(3, false, cost!(Copper: 10, Graphite: 10)); "payload-router" => PayloadBlock::new(3, false, cost!(Copper: 10, Graphite: 15)); - "reinforced-payload-conveyor" => ConstructorBlock::new(3, false, cost!(Tungsten: 10)); - "reinforced-payload-router" => ConstructorBlock::new(3, false, cost!(Tungsten: 15)); + "reinforced-payload-conveyor" => SimplePayloadBlock::new(3, false, cost!(Tungsten: 10)); + "reinforced-payload-router" => SimplePayloadBlock::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" => ConstructorBlock::new(3, true, cost!(Beryllium: 100, Silicon: 100, Oxide: 40, Graphite: 80)); - "deconstructor" => ConstructorBlock::new(5, true, cost!(Beryllium: 250, Oxide: 100, Silicon: 250, Carbide: 250)); + "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(3, true, cost!(Silicon: 150, Oxide: 150, Tungsten: 200, PhaseFabric: 40)); - "payload-loader" => ConstructorBlock::new(3, false, cost!(Graphite: 50, Silicon: 50, Tungsten: 80)); - "payload-unloader" => ConstructorBlock::new(3, false, cost!(Graphite: 50, Silicon: 50, Tungsten: 30)); + "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" => ConstructorBlock::new(5, true, &[]); -} - -pub struct AssemblerBlock { - size: u8, - symmetric: bool, - build_cost: BuildCost, - valid: &'static [unit::Type], -} - -impl AssemblerBlock { - #[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>); + "payload-void" => SimplePayloadBlock::new(5, true, &[]); } -impl BlockLogic for AssemblerBlock { - 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 clone_state(&self, state: &State) -> State { - let state = Self::get_state(state); - Box::new(Self::create_state(*state)) - } - - fn mirror_state(&self, _: &mut State, _: bool, _: bool) {} - - fn rotate_state(&self, _: &mut State, _: bool) {} - - 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)) - } - } -} - -#[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); - #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum Payload { Empty, diff --git a/src/block/power.rs b/src/block/power.rs index 2c21cad..69a1857 100644 --- a/src/block/power.rs +++ b/src/block/power.rs @@ -30,7 +30,7 @@ make_register! { "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)); - "pyrolosis-generator" => GeneratorBlock::new(3, true, cost!(Graphite: 50, Carbide: 50, Oxide: 60, Silicon: 50)); + "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" => GeneratorBlock::new(5, true, cost!(Tungsten: 1000, Carbide: 300, Oxide: 150, Silicon: 500, PhaseFabric: 300, SurgeAlloy: 200)); // editor only diff --git a/src/block/turrets.rs b/src/block/turrets.rs index 1a931ea..e3c3cce 100644 --- a/src/block/turrets.rs +++ b/src/block/turrets.rs @@ -30,6 +30,7 @@ make_register! { "lustre" => TurretBlock::new(4, true, cost!(Silicon: 250, Graphite: 200, Oxide: 50, Carbide: 90)); "scathe" => TurretBlock::new(5, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300)); "malign" => TurretBlock::new(5, true, cost!(Carbide: 400, Beryllium: 2000, Silicon: 800, Graphite: 800, PhaseFabric: 300)); + "smite" => TurretBlock::new(5, true, cost!(Oxide: 200, SurgeAlloy: 400, Silicon: 800, Carbide: 500, PhaseFabric: 300)); } use crate::data::renderer::*; @@ -37,7 +38,7 @@ use crate::utils::ImageUtils; crate::block::simple::make_simple!(TurretBlock, |me: &Self, _, name, _, _| { let path = match name { "breach" | "diffuse" | "sublimate" | "titan" | "disperse" | "afflict" | "lustre" - | "scathe" | "malign" => format!("bases/reinforced-block-{}", me.size), + | "scathe" | "malign" | "smite" => format!("bases/reinforced-block-{}", me.size), _ => format!("bases/block-{}", me.size), }; let mut base = load("turrets", &path).unwrap().value().clone(); diff --git a/src/block/units.rs b/src/block/units.rs new file mode 100644 index 0000000..a9d15a4 --- /dev/null +++ b/src/block/units.rs @@ -0,0 +1,137 @@ +//! unit creation related blocks +use thiserror::Error; + +use crate::block::simple::*; +use crate::block::*; +use crate::data::dynamic::DynType; +use crate::unit; + +make_simple!(ConstructorBlock); +make_simple!(UnitBlock); + +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" => AssemblerBlock::new(3, false, cost!(Copper: 50, Lead: 120, Silicon: 80), GROUND_UNITS); + "air-factory" => AssemblerBlock::new(3, false, cost!(Copper: 60, Lead: 70), AIR_UNITS); + "naval-factory" => AssemblerBlock::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" => UnitBlock::new(1, true, cost!(Copper: 30, Lead: 30, Silicon: 20)); + "repair-turret" => UnitBlock::new(2, true, cost!(Thorium: 80, Silicon: 90, Plastanium: 60)); + "tank-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 200, Beryllium: 150)); + "ship-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 250, Beryllium: 200)); + "mech-fabricator" => ConstructorBlock::new(3, true, cost!(Silicon: 200, Graphite: 300, Tungsten: 60)); + "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" => ConstructorBlock::new(5, true, cost!(Thorium: 500, Oxide: 150, Carbide: 80, Silicon: 500)); + "ship-assembler" => ConstructorBlock::new(5, true, cost!(Carbide: 100, Oxide: 200, Tungsten: 500, Silicon: 800, Thorium: 400)); + "mech-assembler" => ConstructorBlock::new(5, true, cost!(Carbide: 200, Thorium: 600, Oxide: 200, Tungsten: 500, Silicon: 900)); // smh collaris + "basic-assembler-module" => ConstructorBlock::new(5, true, cost!(Carbide: 300, Thorium: 500, Oxide: 200, PhaseFabric: 400)); // the dummy block + "unit-repair-tower" => UnitBlock::new(2, true, cost!(Graphite: 90, Silicon: 90, Tungsten: 80)); + +} + +pub struct AssemblerBlock { + size: u8, + symmetric: bool, + build_cost: BuildCost, + valid: &'static [unit::Type], +} + +impl AssemblerBlock { + #[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 AssemblerBlock { + 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 clone_state(&self, state: &State) -> State { + let state = Self::get_state(state); + Box::new(Self::create_state(*state)) + } + + fn mirror_state(&self, _: &mut State, _: bool, _: bool) {} + + fn rotate_state(&self, _: &mut State, _: bool) {} + + 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)) + } + } +} + +#[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 index 2e58189..0317220 100644 --- a/src/block/walls.rs +++ b/src/block/walls.rs @@ -46,13 +46,15 @@ make_register! { "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)); - "large-tungsten-wall" => WallBlock::new(2, true, cost!(Tungsten: 6 * 4)); + "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)); diff --git a/src/data/renderer.rs b/src/data/renderer.rs index 0454d3c..34d4bfd 100644 --- a/src/data/renderer.rs +++ b/src/data/renderer.rs @@ -467,3 +467,43 @@ impl Renderable for Map<'_> { floor } } + +#[test] +fn all_blocks() { + load_zip(); + 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, + // TODO canvas + Type::Canvas + | Type::Empty + | Type::SlagCentrifuge + | Type::HeatReactor + | Type::LegacyMechPad + | Type::LegacyUnitFactory + | Type::LegacyUnitFactoryAir + | Type::LegacyUnitFactoryGround + | Type::CommandCenter + ) { + continue; + } + + let t = reg.get(dbg!(t.get_name())).unwrap(); + t.image( + None, + Some(&RenderingContext { + cross: [None; 4], + rotation: Rotation::Up, + position: PositionContext { + position: GridPos(0, 0), + width: 5, + height: 5, + }, + }), + ); + } +} |