[PORADNIK] Kurs Romhackingu - RPG

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

[PORADNIK] Kurs Romhackingu - RPG

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

Kurs Romhackingu - RPG

Tytuł: Kurs romhackingu, czyli przetłumacz sobie "erpega"...
Autor: RPG
Korekta: bemberg

Spis treści:
1. Co nam będzie potrzebne?
2. Początek
3. Tworzenie tablicy
4. Edycja tekstu
5. Edycja grafiki
6. Edycja skompresowanej grafiki na GBA (kompresja LZ77) - sposób 1
7. Edycja skompresowanej grafiki na GBA (kompresja LZ77) - sposób 2
8. Pointery
9. Tworzenie łatek
10. Jeszcze kilka słów o SnesEdit
11. Edycja plików TIM (PSX)
12. Zakończenie

Narzędzia:
1. Hexedytor - SnesEdit
2. TileEdytor - Tile Molester
3. Patchowanie
- SnesTool
- MakePPF
4. Emulatory:
- Playstation - ePSXe 1.6
- GBC,GBA - Specjalna wersja VisualBoy Advance wyszukująca skompresowaną grafikę
- SNES - ZSNES
- Nintendo64 - Project 64
5. Inne narzędzia:
- Program do przeglądania skompresowanej grafiki - unLZ-GBA
- Nowsza wersja ww. programu (działająca pod XP) NLZ-GBA (potrzebuje NET FRAMEWORK 2.0)
- Program do dekompresji grafiki (inny niż opisany w kursie) - GBADecmp
- Tablica i polska czcionka do Cimy
Opis jest uniwersalny jeśli chodzi o proste tłumaczenie romów (a także iso w przypadku psx'a). Teraz już bez zbędnych wstępów, krok po kroku objaśnię co i jak trzeba zrobić, by móc uszczęśliwić miliony graczy na całym świecie nieoficjalną, polską wersją językową gry.
Uwaga: na większość pytań które do mnie przychodzą, odpowiedź można znaleźć w kursie. Zanim cokolwiek do mnie napiszesz, upewnij się czy wszystko przeczytałeś i przetrawiłeś. Mój czas nie jest z gumy, bym mógł każdemu z osobna tłumaczyć wszystko od podstaw.

Co nam będzie potrzebne?

Programów do wyboru jest dużo, te które podałem są przykładowe i według mnie najbardziej użyteczne.

1) Komputer klasy PC z Windows 98 (do kupienia w każdym kiosku ;), wszelkie maile z jękami typu "łeeee program mi nie działa pod XP, help!!!" będą ignorowane, więc albo sobie poradzisz z XP i jego trybem (nie)zgodności albo zainstaluj sobie Win98 (można przecież bezproblemowo korzystać z dwóch systemów na oddzielnych dyskach, czy partycjach jednego dysku). Zalecany tu program SnesEdit posiada wersję pod Windows, ale ja jednak bardziej polecam wersję dosową.
//bemberg: przygotowałem ten sam zestaw narzędzi sprawdzonych i działającyh pod WinXp

2) Program SnesEdit - jest do ściągnięcia ze stron: http://www.snesedit.de/eng/index.html (strona domowa, zawsze tam jest najnowsza wersja) //strona niestety nieaktywna, a także zophar.net, lub romhacking.net. Jest dostępna wersja zarówno pod DOS, którą bardziej polecam, jak i pod Windows. Program dosowy gwarantuje stabilność, większość tego typu programów pod Windows zwykle nie radzi sobie z dużymi plikami i często bez powodu się wieszają. Z wersją dosową możecie mieć problemy, jeśli wasz monitor nie obsługuje niższych rozdzielczości, bo program sam sobie ją dobiera, jeśli tak się zdarzy, musicie pokombinować z rozdziałką monitora, albo odpalić program w czystym dosie. Być może nie odpali wam pod XP tryb edycji grafiki, jednak to zależy w dużej mierze od karty graficznej. Jeśli chodzi o wersję pod Windows, nie zanotowałem większych problemów pod Windows 98 i XP. Jest to jednak wersja dopiero dopracowywana, a ja nie miałem czasu jej dobrze przetestować. Występują różnice względem obłożenia klawiatury, np. nie można używać prawego alta, a co z tym idzie używać polskich znaków w programie. W wersji dosowej, używanej pod Windows 98 SE PL, można korzystać z polskich skrótów klawiaturowych, tak samo jak w każdym edytorze tekstowym, czyli np. ALT+a da nam ą. Jednak w wersji pod WIN możemy to ominąć stosując zamiast np. ą literkę a z innym znakiem, choćby z apostrofem, wpisując w tablicy coś takiego: a' (lub coś innego, żebyśmy tylko wiedzieli że chodzi o ą).

3) Program TileMolester, strona domowa (jest także na stronach zophar.net czy romhacking.com).
UWAGA! Do uruchomienia wymaga środowiska java.
Do najnowszej wersji TM (0.16) potrzebna jest TA wersja javy.
Należy pamiętać że by ściągnąć z tej strony środowisko javy (JRE 5.0 Update 2) a nie development kit.
[Poprzednia wersja TM to 0.15a lub 0.15c - nie pojawia się w niej problem z xml-ami, przynajmniej pod win98, nie wiem jak to jest z xp, bo nie korzystam z tego systemu (v0.15a dostępna jest na zophar.net w dziale z narzędziami do grafiki). Do niej wystarczy java w wersji 1.4.2.]
Program powinien się uruchomić plikiem tm.jar. Jeśli pliki .jar powiązane są z jakimś programem pakującym (typu WinZip), to tilemolester nie uruchomi się, bo Windows rozpozna ten plik jako archiwum. W takim wypadku trzeba wejść do folderu gdzie jest TileMolester i utworzyć skrót do tm.jar, we właściwościach skrótu jako obiekt docelowy wpisujemy:
java -jar tm.jar
zapamiętujemy zmiany i możemy uruchamiać program za pomocą skrótu.

