From aed00c6012d0d3b435ca88f2561d2b803742fa9b Mon Sep 17 00:00:00 2001 From: iq_132 <1191709+iq132@users.noreply.github.com> Date: Sat, 14 Jun 2014 19:22:07 +0000 Subject: [PATCH] Fix cliffhanger graphics in level 2 (fixes some missing backgrounds in intro too!) --- src/burn/drv/dataeast/d_cninja.cpp | 8 ++++++-- src/burn/drv/dataeast/deco16ic.h | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/burn/drv/dataeast/d_cninja.cpp b/src/burn/drv/dataeast/d_cninja.cpp index 8eee561fb..a87522036 100644 --- a/src/burn/drv/dataeast/d_cninja.cpp +++ b/src/burn/drv/dataeast/d_cninja.cpp @@ -539,6 +539,10 @@ void __fastcall cninja_main_write_word(UINT32 address, UINT16 data) void __fastcall cninja_main_write_byte(UINT32 address, UINT8 data) { + // need for cliffhanger + deco16_write_control_byte(0, address, 0x140000, data) + deco16_write_control_byte(1, address, 0x150000, data) + switch (address) { // case 0x190000: @@ -1789,7 +1793,7 @@ static void cninja_draw_sprites() x = x & 0x01ff; y = y & 0x01ff; - if (x >= nScreenWidth) x -= 512; + if (x >= 512) x -= 512; if (y >= 256) y -= 512; x = 240 - x; y = 240 - y; @@ -2083,7 +2087,7 @@ static INT32 EdrandyDraw() if (nSpriteEnable & 2) deco16_draw_layer(2, pTransDraw, DECO16_LAYER_PRIORITY(0x02)); if (nSpriteEnable & 4) deco16_draw_layer(1, pTransDraw, DECO16_LAYER_PRIORITY(0x04)); - cninja_draw_sprites(); + if (nBurnLayer & 1) cninja_draw_sprites(); if (nSpriteEnable & 8) deco16_draw_layer(0, pTransDraw, 0); diff --git a/src/burn/drv/dataeast/deco16ic.h b/src/burn/drv/dataeast/deco16ic.h index af86b3108..a404138e5 100644 --- a/src/burn/drv/dataeast/deco16ic.h +++ b/src/burn/drv/dataeast/deco16ic.h @@ -57,6 +57,14 @@ void deco16_palette_recalculate(UINT32 *palette, UINT8 *pal); return; \ } +#define deco16_write_control_byte(num, addr, a, d) \ + if ((addr & 0xfffffff0) == a) { \ + if ((addr) & 1) \ + deco16_pf_control[num][(addr & 0x0f)/2] = (deco16_pf_control[num][(addr & 0x0f)/2] & 0xff00) | d; \ + else \ + deco16_pf_control[num][(addr & 0x0f)/2] = (deco16_pf_control[num][(addr & 0x0f)/2] & 0x00ff) | (d << 8);\ + return; \ + } #define deco16_read_control_word(num, addr, a) \ if ((addr & 0xfffffff0) == a) { \