ďťż
 
 
 
 

Wštki


[Modding] WeiDU - Tworzenie NPC (Nastian)



Orish - Sob 19.09.2009, 17:32:54
" />WeiDU— Tworzenie NPC

-------------------------------------------------------------------------

Tworzenie przyłączalnej postaci jest bardzo proste, mimo wszystko zauważyłem, że wiele osób ma z tym problemy. Poradnik ten ma za zadanie ułatwić tworzenie prostych postaci. Nim zaczniesz czytać dalszą część tego poradnika, powinieneś zebrać następujące programy:

Infinity Engine Creature Maker (najlepiej wersję 3.1.3)
Near Infinity (wymaga Java Runtime Environment w wersji 1.4.2)
Infinity Explorer (najlepiej wersję 0.75)
WeiDU (kiedy to piszę dostępny jest w wersji 161)
MetaPad (najlepiej polską wersję 3.5)

Zacznijmy od prostej i znanej wszystkim czynności jaką jest stworzenie nowej postaci. Zakładam, że każdy z was niejednokrotnie tworzył swą postać, muszę jednak zaznaczyć, że tym razem należy zrobić to w grze dla wielu graczy, gdzie znajduję się specjalna do tego opcja. Ma to na celu nie tylko zaoszczędzenie sporej ilości czasu, która zmarnowałaby się na oglądaniu po raz kolejny tego samego rozpoczęcia gry, gdybyśmy bowiem przygotowali nową postać w grze dla jednego gracza, gra uznałaby ją za dziecię Bhaala i nadałaby jej wszystkim znane moce typu 'Pomniejsze drążenie Larlocha' czy 'Leczenie lekkich ran'.
Podczas tworzenia postaci nie zwracaj szczególnej uwagi na biegłości czy też na cechy, gdyż wszystko będzie można potem zmienić, aczkolwiek staraj się ją tak ukierunkować by tych zmian było jak najmniej. Warto również podczas tego etapu dać nowej postaci swoje portety, jeśli znajdują się one w folderze 'portraits' w głównym katalogu gry. Zachęcam również do tworzenia własnej postaci. Najważniejsze co powinno się zrobić w tymże momencie to ustalić rasę, klasę i ewentualnie podklasę oraz przede wszystkim kolory. Późniejsze ustalanie kolorów może być bowiem bardzo trudne, jeśli nie potrafisz sobie wyobrazić postaci. Na końcu eksportujemy postać. Ja stworzyłem zawadiakę o imieniu Karvus i eksportowałem go jako Karvus8.

Następnie tworzymy katalog, w którym będzie znajdował się nasz mod. Może on znajdować się w dowolnym miejscu, gdyż nie jest to w tej chwili istotne. Przykładowo stworzyłem katalog o nazwie 'Karvus NPC'. Wchodzimy do niego i tworzymy kolejny katalog (nazwa może być obojętna, ale zalecam taką, która wiąże się w jakiś sposób z modem). W moim przypadku jest to podkatalog 'karvus'. Do głównego katalogu naszego moda kopiujemy plik 'WeiDU.exe', oraz dowolny pusty plik tekstowy, tyle że z końcówką '.tp2' zamiast '.txt' (można to zrobić na różne sposoby, ale nie będę się nad tym rozpisywał, nie jest to bowiem celem tego poradnika). Ostatecznie w katalogu 'Karvus NPC' będą znajdowały się: plik wykonywalny WeiDU, plik '.tp2' oraz podkatalog 'karvus'.

Zalecam teraz zainstalowanie i uruchomienie IE Creature Maker. Tym, którzy mają problemy z uruchomieniem tego programu przypominam, że wymaga on specjalnych bibliotek Visual Basica dostępnych jako 'VB6pkg'. Na początku program poprosi nas o ścieżkę gry. Klikamy na opcji 'Add', a potem wybieramy grę, w zależności od tego czy mamy zainstalowany Tron Bhaala czy też nie wybieramy 'Baldur's Gate 2: SoA' lub 'Baldur's Gate 2: ToB'. Następnie należy zaznaczyć opcję 'Have the game files' i wyszukać główny katalog gry. Po tych czynnościach klikamy na 'OK'. Pojawi się okienko, w którym mamy wpisać nazwę dla nowej ścieżki - niech to będzie przykładowo 'BG2'. Zatwierdzamy ten wybór. Zauważmy, że w liście ścieżek pojawi się nowo utworzone przez nas 'BG2'. Klikamy na nie i wybieramy 'Select' znajdujący się pod spodem. W ten sposób zawiadomiliśmy program o tym gdzie mamy zainstalowaną grę. Program może wydawać się z początku trochę skomplikowany, ze względu na wielką ilość opcji, ale postaram się wytłumaczyć wszystkie najważniejsze, czyli te, które będą nam potrzebne. Nasze pierwsze zadanie nie będzie trudne, gdyż będzie polegało na importowaniu stworzonej przez nas wcześniej postaci. W tym celu klikamy na zakładkę 'File' znajdującą się w lewym górnym rogu. Ukaże nam się kilka opcji, z którym wybieramy 'Open'. Znajdujemy się w folderze 'override', przejdźmy jednak do katalogu 'characters'. Jeśli nasza postać nie będzie widoczna to zmień 'pliki typu' z 'Creature File (.cre)' na prawidłowy, czyli 'Character File (.chr)'. Wczytaj eksortowaną postać (w moim przypadku jest to 'Karvus8'). Nasza postać zostanie załadowana. Pierwsze co powinniśmy zrobić to odhaczyć opcję 'exportable'. Jeśli tego nie zrobimy będziemy mieli kłopoty z wywalaniem naszej postaci z drużyny. Jest to jeden z najczęstszych problemów pojawiających się przy tworzeniu przyłączalnego NPC-a. Na górze, czyli tuż pod opcjami 'File', 'Options' i 'Help', znajduje się kilkanaście zakładek. Pozostańmy na razie przy zakładce 'General'. Pierwsza uwaga: nie zmieniajcie imienia swej postaci i nie używajcie Update dialog.tlk'. Jest to już naprawdę archaiczny sposób dodawania nowych tekstów do gry. Nadawanie imion postaci odbywa się poprzez komendy w pliku '.tp2', ale o tym nieco później. Poza 'Long name' i 'Short name' mamy kilka innych opcji, które nawet jeśli nie posłużą nam do stworzenia NPC-a to postaram się je przybliżyć, gdyż mogą być przydatne w tworzeniu np. wrogów, z którymi można porozmawiać przed rozpoczęciem walki. Tak więc kolejno jest 'XP value' czyli liczba punktów doświadczenia jakie uzyskujemy za zabicie tejże postaci. Jeśli stworzyliśmy postać tak jak napisałem, to winna być ona ustawiona na poziomie 0, ponieważ we Wrotach Baldura 2 nigdy nie otrzymuje się punktów doświadczenia za zabicie przyłączalnego NPC-a. Następna opcja to 'Experience', dzięki której możemy określić liczbę punktów doświadczenia, które już posiada nasz bohater. Niektórzy bardzo często zmieniają je, a później dziwią się, że po przyłączeniu postać może już awansować. Wynika to z faktu, że wartość ta jest ściśle związana z poziomem postaci. Jeśli ktoś chce poeksperymentować z tymi wartościami to radzę wpierw zapoznać się z plikiem 'XPLEVEL.2da', który zawiera informacje o wartości doświadczenia i poziomie, który jej odpowiada. Warto go przejrzeć niż stworzyć kilkunastopoziomowego wojownika, który będzie czekał do końca gry, zanim ponownie awansuje. Aby go przejrzeć należy użyć programu Near Infinity lub prostszego w obsłudze Infinity Explorer. Następnie edytujemy 'Gold' czyli złoto, które posiada nasza postać. 'Hit points' pozwala na zmienić obecną wartość punktów życia, które posiada nasz bohater oraz maksymalną liczbę punktów życia. Zazwyczaj są one takie same, chyba że bohater jest ranny. W takim wypadku pierwsza wartość będzie odpowiednio mniejsza. 'Statistics' chyba nie muszę nikomu tłumaczyć, nawet bowiem osoba nie zaznajomiona z językiem angielskim powinna domyślić się znaczenia tej rubryki. Dla zasady podam tylko znaczenia poszczególnych cech bohatera zaczynając od najwyższej: 'Siła', 'Kondycja', 'Zręczność', 'Mądrość', 'Inteligencja' oraz 'Charyzma'. Pozostałych rubryk w zakładce 'General', radzę nie zmieniać, powinno się je bowiem wybrać podczas tworzenia postaci w BG2. Zmiana klasy, podklasy czy charakteru może sprowadzić małe zamieszanie w pliku postaci. Drugą zakładką jest 'Appearence', gdzie możemy zmodyfikować wygląd naszej postaci. Zachęcałem do ustawienia kolorów podczas przygotowywania postaci, gdyż nie chcę tłumaczyć jak zmienić je za pomocą tego programu. Powiem tylko, że jest to niewygodne i niepraktyczne. 'Portraits' pozwala nam oczywiście zmienić portrety postaci. Pozostałych rubryk raczej nie radzę zmieniać, chyba że chcecie żeby wasz bohater wyglądał jak smok. Bardzo ważnych zmian dokonamy w trzeciej zakładce, czyli w 'Other attributes'. Jeśli chcecie by wszystko było dobrze zrobione, proszę sugerować się moimi wskazówkami. Skoro moja postać ma na imię Karvus, to wpisuje w rubrykach 'Override script', 'Death variable' oraz 'Dialog file' słowo 'Karvus'. Należy zauważyć, że nazwy te nie mogą zawierać więcej niż osiem liter. Zalecam, aby tych liter było sześć lub siedem, gdyż w rubryce 'Default script' powinniście wpisać 'KarvusX'. Co jeśli imię bohatera ma więcej niż osiem liter? Przykładowo mamy bohatera o imieniu Fujimitsu. Możemy wpisać mu w rubrykach tylko 'Fuji'. Można wpisać co się chce należy tylko to zapamiętać. Jeszcze jedna ważna rzecz jaką należy zrobić będąc na tej zakładce to kliknąć na rubryce 'Enemy-Ally' i zmienić tam ustawienie z '2 PC' oznaczającego główną postać na '128 NEUTRAL', które jak sama nazwa wskazuje oznacza bohatera neutralnego. Gdybyśmy zmienili na '255 ENEMY' to zmienilibyśmy go na wroga, ale ta opcja nas tu nie interesuje. Jeśli chodzi o 'Other abilities' w tej zakładce oraz całą kolejną czyli 'Resistance', to sugeruję nie zmieniać tam nic, aby nie unierzeczywistniać gry, czyli nie tworzyć postaci zbyt potężnej. Ostatnie zakładka, która nas interesuje to 'Proficiences', w której możemy zmienić biegłości naszej postaci. Nie polecam używania tego programu do dodawania ekwipunku, gdyż łatwiej używa się ShadowKeepera, a w szczególności przestrzegam przed dodawaniem dźwięków. O tym jak je dodać dowiecie się w późniejszym etapie. Tak gotowy plik postaci należy zapisać. W tym celu tak jak na początku klikamy na 'File', a potem na 'Save as ...'. Wpierw zmienamy 'Zapisz jako typ:' z 'Character file (.chr)' na 'Creature file (.cre)'. I to już wszystko. Gratuluję! Właśnie stworzyłeś swój pierwszy plik postaci.

