#360 – Pokémon Polished Crystal inkl. save hack

#360 – Pokémon Polished Crystal inkl. save hack

Ich liebe die Pokémon-Spiele für den Game Boy Color. Das ist ein Fakt und es lässt sich sogar recht leicht erklären, warum das so ist. Als Kind, bzw. Teenager hatte ich einen Game Boy mit Farbdisplay und die Pokémon-Spiele gehörten zu ständigen Begleitern auf dem Spielplatz, im Auto oder nachts unter der Bettdecke mit einer Taschenlampe oder alternativ einem sog. „Worm Light“! 🙂

Bild_1

Während mir die erste Generation der Taschenmonster (Editionen Rot und Blau) schon damals immer etwas rustikal vorkam, bin ich in die Spiele der zweiten Generation (Gold, Silber und Kristall) richtig eingetaucht und habe hunderte Stunden in deren virtuellen Welten verbracht.

Bild_2

Gerade Pokémon Kristall zählt für mich bis heute zu den besten „von-oben-drauf-guck-Pokémon-Spielen“ (also 2D) und ich kann gar nicht mehr sagen, wie häufig ich das Abenteuer, welches sich über Johto und Kanto erstreckt, bereits durchgespielt habe.

Bild_3

Genau da liegt aber auch das Problem. Die Story ist mittlerweile ausgelutscht und ich kann nicht leugnen, dass das Spiel designtechnisch auch ein paar Schwächen aufweist. Gerade in der zweiten Spielhälfte (Kanto) wirkt vieles unfertig und Nintendo hat einfach so viel Potenzial, das Spiel noch einen Tick besser zu machen, verschenkt.

Bild_4

Genau dafür gibt es enthusiastische Fans, die mit Mods und Rom-Hacks ein Spiel um neue Funktionen erweitern, welche das Spielerlebnis verbessern. Tatsächlich gibt es mit „Complex Crystal“, „Pokémon Prism“ und „Crystal Clear“ auch für Pokémon Kristall ein paar sehr populäre und gelungene Erweiterungen, aber heute soll es um „Polished Crystal“ gehen, einen vergleichsweise neuen Rom-Hack für das mittlerweile 25 Jahre alte Spiel. Die Erweiterung setzt sich das Ziel, eine verbesserte und optimierte Version von Pokémon Kristall zu sein, welche Fehler behebt und einige Änderungen von neueren Spielgenerationen (sowie den Remakes Heart Gold und Soul Silver) aufgreift. Klingt super!

Bild_5

Ich spiele das Spiel mittlerweile seit ca. 20 Stunden und muss sagen, dass ich bisher voll überzeugt bin. Schnellere Dialoge, weniger Menü-Geklicke, neue Orte, neue Charaktere, neue Fähigkeiten für die Pokémon, ein paar neue Taschenmonster sowie diverse, lustige Gespräche. Alles in allem wirkt der Hack sehr ausgereift, wenn man bedenkt, dass er sich noch im Beta-Stadium befindet.

Fun Fact: Wie man unschwer anhand des folgenden Bildes erkennen kann, spiele ich das Spiel mit dem BGB-Emulator auf einem PC. So lassen sich einfach leichter Bilder vom Spielgeschehen anfertigen. Ich wollte an dieser Stelle allerdings nicht unerwähnt lassen, dass der Hack auch auf echter Hardware (also Game Boy Color mit entsprechend beschriebenem Spielmodul) laufen würde.

Bild_6

So schön Polished Crystal auch ist – ein Problem gibt es da aber: Während des Spiels habe ich mir ein Maschock gefangen, bzw. ein Machollo trainiert, bis es sich zu Maschock entwickelt hat.

Bild_7

Soweit so klar, was stimmt denn damit nicht? Nun, im originalen Pokémon Kristall würde sich Maschock in seine dritte und somit letzte Entwicklungsstufe Machomei entwickeln, sobald man es über ein Link-Kabel tauscht. Erinnert ihr euch? Damals musste man sich noch mit Leuten persönlich treffen und Geräte mit Kabeln verbinden, um miteinander zu kämpfen und Pokémon zu tauschen. Ich weiß – in Zeiten des Internets samt seiner gefühlt unendlichen Möglichkeiten (und einem völlig degenerierten Sozialverhalten vieler Spieler) wirkt das unvorstellbar. 😉

Bild_8

Ok, kein Problem, dann tauschen wir das Pokémon halt einfach mit einem weiteren Polished Crystal Spielstand. Um nicht mit echten Game Boys und Modulen sowie einem Link-Kabel herumhantieren zu müssen, habe ich einfach den Spielstand kopiert und mit einem zweiten Emulator geöffnet. Gut, dass der BGB-Emulator das Simulieren eines Link-Kabels unterstützt. So lassen sich lokal Pokémon tauschen – quasi mit sich selbst. Die Ideale Lösung für Leute ohne Freunde! 😀

Bild_9

So die Theorie, denn leider möchte sich Maschock – trotz erfolgreichem Tausch – einfach nicht entwickeln. Aber warum?

Not so fun Fact: Spaßeshalber habe ich auch versucht, das Maschock mit einem Spielstand von einer originalen Pokémon-Kristall-Edition zu tauschen, das hat aber leider nicht funktioniert. Man kommt dank einer Fehlermeldung schon gar nicht erst in den Raum zum Tausch der Pokémon. Ich vermute, dass (u.a. aufgrund von neu hinzugefügten Attacken, Items und Fähigkeiten) die Spielstände und somit auch die Tausch-Mechanik einfach nicht miteinander kompatibel sind. Schade!

Bild_10

Die Antwort findet sich im FAQ des Romhacks. Einige Pokémon entwickeln sich in Polished Crystal nicht mehr durch Tausch, sondern durch das Erreichen bestimmter Basispunkte. Im Vergleich zu den Statuswerten (wie z.B. Attacke, Verteidigung oder Geschwindigkeit) sind die Basispunkte (auch „EV-Values“ genannt) unsichtbare Werte, welche letztendlich die Statuswerte eines Pokémons beeinflussen. Zusätzlich gibt es noch individuelle Stärken (sozusagen die Gene von Pokémon), welche ebenfalls einen Einfluss auf die Statuswerte haben. Puh, ist das alles kompliziert.

Not so fun Fact: Wenn man es genau nimmt, kommen in den Pokémon-Spielen der ersten beiden Generationen anstelle der Basispunkte sog. „Stat Experience“-Punkte zum Tragen. Erst in den späteren Spielen werden Basispunkte verwendet. Das Fass will ich jetzt aber nicht auch noch aufmachen, das Thema ist so schon komplex genug! xD

Bild_11

Vielleicht sollten wir uns auf das Wesentliche konzentrieren: Wie schaffen wir es denn jetzt, dass sich unser Maschock entwickelt? Einfach gesagt, müssen wir dafür sorgen, dass dessen Basispunkte für den Wert „Attacke“ steigen. Das geht z.B. durch das Besiegen von Pokémon oder indem man dem Kraftprotz ein paar Vitamine (konkret „Protein“ zur Erhöhung des Angriffswertes) einflößt. Klingt ja eigentlich nicht so kompliziert, oder?

Bild_12

Tja, was soll ich sagen? Ich habe das Muskelpaket mit Vitaminen zugeschüttet, zahlreiche Pokémon besiegt und bis Level 56 trainiert, aber trotzdem, möchte sich Maschock einfach nicht entwickeln. Ich kann nicht sagen, ob es ein Bug im Spiel ist, oder ob ich irgendwas falsch gemacht habe, aber letztendlich habe ich keine Idee mehr, wie wir den sturen Fleischklops mit legalen Mitteln zu einer Entwicklung zu Machomei überreden können.

Fun Fact: Irgendwie hätte der heutige Beitrag auch „Warum entwickelt sich Maschock nicht?“ heißen können, aber sind wir mal ehrlich – das hört sich eher nach einer Folge der Pokémon TV-Serie an! 😀

Bild_13

Somit bleibt uns also nur noch eine Möglichkeit: Wir müssen versuchen, unsere Spielstandsdatei irgendwie zu modifizieren, sodass das Spiel denkt, das Pokémon hätte sich entwickelt. Aber wie?

Bild_14

Der einfachste Weg wäre es, die Datei mit einem speziell dafür vorgesehenen Editor wie z.B. „PKHex“ (siehe Artikel 203) zu öffnen und zu bearbeiten. Leider unterstützt das Programm nur Dateien von offiziellen Pokémon-Spielen und so kann unser Polished Crystal Spielstand nicht geöffnet werden:

Bild_15

Da ich auch kein anderes Programm gefunden habe, mit dem sich das Save-File bearbeiten lässt, müssen wir wohl selbst Hand anlegen. Mit Hilfe eines Hex-Editors (HxD) lässt sich zumindest die 32 Kilobyte großen Binärdatei des Spielstands öffnen. Die Frage ist nur, wie zum Geier wir in dem hexadezimalen Zahlengewusel jetzt unser Maschock finden sollen?

Fun Fact: In Artikel 345 haben wir uns mit einem ähnlichen Thema beschäftigt, allerdings ging es „damals“ um die ROM-Datei selbst und nicht um die SAV-Datei mit dem Spielstand eines Spiels.

Bild_16

Im Endeffekt müssen wir versuchen, mit Hilfe von Dokumentationen zur Dateistruktur der Spielstandsdatei herauszufinden, wie die Save-Datei aufgebaut ist und an welcher Stelle unsere Team-Pokémon gespeichert werden. Jedes einzelne Pokémon sollte irgendwo in der Datei nach folgendem Muster vorhanden sein.

Bild_17

Mit Hilfe der Dokumentation können wir uns nun die passenden Hexwerte (Indexnummer, Attacken, getragenes Item, etc.) für unser Maschock zusammensuchen. Ich vermute, dass die ersten paar Bytes des Maschocks in der Spielstandsdatei ungefähr so aussehen müssten:

Not so fun Fact: Ich habe mich erst verwirren lassen, da ich die Hexwerte aus der Dokumentation der offiziellen Pokémon-Spiele entnommen habe. Das macht natürlich keinen Sinn, da der Hack-Ersteller von Polished Crystal einiges verändert hat und so mehrere Werte nicht mehr der offiziellen Dokumentation übereinstimmen. Gut, dass es eine eigene Hack-Dokumentation gibt, aus welcher wir die entsprechenden Werte herauslesen können.

Bild_18

Tatsächlich lässt sich die von uns aus der Doku zusammengebastelte Zahlenfolge im Spielstand finden! Wenn ich mich nicht täusche, müsste das hier unser Maschock sein! 🙂

Bild_19

Nach dem gleichen Prinzip können wir uns jetzt die Daten aus der Dokumentation heraussuchen, um aus dem Maschock ein Machomei zu machen. Neben der Indexnummer (bestimmt, welches Pokémon es ist) macht es Sinn, auch die Statuswerte des Pokémons anzupassen. Schließlich wollen wir ja, dass unser Pokémon durch die Entwicklung etwas stärker wird! 😉

Bild_20

Hat man erst mal die entsprechenden Stellen im Spielstand gefunden, sind die Hex-Werte von Maschock fix durch die neu ermittelten Daten ersetzt:

Bild_21

Ob unsere Modifikation funktioniert hat? Beim Start der Spiels folgt prompt die Ernüchterung: Leider ist Maschock immer noch Maschock und nicht Machomei.

Bild_22

Und nicht nur das – auch wurde scheinbar unsere manuelle Änderung im Spielstand auf magische Art und Weise wieder zurückgenommen. Was geht hier ab?

Bild_23

Ein weiterer Blick in die Dokumentation von Pokémon Kristall verrät uns, dass wohl die Daten über Spieler, Pokémon, etc. doppelt, also an zwei verschiedenen Stellen innerhalb des Spielstands hinterlegt sind. Na gut, dann ändern wir Maschock eben an zwei Stellen ab! 🙂

Bild_24

Leider ist auch dieser Versuch nicht von Erfolg gekrönt. Schlimmer noch – durch unsere Änderung kann das Spiel jetzt scheinbar den Spielstand überhaupt nicht mehr lesen! 🙁

Bild_25

Haben wir was übersehen? Leider ja. Das Zauberwort heißt „Checksumme“. Mit Hilfe einer Prüfsumme testet das Spiel, ob die Daten noch integer sind und stellt fest, dass hier wohl jemand händisch herumgefummelt hat. So ein Mist!

