diff --git a/src/display/mod.rs b/src/display/mod.rs index 96cb86b..d6742c4 100644 --- a/src/display/mod.rs +++ b/src/display/mod.rs @@ -491,6 +491,10 @@ impl Display { } } + if pixel_origin == PixelOrigin::BackgroundPriority { + continue; + } + let x_maybe_flipped: u8 = if sprite.is_x_flipped() { x_o ^ 7 } else { x_o }; b1 = (tile_line_1 & 1 << (7 - x_o)) > 0; b2 = (tile_line_2 & 1 << (7 - x_o)) > 0; @@ -599,7 +603,6 @@ impl Display { let bg_attribs = BgMapAttributes(self.vram1[vram_offset]); let vram = [&*self.vram0, &*self.vram1][bg_attribs.vram_bank_number()]; - // TODO: Priority let tile_offset_y = if bg_attribs.vertical_flip() { 7 ^ tile_offset_y } else { @@ -631,7 +634,11 @@ impl Display { let c = ((b2 as u8) * 2 + b1 as u8) as usize; // let color = self.background_palette.get_color(c); let color = self.background_palette_cgb[bg_attribs.palette_number()].get_color(c); - self.set_pixel(render_x, render_y, color, PixelOrigin::Background(c)); + if bg_attribs.has_priority() && (self.control & 1) == 1 { + self.set_pixel(render_x, render_y, color, PixelOrigin::BackgroundPriority); + } else { + self.set_pixel(render_x, render_y, color, PixelOrigin::Background(c)); + } } } diff --git a/src/display/structs.rs b/src/display/structs.rs index aaf6e1b..85254ae 100644 --- a/src/display/structs.rs +++ b/src/display/structs.rs @@ -27,6 +27,7 @@ impl BgMapAttributes { pub enum PixelOrigin { Empty, Background(usize), + BackgroundPriority, Window, Sprite, }