diff options
author | Angelo Salese <angelosa@users.noreply.github.com> | 2011-09-08 17:04:39 +0000 |
---|---|---|
committer | Angelo Salese <angelosa@users.noreply.github.com> | 2011-09-08 17:04:39 +0000 |
commit | 2894dee2287befae971fe4dc7e67a71a29f30d96 (patch) | |
tree | 74d9216de319692f4c6442146f8a7c23605bddf9 /src/mame/drivers/kingdrby.c | |
parent | 16975a62648893fe354ed56448009c7e56c18a30 (diff) |
Improved sprites in King Derby [Ag
Diffstat (limited to 'src/mame/drivers/kingdrby.c')
-rw-r--r-- | src/mame/drivers/kingdrby.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/mame/drivers/kingdrby.c b/src/mame/drivers/kingdrby.c index 46e466dd9ab..9d4e13c54a4 100644 --- a/src/mame/drivers/kingdrby.c +++ b/src/mame/drivers/kingdrby.c @@ -158,6 +158,12 @@ static VIDEO_START(kingdrby) tilemap_set_transparent_pen(state->m_sc1_tilemap,0); } +static const UINT8 hw_sprite[16] = +{ + 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x22, 0x22 +}; + static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const rectangle *cliprect) { kingdrby_state *state = machine.driver_data<kingdrby_state>(); @@ -167,26 +173,26 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta /*sprites not fully understood.*/ for(count=0;count<0x48;count+=4) { - int x,y,spr_offs,colour,fx,dx,dy,h,w,mode; + int x,y,spr_offs,colour,fx,dx,dy,h,w; spr_offs = (spriteram[count]); spr_offs &=0x7f; - mode = spr_offs; spr_offs*=4; colour = (spriteram[count+3] & 0xf0)>>4; fx = spriteram[count] & 0x80; - if(spriteram[count+1] == 0) - y = 0; - else - y = 0x100-spriteram[count+1]; + y = (spriteram[count+1] == 0) ? 0 : 0x100-spriteram[count+1]; x = spriteram[count+2] - ((spriteram[count+3] & 1)<<8); - /*TODO: I really believe that this is actually driven by a prom.*/ - if((mode >= 0x168/4) && (mode <= 0x17f/4)) { h = 1; w = 1; } - else if((mode >= 0x18c/4) && (mode <= 0x18f/4)) { h = 1; w = 1; } - else if((mode >= 0x19c/4) && (mode <= 0x19f/4)) { h = 1; w = 1; } - else if((mode & 3) == 3 || (mode) >= 0x13c/4) { h = 2; w = 2; } - else { h = 3; w = 4; } + /* TODO: hardcoded via a table, there must be some other way to do this */ + h = (hw_sprite[colour] & 0xf0) >> 4; + w = (hw_sprite[colour] & 0x0f) >> 0; + + if(h == 1 && w == 1) + { + spr_offs /= 4; + /* TODO: horse number signs */ + spr_offs = 0x16c + (((spr_offs & 8) << 2) ^ 0x20) + ((spr_offs & 4) << 2) + (spr_offs & 3); + } if(fx) { @@ -385,7 +391,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0x2fff) AM_ROM - AM_RANGE(0x3000, 0x3fff) AM_ROM //sound rom tested for the post check + AM_RANGE(0x3000, 0x3fff) AM_ROM //sound rom, tested for the post check AM_RANGE(0x4000, 0x43ff) AM_RAM AM_SHARE("nvram") //backup ram AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) /* I/O Ports */ AM_RANGE(0x6000, 0x6003) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w) /* I/O Ports */ @@ -1174,6 +1180,6 @@ ROM_START( cowrace ) ROM_END -GAME( 1981, kingdrby, 0, kingdrby, kingdrby, 0, ROT0, "Tazmi", "King Derby (1981)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS| GAME_IMPERFECT_SOUND ) -GAME( 1986, kingdrbb, kingdrby, kingdrbb, kingdrbb, 0, ROT0, "bootleg (Casino Electronics)", "King Derby (Taiwan bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS ) +GAME( 1981, kingdrby, 0, kingdrby, kingdrby, 0, ROT0, "Tazmi", "King Derby (1981)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) +GAME( 1986, kingdrbb, kingdrby, kingdrbb, kingdrbb, 0, ROT0, "bootleg (Casino Electronics)", "King Derby (Taiwan bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS ) GAME( 2000, cowrace, kingdrby, cowrace, kingdrbb, 0, ROT0, "bootleg", "Cow Race (1986 King Derby hack)", GAME_NOT_WORKING | GAME_WRONG_COLORS ) |