Jump to content

ARCADE 0.185


Robert
 Share

Recommended Posts

I tried fixing 'START POSITION ERROR!!' message appeared in the bug reported place for now.

  • From the third level, if you die, the game hangs because the restart level is wrong. (MT #00377)
  • Go into the secret hole and die in the cave, you restart in a totally black area and you can't do anything. (MT #00205)

There seems to be some mistakes in cchip mapping.
There may be other parts of the same problem. (I haven't played this game too much :sweaty:)

Here is diff patch for MAME 0.186:

--- src\mame\machine\bonzeadv.cpp	2015-06-04 19:59:32.000000000 +0900
+++ src\mame\machine\bonzeadv.cpp	2017-06-14 18:49:37.000000000 +0900
@@ -65,7 +65,7 @@ static const struct cchip_mapping level0
 	{ 0x0a20, 0x0c80, 0x0000, 0x0100,   0x0a68, 0x0018, 0x0070, 0x0058 },
 	{ 0x0c80, 0x0e00, 0x0000, 0x0100,   0x0c40, 0x0018, 0x0070, 0x0040 },
 
-	{ 0x0380, 0x07c0, 0x0100, 0x0200,   0x0038, 0x0418, 0x0070, 0x00a8 },
+	{ 0x0380, 0x07c0, 0x0100, 0x0200,   0x0438, 0x0018, 0x0070, 0x00a8 },
 	{ 0xff }
 };
 
@@ -97,17 +97,16 @@ static const struct cchip_mapping level0
 	{ 0x06e0, 0x0840, 0x04f4, 0x05f8,   0x0670, 0x0518, 0x0078, 0x0048 },
 	{ 0x0840, 0x0a10, 0x04f4, 0x05f8,   0x07d8, 0x0518, 0x0070, 0x0060 },
 	{ 0x0a10, 0x0b80, 0x04f4, 0x05f8,   0x09e8, 0x0500, 0x0080, 0x0080 },
-	{ 0x0b80, 0x1090, 0x04f4, 0x05f8,   0x0b20, 0x0418, 0x0070, 0x0080 },
 
 	{ 0x0230, 0x03a0, 0x040c, 0x04f4,   0x02e8, 0x04b0, 0x0080, 0x0090 },
-	{ 0x03a0, 0x03b0, 0x040c, 0x04f4,   0x0278, 0x0318, 0x0078, 0x00a8 },
-	{ 0x0520, 0x08e0, 0x040c, 0x04f4,   0x0608, 0x0318, 0x0080, 0x0058 },
-	{ 0x08e0, 0x0a00, 0x040c, 0x04f4,   0x0878, 0x0318, 0x0078, 0x0098 },
+	{ 0x0840, 0x0b80, 0x040c, 0x04f4,   0x0908, 0x0418, 0x0078, 0x0030 },
+	{ 0x0b80, 0x1090, 0x040c, 0x04f4,   0x0b20, 0x0418, 0x0070, 0x0080 },
 
 	{ 0x0230, 0x03b0, 0x02f8, 0x040c,   0x0278, 0x0318, 0x0078, 0x00a8 },
 	{ 0x03b0, 0x0520, 0x02f8, 0x040c,   0x0390, 0x0318, 0x0070, 0x00b8 },
 	{ 0x0520, 0x08e0, 0x02f8, 0x040c,   0x0608, 0x0318, 0x0080, 0x0058 },
-	{ 0x08e0, 0x0a00, 0x02f8, 0x040c,   0x0878, 0x0318, 0x0078, 0x0098 }
+	{ 0x08e0, 0x0a00, 0x02f8, 0x040c,   0x0878, 0x0318, 0x0078, 0x0098 },
+	{ 0xff }
 };
 
 static const struct cchip_mapping level03[] =

EDIT: I'm sorry. This patch I wrote yesterday is not correctly patched because tabs has been replaced by spaces.

So If you saved this yesterday please try again.

Edited by demonkatze
  • Like 1
Link to comment
Share on other sites

Thanks for work on this demonkatze. I'll test this tomorrow, right now I'm building new groovymame (time to refresh my arcade gaming PC).

 

As always thanks MameSick, Robert and Dink for all work :)

Link to comment
Share on other sites

After some tests means dying in many places till ice level I didn't encounter any game crash. I'll try today finish game and test alternatives routes in levels.

 

PS. I manually edited source when I realized that I cannot apply diff :)

Edited by haynor666
Link to comment
Share on other sites

Yep, this looks like a real good job. I'm not familiar with the game but for what I tested by myself ,the two mentioned bugs don't occur anymore. So I vote for inclusion in the next ARCADE release.

Link to comment
Share on other sites

Robert, mameSick is this diff ok for taito_f3? I generated this from taito_f3 taken from arcade source versus offcial 186 source.

 

