redclash: improve sprite colors

This commit is contained in:
hap 2022-08-27 01:52:17 +02:00
parent 9e4842c64a
commit 0a2ee566cf
2 changed files with 16 additions and 15 deletions

View File

@ -9,15 +9,18 @@ runs on hardware similar to Lady Bug
driver by inkling
Notes:
- In the Tehkan set (redclsha) the ship doesn't move during attract mode. Earlier version?
Gameplay is different too.
- In the Tehkan set (redclashta) the ship doesn't move during attract mode.
Earlier version? Gameplay is different too.
TODO:
- Colors might be right, need screen shots to verify
- Some graphical problems in both games, but without screenshots its hard to
know what we're aiming for
- Colors are not right. In zerohour P1 score should be white, the top score green,
and "TOP" should be magenta. How is this determined? It's as if only the top part
of the screen has this exception. Sprite colors look ok.
- Some graphical problems in both games
- redclash supports more background layer effects: white+mixed with other colors,
used in canyon parts and during the big ufo explosion
- Player bullets: should be 8*2px magenta in zerohour. It's weirder in redclash:
1st half of the screen 4*2px red, 2nd half 8*2px yellow.
- Sound (analog, schematics available for Zero Hour)
***************************************************************************/
@ -579,9 +582,9 @@ void redclash_state::init_redclash()
}
GAME( 1980, zerohour, 0, zerohour, zerohour, redclash_state, init_redclash, ROT270, "Universal", "Zero Hour (set 1)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, zerohoura, zerohour, zerohour, zerohour, redclash_state, init_redclash, ROT270, "Universal", "Zero Hour (set 2)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, zerohouri, zerohour, zerohour, zerohour, redclash_state, init_redclash, ROT270, "bootleg (Inder SA)", "Zero Hour (Inder)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, zerohour, 0, zerohour, zerohour, redclash_state, init_redclash, ROT270, "Universal", "Zero Hour (set 1)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, zerohoura, zerohour, zerohour, zerohour, redclash_state, init_redclash, ROT270, "Universal", "Zero Hour (set 2)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, zerohouri, zerohour, zerohour, zerohour, redclash_state, init_redclash, ROT270, "bootleg (Inder SA)", "Zero Hour (Inder)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1981, redclash, 0, redclash, redclash, redclash_state, init_redclash, ROT270, "Kaneko", "Red Clash", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1981, redclasht, redclash, redclash, redclash, redclash_state, init_redclash, ROT270, "Kaneko (Tehkan license)", "Red Clash (Tehkan, set 1)", MACHINE_NO_SOUND | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -85,10 +85,10 @@ void redclash_state::palette(palette_device &palette) const
{
uint8_t ctabentry;
ctabentry = bitswap<4>((color_prom[i] >> 0) & 0x0f, 0,1,2,3);
ctabentry = bitswap<4>(color_prom[i], 0,1,2,3);
palette.set_pen_indirect(i + 0x20, ctabentry);
ctabentry = bitswap<4>((color_prom[i] >> 4) & 0x0f, 0,1,2,3);
ctabentry = bitswap<4>(color_prom[i], 4,5,6,7);
palette.set_pen_indirect(i + 0x40, ctabentry);
}
@ -152,11 +152,10 @@ void redclash_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
if (m_spriteram[offs + i] & 0x80)
{
int color = m_spriteram[offs + i + 2] & 0x0f;
int color = bitswap<4>(m_spriteram[offs + i + 2], 5,2,1,0);
int sx = m_spriteram[offs + i + 3];
int sy = offs / 4 + (m_spriteram[offs + i] & 0x07);
switch ((m_spriteram[offs + i] & 0x18) >> 3)
{
case 3: /* 24x24 */
@ -222,7 +221,6 @@ void redclash_state::draw_bullets( bitmap_ind16 &bitmap, const rectangle &clipre
{
for (int offs = 0; offs < 0x20; offs++)
{
// sx = m_videoramoffs];
int sx = 8 * offs + (m_videoram[offs] & 0x07); /* ?? */
int sy = 0xff - m_videoram[offs + 0x20];