@@ -22,28 +22,40 @@ pub fn render(background: &BackgroundField, sprites: &SpritesWithCtx) {
22
22
fn render_background ( buf : & mut Vec < u8 > , background : & BackgroundField ) {
23
23
for ( i, bg) in background. into_iter ( ) . enumerate ( ) {
24
24
let x = ( i % 33 ) * 8 ;
25
- let y = ( i / 33 ) * 8 ;
25
+ let y = ( i / 33 ) * 8 ;
26
26
render_tile ( buf, bg, x, y) ;
27
27
}
28
28
}
29
29
30
30
fn render_sprites ( buf : & mut Vec < u8 > , sprites : & SpritesWithCtx ) {
31
31
for sprite in sprites {
32
- render_sprite ( buf, & sprite. sprite , & sprite. position , & sprite. palette ) ;
32
+ render_sprite ( buf,
33
+ & sprite. sprite ,
34
+ & sprite. position ,
35
+ & sprite. palette ,
36
+ sprite. attr ) ;
33
37
}
34
38
}
35
39
36
40
fn render_sprite ( data : & mut Vec < u8 > ,
37
41
sprite : & Sprite ,
38
42
position : & SpritePosition ,
39
- palette : & PaletteList ) {
43
+ palette : & PaletteList ,
44
+ attr : u8 ) {
45
+ let is_vertical_reverse = ( attr & 0x80 ) == 0x80 ;
46
+ let is_horizontal_reverse = ( attr & 0x40 ) == 0x40 ;
47
+ let is_low_priority = ( attr & 0x20 ) == 0x20 ;
48
+ let palette_id = attr & 0x03 ;
40
49
for i in 0 ..8 {
41
50
for j in 0 ..8 {
51
+ let x = position. 0 as usize + if is_horizontal_reverse { 7 - j } else { j } ;
52
+ let y = position. 1 as usize + if is_vertical_reverse { 7 - i } else { i } ;
53
+ // if is_low_priority && this.shouldPixelHide(x, y)) {
54
+ // continue;
55
+ // }
42
56
if sprite[ i] [ j] != 0 {
43
57
let color_id = palette[ sprite[ i] [ j] as usize ] ;
44
58
let color = COLORS [ color_id as usize ] ;
45
- let x = position. 0 as usize + j;
46
- let y = position. 1 as usize + i;
47
59
let index = ( x + ( y * 0x100 ) ) * 4 ;
48
60
data[ index] = color. 0 ;
49
61
data[ index + 1 ] = color. 1 ;
0 commit comments