Verschiedene BG1-Spiele / OUTER_SPRINT

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Genwa, wenn Du verschiedene BG1-Spiele abdecken möchtest, lohnt es sich, mit den OUTER_SPRINT Variablen zu arbeiten. Die Definitionen für die Gebiete sind in den tpas, die Du z.B. im Ordner "lib" meiner BG1 Ajantis Mod findest.
Dann würde z.B. für BG:EE für das Erdgeschoss des Freundlichen Arms folgendes eingelesen:

OUTER_SPRINT "FriendlyArmInn_L1" "AR2301"

und für BGT entsprechend:

OUTER_SPRINT "FriendlyArmInn_L1" "AR6801"
und dann musst Du in Deinem Skript/Dialog statt dem Gebietenamen das %FriendlyArmInn_L1% verwenden und die Datei mit COMPILE EVALUATE_BUFFER aufrufen, und kannst für alle Engines dieselben .d - und .baf.Dateien verwenden.

Eine Anleitung auf Englisch gibt es hier: Crossing the Great Divide

Das ist eine feine Sache, die bei mir so viel Potential für Fragen hat, dass ich hier mal ein gesondertes Thema dazu aufmache.

Erste Frage die mir dazu einfällt: Muss ich das in der tp2 nach jedem "Begin" neu definieren oder gibt es eine Möglichkeit, dass die Bezeichnungen automatisch bei allen folgenden / optionalen Modkomponeten genutzt wird?

Mit Definitionen meinst du (einheitliche) Bezeichnunngen wie z.B: "FriendlyArmInn_L1"?
In ajantisbg2\lib konnte ich nur die Datei "extra_regexp_vars" finden, die mir inhaltlich erstmal nix sagt.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Ich meinte Ajantis BG1. Was Du brauchst, ist die g3_bgee_cpmvars.tpa und die g3_bgt_cpmvars.tpa. In der Setup-AjantisBG1.tp2 siehst Du, wie sie eingelesen werden, danach kannst Du sie für den gesamten Installationsprozess benutzen.

Um ein Areaskript auf diese Weise zu patchen, gibt es auch noch ein schickes Macro, das das Leben einfacher macht:

cd_extend_bg_area_script that accepts tra files

Anwendung: die in Spoiler Taggs stehende DEFINE_ACTION_FUNCTION cd_extend_bg_area_script muss in Deinen ALWAYS Block, danach kannst Du die Funktion nach dem von CamDawg gegebenen Beispiel aufrufen, und zwar z.B. gleich mit den definierten Area OUTER_SPRINTs:

LAF cd_extend_bg_area_script STR_VAR area = %FriendlyArmInn_L1% script = ~path/to/script~ tra_file = ~path/to/tra.tra~ END


(Ich muss allerdings gestehen, dass ich eine andere, ähnliche Funktion für das Patchen der Areaskripte verwende, aber meine Version kann keine tra-Dateien einlesen, d.h. keine DisplayStringHeads oder EraseJournalEntries verarbeiten).

Falls die Anwendung vom Plattform-Übergreifenden Skripten nicht klar wird, dann gebe ich gerne noch mehr Beispiele.
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Also...

für das Einlesen von "3_bgee_cpmvars.tpa" und "g3_bgt_cpmvars.tpa" reicht dann das hier(?):

ACTION_IF GAME_IS ~bgt~ THEN BEGIN
INCLUDE ~Mod/lib/g3_bgt_cpmvars.tpa~
END

ACTION_IF GAME_IS ~bgee~ THEN BEGIN
INCLUDE ~Mod/lib/g3_bgee_cpmvars.tpa~
END

... und damit kann ich mir z.B das in der TP2 sparen:

ACTION_IF FILE_EXISTS_IN_GAME ~AR6801.ARE~ THEN BEGIN
OUTER_SPRINT "FriendlyArmInn" "AR6800"
OUTER_SPRINT "FriendlyArmInn_L1" "AR6801"
END ELSE BEGIN
OUTER_SPRINT "FriendlyArmInn" "AR2300"
OUTER_SPRINT "FriendlyArmInn_L1" "AR2301"
END

... und muss dann für die gepatchten bafs etc. lediglich "COMPILE EVALUATE_BUFFER" verwenden?
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
... und das Patchen der Scripts durch die Macro habe ich so verstanden, dass in den Scripts alle in den tpa's vorkommenden Variabeln automatisch gesetzt werden, also z.B. "AR2300" durch "FriendlyArmInn" ersetzt wird(?)
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Erste Frage(n): Ja. Wenn Du in die tpas reinguckst, siehst Du, dass da die ganzen Area-Definitionen schon drinstehen. Du musst also nicht mehr das Erdgeschoss des Freundlichen Arms extra machen, sondern liest einfach für das jeweilge Spiel alle entsprechenden Areanummern ein.
Damit dann beim Kompilieren eines Skriptes, dass eine solche Variable verwendet, diese entsprechend eingesetzt wird, steht das EVALUATE_BUFFER.

Das Macro ist für das Patchen des Areaskriptes mit Deiner baf. Sagen wir, Du willst eine Kreatur im Erdgeschoss des Freundlichen Arms spawnen. Dann müsstest Du ja für BG:EE und BGT zwei verschiedene Einträge in die tp2 stellen:
Code:
ACTION_IF GAME_IS ~bgee~ THEN BEGIN
  EXTEND_BOTTOM ~AR2301.bcs~ ~modfolder/scripts/AR2301_add.baf~ EVALUATE_BUFFER
END

ACTION_IF GAME_IS ~bgt~ THEN BEGIN
  EXTEND_BOTTOM ~AR6801.bcs~ ~modfolder/scripts/AR2301_add.baf~ EVALUATE_BUFFER
END

Stattdessen, mit dem Macro, musst Du nun nur noch folgendes in Deine tp2 schreiben:

Code:
LAF cd_extend_bg_area_script STR_VAR area = %FriendlyArmInn_L1% script = ~modfolder/scripts/AR2301_add.baf~ END

Wobei ich, wie gesagt, nicht mit diesem Macro arbeite sondern mit einem anderen. Also, wenn es da bei der Anwendung Probleme gibt, dann sage bescheid.

In den Skripten und .d-Dateien setzt Du statt den Areacodes ("AR2301") überall die Variable ein ("%FriendlyArmInn_L1%"). Wenn die tpas eingelesen sind, wird dann bei der Installation der richtige Areacode des jeweiligen Spiels eingesetzt.
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Der Teil mit "3_bgee_cpmvars.tpa" und "g3_bgt_cpmvars.tpa" klappt

Extend sieht bei mir so aus:

Code:
BACKUP ~ZFA/backup~
AUTHOR ~Genwa~

ALWAYS

ACTION_IF ((FILE_EXISTS ~dlc/sod-dlc.zip~) OR (FILE_EXISTS ~sod-dlc.zip~)) THEN BEGIN
FAIL ~Modmerge is required before mods can be installed on this game. Check the readme for more information and a link to download Modmerge.~
END

DEFINE_ACTION_FUNCTION cd_extend_bg_area_script

  INT_VAR extend_top = 0
  STR_VAR area       = ""
          script     = ""
          tra_file   = ""
BEGIN
          
  // make sure we have area scripts assigned
  COPY_EXISTING ~%area%.are~ ~override~
    READ_ASCII 0x94 a_script
    PATCH_IF ("%script%" STRING_COMPARE_CASE ~~ = 0) BEGIN // if blank
      PATCH_IF GAME_IS ~tutu tutu_totsc~ BEGIN // if Tutu
        WRITE_ASCIIE 0x95 ~%SOURCE_RES%~ #7
        WRITE_ASCII  0x94 ~_ar~
      END ELSE BEGIN // bgt
        WRITE_ASCIIE 0x94 ~%SOURCE_RES%~ #8
      END
      READ_ASCII 0x94 a_script
    END
    BUT_ONLY
 
<<<<<<<< ./inlined-macro/cd_extend_bg_area_script.tpa
EXTEND_BOTTOM ~%a_script%.bcs~ ~%script%.baf~ EVALUATE_BUFFER USING ~%tra_file%~
>>>>>>>>

  ACTION_IF extend_top = 1 THEN BEGIN

    COPY ~./inlined-macro/cd_extend_bg_area_script.tpa~ ~./inlined-macro/cd_extend_bg_area_script.tpa~
      REPLACE_TEXTUALLY ~^EXTEND_BOTTOM~ ~EXTEND_TOP~

  END
 
  ACTION_IF ("%tra_file%" STRING_COMPARE_CASE "" = 0) THEN BEGIN

    COPY ~./inlined-macro/cd_extend_bg_area_script.tpa~ ~./inlined-macro/cd_extend_bg_area_script.tpa~
      REPLACE_TEXTUALLY ~ EVALUATE_BUFFER USING ~ ~ EVALUATE_BUFFER // USING ~

  END
 
  REINCLUDE ~./inlined-macro/cd_extend_bg_area_script.tpa~

