insertX

Wszelkie kwestie techniczne.
Regulamin forum
1. W miarę możliwości prosimy o załączanie plików przez nasze forum, nie na zewnętrznych serwerach. Pliki nie znikną wtedy po upływie pewnego czasu. 2. Jeśli chcecie uzyskać pomoc przy rozpracowaniu plików (np. z tekstem, czcionką) załączajcie je do postów - nie każdy przecież posiada tłumaczoną przez Was grę.
Awatar użytkownika
ma_Rysia
Posty: 61
Rejestracja: 19 maja 2008, o 22:47
Grupa: BezNazwy

insertX

Postautor: ma_Rysia » 1 paź 2008, o 21:57

Witam! Przedstawiam wam mój program o nazwie insertX. Służy on do podmiany tekstu w romach/plikach iso.

Aby skorzystać z programu, należy w tym samym katalogu, w którym będzie uruchamiany, utworzyć plik o nazwie insertX.cfg (lub zmodyfikować przykładowy, dołączony do programu w archiwum instalacyjnym). Plik insertX.cfg jest zwykłym plikiem tekstowym - można go utworzyć i edytować w Notatniku bądź dowolnym podobnym edytorze.

W tym pliku znajdują się następujące opcje konfiguracyjne:

#text - nazwa (lub ścieżka dostępu) do pliku zawierającego przetłumaczony tekst
#rom - nazwa/ścieżka do pliku z ROMem tłumaczonej gry
#table - nazwa/ścieżka do pliku zawierającego tablicę
#end_line - ciąg znaków, który będzie używany jako oznaczenie końca dialogu
#pointer - rodzaj wskaźników używanych przez grę

Aby linia konfiguracyjna została prawidłowo zinterpretowana, nazwa opcji powinna znajdować się na samym początku linii, a po jednej spacji wartość opcji, czyli np. nazwa pliku. Przykładowo:

Kod: Zaznacz cały

#text tekst.txt #rom Dragon Ball - Advanced Adventure (E) (M5).gba #table tab.tbl #end_line [*] #pointer GBA
Wszystkie niepoprawne linie będą interpretowane jako komentarze.

Format pliku z przetłumaczonym tekstem (#text)
W pierwszej linii należy umieścić dwie wartości heksadecymalne, oddzielone spacjami: pozycja, na której ma być umieszczany tekst w ROMie oraz pozycja bloku wskaźników do tekstu. Nie należy stosować żadnych przedrostków typu 0x. Wartości te można odczytać za pomocą hex-editora.

W kolejnych liniach można umieszczać kolejne teksty do umieszczenia w ROMie. Dialogi są oddzielane od siebie ciągiem znaków określonym w opcji #end_line. W naszym przykładzie będzie to [*][/b].

Wszelkie znaki specjalne jak np. podział linii (Enter), tabulacja są pomijane.

Przykładowy plik z tekstami wygląda następująco:

Kod: Zaznacz cały

B595AE E9E78C Pewnego razu, głko w górach,/wielka przygoda miała właśnie/się rozpocząć...[*] Kiedy Goku ciężko trenował,/zjawiła się dziewczyna.[*] Słodka, zdecydowana./Miała na imię Bulma.[*] Gdy Bulma zobaczyła pamiątkę/Goku po dziadku - kulę, złożyła/mu niezwykłą propozycję.[*] Była to piękna kula, z gwiazdami/wewnątrz. Nazywała się/Smoczą Kulą.[*] Niezwykłe były to kule,/bowiem gdy zbierze się je/wszystkie siedem...[*]...ponoć ukaże się Smok Shenlong/i spełni jedno życzenie.[*] Tak oto Goku i Bulma wyruszyli...[*] ...na poszukiwanie pozostałych/Smoczych Kul![*]
Format pliku z tablicą (#table)
Format pliku tablicowego jest uproszczoną wersją formatu używanego w większości hex-editorów. Każda linia tego pliku określa jeden kod znaków. Najpierw należy umieścić heksadecymalny kod znaków (bez przedrostków typu 0x), następnie znak =, po czym ciąg znaków mu odpowiadający. Nie można używać znaków takich jak koniec linii (Enter), tabulacja itp.

Zarówno wartości heksadecymalne, jak i ciągi znaków, mogą być różnej długości. Ciągi znaków mogą zawierać spacje i polskie znaki. Nie jest ważna kolejność wpisów.

Można umieszczać komentarze w tablicy (przydatne do np. wyłączania niektórych wpisów) - jako komentarz traktowane są te linie, w których pierwszy znak jest znakiem #.

Fragment przykładowego pliku z tablicą:

Kod: Zaznacz cały

3500=r 0000=0 0100=1 0200=2 0A00=A 0B00=B 0C00=C 0D00=D 4000=. 4100=, 4200=! 4300=? 4700=- 4800=( 4900=) 5200=' 5400=+ 2B00=h 2C00=i 2D00=j 5E00=Ć 6000=Ź 6500=Ś 8D00=ó 8F00=ô 9000=ź 9600=ż 9A00=(A) 9E00=(Prawo) #9F00=(Lewo) - zakomentowana linia 5401=(*) # znak końca dialogu: 5501=[*] # znak spacji: 51010500=
Tablica musi zawierać wszystkie ciągi użyte w pliku tekstowym. W przeciwnym wypadku działanie programu zakończy się błędem.

Typy wskaźników (#pointer)
Program w obecnej wersji obsługuje większość standardowych rodzajów wskaźników. Do poprawnego działania programu wymagane jest, aby blok wskaźników był spójny, tzn. żeby każdy kolejny wskaźnik następował bezpośrednio po sobie. W bloku muszą znajdować się wskaźniki do wszystkich dialogów umieszczonych w pliku tekstowym.

Jako argument opcji #pointer można użyć wartości GBA lub NES - które oznaczają standardowe wskaźniki używane na tych konsolach - a także specjalnej składni umożliwiającej używanie innych typów. Jej format to std_XX_YB, gdzie XX może przyjąć wartość le lub be - co oznacza odpowiednio kolejność bajtów little-endian i big-endian, a Y to rozmiar wskaźnika w bajtach. Na 32-bitowych systemach (większość obecnie instalowanych na komputerach PC) największy obsługiwany rozmiar to 4 bajty.

GBA jest synonimem opcji std_le_4B, a NES - std_le_2B.

Program uruchomić można z linii poleceń, a także po prostu dwukrotnie klikając na ikonę jego pliku wykonywalnego. Program w przypadku pomyślnego zakończenia nie wyświetli nic, natomiast w przypadku błędu jego opis zostanie wypisany na ekran i program będzie czekał na naciśnięcie dowolnego klawisza.

UWAGA! Program w przypadku wystąpienia błędu lub niewłaściwego użycia może uszkodzić plik z ROMem. Mocno zalecane jest utworzenie kopii zapasowej ROMu przed uruchomieniem.

Mile widziane są wszelkie sugestie na temat poszerzenia możliwości programu.

Wraz z plikiem wykonywalnym dołączony jest kod źródłowy programu w C++ (powinien skompilować się pod większością kompilatorów - testowany był na g++ w wersji MinGW z GNU make) oraz dokumentacja kodu w formacie HTML. Dokumentację można zaktualizować za pomocą programu doxygen - odpowiednie pliki konfiguracyjne oraz samo źródło dokumentacji również jest dołączone.
Załączniki
insertX.rar
Archiwum z programem.
(324.34 KiB) Pobrany 163 razy

Awatar użytkownika
bemberg
Reptilianin
Posty: 1184
Rejestracja: 31 maja 2008, o 12:03
Grupa: wsparcia
Kontakt:

Re: insertX

Postautor: bemberg » 2 paź 2008, o 16:25

Jak dla mnie kawał dobrej roboty :) W następnych wersjach fajnie by było, żeby te narzędzie bardziej przypominało program, czyli żeby wszystko było w oknie programu (cała konfiguracja). Może warto byłoby to przepisać na Delphi, wtedy można by było stworzyć łatwo ładny interfejs?
I może jeszcze jakiś poradnik (może opcja w tym programie?) rozpoznawania jakie pointery używane są w danym romie/iso.
http://www.wykop.pl/link/2516381/playlo ... omentarzy/
Tłumaczymy w rytmie serca? Prawda o Playloc, BDIP i Tłumaczymy w rytmie serca.

Awatar użytkownika
Berion
Posty: 598
Rejestracja: 3 cze 2008, o 08:34
Grupa: żadna, freelancer :P
Kontakt:

Re: insertX

Postautor: Berion » 2 paź 2008, o 19:18

Nie wiedziałem bemberg, że tylko Delphi ma ładne ui. ;P
~ Primum non nocere ~

Awatar użytkownika
bemberg
Reptilianin
Posty: 1184
Rejestracja: 31 maja 2008, o 12:03
Grupa: wsparcia
Kontakt:

Re: insertX

Postautor: bemberg » 2 paź 2008, o 20:34

Jak Ty się lubisz czepiać :p Chyba zaznaczyłem, że w Delphi będzie najłatwiej zrobić ładne gui, bo tam jest to robione "odręcznie"
http://www.wykop.pl/link/2516381/playlo ... omentarzy/
Tłumaczymy w rytmie serca? Prawda o Playloc, BDIP i Tłumaczymy w rytmie serca.

Awatar użytkownika
ma_Rysia
Posty: 61
Rejestracja: 19 maja 2008, o 22:47
Grupa: BezNazwy

Re: insertX

Postautor: ma_Rysia » 2 paź 2008, o 21:09

Jeśli program miałby mieć GUI to było by ono napisane w Qt. Ale GUI nie będzie.

Awatar użytkownika
Berion
Posty: 598
Rejestracja: 3 cze 2008, o 08:34
Grupa: żadna, freelancer :P
Kontakt:

Re: insertX

Postautor: Berion » 2 paź 2008, o 23:20

@bemberg
Taka moją natura :}}

Co do programu to niestety nie mam czasu teraz się bawić takimi rzeczami. Jak tylko znajdę na to chwilę to obaczę. Nawet ciekaw jestem naszego, lokalnego wypieku (bo spójrzmy prawdzie w oczy: mało kto w Polsce pisze tego typu soft).
~ Primum non nocere ~


Wróć do „Technikalia”



Kto jest online

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