Poprzedni temat «» Następny temat
[TUTORIAL] Tworzenie inforegionów z nowym tekstem
Autor Wiadomość
L`f 
Uczeń Gonda


Wiek: 26
Posty: 1389
Podziękowania: 289/154
Wysłany: 2010-11-10, 21:57   [TUTORIAL] Tworzenie inforegionów z nowym tekstem

TWORZENIE INFOREGIONÓW Z NOWYM TEKSTEM
(oraz zagadnienia pokrewne)


Opracowanie: L`f


Większość (jeśli nie prawie wszystkie) rodzajów plików gry da się zmodyfikować tylko za pomocą aplikacji WeiDU, jednak najczęściej jest to niewygodny i nieprzystępny sposób dla osoby mało zaznajomionej z kodem. Z pomocą w tworzeniu/edycji takich plików obszarów, sklepów, przedmiotów itp. przychodzą nam edytory takie jak DLTCEP bądź Near Infinity. Ich wadą jest jednak to, że nie są one w stanie zmodyfikować plików gry istniejących na komputerze osoby, która nasz mod zainstaluje.

Objaśnię to na przykładzie pól informacyjnych (tzw. inforegionów) i dla ich przykładu podam rozwiązanie problemu (które znajduje też zastosowanie w wielu innych podobnych operacjach) bez pisania zaawansowanego kodu. Inforegiony to element dość znaczący dla gracza, zatem jeśli ktoś z Was zamierza dodawać do gry własne obszary, warto nauczyć się go tworzyć. Do czego serdecznie zapraszam. ;>


SPIS TREŚCI:

1. Od czego zacząć?
1.1. Potrzebne edytory
1.2. Co to są inforegiony? – opis i funkcje

2. Mechanika implementacji inforegionu w pliku *.are

3. Przypisanie tekstu do inforegionu z poziomu WeiDU
3.1. Komenda przypisująca tekst
3.2. Co to jest offset i jak go znaleźć?
3.3. Umieszczenie tekstu w grze

4. Elementy pokrewne
4.1. Umieszczanie znaczników z własnym tekstem na mapie
4.2. Dodawanie własnych nazw w gospodach, sklepach, tawernach i świątyniach

5. Kilka praktycznych porad



1. Od czego zacząć – czyli z czym to się je


1.1. Potrzebne edytory

Wszelkie działania związane z mechaniką tworzenia inforegionów są wykonalne z poziomu WeiDU, jednak wygodniej (i to o wiele) użyć bardziej przyjaznych modderowi edytorów zawartości gry. Sam korzystam z DLTCEP v7.1 i to dla tego edytora napisałem ten poradnik. DLTCEP jednak pozbawiony jest jednej przydatnej funkcji, z której korzysta się podczas tworzenia inforegionów, dlatego należy również zaopatrzyć się w Near Infinity. Dodam, że aby korzystać z Near Infinity musimy zainstalować Java Runtime firmy Sun. Samo WeiDU również będzie nam potrzebne do zainstalowania modu i zaimplementowania nowych stringów w pliku dialog.tlk.
Charakterystyka DLTCEP-a oraz Near Infinity znajduje się w tym tutorialu autorstwa Zeda Noceara, zaś opis pojęć takich jak ‘string’, ‘dialog.tlk’ – w moim tutorialu dotyczącym tworzenia dialogów (punkt 1.2).

1.2. Co to są inforegiony? – opis i funkcje

Pole informacyjne obszaru gry (z ang. info region, czyli ‘inforegion’) to obszar funkcyjny opisujący (poprzez tekst) jakiś obiekt istniejący na danym obszarze gry. Opis ten wyświetla się po kliknięciu na dany obiekt. Całkiem przydatne.
Inforegiony mogą pełnić funkcje informujące o fabule bądź czysto kosmetyczne, ubarwiając obszar. Te pierwsze może reprezentować np. informacja o zamknięciu wrót do pałacu w Suldanesselarze, te drugie zaś – informacja o wyglądzie budynku gildii Złodziei Cienia.


2. Mechanika implementacji inforegionu w pliku *.are


Dobra, koniec teoretyzowania. Kwestie techniczne w tym wypadku nie są skomplikowane, o czym świadczy brak podpunktów w tym punkcie poradnika. ;)

Jeśli w swoim modzie dodajesz nowy obszar do gry, musisz posiadać w zasobach plik *.are. Otwieramy go zatem (DLTCEP-em) i przechodzimy do zakładki obszarów funkcyjnych – regionów (‘Regions’). Następnie wykonujemy szereg operacji:
• klikamy w ‘Add region’;
• zmieniamy nazwę naszego regionu na wybraną przez siebie – po nazwie region będzie interpretowany przez grę;
• zmieniamy typ regionu na ‘1 Info’; (logiczne ;>)
• edytujemy obszar, jaki zajmuje region: klikamy ‘Edit polygon’, następnie ‘Preview’ (aby widzieć grafikę obszaru) i ‘Insert’ (aby umieścić nowy region), po czym klikamy w podgląd grafiki, umieszczając tam kolejne punkty wielokąta stanowiącego obszar inforegionu. W ten sposób obszarem inforegionu możemy uczynić każdy kształt na obszarze gry.


Klikamy ‘Back’;
• Ustalamy punkt, w którym pojawi się tekst opisu: klikamy ‘Set launch point’ i wybieramy odpowiedni punkt na grafice obszaru;
• Wybieramy wygląd kursora po najechaniu myszą w grze na obszar inforegionu. Zwykle jest to znak zapytania (wartość parametru ‘Cursor index’: 22).

I mamy stworzone wszystkie techniczne aspekty inforegionu. Niech przykładowe wartości tych parametrów wyglądają tak, jak przedstawione poniżej:



Banalne – ale nie ma przypisanego opisu. Owszem, mamy przycisk ‘Edit strings’, ale jeśli chcemy dodać własny tekst dodawany przy instalacji modu do dialog.tlk, na nic on się nam nie przyda – musimy tam bowiem wprowadzić numer przypisanego stringu. A takiego nasz tekst jeszcze nie ma. ;)

I w tym właśnie momencie skupimy się na istocie poradnika – czyli *jak* ten tekst dodać.


3. Przypisanie tekstu do inforegionu z poziomu WeiDU


3.1. Komenda przypisująca tekst

Przechodzimy teraz do pliku *.tp2 naszego modu (zakładam, że taki już istnieje), bowiem w nim właśnie umieszcza się instrukcje, które nakażą WeiDU dodać tekst opisu do inforegionu.
Komendą, która przypisuje string do jakiegokolwiek miejsca w modyfikowanych przez nas plikach jest SAY, a dokładniej:

Kod:
SAY offset ~tekst~


Tak, to jest to samo SAY, którym przypisujemy na przykład imię do pliku *.cre, bądź opis do przedmiotu lub czaru. Między tyldami wstawiamy tekst stringu, w tym przypadku tekst informacji wyświetlanej nad inforegionem.
Kluczem do umieszczenia tekstu we właściwym miejscu pliku jest ustalenie dla tej funkcji właściwego offsetu. Czym jednak jest ten ‘offset’? Na to pytanie postaram się odpowiedzieć w następnym podpunkcie.

3.2. Co to jest offset i jak go znaleźć?

Offset to liczba przypisana danemu parametrowi w danym pliku modyfikowanym. Każdy z poszczególnych atrybutów danego pliku (np. w *.are będą to: prawdopodobieństwo wystąpienia deszczu, możliwość odpoczynku, poszczególne postaci, utwory muzyczne, oznaczenie obszaru zewnętrznego itp.) ma swój unikalny offset. Tak, pod parametrami komendy SAY takimi jak ‘NAME1’ (imię postaci) lub ‘DESC’ (opis przedmiotu/czaru) kryją się również konkretne offsety, które WeiDU odpowiednio identyfikuje.
Intuicyjnie rzecz biorąc, offset to rodzaj adresu danego parametru w danym pliku. My zaś chcemy poznać ‘adres’ tekstu inforegionu, który przed chwilą stworzyliśmy, aby móc go umieścić w komendzie SAY w pliku *.tp2. Jednak nie uczynimy tego, używając jedynie DLTCEP-a. Po to właśnie potrzebny nam Near Infinity.

Odpalamy zatem ten edytor i otwieramy plik chitin.key modyfikowanej przez nas gry (znajduje się on w głównym katalogu gry). Należy również w menu ‘Options’ zaznaczyć opcję ‘Show Hex Offsets’ – bez tego nie poznamy przedmiotu naszych poszukiwań.



Następnie otwieramy w Near Infinity nasz plik *.are. Widzimy tutaj składowe parametry naszego pliku. Przechodzimy następnie w dół, aż znajdziemy atrybuty opisane jako ‘Info, trigger or exit point’ – czyli obszary funkcyjne (regiony) naszego obszaru.


