diff --git a/src/ppu.rs b/src/ppu.rs index 24bdf3f3be154e5e10459de2297463112230da31..5787ee7120f9656626534d98bd454ddf9b1233fa 100644 --- a/src/ppu.rs +++ b/src/ppu.rs @@ -154,6 +154,8 @@ pub struct ObjectData { x: i16, y: i16, tile: u8, + palette_cgb: u8, + tile_bank: u8, palette: u8, xflip: bool, yflip: bool, @@ -167,6 +169,8 @@ impl ObjectData { x: 0, y: 0, tile: 0, + palette_cgb: 0, + tile_bank: 0, palette: 0, xflip: false, yflip: false, @@ -940,6 +944,8 @@ impl Ppu { 0x01 => obj.x = value as i16 - 8, 0x02 => obj.tile = value, 0x03 => { + obj.palette_cgb = value & 0x07; + obj.tile_bank = (value & 0x08 == 0x08) as u8; obj.palette = (value & 0x10 == 0x10) as u8; obj.xflip = value & 0x20 == 0x20; obj.yflip = value & 0x40 == 0x40; @@ -1158,10 +1164,14 @@ impl Ppu { continue; } - let palette = if obj.palette == 0 { - self.palette_obj_0 + let palette = if self.gb_mode == GameBoyMode::Cgb { + &self.palettes_color_obj[obj.palette_cgb as usize] } else { - self.palette_obj_1 + if obj.palette == 0 { + &self.palette_obj_0 + } else { + &self.palette_obj_1 + } }; // calculates the offset in the color buffer (raw color information