4) Emulator konsoli, odpowiedni dla romu/iso które chcemy tłumaczyć. Zalecane:
- dla PSX, ePSXe 1.6 (epsxe.com)
- dla GBC/GBA, Visual Boy Advance (vba.ngemu.com)
- dla SNES, ZSNES (zsnes.com) lub Snes9x
- dla N64, Project64 lub 1964 (1964emu.emulation64.com)

5) Program do tworzenia łatek (patch-ów).
Zależnie od systemu, będzie to SnesTool (zophar.net lub romhacking.org //albo grajpopolsku.pl :) ) do tworzenia łatek ips - najlepsze do NES, SNES, GBC, GBA (mają wadę - nie nadają się do bardzo dużych plików, ale do 16MB można spokojnie stosować), MakePPF (jest tutaj)- do tworzenia łatek ppf dla iso PSX i dużych romów.

6) Oprócz tego mogą się przydać inne programy (głównie dla PSX):
- edytor do grafiki typu PaintShop Pro, czy PhotoShop //lub darmowy GIMP
- program TimUtil (jeśli w grze na PSX występuje grafika w formacie TIM i chcemy ją edytować)
- pluginy TIM do PhotoShop lub PaintShop Pro
- program do tworzenia łatek w systemie APS (do dużych romów N64)

7) No i oczywiście rom/iso gry którą chcemy tłumaczyć.

Żeby było łatwiej wszystko zrozumieć, oprę się na prostym przykładzie tłumaczenia romu gry na GBA: Cima, The Enemy (nr 1281 ).


Początek

Zróbmy sobie jakiś folder, skopiujmy tam nasz rom (dajmy mu jakąś krótką nazwę, żeby było łatwiej wyjaśniać, nazwałem swój plik cima.gba), oraz skopiujmy tam program SnesEdit (w chwili kiedy to piszę mam wersję dosową tego programu (0.98.242), odtąd w opisie będę posługiwał się skrótem SE).
Uruchamiamy SE i mamy do wyboru opcję wyboru języka, po jej wybraniu program chce, by mu wskazać rom. Wciskamy klawisz TAB, podświetlił się nasz rom cima.gba. Wciskamy dwukrotnie Enter i czekamy na załadowanie romu. Od tej pory, jeśli wyjdziemy z programu (Alt+x), nie będziemy musieli tego powtarzać, po uruchomieniu snesedit odczyta dane z pliku .ini i od razu załaduje rom (w tym momencie pojawia się także nowy folder cima.SE, gdzie program przechowuje swoje dane dotyczące tego romu).

Tworzenie tablicy

Naszym oczom ukaże się okno podzielone pionowo na dwie części. W prawej powinien znajdować się tekst z gry, ale w tej chwili są tu jakieś bzdury. Należy więc zrobić sobie tablicę, dzięki której będziemy widzieć tekst. Zacznijmy od uruchomienia gry pod emulatorem, przechodzimy grę do miejsca pojawienia się pierwszego tekstu dialogu. U mnie na przykład ów pierwszy tekst wyglądał tak:

[attachment=16]1.jpg[/attachment]

Musimy teraz znaleźć ten fragment w SnesEdit . W tym celu, po uruchomieniu SE i załadowaniu romu, naciskamy klawisz r. Pojawi się okno wyszukiwania relatywnego, zawsze szukajmy jakiegoś niepospolitego wyrazu, składającego się z samych małych (lub samych dużych) liter, o długości co najmniej 5 znaków (unikniemy wyświetlenia się zbyt dużej ilości wyników). Tu dla przykładu szukałem wyrazu continent i taki też wpisałem do okna wyszukiwania. Wyświetliły się dwa wyniki, od razu można zauważyć

[attachment=15]2.jpg[/attachment]

, że właściwy jest ten drugi. Wybieramy go kursorem i wciskamy Enter.

Jeśli mamy dużo podobnych wyników i chcemy je wszystkie po kolei sprawdzić, nie musimy znowu wpisywać szukanego wyrazu, bo pod klawiszem F3 jest lista ostatniego wyszukiwania (dotyczy to każdego rodzaju wyszukiwania, nie tylko relatywnego). Jeśli mimo usilnych starań i wielu prób, nie znaleźliśmy tekstu to istnieją dwa wyjścia. Albo tekst jest skompresowany i nie da się go w ten sposób edytować, albo litery zostały zapisane na 2 bajtach. W tym drugim przypadku także szukamy relatywnie jednak np. zamiast standardowego słowa continent, wpisalibyśmy c*o*n*t*i*n*e*n*t, czyli oddzielając każdą literę gwiazdką. Gwiazdka zastępuje dowolną wartość. Taki sposób kodowania tekstu występuje czasami w grach GBA i SNES. W przypadku niektórych gier na SNES lub GBC, pod dwoma bajtami mogą być zakodowane nawet całe wyrazy(!), gra korzysta wtedy z tablicy słownikowej (tak jest np. w serii Lufia). Warto to sprawdzić, jeśli zwykły sposób zawiedzie.

Wracamy do naszej gry, tu akurat widzimy szukane zdanie, bo tekst to zwykłe ASCII, ale nie zawsze tak jest. Nie mniej w obu wypadkach należy zrobić sobie tablicę. Litera c w znalezionym wyrazie continent ma wartość 63h (wartości hexadecimal, czyli szesnastkowe dla odróżnienia od dziesiętnych oznaczane są literką h), a wiemy to stąd że po najechaniu kursorem na początek wyrazu (czyli tu literę c), widzimy w lewym oknie odpowiadającą temu znakowi wartość hex. Teraz wiedząc, że w standardowym alfabecie początek jest taki: abcde..., możemy się domyślić, że jeśli literze c odpowiada wartość 63h to literze b będzie odpowiadała wartość o jeden mniejsza, czyli 62h, a literze a wartość 61h. Pamiętajmy przy tym, że mamy tu doczynienia z systemem szesnastkowym, więc np. literce j nie będzie przypisana wartość 70, ale 6A. Jeśli wiemy jaką wartość ma pierwsza, mała literka alfabetu (czyli a), naciskamy klawisz 1 (jedynkę). Tutaj możemy zrobić sobie tablice. Oczywiście możemy ją zrobić i w zwykłym notatniku, ale tu chyba jest wygodniej (nie dotyczy to sytuacji kodowania dwubajtowego, ale o tym później). Najeżdżamy kursorem na wartość odpowiadającą literce a (w naszym przykładzie jest to 61, pod tą wartością widzimy już wpisaną literkę, ale jest ona koloru jasnoszarego, oznaczającego ASCII), naciskamy Enter, wpisujemy a i znowu Enter. Pojawi się nam niebieska literka a, wtedy jest ona już umieszczona w tablicy

[attachment=14]3.jpg[/attachment]

Tak na marginesie:
Jeśli teraz wyjdziemy z programu ALT+X, to w katalogu cima.SE - stworzonym przez SE, znajdziemy plik tablicy cima.tbl, możemy ją edytować zarówno w zwykłym notatniku, jak i w SE. Już gotową tablicę do tej gry znajdziecie na końcu kursu. Warto jej się przyjrzeć np. otwierając w notatniku, lub razem z grą w SE.

Postępujemy tak z całym alfabetem, małymi i dużymi literami, znakami przestankowymi, cyframi itd. Ich wartości łatwo się domyślić, porównując tekst w grze z tekstem wyświetlanym przez SE. Warto także dodać do tablicy znaki dla wartości, które odpowiadają za załamanie linii w dialogu lub za koniec dialogu. Zwykle wartość załamania linii oznaczam symbolem | (w przypadku gry Cima wynosi ona 03h), a koniec dialogu nawiasami kwadratowymi [] (w SE taka kombinacja ma kolor czerwony, bardzo dobrze wtedy widać gdzie dialog się kończy, a zazwyczaj nie wolno nam przesuwać tej wartości, więc lepiej żeby była dobrze widoczna, w tym przypadku wartość ta wynosi 02h).
Jeśli chodzi o kodowanie dwubajtowe, to jednej literze odpowiada nie jedna, ale dwie wartości hex. Dla przykładu możecie sprawdzić grę Zoids: Legacy na GBA, tam literka a ma wartość 8281, b=8282, c=8283 itd. Do robienia tablicy z wpisami dwubajtowymi można użyć SE (tworzenie nowej wartości ALT+2, podgląd i edycja tablicy klawisz 2), ale bardziej polecam zrobienie tego w notatniku.
Dodam jeszcze tylko że można korzystać jednocześnie z kilku tablic, pierwsza musi mieć rozszerzenie .tbl, a następne .tb2, .tb3 itd. (wszystkie muszą być w katalogu z pierwszą tablicą). W SE przełączamy się pomiędzy nimi klawiszem TAB.

Edycja tekstu

Mając gotową tablicę możemy próbnie coś przetłumaczyć. Tym razem nie szukamy tekstu relatywnie, ale w oparciu o naszą tablicę. W moim przykładzie jest tak:

[attachment=13]4.jpg[/attachment]

zatem będąc w SE wciskamy klawisz c i wpisujemy początek tego zdania np. The continent (zauważcie że celowo tylko tyle, chociaż mógłbym napisać The continent of|Altran., nam wystarczy sam początek, ale pamiętajcie że przy wyszukiwaniu można używać także znaku załamania linii - przydaje się to przy dużej ilości wyników). Program znalazł ten fragment, więc wciskamy Enter, by go wyświetlił (jeśli chcemy, do wyników wyszukiwania wracamy klawiszem F3). Nasz kursor powinien być ustawiony na literce T wyrazu The. Naciskamy CTRL+D, by przejść do ekranu edycji. U góry widzimy tekst, u dołu możemy go zmieniać, bardzo wygodne rozwiązanie. Wystarczy teraz wpisać tekst, tu dla przykładu wpisałem w ten sposób: Kontynent Altran.|Region Jillani,|40 km na polnocny|zachod.|[]. Teraz trzeba nacisnąć ESC i wybrać Enterem Yes, a zmiany zostaną uwzględnione w SE, co nie jest jednoznaczne z ich zapisaniem w romie (o tym trochę niżej).
Jak zapewne zauważyliście, tekst ten jest dłuższy niż jego oryginalna wersja. Akurat w tym przypadku, jest o tyle komfortowo, że po tekście angielskim występuje niemiecki, można go nadpisać, ale należy pamiętać o przesunięciu znaku końca (który oznaczyłem sobie []). Zwykle nie można tego robić i trzeba stosować skróty, sztuczki z podwójnymi literami, ale można także zmienić pointery, czyli wartości regulujące długość dialogu. Zabawa z pointerami to żmudna robota, jeśli nie potraficie jej sobie ułatwić napisaniem odpowiedniego programu. W dodatku każdy system ma swój unikalny sposób ich wyznaczania, a i tak każda gra może w tej sprawie odbiegać od standardów i trzeba do niej podejść indywidualnie (szczegóły - trochę niżej).
Zmiany możemy zapisać, bądź od razu utworzyć patch ips (klawisz F2). Radzę od razu zapisywać zmiany w romie, a po prostu co jakiś czas robić kopię bezpieczeństwa romu, lub patch. W ten sposób od razu sobie sprawdzicie zmiany, grając na emulatorze. Wspomnę jeszcze o możliwości tworzenia patcha NDO, jest to rodzaj łatek stosowanych do iso, czyli można w ten sposób zapisywać tłumaczenia na psx'a, ja osobiście jednak wolę system ppf, który jest popularniejszy, pewniejszy, no i obsługiwany przez emulator epsxe.
Po zapisaniu zmian możemy obejrzeć wynik w emulatorze:

[attachment=12]5.jpg[/attachment]

No tak, tu widać polskie literki, ale zapewne jeszcze ich nie macie. Oto jak je zrobić.

Edycja grafiki

Uruchamiamy program TileMolester, w odróżnieniu od pisanego w Pascalu SnesEdita, jest to program praktycznie na każdy system zaopatrzony w Javę, więc nie powinno być z nim problemów. Otwieramy w nim nasz rom (zawsze przed taką zabawą róbcie sobie kopię bezpieczeństwa romu, chyba że jesteście nieomylni). Oczom naszym ukazuje się nieciekawy widok, ale postaramy się to zmienić. Program rozpoznaje romy gba po rozszerzeniu i dobiera do niego odpowiedni kodek, ale wspomnę że najczęstszym kodekiem dla gba jest 4 bitowy, linearny, z odwróconą kolejnością bajtów, warto też czasami poszukać 2 bitowym i 8 bitowym (także linearnymi). Linearne kodeki nadają się także do szukania grafiki N64 i PSX (przy tym drugim należy jednak ustawić sobie tryb 2-wymiarowy "2-Dimensional"). Poza tym program oferuje sporo kodeków do innych systemów (NES,SNES,SEGA,itd.). Nas jednak interesuje właśnie 4bpp, linear, reverse order. W nim będziemy szukali fontów do naszego przykładu. Czasem trzeba się mocno wysilić by dojrzeć w tym bałaganie jakąś sensowną grafikę, ale w tym wypadku jest to bardzo proste. Fonty znajdują się pod adresem 280000h, to nie są te odpowiedzialne za dialogi, ale też trzeba będzie je zmienić, bo występują w menusach. Te właściwe, od dialogów, znajdują się zaraz pod tymi pierwszymi, mniejszymi. Jeżeli grafika nie jest wyświetlana równo, próbujcie manipulować którymś z tych przycisków:

[attachment=11]6.jpg[/attachment]

Przy czym, zwykle najbardziej przydatne są dwa pierwsze i dwa ostatnie.
Edycja jest bardzo łatwa, TM przypomina proste programy do grafiki. Dobrze jest włączyć sobie "kratki"(View->Tile Grid), dla przykładu zaznaczamy kratkę lub kratki z literką a (uważajcie by przy tym nie wcisnąć któregoś kursora na klawiaturze!), wybieramy z menu kopiowanie i od razu wklejanie, skopiowana literka pojawi się w górnej, lewej stronie ekranu, trzeba ją stamtąd ostrożnie przenieść myszką na wybrane miejsce np. tuż za ostatnią literę oryginalnego alfabetu, potem kliknąć gdzieś obok, i a zostanie wklejona. Wystarczy teraz dorobić ogonek (można wybrać ten sam kolor co litera) i mamy gotowe ą. Końcowy efekt naszych działań może wyglądać tak:

[attachment=10]7.jpg[/attachment]

W ten sposób możemy także edytować każdą grafikę, która nie jest skompresowana, w tym przykładzie może to być także ekran tytułowy (zmieniłem napis "Press Start"):

[attachment=9]8.jpg[/attachment]

Pamiętajcie by nowo-dorobione, polskie literki uwzględnić w tablicy do SnesEdita pod tymi wartościami, pod którymi ich się spodziewacie, czyli w tym wypadku gdzieś na końcu oryginalnego alfabetu. Np. jeśli widoczna na obrazku literka ö (z oryginalnego alfabetu gry) ma wartość 7E, to następny w kolejności, polski font będzie miał wartość 7F. W SnesEdit można używać polskich znaków, co nie jest często spotykane w podobnych programach. Zresztą możecie sami przeanalizować tablicę do tej gry, którą znajdziecie na końcu tego kursu. Widać tam (przynajmniej w dosowym SE i pod Win98PL, bo w Windowsie zobaczycie krzaczki), że polskie fonty występują od wartości 7Fh do 90h.

Edycja skompresowanej grafiki na GBA (kompresja LZ77) - sposób 1

Czasami zdarza się tak, że mimo usilnych starań nie możemy znaleźć jakiejś grafiki. Oznacza to jedno - grafika w romie została skompresowana. Z tą kompresją bywa różnie i nie zawsze jest możliwość edycji takiej grafiki. W przypadku gier na GBA, autorzy wykorzystują czasami kompresję typu LZ77. Można spróbować ją edytować, ale nie jest to łatwe.
Sposób na taką kompresję pokażę na przykładzie gry "Zoids: Legacy". W grze tej skompresowany jest np. napis "PRESS START" na ekranie tytułowym. Będzie nam potrzebny program unLZ-GBA (jeśli korzystasz z Windows98, musisz jeszcze poszukać na sieci pliku gdiplus.dll i umieścić go w folderze z programem) //zamiast niego, zdecydowałem się umieścić NLZ-GBA, bardzo podobny w obsłudze,lecz potrzebujący dodatkowo NET. 2.0. Program jest kolejną wersją programu zwanego wcześniej PokePic, znanemu głównie fanom pokemonów, edytującym skompresowane właśnie w lz77 obrazki z gier z pokemonami. Sprawdzimy go w innej grze.
Uruchamiamy unlz-gba.exe, potem OpenFile i wybieramy nasz rom "Zoids". Potwierdzamy w okienku, które wyskoczyło i po skanowaniu wyświetla się grafika. Z prawej strony mamy przycisk Next, który naciskamy tak długo aż pojawi się obrazek z szukanym Press Start:

[attachment=8]9.jpg[/attachment]

Uwaga: jeśli poznikają wam wszystkie przyciski w programie, to naciśnijcie na klawiaturze TAB i przytrzymajcie ten klawisz, a przyciski znowu się pojawią.
Przyciskami +/- można regulować szerokość obrazka. Wybieramy Save as... i zapisujemy obrazek w formacie GIF (w formacie PNG nie bardzo mi się chciał zapisywać, ale możecie spróbować). Obrazek gif edytujemy np. w PaintShop Pro. Przy edycji należy używać tych samych kolorów co oryginał, względnie użyć mniejszej ilości kolorów. Chodzi o to by po zapisaniu zmienionego obrazka (jako gif lub png), miał on mniej bajtów niż oryginał. Tu przedstawiam przykład przed i po edycji:

[attachment=7]10.gif[/attachment]
[attachment=6]11.gif[/attachment]

Wracamy do unlz-gba i jeszcze raz przechodzimy do naszego "PRESS START". Wciskamy Import i wybieramy zmienionego gifa lub png. Zwróćcie uwagę czy w palecie (prawy dolny róg) nic się nie zmieniło - powinna ona być taka sama jak oryginał. Teraz wybieramy opcję Write to rom (ale zróbcie przed tym kopię bezpieczeństwa romu!). Jeśli wyskoczy monit błędu, to znaczy że wasz obrazek ma za dużą objętość, postarajcie się go jakoś odchudzić (np. zmniejszając liczbę użytych kolorów). Pamiętajcie by od razu sprawdzić efekt w emulatorze. U mnie wyszło to tak:

[attachment=5]12.jpg[/attachment]

Generalnie trzeba się trochę przy tym namęczyć, ale metodą prób i błędów da się uzyskać względnie dobry efekt.


Edycja skompresowanej grafiki na GBA (kompresja LZ77) - sposób 2

Powyższy sposób bywa zawodny. Unlz-gba czasem nie wyszukuje skompresowanych plików, a czasem ma problem z dobrą kompresją i wstawieniem zmodyfikowanej grafiki. Dlatego możemy spróbować innego sposobu i innych programów.
Będą nam potrzebne:
1) - emulator GBA VisualBoy Advance, wersja developerska (może być problem ze znalezieniem więc zamieszczam ją na stronie vba-dev)
2) - program do dekompresji GBA MultiDeCompressor (gbamdc03b2e) (niestety nie udało mi się odnaleźć wspomnianego programu na nintendencji też go nie ma, w zamian alternatywa do niego)
Czynności do wykonania są bardzo proste.
Odpalamy nasz rom we wspomnianej wersji VBA. Tuż przed momentem gdzie wyświetla się nasza grafika wchodzimy do menu emulatora: "Tools->Logging" i tam zaznaczamy opcję SWI. Klikamy OK co skutkuje powrotem do gry. Gdy grafika się wyświetli, znowu wchodzimy do wspomnianego menu i zapisujemy (Save...) log do pliku (dajemy mu dowolną nazwę może być nawet bez rozszerzenia, ale jak chcemy go podejrzeć np. w notatniku to dajemu mu końcówkę .log lub .txt).
To co powinniśmy mieć teraz w jednym folderze to rom z grą (np. zelda.gba), zapisany przez nas log (np. zelda.log), oraz program multidecompressor (gbamdc.exe).
Teraz potrzebny jest wiersz poleceń. Wchodzimy w Menu Start Windowsa, potem Uruchom i Przeglądaj. Tam lokalizujemy plik z naszego folderu z grą: gba.mdc.exe. Potem dopisujemy do niego coś takiego:

-a nazwa_romu.gba nazwa_logu

np. w całości może to wyglądać tak

C:\gry\zelda\GBAmdc.exe -a zelda.gba zelda.log

Po uruchomieniu program dekompresujący na podstawie informacji z logu zdekompresuje nam grafikę i wyciągnie nam pliki z romu. Będą one oznaczone cyframi i miały końcówkę .dat. Nowo wygenerowane pliki przeglądamy sobie w edytorze grafiki, np. tilemolesterze, przy użyciu kodeka dla gba (czyli 4 lub 8bpp, linear, reversed, tryb 1-dimensional). Znalezioną tam interesującą grafikę edytujemy wedle uznania.
Trzeba to teraz wstawić, co będzie jeszcze prostsze. Oprócz plków .dat, dekompresor generuje także plik nazwa_romu.bat który po uruchomieniu skompresuje wszystkie pliki .dat i wepchnie je z powrotem do romu. Z kompresją różnie bywa, dlatego radzę pousuwać z pliku .bat wpisy które nie dotyczą zmienianej grafiki. Np. jeśli otworzymy blik nazwa_romu.bat w notatniku i zoabaczymy coś takiego:

GBAmdc -cL7 001.dat zelda.gba E93138
GBAmdc -cL7 002.dat zelda.gba E9B014
GBAmdc -cL7 003.dat zelda.gba EA1F48
GBAmdc -cL7 004.dat zelda.gba EA94FC
GBAmdc -cL7 005.dat zelda.gba EB08A8
GBAmdc -cL7 006.dat zelda.gba EB9084
GBAmdc -cL7 007.dat zelda.gba EBA9F4
GBAmdc -cL7 008.dat zelda.gba E86FE0


