It is currently Mon Dec 17, 2018 12:52 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 57 posts ]  Go to page Previous  1, 2, 3, 4  Next
Author Message
 Post subject:
PostPosted: Sun Jun 19, 2011 7:00 pm 
Offline
User avatar

Joined: Sun Jun 05, 2005 2:04 pm
Posts: 2150
Location: Minneapolis, Minnesota, United States
I honestly hate horizontal mirroring... I think since our eyes are side by side, we have a more panoramic vision, and thus notice the glitches on the left and right edges of the screen more so than we would on the top and bottom. Also, I seem to remember talking about this a year or so ago, and I think Bregalad made a note that glitches are more noticeable if they occur in the direction you are scrolling. This is a good point too.

I hardly ever see vertical glitches; maybe it's just my TV. Like others said, they're also easier to mask by blanking out scanlines.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jun 19, 2011 7:24 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20892
Location: NE Indiana, USA (NTSC)
Vertical mirroring is probably ideal if your status bar is sprite-based. But if your status bar is background, you'll probably need to use a mapper IRQ to skip the rows of the map dedicated to the status bar.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jun 19, 2011 8:20 pm 
Offline
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 11014
Location: Rio de Janeiro - Brazil
tepples wrote:
Vertical mirroring is probably ideal if your status bar is sprite-based. But if your status bar is background, you'll probably need to use a mapper IRQ to skip the rows of the map dedicated to the status bar.

If you want free scrolling and a background status bar, the easiest solution is single-screen mirroring, but that comes with color artifacts on the sides, like in SMB3.

An option I have considered but never actually used because I never had the need for a background status bar is to draw the status bar every frame in a safe place. Sounds a little extreme, but with highly optimized/unrolled code it should be possible to draw it in 8 scanlines or so... That would be done during the visible frame, so it wouldn't steal any VBlank time. One day I might try this.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jun 19, 2011 11:29 pm 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3141
Location: Tampere, Finland
tokumaru wrote:
An option I have considered but never actually used because I never had the need for a background status bar is to draw the status bar every frame in a safe place. Sounds a little extreme, but with highly optimized/unrolled code it should be possible to draw it in 8 scanlines or so... That would be done during the visible frame, so it wouldn't steal any VBlank time. One day I might try this.

Interesting idea. :) Could be used with mappers like UNROM to get multidirectional scrolling and a background based status bar on top. Wouldn't even waste cycles for the status bar area if some static timed task could be run there... I might give this a try.

_________________
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jun 19, 2011 11:42 pm 
Offline
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 11014
Location: Rio de Janeiro - Brazil
thefox wrote:
Could be used with mappers like UNROM to get multidirectional scrolling and a background based status bar on top. Wouldn't even waste cycles for the status bar area if some static timed task could be run there... I might give this a try.

I imagined using the first few scanlines of the frame to draw the status bar (since those scanlines are outside the safe area you wouldn't want any information there anyway) and then a sprite hit would indicate the end of the status bar. At that point you might need to blank a few more scanlines, in order to avoid vertical scrolling glitches. Please let us know if you code something like this!


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2011 12:03 am 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3141
Location: Tampere, Finland
tokumaru wrote:
thefox wrote:
Could be used with mappers like UNROM to get multidirectional scrolling and a background based status bar on top. Wouldn't even waste cycles for the status bar area if some static timed task could be run there... I might give this a try.

I imagined using the first few scanlines of the frame to draw the status bar (since those scanlines are outside the safe area you wouldn't want any information there anyway) and then a sprite hit would indicate the end of the status bar. At that point you might need to blank a few more scanlines, in order to avoid vertical scrolling glitches. Please let us know if you code something like this!

True, I forgot about sprite 0 hit (although the polling would still waste some cycles, but at least it'd allow running some variable timed task during the status bar as long as its worst case run time is known). I'll keep you posted.

_________________
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2011 8:28 am 
Offline
User avatar

Joined: Fri Nov 12, 2004 2:49 pm
Posts: 7604
Location: Chexbres, VD, Switzerland
Quote:
I honestly hate horizontal mirroring... I think since our eyes are side by side, we have a more panoramic vision, and thus notice the glitches on the left and right edges of the screen more so than we would on the top and bottom.

I understand your point, and that's your opinion.
However have you checked my unfinished demo against the real SMB3 ? You'd notice the attribute glitches are MUCH less noticeable in my demo in fact if you didn't KNOW they were there you are likely not to ever notice them. Even more so on PAL hardware where 2 pixels aren't rendered on the right edge (and on the left too but it's hidden by $2001 masking anyways).


Quote:
I hardly ever see vertical glitches; maybe it's just my TV. Like others said, they're also easier to mask by blanking out scanlines.

You should play Final Fantasy in Nintendulator and you'll definitely have a hard time NOT so see them.

By the way it's good to see you're back.

_________________
Life is complex: it has both real and imaginary components.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2011 9:07 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20892
Location: NE Indiana, USA (NTSC)
Bregalad wrote:
Celius wrote:
I hardly ever see vertical glitches; maybe it's just my TV. Like others said, they're also easier to mask by blanking out scanlines.

You should play Final Fantasy in Nintendulator

Nintendulator doesn't emulate NTSC overscan. It shows the entire picture that the emulated RGB PPU generates.

I've found another technique to make mirroring glitches harder to see: draw blank tiles in the row of tiles that crosses the seam. A blank tile never has the wrong attribute. I use this for the scrolling text in Concentration Room and my multicart engine.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2011 11:38 am 
Offline
User avatar

Joined: Fri Nov 12, 2004 2:49 pm
Posts: 7604
Location: Chexbres, VD, Switzerland
tepples wrote:
Nintendulator doesn't emulate NTSC overscan. It shows the entire picture that the emulated RGB PPU generates.

Absolutely, that's exactly why I was saying that. Sorry I forgot to mention it at first
Quote:
I've found another technique to make mirroring glitches harder to see: draw blank tiles in the row of tiles that crosses the seam. A blank tile never has the wrong attribute. I use this for the scrolling text in Concentration Room and my multicart engine.

This is an interesting technique. It will probably work wonders for scrolling text (hem hem... such as the Power Pak Menu which currently looks terrible on my PAL NES). However for a scrolling level it might be just as noticeable if tiles "pops" in and out when scrolling. If would work fine in a game with overall dark graphics, but not so good with a game with overall bright graphics.
Also it would add unnecessary tile updates for scrolling.

That being said I'd still consider doing this as it's better than showing the wrong tiles.

_________________
Life is complex: it has both real and imaginary components.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2011 4:30 pm 
Offline

Joined: Sat May 28, 2011 10:30 am
Posts: 97
I just happened to be watching the ending to Bubble Bobble 2 when I noticed it has the same artifacts, but vertically.

http://www.youtube.com/watch?v=FOMg5kL1Dxg&feature=related

Happens about half way through the video, when scrolls upward.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2011 6:54 pm 
Offline
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 11014
Location: Rio de Janeiro - Brazil
You shouldn't be surprised, a lot of NES games suffer from that. I'd guess that 98% of the games with 8-way scrolling have glitches either vertically or horizontally, and a good portion of the games that scroll in only one axis have them too, without any good excuse.

Many of the Mega Man games for example have scrolling glitches, even though they only scroll in one axis at a time. There's no (real) excuse for that, since they use a mapper with mirroring control. I believe that the reason they simulate 1-screen mirroring is to always have one free name table for the in-game menus. With just a little extra work (i.e. allowing the menu to be split across both name tables or even re-rendering the whole background when leaving the menu) they could have avoided the glitches.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2011 5:38 am 
Offline
User avatar

Joined: Wed Oct 15, 2008 11:50 am
Posts: 943
Mega Man 1 used UNROM which has not mirroring control. On the vertical scrolls you will see some glitching at the bottom. I honestly think they just reused that same engine for at least the next game and did not mess with the scrolling.

Maybe someone more familiar with the code of the Mega Man series can comment.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2011 7:09 am 
Offline
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 11014
Location: Rio de Janeiro - Brazil
qbradq wrote:
Mega Man 1 used UNROM which has not mirroring control.

Yeah, I know. It doesn't have glitches when scrolling horizontally though, which the later games have. I was mainly talking about them, the MMC3 ones.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2011 7:23 am 
Offline
User avatar

Joined: Wed Oct 15, 2008 11:50 am
Posts: 943
Ah, OK. I have really only played Mega Man 2 extensively, so I was confused :D


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2011 12:42 pm 
Offline
Site Admin
User avatar

Joined: Mon Sep 20, 2004 6:04 am
Posts: 3601
Location: Indianapolis
Some TVs cut off a lot of vertical space, horizontal too but not to such a degree. For example, the TV a friend and I played NES on all the time, didn't have a problem with it until we tried Legacy of the Wizard and you couldn't really see where the ladders are on the bottom of the screen (maybe only 1 or 2 rows of pixels visible).

Same goes for the top 8 scanlines, you can see it an every emulator pretty much, but on any TV that I've seen, it's not visible at all. Maybe that's why it's so obvious in that Bubble Bobble 2 video.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 57 posts ]  Go to page Previous  1, 2, 3, 4  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group