cgb colour palettes work

This commit is contained in:
Alex Janka 2023-04-23 10:04:24 +10:00
parent 5039b19222
commit 63818494b7
2 changed files with 19 additions and 8 deletions

View file

@ -456,11 +456,15 @@ where
let lsb = get_bit(lsbs, x_addr); let lsb = get_bit(lsbs, x_addr);
let msb = get_bit(msbs, x_addr); let msb = get_bit(msbs, x_addr);
// maybe have to change this for cgb mode // maybe have to change this for cgb mode
let (colour, is_zero) = match object.flags.dmg_palette { let (colour, is_zero) = if self.is_cgb_mode() {
ObjPalette::Zero => self.obj_palette_0, (ColourInner::from_bits(lsb, msb), !lsb && !msb)
ObjPalette::One => self.obj_palette_1, } else {
} match object.flags.dmg_palette {
.map_bits(lsb, msb); ObjPalette::Zero => self.obj_palette_0,
ObjPalette::One => self.obj_palette_1,
}
.map_bits(lsb, msb)
};
if is_zero { if is_zero {
continue; continue;
} }
@ -548,7 +552,11 @@ where
}; };
let lsb = get_bit(lsbs, 7 - tile_px_x); let lsb = get_bit(lsbs, 7 - tile_px_x);
let msb = get_bit(msbs, 7 - tile_px_x); let msb = get_bit(msbs, 7 - tile_px_x);
let (colour, is_zero) = self.bg_palette.map_bits(lsb, msb); let (colour, is_zero) = if self.is_cgb_mode() {
(ColourInner::from_bits(lsb, msb), !lsb && !msb)
} else {
self.bg_palette.map_bits(lsb, msb)
};
self.is_bg_zero[x] = is_zero; self.is_bg_zero[x] = is_zero;
let cgb_data = self let cgb_data = self

View file

@ -103,10 +103,13 @@ where
let real_px_x = (tile_x as usize * 8) + px_x as usize; let real_px_x = (tile_x as usize * 8) + px_x as usize;
let lsb = get_bit(lsbs, 7 - px_x); let lsb = get_bit(lsbs, 7 - px_x);
let msb = get_bit(msbs, 7 - px_x); let msb = get_bit(msbs, 7 - px_x);
let colour = palette.map_bits(lsb, msb); let colour = if is_cgb_mode {
ColourInner::from_bits(lsb, msb)
} else {
palette.map_bits(lsb, msb).0
};
self.sprite_buffer[real_px_x + (real_px_y * TILE_WINDOW_WIDTH)] = colour self.sprite_buffer[real_px_x + (real_px_y * TILE_WINDOW_WIDTH)] = colour
.0
.rgb_bytes(cgb_data.map(|v| (v, attributes.palette))) .rgb_bytes(cgb_data.map(|v| (v, attributes.palette)))
.into(); .into();
} }