Zitat
Also mit Pointern und dem Syntax von Routinen aus Debuggern etc. tu ich mich noch richtig schwer. Oder besser gesagt, da tut sich noch gar nichts. Hab teilweise versucht mich damit mal auseinander zu setzen um es zu begreifen, immer mal wieder, aber ich kapier es einfach nicht. Also nicht mal im Ansatz. Zuletzt als ich Super Metroid übersetzt habe, das liegt ja wegen genau solchem ASM Stuff (so vermute ich, fürs 1. Menü mit Sprachwahl etc.) erstmal auf Eis. Pointer finden, verschieben, ändern etc., bisher nichts für mich. Es gab da bei mir noch keinen Aha-Effekt. Zelda 3 scheint "65c816" zu sein, ich hab die Tabelle mit allen Set und Syntax Möglichkeiten usw., aber das ist echt Hardcore für mich. Bin da überfordert, wenn ich mir das alles in Geigers Debugger, no$sns und so ansehe. Ist ja ein ganz anderes Level im Vergleich mit dem was ich bisher mache, da glüht mir das Fell aufm Kopf.
Also im Ansatz - Der "ITEM" wird in 2 Teile geladet (IT und EM). Fur jedes Teil braucht man 6 bytes. Deshalb hat original 12 Platze fur 2 Buchstaben. Aber wir brauchen den namen GEGENSTANDE. Dass sind ja 11 Buchstaben, und so brauchen wir 11x6= 66 Platze (bytes).
So brauchen wir mehr Platz. Deshalb werden wir auf 6E46C, wo die Code geladen wird, etwas anders machen. Dort gibt es diese 12 Platze (bytes), aber wir brauchen 66. Deshalb werden wir ein Sprung machen, von 6E46C nach freien Platz auf 120000.
Jetz brauchst du ein Kalkulatur fur Adressen, SNEStuff
http://www.romhacking.net/utilities/841/
Zuerst Lorom abclicken, und dan links (PC Address) 120000 schreiben. Und rechts wird dan 248000 kalkuliert (SNES Address). Das ist dan 24 80 00. Dass muss umgekehrt sein ins 00 80 24.
Der Sprung ist mit einem byte definiert, 22 (=JSL, jump to subrutine - long). Im original ist es aber A9= laden (LDA= load accumulator). Komplete Sprung sind dan 4 bytes: 22 00 80 24. Aber wir hatten 12 Platze. Alle anderen mussen auf NOP (no operation sein), also NOP= mache nichts. Total wird dan 22 00 80 24 EA EA EA EA EA EA EA EA sein.
Das kannst du ja kopieren und mit Hex editor rein pasten am 6E46C.
Jetz aber auf Adresse 120000 gehen. Hier werden wir neue Buchstaben schreiben. Ein Buchstabe ist 6 bytes.
Der erste byte wird immer A9 sein (laden).
Der zweite byte werden die Koordinaten sein (das Bild oben sehen). Also G ist 5 horizontal und 6 vertikal, also 56.
Der dritte byte wird immer 25 (globale gfx Bank fur Buchstaben).
Der vierte byte wird immer 8D (STA addr, store accumulator, absolute). Dass kanst du vergessen.
Der funfte byte ist 46 default. Das ist der Ort wo "IT" ist. Und dan immer +2. Also 48 wird 1 mal nach rechts un so weiter. Also im Hex (46, 48, 4A, 4C, 4E, 50, 52, 54, 56, usw). Gesamt gibt es 17 Platze im Menu von einem Rand nach anderen. (start ist am 44 ende am 66). Weil ja 66(hex)-44(hex)= 22(hex) ist, und 22(hex) ist 34(dec). Und dan :2 (weil ein Platz +2 ist) = 34:2= 17 Platze (obere Rahmen des Menus).
Das kanst du auch vergessen (nicht so wichtig). Nur 44 (ganz links) bis 66 merken (ganz rechts).
Der sechste byte wird immer 11 (global Gebiet, also wenn 66 bis auf FF kommt, wird dan nach 00 gehen, aber dieser byte auf 12 gehen).
G ist also= A9 56 25 8D 46 11.
Am 120000 kannst du das rein kopieren A9 56 25 8D 46 11 6B. Jetz testieren (Spiel laden), und du wirst den G im Menu sehen. Nun alle andered Buchstaben reingeben.
Zum Beispiel, ich habe meinen Namen geschrieben, und auch zentriert:
A9 5F 25 8D 4A 11, P
A9 64 25 8D 4C 11, U
A9 69 25 8D 4E 11, Z
A9 69 25 8D 50 11, Z
A9 5B 25 8D 52 11, L
A9 54 25 8D 54 11, E
A9 53 25 8D 58 11, D (8D 56 11 ist leer)
A9 64 25 8D 5A 11, U
A9 53 25 8D 5C 11, D
A9 54 25 8D 5E 11, E
6B
Gesamt Code fur meinen Namen (test rom)
A9 5F 25 8D 4A 11 A9 64 25 8D 4C 11 A9 69 25 8D 4E 11 A9 69 25 8D 50 11 A9 5B 25 8D 52 11 A9 54 25 8D 54 11 A9 53 25 8D 58 11 A9 64 25 8D 5A 11 A9 53 25 8D 5C 11 A9 54 25 8D 5E 11 6B
6B muss auf dem Ende sein sonst wird das Spiel ein "Infarkt" haben.