trunk/src/mame/drivers/suna8.c
r249116 | r249117 | |
27 | 27 | |
28 | 28 | - hardhea2: in test mode press P1&P2 button 2 to see a picture of each level |
29 | 29 | - Rough Ranger default dipswitch settings are based on the settings listed in |
30 | | the Sharp Image licensed Rough Ranger manual / NOTICE sheet dated 8-5-88 |
31 | | - rranger video: http://www.nicovideo.jp/watch/sm15788808 (not perfect: fireball masking, lev. 5; masking/missing legs, lev. 10) |
32 | | - hardhead video: https://youtu.be/zamQvXr9_xs |
33 | | - starfigh video: http://youtu.be/SIwV7wjvnHM (missing starfield effect!) |
| 30 | the Sharp Image licensed Rough Ranger manaul / NOTICE sheet dated 8-5-88 |
| 31 | - starfigh video: http://youtu.be/SIwV7wjvnHM -> missing starfield effect! |
34 | 32 | - brickzn video: http://youtu.be/yfU1C7A3iZI (recorded from v6.0, Joystick version) |
35 | 33 | |
36 | 34 | ***************************************************************************/ |
r249116 | r249117 | |
1887 | 1885 | MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) |
1888 | 1886 | MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) |
1889 | 1887 | |
1890 | | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_text) |
| 1888 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_textdim12) |
1891 | 1889 | |
1892 | 1890 | /* sound hardware */ |
1893 | 1891 | MCFG_SPEAKER_STANDARD_MONO("mono") |
r249116 | r249117 | |
1941 | 1939 | MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) |
1942 | 1940 | MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) |
1943 | 1941 | |
1944 | | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_text) |
| 1942 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_textdim8) |
1945 | 1943 | |
1946 | 1944 | /* sound hardware */ |
1947 | 1945 | MCFG_SPEAKER_STANDARD_MONO("mono") |
r249116 | r249117 | |
2923 | 2921 | m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); |
2924 | 2922 | } |
2925 | 2923 | |
2926 | | GAME( 1988, sranger, 0, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (v2.0)", MACHINE_IMPERFECT_GRAPHICS ) |
2927 | | GAME( 1988, rranger, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", MACHINE_IMPERFECT_GRAPHICS ) |
2928 | | GAME( 1988, rrangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg", "Rough Ranger (v2.0, bootleg)", MACHINE_IMPERFECT_GRAPHICS ) |
2929 | | GAME( 1988, srangero, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (older)", MACHINE_IMPERFECT_GRAPHICS ) |
2930 | | GAME( 1988, srangern, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (NOVA license)", "Super Ranger (older, NOVA license)", MACHINE_IMPERFECT_GRAPHICS ) |
2931 | | GAME( 1988, srangerw, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (WDK license)", "Super Ranger (older, WDK license)", MACHINE_IMPERFECT_GRAPHICS ) |
2932 | | GAME( 1988, srangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg (NYWA)", "Super Ranger (older, bootleg)", MACHINE_IMPERFECT_GRAPHICS ) |
| 2924 | GAME( 1988, sranger, 0, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (v2.0)", 0 ) |
| 2925 | GAME( 1988, rranger, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", 0 ) |
| 2926 | GAME( 1988, rrangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg", "Rough Ranger (v2.0, bootleg)", 0 ) |
| 2927 | GAME( 1988, srangero, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (older)", 0 ) |
| 2928 | GAME( 1988, srangern, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (NOVA license)", "Super Ranger (older, NOVA license)", 0 ) |
| 2929 | GAME( 1988, srangerw, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (WDK license)", "Super Ranger (older, WDK license)", 0 ) |
| 2930 | GAME( 1988, srangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg (NYWA)", "Super Ranger (older, bootleg)", 0 ) |
2933 | 2931 | |
2934 | 2932 | GAME( 1988, hardhead, 0, hardhead, hardhead, suna8_state, hardhead, ROT0, "SunA", "Hard Head", 0 ) |
2935 | 2933 | GAME( 1988, hardheadb, hardhead, hardhead, hardhead, suna8_state, hardhedb, ROT0, "bootleg", "Hard Head (bootleg)", 0 ) |
trunk/src/mame/video/suna8.c
r249116 | r249117 | |
17 | 17 | sent to the screen. Each sprite uses 4 bytes, held within the last |
18 | 18 | page of tiles. |
19 | 19 | |
| 20 | * Note: later games use a more complex format than the following, |
| 21 | which is yet to be completely understood. |
| 22 | |
| 23 | [ Sprites Format ] |
| 24 | |
| 25 | Offset: Bits: Value: |
| 26 | |
| 27 | 0.b Y (Bottom up) |
| 28 | |
| 29 | 1.b 7--- ---- Sprite Size (1 = 2x32 tiles; 0 = 2x2) |
| 30 | |
| 31 | 2x2 Sprites: |
| 32 | -65- ---- Tiles Row (height = 8 tiles) |
| 33 | ---4 ---- Page |
| 34 | |
| 35 | 2x32 Sprites: |
| 36 | -6-- ---- Ignore X (Multisprite) |
| 37 | --54 ---- Page |
| 38 | |
| 39 | ---- 3210 Tiles Column (width = 2 tiles) |
| 40 | |
| 41 | 2.b X |
| 42 | |
| 43 | 3.b 7--- ---- |
| 44 | -6-- ---- X (Sign Bit) |
| 45 | --54 3--- |
| 46 | ---- -210 Tiles Bank |
| 47 | |
| 48 | |
| 49 | [ Sprite's Tiles Format ] |
| 50 | |
| 51 | |
| 52 | Offset: Bits: Value: |
| 53 | |
| 54 | 0.b Code (Low Bits) |
| 55 | |
| 56 | 1.b 7--- ---- Flip Y |
| 57 | -6-- ---- Flip X |
| 58 | --54 32-- Color |
| 59 | ---- --10 Code (High Bits) |
| 60 | |
| 61 | |
| 62 | |
20 | 63 | Set TILEMAPS to 1 to debug. |
21 | 64 | Press Z (you see the "tilemaps" in RAM) or |
22 | 65 | Press X (you see the "tilemaps" in ROM) then |
r249116 | r249117 | |
29 | 72 | |
30 | 73 | #include "emu.h" |
31 | 74 | #include "includes/suna8.h" |
32 | | #include "drawgfxm.h" |
33 | 75 | |
34 | 76 | /*************************************************************************** |
35 | 77 | For Debug: there's no tilemap, just sprites. |
r249116 | r249117 | |
138 | 180 | |
139 | 181 | |
140 | 182 | |
141 | | void suna8_state::suna8_vh_start_common(bool has_text, GFXBANK_TYPE_T gfxbank_type) |
| 183 | void suna8_state::suna8_vh_start_common(int text_dim, GFXBANK_TYPE_T gfxbank_type) |
142 | 184 | { |
143 | | m_has_text = has_text; |
| 185 | m_text_dim = text_dim; |
144 | 186 | m_spritebank = 0; |
145 | 187 | m_gfxbank = 0; |
146 | 188 | m_gfxbank_type = gfxbank_type; |
147 | 189 | m_palettebank = 0; |
148 | 190 | |
149 | | if (!m_has_text) |
| 191 | if (!m_text_dim) |
150 | 192 | { |
151 | 193 | m_banked_paletteram.allocate(0x200 * 2); |
152 | 194 | |
r249116 | r249117 | |
157 | 199 | #if TILEMAPS |
158 | 200 | m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suna8_state::get_tile_info),this), TILEMAP_SCAN_COLS, |
159 | 201 | |
160 | | 8, 8, 0x20*(m_has_text ? 4 : 16), 0x20); |
| 202 | 8, 8, 0x20*(m_text_dim ? 4 : 16), 0x20); |
161 | 203 | |
162 | 204 | m_bg_tilemap->set_transparent_pen(15); |
163 | 205 | #endif |
164 | 206 | } |
165 | 207 | |
166 | | VIDEO_START_MEMBER(suna8_state,suna8_text) { suna8_vh_start_common( true, GFXBANK_TYPE_SPARKMAN); } |
167 | | VIDEO_START_MEMBER(suna8_state,suna8_sparkman) { suna8_vh_start_common( false, GFXBANK_TYPE_SPARKMAN); } |
168 | | VIDEO_START_MEMBER(suna8_state,suna8_brickzn) { suna8_vh_start_common( false, GFXBANK_TYPE_BRICKZN); } |
169 | | VIDEO_START_MEMBER(suna8_state,suna8_starfigh) { suna8_vh_start_common( false, GFXBANK_TYPE_STARFIGH); } |
| 208 | VIDEO_START_MEMBER(suna8_state,suna8_textdim8) { suna8_vh_start_common( 8, GFXBANK_TYPE_SPARKMAN); } |
| 209 | VIDEO_START_MEMBER(suna8_state,suna8_textdim12) { suna8_vh_start_common( 12, GFXBANK_TYPE_SPARKMAN); } |
| 210 | VIDEO_START_MEMBER(suna8_state,suna8_sparkman) { suna8_vh_start_common( 0, GFXBANK_TYPE_SPARKMAN); } |
| 211 | VIDEO_START_MEMBER(suna8_state,suna8_brickzn) { suna8_vh_start_common( 0, GFXBANK_TYPE_BRICKZN); } |
| 212 | VIDEO_START_MEMBER(suna8_state,suna8_starfigh) { suna8_vh_start_common( 0, GFXBANK_TYPE_STARFIGH); } |
170 | 213 | |
171 | 214 | /*************************************************************************** |
172 | 215 | |
r249116 | r249117 | |
176 | 219 | |
177 | 220 | ***************************************************************************/ |
178 | 221 | |
179 | | #define PIXEL_OP_REBASE_TRANSPEN_PRIORITY_MASK(DEST, PRIORITY, SOURCE) \ |
180 | | do \ |
181 | | { \ |
182 | | UINT32 srcdata = (SOURCE); \ |
183 | | if (srcdata != trans_pen) \ |
184 | | { \ |
185 | | if ((PRIORITY) == 0) \ |
186 | | (DEST) = color + srcdata; \ |
187 | | } \ |
188 | | } \ |
189 | | while (0) |
190 | | |
191 | | class mygfx_element : public gfx_element |
| 222 | void suna8_state::draw_normal_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int which) |
192 | 223 | { |
193 | | public: |
194 | | void prio_mask_transpen(bitmap_ind16 &dest, const rectangle &cliprect, |
195 | | UINT32 code, UINT32 color, int flipx, int flipy, INT32 destx, INT32 desty, |
196 | | bitmap_ind8 &priority, UINT32 trans_pen) |
197 | | { |
198 | | color = colorbase() + granularity() * (color % colors()); |
199 | | code %= elements(); |
200 | | DRAWGFX_CORE(UINT16, PIXEL_OP_REBASE_TRANSPEN_PRIORITY_MASK, UINT8); |
201 | | } |
202 | | }; |
203 | | |
204 | | /*************************************************************************** |
205 | | |
206 | | [ Sprites Format ] |
207 | | |
208 | | * Note: later games use a more complex format than the following |
209 | | |
210 | | Offset: Bits: Value: |
211 | | |
212 | | 0.b Y (Bottom up) |
213 | | |
214 | | 1.b 7--- ---- Sprite Size (1 = 2x32 tiles; 0 = 2x2) |
215 | | |
216 | | 2x2 Sprites: |
217 | | -65- ---- Tiles Row (height = 8 tiles) |
218 | | ---4 ---- Page |
219 | | |
220 | | 2x32 Sprites: |
221 | | -6-- ---- Ignore X (Multisprite) |
222 | | --54 ---- Page |
223 | | |
224 | | ---- 3210 Tiles Column (width = 2 tiles) |
225 | | |
226 | | 2.b X |
227 | | |
228 | | 3.b 7--- ---- Text Sprite |
229 | | -6-- ---- X (Sign Bit) <- Also Set For Text Sprites |
230 | | --54 3210 Tiles Bank ($400 tiles each) |
231 | | |
232 | | |
233 | | [ Sprite's Tiles Format ] |
234 | | |
235 | | |
236 | | Offset: Bits: Value: |
237 | | |
238 | | 0.b Code (Low Bits) |
239 | | |
240 | | 1.b 7--- ---- Flip Y |
241 | | -6-- ---- Flip X |
242 | | --54 32-- Color |
243 | | ---- --10 Code (High Bits) |
244 | | |
245 | | ***************************************************************************/ |
246 | | |
247 | | void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int which) |
248 | | { |
249 | 224 | UINT8 *spriteram = m_spriteram + which * 0x2000 * 2; |
250 | 225 | |
| 226 | int i; |
251 | 227 | int mx = 0; // multisprite x counter |
252 | 228 | |
253 | 229 | int max_x = m_screen->width() - 8; |
254 | 230 | int max_y = m_screen->height() - 8; |
255 | 231 | |
256 | | if (m_has_text) |
257 | | screen.priority().fill(0, cliprect); |
258 | | |
259 | | for (int i = start; i < end; i += 4) |
| 232 | for (i = 0x1d00; i < 0x2000; i += 4) |
260 | 233 | { |
261 | 234 | int srcpg, srcx,srcy, dimx,dimy, tx, ty; |
262 | 235 | int gfxbank, colorbank = 0, flipx,flipy, multisprite; |
r249116 | r249117 | |
266 | 239 | int x = spriteram[i + 2]; |
267 | 240 | int bank = spriteram[i + 3]; |
268 | 241 | |
269 | | bool read_mask = false; |
270 | | |
271 | | if (m_has_text) |
| 242 | if (m_text_dim) |
272 | 243 | { |
273 | 244 | // Older, simpler hardware: hardhead, rranger |
274 | | |
275 | | // rranger (20:18): |
276 | | // fireball (fe00: 19 00 28 07) not masked by text (fd48: e0 00 00 c0, fd4c: 10 00 00 c0), fire (fdb0: 30 00 00 c0, fdb4: 20 00 00 c0) |
277 | | // fireball (fe00: 20 00 ba 07) is masked!? But only by fire? |
278 | | // rranger (33:04, 35:17): |
279 | | // generally no masking by fire, but there are missing legs on some enemies. |
280 | | // Could be a sprite limit hit, as there are many sprites on that line, and it's affected by the horizontal (dead) player |
281 | | read_mask = true; |
282 | | |
283 | | if ((bank & 0xc0) == 0xc0) |
284 | | { |
285 | | // hardhead: fd88/8c/90 -> f994..f9c0 |
286 | | // rranger: fd48/4c -> f980..f9ac |
287 | | // fdb0/b4 -> f9c0..f9fc |
288 | | // note: fireballs in level 5 (fe20/40) should go above flames and score (text sprites) |
289 | | int text_list = (i - start) & 0x20; |
290 | | int text_start = text_list ? 0x19c0 : 0x1980; |
291 | | bool write_mask = (text_list == 0); // hack? |
292 | | draw_text_sprites(screen, bitmap, cliprect, text_start, text_start + 0x80, y, write_mask); |
293 | | continue; |
294 | | } |
295 | | |
296 | 245 | flipx = 0; |
297 | 246 | flipy = 0; |
298 | 247 | gfxbank = bank & 0x3f; |
r249116 | r249117 | |
314 | 263 | } |
315 | 264 | else |
316 | 265 | { |
317 | | // Newer, more complex hardware: brickzn, hardhea2, sparkman, starfigh |
| 266 | // Newer, more complex hardware: brickzn, hardhea2, sparkman?, starfigh |
318 | 267 | switch( code & 0xc0 ) |
319 | 268 | { |
320 | 269 | case 0xc0: |
r249116 | r249117 | |
333 | 282 | gfxbank = bank & 0x1f; |
334 | 283 | srcpg = (code >> 4) & 3; |
335 | 284 | break; |
| 285 | // hardhea2: fire code=52/54 bank=a4; player code=02/04/06 bank=08; arrow:code=16 bank=27 |
336 | 286 | case 0x40: |
337 | | // hardhea2: fire code=52/54 bank=a4; player code=02/04/06 bank=08; arrow:code=16 bank=27 |
338 | 287 | dimx = 4; dimy = 4; |
339 | 288 | srcx = (code & 0xe) * 2; |
340 | 289 | flipx = code & 0x01; |
r249116 | r249117 | |
398 | 347 | x = x - ((bank & 0x40) ? 0x100 : 0); |
399 | 348 | y = (0x100 - y - dimy*8 ) & 0xff; |
400 | 349 | |
401 | | // Multi Sprite |
| 350 | /* Multi Sprite */ |
402 | 351 | if ( multisprite ) { mx += dimx*8; x = mx; } |
403 | 352 | else mx = x; |
404 | 353 | |
r249116 | r249117 | |
430 | 379 | sy = max_y - sy; tile_flipy = !tile_flipy; |
431 | 380 | } |
432 | 381 | |
433 | | int code = tile + (attr & 0x3)*0x100 + gfxbank; |
434 | | int color = (((attr >> 2) & 0xf) ^ colorbank) + 0x10 * m_palettebank; // player2 in hardhea2 and sparkman |
435 | | |
436 | | if (read_mask) |
437 | | ((mygfx_element*)(m_gfxdecode->gfx(which)))->prio_mask_transpen(bitmap, cliprect, |
438 | | code, color, tile_flipx, tile_flipy, sx, sy, screen.priority(), 0xf); |
439 | | else |
440 | | m_gfxdecode->gfx(which)->transpen(bitmap, cliprect, |
441 | | code, color, tile_flipx, tile_flipy, sx, sy, 0xf); |
| 382 | m_gfxdecode->gfx(which)->transpen(bitmap,cliprect, |
| 383 | tile + (attr & 0x3)*0x100 + gfxbank, |
| 384 | (((attr >> 2) & 0xf) ^ colorbank) + 0x10 * m_palettebank, // player2 in hardhea2 and sparkman |
| 385 | tile_flipx, tile_flipy, |
| 386 | sx, sy, 0xf); |
442 | 387 | } |
443 | 388 | } |
| 389 | |
444 | 390 | } |
445 | 391 | } |
446 | 392 | |
447 | | /*************************************************************************** |
448 | | |
449 | | [ Text Sprites Format ] |
450 | | |
451 | | Offset: Bits: Value: |
452 | | |
453 | | 0.b Tiles Y (height = 2 tiles) |
454 | | |
455 | | 1.b 7--- ---- 0 = Skip Sprite |
456 | | -6-- ---- |
457 | | --54 ---- Page |
458 | | ---- 3210 Tiles Column (width = 2 tiles) |
459 | | |
460 | | 2.b X |
461 | | |
462 | | 3.b 7--- ---- 0 = Last Sprite |
463 | | -6-- ---- X (Sign Bit) |
464 | | --54 3210 Tiles Bank ($400 tiles each) |
465 | | |
466 | | Each text sprite is 2x2 tiles |
467 | | |
468 | | ***************************************************************************/ |
469 | | |
470 | | void suna8_state::draw_text_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int ypos, bool write_mask) |
| 393 | void suna8_state::draw_text_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) |
471 | 394 | { |
472 | 395 | UINT8 *spriteram = m_spriteram; |
| 396 | int i; |
473 | 397 | |
474 | 398 | int max_x = m_screen->width() - 8; |
475 | 399 | int max_y = m_screen->height() - 8; |
476 | 400 | |
477 | | bool last = false; |
478 | | for (int i = start; i < end && !last; i += 4) |
| 401 | for (i = 0x1900; i < 0x19ff; i += 4) |
479 | 402 | { |
480 | 403 | int srcpg, srcx,srcy, dimx,dimy, tx, ty; |
481 | 404 | |
r249116 | r249117 | |
485 | 408 | int bank = spriteram[i + 3]; |
486 | 409 | |
487 | 410 | if (~code & 0x80) continue; |
488 | | last = !(bank & 0x80); |
489 | 411 | |
490 | | dimx = 2; dimy = 2; |
491 | | srcx = (code & 0xf) * 2; srcy = ((y & 0xf8) - (ypos & 0xf8) - 0x10) / 8; |
| 412 | dimx = 2; dimy = m_text_dim; |
| 413 | srcx = (code & 0xf) * 2; srcy = (y & 0xf0) / 8; |
492 | 414 | srcpg = (code >> 4) & 3; |
493 | 415 | |
494 | 416 | x = x - ((bank & 0x40) ? 0x100 : 0); |
| 417 | y = 0; |
495 | 418 | |
496 | 419 | bank = (bank & 0x3f) * 0x400; |
497 | 420 | |
r249116 | r249117 | |
499 | 422 | { |
500 | 423 | for (tx = 0; tx < dimx; tx ++) |
501 | 424 | { |
| 425 | int real_ty = (ty < (dimy/2)) ? ty : (ty + 0x20 - dimy); |
| 426 | |
502 | 427 | int addr = (srcpg * 0x20 * 0x20) + |
503 | 428 | ((srcx + tx) & 0x1f) * 0x20 + |
504 | | ((srcy + ty) & 0x1f); |
| 429 | ((srcy + real_ty) & 0x1f); |
505 | 430 | |
506 | 431 | int tile = spriteram[addr*2 + 0]; |
507 | 432 | int attr = spriteram[addr*2 + 1]; |
r249116 | r249117 | |
510 | 435 | int flipy = attr & 0x80; |
511 | 436 | |
512 | 437 | int sx = x + tx * 8; |
513 | | int sy = (0xf0 - ypos + ty * 8) & 0xff; |
| 438 | int sy = (y + real_ty * 8) & 0xff; |
514 | 439 | |
515 | 440 | if (flip_screen()) |
516 | 441 | { |
r249116 | r249117 | |
518 | 443 | sy = max_y - sy; flipy = !flipy; |
519 | 444 | } |
520 | 445 | |
521 | | m_gfxdecode->gfx(0)->transpen(bitmap, cliprect, |
| 446 | m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, |
522 | 447 | tile + (attr & 0x3)*0x100 + bank, |
523 | 448 | (attr >> 2) & 0xf, |
524 | 449 | flipx, flipy, |
525 | | sx, sy, 0xf ); |
| 450 | sx, sy, 0xf); |
526 | 451 | } |
527 | 452 | } |
528 | | } |
529 | 453 | |
530 | | if (write_mask) |
531 | | { |
532 | | // Fill the text sprites row with high priority for masking |
533 | | int sy = (0xf0 - ypos) & 0xff; |
534 | | if (flip_screen()) |
535 | | sy = max_y - sy - 8; |
536 | | rectangle text_clip(cliprect.min_x, cliprect.max_x, sy, sy + 0x10 - 1); |
537 | | text_clip &= cliprect; |
538 | | screen.priority().fill(1, text_clip); |
539 | 454 | } |
540 | 455 | } |
541 | 456 | |
r249116 | r249117 | |
549 | 464 | |
550 | 465 | UINT32 suna8_state::screen_update_suna8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
551 | 466 | { |
552 | | // see hardhead, hardhea2 test mode (press button 2 for both players) |
| 467 | /* see hardhead, hardhea2 test mode (press button 2 for both players) */ |
553 | 468 | bitmap.fill(0xff, cliprect); |
554 | 469 | |
555 | 470 | #ifdef MAME_DEBUG |
r249116 | r249117 | |
566 | 481 | if (machine().input().code_pressed_once(KEYCODE_S)) { m_trombank++; machine().tilemap().mark_all_dirty(); } |
567 | 482 | |
568 | 483 | m_trombank &= 0xf; |
569 | | m_page &= m_has_text ? 3 : (m_gfxdecode->gfx(1) ? 15 : 7); |
| 484 | m_page &= m_text_dim ? 3 : (m_gfxdecode->gfx(1) ? 15 : 7); |
570 | 485 | m_tiles %= max_tiles; |
571 | 486 | if (m_tiles < 0) m_tiles += max_tiles; |
572 | 487 | |
r249116 | r249117 | |
578 | 493 | m_rombank, m_palettebank, m_spritebank, |
579 | 494 | m_page, m_tiles, m_trombank); |
580 | 495 | #endif |
581 | | return 0; |
582 | 496 | } |
| 497 | else |
583 | 498 | #endif |
584 | 499 | #endif |
| 500 | { |
| 501 | // Normal sprites |
| 502 | draw_normal_sprites(bitmap,cliprect, 0); |
585 | 503 | |
586 | | // Sprites |
587 | | draw_sprites(screen, bitmap, cliprect, 0x1d00, 0x2000, 0); |
| 504 | // More normal sprites (second sprite "chip" in sparkman) |
| 505 | if (m_gfxdecode->gfx(1)) |
| 506 | draw_normal_sprites(bitmap,cliprect, 1); |
588 | 507 | |
589 | | // More sprites (second sprite "chip" in sparkman) |
590 | | if (m_gfxdecode->gfx(1)) |
591 | | draw_sprites(screen, bitmap, cliprect, 0x1d00, 0x2000, 1); |
592 | | |
| 508 | // Text sprites (earlier games only) |
| 509 | if (m_text_dim) |
| 510 | draw_text_sprites(bitmap,cliprect); |
| 511 | } |
593 | 512 | return 0; |
594 | 513 | } |