Als ich das erste Mal eine DS-Johto-Edition (japanische Soulsilver) auslesen wollte - Waffen der Wahl waren sowohl SavSender als auch Rudolph - musste ich feststellen, dass das irgendwie nicht so einfach ist. Der Speicherchip wird nicht erkannt. In diesem Moment ging ich davon aus, dass ich diese Spiele nicht als Hubs für die Clique nutzen könnte - ausgesprochen schade, wenn man sich überlegt, dass man über den Pokewalker unterwegs Nullpokemon fangen kann, ohne wirklich Spielzeit zu investieren, Bälle zu kaufen usw. Also habe ich da die Sachen draufgelagert, die nicht ausgelesen werden müssen und das Thema erstmal vergessen.
Zwischenzeitlich habe ich dann mal in verschiedenen Foren nachgesehen und festgestellt, dass dieses "Problem" auch Anderen bekannt ist. Einige Leute haben probiert, die bekannte Software anzupassen, schienen aber nicht erfolgreich zu sein.
Inzwischen gab es da wohl Fortschritte. Jemand hat sein Modul geöffnet und festgestellt,
dass der Pin, der normalerweise zum Speicherchip geht, nicht direkt dorthin geht. Offenbar
haben die NTR-31-Mobule durch den IR-Chip etwas abgeändert. Überbrückt man diesen
Chip mit einem kleinen Kabel, dann funktionieren die gängigen Tools wieder - aber
wer will schon sein Original-Modul aufmachen und daran herumlöten?
Zumindest war dies dann aber wohl eine gute Hilfe, was die Programmierung von neuen Tools angeht.
Wenn man erst einmal weiß, wie man diesen Chip überredet, wieder den Zugriff auf den
Speicher zu erlauben, dann könnte man die Tools anpassen.
Um ehrlich zu sein: Ich habe diese Richtung nicht weiter verfolgt. Ich weiß, dass der
USB-Auslese-Stick inzwischen in einer neuen Version erschienen ist, welche explizit NTR-031
unterstützt und ich halte es für möglich, dass auch SavSender oder
Rudolph ein Update erhalten halten (wahrscheinlich inoffiziell, denn die Entwickler
schienen schon lönger inaktiv zu sein).
Denn irgenwann trat ein neues Werkzeug in mein Leben: Das "Trainer Toolkit".
Ich gebe zu, ich war anfangs sehr skeptisch. Vergleicht man den amerikanischen
Preis mit dem, den man in Deutschland dafür bezahlen muss, wirkt das Modul
arg überteuert. Zusätzlich braucht es ein Action Replay, um zu funktionieren.
Preislich vielleicht nicht die größte Katastrophe, aber wenn man bisher
cheatfrei bleiben musste und nun doch gezwungenerweise das AR-DS-EZ anzufassen, ist das
schon unschön.
Weiterer Makel: Es ist kein echter Debugger. Es hat keine Breakpoints, man kann
den Programmfluss nicht anhalten (okay, man kann NOP-Äquivalente in den Text schreiben,
aber so richtig Spaß macht das nicht) - man kann wirklich nur auf den Speicher
zugreifen.
Letztlich reicht das aber ja an vielen Stellen schon. Mal ganz ehrlich: Man
hat hat Zugriff auf den Speicher, kann ihn lesen, kann ihn beschreiben, und kann
AR-Codes im laufenden Betrieb starten und stoppen. Wenn man weié, wie man
suchen muss und wonach man suchen will, ist das ein mächtiges Werkzeug.
Beispiel: Die Konstanten für den PRNG haben sich nicht geändert. Wenn
man nach ihnen sucht, findet man auch schnell den PRNG selbst - und muss noch
nicht einmal ein Abbild des Spieles auf den PC ziehen.
Beispiel: Wenn man weiß, wie die Schriftzeichen im Spiel kodiert sind (jedes
Zeichen besteht aus zwei Byte. Das erste nenne ich liebevoll "Fontcode", weil
es 0x00 für japanische Zeichen und 0x01 für andere Zeichen ist.
'0' ist 0x0121, '1' ist 0x0122, 'A' ist 0x012B, 'Z' ist 0x0144), sucht man
nach dem Text einer Wunderkarte und hat schon bald den Speicherbereich, in dem man sie
findet. Hat man dann noch die Struktur einer Wunderkarte an sich im Kopf, kann man
sie auch direkt extrahieren - So geschehen bei der Siegerstraß und dem goldgelben Wald,
die nun auch endlich hier auf der Cliquenseite sind.
Aber natürlich will ich auch die Karten aus der englischen und der japanischen
Edition haben - die japanische Edition hat immerhin auch schon den "Enigma Stone", bei
der englischen geht es ums Prinzip.
Die englische Edition ist auch kein Problem. Man kann die Buchstaben vom Bildschirm ablesen
und wieder danach suchen. "stroll" taucht doppelt auf, aber das ist ja kein echtes Problem.
Die japanische Edition ist da schon wieder schwieriger - in der Schule stand japanisch
nie als Fremdsprache zur Verfügung und hier eine Font-Umrechnungstabelle zu finden
ist nicht ganz einfach. Noch vor einigen Monaten hätte ich das Projekt schon deswegen
für unmöglich gehalten. Da kannte ich Unicode noch nicht so gut. Bulbapedia hat
ein wenig nachgeholfen, und im 0x30XX-Bereich wurde ich dann fündig. Also wurden aus
älteren Editionen japanische Pokemon ausgelesen und ihr Name (in japanischem Fontcode) mit
den entsprechenden Buchstaben abgeglichen. Langsam entstand die Umrechnungstabelle.
Mit dieser Umrechnungstabelle konnte ich dann endlich den Text einer Wunderkarte
zumindest anteilig in den Bytecode verwandeln, der im Speicher zu finden sein musste.
Ich gebe an dieser Stelle zu: Ich habe versagt. Zwar habe ich gehofft, die Zeichen richtig
umzurechnen (64 F1 6A 8F 68), aber ich fand die Stelle nicht im Speicher.
Nach der ganzen Vorbereitung für die Tabelle war da irgendwo der Wurm drin.
Wie sich später herausgestellt hat,
hatte ich ein einzelnes Zeichen übersehen, ansonsten war es korrekt.
Wie habe ich die Karte nun wirklich gefunden? Ich hatte den gelben Wald auf dem Bildschirm
und wusste von der deutschen Wunderkarte dafür, dass die Karte mit
0E 00 00 00 16 00 00 00beginnen musste. 0x0E für eine Pokewalker-Route, 0x16 für den Index. Bei diesem Suchbegriff würde ich wahrscheinlich auch viele Fehltreffer finden, aber zumindest hätte ich einen Anhaltspunkt.
PokCode | Unicode | Zeichen |
---|---|---|
0068 | 30B7 | シ |
0074 | 30C3 | ッ |
Letztlich hatte ich aber damit den Speicherblock gefunden, den ich gesucht hatte. Wenn man erstmal eine Karte gefunden hat, sind die anderen auch ganz einfach und ich gehe davon aus, dass ich damit auch jede zukünftige einfach finden sollte. Auch die japanischen (und englischen) Karten stehen nun bei der Clique zur Verfügung. Ich glaube, das ist ein Erfolg.
Ich möchte an der Stelle nochmals darauf aufmerksam machen, wie die verschiedenen Punkte aufeinander aufgebaut und sich später selber erleichter haben: