Ostatnie wiadomości

A ja to robiłem dwa tygodnie temu i u mnie akurat zadziałało dopiero jak zrobiłem to z tym przeniesieniem zawartości z Intern.src do Gothic.src chociaż oczywiście nie wykluczam, że zwyczajnie mogłem spaprać coś innego. Pliki .src różnią się trochę między Gothiciem 1 a Gothic 2 co nie było wyszczególnione na stronie, gdzie było opisywane krok po kroku więc musiałem jako tytułowy „nowicjusz i noob” robić to po omacku - metodą prób i błędów.

Możemy zrobić tak, że dam po prostu adnotację, że jeżeli ktoś będzie miał podobny kłopot jak ja to niech spróbuje z tym przeniesieniem. Chyba, że coś co tutaj opisuje w dalszej perspektywie wiąże się ze szkodami w plikach to wtedy te punkty się po prostu skasuje. 

PS: Podejrzewam ale to tylko moje podejrzenie, bo nie jestem programistą, że może tu chodzić coś o „_INTERN\MAGIC_INTERN.D” w pliku Gothic.src ale tego już nie rozstrzygnę.
Jeżeli ktoś ma Gothica I bez IKARUSA to mógłby to sprawdzić czy bez przenoszenia z pliku Intern.src to zadziała.
No właśnie o to mi chodzi, że to tak zadziała (tak, testowałem osobiście już dawno temu) i po prostu dodajesz zmianę, która nic nie wnosi tak naprawdę.
Poza tym jeżeli działało to w oryginale to nie wiem czemu miałoby to nagle przestać działać po zwykłym dodaniu 2 linijek.
Też myślałem, że na jedno wychodzi - tj. że te
Ikarus\Ikarus\Ikarus_G1.src
LeGo\LeGo\Header_G1.src
wstawię po prostu pod
_INTERN\INTERN.SRC
i że otrzymam wtedy takie coś
_INTERN\INTERN.SRC
_INTERN\MAGIC_INTERN.D
Ikarus\Ikarus\Ikarus_G1.src
LeGo\LeGo\Header_G1.src
albo takie coś
_INTERN\INTERN.SRC
Ikarus\Ikarus\Ikarus_G1.src
LeGo\LeGo\Header_G1.src
_INTERN\MAGIC_INTERN.D
i że wtedy będzie działać. No bo niby logiczne, że "constants.d" i "classes.d" zawierają się w "Intern.src".

Tymczasem zadziałało mi dopiero gdy w pliku "Intern.src" zakomentowałem i jego zawartość przeniosłem do Gothic.src a bawiłem się nad tym chyba z dwie godziny próbując na różne sposoby. To chyba było z dwa tygodnie temu.

Jeżeli ktoś ma Gothica I bez IKARUSA to mógłby to sprawdzić czy bez przenoszenia z pliku Intern.src to zadziała.

W każdym razie opisałem w jaki sposób zrobiłem, że mi to działa, więc może komuś się przyda.
Przecież to przenoszenie zawartości z INTERN.SRC do GOTHIC.SRC nie ma sensu, bo i tak na jedno wychodzi.
_INTERN\INTERN.SRC
Ikarus\Ikarus\Ikarus_G1.src
LeGo\LeGo\Header_G1.src
_INTERN\MAGIC_INTERN.D
?
jeszcze mi zejdzie trochę bo się tego tykam jak pies jeża. dużo testowania.
Jakiś czas temu przy przy okazji chęci dodania trialogu musiałem zainstalować sobie także Ikarusa i LeGo. Na stronie internetowej https://gothic-modding-community.github.io/gmc/pl/zengin/scripts/extenders/ikarus/ jest opis instalacji ale niestety w kontekście Gothica I nie uwzględnia pewnej rzeczy, więc wrzucam tu na wypadek gdyby ktoś potrzebowała albo gdybym ja w przyszłości musiał ponownie to instalować do swojego Gothica.

EDIT: Tutaj jest pewna kontrowersja odnośnie punktu nr 8 tego mojego mini poradnika. Być może nie trzeba przenosić zawartości z "INTERN.SRC" do "GOTHIC.SRC". Jak chcesz to możesz spróbować instalacji Ikarusa bez tego przenoszenia zawartości z "INTERN.SRC" do "GOTHIC.SRC" a jak coś nie zadziała to wtedy spróbuj tym sposobem z punktu nr 8. Zrobisz jak uważasz.

Instalacja IKARUSA i LeGo do Gothica I - poradnik łopatologiczny

1. Wchodzisz na GitHuba https://github.com/Lehona/Ikarus i ściągasz całą zawartość.

Jak? Widzisz ten zielony przycisk "<CODE>"? Kliknij go i wybierz "Download.zip".

2. Teraz w Gothic\_work\Data\Scripts\Content stwórz folder do którego wypakujesz Ikarusa. Ja ten folder nazwałem po prostu "Ikarus".

3. Wypadkuj zawartość "Download.zip" do folderu Gothic\_work\DATA\scripts\Content\Ikarus.

4. Teraz w folderze Gothic\_work\DATA\scripts\Content\Ikarus powinien się pojawić nowy folder - to jest ten z rozpakowania. Po rozpakowaniu będzie nosił nazwę "Ikarus-master" or "Ikarus-X.X.X". Dla ułatwienia zmień tę nazwę po prostu na "Ikarus" - będziesz miał folder "Ikarus" w folderze "Ikarus"

Gothic\_work\DATA\scripts\Content\Ikarus\Ikarus

5. Jako, że instalujemy IKARUSA do Gothica I to potrzebujemy folder "EngineClasses_G1" i nie potrzebujemy folderu "EngineClasses_G2". Usuń folder "EngineClasses_G2", zostaw "EngineClasses_G1".


6. Teraz przechodzimy właśnie do tej części, której brakuje w poradniku z https://gothic-modding-community.github.io/gmc/pl/zengin/scripts/extenders/ikarus/setup/


7. By się nie rozpisywać. Musisz zmienić pewne rzeczy w pliku Gothic.src i INTERN.SRC

Oryginalne pliki wyglądają tak (UWAGA: przedstawiam tu tylko interesujące nas fragmenty tych dwóch plików .src więc nie kopiuj tego na pałę).

Oryginalne i niezmodyfikowane pliki:

oryginalny "Gothic.src"

_INTERN\INTERN.SRC
_INTERN\MAGIC_INTERN.D

oryginalny "Intern.src"
constants.d
classes.d

8. [WSPOMNIANA KONTROWERSJA] Teraz przenosimy rzeczy z pliku Intern.src do Gothic.src by móc pod nimi wkleić fragment dotyczący Ikarusa oraz LeGo.

Po wszystkim powinno to wyglądać tak:

"Gothic.src"


_INTERN\constants.d
_INTERN\classes.d
Ikarus\Ikarus\Ikarus_G1.src
LeGo\LeGo\Header_G1.src
_INTERN\MAGIC_INTERN.D

"Intern.src"
////////constants.d
////////classes.d

9. Instalacja LeGo przebiega analogicznie do instalacji IKARUSA więc już jej nie opisuję. Ściągasz pliki, tworzysz folder LeGo, rozpakowujesz do tego folderu zawartość ściągniętej z GitHuba paczki, usuwasz rzeczy z G2 (zobaczysz, że w https://github.com/Lehona/LeGo masz przy w nazwach niektórych plików G1 a w innych G2 - to te z G2 usuwasz).

W "Gothic.src" i "Intern.src" już nic nie "modzisz" bo stosowne rzeczy wprowadziłeś już przy okazji instalacji Ikarusa (w punkcie 9 tego poradnika)


10. Zagadnienie inicjalizacji masz opisane tutaj:

(Jako pierwsze zrób inicjalizację pod Ikarusa)
https://gothic-modding-community.github.io/gmc/pl/zengin/scripts/extenders/ikarus/setup/

(Potem uzupełnij tę inicjalizację o rzeczy dotyczące LeGo)
https://gothic-modding-community.github.io/gmc/pl/zengin/scripts/extenders/lego/setup/

Nie jest tego dużo. Po prostu zwiń to na sam dół i masz tam to opisane jak wół.



11. Jeżeli jednak będziesz mieć problem z dodaniem tej inicjalizacji do Startup.d to podrzucam tutaj kilka rzeczy, które pomogą ci przez to przebrnąć. 

Spoiler
W pliku Startup.d (plik znajduje się w folderze Gothic\_work\DATA\scripts\Content\Story) na samej górze tego pliku Startup.d wklej po prostu coś takiego

FUNC VOID INIT_GLOBAL()
{
    // Init Ikarus
    MEM_InitAll ();
    // Init LeGo
    LeGo_Init(LeGo_All)
};

W przypadku Gothica I musisz jeszcze do każdej funkcji "func VOID INIT_" wstawić "Init_Global();"

UWAGA: Tego "Init_Global();" wstawiasz do fukcji "func VOID INIT_" a NIE do funkcji "VOID STARTUP_"

Dla ułatwienia wrzucam fragment jak powinno to wyglądać:

Spoiler
func VOID STARTUP_DEMONTOWER ()
{
   STARTUP_SUB_DEMONTOWER ();
};

func VOID INIT_DEMONTOWER ()
{
    Init_Global();
   INIT_SUB_DEMONTOWER ();
};



func VOID STARTUP_FREEMINCAMP ()
{
   STARTUP_SUB_FREEMINECAMP ();
};

func VOID INIT_FREEMINCAMP ()
{
    Init_Global();
   INIT_SUB_FREEMINECAMP ();
};




func VOID STARTUP_PSICAMP ()
{
    STARTUP_SUB_PSICAMP ();
};

func VOID INIT_PSICAMP ()
{
    Init_Global();
   INIT_SUB_PSICAMP ();
};



func VOID STARTUP_NEWCAMP ()
{
    STARTUP_SUB_NEWCAMP ();
};

func VOID INIT_NEWCAMP ()
{
    Init_Global();
    INIT_SUB_NEWCAMP ();
};



func VOID STARTUP_OLDCAMP ()
{
    STARTUP_SUB_OLDCAMP ();
};

func VOID INIT_OLDCAMP ()
{
    Init_Global();
    INIT_SUB_OLDCAMP ();
};



func VOID STARTUP_SURFACE ()
{
    STARTUP_SUB_SURFACE ();
};

func VOID INIT_SURFACE ()
{
    Init_Global();
    INIT_SUB_SURFACE ();
};



Tych rzeczy nie musisz z kolei wstawiać do "sublokacji". Czyli tam gdzie masz funckje zaczynające się na "func VOID INIT_SUB_" tam nie musisz wstawiać. Przykład "func VOID INIT_SUB_PSICAMP ()"

Spoiler
func VOID INIT_SUB_PSICAMP ()
{
/**************************************************************
**                STARTUP_LIGHTS IN PSICAMP                  **
**************************************************************/
Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_01",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_01",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_01",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_02",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_02",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_02",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_03",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_03",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_03",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_04",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_04",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_04",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_05",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_05",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_05",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_06",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_06",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_06",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_07",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_07",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_07",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_08",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_08",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_08",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_09",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_09",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_09",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_10",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_10",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_10",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_11",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_11",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_11",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_12",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_12",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_12",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_13",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_13",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_13",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_14",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_14",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_14",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_15",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_15",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_15",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_16",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_16",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_16",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_17",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_17",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_17",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_18",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_18",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_18",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_19",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_19",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_19",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_20",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_20",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_20",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_21",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_21",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_21",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_22",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_22",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_22",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_23",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_23",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_23",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_24",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_24",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_24",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_25",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_25",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_25",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_26",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_26",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_26",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_27",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_27",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_27",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_28",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_28",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_28",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_29",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_29",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_29",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_30",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_30",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_30",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_31",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_31",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_31",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_32",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_32",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_32",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_33",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_33",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_33",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_34",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_34",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_34",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_35",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_35",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_35",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_36",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_36",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_36",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_37",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_37",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_37",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_38",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_38",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_38",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_39",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_39",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_39",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_40",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_40",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_40",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_41",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_41",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_41",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_42",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_42",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_42",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_43",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_43",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_43",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_44",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_44",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_44",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_45",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_45",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_45",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_46",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_46",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_46",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_47",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_47",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_47",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_48",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_48",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_48",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_49",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_49",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_49",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_50",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_50",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_50",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_51",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_51",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_51",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_52",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_52",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_52",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_53",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_53",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_53",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_54",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_54",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_54",0);

Wld_SetObjectRoutine (00,00,"PC_CRYSTALLIGHT_55",1);
Wld_SetObjectRoutine (20,00,"PC_CRYSTALLIGHT_55",1);
Wld_SetObjectRoutine (05,00,"PC_CRYSTALLIGHT_55",0);

/**************************************************************
**        PORTALRAUMZUWEISUNG IM PSICAMP          **
**************************************************************/
Wld_AssignRoomToGuild("PSIH01",GIL_NOV); //OK nlhu01 - nlhu32               
Wld_AssignRoomToGuild("PSIH02",GIL_NOV); //defekt       
Wld_AssignRoomToGuild("PSIH03",GIL_NOV); //defekt
Wld_AssignRoomToGuild("PSIH04",GIL_NOV);
Wld_AssignRoomToGuild("PSIH05",GIL_NOV);
Wld_AssignRoomToGuild("PSIH06",GIL_NOV); //defekt
Wld_AssignRoomToGuild("PSIH07",GIL_NOV); //defekt
Wld_AssignRoomToGuild("PSIH08",GIL_NOV); //defekt
Wld_AssignRoomToGuild("PSIH09",GIL_NOV); //defekt
Wld_AssignRoomToGuild("PSIH10",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH11",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH12",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH13",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH14",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH15",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH16",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH17",GIL_NOV);//defekt
Wld_AssignRoomToGuild("PSIH18",GIL_NOV);
Wld_AssignRoomToGuild("PSIH19",GIL_NOV);
Wld_AssignRoomToGuild("PSIH20",GIL_NOV);
Wld_AssignRoomToGuild("PSIH21",GIL_NOV);
Wld_AssignRoomToGuild("PSIH22",GIL_NOV);
//Wld_AssignRoomToGuild("PSIH23",GIL_NOV); //Harloks Hütte, Hut 31
Wld_AssignRoomToGuild("PSIH24",GIL_NOV);
//Wld_AssignRoomToGuild("PSIH25",GIL_NOV); Alchemielabor soll frei zugänglich sein!
Wld_AssignRoomToGuild("PSIH26",GIL_NOV);
Wld_AssignRoomToGuild("PSIH27",GIL_NOV);
Wld_AssignRoomToGuild("PSIH28",GIL_NOV);
Wld_AssignRoomToGuild("PSIH29",GIL_NOV);
Wld_AssignRoomToGuild("PSIH30",GIL_NOV);
Wld_AssignRoomToGuild("PSIH31",GIL_NOV);
Wld_AssignRoomToGuild("PSIH32",GIL_NOV);
Wld_AssignRoomToGuild("PSIH33",GIL_NOV);
Wld_AssignRoomToGuild("PSIH34",GIL_NOV);
Wld_AssignRoomToGuild("PSIH35",GIL_NOV);
Wld_AssignRoomToGuild("PSIH36",GIL_NOV);
};

Widzisz, w tym przytoczonym "func VOID INIT_SUB_PSICAMP ()" brak jest wstawionego "Init_Global();" - bo w funkjcach "func VOID INIT_SUB_" tego nie wstawiamy.

Oprócz tego "Init_Global();" musisz wstawiać praktycznie do każdego zena - czyli Starej Kopalni, Orkowego Cmentarzyska, Wolnej Kopalni i Świątyni Śniącego. To samo jeżeli chcesz wstawić do swojej modyfikacji jakiś nowy świat to musisz dla tego dodanego świata napisać w Startup.d dwie funkcje "func void startup_NazwaTwojegoZena()" oraz "func void init_NazwaTwojegoZena()"

Przykładowo:

Spoiler

func void startup_NazwaTwojegoZena()
{
Wld_InsertNpc (NONE_911_TypowyNPC,"ENTRANCE");
Wld_InsertNpc (wolf,"PATH_2000");
};

func void init_NazwaTwojegoZena()
{
Init_Global();

Wld_SetObjectRoutine(0,0,"OC_FIREPLACE_NazwaTwojegoZena1",1);
Wld_SetObjectRoutine(23,59,"OC_FIREPLACE_NazwaTwojegoZena1",1);

Wld_SetObjectRoutine(0,0,"OC_FIREPLACE_NazwaTwojegoZena2",1);
Wld_SetObjectRoutine(23,59,"OC_FIREPLACE_NazwaTwojegoZena2",1);

B_InitMonsterAttitudes();
B_InitGuildAttitudes();
};

PS: Sam się trochę pieprzyłem z tymi plikami Gothic.src i INTERN.src bo w instrukcji na stronie https://gothic-modding-community.github.io/gmc/pl/zengin/scripts/extenders/ikarus/setup/ chyba założono, że domyślny i niezmodyfikowany plik Gothic.src z Gothic1 wygląda tak samo jak jego odpowiednik z Gothica2. Opisałem na podstawie tego co sam robiłem. Z tego co widzę, to chyba wszystko mi działa. Jeżeli popełniłem jakiś błąd to oczywiście proszę napisać.
7
Skrypty / Trialog
Kirgo2 - 2025-06-29, 12:53 
Dla nowicjuszy
(uzupełnienie do poradnika stworzonego przez @EdekSumo a właściwie to już gotowiec)

W tym szablonie od @EdekSumo wszystko ładnie śmiga.


INSTANCE DIA_NONE_20243_urstonak_witaj   (C_INFO)
{
npc         = NONE_20243_urstonak;//npc główny
nr          = 1;
condition   = DIA_NONE_20243_urstonak_witaj_Condition;
information = DIA_NONE_20243_urstonak_witaj_Info;
important = true;
permanent = FALSE;
};
FUNC INT DIA_NONE_20243_urstonak_witaj_Condition()
{
return TRUE;
};
FUNC VOID DIA_NONE_20243_urstonak_witaj_Info()
{
var C_NPC UrsTonak; UrsTonak = Hlp_GetNpc (NONE_20243_urstonak);//Deklarujemy zmienne npców którzy wezmą udział w rozmowie wraz z npc głównym
var C_NPC Dionis; Dionis = Hlp_GetNpc (none_20246_dionis);//
TRIA_Invite(Dionis);//ta funkcja "zaprasza" npce do dialogu musimy zaprosić wszystkich który mają rozmawiać prócz npca głównego
    TRIA_Start();//ta funkcja rozpoczyna dialog wszystkich npców musimy zaprosić przed tą funkcją bo inaczej chujnia
    TRIA_Next(UrsTonak);// w tej funkcji wybieramy jaki npc ma mówić
AI_Output (self, other, "DIA_NONE_20243_urstonak_witaj_15_00");//Stój morra gdzie zmierzasz?
AI_DrawWeapon(hero);
AI_Output (other, self, "DIA_NONE_20243_urstonak_witaj_15_01");//Nie twoja sprawa zawszony orku.
TRIA_Next (Dionis);// za każdym razem jak chcemy zmienić npc trzeba użyć tej funkcji.
AI_GotoNpc(self, other);
    AI_TurnToNpc(other, self);
AI_Output (self, other, "DIA_NONE_20243_urstonak_witaj_15_02");//Spokojnie wędrowcze ten ork nic Ci nie zrobi.
AI_Output (self, other, "DIA_NONE_20243_urstonak_witaj_15_03");//W Ignis Order nie musisz się obawiać orków.
AI_RemoveWeapon (hero);
TRIA_Next (UrsTonak);
AI_Output (self, other, "DIA_NONE_20243_urstonak_witaj_15_04");//Tak morra nie wszyscy orkowie pragną Cie zabić.
Log_CreateTopic (TOPIC_IgnisOrder, LOG_MISSION);
Log_SetTopicStatus (TOPIC_IgnisOrder, LOG_RUNNING);
B_LogEntry(TOPIC_IgnisOrder, "Spotkałem przyjaznego orka i niejakiego Dionisa mówił coś o jakimś Ignis Order.");
MIS_IgnisOrder = LOG_RUNNING;
        TRIA_Finish();// ta funkcja kończy cały dialog

};

Dla nowicjuszy, którzy mogą się obawiać tykać jakiekolwiek rzeczy, gdzie pada nazwa IKARUS - ten skrypt od @EdekSumo to liczyć gotowiec. Musicie zrobić właściwie tylko trzy-cztery rzeczy:
1. Ściągnąć tego IKARUSA i chyba LEGO też. Wbrew pozorom to nie jest takie trudne.
2. Teraz możecie użyć śmiało tego skryptu od @EdekSumo
3. Wklejacie go Gothic\_work\DATA\scripts\Content\Story\MISSIONS tak jakbyście wklejali normalny dialog. Co najfajniejsze, możecie gówno znać się na Ikarusie - trialog po prostu jest obsługiwany przez tego Ikarusa zupełnie tak samo jak zwykły dialog jest obsługiwany przez grę
4. Oczywiście musicie teraz ten trialog od @EdekSumo odpowiednio przerobić. Bo przecież w waszym modzie zamiast rozmowy orka UrStonaka, Dionisa i głównego bohatera będzie sobie "trialogował" ktoś inny. Przerabiasz tak jakbyś przerabiał normalny dialog.

Bardzo fajna i prosta rzecz. DZIAŁA DLA GOTHICA I [słownie: Gothica Jedynki :) ]

Jak ktoś się jeszcze cyka to wrzucam swój dialog zrobiony na podstawie szablonu od EdkaSumo z rzeczami zaznaczonymi kolorkami dla czytelności. Oczywiście wszystko robiłem to guzik znając się na IKARUSIE - tylko przeklejając tę rzecz od Edka i dostosowując na swoje potrzeby.

Spoiler

INSTANCE DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess   (C_INFO)
{
   npc         = Tpl_4025_Templer;//npc główny
   nr          = 2;
   condition   = DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_Condition;
   information = DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_Info;
   important   = true;                                    ////////ustawiłem tak sobie ale wy nie musicie
   permanent    = FALSE;                         ////////ustawiłem tak sobie ale wy nie musicie
};
FUNC INT DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_Condition()
{
    if (Npc_KnowsInfo (other, DIA_GorNaSan_HELO1))
    {
    return TRUE;
    };
};

FUNC VOID DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_Info()
{
   var C_NPC GorAkunosh; GorAkunosh = Hlp_GetNpc (Tpl_4025_Templer);//Deklarujemy zmienne npców którzy wezmą udział w rozmowie wraz z npc głównym
   var C_NPC GorNaSan; GorNaSan = Hlp_GetNpc (Tpl_4029_Templer);//
   TRIA_Invite(GorNaSan);//ta funkcja "zaprasza" npce do dialogu musimy zaprosić wszystkich który mają rozmawiać prócz npca głównego
    TRIA_Start();//ta funkcja rozpoczyna dialog wszystkich npców musimy zaprosić przed tą funkcją bo inaczej chujnia
    TRIA_Next(GorAkunosh);// w tej funkcji wybieramy jaki npc ma mówić
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_00");//GorAkunosh coś tam sobie mówi. 

   TRIA_Next (GorNaSan);// za każdym razem jak chcemy zmienić npc trzeba użyć tej funkcji.
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_01");//GorNaSan coś sobie mówi.

   TRIA_Next (GorAkunosh);// za każdym razem jak chcemy zmienić npc trzeba użyć tej funkcji.
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_02");//GorAkunosh coś tam sobie mówi. 

   TRIA_Next (GorNaSan);// za każdym razem jak chcemy zmienić npc trzeba użyć tej funkcji.
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_03");//GorNaSan coś sobie mówi.
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_04");//GorNaSan coś sobie mówi.

   TRIA_Next (GorAkunosh);// za każdym razem jak chcemy zmienić npc trzeba użyć tej funkcji.
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_05");//GorAkunosh coś tam sobie mówi. 
   B_UseFakeScroll();
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_06");//GorAkunosh coś tam sobie mówi. 
   B_UseFakeScroll();
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_07");//GorAkunosh coś tam sobie mówi. 
   AI_Output (self, other, "DIA_Tpl_4025_GorAkunosh_TrialogMissionSuccess_15_08");//GorAkunosh coś tam sobie mówi. 
        TRIA_Finish();// ta funkcja kończy cały dialog
};


Nie muszę chyba dodawać, że ten dialog wrzuciłem do pliku DIA_Tpl_4025_Templer.d w folderze Gothic\_work\DATA\scripts\Content\Story\MISSIONS bo taką instancję posiada "npc główny" (nie mylić z głównym bohaterem!). W tym moim trialogu "npc głównym" był akurat GorAkunosh (Tpl_4025_Templer).

Jakby co to to niniejsze uzupełnienie do poradnika EdkaSumo pisane było pod Gothica I. Jeżeli chodzi o modowanie Gothica II to się nie wypowiem, bo się nie znam. Myślę jednak, że już nie nikt nie powinien mieć problemu ze wstawieniem trialogu do Gothica I.

Pozdro
Jak tam idą prace?
Czekać czy ogrywać na tej wersji co jest 😀
Jako, że jestem świeżo po ograniu modyfikacji muszę powiedzieć, że Ciemności Gordotha zrobiły na mnie duże wrażenie. Tym czym modyfikacja się zdecydowanie wyróżnia to widoczne położenie ogromnego nacisku autora na efekty dźwiękowe – to było bardzo filmowe gdy po danej kwestii dialogowej pojawiał się jakiś ustawiony dźwięk. Modyfikacja jest dopracowana, co także widać.

Miałbym jednak kilka uwag do ewentualnego przemyślenia. Jeżeli ktoś nie przeszedł modyfikacji to radziłbym nie otwierać spoilerów.

