Bethesda Tutorial Dialogue/pl

From the CreationKit Wiki
Jump to navigation Jump to search

Poradnik Bethesdy - Dialogi



RoundPolishFlag.pngStrona w języku polskim
Wymaga poprawek redakcyjnych lub przetłumaczenia linkowanych stron
Poradnik Bethesdy - Dialogi
seria: Podstawy tworzenia questu, rozdział: 3
Powrót do spisu poradników
LeftArrow.png Poprzedni poradnik Następny poradnikRightArrow.png


Przegląd[edit | edit source]

W tym rozdziale omówimy tworzenie nowych linii dialogowych w przykładowym pluginie i queście "Jedyna nadzieja dla Bendu Ola".

Czytelnik nauczy się:

  • Jak tworzyć w Creation Kit dialogi przypisane do określonych postaci.
  • Jak dodawać skrypty sterujące wydarzeniami na podstawie wyborów gracza w dialogu.


Podgląd dialogu[edit | edit source]

W Skyrim wprowadzony został nowy system tworzenia dialogów, który lepiej wizualizuje przepływ dialogów.

NewFeature.jpg Dla osób preferujących dawny podgląd dialogów, znany z Oblivion i Fallout 3, stary system wciąż istnieje i jest dostępny w oknie questu w zakładce Player Dialogue (en), a ten nowy jest dla jego nakładką.

Otwórz okno questu GSQ01, klikając na niego w oknie obiektów, a następnie otwórz zakładkę Dialogue Views (en). Okno powinno wyglądać tak:

EmptyDialogueTab.png

Aby dodać nowy podgląd dialogu, kliknij prawym przyciskiem na pustą listę i wybierz "New". Otworzy się małe okienko, w którym należy podać identyfikator dla nowego podglądu – domyślnie podstawi się ID questu, czyli tekst GSQ01. W naszym queście mamy dwie postacie: rozmawiający z graczem Bendu Olo oraz nierozmawiający złodziej. Będziemy chcieli mieć podgląd na to, jak przebiegają rozmowy z Bendu, dlatego jako ID dla View można wpisać "GSQ01ViewBendu".

Zaznacz utworzone ID tego podglądu na liście i kliknij prawym przyciskiem na puste pola po prawej stronie, aby utworzyć nową gałąź dialogową – wybierz opcję Create Branch. Pojawi się kolejne okienko z pytaniem o ID dla gałęzi Branch – podaj "GSQ01SpotkanieBenduBranch". Gdy klikniesz na OK, otworzy się jeszcze jedno okienko, tym razem z zapytaniem o ID tematu dialogu Topic. Możesz podać "GSQ01SpotkanieBenduBranchTopic", tak jak podpowiada edytor. W polach podglądu pojawią się prostokątne ramki, które na razie zapewne niewiele ci mówią:

DialogueStartingBranch.png

Zanim przejdziemy dalej, wyjaśnijmy sobie trochę podstawowej terminologii:

  • Response (en): wypowiedź. Jest to pojedyncza linia dialogowa, tekst wypowiadany przez aktora, ograniczony do 150 liter. Najczęściej jest to odpowiedź aktora na temat, który wybrał gracz w menu dialogowym. Można dla niej aktorowi ustawić pewną mimikę i animacje wyrażające stan emocjonalny.
  • Info (en): zbiór wypowiedzi. Zawiera jedną wypowiedź lub kilka, wypowiadanych przez aktora jednym ciągiem jedna po drugiej. Gdy aktor ma coś dłuższego do opowiedzenia, to w jednym zbiorze wypowiedzi Info umieścimy kilka wypowiedzi Response.
  • Topic (en): temat dialogowy, najczęściej wyświetlany w menu dialogowym w grze – gracz na niego klika, wybierając temat. Zawiera jeden lub kilka Info, na ogół powiązanych z pewną sytuacją.
  • Branch (en): gałąź. Najwyższy poziom z powyższych. W jednej gałęzi umieszczamy jeden lub kilka tematów dialogowych, które mają pewien wspólny wątek.

Tak więc do tej pory utworzyliśmy gałąź Branch, która automatycznie dodała nowy temat dialogowy Topic, który jednak na razie nie posiada żadnych wypowiedzi Info.

DialogueStartingBranchLabeled.png


Tematy rozmowy[edit | edit source]

Kliknij podwójnie na temat dialogowy, by dodać w nim jakieś wypowiedzi. Poczekaj chwilę, aż otworzy się nowe okno:

EmptyTopicWindow.png

W tej chwili interesuje na tylko pole "Topic Text". Będzie to temat, który wyświetli się graczowi do wyboru w menu dialogowym. Wpisz: "Czy potrzebujesz może pomocy w czymkolwiek?"

Aby dodać odpowiedź aktora na ten temat, podwójnie kliknij na listę z kolumną Info. Otworzy się kolejne okno.

EmptyResponseWindow.png

W polu Response Text wpisz tekst wypowiedzi aktora: "Tak, właściwe przydałaby się... Jakiś parszywy złodziej ukradł mój amulet. Czy odzyskasz go dla mnie?"

Uwaga: Obrazki pochodzą w angielskiej wersji językowej, a zatem posiadają też teksty w jęz. angielskim.

Na razie nie musisz przejmować się innymi polami, jakie są tutaj dostępne. Kliknij na przycisk OK. Okno zniknie i znajdziesz się ponownie w oknie "Topic Info".

InDepth.jpg Edytor może chcieć sprawdzać poprawność pisowni tekstu, z tym że posługuje się słownikiem angielskim. Jeśli tworzysz quest po polsku, to lepiej wyłączyć to sprawdzanie. Zapisz stworzone dialogi, plugin i zamknij edytor. W głównym katalogu gry edytuj plik SkyrimEditorPrefs.ini i zamień bSpellCheckEnabled z wartości 1 na wartość 0. Zapisz plik i uruchom ponownie edytor. Sprawdzanie pisowni zostanie dzięki temu wyłączone.


Wypowiedzi postaci - Topic Info[edit | edit source]

TopicInfoWindowStart.png

Bardzo ważnym polem jest lista warunków Conditions (en). To dzięki nim gra będzie wiedziała kiedy ma się pojawić temat rozmowy – czyli która postać może użyć tematu rozmowy i w jakich okolicznościach. Jeśli nie ustawimy tu żadnych warunków, to każdy aktor w świecie gry będzie miał temat rozmowy z tekstem „Czy potrzebujesz może...”.

Kliknij prawym przyciskiem na listę i wybierz New, aby utworzyć nowy warunek.

ConditionItem.png

Każdy taki warunek na liście Condition jest niezależny i sprawdzany osobno. Każdy zwraca Prawdę albo Fałsz, jedno albo drugie. Jeśli warunek jest spełniony, to zwraca Prawdę, w przeciwnym wypadku zwraca Fałsz. Dla tego dialogu (i dla większości dialogów w grze) pierwszy warunek ma sprawdzić kto może wypowiadać powiązaną z nim kwestię dialogową.

Domyślnie ustawia się funkcja GetIsID (en) bez parametrów (napis INVALID w polu parametrów mówi że parametry się niepoprawne i trzeba je zmienić), ponieważ to właśnie ona jest najczęściej używana. W Skyrim jest ponadto całe mnóstwo funkcji GetIs. Ich przeznaczenie jest proste – mają sprawdzić, czy dana rzecz, obiekt lub cokolwiek innego jest takie samo jak podano w parametrach. Zawsze zwracają prawdę (wartość 1) albo fałsz (wartość 0).

Kliknij na przycisk z napisem "INVALID", aby wybrać poprawnego aktora. Wybierz "GSQBenduOlo" z rozwijanej listy.

ConditionItemFilled.png

Kliknij na OK, by zapisać zmiany i zamknąć okienko. Od tej pory w grze ten temat rozmowy pojawi się tylko gdy gracz zacznie rozmowę z Bendu Olo. Właściwie to jeszcze nie wszystkie warunki, jakie mamy ustawić, bo czy chcemy aby Olo zawsze przedstawiał ten temat rozmowy gdy gracz zacznie z nim dialog? Oczywiście nie zawsze, bo mamy nasz quest. Chcemy aby ten temat, czyli zapytanie Ola skierowane do gracza o pomoc, pojawiał się zanim gracz zgodzi się udzielić mu pomocy. Czyli quest musi być w fazie wstępnej.

Dodaj kolejny warunek dla tego tematu. Tym razem chcemy sprawdzić fazę naszego zadania, czyli jako funkcję warunkową podaj GetStage (en). Funkcja ta zwróci fazę zadania w postaci liczbowej. Fazy naszego zadania wstępnie określiliśmy w planie oraz w zakładce "Quest Stages". Faza wstępna to faza 0, a kolejna ma numer 10 i wtedy już gracz wyrazi chęć pomocy i przyjmie zadanie.

Aby funkcja wiedziała z jakiego questu ma sprawdzić te fazy, to w parametrach trzeba jej podać ID questu - wybierz "GSQ01" i kliknij na OK.

Pozostaje ustalić pola Comparison oraz Value. Moglibyśmy w sumie zostawić "==" oraz zmienić Value ma 0.0000 – czyli sprawdzalibyśmy czy quest znajduje się w fazie 0. Jeśli jednak zechcemy wstawić jakąś fazę między 0 a 10 w naszym queście, to zepsujemy ten warunek, dlatego lepiej jest zapisać "<10".

ConditionItemGetStage.png

InDepth.jpg Zwróć uwagę, że za pomocą przycisków ze strzałkami, które znajdują się w lewej dolnej części okienka, można zmieniać kolejność warunków na liście. W naszym przykładzie kolejność ta nie ma znaczenia, ale jeśli zaczniesz używać warunków połączonych spójnikiem OR, to jest ona ważna.

Zapisz warunek i zamknij jego okno. Oba warunki mamy teraz podsumowane w oknie Topic Info:

TopicInfoWindowFilled.png

Kliknij na OK, by zamknąć okno Topic Info, potem znów na OK, by zamknąć okno Topic.


Połączenie dialogów[edit | edit source]

Jesteśmy z powrotem w widoku drzewa dialogów. Za pomocą przycisków + oraz – na dole okna lub kółka myszki możesz dopasować wielkość tekstu w podglądzie. Zaznaczone pole "Show All Text" automatycznie rozszerzy drzewa dialogowe tak, aby całe teksty były widoczne:

DialogueViewWithStuff.png

Ponieważ Olo w ostatnio dodanej wypowiedzi zadaje graczowi pytanie czy będzie chciał pomóc odzyskać amulet, to musimy umożliwić graczowi danie odpowiedzi. Kliknij prawym przyciskiem na pomarańczową ramkę gałęzi i wybierz "Add Topic". (Jeśli nie widzisz takiej opcji po kliknięciu, to zapewne klikasz w niewłaściwe miejsce.)

W oknie nowego tematu jako ID wpisz "GSQ01SpotkanieBenduTak", a jako Topic Text wpisz "Tak, chętnie ci pomogę". Kliknij podwójnie na liście odpowiedzi Info i jako odpowiedź wpisz: "Dzięki bardzo. Złodziej ukrywa się chyba w Gnieździe na Wietrznej Rubieży. Pospiesz się! W nagrodę ofiaruję ci dwa razy tyle, ile wart jest amulet!"

Gdy skończysz wpisywać nową wypowiedź, zwróć uwagę na dolną część okna i grupę Audio.

BadSoundExport.png

W kolumnie Voice Type wymienione są wszystkie rodzaje postaci, a w kolumnie Path ścieżki do folderów z plikami dźwiękowymi dla aktorów, którzy będą używać wypowiedzi Response. Cóż, właściwie mamy tu całe Skyrim, ponieważ nie ustawiliśmy żadnych warunków Conditions dla tej wypowiedzi. Kliknij na przycisk OK i dodaj warunek „GetIsID GSQBenduOlo == 1 na Subject” tak jak zrobiliśmy to poprzednio.

Kliknij teraz na stworzony Response Text „Dzięki bardzo. Złodziej...”, a zauważysz, że tym razem jest podany tylko dźwięk dla jednego typu postaci, dla MaleDarkElf, czyli dla Mrocznego Elfa płci męskiej.

GoodSoundExport.png

Klikaj na OK, by pozamykać okna i wrócić do drzewa dialogowego. Pojawił się nowy element - nowy temat w obrębie całej gałęzi.

MultiTopicBranch.png

Piękno tego systemu polega na tym, iż możemy tutaj sobie dowolnie przestawiać i układać poszczególne tematy. Dla gry nie znaczenia jak te tematy są tutaj ustawione. Przesuń nowy temat w miejsce, które uznasz za bardziej wygodne do podglądu całego dialogu.

Dodaj kolejny temat:

  • ID = GSQ01SpotkanieBenduNie
  • Topic Text = Niestety, teraz nie mam na to czasu.
  • Info = No cóż, szkoda.

Pamiętaj też aby w warunkach wypowiedzi Response ustawić warunek sprawdzający czy to mówi Bendu Olo. Gałąź powinna wyglądać teraz tak jak na poniższym obrazku:

UnconnectedDialogue.png

Mamy gotowe tematy, ale na razie nie są one ze sobą w żaden sposób powiązane (poza tym, że znajdują się na jednej gałęzi dialogowej). Kliknij na temat GSQ01SpotkanieBenduBranchTopic, aby go aktywować. Gdy najedziesz teraz myszką na tekst w białym polu, wskaźnik myszki zamieni się na rączkę. Wciśnij lewy przycisk i przeciągnij ten tekst do okienka z tematem GSQ01SpotkanieBenduTak. Tak samo podłącz temat GSQ01SpotkanieBenduNie. Po tych operacjach gałęzie będą wyglądać mniej więcej tak:

ConnectedDialogue.png

Gdy gracz rozpocznie rozmowę z Olem, jako temat do wyboru najpierw pojawi się "Czy potrzebujesz może pomocy". Olo odpowie, a następnie gracz otrzyma do wyboru dwa tematy, jeden z odpowiedzią "Tak", drugi na "Nie". Temat, który został podłączony do głównego tematu tej gałęzi dialogowej jako pierwszy, również jako pierwszy od góry pojawi się na liście tematów w grze.


Skrypty w dialogach[edit | edit source]

Do dialogu dodamy malutki skrypcik, bardzo prosty i dosyć często używany. Nie musisz się przejmować, jeśli na razie skrypty w ogóle cię nie interesują. Kod naprawdę będzie banalny, a poza tym wszystko sobie omówimy.

W tej chwili mamy ustawiony przepływ tematów dialogowych, ale nie powiedzieliśmy jeszcze grze co oznaczają poszczególne wybory tematów, których będzie dokonywał gracz. Gdy gracz zgodzi się pomóc Olowi i wybierze na jego pytanie temat "Tak" (GSQ01MeetingBenduTak), to quest musi zostać przełączony na wyższą fazę. Zwróć uwagę na taką rzecz:

  • gdy klikniesz podwójnie na temacie „Tak, chętnie ci pomogę.”, to otworzy się okno jego właściwości, czyli okno Topic.
  • gdy klikniesz podwójnie na tekście Info w białym polu pod nagłówkiem tematu, czyli w tekst „Dzięki bardzo.”, to otworzy się okno właściwości wypowiedzi aktora, czyli okno Topic Info.

Nam w tej chwili potrzebne jest okno z danymi wypowiedzi aktora NPC. Na dole tego okna mamy pola skryptów oznaczone jako "Begin" oraz "End". Skrypt z pola Begin jest uruchamiany gdy aktor zaczyna mówić daną wypowiedź, natomiast skrypt z pola End gdy aktor kończy wypowiedź. (W terminologii języka skryptowego, kod zapisany w polach Begin oraz End jest "skryptowym fragmentem" - sprawdź artykuł o fragmentach skryptów w tematach dialogowych (en), aby dowiedzieć się więcej.)

W polu ze skryptem End dodaj następujące linie tekstu:

GetOwningQuest().SetObjectiveDisplayed(10)
GetOwningQuest().SetStage(10)

Właściwie nie jest to zwykły tekst, a kod skryptowy zawierający polecenia i wykonujący pewne działania.

Polecenie SetObjectiveDisplyed(10) omówimy nieco później. Polecenie SetStage(10), jak zapewne już się domyślasz, powoduje ustawienie fazy questu na indeks 10. Wstęp GetOwningQuest() mówi jedynie, że quest, o który nam chodzi, jest tym, w którym utworzono ten dialog.

Kliknij na przycisk "Compile" poniżej, a skrypt zostanie skompilowany, jeśli nie ma błędów. Skrypt możesz też wpisać po naciśnięciu na przycisk Edit – otworzy się okno edytowania skryptu i tam też znajdziesz wszystkie komunikaty na temat kompilacji; opcja Compile jest w menu Build.

I to wszystko. Dolna prawa połowa okna będzie wyglądała tak jak na poniższym obrazku:

ScriptedDialogue.png

Zamknij to okno, zatwierdzając zmiany. W podgałęzi tematu "Tak" zauważysz, że na początku wypowiedzi jest dodane "[S]". Dzięki temu łatwo rozpoznać, które części dialogu mają przypisane jakieś dodatkowe działania.


Dialogi startowe i sprawdzanie warunków[edit | edit source]

Zrobiliśmy całą jedną gałąź dialogową. Domyślnie pierwsza utworzona gałąź jest „gałęzią najwyższego poziomu” i oznaczona jest ciemnym kolorem pomarańczowym. Są jeszcze inne rodzaje gałęzi dialogowych, ale w tej chwili nie trzeba się nimi przejmować. Teraz wystarczy wiedzieć, że gałąź najwyższego poziomu jest dostępna jako jedna z pierwszych rzeczy, które aktor będzie mógł powiedzieć graczowi.

Temat w nagłówku, który jest oznaczony jaśniejszym kolorem pomarańczowym, jest również tematem początkowym tej gałęzi dialogowej. Gdy gracz podejdzie do aktora i rozpocznie z nim rozmowę, aktor zacznie szukać takiego tematu początkowego. Gra sprawdzi, który temat początkowy wybrać, weryfikując warunki pojawienia się tematów, i poda je graczowi na liście w menu dialogowym. Jak pamiętasz, my ustawiliśmy dopiero jeden temat początkowy i daliśmy mu warunek, iż faza naszego questu musi być mniejsza niż 10. Gdy gracz zaakceptuje quest i wybierze temat „Tak”, to zgodnie z tym co napisaliśmy w skrypcie, faza zadania zmieni się na 10 i warunek dla tematu początkowego tej gałęzi dialogowej już nie będzie spełniony, czyli cały ten dialog już więcej nie pojawi się w grze.

Nasz temat startowy ma dwa tematy podrzędne, „Tak” oraz „Nie”. W tych podrzędnych, nie-początkowych tematach również ustawiliśmy warunek, wskazując że to Bendu Olo ma wypowiadać linie dialogowe. W tym przypadku jednak to nie było konieczne, dodaliśmy tam ten warunek tylko po to, aby znacznie skrócić sobie listę plików dźwiękowych, które mamy przygotować dla mówiącej postaci. Gra i tak nie przepuściłaby gracza do tematów podrzędnych, gdyby nie były spełnione warunki tematu początkowego.

Warto jeszcze dodać, że jeśli gracz wybierze w grze temat początkowy, który nie posiada żadnych tematów podrzędnych, to gra ponownie będzie szukać tematów o najwyższych poziomach i przedstawi je w menu dialogowym do wyboru. Jeśli takiego tematu nie znajdzie, to dialog zostanie zakończony.


Przetestowanie[edit | edit source]

Wczytaj grę z pluginem i udaj się porozmawiać z Olem. (Możesz użyć konsoli i komendy COC MixwaterMillWorkersHouse, aby od razu znaleźć się na miejscu.) Tym razem Olo powinien mieć coś więcej do powiedzenia, niż ostatnio.

DialogueInGame.png

Z tak zbudowanym dialogiem są jeszcze dwa problemy:

  1. Wypowiedź postaci Ola szybko się kończy, tak iż trudno przeczytać linie tekstu będące podpisami dla dialogów postaci (pamiętaj aby je włączyć w opcjach gry!). Dzieje się tak dlatego, ponieważ aktor Olo nie otrzymał żadnych dźwięków do tych dialogów.
  2. Jeśli odmówisz pomóc Olowi, dialog przeskoczy do początku, co jest nieco dziwne.

Oba te mankamenty postaramy się naprawić.


Głos postaci[edit | edit source]

W edytorze otwórz "GSQ01SpotkanieBenduBranch". W polu danych wypowiedzi „Tak, właściwe przydałaby się...” na dole jest przycisk "Record".

RecordButton.jpg

Jeśli masz podłączony do komputera mikrofon, to możesz nacisnąć ten przycisk i nagrać wypowiedź. Właściwie nie musisz nic mówić, wystarczy że kilka sekund nagrasz ciszy. Mikrofon jest konieczny tak czy inaczej, a podłączyć go należ zanim uruchomi się cały edytor Creation Kit. Po zakończeniu nagrywania kliknij na przycisk "Save", aby zapisać pliki. Będą dwa pliki – jeden z dźwiękiem oraz drugi z danymi ruchu ust, które aktor z gry wykorzysta.

Zrób to samo dla pozostałych dwóch wypowiedzi. Przy okazji, gdy będziesz to robić, ustaw im flagę Goodbye. Dzięki niej, gdy wypowiedź aktora się zakończy, zakończy się również dialog. We właściwościach szczegółowych wypowiedzi, w polach Audio możesz również zmienić stan emocjonalny mówiącego aktora w polu Emotion Type, a w polu Emotion Value ustawić natężenie emocji (zakres od 0 do 100). Dzięki temu aktor będzie również wyrażał mową ciała czy jest szczęśliwy, smutny czy np. przerażony.

Achtung.png Czasami gra nie potrafi odczytać głosu postaci zapisanego w plikach WAV/XMW z powodów na razie nieznanych. Aby naprawić ten błąd, można konwertować źródłowe pliki WAV na XWM, a następnie na FUZ, dodając powiązane z nimi odpowiednie pliki LIP. Cały ten proces został bardziej szczegółowy opisany tutaj.


Dodatkowe dialogi[edit | edit source]

Skoro już jesteśmy przy temacie, na świeżo, pierwsze koty za płoty i z pewnością już potrafisz w miarę szybko poruszać się po oknach dotyczących dialogów, to stworzymy jeszcze dialog dla sytuacji gdy gracz wraca do Ola z odnalezionym amuletem (faza 30).

Utwórz nową gałąź dialogową, nazwij ją np. GSQ01BenduKoniecBranch. Temat początkowy może nazywać się domyślnie, tak jak podpowiada edytor, czyli GSQ01BenduKoniecBranchTopic. Jako tekst tematu wpisz coś w stylu „Przynoszę twój amulet.” Ustaw flagę Goodbye i warunki z Bendu Olo oraz fazą zadania 30 – temat ma się pojawić tylko gdy quest jest w fazie 30 (wg naszego planu, w tej fazie gracz odzyskał amulet). Odpowiedź aktora: „Mam nadzieję, że ten złodziej otrzymał to, na co zasłużył!” Pamiętaj też, aby dodać skrypt przestawiający fazę zadania na 40 i ustawić flagę Goodbye.

Masz już wystarczającą wiedzę, by wykonać powyższe działania. Wynik powinien wyglądać mniej więcej tak:

FinishingQuestDialogue.png

To oczywiście jeszcze nie koniec. Brakuje między innymi zdarzeń, które przestawią quest od fazy 10 do 30. Zajmiemy się tym w kolejnych poradnikach.

InDepth.jpg Może się wydawać, że potrzeba włożyć dużo pracy tylko po to, aby jakaś postać wypowiedziała zaledwie kilka linijek tekstu. Część tej złożoności pracy pochodzi z dawnych systemów, jeszcze z typowo tekstowego systemu dialogowego z Morrowind. Trzeba jednak również zauważyć, że ten sam system dźwiga na swoich barkach również tematy wypowiadane przez wiele postaci, okrzyki podczas walk, krótkie powitania postaci i wiele innych. Czasami elastyczność powstaje kosztem złożoności i rozbudowania o wydawałoby się niepotrzebne elementy.

Gdy nabędziesz trochę wprawy, będziesz tworzyć dialogi mechanicznie, niemal tak szybko, ile czasu potrzeba na napisanie samych tekstów dialogu.


LeftArrow.png Poprzedni poradnik Powrót do spisu poradników Następny poradnik RightArrow.png



Language: English  • français • polski • русский