mindustry logic execution, map- and schematic- parsing and rendering
characters
67 files changed, 36 insertions, 7 deletions
diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml index f595e7c..093008d 100644 --- a/mindus/Cargo.toml +++ b/mindus/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mindus" -version = "5.0.35" +version = "5.0.36" edition = "2024" description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)" authors = [ 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..9b006ea --- /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..a7b925e --- /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..ded368a --- /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..d69c4d2 --- /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..1aeb8e4 --- /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..e7e82fd --- /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..64b5115 --- /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..14a4cd0 --- /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..4b81750 --- /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..fd09690 --- /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..756f9fd --- /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..9a350e0 --- /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..97f4d26 --- /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..826156c --- /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..762fc6a --- /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..1d60397 --- /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..7aa6f41 --- /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..07cfedf --- /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..c1bc6c6 --- /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..19ba22d --- /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..a962690 --- /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..0677239 --- /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..c23de62 --- /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..df7e921 --- /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..b3a47e1 --- /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..beca9aa --- /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..9f6d043 --- /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..4e45123 --- /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..1ef3b1c --- /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..d7fab03 --- /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..75677d1 --- /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..9493709 --- /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..00227cb --- /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..116395f --- /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..7c274db --- /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..77f6296 --- /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..83af737 --- /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..3c073d8 --- /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..1364421 --- /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..7994cf2 --- /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..c9dd169 --- /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..7200732 --- /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..dacfe19 --- /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..f70d134 --- /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..09ec0d0 --- /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..03f933c --- /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..da28451 --- /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..36b0fe0 --- /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..cf00d8f --- /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..0ceb36d --- /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..874c662 --- /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..04bb090 --- /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..31a88da --- /dev/null +++ b/mindus/assets/blocks/characters/character-overlay9.png diff --git a/mindus/src/data/map.rs b/mindus/src/data/map.rs index 17bf896..a0276fc 100644 --- a/mindus/src/data/map.rs +++ b/mindus/src/data/map.rs @@ -105,7 +105,7 @@ pub struct Tile { pub floor: BlockEnum, pub ore: BlockEnum, build: Option<Build>, - pub color: [u8; 3], + pub nd: [u8; 7], } macro_rules! lo { @@ -177,7 +177,7 @@ impl Tile { floor, ore, build: None, - color: [0; 3], + nd: [0; 7], } } @@ -801,7 +801,7 @@ impl MapReader { } Yielded(MapData::Bloc(Bloc::Nd(b, d))) => { b.map(|b| m[i].set_block(b)); - m[i].color = d.skip::<3>().take() + m[i].nd = d } Complete(Err(x)) => return Err(x), _ => unreachable!(), diff --git a/mindus/src/data/renderer.rs b/mindus/src/data/renderer.rs index b1541ff..0d0c5b0 100644 --- a/mindus/src/data/renderer.rs +++ b/mindus/src/data/renderer.rs @@ -18,6 +18,7 @@ use crate::{ block::Rotation, data::map::{ThinBloc, ThinMapData}, }; +use atools::ArrayTools; use either::Either; use fimg::{BlendingOverlay, BlendingOverlayAt, uninit}; @@ -339,6 +340,7 @@ impl Renderable for Map { let tile = unsafe { self.tiles.get_unchecked(j) }; let y = self.height - y - 1; // println!("draw {tile:?} ({x}, {y})"); + if [ Type::ColoredFloor, Type::MetalTiles1, @@ -367,7 +369,9 @@ impl Renderable for Map { let mut i = i.boxed(); unsafe { img.overlay_at( - &i.as_mut().tint(tile.color.into()).as_ref(), + &i.as_mut() + .tint(tile.nd.skip::<3>().take::<3>().into()) + .as_ref(), scale * x as u32, scale * y as u32, ) @@ -381,7 +385,30 @@ impl Renderable for Map { }; } if tile.has_ore() { - unsafe { img.overlay_at(&tile.ore(scale), scale * x as u32, scale * y as u32) }; + if tile.ore == Type::CharacterOverlay || tile.ore == 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( + &ImageHolder::from( + LETTERS[(tile.nd[2] & 0x3f) as usize][scale as usize], + ) + .rotate(tile.nd[2] & 0x3) + .borrow(), + scale * x as u32, + scale * y as u32, + ) + }; + } else { + unsafe { + img.overlay_at(&tile.ore(scale), scale * x as u32, scale * y as u32) + }; + } } } } @@ -429,7 +456,9 @@ impl Renderable for Map { .boxed(); unsafe { img.overlay_at( - &i.as_mut().tint(tile.color.into()).as_ref(), + &i.as_mut() + .tint(tile.nd.skip::<3>().take::<3>().into()) + .as_ref(), scale * x as u32, scale * y as u32, ) |