Tutorial: Grundlagen des Hex- Editierens mit Translhextion

Transcrição

Tutorial: Grundlagen des Hex- Editierens mit Translhextion
Tutorial: Grundlagen des HexEditierens mit Translhextion
Von WhiteYoshiEgg
Einführung in Hex
Zuerst mal: Wer nicht weiß, worum es hier geht, was Super Mario World ist etc., der sollte die Finger
davon lassen. Ich hab keine Lust, das hier nochmal zu erklären.
Also… Super Mario World ist in ASM geschrieben. Genauer gesagt, 65c816 ASM, der
Programmiersprache für die Konsole SNES. Wenn man die SMW-ROM mit einem speziellen
Programm öffnet, kann man den gesamten Programmiercode sehen. Allerdings sieht man da nicht
die eigentlichen Befehle, sondern nur Nummern und Buchstaben... Das sind Hex-Zahlen.
Dann schweife ich mal wieder ein wenig ab… So ziemlich alles in Super Mario World wird nicht im
Zehnersystem, das wir haben, gezählt, sondern im Hexadezimalsystem (kurz Hex). Im Zehnersystem
ist die erste zweistellige Zahl die 10, in Hex ist es die 16, die dort auch 10 heißt. Verwirrend? Ja, mag
sein. Aber lies erst mal weiter. Es wird also folgendermaßen gezählt: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D,
E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F, 20 usw. Die 10 in Hex entspricht der
16 im Zehnersystem. Da in Hex erst die 16 die erste zweistellige Zahl ist, behilft man sich dazwischen
eben mit den Buchstaben A bis F. 1FF in Hex bedeutet also 512. Ob du „1FF“ jetzt „Einseffeff“ oder
„Hunderteffundeffzig“ nennst, bleibt dir überlassen. Willst du schnell von Hex ins Zehnersystem
(oder umgekehrt) umrechnen, öffne den Windows-Rechner (Start  Programme  Zubehör 
Rechner) und klicke dort auf Ansicht  Wissenschaftlich, falls das nicht schon so eingestellt ist. Klicke
dann auf
und gib die Hex-Zahl ein. Um es umzurechnen, klicke wieder auf
umgekehrt zu machen… machst du es eben genau umgekehrt.
. Um es
Gut, jetzt weißt du, was Hex ist! Und dieses „spezielle Programm“, das ich erwähnt habe, nennt man
Hex-Editor. Es zeigt den Code von SMW als Hex-Zahlen an, jeder Befehl entspricht einer zweistelligen
Zahl. Der Hex-Editor kann den Code aber nicht nur anzeigen, sondern auch verändern, und das geht
eigentlich ziemlich einfach.
Einführung in Translhextion
Als erstes solltest du dir Translhextion herunterladen – Das bekommst du zum Beispiel auf
http://www.smwcentral.net/download.php?id=36&type=tools . Wenn du es öffnest, sieht es etwa
so aus:
Da steht erstmal noch nicht viel… Klar, wir haben ja auch noch keine Datei geöffnet. Dazu klickst du
einfach auf
und wählst deine SMW-ROM aus (.smc-Datei).
Jetzt sieht es schon ganz anders aus:
Okay, eine 40 und ein paar Nullen.
Soll das jetzt schon der Code sein?
Nein, das ist nur der „Header“.
Der besteht aus 512 Paaren von
Nullen und darf nicht verändert
werden, sonst läuft das Spiel nicht
mehr. Wenn du etwas weiter
runterscrollst, siehst du weitaus
komplexere Zahlen:
Hieran kann man das Ganze auch schön erklären.
1
2
3
4
Das Menü. Sollte klar sein.
Die Offset-Liste. Jedes Zahlenpaar steht an einer ganz bestimmten Stelle und hat somit
seine eigene „Adresse“, auch „Offset“ genannt. Die Zahl in dieser Leiste gibt an, welche
Adresse die erste Zahl in der Reihe hat. Schauen wir uns als Beispiel mal die zweite Zeile
im Hauptfeld an: Dort stehen B0 03 CA A5 usw. In der Offset-Liste steht daneben
000204CC (Die Nullen am Anfang kannst du weglassen, also 204CC). Das heißt also, das
„B0“ am Anfang der Zeile im Hauptfeld steht an Offset 204CC. Die Zahl daneben, in
diesem Fall also 03, steht ein Offset weiter, also 204DD. CA steht also an Offset 204DE,
A5 an Offset 204DF usw.
Das „Hauptfeld“. Hier steht der eigentliche Code von SMW, dargestellt in Hex-Zahlen.
Jedes Zahlenpaar wird „Byte“ genannt. Wie du eben schon gesehen hast, hat jedes Byte
ein eigenes Offset. Die Farben dienen nur der Übersichtlichkeit und haben nichts zu
bedeuten.
Translhextion versucht, die Bytes in Text zu übersetzen. Bytes stehen halt nicht nur für
ASM-Befehle, sondern auch für Buchstaben und andere Zeichen… Ist bei SMW aber
komplett nutzlos und muss nicht beachtet werden. Aber öffne mal Textdateien (.txt) mit
Translhextion, und es kommt etwas Sinnvolles heraus!
Code verändern
Jetzt denkst du dir wahrscheinlich „Okay, ist ja alles schön und gut, aber wie finde ich heraus,
welches Byte ich wo verändern muss, damit das rauskommt, was ich will?“ Ganz einfach: Es gibt eine
Tabelle, auf der viele (noch längst nicht alle, aber viele) Bytes verzeichnet sind, und in der
beschrieben wird, wo sie stehen und wofür sie zuständig sind. Sie nennt sich „ROM Map“ (nicht zu
verwechseln mit RAM Map) und ist zu finden auf http://www.smwcentral.net/?p=map&type=rom .
Du siehst eine Menge Zeug in mehreren Spalten, aber für uns sind nur die erste und letzte Spalte
wichtig. In der ersten Spalte steht, an welchem Offset das Byte steht, und in der letzten, was es tut –
allerdings auf Englisch.
Wie gehen wir also vor? Ich zeige das mal an einem Beispiel. Nehmen wir an, du willst die Musik im
Intro-Level deines Hacks verändern (Das Level, in der die „Welcome! This is Dinosaur Land“-Nachricht
erscheint), zum Beispiel weil du das Level verändert hast und nun die Musik nicht mehr so richtig
passt. Angenommen, es soll die Geisterhaus-Musik sein. Du öffnest Level C5 in Lunar Magic, änderst
die Level-Musik… und was passiert? Nichts. Die Musik ist immer noch dieselbe.
Jetzt kommt Translhextion ins Spiel! Wenn du ein bestimmtes Byte veränderst, kannst du die Musik
im Intro-Level bestimmen. Wo das zu finden ist, sagt uns die ROM-Map. Da steht:
Die mittleren drei Spalten kannst du vergessen, die sind unwichtig. Wir wissen jetzt also, dass das
Byte an Offset 01924 für die Intro-Musik zuständig ist. Dahin gehen wir jetzt in Translhextion!
Klicke einfach auf „Offset  Jump To…“ oder drücke Strg + G. Dann öffnet sich dieses Fenster:
Da gibst du jetzt einfach das Offset
ein, zu dem du gehen willst. (Du
kannst es natürlich auch einfach von
Hand suchen, aber diese Methode
geht weitaus schneller.)
Das x, das vor dem Offset steht, ist
wichtig! Es muss immer mit
eingegeben werden, wenn du was in
SMW verändern willst, sonst gelangst du zu einem falschen Offset!
Wenn du zum richtigen Offset gesprungen bist, sieht das Ganze jetzt so aus:
Das Byte, um das es hier geht, blinkt. Wie du siehst, hat es normalerweise den Wert 13. Zu was
müssen wir diesen Wert jetzt ändern, damit wir die Geisterhaus-Musik bekommen? Dazu schlägst du
einfach in Lunar Magic nach. Klicke auf den Notenblock-Button in der Toolbar, und alle Songs
inklusive Nummern werden angezeigt:
Du siehst, dass die Nummer für den GeisterhausSong 07 ist. (Nummer 13 ist übrigens die IntroMusik… Schön, wenn alles so logisch ist!)
Also tippst du jetzt in Translhextion einfach 07 ein,
und das Byte verändert seinen Wert. Jetzt sieht es
so aus:
Die 13 ist jetzt eine 07. Die hellrote Farbe zeigt an, dass es gerade geändert wurde.
Jetzt brauchst du die Datei nur noch zu speichern. Öffne sie in ZSNES und probiere, ob es geht. Und
siehe da, die alte Musik ist verschwunden und die Geisterhaus-Musik ist da!
Tja, ein Hex-Editor kann eben alles verändern, nicht nur das, was Lunar Magic nicht kann. Theoretisch
kannst du sogar einen ganz neuen Code in Hex schreiben und dein eigenes SNES-Spiel daraus
machen… Aber das kann so gut wie keiner. Überlassen wir das lieber Nintendo. ;)
Wenn du noch Fragen oder Verbesserungsvorschläge zu diesem Tutorial hast, hier bin ich zu
erreichen:
„WhiteYoshiEgg“ auf www.smwcentral.net
„WYE“ auf smwhacking.foren-city.de (Ein deutschsprachiges SMW-Hacking-Forum! Komm doch auch
rein!)
E-Mail: [email protected]
Danke für Lesen… Und tschüs, schätze ich.