OSDN Git Service

bg transparent color bug fixed.
authorastoria-d <astoria-d@mail.goo.ne.jp>
Fri, 29 Mar 2013 01:43:10 +0000 (10:43 +0900)
committerastoria-d <astoria-d@mail.goo.ne.jp>
Fri, 29 Mar 2013 01:43:10 +0000 (10:43 +0900)
sprite palette bug fixed.

emulator/ppucore/vram.c
emulator/ppucore/vscreen.c

index fe0bb7b..99f7c94 100644 (file)
@@ -404,16 +404,16 @@ void load_spr_attribute(struct sprite_attr sa, struct palette *plt) {
 
     /*load bg rgb palette color*/
     palette_addr = sa.palette * 4;
-    pi = bg_palette_tbl_get(palette_addr++);
+    pi = spr_palette_tbl_get(palette_addr++);
     palette_index_to_rgb15(pi, &plt->col[0]);
 
-    pi = bg_palette_tbl_get(palette_addr++);
+    pi = spr_palette_tbl_get(palette_addr++);
     palette_index_to_rgb15(pi, &plt->col[1]);
 
-    pi = bg_palette_tbl_get(palette_addr++);
+    pi = spr_palette_tbl_get(palette_addr++);
     palette_index_to_rgb15(pi, &plt->col[2]);
 
-    pi = bg_palette_tbl_get(palette_addr);
+    pi = spr_palette_tbl_get(palette_addr);
     palette_index_to_rgb15(pi, &plt->col[3]);
 }
 
index cfe165f..4694c99 100644 (file)
@@ -13,6 +13,11 @@ void load_pattern(unsigned char bank, unsigned char ptn_index, struct tile_2* pa
 void load_spr_attribute(struct sprite_attr sa, struct palette *plt);
 void sprite0_hit_set(void);
 unsigned char spr_ram_tbl_get(unsigned short offset);
+unsigned char vram_data_get(unsigned short addr);
+void palette_index_to_rgb15(unsigned char index, struct rgb15* rgb);
+
+
+#define TRANSPARENT_PALETTE_ADDR        0x3F10
 
 struct tile_rgb15_line {
     struct rgb15 d[8];
@@ -103,7 +108,9 @@ void set_bgtile(int tile_id) {
                 set_data->l[i].d[7 - j] = plt.col[pi];
             }
             else {
-                //TODO for the time being, transparent bg color is black..
+                //transparent bg color is read from sprite 0x10 color.
+                pi = vram_data_get(TRANSPARENT_PALETTE_ADDR);
+                palette_index_to_rgb15(pi, &set_data->l[i].d[7 - j]);
                 /*
                 set_data->l[i].d[7 - j].r = 0;
                 set_data->l[i].d[7 - j].g = 0;