One of the big pushes for Pixel Vision 8 was to capture some of the Nintendo and other 8-bit system's more subtle rendering details. One that is lesser known is overscan and how it played a critical role in hiding sprites offscreen so players could not see them. Let's take a look at a glitch I recorded today while playing Zelda II.
Here you can see I am in a tight tunnel and I am fighting an ax-wielding red Daira while a slime goes off the right side of the screen. Just as I beat the Daira, half of the slime's sprites flicker on the left side of the screen. Why did this happen?
On the original Nintendo, sprites could only go up to 250 pixels along the x-axis. When they went past 256, they would wrap back around to 0. For most of the games created on the NES, this was not ideal. There was no place to hide sprites off the screen so they would come into view smoothly. To get around this, developers took advantage of the CRT monitor's overscan. This was a boundary along the edge of the screen where pixels were rendered but not visible on most TVs of the time.
Most of the sprites in Zelda II are 16 pixels wide, or 2 sprites wide. The overscan gutter in most games is 8 pixels wide on the far right of the screen. When I kill the Daira, the slime is trapped on the side of the screen that is not visible, but half of it is still moving away from the player and ends up being displayed on the opposite side of the screen.
Learning how to hide sprites in the overscan gutter is a critical technique for making more authentic feeling 8-bit games. Pixel Vision 8 can support masking off the right and bottom of the screen by configuring the overscan column and row setting on the Display Chip.
By setting this value to 1 x 1 you will remove 8 pixels from the right and bottom of the screen allowing you a safe place to hide sprites off the screen where the player can't see. Here is how this would affect the resolution of a game.
On the left, we have an overscan of 0 x 0 at a resolution of 160 x 144, in the middle overscan is set to 1 x 1 and on the right, the overscan is 4 x 4, the maximum value, which makes the visible resolution 128 x 112. This is an area that is still not very well documented but one I hope to build more examples for. If you have any questions or thoughts about the current implementation, leave a comment below. Keep an eye on the documentation
to learn more about the Display Chip and how overscan works as I continue to update the documentation over the next few months.