a zmienialismy grafikę np. jedynie w 002.dat to tylko ten wpis możemy zostawić. Są wtedy mniejsze szanse na uszkodzenie romu i w razie czego wiemy co ewentualnie spowodowało wieszanie się gry gdy będziemy testować zmienioną grafikę na emulatorze. Generalnie sposób ów jest mało awaryjny. Pamietajmy jednak, że zawsze lepiej jest żeby zmieniona grafika "ważyła" mniej niż oryginał (użyjcie mniejszej liczby kolorów, detali itp.), tak żeby po kompresji obrazek mógl spokojnie wejść w miejsce oryginału. Jeśli mimo usilnych prób obrazek wychodzi za duży, to kompresor umożliwia "mocniejszą" kompresję. W pliku .bat tam gdzie macie frazę -cL7 zastąpić ją trzeba wtedy -cL7m (ale ostrożnie z tą opcją bo może też powodować błędy, po prostu najlepiej sami sobie to przetestujecie). To tyle, wspomniany sposób dotyczy jedynie kompresji Lzz77, któy jest często stosowany w grach na GBA, ale zawsze możecie się spotkać z udziwnionymi wersjami kompresji, dla której powyższy sposób nie zadziała, a na programy obsługujące kompresję RL i Huffmana przyjdzie nam jeszcze poczekać. Miejcie to na uwadze.

Pointery

Teraz kilka słów o tzw. pointerach. Są to wartości, które wskazują nam gdzie zaczyna się dana partia tekstów. Są też pointery wskazujące koniec tekstu, ale jest to bardzo rzadko spotykane, najczęściej na końcu tekstu znajduje się "przerywacz", czyli pojedyncza wartość (zwykle 00h lub FFh), która ucina wyświetlanie tekstu podczas gry. Każdy system ma swój sposób wyznaczania pointerów, ale każda gra może mieć też odstępstwa od reguł danego systemu. Przy szukaniu pointerów przyda się zatem trochę intuicji. Pointery mogą występować razem, w jednym miejscu (w tzw. tablicy), albo rozrzucone tu i ówdzie w romie. Jak znaleźć taką tablicę? Podam najprostszy przykład. Powiedzmy że mamy w grze listę przedmiotów i chcemy nazwę jednego przedmiotu wydłużyć kosztem drugiego. W edytorze (np. naszym SE) najeżdżamy kursorem na pierwszą literę pierwszej nazwy i spisujemy jej adres (np. CE32A4). Najeżdżamy na pierwszą literę nazwy następnego przedmiotu i też spisujemy jej adres (np. CE32AA). Robimy tak dla kilku następnych przedmiotów (powiedzmy że ich adresy są takie: CE32B0, CE32B6, CE32BA). Teraz za pomocą wyszukiwania wartości hex (w SE jest to klawisz h), wpisujemy coś takiego: A4**AA**B0**B6**BA. Jak może zauważyliście, wpisane wartości są końcówkami adresów każdego przedmiotu, gwiazdkami zastępujemy tu wartość 32h, tak na wszelki wypadek, żeby wartość header'a (nagłówka naszego romu) nie myliła naszych wyliczeń. Jeśli mamy szczęście, to znajdziemy w ten sposób tablicę pointerów. To był najprostszy sposób szukania. Od tej metody istnieją odstępstwa, to znaczy pointery mogą występować w formie trzybajtowej (****A4****AA****B0****B6****BA), jednobajtowej (A4AAB0B6BA), mogą występować w odwrotnej kolejności (BA**B6**B0**AA), lub jeszcze inaczej, np. pointer może wskazywać nie pierwszą literę danego wyrazu, a wartość znajdującą się tuż przed nim. Tak jak wspomniałem trzeba podejść do tego niejako intuicyjnie. Jeśli chodzi o pointery na SNES-a, to SnesEdit ma zaimplementowaną funkcję ich wyszukiwania i automatycznego pokazywania co aktualnie dany pointer wskazuje, ale to dotyczy tylko tej platformy. Jeśli już znajdziemy taką tablicę pointerów, nic prostszego jak tylko zmienić ich wartości, regulując długość nazw przedmiotów czy dialogów stosownie do naszych potrzeb.
Istnieje też inny sposób, ale można go wykorzystać gdy mamy namierzoną potencjalną tablicę z pointerami (np. podejrzewamy że jest tuż nad, lub tuż pod tłumaczonym tekstem). W takim przypadku liczymy literki w wyrazach. Najprościej chyba będzie wyjaśnić to na przykładzie.
Rzućcie okiem na ten obrazek, pochodzi on z Final Fantasy IX, a dokładniej, jest to opis jednego z bossów tej gry.

[attachment=4]13.gif[/attachment]

Chciałem znaleźć pointery do nazw czarów, jakimi ów boss się posługuje. Teraz spójrzcie na cyferki, które oznaczyłem na czerwono. Są to owe pointery, ale w tym momencie chcę zwrócić uwagę na coś innego. Jeśli nad waszym tekstem są powtarzające się w równych odstępach liczby, obok których stoją zwiększające sie wartości (tak jak tutaj widzimy powtarzające się "00" oraz "10"), to najpewniej jest to nasza tablica pointerów. Wracamy do poszukiwań. Mam tu np. takie wyrazy (w nawiasie ich adresy):
Doomsday (8E664D1h), Flare (8E664DAh), Meteor (8E664E0h).
Liczę sobie literki, a może precyzyjniej wartości jakie są od pierwszej litery konkretnego wyrazu, do pierwszej litery wyrazu następnego. Czyli np. Doomsday i Flare 8E664DA-8E664D1=9, różnica między Meteor a Flare wynosi natomiast E0-DA=6 (uproszczając obliczenia, bo tylko końcówki adresów się zmieniają). Przyglądając się naszej podejrzanej tablicy widzimy tendencję rosnącą, która cyklicznie się powtarza:
44001C104900371052001E105800
Sprawdźmy sobie różnicę pierwszych z tych wartości, czyli: 49-44=5. Na razie nic nam to nie mówi. Potem idziemy dalej: 52-49=9 (znajomy wynik, nie?). I jeszcze dalej: 58-52=6. Możemy tak iść dalej, ale znaleźliśmy już to, czego szukaliśmy.
Wnioski:
- wyraz Doomsday (wraz ze znakiem końca [ ]) składa się z 9 bajtów
- jedna z różnic w tablicy to 52-49=9, zatem wartość 49 wskazuje nam pointer do Doomsday
- czyli pointer 49 wskazuje na adres 8E664D1
By łatwiej przeliczyć pointery po zmianie tekstu, liczymy sobie różnicę: 8E664D1-49=8E66488 (i taką wartość sobie odejmujemy od nowego adresu). Np. po wszystkich zmianach wyraz Klątwa (zastępujący tu Curse) miał w końcówce adresu FE (wcześniej było F7). Szukam pointera starego wyrazu: F7-88=6F (jak widać na obrazku, jest takowy z lewej strony). Zmieniam go na: 76 (ponieważ FE-88). I gotowe. Należy przeliczyć pointery do każdego wyrazu, którego położenie zmienialiśmy.

