[PORADNIK] Kurs Romhackingu - ErnBob

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

[PORADNIK] Kurs Romhackingu - ErnBob

Postautor: ikskoks » 11 sty 2013, o 19:54

Kurs tłumaczenia romów

Autor: ErnBob
Korekta: RPG & bemberg

Spis treści:
1. Intro
2. Co to jest Rom Hacking?
3. Od czego zacząć?
4. Co może się przydać?
5. Hmm, co to za dziwne liczby w tym HE?
6. Co to jest Tablica?
7. Pierwsze próby zmiany tekstu
8. Lubimy malować, prawda?
9. INSERT i DUMP
10. Wskaźniki, do czego mogą się przydać?
11. IPS
12. To dopiero początek...
13. Outro

Narzędzia:
1. HexEdytor - Hexecute
2. TileEdytor - TilEd 2002
3. Tablice - Tabular
4. Szukacz wartości - SearchR
5. IPS - ipsXP
6. Emulator - VisualBoyAdvance
7. Rom Harvest Moon 2 (U) na GBC - Szukaj

1. Intro
Sam uważam, że nie mam daru do tłumaczenia (w sensie piszę, lub coś mówię, a druga osoba próbuje to zrozumieć:) ) Teraz może się to okazać. Zapraszam do lektury!

2. Co to jest Rom Hacking?
Sama nazwa może kojarzyć się z szeroko pojętnym działem Hackerstwa. Może i coś w tym jest, ale nie do końca. Rom Hacker to osoba, która za pomocą specjalnych programów (Hex Edytorów, Tile Edytorów) zmienia zawartość romu.

3. Od czego zacząć?
Najlepiej od zaopatrzenia się w odpowiednie programy (wszystkie, jakie będą wykorzystane w kursie są na tej stronie w dziale Download). Ja osobiście używam Windowsa 2000 lub XP. Podane tu programy działają na systemach NT.
HexEdytor - bardzo prostym edytorem jest program Hexecute, w sam raz dla początkujących i jeszcze w polskiej wersji językowej. Jak ktoś jeszcze nie wie, 'HE' to program, który po przetworzeniu wartości podanych w tablicy, pokazuje zawartość naszej gry (tylko NT).
TileEdytor - TilEd 2002, będzie w sam raz. Ma dość dużo funkcji, ale i ładną szatę graficzną, dzięki czemu jest przejrzysty i nawet początkujący będzie wiedział gdzie kliknąć. Aha no i 'TE' służy do zmiany grafiki w romie, czyli tym programem zrobimy polskie czcionki w grze, no i o ile będzie taka możliwość i potrzeba to pozwolimy sobie na małe zmiany grafiki (zdarza się, że tekst zapisywany jest jako grafika).
Tablice - wystarczająco dobrym programem jest TaBuLar. Posłuży nam jako menadżer tablic. Jak już wcześniej wspomniałem Tablica to normalny plik tekstowy, który po załadowaniu do hexedytora, mówi mu jaka litera jest przyporządkowana danej wartości Hexowej (1 Bitowi).
Szukacz wartości - My takiego programu nie potrzebujemy. Nasz HexEdytor ma możliwość relatywnego szukania. Jak na początek wystarczy, ale nie zaszkodzi zaopatrzyć się w program SearchR.
IPS - ...a to już po zmianach grafiki i tłumaczeniu. IPS to po prostu patch do gry. Ja gorąco polecam program ipsXP, który całkowicie integruje się z naszym Windowsem. I w przeciwieństwie do nazwy ruszy na każdym systemie operacyjnym.

Nie mam Windowsa NT... Jest teraz tyle HexEdytorów. Hexecute można bez problemu zastąpić Translhextion'em. Jeżeli naprawdę nie umiemy się żadnym z nich posługiwać to zapraszam w imieniu Dream#Teamu na forum http://www.emudreams.pl
Wszystko w dziale Download!! (niestety nie uświadczymy już tam tego typu programów... ale zapraszamy do naszego downloadu, wszystkie pliki są sprawdzone i działają pod XP)

4. Co może się przydać?
Na pewno angielska wersja gry (cały kurs opiera się na Harvest Moon'ie 2 na GBC) i emulator, obsługujący GBC. Bez wątpliwości najlepszy z najlepszych to VBA w wersji 1.4 lub 1.5 jak kto woli. Czasami może przydać się znajomość języka obcego ;P a już naprawdę czasami, chociaż małe pojęcie o systemie szesnastkowym.

5. Hmm, co to za dziwne liczby w tym HE?
Spróbuje wam rozjaśnić w mózgownicach ;)

Otwórzmy naszego HexEdytora. Powiem tylko, że okienko robocze podzielone jest na trzy części. Po lewej są liczby, które pokazują nam naszą pozycję (jeżeli chcemy po zamknięciu HE powrócić do danego miejsca wybieramy Edycja --> Idź do... i wpisujemy nasz odczyt. Ta funkcja jest bardzo przydatna podczas Dumpu i Insertu). środkowa część to nic innego, jak wartości szesnastkowe gry. A po prawej to już, obrobione wartości hex, czyli to coś gdzie będą dialogi, itp. Powiem na jakiej zasadzie to działa. Czyli tak, wszystko zaczyna się w pliku tablicy, np, jeżeli znajduje się tam coś takiego, jak: 4A=a. Właśnie taka wartość 4A jest w środkowej części edytora, to po prawej powinna ukazać się naszym oczom literka a, jeżeli według tej tabeli 4B=b, to w tych miejscach będzie pojawiać się literka b. Podobnie jest z wszystkimi innymi znakami oraz cyframi, każda z nich ma swoją wartość HEX.

6. Co to jest Tablica?
Jak już mówiłem, tablica to po prostu plik tekstowy w formacie *.tbl. Spróbujemy coś takiego zrobić. Po pierwsze do naszego edytora ładujemy gierkę. Na razie domyślną tablicą programu jest ASCII, czyli taki system, którego na co dzień używamy w Windowsach. Wybieramy opcję 'Znajdź' i tutaj najlepiej wpisać wyraz, który występuje w dialogach, zaczyna się z małej litery a, b, c lub d i ma co najmniej 5 liter. Ja wybrałem słowo 'build', które występuje w pierwszych dialogach gry. Zmieniamy 'Rodzaj Szukania' na Relatywne, oraz w 'Opcjach Specjalnych wszystko wymazujemy, no i klikamy na 'Następny'. Jak widać podświetlił nam się jakiś ciąg Hexów, zaczynający się od 25. Prawidłowo 25 powinno równać się 'b', ale należy to sprawdzić. Otwieramy program TaBuLar. Naszym oczom ukazuje się miejsce na nową tablice. W miejsce 25 (w pionie 2 w poziomie 5) wpisujemy literkę 'b'. Znając alfabet, przed 'b' znajduje się literka 'a', więc w miejsce 24 wpisujemy tą literkę. Zostawiając podświetlone miejsce 24 z menu wybieramy Insert --> Lowercase English Alphabet.

Chcąc, nie chcąc to początek tablicy do gry HM2. Ale nie cieszmy się za długo, jeszcze trzeba sprawdzić, czy rzeczywiście 25=b... jak? Zapiszmy naszą tablicę wybierając format Thingy TBL, najlepiej w katalogu z grą. Teraz tam gdzie były te głupie, nic nie znaczące wartości, widać już coś co przypomina tekst, więc wartość była poprawna. Lecz to jeszcze nie wszystko. Brakuje dużych liter. Hmm, teraz to już łatwe zadanie. Początek dialogu: "If we don't" Jest duża litera, ale w HexEdytorze jej nie widać. Sprawdźmy jaką ma wartość zaznaczając kursor przed '.f' (ta kropka to przyszła litera 'I') Jeżeli wszystko poszło zgodnie z planem ta kropka jest przypisana wartości 12. Więc uzupełnijmy to w TaBuLarze. Już widać, że litera 'A' będzie miała wartość 0A, więc zaznaczmy tą wartość i kolejno Insert --> Capital English Alphabet. Litera 'I' pozostała na swoim miejscu? Mamy duże litery? Bardzo dobrze. I jeszcze brakuje znaków interpunkcyjnych i cyferek. Spróbujcie sami się pomęczyć :)

Aha, przyjrzyjmy się dokładnie. W dialogu widać coś takiego: 'we.don..do' jedna z kropek po 'don' to spacja (wartość 48), powinno być miejsce dla literki t (której nie widać) i apostrofa. Dlaczego? Tutaj znaki "'t" odpowiadają jednej wartości hexowej (wartość 52), to taka mała oszczędność miejsca (DTE). Te wiadomości powinny wystarczyć, aby można było zrobić pełną tablicę.
Jeszcze wyjaśnię co to jest 'znacznik łamiący linię'. To po prostu wartość hex, która mówi romowi, kiedy ma pisać w niższej linijce. Niezrozumiałe... hmm, dla osób znających HTML jest to odpowiednik funkcji BR :). W Harvest Moon2 ten Hex ma wartość F1. A w tabeli można przyjąć, że będzie to znak '\'

7. Pierwsze próby zmiany tekstu
"If we don't do something" wypadałoby zamienić na "Jeśli czegoś nie zrobimy". Więc ustawiamy kursor przed literą 'I' i piszemy 'Jesli czegos\nie zrobim' i problem bo nie ma miejsca na literkę 'y' a te trzy kropki to znacznik przenoszący nas do kolejnego okna, którego pod żadnym pozorem nie wolno nam zmieniać (na razie nie wolno używać polskich czcionek). No ale dobra, zapiszmy i sprawdźmy co się stało. Otwieramy emulator... Hmm, pierwsze słowa dialogu już są, ale razi brak polskich czcionek :( Jednak postaramy się umieścić je w grze :)

8. Lubimy malować, prawda?
Nasza przygoda z TileEdytorem zaczyna się :)
Otwieramy TE, i co? Trochę dużo tego wszystkiego. Z lewej od góry: menadżer plików, mini operacje na pliku, nasza aktualna pozycja, tryb pracy edytora, rozmiar okna, w którym przeglądamy zawartość gry, a opcji 'Bitmap Mode' lepiej nie dotykać (w programie jest błąd, powodujący wyłączenie programu). Później bliżej środka jest mini edytor (możemy w nim rysować polskie czcionki i inne znaczki). Te dwa okna niżej to 'przybornik' A po lewej okno, które nam raczej się nie przyda. Więc załadujmy do niego angielski rom... nic nie znaczące kropeczki? Teraz dopiero trzeba znaleźć czcionki, które wykorzystuje rom, nie ma innego sposobu niż żmudne przewijanie. W HM2 czcionki są pod adresem 113568. Całe szczęście, są japońskie haczyki, czyli miejsca na przyszłe polskie czcionki. Jeżeli trafimy na grę gdzie nie ma ani haków, ani wolnego miejsca na czcionki, można je dorysować pod angielskie DTE (zlepki liter) lub pod coś takiego jak 's 't itp. A jeżeli nic z tych rzeczy nie znajdziemy, a chcemy koniecznie mieć polskie czcionki możemy zrezygnować z Liter QXVqxv i z niektórych znaków int. (musimy mieć 9 wolnych miejsc, na same małe czcionki). Ale tym (na razie) nie powinniśmy się martwić, mamy uproszczone zadanie :) Najlepiej przeciągnąć czcionki 'acelnoszz' do edytora, zrobić zbliżenie, włączyć tryb malowania, wybrać odpowiedni kolor i pobawić się w malarza.
Gdy będziemy mieli gotowe polskie czcionki, możemy je umieścić w grze. W TE widać: () kropkę i japoński haczyk. Już po kropce możemy wsadzać ąćęłńóśźż. Duże polskie czcionki nie są tak ważne i nie trzeba ich umieszczać. Za to przydatne są zlepki literowe takie jak sz, cz ch, ów, ie (ale trudno je zmieścić w polu 8x8). Bardzo potrzebny jest zlepek 'ie' (później się okaże dlaczego). Można też zlepiać ze sobą coś takiego jak 'a' oraz spacja ('a '). Można również narysować swoje czcionki, inaczej wyglądające, niż te oryginalne z gry :) Trochę roboty, ale za to jaki efekt :) Ja narysowałem jeszcze znaczek euro oraz małpę (@) :)
Uwaga! Rysując pamiętajmy o tym, żeby z prawej i lewej strony zrobić odstęp 1 pixela, dlaczego? Ponieważ, czcionki w przetłumaczonych wyrazach mogłyby na siebie nachodzić, co nie jest zbyt estetyczne.
Teraz tylko trzeba wzbogacić tablicę o polskie literki i nowe znaki, aby nasz HE obsługiwał polskie czcionki. Często jest z tym trochę roboty, ale znowu gra upraszcza nam robotę :) Trzeba się dobrze przyjrzeć i co? Znak ')' ma wartość 60 później jest jeszcze dziwna kropka i nasze czcionki, a w hexach każdy znak jest przyporządkowany kolejnej wartości, czyli na to wynika, że 'ą' ma wartość 62, proste, prawda?
Musimy obejrzeć nasze czcionki. Otwórzmy HE w miejsce pierwszych dialogów gry. Zmieńmy to co trzeba na polskie fonty. Dostępne jest DTE 'ie', więc tam gdzie są trzy bity dla wyrazu 'nie' teraz będą tylko dwie, czyli jedna wolna dla brakującej litery 'y' :)) Pojemaje?

9. INSERT i DUMP
Hmm, ja osobiście tłumacze tekst w okienku roboczym HE, oczywiście Hexecute jest przystosowany do Dumpu jak i Insertu. A po co? Jeżeli mamy jakąś większą ilość tekstu do przetłumaczenia. Wszystko dumpujemy do pliku *.txt, w celu łatwiejszej edycji (w Notatniku, jak i w każdym innym programie musimy załączyć opcje Insertowania tekstu - klawisz Insert). Jeżeli jesteście pewni wyboru. Zaczynamy. Zaznaczamy kursor w miejscu gdzie chcemy zacząć Dump, wybieramy Specjalne --> Zgraj Skrypt. W pierwszym okienku wpisujemy nazwę *.txt, niżej podajemy początek naszego skryptu, który warto gdzieś zapisać(dokładnie przepisujemy wartość z prawej dolnej części HE o nazwie Offset), a po prawej długość. Tu mały problem, bo wartość od 0 do 10 jest równa jednej linijce w HexEdytorze. Możemy robić na oko, nikt przecież nie będzie się bawił w liczenie... i OK. Plik powinien znaleźć się w katalogu z grą, można go dowolnie edytować, prócz oczywiście znaczników kończących okienko (w HM2 są to trzy kropki). Jeżeli tekst zostanie przetłumaczony, musimy go z powrotem wsadzić do gry, za pomocą funkcji Wgraj Skrypt.
Tutaj wpisujemy nazwę. Adres początkowy, czyli wartość z poprzedniej części (nasz odpis). Musimy wprowadzić ją bardzo dokładnie, jeśli będzie inna, gra po insercie i zapisie raczej nie ruszy (a jeśli ruszy, tekst nie będzie wyświetlany), dlatego też zawsze warto robić kopię zapasową tłumaczonej gry.

