#304 – Romhacking feat. Tetris

Ach ja – was gibt es schöneres als eine Runde Tetris auf dem Game Boy? Richtig – nichts! 😛

Schon klar – ich als alter Nerd muss ja standesgemäß ein Tetris-Fanboy sein – alles andere wäre ja schon fast Blasphemie! 😉 Aber mal ernsthaft – der Erfolg von Tetris ist nicht zu ignorieren. Tatsächlich gilt das Spiel mit insgesamt knapp 500 Millionen verkauften Einheiten (plattformübergreifend betrachtet) auch heute noch als das meistverkaufte Computerspiel aller Zeiten (siehe Artikel 76) – ist das nicht irre?

Ich denke der durchschlagende Erfolg von Tetris liegt an der Tatsache, dass dieses Spiel „Gaming“ erst so richtig salonfähig gemacht hat. Der Puzzleklassiker hat es durch sein unkompliziertes Spielprinzip („pick-up-and-play“) geschafft, die Welt der Videospiele auch Zielgruppen zu vermitteln, welche sonst eher wenig mit einer Konsole oder einem PC zu tun haben. Ich glaube es gibt wenige Menschen (unabhängig von Alter oder Hintergrundwissen), die nicht schon mal einen Game Boy mit Tetris in der Hand gehalten oder zumindest davon gehört haben.

Fun Fact: Ein Großteil des Erfolgs rührt vermutlich nicht nur aus der Tatsache, dass das Spiel simpel und für jeden sofort verständlich ist, sondern auch, dass es jedem verkauften Game Boy beigelegt wurde. Ein taktisch sehr geschickter Schachzug seitens Nintendo!

Heute wollen wir aber nicht den Erfolg des Puzzlespiels feiern (das haben wir in Artikel 163 ja bereits erledigt), sondern viel mehr Tetris auf dem Game Boy etwas auf den Zahn fühlen! Was soll das denn bedeuten? Wer die Geschichte von Tetris kennt, weiß, dass das Spiel 1984 vom russischen Programmierer Alexei Paschitnow auf einem Elektronika-60-Rechner entwickelt wurde. Diese Ur-Version von Tetris ist mittlerweile leider kaum mehr aufzutreiben und auch die Handhabe eines entsprechenden Emulators für den Retro-PC ist nicht gerade einfach.

Fun Fact: Wenn euch die spannende Hintergrundgeschichte um die Tetris-Lizenzvergabe interessiert, kann ich euch den 2023 erschienenen, kurzweiligen Film „Tetris“ ans Herz legen. Das ist auch was für Nicht-Nerds – versprochen! 😉

Um ehrlich zu sein, habe ich mich schon häufig gefragt, ob man nicht einfach die Game Boy-Version von Tetris so modifizieren könnte, dass sie so ähnlich wie das originale Spiel von damals auf dem Elektronika 60 aussieht. Naiv betrachtet müsste man dafür ja „nur“ ein paar Grafiken austauschen, oder? Ich sehe schon – das schreit nach einer Retro-Challenge! Heute wollen wir also versuchen, das Game Boy Spiel Tetris zu hacken.

Fun Fact: Der heutige Beitrag ist nur als ein kleiner Einstieg in das Thema „Romhacking“ zu sehen. Möchte man sich tiefgreifender mit der Modifizierung von Game Boy Spielen beschäftigen, bräuchte man ein deutlich tieferes Verständnis für die Hardware des Game Boys (Z80-CPU) sowie entsprechende Programmierkenntnisse (Assembler-Instruktionen, Debugging, etc.). Das klingt zwar erst mal komplex und extrem abschreckend, aber letztendlich ist auch das alles kein Hexenwerk. Im Endeffekt braucht man dafür „nur“ die zwei teuersten, bzw. am schwierigsten zu beschaffenden Ressourcen auf dieser Welt: Zeit und Lust! 😛

Klingt nach einem Plan – wie fangen wir an? Als erstes müssen wir es schaffen, das Spiel von dem Modul auf einen Computer zu übertragen. Dafür benötigen wir ein Lesegerät für Cartridges, wie z.B. den „Gameboy Cart Flasher“ samt Software „GB Cart Flasher“ (aus Artikel 93). Damit lässt sich der im Modul verbaute ROM-Baustein auslesen und als „ROM-Datei“ in digitaler Form auf den PC sichern. Mann – das Spiel besteht aus sage und schreibe nur 32 Kilobyte. Ist das nicht verrückt? Nur mal zum Vergleich: Eine einzelne, 200 Zeichen lange WhatsApp-Textnachricht ist schon ca. 1 Kilobyte groß.

Um zu überprüfen, ob sich die gelesene ROM-Datei auch abspielen lässt, laden wir sie einfach in einen Emulator wie z.B. „BGB“ (siehe Artikel 240) – läuft!

Soweit so gut – und wie können wir jetzt die Grafiken des Spiels bearbeiten? Für eine Vielzahl von Spielen gibt es bereits entsprechende Editoren, mit welchen sich diverse Werte des Spiels (z.B. Anzahl von Leben, Energie, Aussehen von Charakteren) ändern lassen. Mit diesen Tools können auch unerfahrene Rom-Hacker in kürzester Zeit ein vorzeigbares Ergebnis auf die Straße bringen. Im Falle von „Tetris“ gibt es leider keine solcher Werkzeuge und wir müssen händisch an die Spielgrafiken ran. Dafür benötigen wir eine spezielle Software namens „YY-CHR“. Mit dieser lassen sich die sog. „Tiles“ (mehrere Pixel große Bereiche, in denen die Grafiken gespeichert sind) modifizieren.

Not so fun Fact: Warum zur Hölle man eine Language-File von .ENG auf .DEU umbenennen muss, um den Text des Programms auf Englisch (anstatt des zuvor angezeigten Buchstabensalats) zu bekommen, erschließt sich mir nicht. Aber was verstehe ich schon von IT? xD

Die meisten Konsolen der 2D-Ära konnten Grafiken nur in Form von „Tiles“ (und keine einzelnen Pixel) darstellen. Im Falle des Game Boys enthält jede Tile einen 8 x 8 Pixel großen Grafikbereich, den wir uns mit YY-CHR ansehen und sogar bearbeiten können. Damit das klappt, muss die ROM-Datei geöffnet und anschließend das Grafikformat auf „2 BPP GB“ (2 Bits per Pixel) geändert werden.

Not so fun Fact: Der Game Boy kann nur vier Farben darstellen, d.h. also, dass in jedem Pixel eine der vier Farben gespeichert ist, oder? Ganz so einfach ist es leider nicht, da jedes Pixel keine definierte Farbe enthält, sonder nur eine Art Indikator, welcher dann erst im Zusammenspiel mit einer Palette einen Farbwert erhält. Während z.B. der originale Game Boy die Farben aus einer Palette von vier Grüntönen wählt, wird beim Game Boy Pocket eine Palette mit vier Grautönen verwendet. Seht mir nach, dass ich an dieser Stelle nicht weiter auf das – zugegeben recht komplexe – Thema eingehe.

Leider zeigt uns das Programm den gesamten Inhalt der ROM-Datei (also auch den Programmcode) als Grafiken an:

Entsprechend müssen wir etwas suchen, bis wir den Teil innerhalb der Datei finden, an dem die Grafiken (z.B. für die einzelnen Tetris-Blöcke oder die Buchstaben für diverse Texte im Spiel) gespeichert sind. Aha! Da lassen sich doch tatsächlich schon ein paar Zahlen, Buchstaben und Grafikblöcke erkennen:

Ebenso muss der Offset für das Einlesen der Tiles ggf. noch etwas verschoben werden, damit die Grafiken sauber angezeigt werden. Warum das so ist? Nun, die Software versucht „auf gut Glück“ den einzelnen Speicherbereichen Tiles (also 8×8 Pixel große Blöcke) zuzuordnen. Dabei kann es vorkommen, dass innerhalb einer Tile zwei Grafiken (der obere Teil einer Grafik sowie der untere Teil einer anderen Grafik) angezeigt werden. Durch die Anpassung des Offsets lässt sich das korrigieren und prompt sehen wir die einzelnen Spielgrafiken vollständig dargestellt:

Wenn man möchte, kann man noch die Farbpalette zur Anzeige der Pixel auf Grautöne (anstatt den vier grünlichen Werten) ändern. Ich finde, das ist wesentlich angenehmer für die Augen.

Jetzt wird es aber Zeit, dass wir was ändern. Schließlich ist unser Ziel, die Blöcke farblich so anzupassen, wie sie damals auf dem Elektronika-Rechner zu sehen waren (also schwarz, in Form von einer weißen Klammer). Um zu testen, ob wir auch wirklich an der richtigen Stelle sind, können wir erst mal einen der Blöcke anpassen (rote Markierung). Anschließend muss die geänderte ROM-Datei noch abgespeichert werden.

Jetzt wird es spannend – ob unsere Änderung funktioniert? Tatsächlich – der viereckige Block hat in der von uns angepassten Version (rechts im Bild) nun tatsächlich ein anderes Aussehen, als in der originalen Tetris-Version (links im Bild). Geil!

Nach diesem Schema können wir jetzt so Dinge wie Tetris-Blöcke oder die Spielfeldumrandung anpassen. Ein paar weitere Änderungen später sieht unser Spiel tatsächlich schon deutlich anders aus, findet ihr nicht? 🙂

Es ist schon verblüffend, was sich mit ein paar so einfachen „Grafik-Hacks“ anstellen lässt. Diese Mechanik funktioniert allerdings nur, sofern die Grafiken nicht in einem komprimierten Format innerhalb der ROM-Datei vorliegen. Ebenso lassen sich über diesen Weg keine Texte im Spiel verändern, da diese nicht als Grafik in der ROM, sondern nur über „Referenzen“ auf die einmalig im Grafikspeicher vorhandenen Buchstaben und Zahlen angezeigt werden.

Um auch Texte, innerhalb der ROM-Datei anpassen zu können, müssen wir uns mit sog. „Tables“ (Tabellen) beschäftigen. Eine Tabelle ist eine Text-Datei, welche alle Zeichen (Buchstaben, Zahlen, Sonderzeichen) samt deren hexadezimaler Repräsentation innerhalb der ROM-Datei auflistet. Hm, ok, und warum brauchen wir so etwas? Nun, ohne so eine Tabelle haben wir keine Chance herauszufinden, welche Binärwerte wir innerhalb der ROM-Datei anpassen müssen, damit sich letztendlich der im Spiel angezeigte Text verändert. Ok, und wie erstellt man so eine Tabelle?

Dafür brauchen wir ein altes Programm aus DOS-Zeiten namens „Search Relative“. Damit lässt sich unsere ROM-Datei auf bestimmte Zeichenfolgen durchsuchen. Das Programm meldet uns dann eine Hexadresse zurück, an welcher es glaubt, dass das Wort stehen könnte.

Fun Fact: Wen die Funktionsweise so eines relativen Suchprogramms (unabhängig vom Inhalt, nur anhand der Hexadezimalwerte) interessiert, dem kann ich wärmstens dieses Skript empfehlen! 😉

Die Suche nach dem Wort „bullet“ (Bullet-Proof-Software im Titelbildschirm) ergibt z.B. die Adresse ‘4A47‘x. Ein erster Blick auf die an dieser Position in der ROM-Datei stehenden Hex-Werte ‘0B1E15150E1D‘x lässt erkennen, dass es sich tatsächlich um das Wort „BULLET“ (z.b. ‘15‘x = ‚L‘) handeln könnte!

Richtig spannend wird es aber erst, wenn wir die Hex-Werte mit dem Titelbildschirm vergleichen. Es sieht so aus, als hätten wir tatsächlich die Stelle im Modul gefunden, an welcher der Text steht:

Anhand dieser Werte lässt sich nun eine Tabelle für die jeweiligen Buchstaben ableiten. Entweder man macht das per Hand oder verwendet eine Software wie z.B. „mevoids Table Maker“.

Leider kann das Programm keine Sonderzeichen herausfinden und so habe ich die generierte Tabelle (eigentlich nur eine Textdatei) im Nachhinein händisch um die Hexwerte für z.B. den Punkt oder den Bindestrich erweitert:

Mann, ist das alles kompliziert! Wollten wir nicht eigentlich nur ein Stück Text anpassen? Geduld – wir haben es fast geschafft! Mit unserer frisch erstellten Übersetzungstabelle können wir jetzt einen Hexeditor wie z.B. „WindHex32“ füttern.

Die Änderung ist dank übersetzten Hexwerten jetzt kinderleicht durchzuführen. Natürlich sollte direkt im Titelbildschirm auch etwas von „retrololo“ stehen, findet ihr nicht? 😛

Ach, es ist schön, wenn ein Plan funktioniert! 😀

Not so fun Fact: Anhand der angegebenen Jahreszahl fällt auf, dass das Projekt schon wieder von letztem Jahr ist! Sorry dafür, aber ich komme in letzter Zeit einfach nicht dazu, die ganzen Themen zeitnah zusammenzuschreiben und hier zu veröffentlichen. In so einer „Nachbearbeitung“ steckt leider deutlich mehr Aufwand, als man das vielleicht vermuten würde und so kann es schon mal etwas dauern, bis die Beiträge online gehen. Was soll man sagen? So ist das Leben! 🙂

So, ich denke damit sollten wir es mit den Modifizierungen aber auch gut sein lassen. Wie bereits erwähnt, wollte ich euch mit dem heutigen Beitrag nur einen kurzen Einblick in das Thema Romhacking geben. Möchte man komplexere Änderungen (z.B. Anpassung der Spiellogik, andere Musik, etc.) durchführen, müsste man deutlich mehr Zeit investieren und auch wesentlich mehr Skill mitbringen. Aber: Immerhin kann man mit diesem Wissen bereits kleine Änderungen an der Grafik machen oder bestehende Spiele übersetzen und so z.B. eine deutsche Version eines nie in Deutschland erschienenen Spiels erstellen! 🙂

Fun Fact: Wer errät, aus welchem NES-Spiel der folgende Screenshot (samt furchtbarer Übersetzungsfehler) stammt, bekommt bei nächster Gelegenheit ein Bier von mir ausgegeben! 😉

Um die Sache rund zu machen, habe ich mit „Lunar IPS“ (siehe Artikel 240) einen Patch erstellt. Sofern ihr eine originale Tetris-ROM besitzt, könnt ihr euch damit selbst die modifizierte retrololo-Tetris-Version erzeugen! 🙂 Den Patch könnt ihr hier herunterladen.

Abschließend habe ich dann die modifizierte ROM-Datei noch auf die in Artikel 215 gebastelte Flashkarte geschrieben…

…und mit einem eigenen Cover versehen:

Ende gut, alles gut. Dank dem Modul lässt sich unsere gehackte Tetris-Version nun auch auf einem echten Game Boy spielen. Schon irgendwie verblüffend, dass es mit ein paar Handgriffen möglich ist, ein Spiel zu verändern, oder? 🙂

In diesem Sinne – bis die Tage, ciao!

Write a comment