JavaScript Menus and DHTML Menus Powered by Milonic Cyndeline Translations

Untitled Document

Räkna med pointers

För att räkna ut/hitta/ändra pointers behöver man veta ett par saker:

  1. Var texten som pointern pekar på ligger
  2. Vilket format som spelet ligger på (Nes, Snes, Playstation etc.)
  3. Adressen som man vill peka på (om en sådan finns)
  4. Ifall den rom man arbetar med har en "header".

En Header är en viss mängd kod som finns i början av varje rom, och som gör att den fungerar i emulatorer. Headern på Snes roms är 200kb, medan den är 10kb till Nes. På Snes roms gör headern att alla adresser " förskjuts" med 200kb, eftersom programmerarna inte har räknat med detta extra utrymme. Detta är något som vi kommer att ta i aktning när vi söker efter pointers.

För enkelhetens skull, använder vi samma dialog som tidigare:

Final Fantasy 3 använder en slags textkomprimering som gör det svårt att söka på enskilda ord. Men dialogen börjar på D0200 (ser du hur headern på 200kb har "skjutit" fram dialogens offset?), så tryck på Ctrl+G, skriv D0200 och tryck på "Done".

Tablefilen behövdes inte i det förra kapitlet, men ladda den nu om du inte redan gjort det.

Leta sedan nedåt tills du hittar texten. Dialogen börjar på "V" i Vicks, så placera markören på "V".

Nu när vi vet att det finns en pointer som pekar hit (eftersom stycket börjar här, så pekar pointern förmodligen även just hit. Men det kan finnas undantag.), måste vi hitta den innan vi kan göra några ändringar. För att kalkylera en Snes-pointer, gör du så här:

  1. Läs av vilket offset som pointern pekar på. I det här fallet är det "V" i Vicks, som ligger på D0259 (kolla längst ned i Windhex).
  2. Ta ut de fyra sista siffrorna i ditt offset (0259)
  3. Dra bort headern på 200kb (0259 - 200 = 0059)
  4. Bryt isär talet (00 59)
  5. Och skifta plats (59 00)
  6. 59 00 är din pointer, vilket du redan vet ifall du gått igenom föregående kapitel.

Nu vet vi alltså att någonstans i vår rom, finns en pointer som lyder "5900", och att den pekar på 0259 i dialogen. Då måste vi bara hitta den först.

Gå därför till början av din rom, och tryck på Ctrl+H för att söka efter hexdecimaler. Sök på "5900". Tryck på F3 på tangentbordet för att söka igen, och kolla hur många träffar du får.

Som du säkert märker, så är sökträffarna alldeles för många för att det ska vara möjligt att hitta vår pointer. Kombinationen av 59 och 00 är ju ganska vanlig, även om den inte alltid är just en pointer. Dessvärre kan vi inte ta reda på mer för att minska antalet potentiella träffar, då 5900 är så pass exakt som det kan bli. Det vi däremot kan använda oss av, är följande:

I spel, ligger alla pointers (oftast) samlade intill varandra, i ett sk. Pointer Table. Alla pointers är alltså skrivna på rad efter varandra, med de lägsta först. Gå därför tillbaks till texten igen (D0259).

Nästa pointer pekar på Vicks nästa dialog, "Vicks: And this woman, this...". Sätt därför markören på "V" i nästa "Vicks", och läs av adressen (D02A0 om du gjort rätt hittils).

  1. Ta ut 02A0
  2. Dra bort 200 (00A0)
  3. Bryt isär (00 A0)
  4. och skifta plats (A0 00)

A000 är pointern till stycket efter vår första dialog, och denna pointer torde därför även ligga efter vår första pointer.

Gå tillbaks till början av din rom, och gör en till hex-sökning (Ctrl+H). Men den här gången söker du på två pointers samtidigt, dvs. 5900A000 (59 00 A0 00).

OBS! Ifall du fortfarande använder din rom från förra kapitlet, se till så att du ändrat tillbaks alla tidigare ändringar, annars kommer du inte att hitta något!

Testa sedan att ändra 59 till 5A, och spela igen för att se ifall du verkligen hittat din pointer. Om du gjort rätt, borde det stå "ICKS" i spelet.

Och på det viset kan man hitta pointers i Snes-spel. För att läsa om hur man räknar ut dem till andra format, finns ett enskilt kapitel för detta.

Översättare sökes:

Resurser