Kennt ihr das? Da will man einfach mal wieder ein paar Pokémon fangen gehen und prompt macht einem das fiese Spieldesign einen Strich durch die Rechnung.

Ok, ich muss vermutlich etwas weiter ausholen, damit ihr versteht, warum ich mich wieder aufrege. Ich spiele gerade etwas „Pokémon“, konkret die Goldene Edition für den Game Boy (Color). An und für sich läuft alles gut und es macht echt mal wieder Spaß, einen Klassiker aus meiner Jugend zu zocken. Allerdings bin ich jetzt an dem Punkt angekommen, an dem es darum geht, möglichst viele der Taschenmonster zu fangen – „Schnapp’ sie dir alle“ und so. Eigentlich kein Problem, da ich genügend Geld und entsprechend ausreichend Pokébälle zum Fangen der Monster habe, wäre da nicht eine neu, in der zweiten Generation der Pokémon-Spiele, eingeführte Spielmechanik, welche uns das Fangen der Pokémon deutlich erschwert: Tageszeiten!

Prinzipiell ist die Erweiterung des Spielprinzips um unterschiedliche Tageszeiten eine interessante Sache. So lassen sich nun – abhängig von der Tageszeit in drei Zeitabschnitte aufgeteilt – in den gleichen Gebieten unterschiedliche Arten von Pokémon fangen:

Klingt erst mal cool, das bedeutet aber auch, dass man immer bis zu der entsprechenden Tageszeit warten muss, bis ein gerade gesuchtes Pokémon auftaucht. So kommen z.B. Pokémon wie Nidoran (in seiner männlichen und weiblichen Form) eher am Vormittag, während man Traumato tagsüber antrifft. Hoothoot ist – passend zum Eulendesign – ein Langschläfer und somit nur nachts auffindbar.
Not so fun Fact: Das ganze ist natürlich auch davon abhängig, auf welcher Route man sich befindet und welche Pokémon-Edition man spielt. Zwischen Gold, Silber und Kristall gibt es nämlich zahlreiche Unterschiede und einige Pokémon lassen sich nur in einer bestimmten Edition fangen.

Für Kinder, welche nicht so sehr in den Alltag und die Verpflichtungen, die das Erwachsenendasein so mit sich bringt, eingespannt sind, ist das sicherlich in Ordnung. Für jemanden, der nicht mehr den Luxus hat, den kompletten Tag mit dem Zocken von Gameboy-Spielen verbringen zu können, ist das ein Problem.

So was blödes. Warum kann man nicht einfach die Uhr nach Belieben umstellen? Das würde den Fangprozess deutlich erleichtern. Tatsächlich gibt es eine offizielle Möglichkeit, genau das zu tun. Diese ist aber so kryptisch und umständlich, dass man es auch gleich sein lassen kann. Ihr glaubt mir nicht? Also gut: Um die Uhr in Pokémon Gold neu einzustellen, muss man auf dem Titelbildschirm die Tastenkombination „Select“ + „Unten“ + „B“ drücken. Dadurch erscheint dann ein Menü, in welchem man ein Passwort eingeben muss.

Woher man das Passwort bekommt? Nun, das ist in jedem Spielstand anders und muss aus den Werten Trainer-ID, Trainer-Name und aktueller Kontostand berechnet werden. Kein Scherz! Der Algorithmus dafür ist alles andere als trivial. Gut, dass es Passwortgeneratoren (z.B. hier, hier oder hier) gibt, mit welchen man sich das Passwort automatisch erzeugen lassen kann, sofern man die entsprechenden Werte vorab ermittelt und auf den Webseiten eingibt.

Mit korrekt eingegebenem Passwort wird dann die Uhr zurückgesetzt und man kann beim nächsten Start des Spiels die Zeit neu setzen. Was für ein Wahnsinn!
Not so fun Fact: Auch wenn ich das nicht für möglich gehalten habe: Spielt man Pokémon Kristall, ist der ganze Prozess noch umständlicher. So muss man, um überhaupt in das Menü zum Zurücksetzen der Zeit zu kommen, nicht nur „Select“ + „Unten“ + „B“ drücken, sondern dann auch noch „Select“ gedrückt halten, während man „Unten“ und „B“ loslässt, nur um dann gleichzeitig „Links“ + „Oben“ zu drücken. Erst nachdem man dann abschließend „Select“ loslässt, wird die Uhr zurückgesetzt, bzw. man kommt in das Menü, in dem man das Passwort eingeben darf. Unfassbar!

Ernsthaft – welcher sadistische Programmierer hat sich das ausgedacht? Und was ist so schlimm daran, dass man die Uhrzeit umstellt? Kinder sind doch eh kreativ und hätten spätestens mit Cheat-Modulen wie z.B. dem Blaze Xploder aus Artikel 92 eine Möglichkeit gefunden, die Zeit zu verändern. Warum also so ein unnötiger Aufwand für eine einfache Uhrumstellung?

Mann, regt mich das auf. Wäre es nicht schön, wenn man einfach nach Belieben die Zeit verstellen könnte? Und das am besten ganz bequem per Menü zur Laufzeit – ohne diesen ganzen Passwortquatsch? Zumindest scheine ich mit dieser Meinung nicht allein zu sein, denn tatsächlich gibt es bereits fertige ROM-Patches für die Pokémon-Spiele, welche genau das ermöglichen sollen!

Na, das klingt doch prima. Dann müssen eigentlich ja nur unser Spiel z.B. mit Lunar IPS oder einer Onlineanwendung patchen, und schon müssten wir die Zeit nach Belieben verändern können:

Tatsache! Beim Starten kommt zwar eine Meldung, dass irgendwas mit der Checksumme nicht stimmt, aber trotzdem können wir jetzt im „PokéCom“ (eine Art vorsintflutliches Smartphone) mit dem Steuerkreuz die Uhrzeit und sogar den Wochentag einstellen. Sehr cool! 🙂

Irgendwas scheint aber mit unserem gepatchten Spiel nicht zu stimmen. Einerseits sollte man laut Beschreibung des Patches per Druck auf den „A“-Knopf die Zeit schneller verstellen können. Das funktioniert nicht und das Menü wird einfach wieder geschlossen. Andererseits – und das ist wesentlich schlimmer – stürzt das Spiel ab, sobald wir versuchen, auf den Kartenbildschirm zu wechseln. Eigentlich müsste dann die Karte der Spielwelt zu sehen sein, aber stattdessen hängt sich der Emulator auf:

Es sieht so aus, als hätte der Patch durch den Einbau der Zeitverstellmechanik irgendwas im Spiel zerstört. Um ehrlich zu sein, wundert mich das nicht, denn der Patch wurde für die englische, bzw. US-Version von Pokémon Gold entwickelt. Ich könnte mir vorstellen, dass die deutsche Version intern etwas anders aufgebaut ist. Um das zu beweisen, können wir beide ROM-Dateien (eine amerikanische Version und unsere deutsche Version) mit einem Hex-Editor öffnen:

Bereits innerhalb der ersten paar Bytes finden sich Abweichungen zwischen den Versionen. Mist. Und jetzt? Irgendwie hätte ich schon gerne auch in der deutschen Version eine Möglichkeit, die Zeit zu verstellen. Wir müssen das Rad ja nicht neu erfinden, vielleicht lässt sich der Patch irgendwie umbauen, damit er für die deutsche Version von Pokémon Gold funktioniert?

Die gute Nachricht: Bei dem Patch handelt es sich um eine, nur ca. 200 Byte kleine Datei im „IPS-Format“. In Artikel 240 haben wir ja bereits gelernt, wie IPS-Patches aufgebaut sind, dementsprechend sollte sich die Datei recht leicht analysieren und umbauen lassen.

Also gut, wie gehen wir vor? Im Endeffekt müssen wir den Patch nach Änderungsblöcken im Muster „Adresse“ (an der die Änderung durchgeführt werden soll = 3 Byte), „Länge“ (der zu ändernden Daten = 2 Byte) sowie zu ändernden Daten (variabel) durchforsten. Hier mal exemplarisch der erste Änderungsblock. An Adresse 0x000051 sollen sechs Byte zu x’CDDE04C37004‘ geändert werden:

Nach diesem Schema können wir alle Änderungen, die der Patch durchführt, analysieren. So wie es aussieht, ändert der Patch nur an fünf Stellen innerhalb der ROM-Datei ein paar Werte. Ich habe zur besseren Übersicht eine Tabelle mit allen vom Patch durchgeführten Änderungen erstellt:

Jetzt müssen wir überprüfen, was an den jeweiligen Stellen in der amerikanischen Version von Pokémon Gold steht. Es sieht so aus, als hätte der Patch-Ersteller einfach „leere“ (hexadezimal mit Nullen gefüllte) Bereiche innerhalb der ROM-Datei verwendet, um etwas zusätzlichen Code für die Zeitverstellmechanik einzuschleusen (1. und 2. Änderung). An allen anderen Stellen (3. bis 5. Änderung) werden dagegen bereits existierende Werte überschrieben – vermutlich um den zuvor eingeschleusten Code auszuführen.

Und wie sieht es in der deutschen Version aus? Hier findet sich eine ähnliche Struktur. Die ersten beiden Stellen (dort wo die vielen Nullen stehen) sind zwischen der US-Version und der deutschen Version identisch. An Stelle vier werden die exakt gleichen Werte wie in der amerikanischen Version überschrieben. Somit ist klar, dass zumindest die 1., die 2. und die 4. Änderung prinzipiell auch in der deutschen Version nichts kaputt machen und funktionieren sollten! 🙂

Ich denke wir sollten unser Augenmerk auf die 3. und 5. Änderung richten. Hier befinden sich ganz klar Unterschiede zwischen den beiden Versionen:

Wir haben Glück und können die Suche sogar noch etwas weiter eingrenzen. Bei den zwei Bytes, die an Adresse 0x00014E geändert werden, handelt es sich nämlich um eine 16-Bit-Checksumme der gesamten ROM-Datei. Wir haben ja bereits erkannt, dass die beiden Spielversionen unterschiedliche Bytes enthalten. Entsprechend ist klar, dass die Prüfsummen voneinander abweichen. Ganz nebenbei erklärt das auch, warum uns der BGB-Emulator beim ersten Versuch, die deutsche Version mit dem amerikanischen Patch zu versehen, einen Prüfsummenfehler entgegengeworfen hat! 🙂
Not so fun Fact: Dass es sich bei den zwei Bytes an Adresse x’14E‘ um eine Prüfsumme handelt, kann man leider nicht aus der ROM-Datei herauslesen. Das muss man wissen. Ich weiß das auch nur, weil ich in Artikel 334 bei der Erstellung der deutschen Übersetzung zu Pokémon Picross über das Thema (Struktur von Header-Daten von Game Boy Modulen) gestolpert bin! 😉

Ok und was bedeutet das jetzt? Im Endeffekt kann die Änderung, mit welcher der Patch die deutsche Version zerstört, eigentlich nur noch die fünfte sein. An Adresse 0x90F0F wird hier ein einziges Byte von x’0F‘ zu x’0E‘ verändert. In der deutschen Version steht an der Stelle allerdings x’4F‘:

Ein Patentrezept, bzw. einen einfachen, zuverlässigen Weg, wie man herausfinden könnte, was hier falsch läuft, gibt es meiner Meinung nach nicht. Da die Spiele aber insgesamt doch recht ähnlich aufgebaut sind, kann es eigentlich nur irgendeine „Verschiebung“ sein, also dass in der deutschen Version Bytes an einer anderen Stelle stehen. Mal sehen… Was auffällt, ist, dass das exakt gleiche Datenmuster rund um das zu ändernde Byte der US-Version in der deutschen Version ein paar Bytes später auftaucht. Sehr interessant! Ein Zufall? Ich glaube nicht! 😛

Vielleicht ist es schon ausreichend, wenn wir einfach die Adresse, an welcher der Patch das eine Byte von x’0F‘ zu x’0E‘ verändert, von 0x90F0F auf 0x90F3D anpassen. Dafür müssen wir die Patch-Datei mit einem Hex-Editor öffnen und die Adresse abändern:

Mit dem angepassten Patch können wir jetzt nochmal versuchen, die Zeitverstellmechanik in die deutsche Version von Pokémon Gold einzubauen. Wichtig dabei ist, dass man eine „saubere“ (also die originale, noch nicht gepatchte) Version des Spiels verwendet. Einen Patch auf einen Patch anzuwenden geht in den seltensten Fällen gut und würde auch hier nicht funktionieren! 😉

Der Game Boy Emulator meckert noch immer über eine ungültige Checksumme. Das ist logisch, da wir ja einfach einen falschen Wert an Änderungsposition drei stehen haben lassen und uns nur um die Korrektur der fünften Änderung gekümmert haben. Funktional betrachtet ist das aber völlig egal, denn tatsächlich lässt sich die Zeit jetzt beim Druck auf den „A“-Knopf schneller verstellen. Ebenso können wir einwandfrei auf den Kartenbildschirm wechseln, ohne dass das Spiel abstürzt. Erfolg! 🙂

Um den Prüfsummenfehler weg zu bekommen, können wir abschließend noch mit dem Tool „rgbfix“ die Checksumme berechnen und in der ROM-Datei korrigieren lassen.
Fun Fact: Wer richtig fleißig ist, nimmt die zwei Bytes für die geänderte Checksumme auch in den Patch auf. So wird durch das Patchen immer eine ROM-Datei mit korrekten Werten erstellt.

„Ich liebe es, wenn ein Plan funktioniert“, würde uns jetzt vermutlich auch Lieutenant Colonel John „Hannibal“ Smith vom A-Team nach dem erfolgreichen Abschluss des Auftrags versichern. Jetzt können wir bequem die Zeit verstellen und die ganzen Tageszeit-spezifischen Pokémon einsacken. Schon irgendwie schräg, dass der Fehler letztendlich mal wieder wegen nur einem einzigen, falsch gesetzten Byte aufgetreten ist. Was soll man sagen, Kleinvieh macht eben auch Mist.

Als kleine „Fleißarbeit“ habe ich im Nachgang des Artikels auch noch die Patches zum Ändern der Uhrzeit für die Silberne sowie die Kristall-Edition angepasst, so dass sie mit den jeweils deutschen Spielversionen funktionieren. Wer möchte, kann sich alle drei Patches gerne hier herunterladen.

In diesem Sinne – bis die Tage, ciao!
16. Januar 2026, 20:13
Hey Mann, geile sache!!
Ich war so frei, dazugehörige Fanmade Custom Cover zu erstellen.
Bei interesse schreib mir gerne!