END

ACTION_IF GAME_IS ~bgt~ THEN BEGIN
INCLUDE ~ZFA/lib/g3_bgt_cpmvars.tpa~
END

ACTION_IF GAME_IS ~bgee~ THEN BEGIN
INCLUDE ~ZFA/lib/g3_bgee_cpmvars.tpa~
END
    
END

AUTO_TRA ~ZFA/translations/%s~
LANGUAGE ~Deutsche Sprache~
         ~deutsch~
         ~ZFA/translations/german/Setup-ZFA.tra~
         ~ZFA/translations/german/Journal.tra~

BEGIN @0

COMPILE EVALUATE_BUFFER ~ZFA/dlg/ZFA.d~   

BEGIN @1

    // areabaf

LAF cd_extend_bg_area_script STR_VAR area = %Undercity% script = ~ZFA/areabaf/AR0123.baf~ END
LAF cd_extend_bg_area_script STR_VAR area = %XvartVillage% script = ~ZFA/areabaf/AR4700.baf~ END   
LAF cd_extend_bg_area_script STR_VAR area = %Nashkel% script = ~ZFA/areabaf/AR4800.baf~ END   
LAF cd_extend_bg_area_script STR_VAR area = %DryadFalls% script = ~ZFA/areabaf/AR5200.baf~ END  

// EXTEND_BOTTOM ~AR0123.bcs~ ~ZFA/areabaf/AR0123.baf~
// EXTEND_BOTTOM ~AR4700.bcs~ ~ZFA/areabaf/AR4700.baf~
// EXTEND_BOTTOM ~AR4800.bcs~ ~ZFA/areabaf/AR4800.baf~
// EXTEND_BOTTOM ~AR5200.bcs~ ~ZFA/areabaf/AR5200.baf~

...

... und führt dazu:

Code:
Installing [Komponente: "Teleportstein zum freundlichen Arm" (Verkaufsgegenstand von Bentley) installieren?]
Copying and patching 1 file ...

ERROR locating resource for 'COPY'
Resource [Undercity.are] not found in KEY file:
        [./chitin.key]
Stopping installation because of error.
Stopping installation because of error.

ERROR Installing [Komponente: "Teleportstein zum freundlichen Arm" (Verkaufsgegenstand von Bentley) installieren?], rolling back to previous state
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Ich glaube das Einfachste ist, wenn Du doch die Area-Patch Funtkion verwendest, die ich auch verwende. Von der weiß cih wenigstens, dass und wie sie anzuwenden ist:
Code:
/* DavidW's code for unifying the area script patching. With many thanks!
To be used later in the form:

EXTEND_TOP:
  LAF extend_area_script STR_VAR area="%Candlekeep%" top="bg1re/script/AR2600.baf"   END

EXTEND_BOTTOM:
LAF extend_area_script STR_VAR area="%Candlekeep%" bottom="bg1re/script/AR2600.baf"   END
*/
  DEFINE_ACTION_FUNCTION extend_area_script
    STR_VAR area=""
            top=""
            bottom=""
    BEGIN
      // find the area script from the area file
      COPY_EXISTING "%area%.are" override
           READ_ASCII 0x94 script
      BUT_ONLY
      // if it doesn't exist, give it a default name
      ACTION_IF "%script%" STRING_EQUAL "" BEGIN
          OUTER_INNER_PATCH_SAVE script "%area%" BEGIN
                REPLACE_TEXTUALLY "FW" "_AR" // TUTU naming conventions
          END

  // added by argent77: assign area script if needed
          COPY_EXISTING "%area%.are" override
                WRITE_ASCIIE 0x94 ~%script%~ #8


      END
      // extend the script
      ACTION_IF "%top%" STRING_COMPARE "" BEGIN
        EXTEND_TOP "%script%.bcs" "%top%" EVALUATE_BUFFER
      END
      ACTION_IF "%bottom%" STRING_COMPARE "" BEGIN
       EXTEND_BOTTOM "%script%.bcs" "%bottom%" EVALUATE_BUFFER
      END
    END
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Das klappt! :D:D:D

