YI IslandEdit
aus RHWiki, der freien Romhacking-Enzyklopädie
Von Hackern und Glück. In diesem Tutorial wird gezeigt, wie leicht es manchmal sein kann Kleinigkeiten in ROMs zu ändern, ohne detailierte Erfahrungen haben zu müssen, wie eine ROM aufgebaut ist und wie sie funktioniert. Hauptsächlich ist es wichtig ein wenig logisch nachdenken zu müssen ;)
| Inhaltsverzeichnis |
Voraussetzungen
- Die Yoshi's Island ROM (Eigentlich egal welche Version - im Tutorial wird jedoch die Multilinguale Version benutzt)
- VisualBoyAdvance (Normale Version mit Debug-Tools)
Das Ziel
Das Ziel dieses Tutorials soll es sein, die Objekte auf der Startinsel zu bearbeiten. So soll es möglich sein, die Berge durch Bäume zu ersetzen oder auch einfach nur die Berge zu verschieben.
Finden der Objektinformationen
Zunächst wird die ROM gestartet und man klickt sooft auf "Weiter", bis die sich drehende Insel auf dem Bildschirm erscheint. Sobald diese Stelle erreicht wurde, wird der Memory Viewer über das Tools-Menü geöffnet.
Gesucht wird im Speicher eine Liste von Objekten. Vermutlich wird zu jedem Objekt die Position auf der Karte gespeichert und eine ObjektID. Außerdem kann man davon ausgehen, dass sich sicherlich ständig Werte im Bezug auf jedes Objekt ändern. Das sparrt immerhin rechenarbeit. Somit werden wir im Speicher nun nach einer Liste suche, deren Einträge mindestens 4 Byte groß sind. Mit Sicherheit wird jeder Eintrag aber noch mehr Daten haben.
Wie findet man aber nun heraus, ob die Daten die man im Memory-Viewer sieht wirklich die richtigen sind? Nun, sicherlich könnte man durch einige Hackerei und versuchen das rausfinden, aber das würde zu lange dauern. Es gibt eine viel schnellere Methode, auch wenn sie sicherlicht nicht die schönste ist. Wir überschreiben einfach interessant-aussehende Blöcke mit FFs (z.B.). Mit etwas Glück ändert sich dadurch etwas auf der Karte. Mit etwas Pech stürzt aber auch die ROM ab. Aber dann starten wir diese einfach mit STRG+R neu und versuchen es an einer anderen Stelle weiter.
Am besten fängt man an Speicherstellen an zu suchen, die dafür auch wirklich in Frage kommen. Also kommen nur RAMs in Frage. Testweise (und um es zu verkürzen) fang einfach bei dem IRAM an.
Irgendwann wird man auf den Block stoßen, der scheinbar an 0x03003080 mit einer 0x01 anzufangen scheint. Jedoch fängt er in Wirklichkeit weiter oben an und zwar an Offset 0x03002F80 - Dort lässt sich jedoch nichts bearbeiten, da es sich dabei um Animationen handelt (um das mal Vorweg zu nehmen).
Der Aufbau der Blöcke
Wie vermutet scheint es eine ID des Objektes zu geben und 3 weitere Bytes. Durch ein wenig rumprobieren, findet man schnell heraus, dass sich die Position eines Objektes dadurch verändert, wenn man die Werte bearbeitet.
Also die Folge 01 F7 F6 00 bedeutet nichts anderes als: "Objekt 01 an Position -8, -9, 0", da jeder der letzten 3 Byte für eine Position steht. Diese 4 Bytes sind also sehr wichtig.
Suchen der Daten in der ROM
Mit jedem beliebigen HEX Editor kann die ROM geöffnet werden. Auf gut Glück suchen wir nun einfach mal nach dem einen Objekt, also die Bytes 01 F7 F6 00. Tatsächlich wird eine Liste gefunden, die der aus dem Speicher sehr ähnlich sieht. Erst das Objekt 01 und dann die Objekte 02, 03, 03, 07, usw. jeweils mit deren Position.
Diese Liste, bei mir an Offset 0x001A36F0 (bzw. eigentlich 0x001A36B0), kann nun nach belieben bearbeitet werden.
Fazit
An diesem Beispiel lässt sich erkennen, dass man durch einfaches herumprobieren oftmals schon kleine oder größere Dinge finden kann, die erst schwer zu finden scheinen.