Kiedy mamy już gotowy plik '.cre', przekopiujmy go do katalogu naszego moda. W moim wypadku będzie to 'Karvus NPC', a następnie 'karvus'. Teraz nauczymy się tworzyć pliki dialogów. Stwórz plik tekstowy w podkatalogu, który ja nazwałem 'karvus', a następnie zmień jego końcówkę z '.txt' na '.d'. Otwórz go za pomocą edytora tekstu. I tu muszę przerwać by zasugerować nieużywanie WordPada i notatnika. Mimo, że nadają się jak każde inne to mają jedną bardzo ważną wadę. Nie wyświetlają, w której linii i kolumnie się aktualnie znajdujemy, a jest to bardzo ważne przy tworzeniu modów opartych o WeiDU, ponieważ gdybyśmy popełnili jakiś błąd to program ten zatrzymie się przy instalacji i poinformuje, że w tej i tej linii i w tej i tej kolumnie wystąpił błąd. Zamiast notatnika polecam program dużo nie różniący się od WordPada, ale za to wzbogacony w kilka nowych użytecznych opcji o nazwie MetaPad. Polecam go szczególnie, że istnieje łatka spolszczająca.

Jak do tej pory w naszym katalogu 'Karvus NPC' mamy więc dwa pliki ('WeiDU.exe oraz 'Nowy dokument tekstowy.tp2'') oraz podkatalog 'Karvus', w którym znajdują się dwa pliki: plik postaci 'Karvus8.cre' oraz pusty plik '.d', którego nazwę zmienimy na przykładowo imię postaci czyli będziemy mieli plik 'Karvus.d'.

Otwórz plik 'Karvus.d' za pomocą jakiegoś edytora tekstu. Teraz zaznaczę, iż wiedza na temat podstawowych komend języka Basic czyli np. IF, THEN, GOTO byłaby mile widziana i przydatna, aczkolwiek postaram się wytłumaczyć wszystko od podstaw. Wpierw kilka słów na temat omawiania. Przedstawię teraz przykładowy dialog NPC. Wszystko co znajdziecie w klamrach to będą moje komentarze. Pozostała część to zawartość pliku '.d'. Zacznijmy więc:

BEGIN ~KARVUS~

(komenda ta mówi WeiDU by stworzył plik Karvus.dlg. 'Karvus' to nazwa naszego pliku, więc możesz ją zmieniać wedle wyboru, lecz przypominam, że powinna być taka sama jak ta, którą wpisaliśmy w pliku '.cre'.)

IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0

(Jeśli bohater widzi cię po raz pierwszy to zainicjuje ten blok o nazwie 0. To co znajduje się w tyldach to warunek dla pierwszego spotkania. Jest więcej różnych warunków, ale ten jest prawie zawsze spotykany.)

SAY ~Pozdrawiam cię! Nazywam się Karvus.~

(Po komendzie SAY w tyldach wpisujemy to co ma powiedzieć nasza nowa postać, w tym wypadku jest to zdanie powitalne.)

IF ~~ THEN REPLY ~Witam. Jestem <GABBER>.~ GOTO 1
IF ~~ THEN REPLY ~Nie mam teraz czasu!~ GOTO 2
END

(Nietrudno domyślić się, że są to nasze odpowiedzi. Pewnie wielu ciekawi co znaczy słowo GABBER. Otóż jest to imię osoby, która aktualnie rozmawia z naszym NPC-em np. Imoen czy Viconia. Jak widać tu również możemy użyć pewnych warunków, aby pojawiła się nasza odpowiedź. Aby jednak na razie za bardzo nic nie komplikować umieściłem tylko dwie odpowiedzi znajdujące się w tyldach. Za nimi są komendy GOTO odsyłające nas do następnych bloków, odpowiednio do 1 lub 2 w zależności jaką odpowiedź wybierzemy. Linijka END kończy blok.)

(Jak na razie stworzyliśmy jeden blok o nazwie 0 z dwoma łączami do bloków 1 i 2. Musimy teraz stworzyć oba te bloki. Zacznijmy od bloku 1.)

IF ~~ THEN BEGIN 1
SAY ~Miło cię poznać <GABBER>. Przybyłem niedawno z Waterdeep i szukam grupy poszukiwaczy przygód, do której mógłbym dołączyć. Mogę z wami podróżować?~
IF ~~ THEN REPLY ~Oczywiście.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie teraz.~ GOTO 2
END

(Tak więc po przywitaniu się nasz bohater proponuje drużynie wspólną podróż. Jeśli się zgodzimy wybieramy pierwszą odpowiedź. Zauważmy słowo DO oznaczające czynność jaka zostanie wykonana. Pierwsza z nich to zostawienie w grze informacji o tym, że postać jest przyłączona, druga zaś przyłącza postać do drużyny. Komenda EXIT sprawia, że wychodzimy z rozmowy. Druga odpowiedź odsyła nas do bloku 2, który będzie naszym blokiem odmownym. Stwórzmy go teraz.)

IF ~~ THEN BEGIN 2
SAY ~No cóż. Wpadnij kiedyś ponownie.~
IF ~~ THEN EXIT
END

(Tym razem nie ma żadnych odpowiedzi, nie ma więc komend REPLY, a ponieważ jest tylko jedna opcja po słowach naszego bohatera tylko ona zostanie wybrana. Pojawi się znane okienko 'Zakończ rozmowę'.)

(Mamy więc już gotowy dialog na pierwsze spotkanie z naszą postacią. Co jednak jeśli nie przyłączymy postaci i ponownie z nią spróbujemy porozmawiać? Nie stanie się nic, chyba, że stworzymy nowy dialog na następne spotkania.)

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN 3
SAY ~Wróciłeś! Mogę się do ciebie przyłączyć?~
IF ~~ THEN REPLY ~Tak.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie.~ GOTO 4
END

IF ~~ THEN BEGIN 4
SAY ~Cóż. Mimo wszystko miło było znów cię ujrzeć.~
IF ~~ THEN EXIT
END

(Wszystko powinno już być znane poza warunkiem w bloku 3. Literki GT oznaczają tyle co więcej razy niż. W wolnym tłumaczeniu jeśli postać rozmawiała z tobą więcej razy niż 0, to zacznie od tego rozmawiać od tego bloku. Jeśli wybierzesz pierwszą odpowiedź to postać przyłączy się do drużyny, jeśli nie to zostanie odesłana do bloku 4, który również został przedstawiony.)

(Musze wspomnieć, że po przyłączeniu postaci dialog ten traci znaczenie dla gry. Zostaje on zastępiony przez cztery inne pliki o nazwach xxxxxxP, xxxxxxJ, xxxxxxD oraz Bxxxxxx, czyli odpowiednio w moim przypadku KarvusP, KarvusJ, KarvusD, a także BKarvus. Każdy z nich odpowiada za co innego. Wymaganym plikiem jest dialog pierwszy, który pozwala na wywalenie NPC z drużyny oraz ponowne przyłączenie. Pozostałe są opcjonalne, ale jeszcze do nich wrócimy. Skoro mamy już więc gotowy plik 'Karvus.dlg' stwórzmy 'KarvusP.dlg' w pliku 'Karvus.d', choć może być osobny.)

BEGIN ~KARVUSP~

(Nakazuje utworzenie pliku KarvusP.dlg)

IF ~Global("KarvusJoined","LOCALS",1)~ THEN BEGIN 0

(Zwracam uwagę, iż jest to inny dialog niż Karvus.dlg, tak więc mogę użyć tych samych nazw bloków. Zwróć uwagę, że jako warunek wpisujemy informację o przyłączeniu Karvusa do drużyny. Musi być ona identyczna z tą w powyższym pliku, czyli 'Karvus.dlg'. W naszym wypadku jest to 'KarvusJoined'. Zauważ, że za słowem LOCALS jest liczba 1 oznaczająca, że Karvus jest aktualnie w naszej drużynie.)

SAY ~Hej, to nie fair. Nie możesz mnie wyrzucić!.~
IF ~~ THEN REPLY ~Ojej. Chyba masz rację. Wróć do drużyny.~ DO ~JoinParty()~
EXIT

(Zwróć uwagę, że dialog 'xxxxxxP.dlg' automatycznie wywali NPC-a z drużyny, a potem ewentualnie przyłączy go znów używając komendy JoinParty().)

IF ~~ THEN REPLY ~A jednak mogę.~ DO ~SetGlobal("VondoJoined","LOCALS",0)~
EXIT

(Zauważ, że ustawia to zmienną 'KarvusJoined' na 0 zamiast 1, co będzie informacją dla gry, że Karvus nie jest w tej chwili w drużynie.)

END

(Komenda ta kończy blok.)

(Teraz trzeba stworzyć blok do ponownego przyłączenia go, czyli jeśli zaczniemy z nim rozmawiać to pojawi się ten blok.)

IF ~Global("KarvusJoined","LOCALS",0)~ THEN BEGIN 1
SAY ~Chcesz byśmy znów razem podróżowali?~
IF ~~ THEN REPLY ~Tak. Dołącz do mnie.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Na razie nie. Przykro mi.~ EXIT
END

(To wszystko by stworzyć najprostszego NPC-a. Pozostała część, czyli interakcje, wszelkie komentarze itd. jest nieco bardziej skomplikowana. Ostatecznie twój plik 'xxxxxx.d' winien wyglądać następująco.)

BEGIN ~KARVUS~
IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0
SAY ~Pozdrawiam cię! Nazywam się Karvus.~
IF ~~ THEN REPLY ~Witam. Jestem <GABBER>.~ GOTO 1
IF ~~ THEN REPLY ~Nie mam teraz czasu!~ GOTO 2
END

