summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2018-06-11 22:28:09 -0400
committerJakob L. Kreuze <jakob@memeware.net>2018-06-11 22:28:09 -0400
commitc1fcfc3a58fc0061fb9262c95d728063029e1c2f (patch)
tree984f978e03cf9923b396add798f2631b5f3c6f82
parentfe14bab96a780a2980cc6f51135ebd5dfa79667e (diff)
Working ART to bitmap conversion. Apparently I suck at bitwise math.
-rw-r--r--README.md6
-rw-r--r--src/bitmap.rs8
-rw-r--r--src/main.rs15
3 files changed, 7 insertions, 22 deletions
diff --git a/README.md b/README.md
index f4e5702..69c01fe 100644
--- a/README.md
+++ b/README.md
@@ -40,9 +40,9 @@ lack of foresight.
- [ ] Implement a timer system.
- Needs to expose some sort of 'totalclock'.
- [ ] Implement support for ART bitmaps.
- - [ ] PALETTE.DAT parser.
- - [ ] ART parser.
- - [ ] Efficient ART-to-bitmap conversion.
+ - [x] PALETTE.DAT parser.
+ - [x] ART parser.
+ - [x] Efficient ART-to-bitmap conversion.
- [ ] Advanced ART features such as translucency and shading.
- [ ] Tests.
- [ ] Implement support for the CON language.
diff --git a/src/bitmap.rs b/src/bitmap.rs
index afc78c5..8773a66 100644
--- a/src/bitmap.rs
+++ b/src/bitmap.rs
@@ -103,12 +103,12 @@ impl BitmapManager {
// FIXME: As of right now it's RGB, not ARGB.
for i in 0..256 {
- let r = data[(i * 3)] as u32;
- let g = data[(i * 3) + 1] as u32;
- let b = data[(i * 3) + 2] as u32;
+ let r = data[(i * 3)] << 2;
+ let g = data[(i * 3) + 1] << 2;
+ let b = data[(i * 3) + 2] << 2;
// FIXME: Also, I'm not a fan of this manual shifting shit.
- palette.push(r << 4 | g << 2 | b << 0);
+ palette.push(((r as u32) << 16) | ((g as u32) << 8) | (b as u32));
}
palette
diff --git a/src/main.rs b/src/main.rs
index 8880719..3a95beb 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -40,19 +40,4 @@ fn main() {
let bitmap_manager = bitmap::BitmapManager::new(&group_manager).unwrap();
let _tile = bitmap_manager.get_tile(277).unwrap();
-
- // use std::fs::File;
- // use std::io::Write;
- // let mut file = File::create("/tmp/test.data").unwrap();
- // let mut data: Vec<u8> = Vec::new();
- // for pixel in tile.data.iter() {
- // let r = pixel / 16;
- // let g = pixel / 4;
- // let b = pixel & 0xff;
- // data.push(r as u8);
- // data.push(g as u8);
- // data.push(b as u8);
- // }
- // println!("{} x {}", tile.width, tile.height);
- // file.write_all(&data);
}