Romhacking [Mittel] - Grafik-Adressen lokalisieren und manipulieren

    • Official Post

    Dieses Tutorial wird erklären wie die Positionen von Grafiken lokalisiert und verändert werden können.
    Als Beispiel werde ich Metal Marines nutzen. Weiterhin brauchen wir ein VRAM Viewer bzw. einen Emulator(mit Debugger).
    Ich nutze in diesem Fall: VSNES und ZSNES. VSNES zeigt uns relativ einfach den VRAM bereits in den richtigen Einstellungen und wir können die Zeilen und Spaltenanzahl kontrollieren. Worauf ich aber später erst eingehe. Der VRAM sind die Grafiken und Schriftarten die die Konsole in der Grafik-Arbeitsspeicher legt.


    Technisches Grundwissen:
    Bildgrafiken werden nicht anders wie Textgrafiken geladen. Das heißt: Jede Grafik hat ihren eigenen HEX-Wert. Ihre eigene Adresse sozusagen. Zu diesen HEX-Wert kommt noch
    ein Byte an Palleten-information dazu. Mehrere Grafiken hintereinander mit der selben Palette, können hierbei aber auch den Paletten Wert weglassen. Dieser wird dann am Anfang oder Ende stehen. Zumindest wenn der Programmierer diese Funktion genutzt hat.


    Ein kleines Beispiel dazu:



    Ein Sprite hat die Maße 8 x 8 Pixel.
    Also haben wir 4 einzelne Sprites.
    Nehmen wir an der erste Sprite hat im ROM den Wert 30 ; Der Zweite 31 ; und der Dritte 32 ; dazu der Vierte 33.
    Weiterhin fantasieren wir uns den Farbwert 20 dazu.
    Das würde also im Hexeditor so aussehen:


    Quote

    3020312032203320


    Das Spiel macht also nichts anderes als folgendes: Es liest Zeilenweise die Grafiken sammt Farbpalleten-Wert dazu.
    Sozusagen ist der HUD im Spiel nix weiteres als im ROM eine klare Linie von Adressen mit Werten für Farbe, in einer einfachen zeilenbasierenden Reihenfolge. Bei der Suche haben wir nur ein Problem: wir kennen in der Regel den Palettenwert nicht!


    Den Wert des Tiles kann man ausrechnen:
    Hierzu kommt unser VRAM-Viewer, VSNES zum Einsatz. Wir gehen mit ZSNES an den Punkt im Spiel wo ein HUD zusehen ist und machen einen Spielstand.
    Diesen Spielstand laden wir jetzt in VSNES und gehen dort unter RAM Viewer.


    Unser Screenshot


    Unserer VRAM mit 4-bit


    Unserer VRAM mit 2-bit


    Wichtig
    Eure Grafiken müssen wenn ihr sie gefunden habt, in einer 16 Reihe pro Zeile ordnen.
    Sonst bekommt ihr keine Hexwerte heraus. Das Ganze sieht dann so aus:


    Nun schnappt euch ein Zeichenprogramm eurer Wahl und macht eine Übersicht dazu um nicht mühsam mit der Hand abzählen zu müssen.
    Das ganze sieht dann aus wie Schiffeversenken. Vergesst nicht dass man hier bei 0 anfängt mit Zählen.
    So sieht es dann übersichtlich aus:

    Der Wert nach unten ist der Erste, der Wert nach rechts der Zweite bei der Suche.



    Ich hoffe bis hierher ist soweit Alles klar.


    Nun zum Eingemachten. Wir wissen nun welchen Hexwert das Bild hat, ohne Palettenwert. Das stört und aber nicht. Wir können SNESEDIT einen HEX-Wert mit Relativen Zeichen machen. Ein relatives Zeichen ist das * (Das Mal Zeichen bei der nummerischen Tastatur).
    Abgelesen von unserer Übersicht suchen wir also nach folgendem:


    Quote

    94**95**96**97**98**


    Das entspricht diesen Tiles:


    Nach ein bisschen Suchen, müsstet ihr das hier finden:



    Wir haben jetzt die Grafikadressen gefunden, oder vielmehr die "Pointer" dafür.
    Dazu sogar die Farbwerte bzw. für die Spiegelung. Wir können jetzt also ohne Probleme andere Zeichen aufrufen lassen.
    Dazu ändern wir einfach die Hexwerte(Taste X bei SNESEDIT) auf das gewünschte Tile und das Spiel wird es ohne Ärger reinladen. Hierbei ist unsere
    angefertigte Übersicht hilfreich.


    Ich hoffe ich konnte euch Wissen vermitteln. Anregungen und Wünsche oder Fragen bitte hier posten.
    Anbei möchte ich RED-Scorpion für seine Hilfe danken mit der ich dieses Wissen selber lernen konnte.


    Hier eine vorgearbeitete Grafik zum Alphabet einfügen(Gimp):
    http://black.bplaced.net/web/p…s/snesprojectsde/alph.xcf



    Eine aktuellere Version inkl. Bilder findet ihr in der Datenbank.
    http://www.snes-projects.de/fi…hp?page=Entry&entryID=370

  • "Der Zugang zu diesem Link wurde deaktiviert" meint Dropbox.
    Schade.


    Und den Screen von SNESEdit kann ich leider nicht richtig erkennen.
    Beschäftige mich gerade etwas mit dem Thema. :)


    Sorry übrigens für das rauskramen von so einem alten Thread.


    Gibt es eigentlich etwas gleichwertiges zu SNESEdit was man auch mit der Maus bedienen kann?

  • Also bei mir funktioniert die Maus eigentlich nur richtig im Tilemenü. Bei der Bedienung mit Tastatur funktioniert die ESC-Taste nicht. Wenn ich mal in die Hilfe schau, muss ich dann das Programm mit Taskmanager abschießen um wieder raus zu kommen (Win 8). Ansonsten ist es super. :)

  • Ach, Du brauchst Dich doch dafür nicht entschuldigen! Ist doch cool das Du überhaupt ein Tutorial hier reinstellst.


    Dachte nur an dem Screenshot sieht man was Besonderes um zu erkennen das man "richtig" ist. Prinzipiell müsste es ja in jedem Tileset eines Spiels die
    Kombination von Tiles geben. Was in dem einen Tileset "Price" ergibt, ist im anderen Tileset vielleicht eine Wiese oder sowas. Und Zufällig könnte diese
    Hexkombination ja auch noch im ROM vorkommen. Weiss nicht ob ich da etwas falsch verstehe oder einen Denkfehler habe. :)

    • Official Post

    Die Tiles werden von Rom in den RAM Speicher geschrieben. Da ich durch die Analyse in vsnes wusste wie die Reihenfolge im Spiel war konnte ich auch genau diese finden. Wenn man nur auf einander folgende hexwerte erhält sieht das schon wesentlich schwieriger aus. Dann kann man aber immernoch probieren oder schauen ob die tile Farbwerte Sinn ergeben.

  • Also bei mir funktioniert die Maus eigentlich nur richtig im Tilemenü. Bei der Bedienung mit Tastatur funktioniert die ESC-Taste nicht. Wenn ich mal in die Hilfe schau, muss ich dann das Programm mit Taskmanager abschießen um wieder raus zu kommen (Win 8). Ansonsten ist es super. :)


    Wenn Du das etwas konkreter schreiben könntest kann Ich nachsehen wo es klemmt.
    Bei mir klappt es natürlich ohne Probleme weil Ich die neuste Version benutze ... :D

  • Die Tiles werden von Rom in den RAM Speicher geschrieben. Da ich durch die Analyse in vsnes wusste wie die Reihenfolge im Spiel war konnte ich auch genau diese finden. Wenn man nur auf einander folgende hexwerte erhält sieht das schon wesentlich schwieriger aus. Dann kann man aber immernoch probieren oder schauen ob die tile Farbwerte Sinn ergeben.


    Wird wohl dann probieren werden. Danke für die freundliche Hilfe! :thumbup:
    Ich mache schon langsam Fortschritte. Hab in den letzten Tagen einige Experimente gemacht.
    Ich will aber nichts übersetzen. Ich möchte Grafiken hacken. Genauer einen Titelbildschirm.
    Da ist das Tileset dazu ein einziges Puzzelspiel. Dachte es wär einfacher da einfach die Pointer
    umzuschreiben. Man ist ja "bequem". :smoking: