[PORADNIK] Pointery w grach GBA

Awatar użytkownika
ikskoks
Nadzieja polskiego romhackingu
Posty: 797
Rejestracja: 19 wrz 2011, o 11:10
Grupa: LocMakers
Kontakt:

[PORADNIK] Pointery w grach GBA

Postautor: ikskoks » 11 sty 2013, o 23:39

Artykuł: Pointery w grach na GBA (by FenX)
Autor: FenX
Poprawki: mit_mis, mziab
Korekta: bemberg


I. Obliczanie pointerów
Obliczanie pointerów na GBA jest stosunkowo proste, bo w tych standardowych przypadkach nie musimy wykonywać żadnych operacji arytmetycznych.
Przyjmijmy, że szukamy wskaźnika do jakiegoś tekstu znajdującego się pod offsetem 123456. Robimy to tak:

1. Dzielimy offset na pojedyncze bajty - 12 34 56
2. Zamieniamy je kolejnością - 563412.

Jak możemy zauważyć, tylko pierwszy i ostatni bajt zmieniły swoje położenie - zamieniły się miejscami

OK, ale co zrobić jeżeli offset posiada nieparzystą liczbę znaków, np. 12345? Dodajemy na początku offsetu cyfrę 0, a dalej postępujemy wg. instrukcji opisanych wyżej (012345 -> 452301).

Właśnie w takiej formie w grach na GBA najczęściej występują pointery, ale czasami możemy spotkać bardziej skomplikowane przypadki, np. gdy od offsetu tekstu musimy odjąć offset początku blok i dopiero z tego liczymy wskaźnik.


II. Występowanie pointerów w ROMie.

Pointery mogą występować w tzw. tablicy (tzn. wszystkie w jednym miejscu) lub mogą być rozrzucone po całym ROMie.
Jak znaleźć taką tablicę? Otóż... Dla przykładu:

Mamy w menu głównym gry trzy pozycje:

Start Game (offset: B42CB1)
Options (offset: B42CB4)
Save: (offset: B42CB7)
Quit: (offset: B42CBA)

Więc żeby znaleźć tablicę pointerów szukamy ciągu hexów:

B1**B4**B7**BA
(Czyli końcówki naszych offsetów albo inaczej początki naszych pointerów)
tablicę pointerów, ale tablica może występowac również w formach:
- Jednobajtowej (w naszym przykładzie: B1B4B7BA)
- Trzybajtowej (****B1****B4****B7****BA)
- lub w odwrotnej kolejności: (BA**B7**B4**B1)

Wróć do „Poradniki”



Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości