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:
Quote3020312032203320
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:
Quote94**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