Romhacking : Sprites editieren

Starlord

Ritter
Mitglied seit
19.10.2008
Beiträge
34
Ich bin nämlich auch gerade dabei, einige Rom-modifikationen vorzunehmen.
Vor allem bei Projekten die angelaufen sind, aber nicht beendet wurden. :)
Im Augenblick versuche ich ein paar Grafiken (Graphicglitches und Sprites) abzuändern die in einem Titelscreen vorkommen.

Ich wollte jetzt wissen, wie ich das am geschicktesten anstelle.
Ich habe versucht mich mit dem Tile Editor "Tile Layer Pro" durch ein Rom zu kämpfen, hab die entsprechenden Sprites im Title Screen aber nicht gefunden.
Ich bin dann mit vsnes und eine znes state vorgegangen und hab herausgefunden aus wieviel Sprites und wie groß die Sprites (16x16) im Titelscreen sind.
Im Tile Layer Pro hab ich nur 8x8 Tiles/Sprites, sind die 16x16 Sprites dort nochmal aufgesplitet?

Ich hoffe jemand, kann mir etwas weiterhelfen. :)
 
Zuletzt bearbeitet von einem Moderator:

Masterflow

Newbie
Teammitglied
SDC-Team
Mitglied seit
27.08.2001
Beiträge
2.457
Weisst du schon in welchem Format die Grafiken gespeichert sind? Oder hast du schon Adressen wo sie liegen?
Oftmals sind Grafiken die man nicht direkt im TLP angezeigt bekommt komprimiert, dann wird es ein wenig komplizierter.

Sollte das der Fall sein müssteste herausfinden ob die Kompression bereits bekannt ist oder mühsam mit Hilfe von Debuggern die Routine finden und nachbauen...

Überhaupt wären ein paar mehr Informationen recht nützlich... Das fängt damit an das du sagen könntest um welches Spiel es sich handelt.
 
OP
OP
Starlord

Starlord

Ritter
Mitglied seit
19.10.2008
Beiträge
34
Naja ich hab mich jetzt durch einen Tileeditor gekämpft.
(ich kann jeden Tile Molester empfehlen, TLP wird mit der Zeit echt mühsam)
Hab bereits den Speicherbereich eingeschränkt wo die Sprites vorhanden sind.

War eigentlich nicht schwer. Da ich eine japanische Version zum Vergleich hergezogen habe.
Die japanische Version hatte leicht andere Sprites als die US Version.
Hab somit Adresse für Adresse kopiert und geschaut ab wann sich der entsprechende Frame bzw der Sprite ändert.

Soweit ich weiß werden in SNES die Grafiken immer in Tiles gespeichert.
Nur bei komprimierten Daten kann es kompliziert werden. Bei meinem Glück waren es komprimierte Daten, desshalb auch die Schritt für Schritt Methode.
Werde jetzt den Speicherbereich der jap. Version peu a peu in die us. Version übernehmen, sodass die Checksum korrekt ist und es zu keinem Absturz des Roms kommt.

@Game
Es ist Bahamut Lagoon :)
Ich will den Titelscreen wieder in den Ursprung zurückeditieren und die Verfasser des Patches für die Übersetzung ins Englische in die Credits reintun.
Eventuell fange ich dann auch an das Game auf deutsch zu übersetzen.


@Master
Sorry für den unnötigen Thread. :)


Edit von Vash:
fertisch. :)

Ich lade die Roms mal im Download Bereich hoch.
Passt drauf auf, bisher sind es Unikate :p

Ich hab Zelda BS Map1 und Map2 dazugepackt.
Diese Version basiert auf eine "real Hardware" Version.
Sprich, man kann das Spiel über ein Modul und eine Konsole spielen.
Zusätzlich wurde noch Link hinzugefügt und das Triforce Symbol eingebaut.
Es fehlt noch ein Save File Menü und das "Week Objective" Menü muss abgeändert werden.

Bahamoot Lagoon wurde angepasst.
Sprich Titelscreen ist nun Original.
Außerdem wurde paar Bugs entfernt, die das Spiel zum Absturz brachten (nach dem abändern).
Auch die Checksum wird jetzt korrekt angezeigt.
 
Zuletzt bearbeitet:

Vash

the Evil
Teammitglied
SDC-Team
Mitglied seit
10.06.2004
Beiträge
1.887
Kennst du das hier:
?
 
OP
OP
Starlord

Starlord

Ritter
Mitglied seit
19.10.2008
Beiträge
34
Da ich jetzt noch einige Anpassungen vornehme.
Nochmal eine Frage.
Ist es einfacher den Pointer der auf die Grafik zeigt zu verändern (um so die Grafik anders dazustellen), oder ist es einfacher die kompremierten Daten zu suchen und diese abzuändern.
Den Pointer hätte ich über den Hexeditor gefunden.
Der ist 4 Byte groß aber die Möglichkeiten ihn zu verändern um so auf die richtige Grafik zu kommen schier gewaltig.
Die Grafik ansich muss irgendwo komprimiert sein und die müsste ich noch suchen.

