Dla niektórych wszechpotężne orcze/jaszczurzoczłecze percypowanie wszystkiego z odległości 300 kroków jest zaletą, która podkreśla ich potworzy rodowód. Dla innych, w tym mnie, trąci lenistwem albo brakiem pomysłów twórców gry.
Wykreowałem dosyć prosty system, który adresuje kwestię za pomocą atrybutu zręczności postaci (zarówno wobec wymienionych humanoidów, jak i kilkunastu innych paskud). Im większa wartość tego atrybutu, tym mniejszy zasięg wykrywania bohatera którymkolwiek ze zmysłów (w grze są tylko wzrok, słuch i węch); ale tylko podczas skradania, naturalnie.
Nie jest to system doskonały i "realistyczny" (w grze gdzie można wyleczyć wszystkie rany zjadając wagon żółtego sera), ale przynajmniej próbuje odnieść się do wątpliwej jakości umiejętności skradania się w organiczny dla niej sposób. Jeśli kiedykolwiek ulepszę całość metody (bo na bank można ją poprawić), to opublikuję go w tym samym temacie, zmieniając jego nazwę.
Założenia wstępne:- im większa wartość zręczności, tym gorzej monstrom idzie wykrywanie skradającego się bohatera
- system wymaga, aby postać miała wyuczoną zdolność ukradkowości (skradania się) i aktywnie jej używała
- może dojść do sytuacji, gdzie odpowiednio zręczna postać może przejść cieniostworowi przed nosem na odległość miecza; coś takiego przydałoby się fabularnie uzasadnić (np. u nauczyciela podczas nauki talentu, że skradanie się to nie tylko dźwięk, ale i elementy wizualne [oblepienie się błotem lub odpowiednią do otoczenia farba, ubranie płaszcza, nałożenie kamuflażu z liści i gałązek, używanie osłon w otoczeniu] oraz powonienia [podchodzenie od zawiewnej, noszenie szali, masek i rękawic, natarcie się ziemią, igliwiem itp.]), bowiem z oczywistych względów nie będzie to zrozumiała sytuacja, kiedy już nastąpi; osobiście nigdzie tego nie tłumaczyłem, gdyż ten system zainstalowałem w modzie, który właściwie robię tylko dla siebie
- zaaplikowano absolutne minimum, z którego nawet najbardziej otępiały krwiopijca wyczuje przez egzoszkielet zbliżającą się katastrofę (dokładnie 50, co odpowiada zasięgowi sztyletu w grze), a jest ono osiągane przy 150 punktach zręczności dla wszystkich pokrak objętych systemem
- brak zmian w zasadach skradania się/wykrywania u ludzi
- nie włączono pewnych grup potworów (jak konstrukty, czy nieumarli, lub smoki, Poszukiwacze, rodzinka psowatych [wraz z orkowymi psami, czyli wargami], szczury [wszystkie], trolle, harpie)
- całość zagadnienia dotyczy tylko Bezimiennego, bowiem NPC nigdy nie skradają (choć raz widziałem wilka podkradającego się do ścierwojada)
- po wykonaniu jakiejkolwiek innej czynności (atak, chód, bieg, wspinaczka, czasem skok), ciągłość skradania się zostaje przerwana, a potwory które powinny percypować postać w zasięgu zrobią to natychmiastowo (tak jak w przypadku ludzi), co może skończyć się niezbyt miło
- po zaimplementowaniu procedury, może nastąpić epizod gdzie jakaś poczwara nie zaatakuje NPCa człowieka, który jest na wyciągnięcie ręki, gdyż system działa zawsze gdy bohater się skrada, a dane postacie zmaterializowały się w zasięgu widzenia (choć może być tak, że ich nie widać); jednakoż na palcach jednej ręki można policzyć sytuacje, gdzie stwór aktywnie atakujący postać tła jest przewodnim wątkiem fabularnym w Nocy Kruka; w 99% przypadków to gracz/NPC decyduje o podjęciu walki
- najlepiej powiązać to wraz z jakimś dodatkowym systemem nawiązującym do podchodzenia ukradkiem, np. ciosów w plecy/podstępnego ataku (dla którego samouczek też mam i który przedstawię później)
Całość krok po kroku:
1. Do
(...)_WORK\DATA\SCRIPTS\CONTENT\STORY\STORY_GLOBALS.D dodajemy zmienną
var int SNEAKER; (czy co tam chcesz, tylko żebyś spamiętał co).
2. W
(...)_WORK\DATA\SCRIPTS\CONTENT\AI\HUMAN\C_HUMAN (może być gdzieś indziej, ale najlepiej w folderze AI) tworzymy plik
C_SNEAKER.D (choć możesz ozwać go tym co ci przyjdzie do głowy, bez kitu), a w nim umieszczamy naszą podstawową funkcję:
Spoiler
func int C_Sneaker(var C_Npc hero)
{
if(C_BodyStateContains(hero,BS_SNEAK))
{
return TRUE;
SNEAKER = TRUE;
}
else
{
return FALSE;
SNEAKER = FALSE;
};
};
Pewnie można byłoby się obyć bez określania obu warunków TRUE/FALSE w tak bezpośredni sposób, ale wiedziony doświadczeniem, wiem że lepiej kiedy zEngine ma jasno przedstawione oba wybory w funkcjach, które mają zwrócić zerojedynkowe wartości.
3. Tak stworzoną funkcję, za pomocą
AI\HUMAN\C_HUMAN\C_SNEAKER.D, dodajemy do pliku kompilacyjnego
GOTHIC.SRC, który znajduje się zazwyczaj w
(...)_WORK\DATA\SCRIPTS\CONTENT. Umieszczamy na pozycji po wszystkich
ZS_MM_*****.D (u mnie w linii 1650); koniecznie tutaj, bowiem te skrypty regulują percepcję i nastawienie wobec innych NPCów w grze, w tym gracza.
4. Następnie, do wybranych (przez ciebie; nie będę dawał swojej listy, gdyż jest ona zbyt długa) skryptów potworów w
(...)_WORK\DATA\SCRIPTS\CONTENT\STORY\NPC\MONSTER oraz \ORC dodajemy następującą treść, zamiast
senses_range:
Spoiler
if(SNEAKER == TRUE)
{
senses_range = 1500 - (hero.attribute[ATR_DEXTERITY] * 10);
if(senses_range < 50)
{
senses_range = 50;
};
}
if(SNEAKER == FALSE)
{
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
};
Musi się ona znaleźć zaraz po linii
senses = ******** (od dwóch do trzech zmysłów); w danym skrypcie.
Należy zauważyć, iż
PERC_DIST_MONSTER_ACTIVE_MAX są zastąpione u orków/jaszczuroludzi przez
PERC_DIST_ORC_ACTIVE_MAX i mają różne wartości (1500 dla pierwszego, a 2500 dla drugiego), więc należy też kod powyżej odpowiednio zmienić, no chyba że ktoś chce zrównać pomiot Beliara z innymi zwierzętami.
Dodatkowo, 10 w równaniu można zastąpić inną liczbą (mniejszą dla łatwiejszego wykrywania w zależności od zręczności, a większą dla trudniejszego), więc samemu można sobie ustalić korelację, w zależności od preferencji. Nie polecam używania matematycznego dzielenia przez cokolwiek, bowiem nawet jeden punkt różnicy w zręczności może przełożyć się na dwa/trzy kroki odległości detekcji w świecie gry (a przynajmniej tak miałem podczas testowania).
I tyle. Teraz grając złodziejem, czy łucznikiem (bądź łucznikiem-złodziejem), o odpowiednio wysokiej zręczności, można przekraść się obok hordy orków w drodze do zamku (w rozdziale 2), czy kamiennego smoka (w rozdziale 4), zająć odpowiednią pozycję i ich wszystkich powystrzelać.
Tylko weź ze sobą odpowiednio dużo amunicji, OK?
Post połączony: 2018-10-25, 16:36