Tuesday, May 21, 2019

Screen Persistence and the GBA - LCD Abuse

The Game Boy Advance has a TFT LCD screen, and in its last variants, the screen was backlit.  TFT screens offer faster pixel response times over earlier passive matrix technology.  The GBA TFT LCD screen was improved over the earlier screens used for the Game Boy Color, but developers took advantage of the response time of these screens on occasion to make for interesting effects.  Let's take a look.

While I had previously touched upon flicker in the 8-bit Game Boys, with the Game Boy Advance, flickering is a little different.  GBA games tend to use it more frequently and while flickering is not really noticeable or can be mitigated with all official, mainstream solutions, unofficial solutions may or may not be able to display graphics as they were meant to be seen.

Wave Race
The GBA has direct control over its LCD display.  There is no HDMI-like interface between the hardware and the screen as there is between a PC and its screen.  It can send pixel data to the screen as it wishes, and in some cases it may send the data more quickly than the LCD can process it.  The result is a blending between the last frame and the current frame.  Most often this is used for a transparency effect, and it can be focused on a particular graphical object being displayed on the screen.  Sometimes, as with games from Camelot Software, it is used for a form of anti-aliasing to mitigate the blockiness of the world map in the Golden Sun games and the overhead view of the golf courses in Mario Golf.

Games known to be affected :

Boktai - The Sun Is in Your Hand
Boktai 2 - Solar Boy Django
Final Fantasy I & II - Dawn of Souls
F-Zero - GP Legend
F-Zero - Maximum Velocity
Golden Sun
Golden Sun - The Lost Age
Harvest Moon - Friends of Mineral Town
Harvest Moon - More Friends of Mineral Town
Mario Golf - Advance Tour 

With original hardware, flicker should not be perceptible by the human eye.  Games that scroll the screen and maintain these effects may look a little shimmery.  Even the GBA SP AGS-101 with a backlit screen really will not show flicker, nor will other official solutions with backlit screens that can play GBA games: the Nintendo DS, the Game Boy Micro and the Nintendo DS Lite.  Even the 3DS Ambassador release of F-Zero: Maximum Velocity will not show a flickery course map.  (The 3DS does include GBA hardware and runs these games with it rather than using an emulator.)  This behavior is far more consistent than it was for the Game Boy games which used flicker as transparency, the effect with the 8-bit titles did not work as designed on any form of TFT screen, and TFT screens were introduced with the Game Boy Color.

F-Zero Maximum Velocity

The most common instances in which you will see flicker is by playing GBA games in an emulator, or until very recently, with the Game Boy Interface.  Well-regarded emulators like VBA-M and mGBA and the official the Virtual Console for the Wii U will show flicker.  VBA-M has an "Interframe blending" option in its video settings to show these effects as they were meant to be seen.  bgb has a "mix current and last frame" option which shows Game Boy effects the way they were meant to be seen.  All screenshots in this blog entry were derived either from VBA-M or bgb with these options turned on.

The monochrome Game Boys passive matrix LCD screens twist and untwist the liquid crystals slowly, so games that utilize the transparency effect use a one frame on/one frame off to display graphics in a transparent fashion.  There is almost no visible flicker in this method as long as it is used with passive matrix display.  Games like Castlevania II: Belmont's Revenge (intro text), Chikyuu Kaihou Gun ZAS, The Legend of Zelda: Link's Awakening (shadows, cutting tall grass), Serpent (demo screen), Trip World (clouds, water), Wave Race were made before there were any other options for consumers to display their Game Boy games.  Once you go TFT LCD or to a CRT, this simple 1:1 display method will not work at all or nearly as well.  The GBC makes these graphics flicker mostly due to the interlaced refresh its' panel uses, and the GBA is the same except the interlacing is a little less noticeable.  The GBA SP backlit is almost as good as a passive-matrix display when it comes to flicker, especially when the backlight is kept to the low option and the flicker is not dominating the entire screen as it does in ZAS and Serpent.  GBA games use an irregular, possibly randomized pattern to trick the display into showing a transparent color instead of two flickering colors.

The Game Boy Player must bear special mention.  The official Game Boy Player Disc can show or hide the flicker.  The key setting is the filter, which has three settings, Smooth, Normal and Sharp.  Sharp will show flicker, Normal hides much flicker, but Smooth is necessary to eliminate flicker from the course map in the F-Zero games.  The unofficial Game Boy Interface replacement software for the Official Disc has, as of May 3, 2019, implemented a deflicker option which behaves like the Official Disc in its Standard Edition. The option increases lag, so you should take that into account before using it.

NES Classics Series - Super Mario Bros.

The most noticeable use of the persistence effect is with ports of NES games to the GBA.  Recall that the NES uses a resolution of 256x240 and the GBA uses 240x160.  Most NES games use more vertical screen real estate than can be safely cropped.  What Nintendo did with its earliest ports, the e-Reader NES Classic Card series, was to use the GBA LCD persistence to alternate background tiles rapidly to give the impression of full resolution.  Some tiles, usually sprites, were redrawn or altered to look more "whole" than graphic elements of lesser importance.  The graphics tended to have something of a fuzzier look at the borders of graphics tiles, text especially tended to darken over the height of the characters.  The cards required you to scan a code stripe on the long and short edges of a card and each e-reader game came on five cards.

Famicom Mini Series #21 - Super Mario Bros. 2
Nintendo's next ports were the Famicom Classic Mini and NES Classic Series, which put NES games on individual cartridges rather than cards you had to scan into the e-Reader.  The cartridge format gave Nintendo a huge amount of ROM space (4MB) to play with compared to the card stripes (2K per stripe).  Nintendo released more complex NES games, many of which implemented saving to cartridge.  With these new games, Nintendo started redrawing or altering all sprites to look better on the GBA's smaller screen.  Some releases still used LCD persistence, but even then the effect was sometimes limited to a title screen or an occasional sprite.  Super Mario Bros. uses LCD persistence, but Super Mario Bros. 2 (Japan) does not, and guess which game looks better!

Capcom Classics Mini Mix - Strider
Other companies, like Atlus (Technos), Capcom, Hudson Soft and Jaleco would also release compilations of NES or Famicom games.  Except for Capcom, these releases always used LCD persistence to give the illusion of greater vertical resolution.  Sega's port of Phantasy Star from the Sega Master System in the Phantasy Star Collection also used the LCD persistence method even though the Master System used a resolution of 256x192.

Phantasy Star Collection - Phantasy Star
The new GBA Consolizer HDMI mod by Woozle unfortunately does not simulate GBA LCD persistence.  This video of the mod in action here shows a fair representation of the flickering course map when playing F-Zero GP Racing.

1 comment:

  1. Thanks for this article. I noticed the flickering on Boktai and a number of fighting games like Tekken, which use flickering for shadows. No one had been able to adequately explain the problem until now.