Meinen Dank, freue mich über die neue Möglichkeit!
 
Zuletzt bearbeitet:

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Wie bestimme ich denn hier welche .tra verwendet wird?

Code:
EXTEND_TOP:
  LAF extend_area_script STR_VAR area="%Candlekeep%" top="bg1re/script/AR2600.baf"   END

EXTEND_BOTTOM:
LAF extend_area_script STR_VAR area="%Candlekeep%" bottom="bg1re/script/AR2600.baf"   END

Habe es wie gewöhnlcih mit USING probiert, was so aber nicht geklappt hat:

Code:
LAF extend_area_script STR_VAR area="%Temple%" bottom = ~SHUKBG1EE/areabaf/ARWARAS1.baf~ USING ~SHUKBG1EE/translations/german/SHUK.tra~ END
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Das war genau der Grund, warum ich Dir zuerst CamDawgs Funktionsversion verlinkt hatte. Mit der geht es wohl, aber ich wiß offensichtlich nicht, wie man sie anwenden muss.
Eine Lösung zu dem Problem: Wenn Du Texte im Skript hast, gib ihnen eine eindeutige Zeilennummer (z.B. @5000 und aufwärts) und tu sie mit in die setup.tra.
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Stimmt, du hast sowas erwähnt... :hae:
Und ohne das Makro so ähnlich wie das hier gehts auch nicht?

Code:
ACTION_IF GAME_IS ~bgee~ THEN BEGIN
  EXTEND_BOTTOM ~AR1900.bcs~ ~SHUKBG1EE/areabaf/ARWARAS1.baf~ USING ~SHUKBG1EE/translations/german/SHUK.tra~ EVALUATE_BUFFER
  EXTEND_BOTTOM ~AR3400.bcs~ ~SHUKBG1EE/areabaf/ARWARAS1.baf~ USING ~SHUKBG1EE/translations/german/SHUK.tra~ EVALUATE_BUFFER
END

Dass es genau so wie hier geschrieben nicht geht, habe ich leider schon festgestellt.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Genau, für jedes Spiel "von Hand" sollte funktionieren. Versuch mal so:

Code:
ACTION_IF GAME_IS ~bgee~ THEN BEGIN
  EXTEND_BOTTOM ~AR1900.bcs~ ~SHUKBG1EE/areabaf/ARWARAS1.baf~ EVALUATE_BUFFER USING ~SHUKBG1EE/translations/german/SHUK.tra~
  EXTEND_BOTTOM ~AR3400.bcs~ ~SHUKBG1EE/areabaf/ARWARAS1.baf~ EVALUATE_BUFFER USING ~SHUKBG1EE/translations/german/SHUK.tra~ 
END
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Statt "german" kannst Du auch "%LANGUAGE%" eintragen, dann wird das automatisch eingesetzt (falls Du mal mehrere Sprachversionen hast).
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Das war genau der Grund, warum ich Dir zuerst CamDawgs Funktionsversion verlinkt hatte. Mit der geht es wohl, aber ich wiß offensichtlich nicht, wie man sie anwenden muss.
Besteht hier noch Klärungsbedarf?
CamDawg hat die Parameter leicht angepasst, aber das ist ja glaube ich nicht das Problem gewesen.

Code:
LAF cd_extend_bg_area_script STR_VAR area = %Undercity% script = ~ZFA/areabaf/AR0123.baf~ END

Hier fehlen die Anführungszeichen um das area-Argument ("%Undercity%").
Zumindest deutet die Fehlermeldung darauf hin, dass %Undercity% nicht durch einen entsprechenden AR-Code ersetzt wurde:
Code:
ERROR locating resource for 'COPY'
Resource [Undercity.are] not found in KEY file:
[./chitin.key]
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Ah, das hatte ich wirklich nicht vestanden. Sehr schön! @Genwa Um das jetzt mit einer tra zu verwenden, wäre der Aufruf dann:

LAF cd_extend_bg_area_script STR_VAR area = "%FriendlyArmInn_L1%" script = ~path/to/script~ tra_file = ~path/to/tra.tra~ END
 
Oben