Ostatnie wiadomości

@BeziJuve póki co spróbuję się oswoić z programem a za jakiś czas przyjdzie pora na wskoczenie na wyższy poziom :)
@Kirgo2 O kurdę dużo by pisać.
Takie najważniejsze to:
Łatwy przegląd plików z interfejsu.
Ten plugin pod język skryptów. Podświetla składnie, podpowiada funkcje, wskazuje jak brakuje zamkniętego nawiasu, wskazuje braki średników.
Możesz dodatkowo sobie wgrać na przykład też pluginy githubowe do kontroli kodu czy nawet copilot który jest w stanie pisać skrypty 😅
@BeziJuve, dzięki sprawdzę. Są jakieś szczególne funkcje tego VSC na które warto zwrócić uwagę?
Czołem! Podrzucam skrypt do Gothic 1, który umożliwia przydzielanie ambientowych statystyk postaciom. Skrypt jest oczywiście w przeważającej mierze zrzynką analogicznego skryptu występującego w Gothic 2.

Przydaje się jeżeli chcesz z jednego miejsca zmieniać statystyki wielu postaciom zamiast każdorazowego wchodzenia do załóżmy 30 plików w folderze Gothic\_work\DATA\scripts\Content\Story\NPC W mojej ocenie całkiem użyteczna zabawka przy balansowaniu poziomu trudności w modyfikacji.

Oczywiście żeby ten skrypt działał w odniesieniu do danego NPC najpierw musisz w pliku tego NPC w folderze Gothic\_work\DATA\scripts\Content\Story\NPC wstawić odpowiednią funkcję ale nie uprzedzajmy faktów.

Wstawianie skryptu

1. Po pierwsze musisz wkleić poniższy skrypt. Gdzie? Ja wkleiłem w pliku B_Functions.d znajdującym się w folderze Gothic\DATA\scripts\Content\AI\AI_Intern
func void b_setambientnpcstats(var C_Npc slf,var int ambnpcstats)
{
Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6);
if(ambnpcstats == 1) ///////zestaw statystyk nr 1
{
slf.level = 5;
slf.attribute[ATR_STRENGTH] = 30;
slf.attribute[ATR_DEXTERITY] = 10;
slf.attribute[ATR_MANA_MAX] = 0;
slf.attribute[ATR_MANA] = 0;
slf.attribute[ATR_HITPOINTS_MAX] = 200;
slf.attribute[ATR_HITPOINTS] = 200;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
};
if(ambnpcstats == 2) ///////zestaw statystyk nr 2
{
slf.level = 5;
slf.attribute[ATR_STRENGTH] = 30;
slf.attribute[ATR_DEXTERITY] = 10;
slf.attribute[ATR_MANA_MAX] = 0;
slf.attribute[ATR_MANA] = 0;
slf.attribute[ATR_HITPOINTS_MAX] = 200;
slf.attribute[ATR_HITPOINTS] = 200;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
};
if(ambnpcstats == 3) ///////zestaw statystyk nr 3
{
slf.level = 8;
slf.attribute[ATR_STRENGTH] = 60;
slf.attribute[ATR_DEXTERITY] = 25;
slf.attribute[ATR_MANA_MAX] = 50;
slf.attribute[ATR_MANA] = 50;
slf.attribute[ATR_HITPOINTS_MAX] = 340;
slf.attribute[ATR_HITPOINTS] = 340;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
};
if(ambnpcstats == 4) ///////zestaw statystyk nr 4
{
slf.level = 8;
slf.attribute[ATR_STRENGTH] = 60;
slf.attribute[ATR_DEXTERITY] = 34;
slf.attribute[ATR_MANA_MAX] = 20;
slf.attribute[ATR_MANA] = 20;
slf.attribute[ATR_HITPOINTS_MAX] = 380;
slf.attribute[ATR_HITPOINTS] = 380;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
};
if(ambnpcstats == 5) ///////zestaw statystyk nr 5 (możesz sobie dorobić 6,7,8 i ile chcesz takich zestawów)
{
slf.level = 8;
slf.attribute[ATR_STRENGTH] = 50;
slf.attribute[ATR_DEXTERITY] = 34;
slf.attribute[ATR_MANA_MAX] = 15;
slf.attribute[ATR_MANA] = 15;
slf.attribute[ATR_HITPOINTS_MAX] = 350;
slf.attribute[ATR_HITPOINTS] = 350;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
};
slf.exp = 500 * ((slf.level + 1) / 2) * (slf.level + 1);
slf.exp_next = 500 * ((slf.level + 2) / 2) * (slf.level + 1);
};

Taka mała uwaga: czemu zalecam by wkleić to akurat do w pliku B_Functions.d? Otóż gra odczytuje rzeczy w pewnej kolejności. Jak poprzednio wstawiałem to do mojego ulubionego pliku B_InExtremo.d w Gothic\_work\DATA\scripts\Content\Story\B to gra nie zasysała tego skryptu a po wklejeniu w pliku B_Functions wszystko ładnie śmiga.

2. Po drugie musisz edytować pliki postaci, które chcesz objąć systemem ambientowych zestawów. Przykładowo wynajdujesz sobie plik VLK_560_Buddler I usuwasz w nim wszystko to co określone jest w zestawie czyli w naszym przypadku wywalasz fragmenty skryptu dotyczące:
- poziomu
- siły, zręczności, many
- punktów życia i max punktów życia
- umiejętności walki bronią

W miejsce statystyk w tym pliku NPC-a wstawiasz „B_SetAmbientNPCStats(self, 1);   /////// zestaw statystyk nr 1”. Jeżeli to ma być zestaw drugi to zamiast jedynki wstawiasz tam 2 („B_SetAmbientNPCStats(self, 2)”), itd.

Przykładowy plik po opisywanej obróbce będzie wyglądał tak:
 instance VLK_560_Buddler (Npc_Default)
{
//-------- primary data --------

name = Name_Buddler;
npctype = npctype_ambient;
guild = GIL_VLK;     


voice = 2;
id = 560;


//-------- abilities --------
B_SetAmbientNPCStats(self, 1); /////// zestaw statystyk nr 1


//-------- visuals --------
// animations
Mdl_SetVisual (self,"HUMANS.MDS");
Mdl_ApplyOverlayMds (self,"Humans_Tired.mds");
// body mesh, head mesh, hairmesh, face-tex, hair-tex, skin
Mdl_SetVisualBody (self,"hum_body_Naked0",3,1,"Hum_Head_Psionic", 67,  2, -1);

B_Scale (self);
Mdl_SetModelFatness (self, 0);

fight_tactic = FAI_HUMAN_COWARD;

//-------- Talents --------                                   


//-------- inventory --------                                   

EquipItem (self, ItMw_1h_Club_01);
CreateInvItem (self, ItFoApple);


//-------------Daily Routine-------------
daily_routine = Rtn_start_560;
};

FUNC VOID Rtn_start_560 ()
{
TA_Sleep (23,00,06,30,"OCR_HUT_16");
TA_StandAround (06,30,11,00,"OCR_OUTSIDE_HUT_16");
TA_WashSelf (11,00,11,20,"OCR_TO_HUT_17");
TA_SitCampfire (11,20,23,00,"OCR_OUTSIDE_HUT_16");
};


4. I gotowe. Teraz zamiast wchodzić do każdego pliku z osobna i edytować statystyki każdej postaci możesz masowo zmieniać statystyki z poziomu jednego pliku tekstowego. Oczywiście to ułatwienie dotyczy tylko tych NPC-ów, których uprzednio przydzieliłeś do jednego z zestawów. 
@Kirgo2 Przesiądź się na VSC z pluginem kiridesa pod język skryptów Gothica - taka mała rada :)
Prosta implementacja funkcji z Gothica II, która pomaga zwiększyć przejrzystość przy przeglądaniu asortymentu handlarzy. Funkcja sprawia, że po zakończeniu rozmowy z handlarzem z ekwipunku handlarza usuwane są śmieciowe rzeczy, które mu uprzednio sprzedaliśmy. Jak kogoś to bardzo interesuje to mój wkład twórczy ograniczył się do podmiany przedmiotów na te z Gothica I.

Wklejam gotowca dla oszczędności sił i czasu, bo nie ma sensu by każdy kolejny modder do swojego projektu wykonywał ten skrypt od nowa.

func void b_clearjunktradeinv(var C_NPC self)
{
////////orcish weapon
Npc_RemoveInvItems(self,itmw2horcaxe01,Npc_HasItems(self,itmw2horcaxe01));
Npc_RemoveInvItems(self,itmw2horcaxe02,Npc_HasItems(self,itmw2horcaxe02));
Npc_RemoveInvItems(self,itmw2horcaxe03,Npc_HasItems(self,itmw2horcaxe03));
Npc_RemoveInvItems(self,itmw2horcaxe04,Npc_HasItems(self,itmw2horcaxe04));

Npc_RemoveInvItems(self,itmw2horcmace01,Npc_HasItems(self,itmw2horcmace01));
Npc_RemoveInvItems(self,itmw2horcsword01,Npc_HasItems(self,itmw2horcsword01));
Npc_RemoveInvItems(self,itrworcstaff,Npc_HasItems(self,itrworcstaff));
Npc_RemoveInvItems(self,itmw2horcaxe01,Npc_HasItems(self,itmw2horcaxe01));
Npc_RemoveInvItems(self,itmw2horcaxe01,Npc_HasItems(self,itmw2horcaxe01));

////////Animaltrophy (without golems' hearts)
Npc_RemoveInvItems(self,itat_bloodfly_01,Npc_HasItems(self,itat_bloodfly_01));
Npc_RemoveInvItems(self,itat_bloodfly_02,Npc_HasItems(self,itat_bloodfly_02));
Npc_RemoveInvItems(self,itat_claws_01,Npc_HasItems(self,itat_claws_01));
Npc_RemoveInvItems(self,itat_crawler_01,Npc_HasItems(self,itat_crawler_01));
Npc_RemoveInvItems(self,itat_crawler_02,Npc_HasItems(self,itat_crawler_02));
Npc_RemoveInvItems(self,itat_lurker_01,Npc_HasItems(self,itat_lurker_01));
Npc_RemoveInvItems(self,itat_lurker_02,Npc_HasItems(self,itat_lurker_02));
Npc_RemoveInvItems(self,itat_shadow_01,Npc_HasItems(self,itat_shadow_01));
Npc_RemoveInvItems(self,itat_shadow_02,Npc_HasItems(self,itat_shadow_02));
Npc_RemoveInvItems(self,itat_swampshark_01,Npc_HasItems(self,itat_swampshark_01));
Npc_RemoveInvItems(self,itat_swampshark_02,Npc_HasItems(self,itat_swampshark_02));
Npc_RemoveInvItems(self,itat_teeth_01,Npc_HasItems(self,itat_teeth_01));
Npc_RemoveInvItems(self,itat_troll_01,Npc_HasItems(self,itat_troll_01));
Npc_RemoveInvItems(self,itat_troll_02,Npc_HasItems(self,itat_troll_02));
Npc_RemoveInvItems(self,itat_waran_01,Npc_HasItems(self,itat_waran_01));
Npc_RemoveInvItems(self,itat_wolf_01,Npc_HasItems(self,itat_wolf_01));
Npc_RemoveInvItems(self,itat_wolf_02,Npc_HasItems(self,itat_wolf_02));

////////Items
Npc_RemoveInvItems(self,itlstorchfirespit,Npc_HasItems(self,itlstorchfirespit));
Npc_RemoveInvItems(self,itmi_stuff_amphore_01,Npc_HasItems(self,itmi_stuff_amphore_01));
Npc_RemoveInvItems(self,itmi_stuff_barbknife_01,Npc_HasItems(self,itmi_stuff_barbknife_01));
Npc_RemoveInvItems(self,itmi_stuff_candel_01,Npc_HasItems(self,itmi_stuff_candel_01));
Npc_RemoveInvItems(self,itmi_stuff_cup_01,Npc_HasItems(self,itmi_stuff_cup_01));
Npc_RemoveInvItems(self,itmi_stuff_cup_02,Npc_HasItems(self,itmi_stuff_cup_02));
Npc_RemoveInvItems(self,itmi_stuff_mug_01,Npc_HasItems(self,itmi_stuff_mug_01));
Npc_RemoveInvItems(self,itmi_stuff_oldcoin_01,Npc_HasItems(self,itmi_stuff_oldcoin_01));
Npc_RemoveInvItems(self,itmi_stuff_oldcoin_02,Npc_HasItems(self,itmi_stuff_oldcoin_02));
Npc_RemoveInvItems(self,itmi_stuff_pan_01,Npc_HasItems(self,itmi_stuff_pan_01));
Npc_RemoveInvItems(self,itmi_stuff_pipe_01,Npc_HasItems(self,itmi_stuff_pipe_01));
Npc_RemoveInvItems(self,itmi_stuff_plate_01,Npc_HasItems(self,itmi_stuff_plate_01)); ////////////some traders have it
Npc_RemoveInvItems(self,itmi_stuff_silverware_01,Npc_HasItems(self,itmi_stuff_silverware_01));
Npc_RemoveInvItems(self,itmialarmhorn,Npc_HasItems(self,itmialarmhorn));
Npc_RemoveInvItems(self,itmibrush,Npc_HasItems(self,itmibrush));
Npc_RemoveInvItems(self,itmihammer,Npc_HasItems(self,itmihammer));
Npc_RemoveInvItems(self,itmilute,Npc_HasItems(self,itmilute));
Npc_RemoveInvItems(self,itmiscoop,Npc_HasItems(self,itmiscoop));
Npc_RemoveInvItems(self,itmistomper,Npc_HasItems(self,itmistomper));
Npc_RemoveInvItems(self,itmiwedel,Npc_HasItems(self,itmiwedel));

////////Food
Npc_RemoveInvItems(self,itat_meatbug_01,Npc_HasItems(self,itat_meatbug_01));
Npc_RemoveInvItems(self,itfo_mutton_01,Npc_HasItems(self,itfo_mutton_01));
Npc_RemoveInvItems(self,itfo_plants_mushroom_01,Npc_HasItems(self,itfo_plants_mushroom_01));
Npc_RemoveInvItems(self,itfo_plants_mushroom_02,Npc_HasItems(self,itfo_plants_mushroom_02));
Npc_RemoveInvItems(self,itfo_wineberrys_01,Npc_HasItems(self,itfo_wineberrys_01));
Npc_RemoveInvItems(self,itfocheese,Npc_HasItems(self,itfocheese));
Npc_RemoveInvItems(self,itfocrawlersoup,Npc_HasItems(self,itfocrawlersoup));
Npc_RemoveInvItems(self,itfoloaf,Npc_HasItems(self,itfoloaf));
Npc_RemoveInvItems(self,itfomeatbugragout,Npc_HasItems(self,itfomeatbugragout));
Npc_RemoveInvItems(self,itfomuttonraw,Npc_HasItems(self,itfomuttonraw));
Npc_RemoveInvItems(self,itfomutton,Npc_HasItems(self,itfomutton));
Npc_RemoveInvItems(self,itforice,Npc_HasItems(self,itforice));
Npc_RemoveInvItems(self,itfosoup,Npc_HasItems(self,itfosoup));
Npc_RemoveInvItems(self,itfowine,Npc_HasItems(self,itfowine));

////////common shitty human weapon
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,ItMwPickaxe)); //////Kilof

Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,ItMw_1H_Hatchet_01));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,Itmw_1h_club_01));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,Itmw_1H_Mace_Light_01));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,ItMw_1h_Sword_01));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,altesschwert));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,ItMw_1H_Poker_01));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,ItMw_1H_Poker_01));
Npc_RemoveInvItems(self,ItMwPickaxe,Npc_HasItems(self,ItMw_1H_Poker_01));
};

To co jest wyżej wkleiłem zwyczajowo do pliku "B_InExtremo.d" w Gothic\_work\DATA\scripts\Content\Story\B.

Potem każdemu z handlarzy w Gothic I w odpowiednim pliku dialogowym znajdującym się w Gothic\_work\DATA\Scripts\Content\Story\MISSIONS dokleiłem wywoływanie funkcji "b_clearjunktradeinv" po wybraniu opcji "KONIEC" (w sensie koniec rozmowy a koniec handlu). Na przykład w DIA_Stt_311_Fisk.d

Spoiler
instance  Stt_311_Fisk_Exit (C_INFO)
{
   npc         = Stt_311_Fisk;
   nr         = 999;
   condition   = Stt_311_Fisk_Exit_Condition;
   information   = Stt_311_Fisk_Exit_Info;
   permanent   = 1;
   description = DIALOG_ENDE;
};                       

FUNC int  Stt_311_Fisk_Exit_Condition()
{
   return 1;
};

FUNC VOID  Stt_311_Fisk_Exit_Info()
{
   AI_StopProcessInfos   (self);
   b_clearjunktradeinv   (self);
};

Tak trzeba zrobić dla wszystkich kupców. Listę wszystkich handlarzy mamy choćby na stronie Gothicpedii  https://gothic.fandom.com/pl/wiki/Handlarze_w_Gothic

Gotowe. Teraz po zakończeniu handlu a następnie po wyjściu z rozmowy z kupcem cały szrot jest usuwany a my możemy elegancko przeglądać asortyment kupca :)
Dziękuję bardzo za pomoc. Widocznie prośba o przekopiowanie stosownej części z jednego z plików .PML Gothic\_work\Tools\data żeby kolejni ludzie nie musieli się z osobna pierdzielić się z ustawianiem parametrów wody najwyraźniej była proszeniem o zbyt wiele dlatego jakby ktoś w przyszłości potrzebował się posiłkować gotowcem przy ustawianiu tych parametrów to wrzucam zawartość swojego pliku "WATER2.PML". Jeżeli ktoś chce to może w oparciu o to ustawić sobie parametry wody w Spacerze. Parametr "texAniMapDir" w tych teksturach został wzięty stąd https://themodders.org/index.php?topic=49.msg407#msg407 z pewnymi zmianami:
Spoiler
- uzupełniłem chyba dwie tekstury wody, których nie było na tamtej liście (na pewno OWODSEA2SWAMP);
- przyspieszyłem trochę wodę z wodospadu bo na oko w wersji steamowej Gothica była chyba szybsza;
- OWODWFALL_HITSURFACE ustaliłem metodą prób i błędów;
- OWODWFALL_STONE wyłączyłem (zastąpiłem niewidzialną teksturą) bo ustalanie tego metodą prób i tak zżarło mi zbyt dużo czasu.

Woda płynie i da się w niej pływać ale nie jest przezroczysta, bo nie umiałem tego ustawić więc z lądu nie zobaczysz tego co jest pod wodą. Jeżeli wiesz jak to naprawić to możesz się tym podzielić choćby w tym temacie by ktoś inny się z tym nie musiał pierdzielić.

UWAGA: Nie polecam bezpośredniej przeklejki bo te tekstury najpierw trzeba przenieść do innego filtra. Najłatwiej to zrobić w Spacerze. W tym poście masz to wszystko ładnie opisane: https://themodders.org/index.php?topic=49.msg40990#msg40990 Żeby woda płynęła i by można było w niej pływać musisz sobie poustawiać parametr "texAniMapDir" (z cyferkami) oraz parametr "texAniMapMode".

Jeżeli chodzi o texAniMapMode to w pliku .pml będziesz miał "texAniMapMode=enum:0" lub "texAniMapMode=enum:1", ale w Spacerze zamiast 0 i 1 będziesz miał "NONE" I "LINEAR". "NONE" ustawiasz w jeziorach i tam gdzie woda jest stojąca. "LINEAR" ustawiasz tam gdzie woda ma płynąć.

UWAGA 2: Poniższe parametry dotyczą Gothica 1.

Zawartość pliku WATER2.PML
Spoiler

ZenGin Archive
ver 1
zCArchiverGeneric
ASCII
saveGame 0
date 15.6.2025 16:28:37
user ///////
END
objects 10       
END

[% zCMaterial 17408 0]
name=string:OWODWATSTOP
matGroup=enum:5
color=color:72 93 101 255
smoothAngle=float:60
texture=string:OWODSEA_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:0
texAniMapDir=string:0 0
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 1]
name=string:OWODWFALL2SEA
matGroup=enum:5
color=color:160 179 185 255
smoothAngle=float:60
texture=string:OWODWFALL2SEA_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:0 -0.00029999999
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 2]
name=string:OWODWFALL
matGroup=enum:5
color=color:149 165 172 255
smoothAngle=float:60
texture=string:OWODWFALL_A0.TGA
texScale=string:512 512
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:0 -0.00089999998
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 3]
name=string:OWODWATSTAND
matGroup=enum:5
color=color:72 93 101 255
smoothAngle=float:60
texture=string:OWODWAT_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:0 -2.9999999e-005
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 4]
name=string:OWODWFALL_HITSURFACE
matGroup=enum:5
color=color:48 50 52 255
smoothAngle=float:60
texture=string:OWODWFALL_HITSURFACE_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:0.0099999998 0
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 5]
name=string:FLSWAMPLI         
matGroup=enum:5
color=color:35 39 19 255
smoothAngle=float:60
texture=string:SWAMP_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:0
texAniMapDir=string:0 0
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 6]
name=string:OWODWFALL_STONE
matGroup=enum:5
color=color:249 250 250 255
smoothAngle=float:60
texture=string:MODIALPHA01.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:8 13.1
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 7]
name=string:OWODWFALLFASTWATER
matGroup=enum:5
color=color:149 165 172 255
smoothAngle=float:60
texture=string:OWODWFALL_A0.TGA
texScale=string:512 512
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:0 -0.00050000002
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 8]
name=string:OWODWATFAST
matGroup=enum:5
color=color:72 93 101 255
smoothAngle=float:60
texture=string:OWODWAT_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:1
texAniMapDir=string:0 -0.00030000001
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]
[% zCMaterial 17408 9]
name=string:OWODSEA2SWAMP
matGroup=enum:5
color=color:54 67 60 255
smoothAngle=float:60
texture=string:OWODSEA2SWAMP_A0.TGA
texScale=string:256 256
texAniFPS=float:0
texAniMapMode=enum:0
texAniMapDir=string:9.9999997e-005 0
noCollDet=bool:0
noLightmap=bool:0
lodDontCollapse=bool:0
detailObject=string:
defaultMapping=rawFloat:2.34375 2.34375
[]


Wrzucam jeszcze opracowanie dotyczące tego gdzie jaka tekstura występuje jakby ktoś potrzebował.

Spoiler
OWODWATFAST
Użycie:
- Wodospad do morza (przy Klasztorze Zmiennokształtnych)
- Fragment rzeki od Cmentarza Orków do wodospadów wpadających do jeziorka przy Obozie Bractwa

Parametry:
name:OWODWATFAST
matGroup:WATER
texture:OWODWAT_A0.TGA

OWODWATSTOP
Użycie:
- Morze
- Niebagienna część jeziorka z wodospadami koło Obozu Bractwa
- Jeziorko starej wieży Xardasa
- Jeziorko przy jaskini goblinów, które ukradły almanach
- Rzeka pod mostem goblinów, które ukradły almanach
- Jezioro z  chatą rybaków nieopodal Nowego Obozu (nieopodal terytorium orków)
- Jeziorko gdzie zaczynamy grę

Parametry:
name:OWODWATSTOP
matGroup:WATER
texture:OWODSEA_A0.TGA

FLSWAMPLI
Użycie:
- Bagienna część jeziorka z wodospadami koło Obozu Bractwa
- Zabagnione jeziorko koło wieży Xardasa
- Wszystkie bagna wokół Obozu Bractwa

Parametry:
name:FLSWAMPLI   
matGroup:WATER
texture:SWAMP_A0.TGA

OWODWFALL
Użycie:
- Trzy wodospady koło starej wieży Xardasa
- Duży wodospad przy jaskini goblinów, które ukradły almanach
- Wodospady koło Obozu Bractwa

Parametry:
name:OWODWFALL
matGroup:WATER
texture:OWODWFALL_A0.TGA

OWODWFALLFASTWATER
Użycie:
- Spływ od starej wieży Xardasa do Cmentarza Orków
- Mały wodospad przy jaskini goblinów, które ukradły almanach

Parametry:
name:OWODWFALLFASTWATER
matGroup:WATER
texture:OWODWFALL_A0.TGA

OWODSEA2SWAMP
Użycie:
- Strefa pośrednia między rodzajami wód na jeziorze przy Obozie Bractwa

Parametry:
name:OWODSEA2SWAMP
matGroup:WATER
texture:OWODSEA2SWAMP_A0.TGA

OWODWFALL2SEA
Użycie:
Wodospad do morza (nieopodal Klasztoru Zmiennokształtnych)

Parametry:
name:OWODWFALL2SEA
matGroup:WATER
texture:OWODWFALL2SEA_A0.TGA

OWODWFALL_HITSURFACE
Użycie:
Praktycznie każdy wodospad (plusk wody z wodospadu zderzającej się z wodą w rzece na dole)

Parametry:
name:OWODWFALL_HITSURFACE
matGroup: WATER
texture:OWODWFALL_HITSURFACE_A0.TGA

OWODWFALL_STONE
Użycie:
Woda z wodospadu obijająca się o skały (np. wodospady przy zatopionej wieży Xardasa)
W parametrze texture zamieniłem z "OWODWFALL_STONE_A0.TGA" (chyba) na "MODIALPHA01.TGA" żeby nie była widoczna w grze.

Parametry:
name:OWODWFALL_STONE
matGroup: WATER
texture:MODIALPHA01.TGA
Hejka, sposób użytkownika @Caesum z https://themodders.org/index.php?topic=49.msg40990#msg40990 bardzo fajnie działa. Jest tylko problem, że trzeba ustawić też inne parametry wody takie jak jej przezroczystość, prędkość nurtu, kierunek nurtu czy poprawne ustawienie pluskających elementów.

Przekopiowałem też rzeczy z wpisu @tunczyk cytowanego w poście https://themodders.org/index.php?topic=49.msg407#msg407
Porównując efekt z efektem z wersji steamowej Gothica zauważyłem, że w liście Tuńczyka woda w wodospadach jest ustawiona wolniej - więc nie wiem czy te parametry z listy były wzięte z gry czy autorskie, czy też może różnią się między wersjami gry. W liście Tuńczyka nie ma też kilku rodzajów wód (chyba brakuje OWODSEA2SWAMP) i przede wszystkim tych efektów pluskania przy wodospadach (OWODWFALL_STONE i OWODWFALL_HITSURFACE) a bardzo by się przydały. Dlatego prosiłbym o pomoc, bo nie udało mi się znaleźć tych pozostałych parametrów potrzebnych związanych z wodą. Próbowałem to podejrzeć w czystych plikach Gothica ale tam tych parametrów też nie było lub nie potrafiłem ich znaleźć.

Bardzo bym prosił jeżeli ktoś mógłby wkleić tu zawartość pliku .PML z Gothic\_work\Tools\Data zawierającego parametry wód. Chodzi o pierwszą część Gothica.

Potrzebuję parametrów następujących wód:

FLSWAMPLI

OWODSEA2SWAMP

OWODWATFAST

OWODWATSTAND

OWODWATSTOP

OWODWFALL

OWODWFALL2SEA

OWODWFALLFASTWATER


[efekty pluskania przy wodospadach]

OWODWFALL_HITSURFACE

OWODWFALL_STONE


Jak ktoś miałby analogiczny plik z Gothica 2 to też fajnie by było gdyby wrzucił jego zawartość, bo komuś kto chciałby modować drugą część gry też z pewnością by się przydały.
Dzięki. Nie wiedziałem, że w notepadzie++ istnieje opcja wyszukiwania po wszystkich plikach. To mi ułatwi wiele rzeczy :)
Gothic 1 w przeciwieństwie do dwójki nie ma takiej funkcji.

Skrypt zakończenia nie było trudno znaleźć. Wiedząc, że na końcu gry odpalają się pliki wideo, wpisałem nazwę jednego z nich w notepad++ zaznaczając jako obszar wyszukiwania folder Scripts. Oto wynik:
func void  DIA_EXTRO_AVI ()
{
PlayVideo ( "Extro.bik");
PlayVideo ( "PlayerOut.bik");
PlayVideo ( "Credits.bik");
ExitGame(); //Beendet Spiel
};
Jak widać w oryginale jest wyjście z gry, nie do menu.
Do góry