Klikamy dwukrotnie na wiersz oznaczający inforegion, który chcemy zmodyfikować. Otwiera się nowe okienko wyświetlające wszystkie parametry danego inforegionu (i ich offsety).


Parametr określający tekst opisu jest oznaczony jako ‘Info point text’ (zaznaczony na screenie). Jeśli nie jest do niego przypisany żaden tekst, jego wartość będzie oznaczona jako ‘No such index’, co również widać na screenie. Najbardziej jednak interesuje nas prawa strona okna – wyświetlony tam zostaje poszukiwany przez nas offset danego parametru. Na zrzucie ekranu zaznaczyłem go na czerwono. W moim przypadku to: 19d0 (litera h oznacza, że offset podany jest w systemie szesnastkowym – hexadecimal). Voilà! Zapisujemy sobie ten numerek (w Notatniku, na kartce, na blacie biurka bądź na dłoni).

Uwaga! Nie dodajemy tekstu poprzez Near Infinity, ponieważ w takiej sytuacji string zostanie dodany tylko do naszego dialog.tlk, a nie – jak powinno być – przy instalacji do dialog.tlk naszego odbiorcy. Pozostawiamy plik *.are niezmienionym.

3.3. Umieszczenie tekstu w grze

Skoro mamy już offset, otwieramy teraz nasz plik *.tp2. Znajdujemy w nim linijkę z operacją kopiowania naszego pliku *.are. Bezpośrednio pod nią dodajemy linię z komendą SAY. Będzie to wyglądało następująco:

Kod:
COPY ~[ścieżka_pliku]\*.are~ ~override\*.are~
SAY offset ~tekst~


Dla mojego przykładu będzie to wyglądało tak:

Kod:
COPY ~[ścieżka_pliku]\arvl02.are~ ~override\arvl02.are~
SAY 0x19d0 ~Ten pomnik przedstawia piękną, lecz dostojną niczym królowa elfkę o łagodnym uśmiechu. Napis na cokole z nieobrobionego głazu brzmi: 'An'iyne Zameth'.~


Przed numerem offsetu dodajemy prefiks ‘0x’, aby WeiDU zinterpretowało numer jako zapisany w systemie szesnastkowym.
Następnie zapisujemy zmiany. I wszystko.

Możemy teraz sprawdzić, jak nasz inforegionik prezentuje się podczas rozgrywki. W tym celu uruchamiamy aplikację instalatora naszego modu i implementujemy obszar w plikach gry. Następnie odpalamy Baldura i przenosimy się na interesujący nas obszar. Oto efekt naszej pracy:



Ładne. I całkiem przydatne. ;>


4. Elementy pokrewne


4.1. Umieszczanie znaczników z własnym tekstem na mapie

Dodawanie znaczników opiera się na podobnym mechanizmie, co umieszczanie nowych obszarów funkcyjnych.
DLTCEP-em otwieramy nasz plik *.are i w zakładce ‘Variables & notes’ klikamy ‘Add note’. Pozostaje nam teraz jedynie zmienić nazwę znacznika i ustalić jego pozycję na minimapie naszego obszaru. Możemy też zmienić kolor naszego znacznika, jeśli nie podoba nam się standardowy. ;)

Tekst znacznika dodajemy podobnie, jak tekst opisu inforegionu. Postępując zgodnie z tym samym algorytmem otwieramy nasz plik *.are w Near Infinity, a w jego atrybutach szukamy tego oznaczonego poprzez ‘Automap node’ (zwykle znajduje się on prawie na końcu listy atrybutów pliku). Klikamy weń.


Atrybut, który nas interesuje, to ‘Text’. Przypisany mu offset (na screenie – 275c) zapisujemy – następnie otwieramy plik *.tp2. Pod komendą kopiowania naszego pliku *.are dodajemy kolejną komendę SAY. Podam na przykładzie:

Kod:
COPY ~[ścieżka_pliku]\arvl02.are~ ~override\arvl02.are~
(… - komendy SAY dotyczące inforegionów)
SAY 0x275c ~Namiot Straży Varlemy~


Pozostaje nam zapisać zmiany. A po instalacji modu możemy cieszyć się efektami:



Miłe, łatwe i przyjemne. Zabrakło jedynie łapki pokazującej ten punkt w dolnym prawym rogu minimapy (na screenach kursor się nie pokazuje. ;>).

4.2. Dodawanie własnych nazw w gospodach, sklepach, tawernach i świątyniach

Jeśli chcemy stworzyć nowy sklep, pijalnię bądź świątynkę, nie musimy nadawać mu standardowej nazwy. W tym wypadku opisany przeze mnie algorytm również się przydaje. Tym razem bazą naszych działań będzie plik *.sto.
Jeśli chodzi o nazwę danego przybytku – sprawa jest wyjątkowo prosta, gdyż atrybut nazwy w pliku *.sto ma stały offset równy 0xc. Komendę SAY (pod komendą COPY dla danego *.sto) możemy zatem napisać następująco:

Kod:
SAY 0xc ~Nazwa sklepu~


Bądź:

Kod:
SAY NAME2 ~Nazwa sklepu~


– ponieważ dla WeiDU oznaczenie ‘NAME2’ jest równoznaczne z wartością offsetu 0xc.

Trudniej sprawa się ma z nazwami napitków w tawernie lub gospodzie. Po dodaniu ich w DLTCEP-ie i ustawieniu ich ceny (i szansy na poplotkowanie z barmanem) pozostaje nam jedynie ustalenie ich imienia. Również robi się to za pomocą komendy SAY, ale offsety kolejnych trunków są zmienne, dlatego wyciągamy je poprzez Near Infinity.

Klikamy w odpowiedni atrybut oznaczony ‘Drink’, gdzie kryje się poszukiwany przez nas parametr o nazwie ‘Drinkname’. Spisujemy jego offset i wstawiamy go do kolejnej komendy SAY w pliku *.tp2 (pod SAY określającym nazwę tawerny).



Całość będzie wyglądała następująco:

Kod:
COPY ~[ścieżka_pliku]\*.sto~ ~override\*.sto~
SAY NAME2 ~Nazwa knajpy~
SAY offset ~Nazwa trunku~


Przykładowo:

Kod:
COPY ~[ścieżka_pliku]\vltav01.sto~ ~override\vltav01.sto~
SAY NAME2 ~Knajpa Kasolava i Lenoviusa~
SAY 0x108 ~Wspomnienie Iliane~


Zapisujemy. Teraz możemy upić Jaheirę innymi trunkami niż Bursztynowe piwo z Amn lub Wiecznomiód:



Komenda SAY ma mnogość zastosowań, pozwalając wstawić własny string praktycznie wszędzie tam, gdzie nie sięgają pliki dialogów i skryptów. Jedyną potrzebną do tego operacją jest odnalezienie offsetu danego parametru, co jednak nie powinno sprawiać problemów – w Near Infinity większość atrybutów jest bardzo przystępnie przedstawiona.


5. Kilka praktycznych porad


• Jeśli zmieni się ilość atrybutów ‘poprzedzających’ modyfikowany przez nas parametr, zmieni się także offset tego parametru – a to oznacza, że niezbędna będzie aktualizacja offsetów danego pliku w *.tp2. Bez tego string zostałby dodany do całkiem innego atrybutu, niż powinien. Dlatego najlepiej znajdować offsety (i dodawać komendy SAY) pod koniec tworzenia danego pliku.
• Inforegiony wzbogacają rozgrywkę, ale nie należy też przesadzać z ich ilością i upychać ich, gdzie popadnie. Opisanie inforegionem każdego zwykłego drzewa na obszarze może jedynie wywołać u gracza lekką konsternację, nie zaś lepiej opisać obszar. Ewentualnie jeśli na obszarze jest wiele różnych elementów, na które chcemy zwrócić uwagę, można pokusić się o opisanie ich w taki sposób, ale z umiarem.
• Warto uważać na długość nazw sklepów i im podobnych. Zbyt długie nie zmieszczą się w wyznaczonym miejscu w okienku sklepu. Podobnie rzecz się ma nazwami napitków.

Pytania lub uwagi dotyczące tego poradnika proszę zgłaszać na moje PW.

Źródła:
- Oryginalne pliki BG II + ToB
- readme WeiDU
- pliki wczesnych wersji obszarów z modu ‘Dni V.’
- trochę własnego pomyślunku

Z życzeniami braku błędów w kodzie, L`f.
_________________
AshfncaeicaliuheangfkacgakfgegcalgfcalhfcamhlhKi~.!
Podziękuj autorowi tego posta
 
 
 
Więcej szczegółów
Za tę wypowiedź podziękowali:
Torn, Jvegi, Kirara, Yarpen, Tuldor88
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
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  
Powered by phpBB modified by Przemo © 2003 phpBB Group