Vash: Hat sich geklärt. War ein allgemeines Missverständnis. ^^


Edit Starlord:
So ich hab jetzt mal den Vram ausgelesen.
Ich weiß jetzt wo die Bilder ansich im Speicher sind.
Doch hab ich keine Ahnung wie ich sie im Rom (hex adresse) finde, da sie dort komprimiert vorliegen.
Zum vergleich hab ich ein Bild hochgeladen (links Rom rechts vram).
http://i44.tinypic.com/344qfl3.png
 
Zuletzt bearbeitet:

Masterflow

Newbie
Teammitglied
SDC-Team
Mitglied seit
27.08.2001
Beiträge
2.457
So ich hab jetzt mal den Vram ausgelesen.
Ich weiß jetzt wo die Bilder ansich im Speicher sind.
Doch hab ich keine Ahnung wie ich sie im Rom (hex adresse) finde, da sie dort komprimiert vorliegen.
Zum vergleich hab ich ein Bild hochgeladen (links Rom rechts vram).
http://i44.tinypic.com/344qfl3.png
Also ich kann dir nur sagen was ich nun machen würde:
Mit Geigers Snes9x Debugger kurz bevor die Grafik geladen wird nen Savestate machen. Logging einschalten. Nen Breakpoint setzen wenn auf die Adresse geschrieben wird bzw die Logs nach dieser Adresse durchsuchen. Um in den VRAM zu schreiben wird $2116 (VRAM port) genutzt.
Dann halt die Anweisungen zurück gehen bis man sieht aus welchem Bereich im ROM gelesen wird. (eventuell kleine ASM Kenntnisse notwendig)

Am besten setzt du dich erstmal mit dem Debugger auseinander falls du den noch nicht kennst.
 
Zuletzt bearbeitet:
OP
OP
Starlord

Starlord

Ritter
Mitglied seit
19.10.2008
Beiträge
34
Nutze gerade einige Tools und hab auch schon mit Geiger und vsnes gearbeitet. :)
ASM kenntnisse sind auch vorhanden.

Ich hab einen savestate kurz vor der Grafik geladen.
Mache beim Logging einen hacken für die CPU, da ich sound (APU, DSP und SA1) nicht brauche.

Jetzt ist die Frage, was sagt mir der Breakpoints.
Ich gebe $2116 ein und setzte den hacken auf write.
Dann stoppt sozusagen dass Rom wenn ein neuer wert in 2116 gestored wird, sprich zum VideoRam kommt.

Aber weiß ich dann genau welche Grafik geladen wird?
Und woher weiß ich dann die Hexposition im Rom?
Wie ändere ich dann die Grafik?
Mir geben soweit ich weiß die Logs, nur den Inhalt der Akkus (A, B beim SNES nur A) und Register (X,Y) wieder und wann was gestored oder geloaded wird.
Vielleicht stehe ich jetzt auch einfach auf der Leitung.


Danke schonmal für die Hilfe Masterflow
 
Zuletzt bearbeitet:

Masterflow

Newbie
Teammitglied
SDC-Team
Mitglied seit
27.08.2001
Beiträge
2.457
Nein der Log zeigt noch mehr an.

Code:
$C2/458C 8C 18 21    STY $2118  [$00:2118]   A:0001 X:0008 Y:0006 P:envmXdIzC
Diese Anweisung beispielsweise schreibt den Wert des Registers Y (mit Wert 6) in den VRAM.
Zudem gibts noch Infos über gesetzte Flags und Position sowie die Anweisung.

---

Da du ja die Adresse der Grafiken im VRAM kennst kannste gucken wo die erste Speicheradresse gesetzt wird. Sowas sieht zB so aus:

Code:
STA $002116[$00:2116]   A:5200 X:0000 Y:0000
Hier wird $5200 in das Register für die VRAM-Adresse geschrieben.
Das bedeutet für die Byteadresse (mal 2 Multiplizieren) $A400. Es würde also zunächst an Adresse $A400 im VRAM geschrieben.

Du kennst diese Adresse bereits, also durch 2 Teilen und suchen. ;)

Haste dies gefunden musst du dich zurückarbeiten bis die Dekomprimierungsroutine beginnt um diese zu verstehen oder
du versuchst die Stelle zu finden an der die Pointer der komprimierten Grafiken geladen werden.

Ich kann dir dieses Doc ans Herz legen, da steht alles wichtige drin.
SNES Graphics Information
 
Zuletzt bearbeitet:
OP
OP
Starlord

Starlord

Ritter
Mitglied seit
19.10.2008
Beiträge
34
Danke, Masterflow.
Genau sowas hab ich schon seit Tagen gesucht.
Werde mich daheim gleich ranmachen. :)

Nochmals vielen vielen Dank.
 
Oben