Fun Fact: Um ehrlich zu sein, habe ich mich gewundert, warum das Ändern von nur einer Stelle in der Datei nicht zur Zerstörung des Spielstands geführt hat. Dieser Umstand lässt sich recht leicht durch die doppelte Speicherung der Daten erklären. Das Spiel erkennt, dass etwas am primären Spielstand (ab Adresse 0x2009) verändert wurde, weil die Checksumme nicht stimmt. Als Konsequenz werden die Backup-Daten (ab Adresse 0x1209) geladen, um den kaputten, primären Spielstand zu ersetzen. Somit ist auch klar, warum unser erster Änderungsversuch wieder automatisch zurückgenommen wurde! Gleichzeitig bedeutet das aber auch, wenn wir es irgendwie schaffen, das Spiel dennoch zu überlisten, müssen wir nur an einer Stelle – nämlich an der des Primärbereiches – etwas ändern! 😉

Bild_26

Und jetzt? Damit unsere Änderungen als gültig akzeptiert werden, müssen wir eine neue 16-Bit-Checksumme aus den Werten des geänderten Bereichs bilden und diese dann an der entsprechenden Stelle (Adresse 0x2D0D = Checksumme für Primärbereich) im Spielstand abändern.

Bild_27

Klingt eigentlich gar nicht so kompliziert. Eine letzte Hürde bleibt allerdings noch. Den Bereich zur Berechnung der Checksumme habe ich aus der Dokumentation von Pokémon Kristall entnommen. Leider sieht es so aus, dass bei Polished Crystal ein anderer Bereich zur Berechnung der Prüfsumme verwendet wird, denn selbst bei einem unveränderten Spielstand lässt sich der an Adresse 0x2D0D angegebene Prüfsummenwert nicht aus dem Bereich 0x2009-0x2B82 errechnen. WTF?!

Bild_28

An dieser Stelle war ich kurz davor aufzugeben, weil ich in der Dokumentation des Hacks nichts über eine veränderte Prüfsummenberechnung gefunden habe. Mehr oder weniger durch Zufall – bzw. durch wildes Herumprobieren – ist es mir dann doch noch gelungen, zu verstehen, was hier falsch läuft. Tatsächlich fängt der Bereich, aus welchem die Prüfsumme berechnet wird, einfach ein Byte früher an (und hört dafür auch ein Byte früher auf). Ist das nicht unfassbar? Ernsthaft – wie häufig hat bei unseren Bastelprojekten nun schon ein einziges Byte den Unterschied gemacht? 😉

Fun Fact: Ich sage es euch – den korrekten Bereich zur Checksummenberechnung habe ich erst gefunden, als mich meine bessere Hälfte darauf hingewiesen hat, dass die beiden Bytes der Checksumme in der Anzeige des HxD-Editors anders herum dargestellt werden, als in der Datei selbst. Eigentlich ein klassische Anfängerfehler, aber nach mehreren Stunden mit unzähligen Hex-Werten vor den Augen passiert so etwas einfach! xD

Bild_29

Aber egal, mit dieser Information können wir nun endlich die korrekte Checksumme des von uns geänderten Bereichs berechnen und diese anschließend an Position 0x2D0D einsetzen.

Bild_30

Puh, was für ein irrer Aufwand. Und das alles nur, um ein digitales Taschenmonster zu entwickeln. Immerhin war die Arbeit nicht umsonst, denn tatsächlich lässt sich der Spielstand jetzt wieder öffnen und – was noch viel wichtiger ist – unser Maschock hat sich endlich zu Machomei entwickelt! 🙂

Bild_31

Ach, es fühlt sich einfach gut an, wenn am Ende ein Erfolg zu Buche steht. Der lässt dann schnell den Ärger und die ganzen Strapazen vergessen – und das völlig unabhängig davon, wie vermeintlich zeitaufwändig (oder sinnlos) ein Projekt auch war! 😛 Wie dem auch sei, ich hoffe euch hat der kleine Ausflug in die Welt der Pokémon-Rom-Hacks sowie deren Spielstände gefallen. Falls ihr selbst mal einen dieser Hacks spielen möchtet, gebe ich hiermit eine ganz klare Empfehlung für „Polished Crystal“ ab. Wer das schon kennt, greift zu „Pokémon Prism“ oder „Crystal Clear“.

In diesem Sinne – bis die Tage, ciao!

Kommentar verfassen