Jump to content

jastey

Gibberlings
  • Posts

    13,717
  • Joined

  • Last visited

Posts posted by jastey

  1. Auren Aseph is a is a NPC mod for BG2, featuring a young and eager fighter from Beregost. She was born to a middle class merchant and his wife, and grew up a headstrong girl. Her father would tell her stories of adventurers he'd run into while on his caravan routes, and Auren became more and more interested at the thought of adventuring as she got older. She'd spend hours every week at the famous blacksmith Thunderhammer's shop, staring at all of the many types of weapons and armor, both magical and non-magical. Auren also features an original soundtrack, which is also available separately on the downloads page.

    Version 11 fixes an EET install error and provides an .ini file with mod metadata to support Project Inifnity.

  2. Gibberlings Three / Kerzenburgforum

     

    Imoen 4 Ever

     

    Imoen 4 Ever aims at making Imoen a steady companion throughout the whole BG-Saga. Imoen-related story content is being considered, therefore Imoen will be out of party temporarily to reflect the most crucial original game events. This mod makes her rejoin the party after such incidents, so that she can be seen as an actual travel companion in SoD and BGII.

    Version 5 comes with SoD content: Imoen will rejoin the group at the first camp after marching out against the crusade. Just leave the camp via the road in northeast direction and Imoen will appear and ask to be taken back into the group. After that, she will be available as a normal joinable NPC until after the PC's fall at the end of teh game where the original game content will kick in again.

    The changes to her dialogue after the poison attack was moved into an optional component, as well.

    New content is also the possibility to chose Imoen's BG1 or SoD portraits in SoD, make her a continuous NPC in all of SoD (including the end), and seeing the "Imoen trains with Duke Jannath" scene from the scrying pool as a separate cutscene when the PC sets out against the crusade.

    Version 5 also comes with non-destructive disabling of Imoen-related reply options. Thank you very much to argent77 for the coding help!

    The mod has now 12 components, 5 for BGII and 7 for SoD. For detailed descriptions, please refer to the readme directly.

     

    Changes:

    -Added SoD content
    -Changed mod organization to more optional components
    -More dialogues in BGII added (optional).
    -Content compatibility with Imoen Friendship mod added.
    -more reply options referring to Imoen missing disabled
    -patching of reply options will be done for the relevant strings only (no destructive patching). Thank you to Argent77 for the coding help!

     

    Mod Page

    Forum

    German Discussion Thread at Kerzenburgforum

    Download

  3. Imoen4Ever updates to v5! Because of the new content and the changed components structure with more optional choices the mod package will have a beta tag until I get more feedback and bug reports.

    Version 5 comes with SoD content: Imoen will rejoin the group at the first camp after marching out against the crusade. Just leave the camp via the road in northeast direction and Imoen will appear and ask to be taken back into the group. After that, she will be available as a normal joinable NPC until after the PC's fall at the end of teh game where the original game content will kick in again.

    The changes to her dialogue after the poison attack was moved into an optional component, as well.

    New content is also the possibility to chose Imoen's BG1 or SoD portraits in SoD, make her a continuous NPC in all of SoD (including the end), and seeing the "Imoen trains with Duke Jannath" scene from the scrying pool as a separate cutscene when the PC sets out against the crusade.

    Version 5 also comes with non-destructive disabling of Imoen-related reply options. Thank you very much to @argent77 for the coding help!

    The mod has now 12 components, 5 for BGII and 7 for SoD. For detailed descriptions, please refer to the readme directly:

    1. I4E in BGII: Imoen Returns after Talking to Gaelan in Chapter 2 (required for BGII content)
    2. I4E in BGII: Give Imoen Dialogue Content in SoA
    3. I4E in BGII: Yoshimo Comes to Brynnlaw
    4. I4E in BGII: Give Imoen Protection Spell in Chapters 2 & 3
    5. I4E in BGII: Compatibility with Alternatives and Saerileth (note: this component should be installed after the Alternatives and/or Saerileth mods.)
    6. I4E in SoD: Imoen Remains in Group in Korlasz' Dungeon (this or component 7 is required for other SoD content)
    7. I4E in SoD: Imoen Returns to PC in First Coalition Camp (bd1000) (this or component 6 is required for other SoD content)
    8. I4E in SoD: Imoen Gives Better Reason to Stay Behind in Palace
    9. I4E in SoD: Play Cutscene With Imoen and Duke Jannath
    10. I4E in SoD: Give Imoen Dialogue Content in SoD Chapters 8-12
    11. I4E in SoD: Imoen at the End of the Game Should be the One that Was in Party (SoD Only)
    12. I4E in SoD: Unify Imoen's Portrait:
      1. Use Imoen's SoD Portrait after Korlasz' Crypt
      2. Use Imoen's BG1 Portrait in all of SoD
  4. 51 minutes ago, Guest ArcNKD said:

    I would like to use ARC-X as my prefix, if anyone is still around to register them?

    In addition to what Jarno said, also keep in mind that the max letter count of IE files is 8, and for areas it's 6 (because of the light map, search map, and height map which have LM/SR/HT in their names by default).

  5. 4 hours ago, DavidW said:

    My main concern about reliability is that I don't really trust people to reliably work out the preferred install order for mods, including their own mods, so I'm unconvinced this will converge on truth rather than ending up messy or self-contradictory. But I'll be happy to be proved wrong.

    I see this more for the things where the modders *know* about dependencies. I am thinking about included crossmod content (which only works if the mod is installed after the one it has crossmod for), known dependencies, known incompatibilities depending on install order etc. Almost all of my mods have some such and I would appreciate a possibility to be able to specify the ones I know about. The reason for the idea of putting this into the mods themselves was the knowledge that an overall mod order list will not work because noone will contribute to it (in the long run).

    But yes, of course there could be cases where modders tagg their mod wrongly and PI might take the blame. But would this be a reason not to integrate something like this? It's a good question.

  6. I hit one problem I am sure is on my side. If I use an OUTER_SPRINT for the stringref numbers, e.g.   %63960% => 1. Is there anything obvious why it would work for SoD, but not for EET?

    This is what I use for both games inside a tpa:

    Spoiler

    /* ADD_TRANS_TRIGGER for specific reply options for Imoen_in_group_KD.d */

    <<<<<<<< .../inlined/i4e_BDIMOEN.d
    /* #63960 ~I'm more concerned about you. How have you been doing these last few weeks?~ */
    ADD_TRANS_TRIGGER BDIMOEN 9 ~!InParty("%IMOEN_DV_SOD%")~ DO %responses_9% //9

    /* #65051 ~How have you been doing these last few weeks?~ */
    ADD_TRANS_TRIGGER BDIMOEN 12 ~!InParty("%IMOEN_DV_SOD%")~ DO %responses_12% //9

    /* #70436 ~Duke Jannath sent you here seeking magical papers or books, did she not? I found these in Korlasz's room.~ */
    ADD_TRANS_TRIGGER BDIMOEN 33 ~!InParty("%IMOEN_DV_SOD%")~ DO %responses_33% //1
    >>>>>>>>

    // List of all potential response strrefs to check
    ACTION_DEFINE_ASSOCIATIVE_ARRAY response_strrefs BEGIN
      %63960% => 1
      %65051% => 1
      %70436% => 1
    END
     
    COPY_EXISTING ~BDIMOEN.dlg~ ~override~
      // scanning listed dialog states
      PATCH_FOR_EACH state IN 9 12 33 BEGIN
        LPF GET_RESPONSE_STRREFS INT_VAR state RET strrefs RET_ARRAY strrefs END
        TEXT_SPRINT indices ~~  // a temporary variable for building the index list
        FOR (i = 0; i < strrefs; ++i) BEGIN
          SET value = $strrefs(~%i%~)
          // Include index only if strref is listed in the response_strrefs array
          PATCH_IF (VARIABLE_IS_SET $response_strrefs(~%value%~)) BEGIN
            TEXT_SPRINT indices ~%indices% %i%~ // building list of indices
          END
        END
        // prevent adding a trigger if index list is empty
        PATCH_IF (~%indices%~ STR_EQ ~~) BEGIN
          TEXT_SPRINT indices "IF ~False()~"
        END
        // initialize variables responses_39, responses_40, ...
        // EVAL is used to create the variable name dynamically
        TEXT_SPRINT EVAL ~responses_%state%~ ~%indices%~
        PATCH_PRINT ~Variable %state%: %indices%~
      END
    BUT_ONLY

    // Variables response_39, response_70
    // are now initialized and can be used in the .d file
    COMPILE EVAL ~.../inlined/i4e_BDIMOEN.d~


    /* if Imoen is not in party, the final dialogue should not be triggered by one of the FF soldiers unless Imoen and the PC are at the exit. */
    <<<<<<<< .../inlined/i4e_BDFF1000.d
    /* #69736 ~Thank you. I'm ready to return to the Ducal Palace now.~ */
    ADD_TRANS_TRIGGER BDFF1000 0 ~Range("%IMOEN_DV_SOD%",20) !StateCheck("%IMOEN_DV_SOD%",CD_STATE_NOTVALID) !Dead("%IMOEN_DV_SOD%")~ DO%responses_0% //2
    >>>>>>>>

    // List of all potential response strrefs to check
    ACTION_DEFINE_ASSOCIATIVE_ARRAY response_strrefs BEGIN
      %69736% => 1
    END
     
    COPY_EXISTING ~BDFF1000.dlg~ ~override~
      // scanning listed dialog states
      PATCH_FOR_EACH state IN 0 BEGIN
        LPF GET_RESPONSE_STRREFS INT_VAR state RET strrefs RET_ARRAY strrefs END
        TEXT_SPRINT indices ~~  // a temporary variable for building the index list
        FOR (i = 0; i < strrefs; ++i) BEGIN
          SET value = $strrefs(~%i%~)
          // Include index only if strref is listed in the response_strrefs array
          PATCH_IF (VARIABLE_IS_SET $response_strrefs(~%value%~)) BEGIN
            TEXT_SPRINT indices ~%indices% %i%~ // building list of indices
          END
        END
        // prevent adding a trigger if index list is empty
        PATCH_IF (~%indices%~ STR_EQ ~~) BEGIN
          TEXT_SPRINT indices "IF ~False()~"
        END
        // initialize variables responses_39, responses_40, ...
        // EVAL is used to create the variable name dynamically
        TEXT_SPRINT EVAL ~responses_%state%~ ~%indices%~
        PATCH_PRINT ~Variable %state%: %indices%~
      END
    BUT_ONLY

    // Variables response_39, response_70
    // are now initialized and can be used in the .d file
    COMPILE EVAL ~.../inlined/i4e_BDFF1000.d~

     

    This is from my tp2:

    Spoiler

    ALWAYS

    (snip)

    ACTION_IF GAME_IS ~bgee~ THEN BEGIN
      OUTER_SPRINT ~63960~ ~63960~ //
      OUTER_SPRINT ~65051~ ~65051~ //
      OUTER_SPRINT ~69736~ ~69736~ //
      OUTER_SPRINT ~70436~ ~70436~ //
    END

    ACTION_IF GAME_IS ~eet~ THEN BEGIN
      OUTER_SPRINT ~63960~ ~263960~
      OUTER_SPRINT ~65051~ ~265051~
      OUTER_SPRINT ~69736~ ~269736~
      OUTER_SPRINT ~70436~ ~270436~
    END

    END //ALWAYS

     

    For SoD, it installs and patches fine.

    For EET, it does not patch anything in BDIMOEN, and gives error messages for the other dialogue files:

    Spoiler

    Installing [Imoen 4 Ever in SoD: Imoen Remains in Group in Korlasz' Dungeon] [v5 pre]
    [*.IDS] forgotten
    Appending to files ...
    Not appending [0x80101FEF CD_STATE_NOTVALID...] to [STATE.IDS] because it DOES contains [CD_STATE_NOTVALID]
    Extending game scripts ...
    [./override/BG0123.BCS] loaded, 991 bytes
    override/BG0123.bcs copied to imoen_forever/backup/10/BG0123.bcs, 991 bytes
    Extended script [BG0123.bcs] with [.../i4e_sod_detection.baf]
    Extending game scripts ...
    [./override/BD0103.BCS] loaded, 75430 bytes
    override/bd0103.bcs copied to imoen_forever/backup/10/bd0103.bcs, 75430 bytes
    Extended script [bd0103.bcs] with [.../i4e_sod_detection.baf]
    Copying and patching 1 file ...
    [./override/BDIMOEN.dlg] loaded, 28436 bytes

    Variable 9: IF ~False()~

    Variable 12: IF ~False()~

    Variable 33: IF ~False()~
    Compiling 1 dialogue file ...
    Processing 1 dialogues/scripts ...
    [./override/BDIMOEN.DLG] loaded, 28436 bytes
    [BDIMOEN.DLG] loaded
    [BDIMOEN.DLG] saved    142 states, 336 trans, 18 strig, 146 ttrig, 73 actions
    override/BDIMOEN.dlg copied to imoen_forever/backup/10/BDIMOEN.dlg, 28436 bytes
    Copying and patching 1 file ...
    [./override/BDFF1000.dlg] loaded, 4795 bytes

    Variable 0: IF ~False()~
    Compiling 1 dialogue file ...
    Processing 1 dialogues/scripts ...
    [./override/BDFF1000.DLG] loaded, 4795 bytes
    [BDFF1000.DLG] loaded
    ERROR: Cannot resolve internal symbolic label [DOIF] for DLG [BDFF1000]
    Known labels: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    ERROR: processing .D actions [tb#_compile_eval_buffer/.../inlined/i4e_BDFF1000.d]: Failure("cannot resolve label")
    Stopping installation because of error.
    Stopping installation because of error.

    Since the definitions of the OUTER_SETs are set and the structure is completely the same for both games, I am at a loss what the problem for EET would be.

  7. Thanks for the list @Endarire!

    This is not my field of expertise. If anything should be done to DSotSC and/or NTotSC how the spells are added / compatibility checks / better coding standard etc. let me know and I will integrate it. That also goes for Region of Terror, I suppose..

    What do you mean by this?

    9 hours ago, Endarire said:

    Region of Terror
    Adds new spells that, according to the readme, are "mostly kit-specific."  These kits also don't work with Baldur's Gate II: Enhanced Edition.

     

  8. Sorry for being daft. I don't see how I would call several reply option indeces in the same state. Currently, I get one idex per state. E.g. for state 39, the reply option index with the matching string is stored in %responses_39%. I call it inside the d with:

    ADD_TRANS_TRIGGER ARAN 39 ~Global("C#IM_ImoenStays","GLOBAL",0)~ DO %responses_39%

    For calling more than one I would need several variables for the different reply option indeces of one state which I do not see in the current version of the code.

  9. I see. That's a very powerful feature you are planning there for mod install order, awesome.

    Would you consider writing a best practice tutorial how to make a mod compatible and ready for PI? For example I had no idea the LABELs would be so important (and also not in this global range). I am absolutely willing to make my mods PI compatible but I need good instructions so I know what to add where without the feeling that I do extra rounds because I didn't know everything on time or - even worse - didn't know how to implement it so it would be useful.

  10. And: if I name my LABELs tp2name_componentname (without my prefix) it would still be unique, no? Because there are no two mods with the same tp2 name due to compatibility reasons. So, including the prefix to me is less of making the label unique, it's more of being able to spot quicker which other mod(der) the referenced LABEL belongs to (?).

  11. I still don't understand. What does PI do with LABELs, i.e. use them for? I thought they are for mods to be able to detect/forbid other components, either from its own or from different mods. But that's code that is coded into mods. Why would get PI confused if a mod component moves and gets a new LABEL if all mods using it would be updated, too?

  12. I would need help to adjust this structure so it also can store several reply option indexes for one dialogue state, and would be very happy for help.

    // List of all potential response strrefs to check
    ACTION_DEFINE_ASSOCIATIVE_ARRAY response_strrefs BEGIN
      43058 => 1
      49175 => 1
    END
      
    COPY_EXISTING ~aran.dlg~ ~override~
      // scanning listed dialog states
      PATCH_FOR_EACH state IN 39 70 BEGIN
        LPF GET_RESPONSE_STRREFS INT_VAR state RET strrefs RET_ARRAY strrefs END
        TEXT_SPRINT indices ~~  // a temporary variable for building the index list
        FOR (i = 0; i < strrefs; ++i) BEGIN
          SET value = $strrefs(~%i%~)
          // Include index only if strref is listed in the response_strrefs array
          PATCH_IF (VARIABLE_IS_SET $response_strrefs(~%value%~)) BEGIN
            TEXT_SPRINT indices ~%indices% %i%~ // building list of indices
          END
        END
        // prevent adding a trigger if index list is empty
        PATCH_IF (~%indices%~ STR_EQ ~~) BEGIN
          TEXT_SPRINT indices "IF ~a_nonexisting_trigger()~"
        END
        // initialize variables responses_39, responses_40, ...
        // EVAL is used to create the variable name dynamically
        TEXT_SPRINT EVAL ~responses_%state%~ ~%indices%~
        PATCH_PRINT ~Variable %state%: %indices%~
      END
    BUT_ONLY

     

×
×
  • Create New...