Da das Thema Final Fantasy 2 im Forum aufkam dachte ich mir ich schreibe ein kleines Tutorial wie man Daten in eine andere Rombank schieben und von dort laden kann, besser gesagt einige Sachen manipuliert, was hilfreich ist wenn zum Beispiel nach Text gleich andere Daten kommen, weil wir mit unserer Sprache meist mehr Platz brauchen wie die Japaner/Amerikaner.
Unser Testobjekt:
Final Fantasy II (USA) <- "NoIntro" Dump, ohne Header
Schwierigkeit:
Sehr einfach
Was wir verschieben:
Die Rombank in der der erste Text ist (Zur Erinnerung: "Crew: Captain Cecil, we are about to arrive!.......")
Was wir brauchen:
Die ROM "Final Fantasy II (USA)", wo man sie bekommt: Selbst rausfinden
"Geiger's Snes9x Debugger" http://www.romhacking.net sollte das haben.
"Lunar Adress und Lunar Expand", gibt's hier
"SnesEdit", fragt mich nicht woher, ich benutze eine uralte Version die SinaP mir geschrieben hat.
Etwas Zeit.
Was ich möchte:
Das es jeder versteht, das heißt kein Fachchinesisch, sondern in eigenen Worten erklärt.
Also, hier ist unser Text, ich gehe mal davon aus das jeder weiß wie man ihn findet und eine TBL erstellt!
Unser Text beginnt an Offset: 0x80690, damit kann der Debugger aber nichts anfangen, wir wandeln diese Adresse in eine "verwertbare" Rombank Adresse um, dazu benutzen wir "Lunar Adress", einfach die ROM laden und das Programm sollte den korrekten ROM Typ von alleine erkennen, unsere Adresse in die linke Textbox eingeben und in der rechten sollte unsere neue Adresse erscheinen -> $10:8690
Jetzt starten wir den Snes9x Debugger, laden die ROM, die "Debug Console" sollte jetzt erscheinen: Was wir nun machen ist einen "Breakpoint" setzen, das heißt wir füttern den Debugger mit einer Adresse, sobald diese Adresse von IRGENDWO "angesprochen" wird macht der Emulator einen "Break", das heißt er friert das Spiel ein, pausiert es sozusagen.
Also: Auf "Breakpoints" klicken, in die erste Textbox unsere Adresse eingeben ($10:8690), Häkchen bei "Exec" und "Read" machen, das heißt wenn von unserer Adresse gelesen oder etwas ausgeführt wird, wird das Programm angehalten.
"Write" benötigen wir wenn wir etwas suchen was in den RAM geschrieben wird, dazu aber etwas in einem anderen Tutorial.
Jezt auf "Run" klicken und spielen, normalerweise sollte das Spiel NACH der Flugsequenz und BEVOR sich die Texbox öffnet, anhalten:
Und siehe da: "$00/B2D0 BF 00 84 10 LDA $108400,x[$10:8690] A:0001 X:0290 Y:0000" ist das was für uns interessant ist.
Zerlegen wir den ganzen Kram mal (Nur Sachen die wir brauchen):
$00/B2D0<- Unsere Adresse in der ROM von der der Aufruf kam, wenn wir diese Adresse in eine PC-Adresse umwandeln erhalten wir: 0x32D0
BF 00 84 10 <- Wie diese Funktion als Zahlen in der ROM aussieht
LDA $108400,x[$10:8690] <- Was diese Funktion bewirkt
X:0290 <- Uhm *kopf-kratz*
Auf Deutsch umschrieben heißt das: LaDe $108400 UND X in den Akkumulator, macht $10:8690 als ROM Adresse,
wandeln wir die ROM Adresse $10:8690" um, erhalten wir die PC Adresse 0x80690
0x80400 + X = 0x80690
Damit haben wir unsere Routine die den Text in dieser Rombank lädt gefunden, in der ROM an Adresse: 0x32D0
Lasst uns jetzt die ROM von 8Mbit auf 12Mbit mit "Lunar Expand" erweitern, wir brauchen ja schließlich Platz
Unsere 4 neuen Rombanks beginnen bei der Adresse 0x100000, die ROM Adresse ist "$20:8000"
Ihr solltet als erstes eure Daten die ihr wollt dorthin verschieben, das heißt den Textblock von 0x80400 - 0x87FFF (31744 Bytes insgesamt), nach 0x100000
Jetzt müssen wir dem Spiel sagen von wo es den neuen Text laden soll, erinnert ihr euch? Adresse 0x32D0 in der ROM
Ändern wir doch mal "BF 00 84 10" zu "BF 00 80 20" ($20:8000 = 0x100000), editieren den Satz "Crew: Captain Cecil, we....... blah, blah" zu irgendetwas anderem.
Nun schauen uns das Spiel erneut im Emulator an.
Scheint als wäre dieser kleine Hack erfolgreich gewesen, das Spiel lädt jetzt den Text von unserer neuen Rombank, als kleine Aufgabe könntet ihr ja versuchen die Pointer von diesem Textblock auch zu verschieben.
Falls es Fragen gibt, etwas nicht verstanden wurde, oder etwas ausführlicher erklärt werden soll editiere ich den Beitrag natürlich gerne: Viel Spa beim ausprobieren