Verschiedene BG1-Spiele / OUTER_SPRINT

Dieses Thema im Forum "Modding Forum" wurde erstellt von Genwa, 23. März 2018.

  1. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    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.
     
  2. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    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.
     
  3. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    Also...

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

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

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

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    ... 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(?)
     
  5. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    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.
     
  6. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    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
     
  7. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    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 
     
  8. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    Das klappt! :D:D:D

    Meinen Dank, freue mich über die neue Möglichkeit!
     
    Zuletzt bearbeitet: 24. März 2018
  9. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    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    
     
  10. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    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.
     
  11. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    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.
     
  12. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    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
    
     
  13. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    Statt "german" kannst Du auch "%LANGUAGE%" eintragen, dann wird das automatisch eingesetzt (falls Du mal mehrere Sprachversionen hast).
     
  14. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    So klappt es. :up:
     
  15. Taimon

    Taimon Senior Member

    Registriert seit:
    Nov. 2001
    Beiträge:
    1.177
    Zustimmungen:
    0
    Besteht hier noch Klärungsbedarf?
    CamDawg hat die Parameter leicht angepasst, aber das ist ja glaube ich nicht das Problem gewesen.

    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:
     
  16. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.697
    Zustimmungen:
    34
    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
     
  17. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    174
    Zustimmungen:
    1
    Ich probiere es bei Gelegenheit, danke!
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden