From 9bbca338d476ea6ce73dce3f07fc5e3c8b0d00b0 Mon Sep 17 00:00:00 2001 From: Roberto Zandona Date: Sat, 14 Mar 2009 11:39:17 +0000 Subject: [PATCH] 00230: On the emulated game when the waves are near the border of the screen you can see them on the other side. This is wrong. --- src/mame/video/m57.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/mame/video/m57.c b/src/mame/video/m57.c index e24f3e7be24..4e1deec3a15 100644 --- a/src/mame/video/m57.c +++ b/src/mame/video/m57.c @@ -174,11 +174,34 @@ WRITE8_HANDLER( m57_flipscreen_w ) static void draw_background(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { - int y; + int y,x; + + for (y = 0; y < 128; y++) + tilemap_set_scrollx(bg_tilemap, y, (y < 64) ? 0 : m57_scroll[64]); - for (y = 0; y < 256; y++) - tilemap_set_scrollx(bg_tilemap, y, (y < 64) ? 0 : (y < 128) ? m57_scroll[64] : m57_scroll[y]); tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + + for (y = 128; y <= cliprect->max_y; y++) + { + if (m57_scroll[y] < 128) + { + for (x = cliprect->min_x; x <= cliprect->max_x; x++) + { + if ((x + m57_scroll[y]) <= cliprect->max_x) + *BITMAP_ADDR16(bitmap, y, x) = *BITMAP_ADDR16(bitmap, y, x + m57_scroll[y]); + else + *BITMAP_ADDR16(bitmap, y, x) = *BITMAP_ADDR16(bitmap, y, cliprect->max_x); + } + } else { + for (x = cliprect->max_x; x >= cliprect->min_x; x--) + { + if ((x + m57_scroll[y] - 256) >= cliprect->min_x) + *BITMAP_ADDR16(bitmap, y, x) = *BITMAP_ADDR16(bitmap, y, x + m57_scroll[y] - 256); + else + *BITMAP_ADDR16(bitmap, y, x) = *BITMAP_ADDR16(bitmap, y, cliprect->min_x); + } + } + } } /*************************************