mindustry logic execution, map- and schematic- parsing and rendering
add pass; add graphite wall ore
bendn 10 days ago
parent 8fe7538 · commit 9a9c7e2
-rw-r--r--mindus/Cargo.toml8
-rw-r--r--mindus/assets/blocks/environment/ore-wall-beryllium1.pngbin346 -> 212 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-beryllium2.pngbin294 -> 176 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-beryllium3.pngbin296 -> 179 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-graphite1.pngbin0 -> 181 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-graphite2.pngbin0 -> 186 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-graphite3.pngbin0 -> 148 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-thorium1.pngbin277 -> 184 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-thorium2.pngbin300 -> 186 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-thorium3.pngbin324 -> 197 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-tungsten1.pngbin399 -> 223 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-tungsten2.pngbin327 -> 200 bytes
-rw-r--r--mindus/assets/blocks/environment/ore-wall-tungsten3.pngbin331 -> 207 bytes
-rw-r--r--mindus/assets/blocks/environment/snow1.pngbin288 -> 172 bytes
-rw-r--r--mindus/assets/blocks/environment/snow3.pngbin673 -> 213 bytes
-rw-r--r--mindus/src/block/content.rs1
-rw-r--r--mindus/src/block/logic.rs2
-rw-r--r--mindus/src/block/mod.rs1
-rw-r--r--mindus/src/data/map.rs2
-rw-r--r--mindus/src/data/renderer.rs105
20 files changed, 65 insertions, 54 deletions
diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml
index 5aa7da2..e6976bc 100644
--- a/mindus/Cargo.toml
+++ b/mindus/Cargo.toml
@@ -1,13 +1,13 @@
[package]
name = "mindus"
-version = "5.0.41"
+version = "5.0.42"
edition = "2024"
description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)"
authors = [
"KosmosPrime <[email protected]>",
"bend-n <[email protected]>",
]
-repository = "https://github.com/bend-n/mindus.git"
+repository = "https://git.bendn.org/mindus.git"
license = "GPL-3.0"
exclude = [".github/", "items.py"]
readme = "README.md"
@@ -25,7 +25,7 @@ thiserror = "1.0"
bobbin-bits = "0.1"
enum_dispatch = "0.3"
phf = { version = "0.11", features = ["macros"] }
-fimg = { version = "0.4.33", features = [
+fimg = { version = "0.4.52", features = [
"scale",
"blur",
"save",
@@ -42,7 +42,7 @@ square = []
default = ["bin"]
[build-dependencies]
-fimg = { version = "0.4.33", features = [
+fimg = { version = "0.4.52", features = [
"scale",
"blur",
"save",
diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium1.png b/mindus/assets/blocks/environment/ore-wall-beryllium1.png
index a1dcfcf..e9a3cc3 100644
--- a/mindus/assets/blocks/environment/ore-wall-beryllium1.png
+++ b/mindus/assets/blocks/environment/ore-wall-beryllium1.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium2.png b/mindus/assets/blocks/environment/ore-wall-beryllium2.png
index 851a6b5..0904e0d 100644
--- a/mindus/assets/blocks/environment/ore-wall-beryllium2.png
+++ b/mindus/assets/blocks/environment/ore-wall-beryllium2.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-beryllium3.png b/mindus/assets/blocks/environment/ore-wall-beryllium3.png
index b87cd5a..5c9b8c7 100644
--- a/mindus/assets/blocks/environment/ore-wall-beryllium3.png
+++ b/mindus/assets/blocks/environment/ore-wall-beryllium3.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-graphite1.png b/mindus/assets/blocks/environment/ore-wall-graphite1.png
new file mode 100644
index 0000000..12b7df9
--- /dev/null
+++ b/mindus/assets/blocks/environment/ore-wall-graphite1.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-graphite2.png b/mindus/assets/blocks/environment/ore-wall-graphite2.png
new file mode 100644
index 0000000..5132f76
--- /dev/null
+++ b/mindus/assets/blocks/environment/ore-wall-graphite2.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-graphite3.png b/mindus/assets/blocks/environment/ore-wall-graphite3.png
new file mode 100644
index 0000000..5369276
--- /dev/null
+++ b/mindus/assets/blocks/environment/ore-wall-graphite3.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-thorium1.png b/mindus/assets/blocks/environment/ore-wall-thorium1.png
index a01a034..05342af 100644
--- a/mindus/assets/blocks/environment/ore-wall-thorium1.png
+++ b/mindus/assets/blocks/environment/ore-wall-thorium1.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-thorium2.png b/mindus/assets/blocks/environment/ore-wall-thorium2.png
index 4ea1ec3..ed21d0d 100644
--- a/mindus/assets/blocks/environment/ore-wall-thorium2.png
+++ b/mindus/assets/blocks/environment/ore-wall-thorium2.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-thorium3.png b/mindus/assets/blocks/environment/ore-wall-thorium3.png
index 266b53f..5a58f15 100644
--- a/mindus/assets/blocks/environment/ore-wall-thorium3.png
+++ b/mindus/assets/blocks/environment/ore-wall-thorium3.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten1.png b/mindus/assets/blocks/environment/ore-wall-tungsten1.png
index faa96fc..81e61e1 100644
--- a/mindus/assets/blocks/environment/ore-wall-tungsten1.png
+++ b/mindus/assets/blocks/environment/ore-wall-tungsten1.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten2.png b/mindus/assets/blocks/environment/ore-wall-tungsten2.png
index e8d939d..6ed7eba 100644
--- a/mindus/assets/blocks/environment/ore-wall-tungsten2.png
+++ b/mindus/assets/blocks/environment/ore-wall-tungsten2.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/ore-wall-tungsten3.png b/mindus/assets/blocks/environment/ore-wall-tungsten3.png
index da8b232..d1e7993 100644
--- a/mindus/assets/blocks/environment/ore-wall-tungsten3.png
+++ b/mindus/assets/blocks/environment/ore-wall-tungsten3.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow1.png b/mindus/assets/blocks/environment/snow1.png
index 1d320be..3387f23 100644
--- a/mindus/assets/blocks/environment/snow1.png
+++ b/mindus/assets/blocks/environment/snow1.png
Binary files differ
diff --git a/mindus/assets/blocks/environment/snow3.png b/mindus/assets/blocks/environment/snow3.png
index 8413bde..baa63ec 100644
--- a/mindus/assets/blocks/environment/snow3.png
+++ b/mindus/assets/blocks/environment/snow3.png
Binary files differ
diff --git a/mindus/src/block/content.rs b/mindus/src/block/content.rs
index 74047c4..25f5176 100644
--- a/mindus/src/block/content.rs
+++ b/mindus/src/block/content.rs
@@ -182,6 +182,7 @@ content_enum! {
"ore-crystal-thorium",
"ore-wall-thorium",
"ore-wall-beryllium",
+ "ore-wall-graphite",
"graphitic-wall",
"ore-wall-tungsten",
"graphite-press",
diff --git a/mindus/src/block/logic.rs b/mindus/src/block/logic.rs
index 67d5bb4..b4c374e 100644
--- a/mindus/src/block/logic.rs
+++ b/mindus/src/block/logic.rs
@@ -68,7 +68,7 @@ fn deser_canvas_image(b: &[u8], size: usize) -> Image<Box<[u8]>, 1> {
let word = (i + offset) >> 3;
n |= (((b[word] & (1 << ((i + offset) & 7))) != 0) as u8) << i;
}
- unsafe { p.set_pixel(i as u32 % size as u32, i as u32 / size as u32, [n]) };
+ unsafe { p.set_pixel(i as u32 % size as u32, i as u32 / size as u32, &[n]) };
}
p
}
diff --git a/mindus/src/block/mod.rs b/mindus/src/block/mod.rs
index 94c809d..a1b6df2 100644
--- a/mindus/src/block/mod.rs
+++ b/mindus/src/block/mod.rs
@@ -727,6 +727,7 @@ make_register! {
"ore-wall-beryllium" @ 1;
"ore-wall-thorium" @ 1;
"ore-wall-tungsten" @ 1;
+ "ore-wall-graphite" @ 1;
"graphitic-wall" @ 1;
"boulder" @ 1;
"arkyic-wall" @ 1;
diff --git a/mindus/src/data/map.rs b/mindus/src/data/map.rs
index 7dbafa8..7d90133 100644
--- a/mindus/src/data/map.rs
+++ b/mindus/src/data/map.rs
@@ -147,7 +147,7 @@ static FLOOR_TABLE: [[[DynImage<&'static [u8]>; 3]; 8]; BlockEnum::ALL.len()] =
| "spawn"
];
image! {
- | "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" | "ore-crystal-thorium"
+ | "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"
diff --git a/mindus/src/data/renderer.rs b/mindus/src/data/renderer.rs
index 281264a..095a69d 100644
--- a/mindus/src/data/renderer.rs
+++ b/mindus/src/data/renderer.rs
@@ -393,52 +393,6 @@ impl Renderable for Map {
);
}
}
- macro_rules! f {
- ($($x: literal)+) => { paste::paste!{
- ([$(load!([<rune _ overlay $x>] ),)+], [$(load!([<rune _ overlay _ crux $x>] ),)+])
- }};
- }
- const RUNES: ([[Image<&[u8], 4>; 3]; 109], [[Image<&[u8], 4>; 3]; 109]) = f![0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108];
-
- if tile.has_ore() {
- match tile.ore {
- Type::RuneOverlay => unsafe {
- img.overlay_at(
- &RUNES.0[tile.nd[2] as usize][scale as usize],
- scale * x as u32,
- scale * y as u32,
- );
- },
- Type::RuneOverlayCrux => unsafe {
- img.overlay_at(
- &RUNES.1[tile.nd[2] as usize][scale as usize],
- scale * x as u32,
- scale * y as u32,
- );
- },
- Type::CharacterOverlay | Type::CharacterOverlayWhite => {
- macro_rules! f {
- ($($x: literal)+) => { paste::paste!{
- [$(load!([<character _ overlay $x>] ),)+]
- }};
- }
-
- const LETTERS: [[Image<&[u8], 4>; 3]; 64] = f![0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63];
- unsafe {
- img.overlay_at(
- LETTERS[(tile.nd[2] & 0x3f) as usize][scale as usize]
- .mapped(image::Cow::Ref)
- .rotate(4 - (tile.nd[2] >> 6)),
- scale * x as u32,
- scale * y as u32,
- )
- };
- }
- ore => unsafe {
- img.overlay_at(&table(ore, scale), scale * x as u32, scale * y as u32);
- },
- }
- }
}
}
let mut img = unsafe { img.assume_init() };
@@ -523,7 +477,62 @@ impl Renderable for Map {
}
}
}
- // loop3 draws the units
+ /// loop 3 for the ores
+ for y in 0..self.height {
+ for x in 0..self.width {
+ let j = x + self.width * y;
+ let tile = unsafe { self.tiles.get_unchecked(j) };
+ let y = self.height - y - 1;
+
+ macro_rules! f {
+ ($($x: literal)+) => { paste::paste!{
+ ([$(load!([<rune _ overlay $x>] ),)+], [$(load!([<rune _ overlay _ crux $x>] ),)+])
+ }};
+ }
+ const RUNES: ([[Image<&[u8], 4>; 3]; 109], [[Image<&[u8], 4>; 3]; 109]) = f![0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108];
+
+ if tile.has_ore() {
+ match tile.ore {
+ Type::RuneOverlay => unsafe {
+ img.overlay_at(
+ &RUNES.0[tile.nd[2] as usize][scale as usize],
+ scale * x as u32,
+ scale * y as u32,
+ );
+ },
+ Type::RuneOverlayCrux => unsafe {
+ img.overlay_at(
+ &RUNES.1[tile.nd[2] as usize][scale as usize],
+ scale * x as u32,
+ scale * y as u32,
+ );
+ },
+ Type::CharacterOverlay | Type::CharacterOverlayWhite => {
+ macro_rules! f {
+ ($($x: literal)+) => { paste::paste!{
+ [$(load!([<character _ overlay $x>] ),)+]
+ }};
+ }
+
+ const LETTERS: [[Image<&[u8], 4>; 3]; 64] = f![0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63];
+ unsafe {
+ img.overlay_at(
+ LETTERS[(tile.nd[2] & 0x3f) as usize][scale as usize]
+ .mapped(image::Cow::Ref)
+ .rotate(4 - (tile.nd[2] >> 6)),
+ scale * x as u32,
+ scale * y as u32,
+ )
+ };
+ }
+ ore => unsafe {
+ img.overlay_at(&table(ore, scale), scale * x as u32, scale * y as u32);
+ },
+ }
+ }
+ }
+ }
+ // loop4 draws the units
for entity in &self.entities {
// bounds checks
let (x, y) = (
@@ -812,7 +821,7 @@ pub fn draw_map_simple(
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()));
+ img.set_pixel(x as u32, y as u32, &<[u8; 3]>::from(team.color()));
}
}
}