Notice that - if (cx>=m_clip_al##pf_num && cx<m_clip_ar##pf_num && !(cx>=m_clip_bl##pf_num && cx<m_clip_br##pf_num)) \

+ if (cx>=m_clip_al##pf_num && cx<m_clip_ar##pf_num-1 && !(cx>=m_clip_bl##pf_num && cx<m_clip_br##pf_num)) \

 

is still here

 

diff -Nru src/mame/video/taito_f3.cpp src-fx/mame/video/taito_f3.cpp
--- src/mame/video/taito_f3.cpp	Wed May 31 01:17:25 2017
+++ src-fx/mame/video/taito_f3.cpp	Wed Jun 14 18:35:33 2017
@@ -1388,7 +1388,7 @@
 }
 
 #define UPDATE_PIXMAP_SP(pf_num) \
-	if(cx>=clip_als && cx<clip_ars && !(cx>=clip_bls && cx<clip_brs)) \
+	if(cx>=clip_als && cx<clip_ars-1 && !(cx>=clip_bls && cx<clip_brs)) \
 	{ \
 		sprite_pri=sprite[pf_num]&m_pval; \
 		if(sprite_pri) \
@@ -1404,7 +1404,7 @@
 	}
 
 #define UPDATE_PIXMAP_LP(pf_num) \
-	if (cx>=m_clip_al##pf_num && cx<m_clip_ar##pf_num && !(cx>=m_clip_bl##pf_num && cx<m_clip_br##pf_num)) \
+	if (cx>=m_clip_al##pf_num && cx<m_clip_ar##pf_num-1 && !(cx>=m_clip_bl##pf_num && cx<m_clip_br##pf_num)) \
 	{ \
 		m_tval=*m_tsrc##pf_num; \
 		if(m_tval&0xf0) \
@@ -1924,8 +1924,16 @@
 		_y_zoom[y] = (line_zoom&0xff) << 9;
 
 		/* Evaluate clipping */
-		if (pri&0x0800)
+		/* Notes:
+		   kludge: line-disable breaks quizhuhu text & landmakr "you win / you lose" text. [april 23, 2017 -dink]
+		   somehow I think 0x0800 has nothing to do with line-disable.
+		   although tcobra2 uses this to clip the sides of the playfield
+		*/
+
+		if (pri&0x0800 && m_f3_game != LANDMAKR)
+		{
 			line_enable=0;
+		}
 		else if (pri&0x0330)
 		{
 			//fast path todo - remove line enable
@@ -2070,6 +2078,11 @@
 		else
 			line_enable=1;
 
+		if ((m_f3_game == ARABIANM) && line_enable)
+		{ // force opaque vram & pixel layer kludge: fixes arabianm missing cutscene text, gseeker missing continue screen april.21&28.2017_dink
+			line_enable = 1;
+		}
+
 		line_t->pri[y]=pri;
 
 		/* Evaluate clipping */
@@ -2341,10 +2354,16 @@
 				{
 					if(alpha_type==1)
 					{
-						/* if (m_f3_alpha_level_2as==0   && m_f3_alpha_level_2ad==255)
-						 *     alpha_mode[i]=3; alpha_mode_flag[i] |= 0x80;}
-						 * will display continue screen in gseeker (mt 00026) */
-						if     (m_f3_alpha_level_2as==0   && m_f3_alpha_level_2ad==255) alpha_mode[i]=0;
+						if     (m_f3_alpha_level_2as==0   && m_f3_alpha_level_2ad==255)
+						{
+							if (m_f3_game == GSEEKER) // will display continue screen (MT 00026)
+							{
+								alpha_mode[i] = 3;
+								alpha_mode_flag[i] |= 0x80;
+							}
+							else
+								alpha_mode[i] = 0;
+						}
 						else if(m_f3_alpha_level_2as==255 && m_f3_alpha_level_2ad==0  ) alpha_mode[i]=1;
 					}
 					else if(alpha_type==2)


Edited by haynor666
Link to comment
Share on other sites

I wrote this here along the flow of the conversation.

 

Namco NB1 hack also breaks some graphics of Nebulas Ray.

So I modified it a bit.

 

namconb1_state::video_update_common in src/mame/video/namconb1.cpp

// MAMEFX start
            if (m_pos_irq_level != 0 && pri >= 5) // raster interrupt enabled (special priority cases)
            {
                if (pri == 5) c123_tilemap_draw( screen, bitmap, cliprect, pri );
                if (cliprect.max_y == visarea_sprites.max_y) // no raster on sprites?? faster!
                {
                    if (pri != 5) c123_tilemap_draw( screen, bitmap, visarea_sprites, pri );
                    c355_obj_draw(screen, bitmap, visarea_sprites, pri );
                }
            }
            else
            {    
                c123_tilemap_draw( screen, bitmap, cliprect, pri );
                c355_obj_draw(screen, bitmap, cliprect, pri );
            }
// MAMEFX end
I tested Nebulas Ray and some other games and it's probably okay.

 

 

And it isn't related to above hack

 

TIMER_DEVICE_CALLBACK_MEMBER(namconb1_state::scantimer) in src/mame/drivers/namconb1.cpp

m_screen->update_partial(posirq_scanline);
Change to
m_screen->update_partial(posirq_scanline - 1);
This fixes stage 5 warp effect of Nebulas Ray. (You can also see it in attract demo)

 

 

P.S. Sorry about my Google-translated lousy English :oops:

 

This has been added to the source. Thanks!
Link to comment
Share on other sites

I tried fixing 'START POSITION ERROR!!' message appeared in the bug reported place for now.

  • From the third level, if you die, the game hangs because the restart level is wrong. (MT #00377)
  • Go into the secret hole and die in the cave, you restart in a totally black area and you can't do anything. (MT #00205)
There seems to be some mistakes in cchip mapping.

There may be other parts of the same problem. (I haven't played this game too much :sweaty:)

 

Here is diff patch for MAME 0.186:

--- src\mame\machine\bonzeadv.cpp	2015-06-04 19:59:32.000000000 +0900
+++ src\mame\machine\bonzeadv.cpp	2017-06-14 18:49:37.000000000 +0900
@@ -65,7 +65,7 @@ static const struct cchip_mapping level0
 	{ 0x0a20, 0x0c80, 0x0000, 0x0100,   0x0a68, 0x0018, 0x0070, 0x0058 },
 	{ 0x0c80, 0x0e00, 0x0000, 0x0100,   0x0c40, 0x0018, 0x0070, 0x0040 },
 
-	{ 0x0380, 0x07c0, 0x0100, 0x0200,   0x0038, 0x0418, 0x0070, 0x00a8 },
+	{ 0x0380, 0x07c0, 0x0100, 0x0200,   0x0438, 0x0018, 0x0070, 0x00a8 },
 	{ 0xff }
 };
 
@@ -97,17 +97,16 @@ static const struct cchip_mapping level0
 	{ 0x06e0, 0x0840, 0x04f4, 0x05f8,   0x0670, 0x0518, 0x0078, 0x0048 },
 	{ 0x0840, 0x0a10, 0x04f4, 0x05f8,   0x07d8, 0x0518, 0x0070, 0x0060 },
 	{ 0x0a10, 0x0b80, 0x04f4, 0x05f8,   0x09e8, 0x0500, 0x0080, 0x0080 },
-	{ 0x0b80, 0x1090, 0x04f4, 0x05f8,   0x0b20, 0x0418, 0x0070, 0x0080 },
 
 	{ 0x0230, 0x03a0, 0x040c, 0x04f4,   0x02e8, 0x04b0, 0x0080, 0x0090 },
-	{ 0x03a0, 0x03b0, 0x040c, 0x04f4,   0x0278, 0x0318, 0x0078, 0x00a8 },
-	{ 0x0520, 0x08e0, 0x040c, 0x04f4,   0x0608, 0x0318, 0x0080, 0x0058 },
-	{ 0x08e0, 0x0a00, 0x040c, 0x04f4,   0x0878, 0x0318, 0x0078, 0x0098 },
+	{ 0x0840, 0x0b80, 0x040c, 0x04f4,   0x0908, 0x0418, 0x0078, 0x0030 },
+	{ 0x0b80, 0x1090, 0x040c, 0x04f4,   0x0b20, 0x0418, 0x0070, 0x0080 },
 
 	{ 0x0230, 0x03b0, 0x02f8, 0x040c,   0x0278, 0x0318, 0x0078, 0x00a8 },
 	{ 0x03b0, 0x0520, 0x02f8, 0x040c,   0x0390, 0x0318, 0x0070, 0x00b8 },
 	{ 0x0520, 0x08e0, 0x02f8, 0x040c,   0x0608, 0x0318, 0x0080, 0x0058 },
-	{ 0x08e0, 0x0a00, 0x02f8, 0x040c,   0x0878, 0x0318, 0x0078, 0x0098 }
+	{ 0x08e0, 0x0a00, 0x02f8, 0x040c,   0x0878, 0x0318, 0x0078, 0x0098 },
+	{ 0xff }
 };
 
 static const struct cchip_mapping level03[] =

EDIT: I'm sorry. This patch I wrote yesterday is not correctly patched because tabs has been replaced by spaces.

So If you saved this yesterday please try again.

 

This has been added to the source. Thanks again!

 

I hand-typed it in, so you might want to check that I did it properly.

Link to comment
Share on other sites

Robert, mameSick is this diff ok for taito_f3? I generated this from taito_f3 taken from arcade source versus offcial 186 source.

 

Notice that - if (cx>=m_clip_al##pf_num && cx=m_clip_bl##pf_num && cx

+ if (cx>=m_clip_al##pf_num && cx=m_clip_bl##pf_num && cx

 

is still here

Can some people test this out? I am totally hopeless at most games.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...