Ostatnie wiadomości

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.
Chciałbym by po dialogu z NPC kończyła się gra i przenosiło nas do menu głównego. Chodzi mi o Gothic I.

Z tego co widziałem to na forum można znaleźć opis, który ma zastosowanie do Gothica II ale w Gothicu I nie działa.


PS: Byłbym też wdzięczny gdyby ktoś miał namiary na plik w skryptach Gothic I, który odpowiada za odpalenie oryginalnego zakończenia bo trochę się naszukałem i nie mogę znaleźć.
Wrzucam bo sam się tego mocno naszukałem, więc może komuś oszczędzę tych poszukiwań. Lista jakby co nie moja. Niektórych plików muzycznych brakuje. Rzeczy, których nie mogłem znaleźć w folderach Gothica i Gothica II zaznaczyłem na żółto.


Gothic
Spoiler
Gothic\_work\DATA\Music

01 Title Theme.mp3
Menu.sgt

02 Valley of Mines.mp3
OW_Day_Std.sgt

03 Old Camp.mp3
OC_Day_Std.sgt

04 Old Camp (Combat).mp3
OC_Day_Fgt.sgt

05 Ore Barons.mp3
BAN_Day_Std.sgt

06 Prison Colony.mp3
CAM_Day_Std.sgt

07 Prison Colony (Night).mp3
CAM_Ngt_Std.sgt

08 Prison Colony (Engagement).mp3
CAM_Day_Thr.sgt

09 Prison Colony (Combat).mp3
CAM_Day_Fgt.sgt

10 New Camp.mp3
NCI_Day_Std.sgt

11 New Camp (Combat).mp3
NCI_Day_Fgt.sgt

12 Sect Camp.mp3
PSI_Day_std.sgt

13 Sect Camp (Night).mp3
PSI_Ngt_Std.sgt

14 Sect Camp (Engagement).mp3
PSI_Day_Thr.sgt

15 Sect Camp (Combat).mp3
PSI_Day_Fgt.sgt

16 Old Mine.mp3
OLM_Day_Std.sgt

17 Old Mine (Engagement).mp3
OLM_Day_Thr.sgt

18 Old Mine (Combat).mp3
OLM_Day_Fgt.sgt

19 Undead.mp3
FOC_Day_Std.sgt

20 Orc Settlement.mp3
ORC_Day_Std.sgt

21 Temple of the Sleeper.mp3
OGY_Day_Std.sgt

22 Temple of the Sleeper (Combat).mp3
OGY_Day_Fgt.sgt

23 Gothic Theme (Install).mp3
(brak pliku)



Gothic II

Spoiler
Gothic II\_work\data\Music

01 Opening Theme.mp3.[/b]
wav played at game start
(brak pliku)

02 Title Theme.mp3
Gamestart.sgt

03 Chapter Theme.mp3
CHAPTER_01.WAV

04 Xardas' Tower.mp3
XT_DayStd.sgt

05 Khorinis.mp3
Default.sgt

06 Lobart's Farm.mp3
LOB_DayStd.sgt

07 City of Khorinis.mp3
KH_DayStd.sgt

08 Khorinis Barracks.mp3
KAS_DayStd.sgt

09 City of Khorinis (Combat).mp3
KH_DayFgt.sgt

10 The Lighthouse.mp3
LEU_DayStd.sgt

11 Khorinis (Alternate).mp3
NW_DayStd_A0.sgt

12 Bandit Caves.mp3
BAN_DayStd.sgt

13 Bandit Caves (Combat).mp3
BAN_DayFgt.sgt

14 The Woods.mp3
WOO_DayStd.sgt

15 The Woods (Engagement).mp3
WOO_DayThr.sgt

16 The Woods (Combat).mp3
WOO_DayFgt.sgt

17 The Monastery of Innos.mp3
MO_DayStd.sgt

18 Fire Mages.mp3
MI_DayStd.sgt

19 Cemetary.mp3
FRI_DayStd.sgt

20 Temple Ruins.mp3
MAY_DayStd.sgt

21 Temple Ruins (Combat).mp3
MAY_DayFgt.sgt

22 Pass to the Valley of Mines.mp3
OWP_DayStd.sgt

23 Pass to the Valley of Mines (Combat).mp3
OWP_DayFgt.sgt

24 Valley of Mines.mp3
OWD_DayStd.sgt

25 The Dragons.mp3
DLC_DayStd.sgt

26 The Dragons (Combat).mp3
DLC_DayFgt.sgt

27 Khorinis (Alternate II).mp3
NW_DayStd_A1.sgt

28 Khorinis (Engagement).mp3
NW_DayThr.sgt

29 Khorinis (Combat).mp3
NW_DayFgt.sgt

30 Khorinis (Alternate III).mp3
NW_DayStd.sgt

31 Khorinis Harbor.mp3
PIE_DayStd.sgt

32 The Halls of Irdorath.mp3
DI_DayStd.sgt

33 Gothic II Theme (Install).mp3
.wav played during install
(brak pliku)

34 Love Theme (Piano).mp3
_Love.sty (test1)



Gothic II: Night of the Raven
Spoiler
Gothic II\_work\data\Music

01 Opening Theme.mp3 .
wav played at game start
(brak pliku)

02 Opening The Portal.mp3
.wav played upon opening portal to Jharkendar
(brak pliku)

03 Jharkendar Caves.mp3
BIB_Day_Std.sgt

04 Water Mages.mp3
AWC_Day_Std.sgt

05 Jharkendar.mp3
ADW_Day_Std.sgt

06 Jharkendar (Combat).mp3
ADW_Day_Fgt.sgt

07 Pirate Camp.mp3
PIR_Day_Std.sgt

08 The Canyon.mp3
CAN_Day_Std.sgt

09 The Swamp.mp3
SWP_Day_Std.sgt

10 Jharkendar Ruins.mp3
STO_Day_Std.sgt

11 Bandit Camp.mp3
BDT_Day_Std.sgt

12 The Temple.mp3
ADT_Day_Std.sgt

13 Raven.mp3
SHO_Day_Std.sgt

14 Raven (Combat).mp3
SHO_Day_Fgt.sgt


Źródło: opracował użytkownik Speon z portalu World of Gothic w 2006 roku, https://forum.worldofplayers.de/forum/threads/150061-Music-Soundtrack-of-Gothic?p=2538417&viewfull=1#post2538417
Mod zaktualizowany do wersji 2.6.9.1, gdzie poprawiono krytyczny błąd (Kruk i świątynia) i parę średnio-pomniejszych (jak niebotyczny wzrost umiejętności parowania z dupy albo niemożliwość wyzwania Roda do zakładu).

Nowa gra wskazana albo zgłoszenie do mnie, gdzie naprawię zapisaną grę. Joł.
Do góry