10. Wskaźniki, do czego mogą się przydać? (dla dorosłych)
Wskaźniki, inaczej nazywane Pointerami to wyższa szkoła jazdy, jedna z trudniejszych dziedzin RomHackingu (nie bije Assemblera). Po prostu żmudna zabawa z systemem szesnastkowym romu. Może się urobimy, ale na pewno będzie widoczny efekt :) Do czego... no np. w angielskiej wersji HM2 w Item'ach występuje słowo Milker. Chcemy to przetłumaczyć jako Dojarka (inaczej kombinować się nie da) i problem, bo wyraz tłumaczony jest za długi. Możemy jednak, za pomocą pointerów oczywiście zapisać słowo Dojarka. Oczywiście nic nie da się zrobić od tak. Trzeba to zrobić kosztem innych wyrazów występujących niedaleko danego wyrazu.
Wszystko będzie się odbywało w HexEdytorze i aby lepiej to zrozumieć próbujcie postępować zgodnie z instrukcją z romem HM2.
Załadujmy nasz rom do HE i przejdźmy do offsetu 56540. Zauważmy, że wcześniej jest napisane: "Leave shop", co bez problemu można zastąpić jako 'Opuść'. Zwolniło się miejsce, aby wpisać słowo 'Dojarka'. Ustawmy nasz kursor przed rozpoczęciem się wyrazu, którego położenie chcemy zmienić. W moim przypadku coś takiego: '.|Milker', gdzie '|' to kursor. Musimy znać offset danego wyrazu (prawa dolna część HE). Lecz z tego bierzemy tylko 4 ostatnie liczby: 655A, dzielimy to na połowę i zmieniamy kolejność, co daje 5A65... i jush :) mamy naszego pointera. Łatwo było. Ale w innych grach...
Pointery we wszystkich grach na GB są schowane pomiędzy 4000 a 7FFF (nasz pointer też). I jeśli nasz offset jest między:

0000-3FFF - musimy dodać 4000 do offsetu,
4000-7FFF - zostawiamy go w spokoju (655A mieści się właśnie w tym przedziale, dlatego też nie wykonywaliśmy nic innego, tylko dzielenie na pół i zmiana kolejności)
8000-BFFF - odejmujemy 4000
C000-FFFF - odejmujemy 8000

Zauważmy również, że po każdym z Itemów jest wartość F0, o której nie powinniśmy nigdy zapomnieć! Jeżeli nie rozumiemy systemu szesnastkowego (lub chcemy się upewnić, czy nasze obliczenia są dobre) użyjmy systemowego kalkulatora. Kalkulator znajduje się na ogół w akcesoriach :) Z menu widok wybieramy Naukowy (lub Zaawansowany) i system HEX. Teraz musimy wpisać słowo 'Dojarka'. Po słowie 'Opuść' wstawiamy Hex F0 i piszemy 'Dojarka'. Teraz ustawmy kursor przed literą D (tak jak w przypadku litery 'M') i odczytajmy offset. Odczyt: 6555, co po podziale i zmianie kolejności daje: 5565. Logicznie myśląc wartość 5A65 należy zastąpić wartością 5565. Więc znajdźmy wartość 5A65. Wybierzmy Znajdź Hex. Znalazło dwie podobne wartości obok siebie (można to nazwać tablicą pointerów). Zmieńmy obydwie na 5565. Teraz, gdy zapiszemy i otworzymy grę w emulatorze powinno pisać Dojarka. Jeżeli zaś ominęlibyśmy pointery, zobaczylibyśmy literki 'ka'.
Na ogół wskaźniki w HE są nad tłumaczonym tekstem i mają podobne wartości (w naszym przypadku jest dużo wartości xx65). Tak trzeba robić z każdym z naszych wyrazów, znaleźć oryginalnego pointera, przetłumaczyć wyraz i dla niego znaleźć już wartość nowego pointera.
Uwaga!
Powyższy tekst o Pointerach dotyczy tylko gier na GB, inne platformy mają inny system zapisu wskaźników. Inny kurs dotyczący pointerów znajdziecie na stronie RustyCan'a: http://strony.wp.pl/wp/rusty_can/pointery.html (dotyczy pointerów systemu SNES) (strona niestety nieaktualna... ale na szczęście odnalazłem ten artykuł i zostal umieszczony na naszej stronie - LINK)

11. IPS
Tu naprawdę, nie ma co tłumaczyć, mając tak banalny program... Gdy mamy gotową gierkę po prostu wybieramy: pierwsze oryginalny rom, później przetłumaczony i Create IPS i IPS gotowy do użycia :) Chyba najprostsze co może być w tłumaczeniu, a osoby, które nie umiały 'spatchować' gry niech lepiej się za to nie biorą (mogłem to na początku napisać :P)

12. To dopiero początek...
Pocieszę was :), nawet nie wiem, czy to połowa, tego co was czeka przy tłumaczeniach :P. Na pewno nie traficie na grę, którą można równie prosto przetłumaczyć, jak HM2 (zdarzają się wyjątki). To jest tylko tutorial dla 'bardzo' początkujących;). W zasadzie wytłumaczyłem tu wszystko (oprócz oczywiście assemblera), co może nas zaskoczyć.
Sam wziąłem się za tłumaczenie HM2 (idę na łatwiznę :) ). Zajrzyjcie jeszcze do działu Linki, może pomogą :)

13. Outro
Nie ma tu czegoś istotnego, zapomniałem o czymś? Znalazłeś jakiś błąd w treści merytorycznej tekstu, czy literówkę, czy może błąd ortograficzny (:|), napisz do mnie.
To jest mój pierwszy dłuższy tekst, każdemu może zdarzyć się pomyłka:) I jeśli nawet macie problem z wybraną grą, chętnie pomogę...
Ale jeżeli naprawdę chcecie tłumaczyć, radzę nie tracić nadziei. Ja potrzebowałem 2 lat, aby bezproblemowo tłumaczyć gry (lecz na pewno nie wiem wszystkiego).

krykoz
Posty: 32
Rejestracja: 19 kwie 2011, o 22:02

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: krykoz » 23 wrz 2013, o 12:50

Wskaźniki - pointery

W pewnej grze (na GBC) mam pointery, są słowa:
OFFSET:SŁOWO
00005D06:CONTINUE
00005DOF:NEW GAME (po przesunięciu miało by być 00005D10
00005D18:OPTION (po przesunięciu miało by być 00005D19

po słowach CONTINUE i NEW GAME znajduje się "4E"
po OPTION "50"

Chciałbym przetłumaczyć słowa w taki sposób:
CONTINUE > KONTYNUUJ (jeden znak za mało)
NEW GAME > NOWA GRA
OPTION > OPCJE (jeden znak zostaje wolny)

Zamierzam przesunąć słowa NOWA GRA i OPCJE o jeden znak do przodu, by zrobić miejsce na jedną literę.

Wg tego co jest napisane w kusie:
1. przeczytać 4 ostatnie znaki z offsetu
2. sprawdzić przedział w którym się znajduje
3. podzielić i zamienić kolejność
4. odszukać wartość i zmienić ją na nową
00005D06:CONTINUE
tutaj pointera nie muszę przesuwać
00005DOF:NEW GAME
1. przeczytałem że jest: 5D0F
2. 5D0F znajduje się w przedziane 4000-7FFF, więc nic nie dodaje i nic nie odejmuje
3. rozdzielam 5D0F na 5D 0F, zamieniam kolejność i mam 0F 5D czyli 0F5D.
4. szukam wartości 0F5D, znajduje ją w offsetach:
-00005C0C
-0002D272
-0003B590
które z nich mam zmienić? logika mi podpowiada że ten pierwszy, bo 0000xxxx czyli tak jak ten wyraz który chce przesunąć, dobrze myślę? czy wszystkie mam zmienić? czy tylko jeden, bo w kursie nie jest wyszczególnione ile wartości mam zmienić dokładnie wartości, czy jak znajdę 10 wartości to mam wszystkie zmienić czy tylko wybrane.
5. zmieniam wartość 0F5D (w odpowiednim offsecie!) na wartość 105D bo chce przesunąć o jeden w prawo.
00005D18:OPTION
1. przeczytałem że jest: 5D18
2. 5D18 znajduje się w przedziale 4000-7FFF, więc nic nie dodaje i nic nie odejmuje
3. 185D
4. wartość 185D, znajduje się w offsecie: 0003A12F, tylko jeden wynik, dziwny jest dla mnie to że jest w offsecie 0003xxxx, nie powinno to być w 0000xxxx? nie mam innego wyjścia, mam tylko jeden wynik, więc zmieniam 185D na 195D bo chce przesunąć o jeden w prawo.

Co źle robię? Bo sam nie wiem, nie potrafię szukać tych wartości, może ktoś zrobi film instruktażowy lub po kolei wszystko na zdjęciach pokaże, lub chociaż dokładnie wszystko w podpunktach wymieni, z wyszczególnieniem w jakich offsetach szukać czy to nie ważne że słowo jest w offsecie np 00001D12 a pointer znajdę np w 0003FA90, domyślam się że powinno się zmieniać tylko te wartości które są w odpowiednich offsetach, bo przecież jak jest jakieś słowo w offsecie 0000xxxx to pointera do niego muszę szukać w tym samym offsecie, jak znajdę inny, to może znaczyć że w innym np w 0003xxxx to może być pointer zaczynający jakieś inne słowo lub zdanie w offsecie 0003xxxx.

Przy okazji mam problem z Hexacute, nie działa tak jak trzeba, gdy wpisuje słowo które chce znaleźć nic się nie dzieje, dopiero tamtą linijkę znalazłem wpisując OPTION zaznaczając relatywne wyszukiwanie, inaczej nie chciało szukać, tablice mam załadowaną i raczej jest okej wszystko. Co źle robię?

Awatar użytkownika
mziab
Posty: 459
Rejestracja: 20 maja 2008, o 23:11
Grupa: mteam
Kontakt:

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: mziab » 23 wrz 2013, o 14:15

Powyższy poradnik jest już wiekowy. Istnieją dużo lepsze hexedytory niż Hexecute, jak choćby Translhextion czy HxD.

A ogólna zasada przy szukaniu tablic pointerów jest taka, że najczęściej znajdują się one bezpośrednio przed stringami, do których się odnoszą. Krótko mówiąc, 00005C0C to na 99% właściwy adres. Oczywiście w przypadku niektórych gier pointer może występować w więcej niż jednym miejscu.

Poza tym pamiętaj, że każdy pointer jest zapisany z odwróconymi bajtami. Krótko mówiąc, żeby przesunąć 0F5D (odwrócone 5D0F) z twojego przykładu o jeden bajt do przodu, zmieniasz je na 105D (odwrócone 5D10).

Oczywiście zakładam, że gra nie używa jakiegoś cudacznego formatu pointerów. Wtedy ratuje cię tylko debugger i znajomość podstaw assemblera Z80.
"Człowieka można przedstawić w postaci ułamka, w którym licznikiem są jego właściwości, a mianownikiem - mniemanie o sobie. Im większy mianownik, tym mniejszy cały ułamek." - Lew Tołstoj

Awatar użytkownika
mendosa
Siedem Niedźwiedzi
Posty: 817
Rejestracja: 11 lis 2008, o 08:24
Grupa: Siedem Diabłów

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: mendosa » 23 wrz 2013, o 14:27

Ja nie znam się na romhackingu, ale z kursu wynikałoby, że musisz zamienić wszystkie odnalezione wartości danego słowa w 'offsetach'.
Piszesz
5. zmieniam wartość 0F5D (w odpowiednim offsecie!) na wartość 0F5F bo chce przesunąć o jeden w prawo.
a z kursu wynika, że należy zmienić wartość 'offsetu' na wartość nowego słowa, nie dodając niczego do wartości słowa zamienianego.
N.E.M.O.

krykoz
Posty: 32
Rejestracja: 19 kwie 2011, o 22:02

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: krykoz » 23 wrz 2013, o 14:34

Ja nie znam się na romhackingu, ale z kursu wynikałoby, że musisz zamienić wszystkie odnalezione wartości danego słowa w 'offsetach'.
Piszesz
5. zmieniam wartość 0F5D (w odpowiednim offsecie!) na wartość 0F5F bo chce przesunąć o jeden w prawo.
a z kursu wynika, że należy zmienić wartość 'offsetu' na wartość nowego słowa, nie dodając niczego do wartości słowa zamienianego.
nie dodaje niczego do wartości, po staremu słowo zaczyna się w offsecie 0F5D, a chce je przesunąć w prawo, by zrobić miejsce dla słowa które jest przed nim, więc wyszukuje wartość 5D0F (czyli 0F5D po zamienieniu kolejności), gdy ją odszukam zmieniam ją na 105D, dzięki temu to słowo które chciałem przesunąć zaczyna się o jeden dalej i mam miejsce które chciałem mieć.

-- 23 wrz 2013, o 15:45 --
Powyższy poradnik jest już wiekowy. Istnieją dużo lepsze hexedytory niż Hexecute, jak choćby Translhextion czy HxD.

A ogólna zasada przy szukaniu tablic pointerów jest taka, że najczęściej znajdują się one bezpośrednio przed stringami, do których się odnoszą. Krótko mówiąc, 00005C0C to na 99% właściwy adres. Oczywiście w przypadku niektórych gier pointer może występować w więcej niż jednym miejscu.

Poza tym pamiętaj, że każdy pointer jest zapisany z odwróconymi bajtami. Krótko mówiąc, żeby przesunąć 0F5D (odwrócone 5D0F) z twojego przykładu o jeden bajt do przodu, zmieniasz je na 105D (odwrócone 5D10).

Oczywiście zakładam, że gra nie używa jakiegoś cudacznego formatu pointerów. Wtedy ratuje cię tylko debugger i znajomość podstaw assemblera Z80.
to zmienię ten program, w sumie mam też thingy32 ale w nim nie da się tak po prostu zmienić czegoś na wartości które nie są w tabeli np nie mógłbym zmienić 0F na 10 bo nie mam tego wpisane w tablicy, dlatego odpaliłem to co napisano w poradniku...

a co zrobić z wartością 185D, znajdującą się w offsecie: 0003A12F?
z tym pierwszym słowem było inaczej, od razu było wiadomo gdzie jest, bo offsety były bardzo blisko siebie, a w tym drugim jedyny wynik jest o bardzo dużo dalej, jeśli on jest okej, to jak jest z tym wynikiem wyszukiwania 5D0F? mam przecież trzy wyniki i jeden z nich jest w pobliżu tego drugiego słowa, trochę bezsensu to jest, dziwne że pointer do tego drugiego słowa nie znajduje się w 0000xxxx

Awatar użytkownika
mendosa
Siedem Niedźwiedzi
Posty: 817
Rejestracja: 11 lis 2008, o 08:24
Grupa: Siedem Diabłów

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: mendosa » 23 wrz 2013, o 14:58

Jeszcze jedno w poradniku przykuło moją uwagę:
Pointery we wszystkich grach na GB są schowane pomiędzy 4000 a 7FFF (nasz pointer też). I jeśli nasz offset jest między:

0000-3FFF - musimy dodać 4000 do offsetu,
4000-7FFF - zostawiamy go w spokoju (655A mieści się właśnie w tym przedziale, dlatego też nie wykonywaliśmy nic innego, tylko dzielenie na pół i zmiana kolejności)
8000-BFFF - odejmujemy 4000
C000-FFFF - odejmujemy 8000
Skoro wszystkie są między 4000-7FFF, to wynika z tego, że do żadnego nie należy ani dodawać, ani od niego odejmować żadnej wartości. Aczkolwiek nie jest to jasne, może ma to zastosowanie do wyszukanych offsetów dla wartości hex pointera?
N.E.M.O.

krykoz
Posty: 32
Rejestracja: 19 kwie 2011, o 22:02

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: krykoz » 23 wrz 2013, o 15:13

Jeszcze jedno w poradniku przykuło moją uwagę:
Pointery we wszystkich grach na GB są schowane pomiędzy 4000 a 7FFF (nasz pointer też). I jeśli nasz offset jest między:

0000-3FFF - musimy dodać 4000 do offsetu,
4000-7FFF - zostawiamy go w spokoju (655A mieści się właśnie w tym przedziale, dlatego też nie wykonywaliśmy nic innego, tylko dzielenie na pół i zmiana kolejności)
8000-BFFF - odejmujemy 4000
C000-FFFF - odejmujemy 8000
Skoro wszystkie są między 4000-7FFF, to wynika z tego, że do żadnego nie należy ani dodawać, ani od niego odejmować żadnej wartości. Aczkolwiek nie jest to jasne, może ma to zastosowanie do wyszukanych offsetów dla wartości hex pointera?
dziwny ten poradnik, niezbyt zrozumiale napisany, możliwe że ten kto to pisał sam do końca nie wie dokładnie co gdzie i dlaczego jest i tłumaczył tak jak on to sam rozumie, ale przydały by się jakieś wyjaśnienia, czemu coś dodawać lub odejmować, tego nie rozumiem, szkoda że nikt nie potrafi tego sensownie wyjaśnić

pointer oznacza offset w którym zaczyna się dane słowo, te 4 ostatnie cyfry? czy pointer to jest to gdzie szukamy tę wartość? może te działania, dodawanie i odejmowanie wiążę się z tym że głównym przedziałem jest 4000-7FFF a reszta to przesunięcie w przód lub w tył o 4000

Awatar użytkownika
mziab
Posty: 459
Rejestracja: 20 maja 2008, o 23:11
Grupa: mteam
Kontakt:

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: mziab » 23 wrz 2013, o 15:20

mendosa: Te obliczenia służą do przeliczenia rzeczywistego adresu w romie na pointer. Docelowy adres wewnątrz banku w przypadku GBC musi się mieścić w zakresie 4000-7FFF. Jeśli więc jest mniejszy, dodajemy 4000. Jeśli jest większy niż ten zakres, odejmujemy odpowiednią wielokrotność 4000. Można to też załatwić w nieco bardziej zaawansowany sposób z użyciem AND, ale nie chciałbym komplikować :)
dziwny ten poradnik, niezbyt zrozumiale napisany, możliwe że ten kto to pisał sam do końca nie wie dokładnie co gdzie i dlaczego jest i tłumaczył tak jak on to sam rozumie, ale przydały by się jakieś wyjaśnienia, czemu coś dodawać lub odejmować, tego nie rozumiem, szkoda że nikt nie potrafi tego sensownie wyjaśnić
O ile mnie pamięć nie myli, tak właśnie było :) Ernbob napisał to dawno temu, kiedy udało mu się rozgryźć pointery w którymś Harvest Moon na GBC i spisał to trochę na gorąco, niekoniecznie do końca rozumiejąc regułę działania.
"Człowieka można przedstawić w postaci ułamka, w którym licznikiem są jego właściwości, a mianownikiem - mniemanie o sobie. Im większy mianownik, tym mniejszy cały ułamek." - Lew Tołstoj