Tworzenie łatek

Patch służy nam po to, byśmy nie musieli zamieszczać całego romu, a jedynie tłumaczenie do niego. Zasada jego powstawania polega na porównywaniu oryginalnego romu z przetłumaczonym, przy czym w łatce zostają zapisywane tylko różnice jakie dzielą oba romy. Do tworzenia łatek w formacie ips służy progam SnesTool. Wbrew nazwie przydaje się także do gbc/gba. Po uruchomieniu wybieramy opcję Create IPS, wybieramy oryginalny a następnie przetłumaczony rom. Po chwili mamy gotowy patch ips. System ips doskonale sprawdza się przy grach na SNES/NES/GBC/GBA. Można go używać także do N64, ale tylko mniejszych romów. Np. przy przetłumaczonej przeze mnie Zeldzie64 nie mogłem go użyć, bo nie uwzględniał zmienionej w romie grafiki. W takim przypadku można skorzystać z któregoś z programów APS, będącym ulepszeniem systemu IPS (programy do znalezienia na stronach o romhackingu). Do dystrybucji tłumaczeń na PlayStation, najlepsze są łatki ppf. Używa się do tego programu MakePPF, zgodnie z załączoną doń instrukcją.

Jeszcze kilka słów o SnesEdit

Na koniec o kilku przydatnych funkcjach w SE:

- Dla standardowych romów SNES-a można automatycznie wyszukiwać pointery (F5, wyszukiwanie klawisz p)

- Wciskając dwukrotnie kombinację ALT+M i wpisując jakąś nazwę, możemy zapamiętać dowolne miejsce, a potem do niego wrócić naciskając ALT+B i wybierając to miejsce z listy, jest to bardzo pomocne w szybkim przemieszczaniu się np. do spisu przedmiotów, nazw miejsc itp.

- Naciskając F4 wchodzimy w tryb graficzny, można tu edytować grafikę, ale interfejs jest dość toporny i bardziej polecam TileMolestera, za to jest tu bardzo użyteczna funkcja wyszukiwania, wyciągania i wsadzania z powrotem plików .tim, w formacie TIM często zapisywane są grafiki dla PSX, dostęp do odpowiedniego menu uzyskuje się z poziomu trybu graficznego, wciskając klawisz t.

- Edycja plików TIM. Standardowe pliki TIM, można edytować w każdym programie typu PaintShop, czy PhotoShop, musi on tylko obsługiwać pluginy graficzne PhotoShopa, na sieci można znaleźć takie pluginy. Trzeba tylko uważać przy zapisywaniu takiego pliku. Należy wybrać odpowiedni format (4, 8, 16 bitowy), oraz wpisać odpowiednie wpółrzędne palety i umiejscowienia w VRAM. Wszelkie dane tego typu można uzyskać, otwierając plik .tim w programie TimUtil, lub w czasie przeglądania obrazka TIM w SnesEdit.

- Czasem zdarza się, zwłaszcza przy grach na psx'a, że ten sam tekst pojawia się kilka, a w skrajnych przypadkach kilkaset (!) razy, nie trzeba każdego wpisywać oddzielnie, wystarczy zaznaczyć przetłumaczony tekst (Shift+Kursor), skopiować (Ctrl+Insert), a potem wklejać tyle razy ile potrzeba (Shift+Insert)

- Nie musimy tłumaczyć tekstu w SE, możemy go zdumpować, choć tak naprawdę ma to sens tylko wtedy , gdy chcemy obdzielić tekstem do tłumaczenia kilka osób, w innym wypadku lepiej jest tłumaczyć w SE, bo to bardzo przyspiesza i ułatwia pracę. Aby zdumpować tekst należy go zaznaczyć (Shift+Kursor), nacisnąć klawisz F7, a potem d, wpisujemy jak ma się nazywać plik tekstowy do którego dumpujemy i potwierdzamy. W przypadku iso mamy możliwość wyboru, czy zrzucamy cały tekst z płyty (ale nie polecam, za dużo śmieci, chyba że mamy dobrze opracowaną, specjalnie przygotowaną tablicę), czy tylko zaznaczony tekst. Tak samo ze wstawianiem, wciskamy F7 oraz i, a potem wybieramy plik który chcemy wstawić z powrotem do romu/iso. Nie musimy się przy tym martwić o adres początku i końca tekstu (te informacje są we wstawianym pliku), należy jedynie uważać przy tłumaczeniu w edytorze tekstu, by nie przekroczyć długości oryginalnego tekstu.

- Przy ładowaniu dużych plików, jakimi są iso, możemy ustalić czy ma ono być ładowane do pamięci, czy doczytywane, dobrze jest z tego korzystać zwłaszcza przy słabszym komputerze.

Edycja plików TIM (PSX)