IF ~~ THEN BEGIN 1
SAY ~Miło cię poznać <GABBER>. Przybyłem niedawno z Waterdeep i szukam grupy poszukiwaczy przygód, do której mógłbym dołączyć. Mogę z wami podróżować?~
IF ~~ THEN REPLY ~Oczywiście.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie teraz.~ GOTO 2
END

IF ~~ THEN BEGIN 2
SAY ~No cóż. Wpadnij kiedyś ponownie.~
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN 3
SAY ~Wróciłeś! Mogę się do ciebie przyłączyć?~
IF ~~ THEN REPLY ~Tak.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie.~ GOTO 4
END

IF ~~ THEN BEGIN 4
SAY ~Cóż. Mimo wszystko miło było znów cię ujrzeć.~
IF ~~ THEN EXIT
END

BEGIN ~KARVUSP~

IF ~Global("KarvusJoined","LOCALS",1)~ THEN BEGIN 0
SAY ~Hej, to nie fair. Nie możesz mnie wyrzucić!.~
IF ~~ THEN REPLY ~Ojej. Chyba masz rację. Wróć do drużyny.~ DO ~JoinParty()~
EXIT
IF ~~ THEN REPLY ~A jednak mogę.~ DO ~SetGlobal("VondoJoined","LOCALS",0)~
EXIT
END

IF ~Global("KarvusJoined","LOCALS",0)~ THEN BEGIN 1
SAY ~Chcesz byśmy znów razem podróżowali?~
IF ~~ THEN REPLY ~Tak. Dołącz do mnie.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Na razie nie. Przykro mi.~ EXIT
END

(Mamy więc gotowy dialog dla naszej postaci. Mogę zaś przestać pisać w nawiasach.)

Uwierzcie mi na słowo, że większa część pracy jest już za wami. Teraz musimy stworzyć dwa skrypty, jeden dla naszej postaci, drugi zaś dla obszaru, na którym ma się ona znajdować.

Przy pomocy notatnika tworzymy plik tekstowy (tym razem końcówka '.baf' zamiast '.txt') i wpisujemy w nim:

IF
See([PC])
NumTimesTalkedTo(0)
THEN
RESPONSE #100
Dialogue(Nearest([PC]))
END

Dzięki temu nasza postać pierwsza rozpocznie rozmowę z członkiem drużyny. Zapisujemy go pod nazwą jaką umieściliśmy w 'Override script' podczas tworzenia pliku '.cre' (Przecież mówiłem żeby zapamiętać. Większość używana pewnie teraz IE Creature Makera żeby to sprawdzić). W moim przypadku będzie to 'Karvus'. Zgodnie z tym utworzyliśmy plik o nazwie 'Karvus.baf'. Umieszczamy go w podkatalogu 'karvus' w folderze naszego moda.

Teraz musimy jeszcze umieścić naszą postać w grze. Ponownie tworzymy plik tekstowy z końcówką '.baf'. Nadajmy mu nazwę obszaru, który uaktualniamy np. 'AR0700' czyli słynna Promenada Waukeen. Mamy więc plik 'Ar0700.baf', który otwieramy i wpisujemy:

IF
Global(KarvusExists","AR0700",0)
THEN
RESPONSE #100
SetGlobal("KarvusExists","AR0700",1)
CreateCreature("Karvus8",[9137.2046],3)
END

Jeśli dobrze się wcześniej wczytaliście to z pewnością rozumiecie o co w tym chodzi. Komenda CreateCreature tworzy postać, jej nazwę umieszczamy pomiędzy cudzym słowiem, zaś liczby w kwadratowych nawiasach to współrzędne postaci. Jak kogoś interesuje 3 oznacza ustawienie postaci zgodnie z tarczą zegara.

Podsumowując ten etap, powinniśmy mieć folder 'Karvus NPC', a w nim pliki według schematu: Wielkimi literami oznaczono foldery. Małymi wszelkie pliki. Jeśli używasz portretów innych niż te, które są w grze to powinieneś umieścić je również w katalogu 'Karvus'. Musisz również utworzyć podkatalog 'backup' w podkatalogu 'karvus'.

KARVUS NPC ---------------------> KARVUS ---------------------->BACKUP
Nowy dokument tekstowy.tp2 Karvus.d
WeiDU.exe Karvus.baf
Ar0700.baf
Karvus8.cre
KarvusL.bmp (opcjonalnie)
KarvusS.bmp (opcjonalnie)

Jeśli tak jest to zostało ci tylko przygotować WeiDU do poprawnego działania. Po pierwsze zmień nazwę z 'WeiDU.exe' na 'Setup-Karvus.exe' oraz 'Nowy dokument tekstowy.tp2' na 'Setup-Karvus.tp2'. Następnie otwórz plik '.tp2' i wpisz w nim (to co w nawiasach to komentarze, więc je pomijamy):

BACKUP ~karvus/backup~ (potrzebne przy odinstalowaniu moda)
AUTHOR ~damian-staniszewski@wp.pl~ (adres e-maila do autora moda)
BEGIN ~Karvus NPC dla BG2~ (nazwa moda)

(W tym miejscu kopiejemy plik postaci i nadajemy nazwę NPC-owi.)

COPY ~karvus/Karvus8.cre~ ~override/Karvus8.cre~
SAY NAME1 ~Karvus~ (Imię naszej postaci. Poniżej to samo.)
SAY NAME2 ~Karvus~
SAY BIO ~Zapytany o przeszłość KARVUS pluje ci w twarz.~ (To jest biografia naszej postaci.)

(Teraz kompilujemy plik 'Karvus.d' do poszczególnych dialogów.)

COMPILE ~karvus/Karvus.d~
USING ~~

(Kompilujemy skrypt zachowań naszej postaci)

COMPILE ~karvus/Karvus.baf~

(Teraz uaktualniamy skrypt obszaru Promenady Waukeen za pomocą naszego skryptu.)

EXTEND_BOTTOM ~Ar0700.bcs~ ~karvus/Ar0700.baf~

(Teraz dodajemy informacje o dialogach naszej postaci, o których mowa była już wcześniej)

APPEND ~pdialog.2da~
~Karvus KarvusP KarvusJ KarvusD~
UNLESS ~Karvus~
UNLESS ~25POST~

APPEND ~pdialog.2da~
~Karvus KarvusP KarvusJ KarvusD Karvus25P Karvus25J Karvus25D Karvus25~
UNLESS ~Karvus~
IF ~25POST~

I to wszystko jeśli chodzi o podstawy tworzenia NPC-ów za pomocą WeiDU.




wojjoo - Sob 26.09.2009, 10:11:07
" /> Cytuj:



Orish - Sob 26.09.2009, 10:25:17
" />Autor nie zamierza poprawiać swoich tekstów, więc zmiany można spokojnie nanosić bezpośrednio.



Oceansoul - Sob 26.09.2009, 17:06:43
" /> Cytuj:




Orish - Sob 26.09.2009, 17:12:36
" />No to ja się mogę zaopiekować, choć uważam, że to niepotrzebna komplikacja. To nie są teksty pisane dla Insi, tylko starocie wysłane przez Nastiana, który niezbyt już cRPG się zajmuje.



Oceansoul - Sob 26.09.2009, 18:34:14
" />Przykro mi, nic nie mówi pseudonim autora ani fakt, że nie są pisane dla Insi, a nagle się tu pojawiły.
I nie jest to niepotrzebna komplikacja, bo skoro wojjoo ileś czasu poświęcił na wypisanie swoich uwag, to warto, żeby ktoś teraz te teksty poprawił. A jeśli autor tego nie robi, to musi zająć się tym ktoś inny, proste

@wojjoo - nie, nie grałam ^^. zawsze coś się wykrzaczało, i wracałam do 'gołej' wersji



wojjoo - Sob 26.09.2009, 18:53:56
" /> Cytuj:



Orish - Sob 26.09.2009, 19:12:57
" />Tworzenie przyłączalnej postaci jest bardzo proste, mimo wszystko zauważyłem, że wiele osób ma z tym problemy. Poradnik ten ma za zadanie ułatwić tworzenie prostych postaci. Nim zaczniesz czytać dalszą część tego poradnika, powinieneś zebrać następujące programy:

Infinity Engine Creature Maker (najlepiej wersję 3.1.3)
Near Infinity (wymaga Java Runtime Environment w wersji 1.4.2)
Infinity Explorer (najlepiej wersję 0.75)
WeiDU (kiedy to piszę, dostępny jest w wersji 161)
MetaPad (najlepiej polską wersję 3.5)

Zacznijmy od prostej i znanej wszystkim czynności jaką jest stworzenie nowej postaci. Zakładam, że każdy z was niejednokrotnie tworzył swą postać, muszę jednak zaznaczyć, że tym razem należy zrobić to w grze dla wielu graczy, gdzie znajduję się specjalna do tego opcja. Ma to na celu nie tylko zaoszczędzenie sporej ilości czasu, która zmarnowałaby się na oglądaniu po raz kolejny tego samego rozpoczęcia gry, gdybyśmy bowiem przygotowali nową postać w grze dla jednego gracza, gra uznałaby ją za dziecię Bhaala i nadałaby jej wszystkim znane moce typu 'Pomniejsze drążenie Larlocha' czy 'Leczenie lekkich ran'.
Podczas tworzenia postaci nie zwracaj szczególnej uwagi na biegłości czy też na cechy, gdyż wszystko będzie można potem zmienić, aczkolwiek staraj się ją tak ukierunkować by tych zmian było jak najmniej. Warto również podczas tego etapu dać nowej postaci swoje portety, jeśli znajdują się one w folderze 'portraits' w głównym katalogu gry. Zachęcam również do tworzenia własnej postaci. Najważniejsze co powinno się zrobić w tymże momencie to ustalić rasę, klasę i ewentualnie podklasę oraz przede wszystkim kolory. Późniejsze ustalanie kolorów może być bowiem bardzo trudne, jeśli nie potrafisz sobie wyobrazić postaci. Na końcu eksportujemy postać. Ja stworzyłem zawadiakę o imieniu Karvus i eksportowałem go jako Karvus8.

Następnie tworzymy katalog, w którym będzie znajdował się nasz mod. Może on znajdować się w dowolnym miejscu, gdyż nie jest to w tej chwili istotne. Przykładowo stworzyłem katalog o nazwie 'Karvus NPC'. Wchodzimy do niego i tworzymy kolejny katalog (nazwa może być obojętna, ale zalecam taką, która wiąże się w jakiś sposób z modem). W moim przypadku jest to podkatalog 'karvus'. Do głównego katalogu naszego moda kopiujemy plik 'WeiDU.exe', oraz dowolny pusty plik tekstowy, tyle że z końcówką '.tp2' zamiast '.txt' (można to zrobić na różne sposoby, ale nie będę się nad tym rozpisywał, nie jest to bowiem celem tego poradnika). Ostatecznie w katalogu 'Karvus NPC' będą znajdowały się: plik wykonywalny WeiDU, plik '.tp2' oraz podkatalog 'karvus'.

Zalecam teraz zainstalowanie i uruchomienie IE Creature Maker. Tym, którzy mają problemy z uruchomieniem tego programu przypominam, że wymaga on specjalnych bibliotek Visual Basica dostępnych jako 'VB6pkg'. Na początku program poprosi nas o ścieżkę gry. Klikamy na opcji 'Add', a potem wybieramy grę, w zależności od tego czy mamy zainstalowany Tron Bhaala czy też nie wybieramy 'Baldur's Gate 2: SoA' lub 'Baldur's Gate 2: ToB'. Następnie należy zaznaczyć opcję 'Have the game files' i wyszukać główny katalog gry. Po tych czynnościach klikamy na 'OK'. Pojawi się okienko, w którym mamy wpisać nazwę dla nowej ścieżki - niech to będzie przykładowo 'BG2'. Zatwierdzamy ten wybór. Zauważmy, że w liście ścieżek pojawi się nowo utworzone przez nas 'BG2'. Klikamy na nie i wybieramy 'Select' znajdujący się pod spodem. W ten sposób zawiadomiliśmy program o tym gdzie mamy zainstalowaną grę. Program może wydawać się z początku trochę skomplikowany, ze względu na wielką ilość opcji, ale postaram się wytłumaczyć wszystkie najważniejsze, czyli te, które będą nam potrzebne. Nasze pierwsze zadanie nie będzie trudne, gdyż będzie polegało na importowaniu stworzonej przez nas wcześniej postaci. W tym celu klikamy na zakładkę 'File' znajdującą się w lewym górnym rogu. Ukaże nam się kilka opcji, z którym wybieramy 'Open'. Znajdujemy się w folderze 'override', przejdźmy jednak do katalogu 'characters'. Jeśli nasza postać nie będzie widoczna, to zmień 'pliki typu' z 'Creature File (.cre)' na prawidłowy, czyli 'Character File (.chr)'. Wczytaj eksortowaną postać (w moim przypadku jest to 'Karvus8'). Nasza postać zostanie załadowana. Pierwsze co powinniśmy zrobić to odhaczyć opcję 'exportable'. Jeśli tego nie zrobimy, będziemy mieli kłopoty z wywalaniem naszej postaci z drużyny. Jest to jeden z najczęstszych problemów pojawiających się przy tworzeniu przyłączalnego NPC-a. Na górze, czyli tuż pod opcjami 'File', 'Options' i 'Help', znajduje się kilkanaście zakładek. Pozostańmy na razie przy zakładce 'General'. Pierwsza uwaga: nie zmieniajcie imienia swej postaci i nie używajcie Update dialog.tlk'. Jest to już naprawdę archaiczny sposób dodawania nowych tekstów do gry. Nadawanie imion postaci odbywa się poprzez komendy w pliku '.tp2', ale o tym nieco później. Poza 'Long name' i 'Short name' mamy kilka innych opcji, które nawet jeśli nie posłużą nam do stworzenia NPC-a, to postaram się je przybliżyć, gdyż mogą być przydatne w tworzeniu np. wrogów, z którymi można porozmawiać przed rozpoczęciem walki. Tak więc kolejno jest 'XP value' czyli liczba punktów doświadczenia jakie uzyskujemy za zabicie tejże postaci. Jeśli stworzyliśmy postać tak jak napisałem, to winna być ona ustawiona na poziomie 0, ponieważ we Wrotach Baldura 2 nigdy nie otrzymuje się punktów doświadczenia za zabicie przyłączalnego NPC-a. Następna opcja to 'Experience', dzięki której możemy określić liczbę punktów doświadczenia, które już posiada nasz bohater. Niektórzy bardzo często zmieniają je, a później dziwią się, że po przyłączeniu postać może już awansować. Wynika to z faktu, że wartość ta jest ściśle związana z poziomem postaci. Jeśli ktoś chce poeksperymentować z tymi wartościami to radzę wpierw zapoznać się z plikiem 'XPLEVEL.2da', który zawiera informacje o wartości doświadczenia i poziomie, który jej odpowiada. Warto go przejrzeć, nim stworzy się kilkunastopoziomowego wojownika, który będzie czekał do końca gry, zanim ponownie awansuje. Aby go przejrzeć, należy użyć programu Near Infinity lub prostszego w obsłudze Infinity Explorer. Następnie edytujemy 'Gold' czyli złoto, które posiada nasza postać. 'Hit points' pozwala nam zmienić obecną wartość punktów życia, które posiada nasz bohater oraz maksymalną liczbę punktów życia. Zazwyczaj są one takie same, chyba że bohater jest ranny. W takim wypadku pierwsza wartość będzie odpowiednio mniejsza. 'Statistics' chyba nie muszę nikomu tłumaczyć, nawet bowiem osoba nie zaznajomiona z językiem angielskim powinna domyślić się znaczenia tej rubryki. Dla zasady podam tylko znaczenia poszczególnych cech bohatera zaczynając od najwyższej: 'Siła', 'Kondycja', 'Zręczność', 'Mądrość', 'Inteligencja' oraz 'Charyzma'. Pozostałych rubryk w zakładce 'General', radzę nie zmieniać, powinno się je bowiem wybrać podczas tworzenia postaci w BG2. Zmiana klasy, podklasy czy charakteru może sprowadzić małe zamieszanie w pliku postaci. Drugą zakładką jest 'Appearence', gdzie możemy zmodyfikować wygląd naszej postaci. Zachęcałem do ustawienia kolorów podczas przygotowywania postaci, gdyż nie chcę tłumaczyć jak zmienić je za pomocą tego programu. Powiem tylko, że jest to niewygodne i niepraktyczne. 'Portraits' pozwala nam oczywiście zmienić portrety postaci. Pozostałych rubryk raczej nie radzę zmieniać, chyba że chcecie żeby wasz bohater wyglądał jak smok. Bardzo ważnych zmian dokonamy w trzeciej zakładce, czyli w 'Other attributes'. Jeśli chcecie by wszystko było dobrze zrobione, proszę sugerować się moimi wskazówkami. Skoro moja postać ma na imię Karvus, to wpisuje w rubrykach 'Override script', 'Death variable' oraz 'Dialog file' słowo 'Karvus'. Należy zauważyć, że nazwy te nie mogą zawierać więcej niż osiem liter. Zalecam, aby tych liter było sześć lub siedem, gdyż w rubryce 'Default script' powinniście wpisać 'KarvusX'. Co jeśli imię bohatera ma więcej niż osiem liter? Przykładowo mamy bohatera o imieniu Fujimitsu. Możemy wpisać mu w rubrykach tylko 'Fuji'. Można wpisać, co się chce, należy tylko to zapamiętać. jeszcze jedna ważna rzecz, jaką należy zrobić będąc na tej zakładce, to kliknąć na rubryce 'Enemy-Ally' i zmienić tam ustawienie z '2 PC' oznaczającego główną postać na '128 NEUTRAL', które jak sama nazwa wskazuje oznacza bohatera neutralnego. Gdybyśmy zmienili na '255 ENEMY' to zmienilibyśmy go na wroga, ale ta opcja nas tu nie interesuje. Jeśli chodzi o 'Other abilities' w tej zakładce oraz całą kolejną czyli 'Resistance', to sugeruję nie zmieniać tam nic, aby nie unierzeczywistniać gry, czyli nie tworzyć postaci zbyt potężnej. Ostatnie zakładka, która nas interesuje to 'Proficiences', w której możemy zmienić biegłości naszej postaci. Nie polecam używania tego programu do dodawania ekwipunku, gdyż łatwiej używa się ShadowKeepera, a w szczególności przestrzegam przed dodawaniem dźwięków. O tym, jak je dodać, dowiecie się w późniejszym etapie. Tak gotowy plik postaci należy zapisać. W tym celu, tak jak na początku, klikamy na 'File', a potem na 'Save as ...'. Wpierw zmienamy 'Zapisz jako typ:' z 'Character file (.chr)' na 'Creature file (.cre)'. I to już wszystko. Gratuluję! Właśnie stworzyłeś swój pierwszy plik postaci.

Kiedy mamy już gotowy plik '.cre', przekopiujmy go do katalogu naszego moda. W moim wypadku będzie to 'Karvus NPC', a następnie 'karvus'. Teraz nauczymy się tworzyć pliki dialogów. Stwórz plik tekstowy w podkatalogu, który ja nazwałem 'karvus', a następnie zmień jego końcówkę z '.txt' na '.d'. Otwórz go za pomocą edytora tekstu. I tu muszę przerwać, by zasugerować nieużywanie WordPada i notatnika. Mimo że nadają się jak każde inne to mają jedną bardzo ważną wadę. Nie wyświetlają, w której linii i kolumnie się aktualnie znajdujemy, a jest to bardzo istotne przy tworzeniu modów opartych o WeiDU, ponieważ gdybyśmy popełnili jakiś błąd, to program ten zatrzyma się przy instalacji i poinformuje, że w tej i tej linii i w tej i tej kolumnie wystąpił błąd. Zamiast notatnika polecam program dużo nie różniący się od WordPada, ale za to wzbogacony w kilka nowych użytecznych opcji o nazwie MetaPad. Polecam go szczególnie, że istnieje łatka spolszczająca.

Jak do tej pory w naszym katalogu 'Karvus NPC' mamy więc dwa pliki ('WeiDU.exe oraz 'Nowy dokument tekstowy.tp2'') oraz podkatalog 'Karvus', w którym znajdują się dwa pliki: plik postaci 'Karvus8.cre' oraz pusty plik '.d', którego nazwę zmienimy na przykładowo imię postaci, czyli będziemy mieli plik 'Karvus.d'.

Otwórz plik 'Karvus.d' za pomocą jakiegoś edytora tekstu. Teraz zaznaczę, iż wiedza na temat podstawowych komend języka Basic czyli np. IF, THEN, GOTO byłaby mile widziana i przydatna, aczkolwiek postaram się wytłumaczyć wszystko od podstaw. Wpierw kilka słów na temat omawiania. Przedstawię teraz przykładowy dialog NPC. Wszystko, co znajdziecie w klamrach, to będą moje komentarze. Pozostała część to zawartość pliku '.d'. Zacznijmy więc:

BEGIN ~KARVUS~

(komenda ta mówi WeiDU, by stworzył plik Karvus.dlg. 'Karvus' to nazwa naszego pliku, więc możesz ją zmieniać wedle wyboru, lecz przypominam, że powinna być taka sama jak ta, którą wpisaliśmy w pliku '.cre'.)

IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0

(Jeśli bohater widzi cię po raz pierwszy, to zainicjuje ten blok o nazwie 0. To, co znajduje się w tyldach, to warunek dla pierwszego spotkania. Jest więcej różnych warunków, ale ten jest prawie zawsze spotykany.)

SAY ~Pozdrawiam cię! Nazywam się Karvus.~

(Po komendzie SAY w tyldach wpisujemy to, co ma powiedzieć nasza nowa postać, w tym wypadku jest to zdanie powitalne.)

IF ~~ THEN REPLY ~Witam. Jestem <GABBER>.~ GOTO 1
IF ~~ THEN REPLY ~Nie mam teraz czasu!~ GOTO 2
END

(Nietrudno domyślić się, że są to nasze odpowiedzi. Pewnie wielu ciekawi, co znaczy słowo GABBER. Otóż jest to imię osoby, która aktualnie rozmawia z naszym NPC-em np. Imoen czy Viconia. Jak widać tu również możemy użyć pewnych warunków, aby pojawiła się nasza odpowiedź. Aby jednak na razie za bardzo nic nie komplikować, umieściłem tylko dwie odpowiedzi znajdujące się w tyldach. Za nimi są komendy GOTO odsyłające nas do następnych bloków, odpowiednio do 1 lub 2 w zależności jaką odpowiedź wybierzemy. Linijka END kończy blok.)

(Jak na razie stworzyliśmy jeden blok o nazwie 0 z dwoma łączami do bloków 1 i 2. Musimy teraz stworzyć oba te bloki. Zacznijmy od bloku 1.)

IF ~~ THEN BEGIN 1
SAY ~Miło cię poznać <GABBER>. Przybyłem niedawno z Waterdeep i szukam grupy poszukiwaczy przygód, do której mógłbym dołączyć. Mogę z wami podróżować?~
IF ~~ THEN REPLY ~Oczywiście.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie teraz.~ GOTO 2
END

(Tak więc po przywitaniu się nasz bohater proponuje drużynie wspólną podróż. Jeśli się zgodzimy, wybieramy pierwszą odpowiedź. Zauważmy słowo DO, oznaczające czynność, jaka zostanie wykonana. Pierwsza z nich to zostawienie w grze informacji o tym, że postać jest przyłączona, druga zaś przyłącza postać do drużyny. Komenda EXIT sprawia, że wychodzimy z rozmowy. Druga odpowiedź odsyła nas do bloku 2, który będzie naszym blokiem odmownym. Stwórzmy go teraz.)

IF ~~ THEN BEGIN 2
SAY ~No cóż. Wpadnij kiedyś ponownie.~
IF ~~ THEN EXIT
END

(Tym razem nie ma żadnych odpowiedzi, nie ma więc komend REPLY, a ponieważ jest tylko jedna opcja po słowach naszego bohatera, tylko ona zostanie wybrana. Pojawi się znane okienko 'Zakończ rozmowę'.)

(Mamy więc już gotowy dialog na pierwsze spotkanie z naszą postacią. Co jednak, jeśli nie przyłączymy postaci i ponownie z nią spróbujemy porozmawiać? Nie stanie się nic, chyba że stworzymy nowy dialog na następne spotkania.)

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN 3
SAY ~Wróciłeś! Mogę się do ciebie przyłączyć?~
IF ~~ THEN REPLY ~Tak.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie.~ GOTO 4
END

IF ~~ THEN BEGIN 4
SAY ~Cóż. Mimo wszystko miło było znów cię ujrzeć.~
IF ~~ THEN EXIT
END

(Wszystko powinno już być znane poza warunkiem w bloku 3. Literki GT oznaczają tyle, co więcej razy niż. W wolnym tłumaczeniu, jeśli postać rozmawiała z tobą więcej razy niż 0, to zacznie konwersację od tego bloku. Jeśli wybierzesz pierwszą odpowiedź, to postać przyłączy się do drużyny, jeśli nie to zostanie odesłana do bloku 4, który również został przedstawiony.)

(Musze wspomnieć, że po przyłączeniu postaci dialog ten traci znaczenie dla gry. Zostaje on zastępiony przez cztery inne pliki o nazwach xxxxxxP, xxxxxxJ, xxxxxxD oraz Bxxxxxx, czyli odpowiednio w moim przypadku KarvusP, KarvusJ, KarvusD, a także BKarvus. Każdy z nich odpowiada za co innego. Wymaganym plikiem jest dialog pierwszy, który pozwala na wywalenie NPC z drużyny oraz ponowne przyłączenie. Pozostałe są opcjonalne, ale jeszcze do nich wrócimy. Skoro mamy już więc gotowy plik 'Karvus.dlg', stwórzmy 'KarvusP.dlg' w pliku 'Karvus.d', choć może być osobny.)

BEGIN ~KARVUSP~

(Nakazuje utworzenie pliku KarvusP.dlg)

IF ~Global("KarvusJoined","LOCALS",1)~ THEN BEGIN 0

(Zwracam uwagę, iż jest to inny dialog niż Karvus.dlg, tak więc mogę użyć tych samych nazw bloków. Zauważ, że jako warunek wpisujemy informację o przyłączeniu Karvusa do drużyny. Musi być ona identyczna z tą w powyższym pliku, czyli 'Karvus.dlg'. W naszym wypadku jest to 'KarvusJoined'. Zauważ, że za słowem LOCALS jest liczba 1 oznaczająca, że Karvus jest aktualnie w naszej drużynie.)

SAY ~Hej, to nie fair. Nie możesz mnie wyrzucić!.~
IF ~~ THEN REPLY ~Ojej. Chyba masz rację. Wróć do drużyny.~ DO ~JoinParty()~
EXIT

(Zwróć uwagę, że dialog 'xxxxxxP.dlg' automatycznie wywali NPC-a z drużyny, a potem ewentualnie przyłączy go znów, używając komendy JoinParty().)

IF ~~ THEN REPLY ~A jednak mogę.~ DO ~SetGlobal("VondoJoined","LOCALS",0)~
EXIT

(Zauważ, że ustawia to zmienną 'KarvusJoined' na 0 zamiast 1, co będzie informacją dla gry, że Karvus nie jest w tej chwili w drużynie.)

END

(Komenda ta kończy blok.)

(Teraz trzeba stworzyć blok do ponownego przyłączenia go, czyli jeśli zaczniemy z nim rozmawiać, to pojawi się ten blok.)

IF ~Global("KarvusJoined","LOCALS",0)~ THEN BEGIN 1
SAY ~Chcesz byśmy znów razem podróżowali?~
IF ~~ THEN REPLY ~Tak. Dołącz do mnie.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Na razie nie. Przykro mi.~ EXIT
END

(To wystarczy, by stworzyć najprostszego NPC-a. Pozostała część, czyli interakcje, wszelkie komentarze itd. jest nieco bardziej skomplikowana. Ostatecznie twój plik 'xxxxxx.d' winien wyglądać następująco.)

BEGIN ~KARVUS~
IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0
SAY ~Pozdrawiam cię! Nazywam się Karvus.~
IF ~~ THEN REPLY ~Witam. Jestem <GABBER>.~ GOTO 1
IF ~~ THEN REPLY ~Nie mam teraz czasu!~ GOTO 2
END

IF ~~ THEN BEGIN 1
SAY ~Miło cię poznać <GABBER>. Przybyłem niedawno z Waterdeep i szukam grupy poszukiwaczy przygód, do której mógłbym dołączyć. Mogę z wami podróżować?~
IF ~~ THEN REPLY ~Oczywiście.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie teraz.~ GOTO 2
END

IF ~~ THEN BEGIN 2
SAY ~No cóż. Wpadnij kiedyś ponownie.~
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN 3
SAY ~Wróciłeś! Mogę się do ciebie przyłączyć?~
IF ~~ THEN REPLY ~Tak.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie.~ GOTO 4
END

IF ~~ THEN BEGIN 4
SAY ~Cóż. Mimo wszystko miło było znów cię ujrzeć.~
IF ~~ THEN EXIT
END

BEGIN ~KARVUSP~

IF ~Global("KarvusJoined","LOCALS",1)~ THEN BEGIN 0
SAY ~Hej, to nie fair. Nie możesz mnie wyrzucić!.~
IF ~~ THEN REPLY ~Ojej. Chyba masz rację. Wróć do drużyny.~ DO ~JoinParty()~
EXIT
IF ~~ THEN REPLY ~A jednak mogę.~ DO ~SetGlobal("VondoJoined","LOCALS",0)~
EXIT
END

IF ~Global("KarvusJoined","LOCALS",0)~ THEN BEGIN 1
SAY ~Chcesz byśmy znów razem podróżowali?~
IF ~~ THEN REPLY ~Tak. Dołącz do mnie.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Na razie nie. Przykro mi.~ EXIT
END

(Mamy więc gotowy dialog dla naszej postaci. Mogę zatem przestać pisać w nawiasach.)

Uwierzcie mi na słowo, że większa część pracy jest już za wami. Teraz musimy stworzyć dwa skrypty, jeden dla naszej postaci, drugi zaś dla obszaru, na którym ma się ona znajdować.

Przy pomocy notatnika tworzymy plik tekstowy (tym razem końcówka '.baf' zamiast '.txt') i wpisujemy w nim:

IF
See([PC])
NumTimesTalkedTo(0)
THEN
RESPONSE #100
Dialogue(Nearest([PC]))
END

Dzięki temu nasza postać pierwsza rozpocznie rozmowę z członkiem drużyny. Zapisujemy go pod nazwą, jaką umieściliśmy w 'Override script' podczas tworzenia pliku '.cre' (Przecież mówiłem, żeby zapamiętać. Większość używa pewnie teraz IE Creature Makera w celu sprawdzenia tego). W moim przypadku będzie to 'Karvus'. Zgodnie z tym utworzyliśmy plik o nazwie 'Karvus.baf'. Umieszczamy go w podkatalogu 'karvus' w folderze naszego moda.

Teraz musimy jeszcze umieścić naszą postać w grze. Ponownie tworzymy plik tekstowy z końcówką '.baf'. Nadajmy mu nazwę obszaru, który uaktualniamy np. 'AR0700', czyli słynna Promenada Waukeen. Mamy więc plik 'Ar0700.baf', który otwieramy i wpisujemy:

IF
Global(KarvusExists","AR0700",0)
THEN
RESPONSE #100
SetGlobal("KarvusExists","AR0700",1)
CreateCreature("Karvus8",[9137.2046],3)
END

Jeśli dobrze się wcześniej wczytaliście, to z pewnością rozumiecie, o co w tym chodzi. Komenda CreateCreature tworzy postać, jej nazwę umieszczamy w cudzysłowie, zaś liczby w kwadratowych nawiasach to współrzędne postaci. Jak kogoś interesuje 3, oznacza ustawienie postaci zgodnie z tarczą zegara.

Podsumowując ten etap, powinniśmy mieć folder 'Karvus NPC', a w nim pliki według schematu: Wielkimi literami oznaczono foldery. Małymi wszelkie pliki. Jeśli używasz portretów innych niż te, które są w grze, to powinieneś umieścić je także w katalogu 'Karvus'. Musisz również utworzyć podkatalog 'backup' w podkatalogu 'karvus'.

KARVUS NPC ---------------------> KARVUS ---------------------->BACKUP
Nowy dokument tekstowy.tp2 Karvus.d
WeiDU.exe Karvus.baf
Ar0700.baf
Karvus8.cre
KarvusL.bmp (opcjonalnie)
KarvusS.bmp (opcjonalnie)

Jeśli tak jest, to zostało ci tylko przygotować WeiDU do poprawnego działania. Po pierwsze zmień nazwę z 'WeiDU.exe' na 'Setup-Karvus.exe' oraz 'Nowy dokument tekstowy.tp2' na 'Setup-Karvus.tp2'. Następnie otwórz plik '.tp2' i wpisz w nim (to co w nawiasach to komentarze, więc je pomijamy):

BACKUP ~karvus/backup~ (potrzebne przy odinstalowaniu moda)
AUTHOR ~damian-staniszewski@wp.pl~ (adres e-maila do autora moda)
BEGIN ~Karvus NPC dla BG2~ (nazwa moda)

(W tym miejscu kopiujemy plik postaci i nadajemy nazwę NPC-owi.)

COPY ~karvus/Karvus8.cre~ ~override/Karvus8.cre~
SAY NAME1 ~Karvus~ (Imię naszej postaci. Poniżej to samo.)
SAY NAME2 ~Karvus~
SAY BIO ~Zapytany o przeszłość KARVUS pluje ci w twarz.~ (To jest biografia naszej postaci.)

(Teraz kompilujemy plik 'Karvus.d' do poszczególnych dialogów.)

COMPILE ~karvus/Karvus.d~
USING ~~

(Kompilujemy skrypt zachowań naszej postaci)

COMPILE ~karvus/Karvus.baf~

(Teraz uaktualniamy skrypt obszaru Promenady Waukeen za pomocą naszego skryptu.)

EXTEND_BOTTOM ~Ar0700.bcs~ ~karvus/Ar0700.baf~

(Teraz dodajemy informacje o dialogach naszej postaci, o których mowa była już wcześniej)

APPEND ~pdialog.2da~
~Karvus KarvusP KarvusJ KarvusD~
UNLESS ~Karvus~
UNLESS ~25POST~

APPEND ~pdialog.2da~
~Karvus KarvusP KarvusJ KarvusD Karvus25P Karvus25J Karvus25D Karvus25~
UNLESS ~Karvus~
IF ~25POST~

I to wszystko, jeśli chodzi o podstawy tworzenia NPC-ów za pomocą WeiDU.



Oceansoul - Pią 02.10.2009, 12:09:07
" />Tworzenie przyłączalnej postaci jest bardzo proste, mimo wszystko zauważyłem, że wiele osób ma z tym problemy. Poradnik ten ma za zadanie ułatwić tworzenie prostych postaci. Nim zaczniesz czytać dalszą część tego poradnika, powinieneś zebrać następujące programy:

Infinity Engine Creature Maker (najlepiej wersję 3.1.3)
Near Infinity (wymaga Java Runtime Environment w wersji 1.4.2)
Infinity Explorer (najlepiej wersję 0.75)
WeiDU (kiedy to piszę, dostępny jest w wersji 161)
MetaPad (najlepiej polską wersję 3.5)

Zacznijmy od prostej i znanej wszystkim czynności, jaką jest stworzenie nowej postaci. Zakładam, że każdy z was niejednokrotnie tworzył swą postać, muszę jednak zaznaczyć, że tym razem należy zrobić to w grze dla wielu graczy, gdzie znajduję się specjalna do tego opcja. Ma to na celu nie tylko zaoszczędzenie sporej ilości czasu, która zmarnowałaby się na oglądaniu po raz kolejny tego samego rozpoczęcia gry, gdybyśmy bowiem przygotowali nową postać w grze dla jednego gracza, gra uznałaby ją za dziecię Bhaala i nadałaby jej wszystkim znane moce typu 'Pomniejsze drążenie Larlocha' czy 'Leczenie lekkich ran'.
Podczas tworzenia postaci nie zwracaj szczególnej uwagi na biegłości czy też na cechy, gdyż wszystko będzie można potem zmienić, aczkolwiek staraj się ją tak ukierunkować, by tych zmian było jak najmniej. Warto również podczas tego etapu dać nowej postaci swoje portrety, jeśli znajdują się one w folderze 'portraits' w głównym katalogu gry. Zachęcam również do tworzenia własnej postaci. Najważniejsze, co powinno się zrobić w tymże momencie, to ustalić rasę, klasę i ewentualnie podklasę oraz przede wszystkim kolory. Późniejsze ustalanie kolorów może być bowiem bardzo trudne, jeśli nie potrafisz sobie wyobrazić postaci. Na końcu eksportujemy postać. Ja stworzyłem zawadiakę o imieniu Karvus i eksportowałem go jako Karvus8.

Następnie tworzymy katalog, w którym będzie znajdował się nasz mod. Może on znajdować się w dowolnym miejscu, gdyż nie jest to w tej chwili istotne. Przykładowo stworzyłem katalog o nazwie 'Karvus NPC'. Wchodzimy do niego i tworzymy kolejny katalog (nazwa może być obojętna, ale zalecam taką, która wiąże się w jakiś sposób z modem). W moim przypadku jest to podkatalog 'karvus'. Do głównego katalogu naszego moda kopiujemy plik 'WeiDU.exe', oraz dowolny pusty plik tekstowy, tyle że z końcówką '.tp2' zamiast '.txt' (można to zrobić na różne sposoby, ale nie będę się nad tym rozpisywał, nie jest to bowiem celem tego poradnika). Ostatecznie w katalogu 'Karvus NPC' będą znajdowały się: plik wykonywalny WeiDU, plik '.tp2' oraz podkatalog 'karvus'.

Zalecam teraz zainstalowanie i uruchomienie IE Creature Maker. Tym, którzy mają problemy z uruchomieniem tego programu, przypominam, że wymaga on specjalnych bibliotek Visual Basica dostępnych jako 'VB6pkg'. Na początku program poprosi nas o ścieżkę gry. Klikamy na opcji 'Add', a potem wybieramy grę, w zależności od tego, czy mamy zainstalowany Tron Bhaala, czy też nie, wybieramy 'Baldur's Gate 2: SoA' lub 'Baldur's Gate 2: ToB'. Następnie należy zaznaczyć opcję 'Have the game files' i wyszukać główny katalog gry. Po tych czynnościach klikamy na 'OK'. Pojawi się okienko, w którym mamy wpisać nazwę dla nowej ścieżki - niech to będzie przykładowo 'BG2'. Zatwierdzamy ten wybór. Zauważmy, że w liście ścieżek pojawi się nowo utworzone przez nas 'BG2'. Klikamy na nie i wybieramy 'Select' znajdujący się pod spodem. W ten sposób zawiadomiliśmy program o tym, gdzie mamy zainstalowaną grę. Program może wydawać się z początku trochę skomplikowany, ze względu na wielką ilość opcji, ale postaram się wytłumaczyć wszystkie najważniejsze, czyli te, które będą nam potrzebne. Nasze pierwsze zadanie nie będzie trudne, gdyż będzie polegało na importowaniu stworzonej przez nas wcześniej postaci. W tym celu klikamy na zakładkę 'File' znajdującą się w lewym górnym rogu. Ukaże nam się kilka opcji, z którym wybieramy 'Open'. Znajdujemy się w folderze 'override', przejdźmy jednak do katalogu 'characters'. Jeśli nasza postać nie będzie widoczna, to zmień 'pliki typu' z 'Creature File (.cre)' na prawidłowy, czyli 'Character File (.chr)'. Wczytaj eksportowaną postać (w moim przypadku jest to 'Karvus8'). Nasza postać zostanie załadowana. Pierwsze co powinniśmy zrobić, to odhaczyć opcję 'exportable'. Jeśli tego nie zrobimy, będziemy mieli kłopoty z wywalaniem naszej postaci z drużyny. Jest to jeden z najczęstszych problemów pojawiających się przy tworzeniu przyłączalnego NPC-a. Na górze, czyli tuż pod opcjami 'File', 'Options' i 'Help', znajduje się kilkanaście zakładek. Pozostańmy na razie przy zakładce 'General'. Pierwsza uwaga: nie zmieniajcie imienia swej postaci i nie używajcie Update dialog.tlk'. Jest to już naprawdę archaiczny sposób dodawania nowych tekstów do gry. Nadawanie imion postaci odbywa się poprzez komendy w pliku '.tp2', ale o tym nieco później. Poza 'Long name' i 'Short name' mamy kilka innych opcji, które nawet jeśli nie posłużą nam do stworzenia NPC-a, to postaram się je przybliżyć, gdyż mogą być przydatne w tworzeniu np. wrogów, z którymi można porozmawiać przed rozpoczęciem walki. Tak więc kolejno jest 'XP value' czyli liczba punktów doświadczenia, jakie uzyskujemy za zabicie tejże postaci. Jeśli stworzyliśmy postać tak, jak napisałem, to winna być ona ustawiona na poziomie 0, ponieważ we Wrotach Baldura 2 nigdy nie otrzymuje się punktów doświadczenia za zabicie przyłączalnego NPC-a. Następna opcja to 'Experience', dzięki której możemy określić liczbę punktów doświadczenia, które już posiada nasz bohater. Niektórzy bardzo często zmieniają je, a później dziwią się, że po przyłączeniu postać może już awansować. Wynika to z faktu, że wartość ta jest ściśle związana z poziomem postaci. Jeśli ktoś chce poeksperymentować z tymi wartościami to radzę wpierw zapoznać się z plikiem 'XPLEVEL.2da', który zawiera informacje o wartości doświadczenia i poziomie, który jej odpowiada. Warto go przejrzeć, nim stworzy się kilkunastopoziomowego wojownika, który będzie czekał do końca gry, zanim ponownie awansuje. Aby go przejrzeć, należy użyć programu Near Infinity lub prostszego w obsłudze Infinity Explorer. Następnie edytujemy 'Gold' czyli złoto, które posiada nasza postać. 'Hit points' pozwala nam zmienić obecną wartość punktów życia, które posiada nasz bohater oraz maksymalną liczbę punktów życia. Zazwyczaj są one takie same, chyba że bohater jest ranny. W takim wypadku pierwsza wartość będzie odpowiednio mniejsza. 'Statistics' chyba nie muszę nikomu tłumaczyć, nawet bowiem osoba niezaznajomiona z językiem angielskim powinna domyślić się znaczenia tej rubryki. Dla zasady podam tylko znaczenia poszczególnych cech bohatera zaczynając od najwyższej: 'Siła', 'Kondycja', 'Zręczność', 'Mądrość', 'Inteligencja' oraz 'Charyzma'. Pozostałych rubryk w zakładce 'General' radzę nie zmieniać, powinno się je bowiem wybrać podczas tworzenia postaci w BG2. Zmiana klasy, podklasy czy charakteru może sprowadzić małe zamieszanie w pliku postaci. Drugą zakładką jest 'Appearence', gdzie możemy zmodyfikować wygląd naszej postaci. Zachęcałem do ustawienia kolorów podczas przygotowywania postaci, gdyż nie chcę tłumaczyć, jak zmienić je za pomocą tego programu. Powiem tylko, że jest to niewygodne i niepraktyczne. 'Portraits' pozwala nam oczywiście zmienić portrety postaci. Pozostałych rubryk raczej nie radzę zmieniać, chyba że chcecie, żeby wasz bohater wyglądał jak smok. Bardzo ważnych zmian dokonamy w trzeciej zakładce, czyli w 'Other attributes'. Jeśli chcecie, by wszystko było dobrze zrobione, proszę sugerować się moimi wskazówkami. Skoro moja postać ma na imię Karvus, to wpisuję w rubrykach 'Override script', 'Death variable' oraz 'Dialog file' słowo 'Karvus'. Należy zauważyć, że nazwy te nie mogą zawierać więcej niż osiem liter. Zalecam, aby tych liter było sześć lub siedem, gdyż w rubryce 'Default script' powinniście wpisać 'KarvusX'. Co, jeśli imię bohatera ma więcej niż osiem liter? Przykładowo mamy bohatera o imieniu Fujimitsu. Możemy wpisać mu w rubrykach tylko 'Fuji'. Można wpisać, co się chce, należy tylko to zapamiętać. Jeszcze jedna ważna rzecz, jaką należy zrobić, będąc na tej zakładce - kliknąć na rubryce 'Enemy-Ally' i zmienić tam ustawienie z '2 PC' oznaczającego główną postać na '128 NEUTRAL', które jak sama nazwa wskazuje, oznacza bohatera neutralnego. Gdybyśmy zmienili na '255 ENEMY' to zmienilibyśmy go na wroga, ale ta opcja nas tu nie interesuje. Jeśli chodzi o 'Other abilities' w tej zakładce oraz całą kolejną, czyli 'Resistance', to sugeruję nie zmieniać tam nic, aby nie unierzeczywistniać gry, czyli nie tworzyć postaci zbyt potężnej. Ostatnie zakładka, która nas interesuje, to 'Proficiences', w której możemy zmienić biegłości naszej postaci. Nie polecam używania tego programu do dodawania ekwipunku, gdyż łatwiej używa się ShadowKeepera, a w szczególności przestrzegam przed dodawaniem dźwięków. O tym, jak je dodać, dowiecie się w późniejszym etapie. Tak gotowy plik postaci należy zapisać. W tym celu, tak jak na początku, klikamy na 'File', a potem na 'Save as ...'. Wpierw zmieniamy 'Zapisz jako typ:' z 'Character file (.chr)' na 'Creature file (.cre)'. I to już wszystko. Gratuluję! Właśnie stworzyłeś swój pierwszy plik postaci.

Kiedy mamy już gotowy plik '.cre', przekopiujmy go do katalogu naszego moda. W moim wypadku będzie to 'Karvus NPC', a następnie 'karvus'. Teraz nauczymy się tworzyć pliki dialogów. Stwórz plik tekstowy w podkatalogu, który ja nazwałem 'karvus', a następnie zmień jego końcówkę z '.txt' na '.d'. Otwórz go za pomocą edytora tekstu. I tu muszę przerwać, by zasugerować nieużywanie WordPada i notatnika. Mimo że nadają się jak każde inne, to mają jedną bardzo ważną wadę. Nie wyświetlają, w której linii i kolumnie się aktualnie znajdujemy, a jest to bardzo istotne przy tworzeniu modów opartych o WeiDU, ponieważ gdybyśmy popełnili jakiś błąd, to program ten zatrzyma się przy instalacji i poinformuje, że w tej i tej linii i w tej i tej kolumnie wystąpił błąd. Zamiast notatnika polecam program dużo nie różniący się od WordPada, ale za to wzbogacony w kilka nowych użytecznych opcji o nazwie MetaPad. Polecam go szczególnie, gdyż istnieje łatka spolszczająca.

Jak do tej pory w naszym katalogu 'Karvus NPC' mamy więc dwa pliki ('WeiDU.exe oraz 'Nowy dokument tekstowy.tp2'') oraz podkatalog 'Karvus', w którym znajdują się dwa pliki: plik postaci 'Karvus8.cre' oraz pusty plik '.d', którego nazwę zmienimy na przykładowo imię postaci, czyli będziemy mieli plik 'Karvus.d'.

Otwórz plik 'Karvus.d' za pomocą jakiegoś edytora tekstu. Teraz zaznaczę, iż wiedza na temat podstawowych komend języka Basic, czyli np. IF, THEN, GOTO byłaby mile widziana i przydatna, aczkolwiek postaram się wytłumaczyć wszystko od podstaw. Wpierw kilka słów na temat omawiania. Przedstawię teraz przykładowy dialog NPC. Wszystko, co znajdziecie w klamrach, to będą moje komentarze. Pozostała część to zawartość pliku '.d'. Zacznijmy więc:

BEGIN ~KARVUS~

(komenda ta mówi WeiDU, by stworzył plik Karvus.dlg. 'Karvus' to nazwa naszego pliku, więc możesz ją zmieniać wedle wyboru, lecz przypominam, że powinna być taka sama jak ta, którą wpisaliśmy w pliku '.cre'.)

IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0

(Jeśli bohater widzi cię po raz pierwszy, to zainicjuje ten blok o nazwie 0. To, co znajduje się w tyldach, to warunek dla pierwszego spotkania. Jest więcej różnych warunków, ale ten jest prawie zawsze spotykany.)

SAY ~Pozdrawiam cię! Nazywam się Karvus.~

(Po komendzie SAY w tyldach wpisujemy to, co ma powiedzieć nasza nowa postać, w tym wypadku jest to zdanie powitalne.)

IF ~~ THEN REPLY ~Witam. Jestem <GABBER>.~ GOTO 1
IF ~~ THEN REPLY ~Nie mam teraz czasu!~ GOTO 2
END

(Nietrudno domyślić się, że są to nasze odpowiedzi. Pewnie wielu ciekawi, co znaczy słowo GABBER. Otóż jest to imię osoby, która aktualnie rozmawia z naszym NPC-em, np. Imoen czy Viconia. Jak widać, tu również możemy użyć pewnych warunków, aby pojawiła się nasza odpowiedź. Aby jednak na razie za bardzo nic nie komplikować, umieściłem tylko dwie odpowiedzi znajdujące się w tyldach. Za nimi są komendy GOTO odsyłające nas do następnych bloków, odpowiednio do 1 lub 2 w zależności, jaką odpowiedź wybierzemy. Linijka END kończy blok.)

(Jak na razie stworzyliśmy jeden blok o nazwie 0 z dwoma łączami do bloków 1 i 2. Musimy teraz stworzyć oba te bloki. Zacznijmy od bloku 1.)

IF ~~ THEN BEGIN 1
SAY ~Miło cię poznać <GABBER>. Przybyłem niedawno z Waterdeep i szukam grupy poszukiwaczy przygód, do której mógłbym dołączyć. Mogę z wami podróżować?~
IF ~~ THEN REPLY ~Oczywiście.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie teraz.~ GOTO 2
END

(Tak więc po przywitaniu się nasz bohater proponuje drużynie wspólną podróż. Jeśli się zgodzimy, wybieramy pierwszą odpowiedź. Zauważmy słowo DO, oznaczające czynność, jaka zostanie wykonana. Pierwsza z nich to zostawienie w grze informacji o tym, że postać jest przyłączona, druga zaś przyłącza postać do drużyny. Komenda EXIT sprawia, że wychodzimy z rozmowy. Druga odpowiedź odsyła nas do bloku 2, który będzie naszym blokiem odmownym. Stwórzmy go teraz.)

IF ~~ THEN BEGIN 2
SAY ~No cóż. Wpadnij kiedyś ponownie.~
IF ~~ THEN EXIT
END

(Tym razem nie ma żadnych odpowiedzi, nie ma więc komend REPLY, a ponieważ jest tylko jedna opcja po słowach naszego bohatera, tylko ona zostanie wybrana. Pojawi się znane okienko 'Zakończ rozmowę'.)

(Mamy więc już gotowy dialog na pierwsze spotkanie z naszą postacią. Co jednak, jeśli nie przyłączymy postaci i ponownie z nią spróbujemy porozmawiać? Nie stanie się nic, chyba że stworzymy nowy dialog na następne spotkania.)

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN 3
SAY ~Wróciłeś! Mogę się do ciebie przyłączyć?~
IF ~~ THEN REPLY ~Tak.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie.~ GOTO 4
END

IF ~~ THEN BEGIN 4
SAY ~Cóż. Mimo wszystko miło było znów cię ujrzeć.~
IF ~~ THEN EXIT
END

(Wszystko powinno już być znane poza warunkiem w bloku 3. Literki GT oznaczają tyle, co więcej razy. W wolnym tłumaczeniu, jeśli postać rozmawiała z tobą więcej razy niż 0, to zacznie konwersację od tego bloku. Jeśli wybierzesz pierwszą odpowiedź, to postać przyłączy się do drużyny, jeśli nie, to zostanie odesłana do bloku 4, który również został przedstawiony.)

(Muszę wspomnieć, że po przyłączeniu postaci dialog ten traci znaczenie dla gry. Zostaje on zastąpiony przez cztery inne pliki o nazwach xxxxxxP, xxxxxxJ, xxxxxxD oraz Bxxxxxx, czyli odpowiednio w moim przypadku KarvusP, KarvusJ, KarvusD, a także BKarvus. Każdy z nich odpowiada za co innego. Wymaganym plikiem jest dialog pierwszy, który pozwala na wywalenie NPC z drużyny oraz ponowne przyłączenie. Pozostałe są opcjonalne, ale jeszcze do nich wrócimy. Skoro mamy już więc gotowy plik 'Karvus.dlg', stwórzmy 'KarvusP.dlg' w pliku 'Karvus.d', choć może być osobny.)

BEGIN ~KARVUSP~

(Nakazuje utworzenie pliku KarvusP.dlg)

IF ~Global("KarvusJoined","LOCALS",1)~ THEN BEGIN 0

(Zwracam uwagę, iż jest to inny dialog niż Karvus.dlg, tak więc mogę użyć tych samych nazw bloków. Zauważ, że jako warunek wpisujemy informację o przyłączeniu Karvusa do drużyny. Musi być ona identyczna z tą w powyższym pliku, czyli 'Karvus.dlg'. W naszym wypadku jest to 'KarvusJoined'. Zauważ, że za słowem LOCALS jest liczba 1 oznaczająca, że Karvus jest aktualnie w naszej drużynie.)

SAY ~Hej, to nie fair. Nie możesz mnie wyrzucić!.~
IF ~~ THEN REPLY ~Ojej. Chyba masz rację. Wróć do drużyny.~ DO ~JoinParty()~
EXIT

(Zwróć uwagę, że dialog 'xxxxxxP.dlg' automatycznie wywali NPC-a z drużyny, a potem ewentualnie przyłączy go znów, używając komendy JoinParty().)

IF ~~ THEN REPLY ~A jednak mogę.~ DO ~SetGlobal("VondoJoined","LOCALS",0)~
EXIT

(Zauważ, że ustawia to zmienną 'KarvusJoined' na 0 zamiast 1, co będzie informacją dla gry, że Karvus nie jest w tej chwili w drużynie.)

END

(Komenda ta kończy blok.)

(Teraz trzeba stworzyć blok do ponownego przyłączenia go, czyli jeśli zaczniemy z nim rozmawiać, to pojawi się ten blok.)

IF ~Global("KarvusJoined","LOCALS",0)~ THEN BEGIN 1
SAY ~Chcesz, byśmy znów razem podróżowali?~
IF ~~ THEN REPLY ~Tak. Dołącz do mnie.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Na razie nie. Przykro mi.~ EXIT
END

(To wystarczy, by stworzyć najprostszego NPC-a. Pozostała część, czyli interakcje, wszelkie komentarze itd. jest nieco bardziej skomplikowana. Ostatecznie twój plik 'xxxxxx.d' winien wyglądać następująco.)

BEGIN ~KARVUS~
IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0
SAY ~Pozdrawiam cię! Nazywam się Karvus.~
IF ~~ THEN REPLY ~Witam. Jestem <GABBER>.~ GOTO 1
IF ~~ THEN REPLY ~Nie mam teraz czasu!~ GOTO 2
END

IF ~~ THEN BEGIN 1
SAY ~Miło cię poznać <GABBER>. Przybyłem niedawno z Waterdeep i szukam grupy poszukiwaczy przygód, do której mógłbym dołączyć. Mogę z wami podróżować?~
IF ~~ THEN REPLY ~Oczywiście.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie teraz.~ GOTO 2
END

IF ~~ THEN BEGIN 2
SAY ~No cóż. Wpadnij kiedyś ponownie.~
IF ~~ THEN EXIT
END

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN 3
SAY ~Wróciłeś! Mogę się do ciebie przyłączyć?~
IF ~~ THEN REPLY ~Tak.~ DO ~SetGlobal("Karvus Joined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Nie.~ GOTO 4
END

IF ~~ THEN BEGIN 4
SAY ~Cóż. Mimo wszystko miło było znów cię ujrzeć.~
IF ~~ THEN EXIT
END

BEGIN ~KARVUSP~

IF ~Global("KarvusJoined","LOCALS",1)~ THEN BEGIN 0
SAY ~Hej, to nie fair. Nie możesz mnie wyrzucić!.~
IF ~~ THEN REPLY ~Ojej. Chyba masz rację. Wróć do drużyny.~ DO ~JoinParty()~
EXIT
IF ~~ THEN REPLY ~A jednak mogę.~ DO ~SetGlobal("VondoJoined","LOCALS",0)~
EXIT
END

IF ~Global("KarvusJoined","LOCALS",0)~ THEN BEGIN 1
SAY ~Chcesz byśmy znów razem podróżowali?~
IF ~~ THEN REPLY ~Tak. Dołącz do mnie.~ DO ~SetGlobal("KarvusJoined","LOCALS",1)
JoinParty()~ EXIT
IF ~~ THEN REPLY ~Na razie nie. Przykro mi.~ EXIT
END

(Mamy więc gotowy dialog dla naszej postaci. Mogę zatem przestać pisać w nawiasach.)

Uwierzcie mi na słowo, że większa część pracy jest już za wami. Teraz musimy stworzyć dwa skrypty, jeden dla naszej postaci, drugi zaś dla obszaru, na którym ma się ona znajdować.

Przy pomocy notatnika tworzymy plik tekstowy (tym razem końcówka '.baf' zamiast '.txt') i wpisujemy w nim:

IF
See([PC])
NumTimesTalkedTo(0)
THEN
RESPONSE #100
Dialogue(Nearest([PC]))
END

Dzięki temu nasza postać pierwsza rozpocznie rozmowę z członkiem drużyny. Zapisujemy go pod nazwą, jaką umieściliśmy w 'Override script' podczas tworzenia pliku '.cre' (Przecież mówiłem, żeby zapamiętać. Większość używa pewnie teraz IE Creature Makera w celu sprawdzenia tego). W moim przypadku będzie to 'Karvus'. Zgodnie z tym utworzyliśmy plik o nazwie 'Karvus.baf'. Umieszczamy go w podkatalogu 'karvus' w folderze naszego moda.

Teraz musimy jeszcze umieścić naszą postać w grze. Ponownie tworzymy plik tekstowy z końcówką '.baf'. Nadajmy mu nazwę obszaru, który uaktualniamy, np. 'AR0700', czyli słynna Promenada Waukeen. Mamy więc plik 'Ar0700.baf', który otwieramy i wpisujemy:

IF
Global(KarvusExists","AR0700",0)
THEN
RESPONSE #100
SetGlobal("KarvusExists","AR0700",1)
CreateCreature("Karvus8",[9137.2046],3)
END

Jeśli dobrze się wcześniej wczytaliście, to z pewnością rozumiecie, o co w tym chodzi. Komenda CreateCreature tworzy postać, jej nazwę umieszczamy w cudzysłowie, zaś liczby w kwadratowych nawiasach to współrzędne postaci. Jak kogoś interesuje 3, oznacza ustawienie postaci zgodnie z tarczą zegara.

Podsumowując ten etap, powinniśmy mieć folder 'Karvus NPC', a w nim pliki według schematu: Wielkimi literami oznaczono foldery. Małymi wszelkie pliki. Jeśli używasz portretów innych niż te, które są w grze, to powinieneś umieścić je także w katalogu 'Karvus'. Musisz również utworzyć podkatalog 'backup' w podkatalogu 'karvus'.

KARVUS NPC ---------------------> KARVUS ---------------------->BACKUP
Nowy dokument tekstowy.tp2 Karvus.d
WeiDU.exe Karvus.baf
Ar0700.baf
Karvus8.cre
KarvusL.bmp (opcjonalnie)
KarvusS.bmp (opcjonalnie)

Jeśli tak jest, to zostało ci tylko przygotować WeiDU do poprawnego działania. Po pierwsze zmień nazwę z 'WeiDU.exe' na 'Setup-Karvus.exe' oraz 'Nowy dokument tekstowy.tp2' na 'Setup-Karvus.tp2'. Następnie otwórz plik '.tp2' i wpisz w nim (to, co w nawiasach, to komentarze, więc je pomijamy):

BACKUP ~karvus/backup~ (potrzebne przy odinstalowaniu moda)
AUTHOR ~damian-staniszewski@wp.pl~ (adres e-maila do autora moda)
BEGIN ~Karvus NPC dla BG2~ (nazwa moda)

(W tym miejscu kopiujemy plik postaci i nadajemy nazwę NPC-owi.)

COPY ~karvus/Karvus8.cre~ ~override/Karvus8.cre~
SAY NAME1 ~Karvus~ (Imię naszej postaci. Poniżej to samo.)
SAY NAME2 ~Karvus~
SAY BIO ~Zapytany o przeszłość KARVUS pluje ci w twarz.~ (To jest biografia naszej postaci.)

(Teraz kompilujemy plik 'Karvus.d' do poszczególnych dialogów.)

COMPILE ~karvus/Karvus.d~
USING ~~

(Kompilujemy skrypt zachowań naszej postaci)

COMPILE ~karvus/Karvus.baf~

(Teraz uaktualniamy skrypt obszaru Promenady Waukeen za pomocą naszego skryptu.)

EXTEND_BOTTOM ~Ar0700.bcs~ ~karvus/Ar0700.baf~

(Teraz dodajemy informacje o dialogach naszej postaci, o których mowa była już wcześniej)

APPEND ~pdialog.2da~
~Karvus KarvusP KarvusJ KarvusD~
UNLESS ~Karvus~
UNLESS ~25POST~

APPEND ~pdialog.2da~
~Karvus KarvusP KarvusJ KarvusD Karvus25P Karvus25J Karvus25D Karvus25~
UNLESS ~Karvus~
IF ~25POST~

I to wszystko, jeśli chodzi o podstawy tworzenia NPC-ów za pomocą WeiDU.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • szpetal.keep.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • funlifepok.htw.pl

  • Sitedesign by AltusUmbrae.