trunk/src/mame/drivers/raiden2.c
| r31931 | r31932 | |
| 815 | 815 | 06 yyyy yyyy yyyy yyyy y = ypos |
| 816 | 816 | */ |
| 817 | 817 | |
| 818 | | while( source > sprites ){ |
| 818 | while( source >= sprites ){ |
| 819 | 819 | int tile_number = source[1]; |
| 820 | 820 | int sx = source[2]; |
| 821 | 821 | int sy = source[3]; |
| r31931 | r31932 | |
| 1069 | 1069 | |
| 1070 | 1070 | /* screen_update_raiden2 (move to video file) */ |
| 1071 | 1071 | |
| 1072 | | void raiden2_state::blend_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect, bitmap_ind16 &source, UINT16 layer) |
| 1072 | void raiden2_state::blend_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect, bitmap_ind16 &source, int layer) |
| 1073 | 1073 | { |
| 1074 | if(layer == -1) |
| 1075 | return; |
| 1076 | |
| 1074 | 1077 | const UINT8 alpha_active[0x10] = { // MSB first |
| 1075 | 1078 | //00 08 10 18 20 28 30 38 40 48 50 58 60 68 70 78 |
| 1076 | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x00 |
| 1079 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00 |
| 1077 | 1080 | }; |
| 1078 | 1081 | |
| 1079 | 1082 | const pen_t *pens = &m_palette->pen(0); |
| r31931 | r31932 | |
| 1085 | 1088 | UINT16 val = *src++; |
| 1086 | 1089 | if((val & 0xc000) == layer && (val & 0x000f) != 0x000f) { |
| 1087 | 1090 | val &= 0x07ff; |
| 1088 | | // - 04 40 38 50 25 6b |
| 1089 | | // + 3f 5c 68 6f |
| 1090 | 1091 | int page = val >> 4; |
| 1091 | 1092 | if(((alpha_active[page >> 3] & (0x80 >> (page & 7))) || page == ccol) && (val & 0xf) == 0xe) |
| 1092 | 1093 | *dst = alpha_blend_r32(*dst, pens[val], 0x7f); |
| r31931 | r31932 | |
| 1122 | 1123 | bitmap.fill(m_palette->black_pen(), cliprect); |
| 1123 | 1124 | draw_sprites(cliprect); |
| 1124 | 1125 | |
| 1125 | | blend_layer(bitmap, cliprect, sprite_buffer, 0); |
| 1126 | blend_layer(bitmap, cliprect, sprite_buffer, cur_spri[0]); |
| 1126 | 1127 | |
| 1127 | 1128 | if (!(raiden2_tilemap_enable & 1)) |
| 1128 | 1129 | tilemap_draw_and_blend(screen, bitmap, cliprect, background_layer); |
| 1129 | 1130 | |
| 1130 | | blend_layer(bitmap, cliprect, sprite_buffer, 1); |
| 1131 | blend_layer(bitmap, cliprect, sprite_buffer, cur_spri[1]); |
| 1131 | 1132 | |
| 1132 | 1133 | if (!(raiden2_tilemap_enable & 2)) |
| 1133 | 1134 | tilemap_draw_and_blend(screen, bitmap, cliprect, midground_layer); |
| 1134 | 1135 | |
| 1135 | | blend_layer(bitmap, cliprect, sprite_buffer, 2); |
| 1136 | blend_layer(bitmap, cliprect, sprite_buffer, cur_spri[2]); |
| 1136 | 1137 | |
| 1137 | 1138 | if (!(raiden2_tilemap_enable & 4)) |
| 1138 | 1139 | tilemap_draw_and_blend(screen, bitmap, cliprect, foreground_layer); |
| 1139 | 1140 | |
| 1140 | | blend_layer(bitmap, cliprect, sprite_buffer, 3); |
| 1141 | blend_layer(bitmap, cliprect, sprite_buffer, cur_spri[3]); |
| 1141 | 1142 | |
| 1142 | 1143 | if (!(raiden2_tilemap_enable & 8)) |
| 1143 | 1144 | tilemap_draw_and_blend(screen, bitmap, cliprect, text_layer); |
| 1144 | 1145 | |
| 1146 | blend_layer(bitmap, cliprect, sprite_buffer, cur_spri[4]); |
| 1147 | |
| 1148 | |
| 1145 | 1149 | return 0; |
| 1146 | 1150 | } |
| 1147 | 1151 | |
| r31931 | r31932 | |
| 3327 | 3331 | |
| 3328 | 3332 | DRIVER_INIT_MEMBER(raiden2_state,raiden2) |
| 3329 | 3333 | { |
| 3334 | static const int spri[5] = { 0, 1, 2, 3, -1 }; |
| 3335 | cur_spri = spri; |
| 3330 | 3336 | membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000); |
| 3331 | 3337 | membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000); |
| 3332 | 3338 | raiden2_decrypt_sprites(machine()); |
| r31931 | r31932 | |
| 3334 | 3340 | |
| 3335 | 3341 | DRIVER_INIT_MEMBER(raiden2_state,raidendx) |
| 3336 | 3342 | { |
| 3343 | static const int spri[5] = { 0, 1, 2, 3, -1 }; |
| 3344 | cur_spri = spri; |
| 3337 | 3345 | membank("mainbank1")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000); |
| 3338 | 3346 | membank("mainbank2")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000); |
| 3339 | 3347 | raiden2_decrypt_sprites(machine()); |
| r31931 | r31932 | |
| 3341 | 3349 | |
| 3342 | 3350 | DRIVER_INIT_MEMBER(raiden2_state,xsedae) |
| 3343 | 3351 | { |
| 3352 | static const int spri[5] = { 0, 1, 2, 3, -1 }; |
| 3353 | cur_spri = spri; |
| 3344 | 3354 | /* doesn't have banking */ |
| 3345 | 3355 | } |
| 3346 | 3356 | |
| 3347 | 3357 | DRIVER_INIT_MEMBER(raiden2_state,zeroteam) |
| 3348 | 3358 | { |
| 3359 | static const int spri[5] = { -1, 0, 1, 2, 3 }; |
| 3360 | cur_spri = spri; |
| 3349 | 3361 | membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000); |
| 3350 | 3362 | membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000); |
| 3351 | 3363 | zeroteam_decrypt_sprites(machine()); |