W grach na PlayStation często można się spotkać z grafiką w formacie TIM. By sprawdzić czy nasza gra posiada takie pliki i jak one wyglądają, należy mając załadowane w SnesEdit iso gry nacisnąć klawisz F4, a następnie T. Program przeskanuje nasze iso (to może potrwać dłuższą chwilę) i jeśli takowe znajdzie, wyświetli pliki TIM w różnych trybach. Standardowo pierwszym wyświetlanym trybem jest 4 bitowy, ale możemy też przełączać się na 8, 16 oraz 24 bitowe (klikając myszą na odpowiednie ikony). Skanowanie na obecność TIM-ów to proces jednorazowy, program zapisze informacje o nich w katalogu nazwa_naszego_iso.SE/TIM/ i przy każdorazowym uruchomieniu SnesEdit nie będzie ich już szukał.
Dla przykładu wziąłem grę Tenchu 2. Po skanowaniu okazało się, że mam ponad 20 tysięcy plików 4bitowych (sporo szukania, ale lepiej mieć za dużo niż wcale), kilkadziesiąt 8 i 16 bitowych. Powiedzmy że szukam napisów z ekranu tytułowego gry, na ekranie emulatora widzę graficzne napisy typu START, OPTIONS itp.

[attachment=3]14.jpg[/attachment]

, zatem będąc w SnesEdit (F4, T) szukam kursorem odpowiedniego obrazka. Znalazłem coś takiego:

[attachment=2]15.jpg[/attachment]

Zapisuję sobie na kartce następujące dane (z tabelki po prawej stronie):
1. Nazwę obrazka - jest ona jednocześnie adresem tego obrazka, u mnie np. 0033586Ch
2. Clut Nr - czyli liczbę palet, tu akurat wartość wynosi 1 (maksymalnie powinna być do 16, ale spotykałem się z większą ich ilością, CLUT powyżej 16 może powodować problemy przy edycji, ale można to ominąć konwertując TIM na BMP, za pomocą TimUtil)
3. Palette X (u mnie 768)
4. Palette Y (259)
5. Image X (960)
6. Image Y (80)
(Wszystkie powyższe informacje można też uzyskać otwierając plik TIM w TimUtil.)
Będąc jeszcze w SnesEdit wybieram opcję Save as TIM. Program zapisze obrazek we wspomnianym wcześniej folderze TIM, dodając rozszerzenie .t04 (dla 8bitowych będzie to rozszerzenie .t08 itd.). Sprawdźmy czy nazwa pliku zgadza się z tą, którą spisaliśmy w SnesEdit (powinna być taka sama, ale program zwykle błędnie ją zapisuje), jeśli nie, to zmieńmy ją. Np. u mnie plik miał nazwę 00336498.t04, to zmieniłem ją na 0033586C.tim (zauważcie że rozszerzenie też zmieniamy na .tim, potem wyjaśnię czemu).
Teraz przyszedł czas na edycję naszego obrazka. Będzie nam potrzebny program typu PhotoShop lub PaintShop (ja akurat korzystam z PaintShop). Musimy poszukać na sieci pluginów TIM do PhotoShopa, ich nazwy: Timexpe.8be, Timfmte.8bi, TIMformatE.8BI. By zainstalować pluginy w PaintShopie, trzeba umieścić je w folderze Plugins z katalogu z programem.
Otwieramy w PaintShopie nasz plik .tim (program po nim rozpoznaje typ pliku, właśnie dlatego zmieniliśmy rozszerzenie na .tim). Przystępujemy do zmian. Powinniśmy zachować oryginalną paletę kolorów, więc używajmy Dropper Tool (czyli pobierania oryginalnego koloru). Do zmiany napisów użyłem narzędzia Text Tool. Efekt jest taki:

[attachment=1]16.jpg[/attachment]

Po dokonaniu zmian zapisujemy plik, program przy zapisie poprosi o podanie danych, zaznaczamy odpowiedni tryb (u mnie będzie to 4 bit Clut). W Clut section wpisujemy wartości z Palette X i Y, a w Pixel data section wartości z Image X i Y. W Data size wpisujemy Clut Nr. Klikamy OK.
Teraz wracamy do SnesEdit i klikamy na ikonę Insert-Tim, wybieramy nasz zmieniony obrazek i jeśli wszystko zrobiliśmy dobrze, zostanie on zapisany zamiast oryginalnego (możemy go od razu zobaczyć). Teraz tylko wystarczy sprawdzić w emulatorze efekt naszych poczynań:

[attachment=0]17.jpg[/attachment]
Jak widać, w tym przykładzie zmieniłem także 8 bitowy obrazek z tytułem.

Zakończenie

Jeśli macie jakieś problemy (np. ze zrobieniem tablicy), jeszcze raz prześledźcie opis, robiąc przykład z grą Cima, zamieszczam tu spakowaną tablicę oraz patch ips, zawierający polskie fonty do tej gry. [Cima, tablica + fonty pl]
Załączniki
17.jpg
16.jpg
16.jpg (2.37 KiB) Przejrzano 15171 razy
15.jpg
15.jpg (2.45 KiB) Przejrzano 15171 razy
14.jpg
13.gif
12.jpg
12.jpg (11.3 KiB) Przejrzano 15171 razy
11.gif
11.gif (970 Bajtów) Przejrzano 15171 razy
10.gif
10.gif (986 Bajtów) Przejrzano 15171 razy
9.jpg
8.jpg
8.jpg (15.67 KiB) Przejrzano 15171 razy
7.jpg
7.jpg (20.09 KiB) Przejrzano 15171 razy
6.jpg
5.jpg
5.jpg (3.47 KiB) Przejrzano 15171 razy
4.jpg
4.jpg (4.22 KiB) Przejrzano 15171 razy
3.jpg
2.jpg
1.jpg
1.jpg (4.22 KiB) Przejrzano 15171 razy

Wróć do „Poradniki”



Kto jest online

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