Awatar użytkownika
mendosa
Siedem Niedźwiedzi
Posty: 817
Rejestracja: 11 lis 2008, o 08:24
Grupa: Siedem Diabłów

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: mendosa » 23 wrz 2013, o 15:30

mziab - dobrze, ale skoro muszą się mieścić w tym zakresie, to dlaczego niektóre się nie mieszczą?
N.E.M.O.

krykoz
Posty: 32
Rejestracja: 19 kwie 2011, o 22:02

Re: [PORADNIK] Kurs Romhackingu - ErnBob

Postautor: krykoz » 23 wrz 2013, o 15:31

mendosa: Te obliczenia służą do przeliczenia rzeczywistego adresu w romie na pointer. Docelowy adres wewnątrz banku w przypadku GBC musi się mieścić w zakresie 4000-7FFF. Jeśli więc jest mniejszy, dodajemy 4000. Jeśli jest większy niż ten zakres, odejmujemy odpowiednią wielokrotność 4000. Można to też załatwić w nieco bardziej zaawansowany sposób z użyciem AND, ale nie chciałbym komplikować :)
dziwny ten poradnik, niezbyt zrozumiale napisany, możliwe że ten kto to pisał sam do końca nie wie dokładnie co gdzie i dlaczego jest i tłumaczył tak jak on to sam rozumie, ale przydały by się jakieś wyjaśnienia, czemu coś dodawać lub odejmować, tego nie rozumiem, szkoda że nikt nie potrafi tego sensownie wyjaśnić
O ile mnie pamięć nie myli, tak właśnie było :) Ernbob napisał to dawno temu, kiedy udało mu się rozgryźć pointery w którymś Harvest Moon na GBC i spisał to trochę na gorąco, niekoniecznie do końca rozumiejąc regułę działania.
Nie chciałbym nikogo pouczać tutaj, ale myślę że warto by było napisać dokładny poradnik, dzięki temu więcej osób by nauczyło się przesuwać poitery, mnie osobiście na pewno lepiej by szło jakbym wiedział o co chodzi a nie że tu sobie coś zamienię kolejnością nie wiedząc dlaczego to robię, potem będę sprawdzał czy należy do 4000-7FFF, jeśli nie to odejmuje lub dodaje i też fajnie by mi było wiedzieć dlaczego coś takiego robię. Dzięki temu na pewno więcej osób by chciało tłumaczyć gry, a tak to widząc taki poradnik ktoś spróbuje i zrezygnuje, wiadomo że nie każdy się do tego nadaje, ale jeśli ktoś ma tęgą głowę i mógł by zrobić naprawdę dobre tłumaczenie, tylko po prostu nie umie takich rzeczy jak przesuwanie pointerów... na pewno wiele osób zrezygnowało przez to, zrobili to wszystko co w poradniku napisano, ale wyszło jedynie im tylko z tym przykładem harvest moon, a sami już nie potrafili tego zrobić z innym romem. Niech ktoś mądry zrobi poradnik i dokładnie opisze wszystko, potem inni mądrzy go zredagują i będzie cacy. To co pisałeś trochę mi pomogło, lepiej to rozumiem, ale nadal nie potrafię robić, nadal nie wiem co zrobić z tym że początek słowa mam w 0000xxxx a wartość znalazłem w 0003xxxx, naprawdę tego nie rozumiem, daleko nie zajadę na tym że potrafię zrobić tablicę znaków, dobrać się do czcionek i kilka jeszcze drobnych rzeczy, bez pointerów jestem ograniczony, sami pomyślcie jak ograniczające by było to jakbyśmy coś tłumaczymy i mieli limity znaków, byśmy musieli skrótami pisać lub ucinać zdania. Ten poradnik nie opisuje zbytnio przypadków jakie mogą być, a powinien uwzględnić wszystko, powinno być więcej przykładów i więcej obrazków, a zobaczycie że to pomoże ludziom, chyba właśnie o to chodzi by sobie pomagać, niech nasza społeczność się rozrasta, ci co się do tego nadają na pewno zostaną w tym na dłużej, a tym którym nie będzie szło odpadną.


Wróć do „Poradniki”



Kto jest online

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