by Zed Nocear



I. Zamiana tekstu Windows/BG II ze znakami polskimi na tekst poprawnie odtwarzany w BG I


BG2 korzysta z kodowania znaków Windows i nie trzeba specjalnych zabiegów, aby tekst był prawidłowo wyświetlany w grze. W przeciwieństwie do BG2, BG1 (wersja PL) stosuje własny system kodowania polskich znaków, niekompatybilny z niczym innym i tekst napisany w edytorze tekstowym musi być przekonwertowany na potrzeby BG1.


Najpierw zmieniamy znaki ń na ň, ę na đ i ć na ď (zaznaczone na niebiesko), bo potem te znaki same posłużą do kodowania innych znaków w BG1 (ł na ń, Ń na ę i Ć na ć - zaznaczone na czerwono). Resztę można zamienić w dowolnej kolejności. Małego ó w ogóle nie trzeba zamieniać.



Małe litery:
ą - î ć - ď ę - đ
ł - ń ń - ň ś - ô
ó - ó ź - ő ż - ö

Duże litery:
Ą - ĺ Ć - ć Ę - ç
Ł - č Ń - ę Ś - ë
Ó - é Ź - ě Ż - í

Dołączam spakowany plik w Visual Basicu do MS Worda zawierający dwa makra przeprowadzające całą konwersję w obie strony automatycznie.


Wczytanie makr do MS Worda: To moje pierwsze makra, więc za dużo biegłości w obchodzeniu się z nimi nie mam. Jeśli masz ściągnięty plik BG1konwersjaPL.bas gdzieś na dysku, wypakuj go, otwórz Worda, zamknij wszystkie dokumenty (też domyślny), wybierz Narzędzia/Makro/Edytor Visual Basic. W oknie edytora wybierz z menu File/Import File..., wskaż ten plik. Potem wybierz File/Save Normal a następnie File/Close and Return to Microsoft Word i od tej pory cieszysz się zainstalowanymi makrami w Wordzie. Jeśli ktoś wie, jak to zrobić prościej, to niech napisze do mnie.


Przekodowywanie tekstów w Wordzie: Masz np. tekst w pliku TRA (rozszerzenie pliku używane przez WeiDU), otwierasz go jako zwykły tekst (format *.txt), wybierasz kodowanie Windows (domyślnie), potem używasz makro i zapisujesz ponownie jako zwykły tekst, wybierając kodowanie Windows (domyślnie). Word może dodać kilka znaków końca wiersza i pustych linii na końcu, ale tekstu nie zepsuje (WeiDU to ignoruje).




II. Dodawanie NPC-a przyłączalnego do drużyny w BG1


Jeśli postać CRE ma być przyłączalna do drużyny, to trzeba ją dopisać do Baldur.gam. Inaczej gra się posypie w momencie przyłączenia postaci do drużyny, lub najpóźniej przy próbie przejścia na inny obszar.


W BG2 ten punkt jest nieistotny i przemilczany w poradnikach. Zarówno CRE "zwykłe" jak i przyłączalne do drużyny wprowadza się tak samo przez wpis do ARE lub skryptu obszaru, ponieważ engine sam wpisze postać do Baldur.gam, w momencie przyłączenia do drużyny.


W BG1 sprawa jest bardziej problematyczna, bo musimy sami zadbać o wpisanie NPC-a z naszego moda do Baldur.GAM i nie ma na to jednego dobrego sposobu. Poniżej podaję dwie metody do zastosowania w instalkach WeiDU (praktycznie wszystkie mody teraz tak się pisze).


METODA 1:

Od wersji WeiDU 1.37 istnieje polecenie ADD_GAME_NPC (udokumentowane dopiero w wersji WeiDU 1.46), które wstawia NPC-a do Baldur.GAM, zarówno wersji domyślnej używanej przy starcie nowej gry jak i wszystkich kopiach stanowiących część zapisów gry w katalogach SAVE i MPSAVE. Składnia polecenia jest następująca:



ADD_GAME_NPC "mynpc" "ar2600" #123 #456

gdzie:

"mynpc" - nazwa pliku CRE naszego NPC-a (bez rozszerzenia)

"ar2600" - nazwa obszaru, gdzie NPC ma się pojawić (bez rozszerzenia)

#123 - współrzędna X na mapie obszaru

#456 - współrzędna Y na mapie obszaru


  • Metoda jest wyjątkowo prosta w użyciu.

  • Podstawową zaletą jest brak konieczności zaczynania gry od nowa, bo modyfikowane są też zapisy gry.

  • To samo może być też największą wadą metody. W razie jakiegoś błędu, uszkodzona zostanie nie tylko gra, ale też wszystkie zapisy stanu. Reinstalacja gry nie pomoże. Instrukcja WeiDU lojalnie uprzedza o konieczności wykonania back-up-u save-ów przed zainstalowaniem takiego moda przez użytkownika, bo instalator tego nie robi.

  • Instrukcja musi być użyta na końcu instalki, po wszystkich modyfikacjach pliku CRE NPC-a, bo jest on wstawiany w całości do Baldur.GAM. W związku z tym nie działa też dopasowanie wersji NPc-a do poziomu głównego bohatera według NPCLEVEL.2DA.

  • Drobną wadą jest też brak możliwości ustawienia, w którą stronę NPC jest zwrócony w momencie jego kreacji.


METODA 2:

Zmodyfikowanie pliku Baldur.GAM "własnoręcznie", przy użyciu podstawowych instrukcji WeiDU:



COPY_EXISTING ~baldur.gam~ ~override~

// (dwa pierwsze bloki poniżej są zawsze takie same, więc nie ma co się nad nimi zastanawiać)

// nowy blok bajtów na początku offsetu bloków wszystkich non-party NPC-ów

INSERT_BYTES 0xB4 0x160
WRITE_LONG 0x140 0xFFFFFFFF
WRITE_LONG 0x144 0xFFFFFFFF
WRITE_LONG 0x168 0xFFFFFFFF
WRITE_SHORT 0x16C 0xFFFF&;

// zmiany w nagłówku pliku Baldur.GAM

READ_LONG 0x34 npc_count
WRITE_LONG 0x34 ("%npc_count%" + 1) // nowa liczba NPC-ów
READ_LONG 0x20 party_offset
WRITE_LONG 0x20 ("%party_offset%" + 0x160) // nowy party_offset
WRITE_LONG 0x28 ("%party_offset%" + 0x160) // nowy unknown_offset
WRITE_LONG 0x50 ("%party_offset%" + 0x930) // nowy journal_offset

// wstawienie do nowego bloku własnych danych NPC-a

//DANE PRZYKŁADOWE (dobre do testów NPCa)

WRITE_ASCII 0xC0 ~AMORTH~ // nazwa pliku CRE "podstawowego" NPC-a,
// może być podmieniany na inny CRE zależnie od poziomu
// głównej postaci gracza według wpisu w npclevel.2da
WRITE_LONG 0xC8 0x6            // ostatnia liczba to kierunek, w jakim NPC jest zwrócony na starcie
WRITE_ASCII 0xCC ~AR2600~ // nazwa pliku ARE obszaru, gdzie się pojawi nasz NPC
// (tu Candlekeep, obok miejsca startu gry)
WRITE_SHORT 0xD4 0x3D7      // ostatnia liczba to współrzędna X pozycji NPC-a na planszy
// (trzeba sobie przeliczyć liczbę z postaci dziesiętnej
// do szesnastkowej np. kalkulatorem Windows)
WRITE_SHORT 0xD6 0x31D      // ostatnia liczba to współrzędna Y (jak wyżej)

Nowsze wersje WeiDU bez problemu akceptują także liczby w systemie dziesiętnym, więc ostatni blok może wyglądać również tak:



WRITE_ASCII 0xC0 ~AMORTH~
WRITE_LONG 0xC8 6
WRITE_ASCII 0xCC ~AR2600~
WRITE_SHORT 0xD4 983
WRITE_SHORT 0xD6 797

  • Metoda jest względnie prosta, nie wymaga przygotowania spreparowanego Baldur.GAM lub jakiegoś jego fragmentów, cała robotę wykonuje kilka linijek instrukcji w pliku instalacyjnym TP2.

  • Modyfikowany jest tylko defaultowy plik Baldur.GAM, dotychczasowe save'y pozostają niezmienione.

  • Działa podmienianie wersji NPC-a przez zapis w NPCLEVEL.2DA w zależności od poziomu postaci gracza.

  • Postać na starcie jest zwrócona w kierunku, w jakim ustawiliśmy.

  • Wadą tej metody jest że aby dodany NPC pojawił się w grze, trzeba zacząć całą grę od nowa. Metoda nie nadaje się do modyfikacji Baldur.GAM bezpośrednio w save'ie, ponieważ w trakcie gry plik ten jest rozbudowywany o szereg nowych informacji (struktura się komplikuje) i taka modyfikacja może go uszkodzić.




III. Formaty portretów w BG I a w BG II


W obu grach wykorzystywany jest pozornie identyczny system portretów dla postaci drużyny: pliki w formacie BMP w 16 milionach kolorów (True Color), w trzech rozmiarach: duże 210x330 w menu tworzenia lub modyfikacji postaci, średnie 110x170 jako portret na ekranie statystyk postaci i mały 38x60 na prawym pasku członków drużyny na ekranie gry. Nazwa pliku portretu może mieć maksimum 8 liter, w tym maksimum 7 liter właściwej nazwy i obowiązkowo ostatnia litera oznaczająca rozmiar portretu.

Istnieją jednak dwie drobne różnice powodujące, że portrety przygotowane do BG2 (najczęściej dostępne w sieci) nie będą rozpoznawane przez BG1:

  • Ostatnia litera w nazwie dla dużych, średnich i małych portretów w BG2 to odpowiednio L, M, i S, podczas gdy w BG1 to G, L i S. Dlatego średni portret z BG2 (xxxxxxxM.BMP) nie będzie rozpoznawany przez BG1 bez zmiany nazwy (wymagane xxxxxxxL.BMP).

  • W BG1 najmniejszy portret ma indeksowaną paletę 256 kolorów a nie 16 milionów. Efekt bywa nieprzewidywalny, czasami BG1 pokazuje portret prawidłowo, a czasami wyświetla defaultowy portret ze znakiem zapytania.




IV. Użycie tokenów w dialogach BG I


Przy tworzeniu tekstów dialogów w BG2 często wykorzystuje się tzw. tokeny, czyli coś w rodzaju tekstowych zmiennych, pod której gra w zależności od cech głównego bohatera, rozmówcy lub czasu gry podstawia konkretne teksty.


Powszechnie znana jest lista ponad 30 tokenów funkcjonujących w BG2. Mniej znany jest fakt, że tylko 9 z nich prawidłowo funkcjonuje w BG1:

<CHARNAME> - zwraca imię głównego bohatera

<DAY> - zwraca dzień miesiąca w postaci cyfry

<DAYANDMONTH> - zwraca dzień i miesiąc (np. 9 Flamerule)

<DURATION> - liczba dni i godzin od początku gry (np. 68 dni i 7 godz.)

<DURATIONNOAND> - jw. ale bez "i" (68 dni 7 godz.)

<GABBER> - zwraca imię rozmówcy (np. Minsc)

<MONTHNAME> - podaje nazwę miesiąca (np. Flamerule)

<HOUR> - podaje godzinę w grze

<YEAR> - podaje rok w grze (np. 1369)


Pozostałe tokeny albo zwracają nazwę miesiąca jak <MONTHNAME>, błędne wartości liczbowe lub NIC. Szczególnie to ostatnie, występujące dla tak użytecznych tokenów w BG2 jak <LADYLORD> i <PRO_LADYLORD>, jest bardzo łatwe do przeoczenia w trakcie testowania dialogów w grze BG1.



Tutorial opracowany na podstawie listy tokenów do polskiej wersji BG2 z forum Children of Bhaal, opracowanej przez Shaggie’go, oraz tutorialu o tokenach w BG1 ze strony Black Wyrm Lair





Podziękowania, opinie i komentarze