Für den Effekt des vertikalen Bildlaufs im ersten Teil von „The Legend of Zelda“ werden NES-Grafik- „Hardware“ -Manipulationen verwendet, die von den Konsolenentwicklern höchstwahrscheinlich nicht bereitgestellt werden.
Ich habe keinen Zugriff auf die offizielle Dokumentation der Picture Processing Unit (PPU - Grafikchip) der NES-Konsole, daher sind meine Aussagen zu "undefiniertem Verhalten" eher Vermutungen. Ich habe die Spezifikation der Grafikhardware aus dem
NesDev-Wiki übernommen . Die PPU wird durch Schreiben in Register mit Speicherzuordnung gesteuert. Wenn Sie diese Register so verwenden, wie es (wie es scheint) von den Designern konzipiert wurde, ist es unmöglich, diesen Effekt zu erzielen:
Wenn Sie den Bildschirm vertikal scrollen, sollte der gesamte Bildschirm auf einmal scrollen. Das vorherige GIF zeigt ein Beispiel für teilweises vertikales Scrollen. Ein Teil des Bildschirms bleibt stationär (Schnittstellenelemente) und der andere Teil (Spielbereich) rollt vertikal. Ein teilweises vertikales Scrollen ist mit der "Standard" -Arbeit mit PPU nicht möglich.
Im Gegensatz dazu ist ein teilweises
horizontales Scrollen vollständig definiert und möglich.
Das Schreiben in ein separates PPU-Register zum Zeitpunkt des Zeichnens des Frames kann zu grafischen Artefakten führen. Die Legende von Zelda verursacht absichtlich ein Artefakt, das sich als partielles vertikales Scrollen manifestiert. In diesem Beitrag werde ich ein wenig über NES-Grafikhardware sprechen und erklären, wie der Trick des vertikalen Bildlaufs funktioniert.
Arten von Grafiken
Die NES-Konsole verfügt über zwei Arten von Grafiken:
- Sprites sind Kacheln, die an beliebigen Stellen auf dem Bildschirm platziert und unabhängig voneinander verschoben werden können.
- Hintergrund - Ein Kachelraster, das problemlos als einzelnes Bild gescrollt werden kann.
Um den Unterschied zwischen den beiden zu demonstrieren, werde ich eine Szene zeigen, die aus Sprites und Hintergrund besteht:
Und hier ist dieselbe Szene, in der nur Sprites sichtbar sind:
Und hier ist eine Szene, in der nur der Hintergrund sichtbar ist:
Scrollen
Der Bildprozessor (NES Picture Processor) unterstützt das Scrollen von Hintergrundbildern. Im Grafikspeicher wird das Hintergrunddiagramm als zweidimensionales Kachelraster gespeichert, das einen Bereich abdeckt, der doppelt so breit und hoch wie der Bildschirm ist.
In diesem Raster wird auf dem Bildschirm ein „Fenster“ in der Größe eines Bildschirms angezeigt, und die Position dieses Fensters kann präzise gesteuert werden. Durch schrittweises Verschieben des sichtbaren Fensters entlang des Rasters wird ein sanfter Bildlaufeffekt erzeugt.
Das ausgegebene NES-Videosignal hat eine Größe von 256 x 240 Pixel. Das Kachelraster im Speicher wird als 512 x 480 Pixel große Fläche dargestellt und in vier bildschirmgroße Rechtecke unterteilt, die als "Namenstabellen" bezeichnet werden. Spiele können die Picture Processing Unit (PPU) konfigurieren, indem sie die Position des sichtbaren Fensters durch Auswahl der Pixelkoordinate im Raster der Namenstabellen angeben.
Wenn Sie die Koordinate (0, 0) auswählen, wird die gesamte obere linke Namenstabelle auf dem Bildschirm angezeigt:
Wenn wir zu (125, 181) übergehen, sehen wir aus jeder Namenstabelle ein wenig:
Das sichtbare Fenster wird auf die Rückseite des Kachelrasters im Speicher minimiert. Wenn wir zu (342, 290) übergehen, platzieren wir die obere linke Ecke des sichtbaren Bildschirms in der unteren rechten Namenstabelle. Dank der Faltung sind Teile jeder Namenstabelle sichtbar:
Nicht genug Speicher!
Jede Namenstabelle hat eine Größe von 1 KB, aber NES weist diesen Tabellen nur 2 KB seines Videospeichers zu, sodass jeweils nur zwei Namenstabellen in den Speicher passen.
Wie kann es vier Namenstabellen haben?
Spiegeln von Namenstabellen
Der Videospeicher ist so mit der PPU verbunden, dass, wenn die PPU eine Kachel einer der vier scheinbaren Namenstabellen rendert, tatsächlich eine der beiden realen Tabellen ausgewählt wird und das Lesen von dort kommt. Im Wesentlichen bedeutet dies, dass die vier sichtbaren Namenstabellen tatsächlich aus zwei identischen Tabellenpaaren bestehen.
Dieses Bild zeigt eine Momentaufnahme des Inhalts aller vier Tabellen. Oben links und oben rechts sind die gleichen wie in den beiden unteren.
Warum dann nicht einfach zwei Namenstabellen führen?
Glücklicherweise kann die genaue Bindung zwischen der scheinbaren und der realen Tabelle zur Laufzeit konfiguriert werden. Wenn das Spiel horizontales Scrollen ausführen möchte, wird die Grafikausrüstung so angepasst, dass die Tabellen oben links und oben rechts unterschiedlich sind und ohne merkliche Duplizierung gescrollt werden können. In dieser Konfiguration beziehen sich die Tabellen oben links und unten links auf dieselbe Tabelle mit echten Namen. ähnlich für die beiden rechten Tabellen. Diese Konfiguration wird als vertikale Spiegelung bezeichnet.
Es gibt auch eine andere mögliche Konfiguration - "Horizontale Spiegelung", die Spiele für vertikales Scrollen verwenden.
In der Regel scrollen Spiele nicht diagonal, da durch die Spiegelung der Namenstabellen Artefakte an den Bildschirmrändern entstehen.
Patronen
Die Kassette jedes Spiels verfügt über Hardware, mit der Sie die Tabellenspiegelung konfigurieren können.
Einige Spiele müssen die Spiegelung überhaupt nicht wechseln, daher ist die horizontale oder vertikale Spiegelung in ihren Kassetten fest codiert. Andere Spiele wechseln dynamisch zwischen diesen beiden Modi, sodass die Spiegelung in ihren Kassetten programmgesteuert konfiguriert wird. Die Legende von Zelda gehört zur zweiten Kategorie. Schließlich verfügen die Kassetten einiger wirklich komplexer Spiele über zusätzlichen Videospeicher, dh sie müssen überhaupt nicht gespiegelt werden: Sie können gleichzeitig vertikal und horizontal ohne sichtbare Duplizierungsartefakte scrollen.
Echtes Beispiel
Ein Beispiel für vertikales Scrollen, das auf dem Bildschirm angezeigt wird.Dies zeigt eine Aufzeichnung von Namenstabellen mit horizontaler Spiegelung. Das aktuell sichtbare Fenster wird hervorgehoben.Denken Sie daran, dass das vertikalste Scrollen nicht ungewöhnlich ist - das ungewöhnliche ist das vertikale Scrollen mit
geteiltem Bildschirm .
Geteilter Bildschirm
Jeder Frame des von NES erzeugten Videosignals wird von oben nach unten gerendert, jeweils eine Pixelreihe. In jeder Zeile werden die Pixel einzeln von links nach rechts gezeichnet. Auf halbem Weg beim Rendern des Frames kann das Spiel die PPU neu konfigurieren, was sich auf die Anzeige von Pixeln auswirkt, die noch nicht gerendert wurden. Eine der häufigsten Änderungen in der Mitte des Rahmens ist das Aktualisieren der horizontalen Bildlaufposition.
Wenn Sie horizontal zwischen Räumen scrollen, beginnt The Legend of Zelda immer an der Bildlaufposition (0, 0) und rendert die Oberflächenelemente am oberen Bildschirmrand. Nach dem Zeichnen der letzten Zeile der Schnittstellenpixel auf dem Bildschirm ändert sich das horizontale Scrollen um einen Wert, der mit jedem Bild zunimmt, sodass sich die Kamera reibungslos bewegt.
Die Animation der Anzeige der Namenstabellen zeigt, wie das Spiel vor dem Scrollen von der horizontalen zur vertikalen Spiegelung und nach Abschluss des Übergangs wieder zur horizontalen Spiegelung wechselt. Während das Scrollen fortgesetzt wird, werden außerdem die Namenstabellen oben links (und unten links) aktualisiert und eine Kopie des Raums, den der Spieler betritt, wird darin aufgezeichnet. Nachdem der Bildlauf abgeschlossen ist, teilt das Spiel den Bildschirm nicht mehr und wird wieder vollständig aus der oberen linken Tabelle gerendert.
Rendering-Messung
Um den Bildschirm in die gewünschte Position zu teilen, muss das Spiel irgendwie herausfinden, welcher Teil des aktuellen Rahmens gezeichnet wurde. Pixelstrings werden mit einer bekannten Frequenz gerendert, sodass die Anzahl der gerenderten Pixelstrings durch Zählen der Anzahl der Prozessorzyklen bestimmt werden kann, die seit Beginn des Frames vergangen sind.
Es gibt eine andere, genauere Technik namens Sprite Zero Hit.
NES kann bis zu 64 Sprites gleichzeitig rendern. Das erste Sprite im Videospeicher heißt Sprite Zero (Zero Sprite). In jedem Frame tritt das Sprite Zero Hit-Ereignis auf, sobald ein undurchsichtiges Pixel eines Null-Sprites einem undurchsichtigen Hintergrundpixel überlagert wird. Es setzt ein Bit in eines der PPU-Register mit Speicherzuordnung, das vom Prozessor überprüft werden kann.
Um Sprite Zero Hit zum Teilen des Bildschirms zu verwenden, platzieren Spiele das Zero Sprite an einer vertikalen Position nahe dem geteilten Rand und überprüfen während des Renderns ständig, ob das Sprite Zero Hit-Ereignis aufgetreten ist. In diesem Fall wechselt das Spiel vom horizontalen Scrollen, um die Trennung zu implementieren.
Der horizontale Übergang zwischen Räumen mit und ohne Hintergrund ist unten dargestellt.
Der braune Kreis, der am Anfang des Übergangs erscheint und am Ende verschwindet, ist ein Null-Sprite. Wir werden uns die Benutzeroberfläche mit und ohne Hintergrund genauer ansehen:
Ein Zero-Sprite ist ein gebleichtes Bomben-Sprite, das perfekt zum regulären Bomben-Sprite über die Spieloberfläche passt. Das Null-Sprite ist so konfiguriert, dass es unter dem Hintergrund angezeigt wird. Da jedoch die schwarzen Pixel der Schnittstelle als transparent betrachtet werden, wäre die Null-Sprite-Bombe sichtbar, wenn sie nicht strategisch hinter der Bombe vor der Schnittstelle verborgen worden wäre.
Beachten Sie, dass Sprite Zero Hit einige Pixelzeilen vor der unteren Zeile der Benutzeroberfläche auftritt. Es tritt am oberen Pixel der Bombensicherung auf, die 16 Pixel vom unteren Rand der Schnittstelle entfernt ist. Wenn Sprite Zero Hit auftritt, beginnt das Spiel mit dem Zählen der Prozessorzyklen und nach Abschluss der erforderlichen Anzahl von Zyklen wird das horizontale Scrollen eingestellt.
Strahlausblendung
Meistens zeichnet die Konsolen-PPU Pixel auf den Bildschirm. Es gibt eine kurze Ausfallzeit zwischen Frames, während der das Rendern nicht durchgeführt wird. Dieses Phänomen wird als Austastung (Vertical Blank oder vblank) bezeichnet. Einige Arten von Änderungen an der PPU-Konfiguration können nur während vblank vorgenommen werden.
Bildlaufregister
Spiele ändern die
PPUSCROLL
, indem sie in das PPU-Register
PPUSCROLL
, das der Speicheradresse
0x2005
. Die erste Schreiboperation in
PPUSCROLL
definiert die X-Komponente der
PPUSCROLL
, und die zweite Operation setzt die Y-Komponente. In ähnlicher Weise wird eine alternative Aufzeichnung weiter durchgeführt.
Das Folgende zeigt alle Nicht-Null-Schreibvorgänge in
PPUSCROLL
während dieser Wiedergabe (in Zeitlupe) 16 Bilder des Bildschirms mit der Handlung des Spiels. Die Bildlaufpositionskomponente Y wird alle zwei Frames erhöht. Alle Schreibvorgänge in
PPUSCROLL
in diesem Beispiel werden während vblank ausgeführt, wodurch der gesamte Hintergrund mitgescrollt wird.
Scrolling Screen Split
Schreibvorgänge in
PPUSCROLL
während vblank werden am Anfang des unmittelbar nach vblank gezeichneten Frames wirksam. Wenn sich die Bildlaufposition während des Renderns des Rahmens ändert (d. H. Nicht während vblank), wird diese Änderung wirksam, wenn die Zeichnung die nächste Pixelreihe erreicht. Teilweises horizontales Scrollen wird durch Schreiben in
PPUSCROLL
implementiert, während das PPU-Gerät vor dem Scrollen die letzte
PPUSCROLL
zeichnet.
Beim Aktualisieren der Bildlaufposition in der Bildmitte wird nur die X-Position der Bildlaufposition angewendet. Das heißt, die Bildlaufpositionskomponente Y wird verworfen. Wenn das Spiel den Bildschirm teilen und die Position des Bildlaufteils des Rahmens ändern möchte, kann es nur horizontal scrollen.
Und trotzdem:
PPUSCROLL
Sie es glauben oder nicht, der Wert des
PPUSCROLL
Registers
PPUSCROLL
sich während dieses Übergangs nicht geändert.
Sie können ein ein Pixel hohes grafisches Artefakt unter der Benutzeroberfläche sehen. Dies ist ein Fehler meines Emulators, der durch die fehlende Synchronisation der Prozessortaktzyklen mit der pixelweisen Wiedergabe verursacht wird.
Eingriffe in andere Register
Das zweite Register mit der Bezeichnung
PPUADDR
, das der Speicheradresse
0x2006
ist, wird zum Einstellen der aktuellen Videospeicheradresse verwendet. Wenn ein Spiel beispielsweise eine der Kacheln in der Namenstabelle ändern möchte, schreibt es zuerst die Videospeicheradresse der
PPUADDR
in
PPUADDR
und dann den neuen Wert der
PPUDATA
in
PPUDATA
- dies ist das dritte Register, das der Adresse
0x2007
.
Das Schreiben in
PPUADDR
nicht während vblank (d. H. Beim Rendern eines Frames) kann grafische Artefakte verursachen. Dies liegt daran, dass die PPU-Kette, die vom Schreiben in
PPUADDR
betroffen ist, auch direkt vom PPU-Gerät gesteuert wird,
PPUADDR
Kacheln aus dem Videospeicher zum Zeichnen
PPUADDR
. Da das Rendern auf dem Bildschirm von oben nach unten und von links nach rechts innerhalb der Linie ausgeführt wird, weist die PPU
PPUADDR
Wesentlichen
PPUADDR
Wert der Adresse der aktuell gezeichneten
PPUADDR
. Wenn das Rendern von einer Kachel zur nächsten
PPUADDR
wird, wird
PPUADDR
um den aktuellen Wert erhöht.
Somit kann das Schreiben in
PPUADDR
in der Mitte des Rahmens die von der PPU aus dem Speicher empfangenen Kacheln für die Dauer des aktuellen Rahmens ändern.
Lassen Sie
PPUADDR
Schreiboperationen während des vertikalen Sprungs zu
PPUADDR
. Da die Namenstabelle auch während des Übergangs aktualisiert wird, ist die Ausgabe
aller Schreibvorgänge in
PPUADDR
zu umfangreich. Bei einem horizontalen Übergang wird das Scrollen während des Renderns einer
PPUADDR
63 eingestellt. Daher werden Schreibvorgänge in
PPUADDR
nur während dieser Zeile in
PPUADDR
.
Das Muster ist deutlich sichtbar. Alle zwei Frames wird die in der Pixelzeile 63 aufgezeichnete Adresse um 32 (0x20) reduziert. Aber wie führt dies zu einer Aktualisierung der tatsächlichen Bildlaufposition?
Echtes Bildlaufregister
Innerhalb der PPU befindet sich ein 15-Bit-Register, das nicht der CPU zugeordnet ist. Es wird sowohl als aktuelle Adresse für den Zugriff auf den Videospeicher als auch als Hintergrund-Scrolling-Konfiguration verwendet.
Wenn Sie mit diesem Wert als Adresse arbeiten, wird Bit 14 ignoriert und die Bits 0-13 werden als Adresse im Videospeicher behandelt.
Wenn Sie mit diesem Wert als Bildlaufkonfiguration arbeiten, haben die verschiedenen Teile unterschiedliche Bedeutungen:
Die Auswahl einer Namenstabelle ist ein Wert zwischen 0 und 3, der die aktuelle Namenstabelle bestimmt, aus der die Zeichnung erstellt wird.
Grobes Scrollen in X und
Grobes Scrollen in Y bestimmen die Koordinate der Kachel in der ausgewählten Namenstabelle. Dies ist die aktuell zu zeichnende Kachel.
Das genaue Scrollen entlang Y enthält einen Wert von 0 bis 7, der den aktuellen vertikalen Versatz der Pixelzeile innerhalb der aktuellen Kachel bestimmt. Kacheln sind Quadrate mit einer Seite von 8 Pixeln.
In diesem Register fehlt ein
genaues Scrollen auf X. Es gibt ein separates Register, das nur den horizontalen Versatz des aktuellen Pixels enthält. Es ist jedoch nicht wichtig zu erklären, wie das vertikale Scrollen in The Legend of Zelda ausgeführt wird.
Was passiert mit diesem Register, wenn ein Spiel in
PPUADDR
schreibt? Hier sind die ersten drei Schreibvorgänge aus der oben gezeigten Demo.
Indem Sie die Einträge an der Adresse in Bildlaufkomponenten aufteilen, können Sie klar verstehen, was hier passiert. Alle zwei Frames nimmt der Wert des
groben Bildlaufs in Y ab, was zu einem vertikalen Bildlauf um eine Kachel oder 8 Pixel führt.
Während jedes Rahmens beträgt der anfängliche Bildlaufversatz 0,0, wonach die Aufzeichnung auf der Pixelzeile 63 an der Adresse durchgeführt wird. Dies bedeutet, dass die ersten 63 Pixelzeilen vom oberen Rand der ausgewählten Namenstabelle mit dem Hintergrund der Benutzeroberfläche gezeichnet werden. Die 64. Pixelreihe wird jedoch weiter gerendert, wobei von dieser Adresse aus vertikales Scrollen angewendet wird. Da das vertikale Scrollen alle zwei Frames abnimmt, entsteht das Gefühl des vertikalen Scrollens eines Teils des Bildschirms.
Scrollen Sie nach unten, um nach oben zu scrollen
Die Legende von Zelda kann diesen Trick nicht vollständig vor den Spielern verbergen. Auf den vertikalen Übergängen des Bildschirms entsteht ein sichtbares Artefakt, das sich bei genauem Hinsehen bemerkbar macht. Wenn Sie sich zwischen Räumen bewegen, wird der erste Frame der Bildlaufanimation nach unten gescrollt. Hier ist die Animation in sehr Zeitlupe.
In der Namenstabelle können Sie sehen, was wirklich passiert. Obwohl es den Spielern so erscheint, als würde der sichtbare Bereich reibungslos nach oben scrollen, beginnt der Bildlaufübergang damit, dass der sichtbare Bereich von der oberen linken Namenstabelle zur unteren linken Tabelle verschoben wird, die eine Kopie des Hintergrunds des Raums enthält. Dies ist erforderlich, da die Benutzeroberfläche am oberen Bildschirmrand ebenfalls Teil der Namenstabelle ist. Wenn der sichtbare Bereich von seiner ursprünglichen Position nach oben gescrollt wird, wird die Benutzeroberfläche durchlaufen.
Das vertikale Scrollen wird implementiert, indem in das
PPUADDR
Register in der Mitte des Rahmens geschrieben wird. Der allererste zu schreibende Wert ist
0x2800
. Zwei Bilder später wird
0x23A0
aufgezeichnet, und dann beginnt der Wert mit jedem zweiten Bild um 32 abzunehmen.
Durch Schreiben des Werts
0x2800
in das
0x2800
Register wird
PPUADDR
auf 2 gesetzt, was zum Rendern der unteren linken Namenstabelle führt. Da beide Bildlaufwerte 0 sind, beginnt sie in der oberen linken Kachel dieser Namenstabelle. Das
genaue Scrollen in Y ist jedoch 2, sodass ein vertikaler Versatz von zwei Pixeln vom oberen Rand der unteren linken Namenstabelle vorhanden ist. Aus diesem Grund sehen wir im ersten Frame des Übergangs einen 2 Balken hohen schwarzen Balken am unteren Bildschirmrand. Der anfängliche Bildlaufwert für die Übergangsanimation wird um 2 Pixel nach unten verschoben, um den Übergang nahtlos zu gestalten.
Zwei Frames später wird der
PPUADDR
in
0x23A0
. Dies bringt uns zurück zur oberen linken Namenstabelle und wir rendern aus der 29. Kachelreihe, dh der unteren.
Das genaue Scrollen in Y enthält noch 2.
Warum muss
Exact Scrolling in Y auf 2 gesetzt werden? Warum schreibt das Spiel nicht einfach
0x0800
und
0x03A0
, um nicht unter einem Zwei-Pixel-Offset zu leiden?
Vier Namenstabellen belegen den 4-KB-Bereich im PPU-Adressraum von
0x2000
bis
0x2FFF
. Jede Kachel in der Tabelle belegt ein Byte Videospeicher (tatsächlich sind sie nur Indizes in einer anderen Tabelle), und die Reihenfolge der Kacheln und Namenstabellen im Videospeicher ist so, dass die
Auswahl einer Tabelle mit Namen , das
grobe Scrollen nach Y und das
grobe Scrollen nach X den Versatz der Kachel im Inneren ausmachen Speicherbereiche mit Namenstabellen.
0x2000
Sie also die unteren 12 Bits des internen PPU-Registers nehmen und zu
0x2000
, finden Sie die
0x2000
im Videospeicher. Und das ist kein Zufall! Genau so sollte das Register behandelt werden: sowohl als Adressregister als auch als Bildlaufregister.
Aber es gibt einen Fehler.
Bei der Verarbeitung als Adressregister werden die Bits 12 und 13 als Teil der Adresse betrachtet. Während des Renderns überschreibt die PPU das Register ständig mit der Adresse der aktuell gerenderten Kachel. Da sich die Kacheln in den Namenstabellen und die Tabellen im Speicherbereich von
0x2000
bis
0x2FFF
, weist die PPU dem Register Werte aus diesem Intervall zu.
Wenn das Spiel in der Mitte des Frames in
PPUADDR
schreibt und die
PPUADDR
in der
PPUADDR
notiert,
PPUADDR
die PPU,
von einer anderen Stelle im Videospeicher zu lesen. Alle Bytes, die er zufällig zählt, werden als Kacheln wahrgenommen, was wahrscheinlich zu unerwünschten Ergebnissen führt. Daher müssen alle in der Mitte des Frames in
PPUADDR
aufgezeichneten Werte im Bereich von
0x2000
bis
0x2FFF
. Unter Berücksichtigung jeder Zahl in diesem Intervall und unter Berücksichtigung ihrer Bildlaufkomponenten sollte der
exakte Bildlaufwert in Y immer gleich 2 sein.
Diese Einschränkung bedeutet, dass wir das
exakte Scrollen in Y- Richtung in der Mitte des Rahmens nicht ändern können. Wenn Sie also diesen Trick verwenden, um das vertikale Scrollen der Bildschirmtrennung zu implementieren, können Sie nur 8 Pixel gleichzeitig scrollen und haben immer einen vertikalen Versatz von zwei Pixeln vom Kachelrand. Die Legende von Zelda verschiebt beim horizontalen Scrollen 4 Pixel pro Frame, beim vertikalen Scrollen jedoch 8 Pixel pro Frame, und jetzt wissen wir warum.
Das Artefakt macht sich auch beim Scrollen zwischen den Räumen bemerkbar. In diesem Fall tritt es jedoch am Ende der Animation auf.
Zusätzliche Lektüre
- Das NesDev-Wiki ist eine unschätzbare Ressource, um mehr über die NES-Hardware zu erfahren. Das Thema dieses Beitrags sind insbesondere Seiten zum Scrollen der PPU
und PPU-Register . - Mein noch sehr unfertiger NES-Emulator ist hier verfügbar.
Anmerkungen
Bis ich etwas über das interne Register der PPU erfuhr, zeigte mein Emulator den Effekt des Löschens während vertikaler Übergänge des Bildschirms The Legend of Zelda.
Das Sprite von Link bewegte sich wie gewünscht über den Bildschirm, aber der Hintergrund rollte nicht. Die Löschung wurde durch die Tatsache verursacht, dass das Spiel die Namenstabelle schrittweise aktualisierte, sodass sie die Grafiken des neuen Raums enthielt, das Scrollen jedoch nicht aktualisierte, um die Aktualisierungen außerhalb des Bildschirms zu halten.