Tawerna Bibliotekarzy Strona Główna
RSS Panel

Poprzedni temat «» Następny temat
Pułapki modowania BG1
Autor Wiadomość
Yarpen 

Wysłany: 2006-09-03, 13:41   Pułapki modowania BG1

Technikalia, czyli pułapki modowania BG1 by Zed Nocear
Źródło: http://free.of.pl/z/zed.nocear/

Większość poradników, jakie można znaleźć w sieci, głównie angielskojęzycznych, opisuje sposoby modowania BG2, nic dziwnego zresztą, bo do tej gry istnieje najwięcej modów spośród gier IE. Tymczasem mimo generalnego podobieństwa wiele tych zasad nie odnosi się do BG1 - najstarszej gry na enginie IE. Stąd różne niepowodzenia, kiedy próbujemy modować, ściśle wzorując się na którymś z tych poradników. Poniżej chciałbym przedstawić najistotniejsze różnice między enginem BG1 a BG2.

1. Zamiana tekstu Windows/BG2 ze znakami polskimi na tekst poprawnie odtwarzany w BG1
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ć przekonwewrtowany na potrzeby BG1.

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

Małe litery:

ą - î
ć - ď
ę - đ

ł - ń
ń - ň
ś - ô
ó - ó
ź - ő
ż - ö

Duże litery:

Ą - ĺ
Ć - ć
Ę - ç
Ł - č
Ń - ę
Ś - ë
Ó - é
Ź - ě
Ż - í

Dołączam 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, 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).

2. 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~

// te dwa 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ć.

3. Formaty portretów w BG1 a w BG2
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.

4. Użycie tokenów w dialogach BG1
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 Baal”, opracowanej przez Shaggie’go, oraz tutoriala o tokenach w BG1 ze strony Black Wyrm Lair
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme made by Aiglon von Lupus based on subSilver