Fast geschafft! Wenn Deutschland es bei der Fußball-EM schon nicht bis ins Finale schafft, dann sollten wir zumindest unsere deutsche Übersetzung von Pokémon Picross heute final abschließen, findet ihr nicht? 😉
Fun Fact: retrololo aus der Zukunft hier: Anhand des „EM-Aufhängers“ merkt man, wie alt der heutige Beitrag schon wieder ist. Für alle Anti-Fußball-Menschen da draußen: Die EM war bereits letztes Jahr. Manchmal finde ich es selbst verblüffend – um nicht zu sagen erschreckend – wie lange sich die Nachbearbeitung solcher Themen hinzieht. Ich werde versuchen, zukünftig die Beiträge wieder etwas näher zum Erstellungszeitpunkt hochzuladen, ok? Versprechen kann ich aber nichts! 😛
Hätte ich gewusst, dass das so eine Odyssee wird, hätte ich vermutlich die Finger davon gelassen. Aber sind wir mal ehrlich: Jetzt stecken wir schon zu tief drin und müssen die Sache durchziehen. Die Schwerstarbeit ist ja auch bereits geschafft und wir waren beim letzten Mal so weit, dass wir alle Texte, Grafiken und komprimierten Schnipsel übersetzt haben. Als Ergebnis haben wir nun diese drei ROM-Dateien, wovon jede ein paar der von uns getätigten Änderungen enthält:
Die Frage ist jetzt, wie wir diese Änderungen aus den Dateien identifizieren und daraus eine fertige ROM bauen können. Wer Artikel 240 gelesen hat, weiß, dass ROM-Dateien für gewöhnlich nicht händisch, sondern mit Patch-Dateien bearbeitet werden. Einerseits ist das weniger fehleranfällig, andererseits können diese bedenkenlos ins Internet gestellt werden, da man kein urheberrechtlich geschütztes Material zur Verfügung stellt, sondern lediglich ein paar Bits und Bytes mit Anweisungen, an welchen Adressen in einer Datei ein paar Hexwerte ersetzt werden sollen! 🙂
In unserem Buildprozess ist bereits ein Patch-Tool namens „ups“ vorhanden, welches Änderungen zwischen der originalen, japanischen ROM-Datei sowie den von uns erstellten Dateien erkennen und daraus entsprechende Patches basteln kann:
Not so fun Fact: Bitte wundert euch nicht über die etwas komischen Dateinamen wie z.B. „POKEPICROSS_ENG.ups“. Natürlich handelt es sich dabei um unseren Deutschpatch, aber ich hatte einfach keine Lust die ganzen Namen in diversen Skripten anzupassen! 😉
Beim Versuch, die Patches dann anzuwenden, wird aber schnell klar, dass sich die Änderungen gegenseitig überschreiben und zuvor (mit einem vorherigen Patch) getätigte Anpassungen wieder auf den Ursprungszustand zurückdrehen. Eigentlich völlig logisch, denn die Stellen, die man z.B. im ersten Patch modifiziert hat, sind im zweiten ja nicht vorhanden und dadurch werden sie wieder auf den Stand der originalen ROM-Datei geändert. Mist.
Wir brauchen eine andere Taktik. Vielleicht können wir das Tool überlisten, indem wir die Patches einfach immer im Vergleich zur originalen ROM-Datei erstellen und so die Änderungen Schritt für Schritt einpflegen, ohne etwas vom vorherigen Patch zu zerstören? Gute Idee, doch leider prüft UPS die Checksumme der ROM-Datei und stellt fest, dass wir den Patch für die originale ROM-Datei erstellt, diesen jetzt aber auf eine bereits modifizierte anwenden möchten. Wieder Mist.
Eigentlich ist das schlau von dem Programm, denn in den meisten Fällen macht es keinen Sinn, zwei ROM-Patches nacheinander auf eine Datei anzuwenden. Die Wahrscheinlichkeit, dass der zweite Patch etwas vom ersten kaputt macht und somit die ROM-Datei völlig zerstört, ist sehr hoch. Blöd nur, dass das in unserem Fall exakt das ist, was wir brauchen, da wir ja sicher sind, dass jeder Patch nur an einer anderen Stelle innerhalb der Datei herumpfuscht. Jetzt ist guter Rat teuer!
Fun Fact: Es gibt sogar Tools (z.B. hier oder hier) die prüfen, ob sich Patches gegenseitig überschreiben. Sehr interessant, leider scheint das aber nur mit IPS-Patchen und nicht mit dem von uns verwendeten Dateiformat UPS zu funktionieren.
Vielleicht braucht es ein anderes Werkzeug? Wir hatten doch da schon mal so ein ähnliches Patchprogramm in einem vergangenen Beitrag, oder? Ich erinnere mich dunkel an „LunarIPS“ aus Artikel 240. Vielleicht sollten wir es damit mal probieren:
Die Software verwendet ein anderes Dateiformat (.IPS) und ist tatsächlich nicht so pingelig, was die Checksumme angeht. Es tut einfach exakt das, was wir von ihm verlangen – egal wie vermeintlich unsinnig das sein mag! 😀
Tatsächlich lassen sich unsere Änderungen damit in einer einzigen ROM-Datei zusammenführen, welche sich anschließend auch problemlos im Emulator abspielen lässt. Mann, es ist ein tolles Gefühl, die Arbeit zahlreicher Stunden in einem fertigen Stück zu sehen! 🙂
Mit Hilfe der mehrfach gepatchten ROM können wir jetzt einen einzelnen Patch zur Verteilung im Netz erstellen. Generell macht es dennoch eher Sinn, dafür das UPS-Format zu verwenden. Es bietet im Vergleich zu IPS einige Vorteile, wie z.B. den Integritätscheck oder bidirektionale Patchvorgänge. Das bedeutet, dass Patches von bereits gepatchten ROMs auch wieder zurückgenommen werden können. Ebenso können UPS-Patches im Vergleich zu IPS-Patches größer als 16 Megabyte werden.
Um den gesamten Prozess für potenziell weitere Änderungen zu automatisieren, habe ich ein neues MAKE-Skript erstellt, beide bisherigen Buildskripte darin vereint und um die Patchorgie erweitert. Wer weiß? Vielleicht müssen wir in der Zukunft ja nochmal an das Zeug hinlangen, weil wir doch irgendwo einen Text oder eine englische (oder gar japanische) Grafik übersehen haben.
Oha, tatsächlich brauchen wir das Skript wohl früher als gedacht, denn wenn ich es mir recht überlege, habe ich vergessen, die Credits zu überarbeiten! 🙁
Das sollten wir schleunigst nachholen. Auf der Suche nach dem Abspann wäre ich fast verzweifelt, denn auch dieser war weder als Text, noch als Grafik im Spiel aufzufinden. Beim Betrachten der ROM-Datei in einem Hexeditor ist mir – mehr oder weniger durch Zufall – aufgefallen, dass sich die Credits als „Klartext“ innerhalb der Datei befinden! Nach dem ganzen Gerede über Komprimierung bin ich nicht früher drauf gekommen, dass es so leicht sein könnte! xD
Das Anpassen der Rollenbezeichnungen ist dann leider aber trotzdem schwieriger als gedacht, da sich die einzelnen durch einen Punkt (bzw. hexadezimal X’00‘) getrennten Abstände nicht verändern lassen, ohne das Spiel zu zerstören. So müssen wir bei einigen Titeln ganz schön kreativ werden und herumprobieren, um die Texte innerhalb der Credits halbwegs zentriert hin zu bekommen.
Not so fun Fact: Ebenso habe ich es nicht geschafft, das abschließenden Wort „END“ durch ein längeres wie z.B. „ENDE“ zu ersetzen. Um dennoch nicht mit der Schande des Versagens leben zu müssen, habe ich mich letztendlich ganz stilsicher für das französische „FIN“ entschieden.
Bin ich froh, dass das geschafft ist. Jetzt sind auch die Credits auf deutsch! 🙂
Fun Fact: Natürlich habe ich es mir nicht nehmen lassen, mich in selbigen zu verewigen, aber das wird hier jetzt nicht gespoilert! 😉
Apropos Abspann: In Artikel 333 hatte ich ja bereits erwähnt, dass sich dieser ändert, wenn man alle 151 Nonogramme gelöst und somit das Spiel zu einhundert Prozent durchgespielt hat. Das stimmt, aber wusstet ihr auch, dass es noch eine dritte Sequenz gibt, wenn man auch den beinharten Safari-Modus abschließt? In dieser wurden die einzelnen Schauplätze um einige Pokémon erweitert und sogar ein paar exklusive Szenen hinzugefügt. Ich finde es immer schön, wenn man für einen perfekten Spielstand mit so kleinen „Goodies“ belohnt wird. 🙂
So, jetzt sind wir aber wirklich fertig, oder? An und für sich ja, aber beim „Testspielen“ ist mir dann leider noch ein letztes Problem aufgefallen: Das „Safari Album“, welches einen Überblick der absolvierten Safari-Levels gibt, ist defekt! Grundsätzlich funktioniert die Anzeige der Bilder zwar, aber scheinbar werden die Grafiken zerstört, wenn man versucht, ein Bild an den Drucker (egal ob dieser nun angeschlossen ist oder nicht) zu schicken und dann zu der Grafik zurückkehren möchte:
Erst dachte ich, dass ich etwas durch die zahlreichen Modifikationen kaputt gemacht hätte, aber tatsächlich ist der Fehler bereits in der englischen Übersetzung des Spiels (und auch im japanischen Original) vorhanden. Irgendwie seht es so aus, als würde beim Laden des Bildes etwas schief gehen und das Spiel einfach an der falschen Stellen versuchen, zurück zum Pokédex zu springen. Das können wir so natürlich nicht stehenlassen. Ich befürchte, wir müssen nochmals den BGB-Debugger bemühen und uns durch den Maschinencode kämpfen. Ich weiß, ich habe auch keine Lust! 😛
Tausende Assembler-Statements und eine gefühlt endlose Suche später…
…ist dann tatsächlich die Stelle (Adresse x’000F92C0‘) in der ROM-Datei gefunden, an der wir eine Sprungadresse (x’CD10‘) verdrehen (auf x’80FF’ setzen) müssen. Fragt mich bitte nicht mehr, wie ich das gefunden habe. Im Nachhinein kommt mir das alles wie ein böser Fiebertraum vor! 😀
Das ist schon bizarr. Im Endeffekt sind es nur zwei Byte Unterschied, aber tatsächlich werden jetzt alle Grafiken sauber geladen. Kleine Ursache, große Wirkung! 🙂
Not so fun Fact: Erst im Nachtrag des Beitrags habe ich herausgefunden, dass dieselbe Änderung ebenfalls an der Stelle x’000F9552‘ in der ROM-Datei durchgeführt werden muss. Andernfalls ist das Bild bei einem erfolgreichen Druckvorgang zerstört. Noch ein kleiner Tipp für die Zukunft: Es macht Sinn, einen Emulator zu verwenden, welcher die Emulation eines Game Boy Printers unterstützt! 😉
So, nun ist aber gut. Es wird Zeit, dass wir dieses gefühlt nicht enden wollende Projekt beenden und den Patch endlich in die freie Wildbahn entlassen. Was für ein Marathon! Wenn ich alles zusammen rechne, sind in die Übersetzung insgesamt bestimmt fast 100 Stunden an Arbeit geflossen. Das ist schon irgendwie traurig, wenn man bedenkt, dass am Ende der ganzen Arbeit eine einzige binäre Datei mit 126 Kilobyte als Ergebnis übrig bleibt! 😀
Hat sich der Aufwand gelohnt? Schwer zu sagen. Objektiv betrachtet könnte man sagen, dass ich definitiv zu viel Zeit für die Erstellung einer deutschen Version eines Spiels, welches gefühlt keine Sau kennt und bei der es fraglich ist, ob es jemals zehn Leute spielen werden, versenkt habe. Subjektiv betrachtet schaut das schon ganz anders aus. Einerseits habe ich einiges neues dazugelernt und andererseits finde ich es prinzipiell auch in Ordnung, Zeit in etwas zu stecken, was einem Freude bereitet – selbst wenn das vermeintliche Hobby dann etwas „speziell“ ist. Andere Leute beobachten Vögel oder gehen angeln, dem Jeden das Seine!
Würde ich so ein Projekt nochmal wagen? Wer weiß. In jedem Fall würde ich etwas anders an die Sache ran gehen und mir von vornherein eine bessere Arbeitsumgebung zusammenstellen – alleine schon, um das Gebastel mit den einzelnen ROMs am Ende zu vermeiden. Man lernt eben nie aus und leider gibt es bei solchen „Spezialprojekten“ auch selten ein Patentrezept, mit dem sich sämtliche Herausforderungen erschlagen lassen. Jedes Spiel ist anders entwickelt. Ich denke genau das macht den Reiz aus, sich in so Zeug hineinzudenken.
Fakt ist, dass so eine Übersetzung bei einem umfangreicheren, komplexeren Spiel (mit mehr Text) nicht so einfach möglich gewesen wäre. Im Endeffekt hatten wir Glück, dass sich bereits jemand anderes in die Strukturen hineingedacht und entsprechende Werkzeuge vorbereitet hat. Trotzdem kann ich nun mit Stolz behaupten, dass ich auch ein Spiel übersetzt habe. Ist das nicht cool? 🙂
Fun Fact: Ich bin richtig froh, dass wir auf der englischen Übersetzung aufsetzen konnten. Stellt euch mal vor, ich müsste erst noch japanisch lernen – dann wäre der Beitrag vermutlich bis heute nicht veröffentlicht worden! 😛 Das war auch so schon noch genug Arbeit wie ich finde…
Es war ein langer Weg, aber wir sind endlich an unserem Ziel angekommen:
Es würde mich freuen, wenn der ein oder andere von euch das Spiel samt deutscher Übersetzung spielt. Ich habe es mittlerweile geschafft, dass der Patch auf „Romhacking.net“ – einer recht bekannten Seite für Patches, Übersetzungen, etc. aufgenommen wird. Dort kann man den Übersetzungspatch auch herunterladen. Sofern man die passende ROM-Datei mit dem Basis-Spiel hat, lässt sich der Patch auch ganz bequem per Online-Patcher anwenden.
Fun Fact: Für alle, die das Spiel als zu schwer empfinden und sich an der knapp bemessenen „Par Zeit“ abkämpfen, habe ich eine weitere Version des Patches erstellt, welche den Patch zur Reduzierung der Zeitstrafe (siehe Artikel 333) in die deutsche Übersetzung inkludiert. Viel Spaß beim Knobeln! 🙂
Ich bin durch. Was für ein irres Projekt! Und dabei fing in Artikel 333 doch alles so harmlos an. Wer sich erinnert: Ich hatte mich am englischsprachigen Namen eines gewissen Starterpokemons in Schildkrötenform gestört. Tja, so schließt sich der Kreis. Endlich heißt „Schiggy“ auch wirklich „Schiggy“ und ich kann beruhigt Feierabend machen! 😀
Apropos Artikel 333 – einen letzten „Fun Fact“, der ebenfalls den Bogen zum Einstieg in das Thema spannt und selbiges gleichzeitig perfekt abschließt, hätte ich noch für euch. Ich hatte euch doch berichtet, dass die Videospielzeitschrift „Retro Gamer“ in der Ausgabe 02/2024 einen Artikel zu Pokémon Picross veröffentlicht hat. Ich war so frei und habe der Redaktion einen kurzen Leserbrief samt Beschreibung meines Deutschpatches zukommen lassen. Und was soll man sagen? In der Ausgabe 01/2025…
…haben sie dann tatsächlich meinen Brief samt Verweis auf den Download abgedruckt! 🙂
Ist das nicht cool? Über den Kommentar der Redaktion habe ich mich besonders gefreut. Die Tatsache, dass direkt darunter ein Leserbrief mit dem wunderbar zweideutigen Titel „Auf die Länge kommt es an“ abgedruckt ist, macht die Sache perfekt! 😀
In diesem Sinne – bis die Tage, ciao!