1. Niekiedy trudno było ze względu na te ciemności trafić do miejsc, do których wysyłała nas gra. Chodzi o miejsca poza obozem, bo o ile w Starym Obozie robiła ona naprawdę dobrą robotę o tyle ze względu na brak widoczności nawet z jednocześnie odpalonymi pochodnią i runą światła trudno było trafić do
Spoiler
nawiedzonej chatki, Kanionu Trolli czy z Kanionu Trolli do Starego Obozu.
Dobrym rozwiązaniem mogłoby być dodanie do gry mapy.


2. Miejscami dało się odczuć odrobinę przesadzony poziom trudności.
Spoiler
Mam tu na myśli cieniostwory z finałowej lokacji.


3. Uwagi co do wyglądu pewnej postaci.
Spoiler
Chodzi o tytułowego Gordotha. W wersji, którą ogrywałem miał on wygląd Śniącego co po prostu było słabe i psuło immersję. W wersji, którą ogrywał youtuber WAGON demon miał wygląd królowej pełzaczy. Myślę więc, że tytułowy demon dopiero czeka na swój właściwy, godny tej modyfikacji model ciała bo modyfikacja naprawdę jest przednia :)

Element zręcznościówki pod koniec też był ciekawy.

Polecam Ciemności Gordotha także tym graczom, którzy niekoniecznie celują w horrory. Jakość modyfikacji jest bardzo wysoka.
Ja bym zrobił to chyba tak:
1. Dialog z jakąś postacią. W tym dialogu wstawić

JakaśRzecz = Wld_GetDay();
2. Drugi dialog z tą postacią lub inną. Dialog ten ustawić na IMPORTANT żeby postać sama do nas zagadywała i w tym dialogu dać to co chcemy wywołać (np. zmianę rutyny u jakiejś innej postaci).

Ewentualnie próbowałbym poeksperymentować z podczepieniem tych rzeczy pod coś co każdy gracz będzie musiał prędzej czy później kliknąć - np. pod PC_Sleep w Sleepabit.d albo wypicie mikstury zdrowia.
Do góry