piątek, 15 lipca 2016

Gothic 2 Noc Kruka - Ciekawostka #1

  Zapewne większość wie, że bandytę przed jaskinią Brago (chodzi o tych bandytów na początku gry, koło Cavalorna) można za pomocą niezastąpionej sztuki dialogu i negocjacji wprowadzić w taki stan, że będzie niezwykle skłonny dostarczyć bohaterowi wielu pożytecznych informacji. Wielu też wie, że można mu powiedzieć o tym, że zamierza się z Cavalornem zaatakować ich kryjówkę, a ten "da" trochę doświadczenia i ucieknie (wielu też wie, że ucieka do krzaków, w których siedzi Młody wilk, do którego warto najpierw pójść i "zebrać" z niego doświadczenie). Większość też go (rzeczonego Bandytę) wtedy zabija. Ale, jak się okazuje, można to całe zdarzenie przeprowadzić jeszcze optymalniej. Otóż należy porozmawiać z Malethem (pasterzem z farmy Lobarta) o rzeczonych bandytach. Wtedy będzie można porozmawiać z naszym Bandytą o tym, że farmerzy o nich wiedzą, to znowu bohater "uzyska" więcej doświadczenia, a Bandyta ucieknie tym razem do obozowiska Cavalorna.

Modding #5 - Tworzenie przedmiotów

Tak więc wytłumaczę zasady tworzenia nowych przedmiotów. Nowy przedmiot należy dać w tym samym folderze co inne, a nazwa pliku może być dowolna, ale musi mieć IT_ na początku (a plik ma być w formacie takim jak inne).

INSTANCE RodzajPrzedmiotu_EwentualnyNapisAddonLubInny_NazwaPoAngielsku (C_Item)
  INSTANCE musi być, bo to znaczy, że teraz będziemy coś definiować
  Nazwa, którą podałem jest tylko sugerowana, może być Dupa, ale jakakolwiek by nie była powinna być czytelna i musi być unikatowa
  (C_Item) mówi Gothikowi, że to jest przedmiot

{
  Klamra otwiera definicję przedmiotu

name     = "Nazwa";
  Jest to nazwa, która jest wyświetlana, gdy przedmiot leży na ziemi, nie w ekwipunku

mainflag    = KATEGORIA_PRZEDMIOTU;
  Dzięki temu Gothic wie jak ma traktować ten przedmiot (ogólnie)
  Oto kategorie główne występujące w Gothiku:
  ITEM_KAT_NF  - Broń do walki w zwarciu ("Near Fight")
  ITEM_KAT_FF  - Broń do walki na odległość ("Far Fight")
  ITEM_KAT_MUN  - Amunicja do broni do walki na odległość
  ITEM_KAT_ARMOR - Zbroje
  ITEM_KAT_FOOD  - Jedzenie
  ITEM_KAT_DOCS  - Dokumenty (listy, książki, itd.)
  ITEM_KAT_POTIONS - Mikstury
  ITEM_KAT_LIGHT - Pochodnie
  ITEM_KAT_RUNE  - Runy i zwoje
  ITEM_KAT_MAGIC - Przedmioty magiczne (pierścienie, amulety, itd.)
  ITEM_KAT_NONE - To co nie pasuje nigdzie indziej (np. muszle)
  ITEM_KAT_KEYS  - klucze
 
flags     = FLAGA;
  Dzięki temu Gothic wie jak ma traktować ten przedmiot (szczególnie)
  Oto flagi występujące w Gothiku (używane):
  Bronie:
  ITEM_SWD - Miecze jednoręczne
  ITEM_AXE - Topory jednoręczne
  ITEM_2HD_SWD - Miecze dwuręczne
  ITEM_2HD_AXE - Topory dwuręczne
  ITEM_BOW - Łuki
  ITEM_CROSSBOW - Kusze
  Przedmioty magiczne:
  ITEM_RING - Pierścienie
  ITEM_AMULET - Amulety
  ITEM_BELT - Pasy
  Inne:
  ITEM_MISSION - Ważne, taki przedmiot nie może być usunięty (czyli np. NPC, który ma taki przedmiot w ekwipunku nie zniknie po śmierci
  ITEM_MULTI - Czasami trzeba dać, żeby można było "kumulować" przedmiot w ekwipunku
  ITEM_TORCH - Pochodnie

value     = Liczba;
  Wartość przedmiotu

damagetype    = TYP_OBRAŻEŃ;
  Tylko do broni, oto typy obrażeń (używane do broni):
  DAM_BLUNT - Obuchowe (do młotów, maczug, itp.)
  DAM_EDGE - Sieczne (do mieczy, toporów, itp.)
  DAM_FIRE - Ogień
  DAM_FLY- "Latające", jak się to da, to po trafieniu "delikwent" odlatuje (jak u trolla)
  DAM_MAGIC - Magiczne
  DAM_POINT - Od pocisków

damageTotal    =  Liczba;
  Obrażenia broni - tylko do broni
 
damage   [TYP_OBRAŻEŃ]  = Liczba;
  Jeśli broń ma więcej niż jeden typ obrażeń można dla każdego typu ustawić wartość

wear      = MIEJSCE_ZAŁOŻENIA;
  Od miejsca założenia zależne jest to jak ubierany będzie przedmiot
  WEAR_TORSO dla zbroi
  WEAR_EFFECT dla amuletów itp.

protection [RODZAJ_OBRAŻEŃ] =  Liczba;
  Ochrona przed danym typem obrażeń, dla każdego trzeba podać osobno
  Rodzaje ochron używane w zbrojach, są takie same jak przy obrażeniach (zamiast DAM, należy wpisać PROT), z tym, że PROT_FLY nie jest używane (czyt. nigdy nie ustawiamy PROT_FLY, ponieważ gdy ochrona celu przed obrażeniami "latającymi" jest wyższa niż obrażenia "latające" przeciwnika, to cel nie poleci)

cond_atr[2]     = ATRYBUT;
  Atrybut wymagany do założenia przedmiotu (oczywiście tylko przedmioty, które można założyć), tą dwójkę należy zignorować bo to raczej porzucony pomysł (ale chyba musi być)
  Oto zmienne atrybutów:
  ATR_HITPOINTS - Aktualne punkty trafień (moja ulubiona nazwa na punkty oznaczające "poziom życia")
  ATR_HITPOINTS_MAX - Maksymalne punkty trafień
  ATR_MANA  - Aktualna mana
  ATR_MANA_MAX - Maksymalna mana
  ATR_DEXTERITY  - Zręczność
  ATR_STRENGTH - Siła

cond_value[2]    = Liczba;
  Wartość atrybutu ustalonego powyżej, wymagana do założenia

on_equip   = Nazwa_Funkcji;
  Tu można wpisać nazwę funkcji (tylko nazwę, bez nawiasów), która ma się wykonać po założeniu przedmiotu, oczywiście tylko dla tych przedmiotów, które można założyć

on_unequip   = Nazwa_Funkcji;
  Jak wyżej, ale przy zdejmowaniu przedmiotu

on_state[0]  = Funkcja;
  Tylko dla przedmiotów z warunkiem sceneName
  Funkcja (bez nawiasów trzeba podać) wykona się podczas "utylizacji" przedmiotu

visual     = "Nazwa.3DS";
  Nazwa modelu tego przedmiotu (raczej musi być format .3DS)

visual_change    = "Nazwa.ASC";
  Model dla zbroi, należy podać nazwę pliku w formacie .ASC

effect   = "NAZWA_EFEKTU";
  Nazwy efektów można znaleźć w pliku VisualFxInst.d w folderze System

visual_skin    = liczba;
  Dla sprytnego zmieniania tekstur zbroi, opisane będzie później dokładnie. Powinno być 0.

scemeName  = "NAZWA_SCENY";
  Przedmiot, który ma coś tu wpisane można "zutylizować" klikając na niego w ekwipunku. Nazw scen najlepiej szukać przy innych przedmiotach

material    = MATERIAŁ;
  Od tego zależy jakie dźwięki przedmiot będzie wydawał (np. przy upuszczaniu)
  Oto materiały jakie występują w grze:
  MAT_WOOD - Drewno
  MAT_STONE - Kamień
  MAT_METAL - Metal
  MAT_LEATHER - Skóra (ale i materiał)
  MAT_CLAY - Glina (?)
  MAT_GLAS - Szkło (?)
 
munition = Instancja_Amunicji;
  Dla broni dystansowych, instancja amunicji do tej broni

spell    =  Nazwa_Zaklecia;
  Dla run i zwojów

range       =   Liczba;
  Zasięg broni (cm), tylko dla broni do walki wręcz

mag_circle    = Liczba;
  Krąg magii wymagany do użycia przedmiotu (raczej runy)

description   =   "Nazwa";
  Nazwa w ekwipunku, można też napisać:
  description   =   name;
  Wtedy nazwa w ekwipunku jest taka sama jak name

TEXT[Liczba]    = Słowo; COUNT[Liczba] = Liczba;
  To służy do opisu przedmiotu
  TEXT jest z lewej strony i jest tekstem
  COUNT jest z prawej strony i jest liczbą
  Każdego może być po 6, dając indeks (0-5) ustawia się miejsce, w którym się znajduje (wiersz)
};

  Przede wszystkim nowe przedmioty należy tworzyć na bazie starych (kopiować, a następnie przerabiać tylko to, co chce się zmienić).

  Tam gdzie napisałem, że coś raczej jest do czegoś znaczy, że nie jestem pewien, ale w oryginale jest tylko tak używane.

czwartek, 2 czerwca 2016

Modding #4 - Kompilacja Skryptów

Szybkie wytłumaczenie kompilacji skryptów. Wystarczy uruchomić Gothika używając programu GothicStarter_mod z zaznaczoną opcją Reparse Scripts. I tyle.

Modding #3 - Opis języka

  Język programowania w Gothiku jest językiem C-podobnym.

Średniki

  Po każdej operacji (no nie każdej, ale lepiej przyzwyczaić się, że do każdej, tak jest łatwiej) trzeba postawić średnik, czyli to ;. To jest właśnie średnik ;. Po co? Po to, żeby kompilator wiedział, że się ta operacja skończyła.

Zmienne i stałe

  Są to wartości, które są zapisane w pamięci komputera. Można się do nich dostać za pomocą ich nazw. Zmienna od stałej różni się tym, że zmienną można zmienić w trakcie działania programu. Stałej nie można.
  Tak się deklaruje zmienne w Gothiku;
  var typzmiennej nazwazmiennej;
  var to "polecenie" stworzenia nowej zmiennej
  typzmiennej to określenie typu nowostworzonej zmiennej
  nazwazmiennej to określenie nazwy nowostworzonej zmiennej, która musi być unikalna
  ; to średnik, który trzeba dać na końcu polecenia
  Typy zmiennych używane w Gothiku to int (liczby) i string (teksty).
  Nazwa zmiennej nie może zawierać spacji, polskich znaków i nie może zaczynać się od liczby.
  Zmienna domyślnie ma wartość 0.
  Przykład stworzenia nowej zmiennej:
  var int Apple_Bonus;
  Jest to zmienna, która liczy ile jabłek zjadł bohater.

  Tak się deklaruje stałe:
  const typstałej nazwastałej = wartośćstałej;
  const to "polecenie" stworzenia nowej stałej
  Stałej trzeba też od razu podać wartość.
  Przykład stworzenia nowej stałej:
  const string MOBNAME_CRATE   = "Skrzynia";
  Stała ta definiuje nazwę skrzyń w grze. Wartość stałej/zmiennej o typie string należy podać w cudzysłowie (dozwolone są spacje i polskie znaki).
  Zmienne i stałe mogą być globalne lub miejscowe. Globalne deklaruje się poza jakimikolwiek funkcjami i działają zawsze i wszędzie, a miejscowe działają tylko wewnątrz funkcji i po jej wykonaniu są usuwane.
  Na zmiennych i stałych można robić różne operacje matematyczne:
  a = ((12 + b - c)*8-3)/35;
  Dodawanie, odejmowanie, dzielenie, mnożenie, a nawiasy działają jak w zwykłej matematyce.
  a = a ^ 2;
  Potęgowanie robi się używając tego znaku ^.
  a += 10; b -= 10;
  Tak się dodaje i zmniejsza zmienne łatwiejszą drogą.
 

Tablice

  Tablice to zbiory zmiennych (lub stałych) o tym samym typie. Tak się deklaruje tablice zmiennych:
  var typtablicy nazwatablicy [rozmiartablicy];
  var - wiadomo
  typtablicy - wszystkie elementy w tablicy muszą mieć ten sam typ
  nazwatablicy - wiadomo
  [rozmiartablicy] to rozmiar tablicy, musi być podany w nawiasach kwadratowych (czyli takich:[])
  ; średnik - wiadomo

  Oto przykład:
  var int ADDON_Skills [6];
  Może to być tablica zawierająca poziomy dodanych zdolności.

  Do elementu tablicy odwołuje się w ten sposób:
  nazwatablicy [indeks]
  indeks to numer zmiennej w tablicy
  Numery są od 0 (!) do liczby o 1 mniejszej niż rozmiar tablicy (bardzo ważne!).

  Tak się deklaruje tablice stałych:
  const typtablicy nazwatablicy [rozmiartablicy] =
  {
     wartość,
     wartość,
     (...)
     wartość
  };
  Po podaniu rozmiaru tablicy wstawiamy znak równości a potem otwieramy klamrę i wpisujemy odpowiednie wartości oddzielając je przecinkami (bez żadnego średnika!), zamykamy klamrę i wstawiamy średnik.
  Tablice przydają się gdy tworzymy ileś podobnych, lub bardzo związanych ze sobą stałych/zmiennych.
  Indeksem tablicy (podczas odwoływania się) może być stała, ale nie zmienna. Trzeba o tym pamiętać.

  To były tablice jednowymiarowe. Programiści wiedzą, że jest coś takiego jak tablica wielowymiarowa. Tu nie działa.

Wyrażenie warunkowe

  Dzięki wyrażeniu warunkowemu można określić czy dana operacja się wykona czy nie zależnie od spełnionych warunków. Tak wygląda schemat:
 
  if (warunek)
  {
  operacje
  };
 
  if to "polecenie" stworzenia nowego "ifa" (wyrażenia warunkowego)
  warunek to warunek, który musi zostać spełniony aby operacje się wykonały
  Operacje są zamknięte klamrami.
  I na końcu średnik.
 
  Oto przykłady warunków:
  (zmienna == 23) równość
  Koniecznie 2 znaki równości!
  (zmienna < 10) mniejsze
  (zmienna > 10) większe
  (zmienna >= 21) większe/równe
  (zmienna <= 21) mniejsze/równe
  (zmienna != 23) nierówność
  Z obu stron można dodać różne działania.

  Można użyć też czegoś takiego:
  (!warunek)
  Wtedy operacje wykonają się tylko jeśli warunek nie będzie spełniony.

  Warunkiem może też być funkcja (o tym w dalszej części), która zwraca wartość liczbową. Gdy wartość będzie wynosić 0, to operacje się nie wykonają.

  Można użyć parę warunków:

  (warunek1) && (warunek2)
  Operacje się wykonają gdy oba warunki są prawdziwe.
  (warunek1) || (warunek2)
  Operacje wykonają się gdy przynajmniej jeden warunek będzie spełniony.
  Można w ten sposób tworzyć bardzo skomplikowane "ify":
  ((warunek1) && ((warunek2) || ((warunek3) && (warunek4)))) || (warunek5)
  Czyli warunek w warunku. Łatwo to zrozumieć.
 
 
  Można też zrobić bardziej skomplikowane wyrażenie warunkowe:
  if (warunek1)
  {
     operacje
  }
  else
  {
     operacje
  };
  Jeśli warunek jest spełniony to wykonają się pierwsze operacje, a jeśli nie, to drugie.
  UWAGA po klamrze przed else nie ma średnika!!!
  Po else można dać od razu if i stworzyć nawet bardzo skomplikowane wyrażenie warunkowe:
  if (warunek1)
  {
     operacje
  }
  else if (warunek2)
  {
     operacje
  }
  else
  {
     operacje
  };
  Średnik tylko na końcu, a z else if można iść w nieskończoność.
 
  Można też oczywiście "wsadzić ifa do ifa".

Funkcje

  Funkcje wydają się być skomplikowane, ale są proste i bardzo użyteczne. Tak się je tworzy:
  func typfunkcji nazwafunkcji (parametr1, parametr2, parametr3)
  {
     operacje
     return wartość;
  };
  func to "polecenie" stworzenia nowej funkcji
  typfunkcji to inaczej typ zwracanej wartości (typy są takie same jak dla zmiennych), jest jeszcze jeden typ, void, funkcje tego typu nie muszą zwracać żadnej wartości (ale jak najbardziej mogą), takie puste funkcje są nazywane procedurami (w innych językach programowania ma to sens, ponieważ procedury często tworzy się w nich inaczej niż funkcje)
  nazwafunkcji - wiadomo, musi być unikalna
  Parametry to zmienne (które tworzy się jak zmienne, zamiast parametr trzeba napisać deklaracje zmiennej (bez średnika)), które są wprowadzane do funkcji z zewnątrz.
  operacje - wiadomo
  return, to polecenie zwrócenia jakiejś wartości, w procedurach jest on zbędny, zwracana wartość jest zależna od parametrów

  Funkcje/procedury bez parametrów też muszą mieć nawiasy, puste, ale muszą być.

  Twórcy gry stworzyli wiele nowych funkcji, najłatwiej jest je po prostu poprzeglądać w plikach gry. Część oczywiście podam w przyszłych poradnikach.

  Tak się używa funkcji:
  nazwafunkcji (wartość1, wartość2, wartość3)
  Trzeba wpisać wartości wszystkich parametrów. Średnika nie dałem celowo, ponieważ funkcję zwykle stosuje się w ten sposób (przykład to funkcja zwracająca int):
  a = fun (b,c);
  W tym wypadku zmienna a przyjmuje wartość obliczoną za pomocą funkcji na podstawie wartości zmiennych b i c.

  Funkcja, a przede wszystkim procedura (taki jest jej sens bytu) może być użyta do wykonywania jakichś często powtarzanych operacji.





 To wszystko z podstaw. Bardziej skomplikowane rzeczy później.

piątek, 13 maja 2016

Modding #2 - Co i gdzie?

  Żeby coś robić, to w ogóle trzeba wiedzieć gdzie co jest.
  _Work, to folder z wszystkim, co jest potrzebne do edytowania gry. Narzędzia i zasoby.
  Data to folder z danymi, które gra czyta. Czyli to samo co w _Work, tylko ważniejsze dla gry. Tam się umieszcza mody. Po instalacji G2MDK te pliki są "wyłączone", więc gra szuka czegoś innego i znajduje to w _Work.
  Gothic2_Save i Saves. W jednym albo drugim powinny być zapisane stany gry, ale nie zawsze są.
  Miles - to jest folder z plikami.
  PomocOffline - pomoc offline
  System to folder z programami takimi jak Gothic2.exe, GothicStarter i Spacer.
 
  Najbardziej interesujący jest oczywiście _Work:
  Tools, to pliki różnych narzędzi, demo to jest jakoś ukryte demo Gothica 2, a data to są pliki gry.


  Anims to są wszystkie animacje (skompilowane) oraz część modeli (wszystkie, które mają animacje).
  Meshes to są modele, które nie mają animacji (miecze, jedzenie itp.).
  Music to muzyka.
  Presets to "presety".
  Scripts to skrypty (najważniejsze w modowaniu).
  Sound to efekty dźwiękowe (i "dubbing").
  Textures to textury.
  Video to filmy.
  Worlds to są światy.

  Najbardziej wymagające dalszego tłumaczenia są skrypty.
  _compiled to są skompilowane skrypty. Ich się nie rusza.
  Content to jest zawartość gry. Przedmioty, postaci, dialogi itp.
  System to np. skrypty Menu, albo dźwięków (dźwięki muszą mieć skrypty).
  Najważniejszy w modowaniu jest oczywiście folder Content.
  _intern to są skrypty globalne - klasy i stałe
  AI to folder od "sztucznej inteligencji". Co ciekawe w nim są też skrypty zaklęć.
  Cutscene to są (oczywiście) skompilowane dialogi.
  FAI to są style walki.
  Items to są skrypty przedmiotów.
  Story to folder ze rzeczami związanymi z fabułą i elementami RPG. Są ta skrypty NPC (potworów też), dialogów, nauki itd.
  Fight i Gothic to są pliki, które "mówią" kompilatorowi, które pliki ma czytać.

Modding #1 - Programy

  Modding Gothica jest przyjemny, przystępny i bardzo satysfakcjonujący. Czasami denerwujący.
  Ale najpierw potrzebne są odpowiednie programy.

Gothic 2 Noc Kruka

  Co prawda pierwsza część ma parę jedną bardzo przydatną funkcję (bardzo łatwo znaleźć błędy w skryptach), ale w drugiej części jest o wiele więcej użytecznych funkcji, błędy występują rzadziej i chleb wygląda jak chleb, a nie jak cegła.
  Niby wiadomo, że potrzebny jest Gothic, ale bardzo ważne jest (wg mnie), żeby mieć na dysku dwie (albo nawet trzy) kopie gry. Jedną "czystą" i jedną w której się "grzebie" (i ewentualnie jedną w której instaluje się mody). Niestety jedyną na to metodą jest "kopiuj-wklej". Trwa to dosyć długo, ale warto. Podczas modowania można sobie zrobić przerwę i zagrać w "czyściutkiego" Gothika.

Player Kit

  Jest to rzecz niezbędna. Gothic Starter, zSpy i Gothic VDFS. Te bardzo przydatne programy służą odpowiednio do: kompilowania skryptów, szukania błędów i tworzenia paczek z modami i ich dekompilacji. Te programy są też niezbędne, jeśli się chce grać w jakieś mody.
Oto link.
Trzeba pobrać:














Zainstalować w folderze z grą:
















  I tyle.

Gothic 2 Mod Development Kit

  Są to wszystkie zdekompilowane pliki gry (nie silnika). Skrypty, tekstury, modele, animacje, modele itd. Oczywiście nie trzeba instalować wszystkiego.
 (Annehmen to przyjmuję)
  Podczas instalacji trzeba wybrać które rzeczy chce się zainstalować:
 














  Skripte to skrypty, Welten to światy, Meshes to to modele 3D, Texturen to tekstury, Animationen to animacje (modele potworów, założonych zbroi i np. głów to są animacje), Sound-Effekte to efekty dźwiękowe, a Sprachausgabe to mowa (dubbing). Proponuje walnąć wszystko, ale jak ktoś chce to może np. same skrypty. Cała instalacja trochę czasu zajmuje (na końcu jest siurpryza).
  Niestety G2MDK jest głupi, bo instaluje "dubbing" po polsku, instaluje tekstury (np. napis wczytywanie) po polsku, ale skrypty są po niemiecku. Tak więc oto spolszczenie. Niestety nie jest doskonałe. Nie wszystko jest przetłumaczone. A spolszczenie instaluje się tak, że po prostu trzeba przekopiować skrypty z paczki do folderu z grą (ale nie gdzie bądź, tylko do odpowiedniego folderu).

Spacer

  Spacer to program do edycji świata (teoretycznie do wszystkiego, ale jest wolny i pełny błędów, więc nie wolno go nawet patykiem tykać, chyba, że trzeba). Powinien być od początku w folderze system, ale jakby ktoś nie miał, albo chciał polską wersję to jest tu.

Modelowanie 3D

  Jeśli ktoś miałby ochotę na zabawę z robieniem nowych modeli i animacji, to musi mieć jakiś program do grafiki 3D. Porządny. Jak już się ma, to musi ściągnąć odpowiedniego Kerraxa. Jest to wtyczka, która umożliwia edytowanie modeli i animacji Gothika.

Gothic Sourcer

  Jest to fajny program, który służy (nie poznałem jego wszystkich możliwości) do dekompilowania modeli i animacji. Oto on.





To właściwie wszystko. Jedyne co jeszcze mógłbym polecić to Notepad++. Taki wybajerzony notatnik. Kolorki w skryptach i takie tam. Zwykle używam zwykłego notatnika, ale Notepad++ ma funkcję wyszukiwania w plikach (wielu). I to jest super.
No i oczywiście GIMP.

Atilla



  Członek Gildii Złodziei w mieście Khorinis.

Rola

  Atilla jest ściśle związany z wątkiem Gildii złodziei.
Ma różne nastawienie do bohatera zależnie od czynów gracza. Kardif informuje bohatera o nim. Znaleźć go można za sklepem rybnym Halvora. Gdy doniesiemy Lordowi Andre na co najmniej jednego z członków gidii (Halvor, Nagur, Rengaru), to chce zabić bohatera. Gdy się go pokona można mu zabrać klucz do kryjówki Gildii złodziei, natomiast gdy pomożemy im wszystkim, to wręcza nam klucz dobrowolnie, a następnie przenosi się w pobliże kucharki Eddy. 

Ekwipunek

  Atilla nosi skórzaną zbroję.

Rady

  W walce z nim nie można liczyć na czyjąś pomoc, gdyż inni jedynie oglądają starcie, nawet paladyni. Można to jednak wykorzystać i po załatwieniu pokojowo wszystkich spraw z nim związanych zabić go.
  Za pokonanie go otrzymuje się 200 punktów doświadczenia.