Mods kompatibel mit EET (und BG:EE) zu machen ist komplizierter, weil die EET (wie BGT) die BG1-Ressourcen in das BGII-Spiel einfügt und daher verdoppelte Dateinamen ausgleichen muss.
Immerhin benennt die EET die BG1-Areas "nur" um in BGxxxx anstelle von ARxxxx. BGT war da noch schlimmer, das hat die Areanamen komplett umbenannt. Dann kam noch Tutu, was glaube ich FWxxxx für die Areas verwendet hat und ARxxxx_.bcs für die Areascripts. (Tutu ist mittlerweile veraltet, ich unterstütze es nicht mehr).
Für die Maintenance mit gerechtfertigtem Aufwand - und der eigenen Nervenstärke - sollten
keine Ressourcen einer Mod verdoppelt werden. Dies bedeutet, dass man irgendwie alle diese unterschiedlich heißenden Dateien mit einer Ausführung an Moddateien abdecken möchte.
Hierfür verwendet man das sogenannte Crossplatform Coding. cmorgan hatte dazu ein Tutorial geschrieben, damals noch für BGT und Tutu, aber es gilt dasselbe für BGT, BG:EE und EET:
Crossing the Great Divide.
Hierzu werden Namen als Variablen abgespeichert und für die unterschiedlichen Spiele unterschiedlich mit Inhalt befüllt. Das ist das, was über die cpmvars.tpa Dateien geschieht.
In der g3_bgee_cpmvars.tpa, die alle meine BG1-Mods unter lib enthalten, steht als willkürliches Beispiel:
OUTER_SPRINT "AJANTIS_BANTER" "BAJANT"
Das ist Ajantis' Banter File, wo die Banter mit anderen NPCs drin sind, die randommäßig von der Engine getriggert werden. Anstatt also explizit "BAJANT.dlg" zu verwenden, verwendet man jetzt %AJANTIS_BANTER%. Wegen der %% weiß weidu, dass dies eine Variable ist, die es ersetzen muss. Hierfür muss die d-Datei mit COMPILE
EVALUATE_BUFFER kompiliert werden - das EVALUATE_BUFFER muss überall dazu, wo Variablen enthalten sind, also auch z.B. in Skripten.
In der d-file sieht das dann z.B. so aus:
Code:
CHAIN
IF WEIGHT #-1 ~%BGT_VAR% Global("C#AjantisBG1_RasaadBanter","GLOBAL",0)
InParty(Myself)
InParty("rasaad")
See("rasaad")
!StateCheck("rasaad",CD_STATE_NOTVALID)
!StateCheck(Myself,CD_STATE_NOTVALID) CombatCounter(0) !See([ENEMY])~ THEN ~%AJANTIS_BANTER%~ rasaad_banter_1
@40 DO ~SetGlobal("C#AjantisBG1_RasaadBanter","GLOBAL",1)~
== ~%RASAAD_BANTER%~ @41
== ~%AJANTIS_BANTER%~ @42
== ~%RASAAD_BANTER%~ @43
= @44
== ~%AJANTIS_BANTER%~ @45
EXIT
Hier sieht man gleich die nächste Variable: %BGT_VAR%. Diese übersetzt sich unterschiedlich, je nachdem, welches Spiel eingelesen wird. Diese Variable ist so definiert worden, das sie sicherstellt, dass dieser Banter nur im BG1-Spiel (z.B. von EET) triggern kann. In der g3_bgee_cpmvars.tpa übersetzt sie zu:
OUTER_SPRINT ~BGT_VAR~ ~~
Also - nichts. Weil BG:EE nur BG1 ist, muss hier keine Einschränkung getroffen werden - der Banter darf immer triggern.
In der g3_bgt_cpmvars.tpa übersetzt sich BGT_VAR zu:
OUTER_SPRINT ~BGT_VAR~ ~!Global("endofbg1","GLOBAL",2)~
Ein ! vor einem Ausdruck bedeutet "NICHT". In BGT wird die Variable Global("endofbg1","GLOBAL",2) nach dem Übergang zu BGII auf "2" gesetzt. Der Banter zwischen Ajantis und Rasaad würde also triggern, solange sie noch nicht auf 2 ist - solange man also noch im BG1-Spiel ist.
Wichtig sind auch Area-Referenzen. So würde man, wenn man die Area des Banditenlagers verändern möchte, folgenes verwenden:
Code:
//****************************************************
// Patch the Bandit Camp to take a magic portal
//****************************************************
COPY_EXISTING ~%BanditCamp%.are~ ~override~
(...)
Weidu sucht sich dann je nach Spiel raus, welcher Areacode das ist.
Das Einlesen der cpmvars.tpa-Dateien erfolgt in der tp2 im ALWAYS-Block:
Code:
ACTION_IF GAME_IS ~bgt~ THEN BEGIN
PRINT ~Baldur's Gate Trilogy detected~
INCLUDE ~bst/lib/g3_bgt_cpmvars.tpa~
END
ACTION_IF GAME_IS ~bgee~ THEN BEGIN
/* Tell the player it is using bgee */
PRINT ~BG:EE detected...~
INCLUDE ~bst/lib/g3_bgee_cpmvars.tpa~
END
ACTION_IF GAME_IS ~eet~ THEN BEGIN
/* Tell the player it is using eet */
PRINT ~EET detected.~
INCLUDE ~EET/other/cpmvars/eet_cpmvars.tpa~
END
Die eet_cpmvars.tpa ist im EET-Ordner enthalten (und wird von dort eingelesen) und sollte nicht in der eigenen Mod sein. So stellt man sicher, dass immer die aktuellesten Definitionen eingelesen werden.
Soviel erstmal als Crashkurs.
Zusätziche Kompatibitätssachen hatte ich mal hier aufgelistet:
https://www.baldurs-gate.de/index.p...e-enhanced-editionen-kompatibel-machen.43896/