20100601

Ich glaube, das ist ein Erfolg


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 00
beginnen 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.
Wie sich herausgestellt hat, gab es keine Fehltreffer. Bereits der erste Treffer hatte die verräterischen vielen FF FF (Nulltextzeichen) hinter Blöcken, die mit 00 an jeder zweiten Stelle stark nach Text aussahen. Hier waren auch tatsächlich 64 61 FA 8F zu finden - allerdings nicht gefolgt von 68, sondern von 74. Wer die Zeichen vergleichen möchte:
PokCodeUnicodeZeichen
006830B7
007430C3
(Wenn das Zeichen nicht angezeigt wird, kann man sich auch die Tabellen beim Unicode Consortium herunterladen. Bedenkt bitte auch, dass die Zeichen auf dem DS sich nochmals ähnlicher sehen)

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: