[Modding] Scripting Fragen

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.963
OK ich bin etwas verwirrt. Ich habe in NI nachgesehen und bei mir sehen alle SHOUTIDS.IDS so aus. Das ist für BG:EE und BG_SoD 2.6.6, EET, und BGT v1.21.
90
123 HEALME
124 ASSIST
125 ALERT
126 SOLAR_STANCE
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Interessant. Bei mir (EET mit einer 2.5 Version), sieht das so aus:
Code:
90
123 HEALME
124 ASSIST
125 ALERT
126 SOLAR_STANCE
99 HELPME
1 ATTACK1
2 LEAVE2
3 HELP3
5 HELP5
6 HELPGOND
7 HELPFLAM
8 HELPAMN
24 HELP24
33 FLEETHIEVES
50 GOAWAY
57 HELP57
68 SUM_ATTACK_GOOD
69 SUM_ATTACK_EVIL
79 HELP79
80 HELPARCHER
81 FLEEARCHER
82 COMEARCHER
83 HELP83
89 ATTACK89
100 HELP100
101 HELP101
111 WARNALARM
115 HELP_ALIBAKKAR
116 HELP_LURRAXOL
121 HELP121
122 HELP122
151 HELP_ME_GROUP151
152 ATTACK_MAGE
153 HELP_ME_GROUP153
154 FLEE_FROM_MAGE
155 ATTACK_MAGE
199 HELPME_DRUIDS

Die ersten 5 Einträge passen, aber da ist noch viel mehr. Ich nehm mal ALERT, aber der Gedanke, einen eigenen SHOUT zu definieren und zu verwenden, bekommt Sinn (Taimon hat ja die Anleitung dazu schon mal gepostet).
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.963
Bei mir EET 2.5 RC 12.2. Hast Du noch irgendwas installiert? Oder vor der Kovertierung zur EET vielleicht? Weil die in BGII:EE (2.5) sieht bei mir auch so aus wie meine oben.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Sollte keine Mod installiert sein, die da was rumschraubt. In der BG1EE sieht es vor der Konvertierung so aus, wie bei dir. Ich prüfe mal meine BG2: da ist es auch wie bei dir. Keine Ahnung, welcher Teil bei mir die anderen Shouts dazufügt. Arestorations vllt?

edit: ha, die Windows-Suchfunktion hat was bei Ninde gefunden. Die Mod fummelt an der ShoutIDS rum.
ids_entries_shoutids.tph
 
Zuletzt bearbeitet:

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.963
Zum Modden würde ich ein ungemoddetes Spiel empfehlen, falls Du nicht schon dazu übergegangen bist. Das erspart viel Ärger später.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Hm, ich sehe das Argument, andererseits kann man viel über Kompatibilität lernen... in dem Fall, welche Nummern man in SHOUTIDS besser nicht belegen sollte ;)
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Nächste Frage: Skripte (bcs) kann man nur ergänzen und eigentlich nur mit neuen Skriptblöcken oben (TOP) oder unten (BOTTOM), aber nicht, dass ich einzelne Zeilen in bestehende Blöcke einfügen kann, oder?

Und die übernächste Frage:
Ich habe einen Skriptblock, der endet mit
Code:
StartCutScene(ID)
Wird dann der folgende Skriptblock nach ausgeführt, wenn die CutScene aufgerufen wird? Kein Continue() hinten dran...
Ich hätte gesagt eigentlich nicht...
edit: die Lösung hier: der nächste Block hat eine neu CutSceneID und alle Blöcke mit unterschiedlichen CutSceneIDs werden parallel abgearbeitet (daher auch die vielen Waits() zur Synchronisation).
 
Zuletzt bearbeitet:

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.963
der nächste Block hat eine neu CutSceneID und alle Blöcke mit unterschiedlichen CutSceneIDs werden parallel abgearbeitet (daher auch die vielen Waits() zur Synchronisation
Das gilt nur für Cutscenes, nicht für normale Skripte.
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Skripte (bcs) kann man nur ergänzen und eigentlich nur mit neuen Skriptblöcken oben (TOP) oder unten (BOTTOM), aber nicht, dass ich einzelne Zeilen in bestehende Blöcke einfügen kann, oder?
Nein, im Prinzip kannst du das Skript ja dekompilieren und beliebige Textmodifikationen machen. (DECOMPILE_AND_PATCH, REPLACE_TEXTUALLY)
Außerdem gibt es Befehle wie REPLACE_BCS_BLOCK oder APPLY_BCS_PATCH, die man sicherlich auch dafür verwenden kann.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Hm, gibt es da irgendwelche Tutorials oder ähnliches, wie man das nutzt? Ich hab bei SHS jetzt einen Thread gefunden, aber der User probiert da auch ziemlich rum...

Im WeiDU Tutorial findet zumindest google den Begriff, aber ich sehe kein Tutorial dort dazu...
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.963
Die besten Tutorials sind andere Mods. In meiner Solaufeinmod verwende ich das glaube ich auch.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Es wäre ja zu einfach...

Ich will eine Figur in eine CutScene einbauen. Dazu habe ich folgenden Block geschrieben:
Code:
IF
   Global("M$IGImoenIsGone","GLOBAL",3)
THEN
RESPONSE #100
   CutSceneId("%imoen_scriptname%")
   Wait(1)
   JumpToPoint([3899.2431])
   MoveToPoint([4152.2485])
   Wait(16)
   ActionOverride("%imoen_scriptname%",LeaveAreaLUAPanic("%LionsWay%","",[2350.1503],E))
   ActionOverride("%imoen_scriptname%",LeaveAreaLUA("%LionsWay%","",[2350.1503],E))
END

JumpTo und MoveTo und Wait() werden korrekt ausgeführt. Wenn es Zeit wird für die LeaveArea, dann ändert sich die Körperhaltung, aber die Person bewegt sich nicht. Ich habe es auch schon ohne ActionOverride probiert (war der erste Versuch), das Ergebnis ist dasselbe.

Also theoretisch werden in einer CutScene die Blöcke mit unterschiedlichen CutSceneId parallel durchgeführt, aber halt nicht alle Befehle.

Ich gehe mal davon aus, dass Imoen in BG1 ein NPC ist und ich kein MakeGlobal() mehr für sie benötige...

Sonstige Erfahrungen:
- CutSceneID funktioniert auch (dachte zuerst, der Schreibfehler wäre das Problem, aber das hätte ja schon beim Kompilieren ein Problem sein müssen)
- Man kann eine CutSceneID erstellen für eine cre, die gar nicht in der CutScene auftaucht...

Ich habe es auch schon überlegt, es einfach sein zu lassen (sieht aber doof aus, wenn sie da rumsteht) und in der nächst CutScene die cre mit CreateCreature zu erschaffen. Aber auch da werden die Befehle nicht ausgeführt... da hat der MoveTo nicht geklappt.
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Wie sieht das komplette Cutscene-Skript aus (nach Installation) und wie wird es aufgerufen?

Dir ist klar, dass im Normalfall keine Triggerbedingungen in Cutscenes ausgewertet werden?
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Dir ist klar, dass im Normalfall keine Triggerbedingungen in Cutscenes ausgewertet werden?
Nein, das war mir nicht klar... müsste ich mal schauen, ob der Teil des Skripts auch ausgeführt wird, wenn die Bedingung nicht zutrifft... (das hatte ich noch nicht getestet).

Aufgerufen wird es auf einem Dialog heraus (es ist die erste CutScene mit Gorion)
Code:
IF
    Global("M$IGImoenIsGone","GLOBAL",3)
THEN
    RESPONSE #100
        CutSceneId("imoen")  // Imoen
        Wait(1)
        JumpToPoint([3899.2431])
        MoveToPoint([4152.2485])
        Wait(10)
        ActionOverride("imoen",LeaveAreaLUAPanic("AR2700","TRGORION",[2350.1503],E))
        ActionOverride("imoen",LeaveAreaLUA("AR2700","TRGORION",[2350.1503],E))
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId("Gorion")  // Gorion
        SetGlobal("TalkedToGorion","GLOBAL",1)
        CreateCreature("POGHMA5",[4260.2444],SW)  // Priest of Oghma
        SetAreaScript("cutskip1",OVERRIDE)
        SetGlobal("BD_CUTSCENE_BREAKABLE","GLOBAL",1)
        SetCutSceneBreakable(TRUE)
        MoveToPoint([2745.1816])
        JumpToPoint([3941.2456])
        MoveToPoint([4202.2495])
        Face(N)
        DisplayStringWait(Myself,31483)  // Listen carefully! If we ever become separated, it is imperative that you make your way to the Friendly Arm Inn.
        DisplayStringWait(Myself,31484)  // There, you will meet Khalid and Jaheira. They have long been my friends, and you can trust them.
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId(Player1)
        Wait(1)
        MoveViewPoint([4250.2440],INSTANT)
        JumpToPoint([3879.2431])
        MoveToPoint([4206.2446])
        Face(S)
        Wait(12)
        ActionOverride("POGHMA5",ForceSpell(Player1,CLERIC_CURE_LIGHT_WOUNDS))  // SPPR103.SPL (Cure Light Wounds)
        Wait(4)
        ActionOverride("POGHMA5",MoveToPoint([4009.2435]))
        ActionOverride("GORION",MoveToPoint([4314.2510]))
        ActionOverride("GORION",DestroySelf())
        ActionOverride("POGHMA5",DestroySelf())
        MoveToPoint([4314.2510])
        SetCutSceneBreakable(FALSE)
        SetGlobal("BD_CUTSCENE_BREAKABLE","GLOBAL",0)
        SetAreaScript("",OVERRIDE)
        FadeToColor([20.0],0)
        Wait(1)
        ClearAllActions()
        DayNight(MIDNIGHT)
        LeaveAreaLUAPanic("AR2700","TRGORION",[2350.1523],E)
        LeaveAreaLUA("AR2700","TRGORION",[2350.1523],E)
        ActionOverride(Player2,LeaveAreaLUA("AR2700","TRGORION",[3522.3712],E))
        ActionOverride(Player3,LeaveAreaLUA("AR2700","TRGORION",[3522.3712],E))
        ActionOverride(Player4,LeaveAreaLUA("AR2700","TRGORION",[3522.3712],E))
        ActionOverride(Player5,LeaveAreaLUA("AR2700","TRGORION",[3522.3712],E))
        ActionOverride(Player6,LeaveAreaLUA("AR2700","TRGORION",[3522.3712],E))
        Weather(RAIN)
        MultiPlayerSync()
        CreateCreature("GORION",[2597.1458],S)  // Gorion
        MultiPlayerSync()
        FadeFromColor([20.0],0)
        StartCutScene("Ch1cut02")
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId(Player2)
        SmallWait(7)
        JumpToPoint([302.573])
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId(Player3)
        SmallWait(7)
        JumpToPoint([302.573])
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId(Player4)
        SmallWait(7)
        JumpToPoint([302.573])
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId(Player5)
        SmallWait(7)
        JumpToPoint([302.573])
END

IF
    True()
THEN
    RESPONSE #100
        CutSceneId(Player6)
        SmallWait(7)
        JumpToPoint([302.573])
END
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
F*, der Trigger ist wirklich überflüssig und das Ganze funktioniert so nicht.
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Ich gehe mal davon aus, dass Imoen in BG1 ein NPC ist und ich kein MakeGlobal() mehr für sie benötige...
Die Sache sollte man sich mal im Savegame anschauen.
Es kann gut sein, dass die Imoen in Candlekeep nicht dieselbe Akteurin ist, wie die "globale" Imoen. (Die könnte schon in AR2700 warten.)
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Die Imoen ist dieselbe Akteurin. Aber im Savegame nachschauen ist kein Fehler.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.963
Die Imoen ist dieselbe Akteurin. Aber im Savegame nachschauen ist kein Fehler.
Da Imoen in der AR2700(?) über die GAM eingetragen ist ist die in Kerzenburg eventuell wirklich eine andere cre, oder hattest Du das schon überprüft?
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Hm, sie hat auf jeden Fall die gleiche scriptvariable und die gleiche dlg. Das geht afaik (aber da kann ich mich irren) nur, wenn es dieselbe ist?
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Ok, ich lag falsch. Die Imoen in Candlekeep ist Imoen.cre; die in LionsWay ist Imoen1.cre. Beide haben die gleiche Skriptvariable, und das gleiche Skript, aber nicht dieselbe DLG (hatte ich falsch in Erinnerung, IMOEN und IMOEN2).
 
Oben