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.