Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

New Premium Module: Tyrants of the Moonsea! Read More
Attention, new and old users! Please read the new rules of conduct for the forums, and we hope you enjoy your stay!

Understanding Strings

RaduzielRaduziel Member Posts: 4,716
Let's say that I'm checking an opcode (like 267) that have as a parameter a string.

Where can I see what text this string is related to?

I tried to check the Dialogue.tlk using Notepad, but I'm having no success - maybe I'm doing something wrong.

Let's say that the opcode 267 is related to string 26018. I open the dialogue .tlk and search for the row #26018, but the text that displays there doesn't make sense for the opcode propose (in this case, the monk's disease immunity).

Thanks!

Comments

  • PaulaMigratePaulaMigrate Member Posts: 1,201
    The best way to easily access stringref to text is with Near Infinity. It displays any kind of text immediately if you select a file or field in a file.
    I can't tell you what 26018 is because it's different in my game than in yours.

    tbone1
  • RaduzielRaduziel Member Posts: 4,716
    Hi, @PaulaMigrate :)

    Thanks for the reply. Is there any way to use DLTC instead? Because IDK even how to open NearInfinity.

  • PaulaMigratePaulaMigrate Member Posts: 1,201
    Raduziel said:

    Hi, @PaulaMigrate :)

    Thanks for the reply. Is there any way to use DLTC instead? Because IDK even how to open NearInfinity.

    There probably is, I don't use that tool so I have no idea. You open NearInfinity with java.

    Raduziel
  • RaduzielRaduziel Member Posts: 4,716
    Does mods alters the original strings of the game?

    Because 26018, for example, is a string for the vanilla monk in a vanilla install.

    I thought that mods just added more strings, leaving the original ones intact (I mean, except for overhauls mods).

  • PaulaMigratePaulaMigrate Member Posts: 1,201
    edited July 2017
    Raduziel said:

    Does mods alters the original strings of the game?

    Because 26018, for example, is a string for the vanilla monk in a vanilla install.

    I thought that mods just added more strings, leaving the original ones intact (I mean, except for overhauls mods).

    That is correct, the first (?40000? don't hit me for the exact number) should be the same in each game. Mine are probabyl different since I have an EET install. (26018 is a dialogue line from BG2, looks like tanner quest).
    In BGEE/SoD the 26018 says *Haste* >>> makes sense as opcode 267 disable diplay string xxx where here xxx is haste. Fits for monk.

  • subtledoctorsubtledoctor Member Posts: 11,468
    BGEE and BG2EE have a bunch of different strings. IWDEE is a lot like BG2EE, but with more at the end.

    You can use STRING_SET in Weidu to change an existing string instead of adding a new one, but it's generally better to add new ones. If for no other reason than STRING_SET written for BGEE might not work for BG2EE, depending on the string, so you have to look up each string in each game... it's a pain.

    If you want to overwrite a string for a class or kit description, you're better off using SET_2DA_ENTRY with clastext.2da, sodcltxt.2da, and kitlist.2da. Example here:
    https://github.com/UnearthedArcana/Might_and_Guile/blob/master/might_and_guile/components/265_monk_fist.tpa
    (Scroll down to the "Update Existing Strings" section.)

    Grammarsalad
  • RaduzielRaduziel Member Posts: 4,716

    BGEE and BG2EE have a bunch of different strings. IWDEE is a lot like BG2EE, but with more at the end.

    You can use STRING_SET in Weidu to change an existing string instead of adding a new one, but it's generally better to add new ones. If for no other reason than STRING_SET written for BGEE might not work for BG2EE, depending on the string, so you have to look up each string in each game... it's a pain.

    If you want to overwrite a string for a class or kit description, you're better off using SET_2DA_ENTRY with clastext.2da, sodcltxt.2da, and kitlist.2da. Example here:
    https://github.com/UnearthedArcana/Might_and_Guile/blob/master/might_and_guile/components/265_monk_fist.tpa
    (Scroll down to the "Update Existing Strings" section.)

    Thanks, but that's not what I want (I think).

    I'll explain: my kit gains disease immunity. I was able to prevent him/her from becoming diseased, prevent the disease icon from showing at the portrait/character sheet, but IDK wich string to block with opcode 267 to prevent the log from saying that the character is diseased.

    My idea was to look at the monk's disease immunity and ditto those strings, but the same spell that bans disease also gives free action and there are severals opcodes 267 associated with one string each, but IDK which one is related to disease immunity and each one is related to free action.

  • OlvynChuruOlvynChuru Member Posts: 2,433
    Here's what you do. Look around in monster item files or spell files that cause disease. See what string they say when the target becomes diseased. Make them immune to that string.

    Raduziel
  • subtledoctorsubtledoctor Member Posts: 11,468
    But... if he doesn't get diseased, the string shouldn't appear?

    Oh I get it, you're using opcode 101, not 206.

    If you set up Near Infinity (step 1: install java; step 2: install NI) you can simply run it from each game folder and in each case do a simple search for "diseased" or something like that, and find the strref in each game. Then when you COPY the spell in you can use ALTER_EFFECT to set the blocked string based on whichever game the mod is being installed to.

    Raduziel
  • PaulaMigratePaulaMigrate Member Posts: 1,201
    In BGEE/SoD 31238 = Diseased

    Raduziel
  • RaduzielRaduziel Member Posts: 4,716
    edited July 2017
    I'm trying to use NearInfinity.java but a DOS-Like window just pops up and close.

  • RaduzielRaduziel Member Posts: 4,716


    Then when you COPY the spell in you can use ALTER_EFFECT to set the blocked string based on whichever game the mod is being installed to.

    Can you explain to me how to do this like I was a toddler eating sand?

    Because I was building an ability for the Predator based on the fact that the strings were the same (and now I know that they aren't).

    My solution by now is creating three different installers, one for BGEE-SoD, other for BG2EE and another one for IWDEE (this one will probably need to happen because the Undead use different EA there and one of the abilities of the kit checks the EA to give an AC bonus.

    And @PaulaMigrate thank you very much for the info. Can you tell me if EET uses BGEE or BG2EE strings?

  • subtledoctorsubtledoctor Member Posts: 11,468
    Raduziel said:


    Then when you COPY the spell in you can use ALTER_EFFECT to set the blocked string based on whichever game the mod is being installed to.

    Can you explain to me how to do this like I was a toddler eating sand?
    Something like:
    COPY ~mymod/spell.spl~ ~override~
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 26018 END
    END
    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 31238 END
    END
    Did you install java? Like, go on the web and google "install java" and the official installer page can detect your operating system and install the right version for you. Then run Near Infinity and it should work. It makes searching for strings sooooo easy...

    Raduziel
  • RaduzielRaduziel Member Posts: 4,716
    edited July 2017
    @subtledoctor

    What if I have more than one opcode entry per spell?

    One of the kits abilities has 7 opcodes 267 entries (because it combines Negative Plane Protection with Remove Fear), for example.



    Each column is the value of the parameter #1 for every Opcode 267 in each game.

  • CamDawgCamDawg Member, Developer Posts: 3,397
    You can, to a limited degree, also employ RESOLVE_STR_REF to determine which string on a given platform actually says "Diseased" without having to muck about with game detection.

    The one thing to be careful of (especially in the vanilla games) is that there are often duplicates of a given string and you may end up not blocking the one that spells use with this method (i.e. BG2 has, I think, five instances of a "Sleep" string).

    Raduziel
  • subtledoctorsubtledoctor Member Posts: 11,468
    edited July 2017
    In your base spell, give each 267 effect a recognizable number in parameter1 (i.e. the field for the strref). Like, just number them 1 through 7.

    Then, when you copy the spell over, you would do 7 ALTER_EFFECT lines like the one I posted, and just add "match_parameter1 = x" to each line after the "INT_VAR," where x is 1, 2, 3, 4, 5, 6, or 7. That way the spell you copy in will block strrefs 1-7, and the final spell will block the seven strrefs you specify. (And all seven ALTER_EFFECT lines will be within both ACTION_IF GAME_IS conditional blocks, so you specific the right strings for each game in all seven cases.)

    Raduziel
  • RaduzielRaduziel Member Posts: 4,716
    edited July 2017
    @subtledoctor

    Like that?

    [spoiler]
    COPY ~UndeadPredator/RZ#PABR.spl~ ~override~
    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 25818 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 17427 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 35484 END
    END
    match_parameter1 = 1

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 20568 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 14007 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 20568 END
    END
    match_parameter1 = 2

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 25806 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 41616 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 35498 END
    END
    match_parameter1 = 3

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 25805 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 41495 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 35497 END
    END
    match_parameter1 = 4

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 25804 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 40979 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 35496 END
    END
    match_parameter1 = 5

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 25803 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 40969 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 35495 END
    END
    match_parameter1 = 6

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 25802 END
    END
    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 40968 END
    END
    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_opcode = 267 parameter1 = 35472 END
    END
    match_parameter1 = 7
    [/spoiler]

    Right now my tp2 doesn't ask for a game check (if it is BGEE, BG2EE, IWDEE), do I need to add one too?

    Post edited by Raduziel on
  • subtledoctorsubtledoctor Member Posts: 11,468
    edited July 2017
    No - put all 7 LPF ALTER_EFFECT lines inside each GAME_IS check. So you should only have 3 GAME_IS checks total.

    And the "match_parameter1 = x" should go immediately after the INT_VAR... it should be inside each ALTER_EFFECT function. So it should appear 21 times... just like (and in fact right next to) the "match_opcode = 367" lines.

    Raduziel
  • RaduzielRaduziel Member Posts: 4,716
    edited July 2017
    @subtledoctor

    Better?

    It sure looks better.



    COPY ~UndeadPredator/RZ#PABR.spl~ ~override~

    SAY NAME1 ~Bless of Recognition~
    SAY UNIDENTIFIED_DESC ~~

    PATCH_IF GAME_IS ~bgee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 1 match_opcode = 267 parameter1 = 25818 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 2 match_opcode = 267 parameter1 = 20568 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 3 match_opcode = 267 parameter1 = 25806 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 4 match_opcode = 267 parameter1 = 25805 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 5 match_opcode = 267 parameter1 = 20804 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 6 match_opcode = 267 parameter1 = 20803 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 7 match_opcode = 267 parameter1 = 20802 END
    END

    PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 1 match_opcode = 267 parameter1 = 17427 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 2 match_opcode = 267 parameter1 = 14007 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 3 match_opcode = 267 parameter1 = 41616 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 4 match_opcode = 267 parameter1 = 41495 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 5 match_opcode = 267 parameter1 = 40979 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 6 match_opcode = 267 parameter1 = 40969 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 7 match_opcode = 267 parameter1 = 40968 END
    END

    PATCH_IF GAME_IS ~iwdee~ BEGIN
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 1 match_opcode = 267 parameter1 = 35484 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 2 match_opcode = 267 parameter1 = 20568 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 3 match_opcode = 267 parameter1 = 35498 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 4 match_opcode = 267 parameter1 = 35497 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 5 match_opcode = 267 parameter1 = 35496 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 6 match_opcode = 267 parameter1 = 35495 END
    LPF ALTER_EFFECT INT_VAR match_parameter1 = 7 match_opcode = 267 parameter1 = 35472 END
    END

  • subtledoctorsubtledoctor Member Posts: 11,468
    Precisely.

    I would put something in the UNIDENTIFIED_DESC field - maybe just repeat the spell name - because that is what shows up when players right-click the ability icon.

    Raduziel
  • RaduzielRaduziel Member Posts: 4,716
    edited July 2017

    Precisely.

    I would put something in the UNIDENTIFIED_DESC field - maybe just repeat the spell name - because that is what shows up when players right-click the ability icon.

    It's a passive ability - all the others I did just that. :)

    About NearInfinity, I do have Java, I've downloaded NearInfinity.jar, it shows a java-program-icon, but when I double click it, it just opens a quick prompt window that closes immediately.

    I'll try to find the "Diseased" strings for BG2EE and IWDEE the hard way, I guess.

    I know I'm saying that a lot, but thanks for all the help.

  • CamDawgCamDawg Member, Developer Posts: 3,397
    I would strongly suggest you either look for an item/spell that already provides the protection your looking for to get the strings, or maybe check out the immunity batches which provide macros for adding immunities easily to items or spells, including disease, fear, and level drain. Some effects are often paired with unexpected strings--for example, disease is usually accompanied by 'diseased', but there are also instances in the game where 'stricken by a foul disease' is used instead.

    RaduzielGrammarsalad
  • RaduzielRaduziel Member Posts: 4,716
    @CamDawg the item research did the trick. Thank you very much!

    Mod's ready, I'll just do some quick test in all four games (IWDEE, BGEE, BG2EE, EET) before releasing v1.

  • GrammarsaladGrammarsalad Member Posts: 2,510
    edited July 2017
    CamDawg said:

    I would strongly suggest you either look for an item/spell that already provides the protection your looking for to get the strings, or maybe check out the immunity batches which provide macros for adding immunities easily to items or spells, including disease, fear, and level drain. Some effects are often paired with unexpected strings--for example, disease is usually accompanied by 'diseased', but there are also instances in the game where 'stricken by a foul disease' is used instead.

    Yeah, I second this recommendation. This macro is awesomesauce. Edit: the link doesn't seem to work:

    http://gibberlings3.net/forums/index.php?showtopic=28834&st=0

    I have updated this for most effects to account for (EE) games. I'll be posting them shortly on that thread, but here is fear, disease and level drain:


    /
    / turns fear immunity into full immunity
    DEFINE_PATCH_MACRO ~cd_immunity_fear_arrays~ BEGIN
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_key BEGIN // these three go last so they don't block their own extras effects
        101,  "-10",  23, "same",  "-10",  "-10", "last" => 1 // immunity to reset morale 
        101,  "-10",  24, "same",  "-10",  "-10", "last" => 1 // immunity to horror
        101,  "-10", 106, "same",  "-10",  "-10", "last" => 1 // immunity to morale break modifier
      END
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
         23, "-10", "-10",     "same",     1,     0, "first" => 1 // reset morale
        161, "-10", "-10",     "same",     1,     0, "same"  => 1 // remove fear
        296, "-10", "-10", "cdhorror", "-10", "-10", "same"  => 1 // protection from animation
        106, "-10",     1,     "same",     1,     0, "first" => 1 // morale break
      END
      PATCH_IF cosmetic = 1 BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
          169, "-10", 36, "same", "-10", "-10", "same" => 1 // prevent panic icon
          240, "-10", 36, "same", "-10", "-10", "same" => 1 // remove panic icon
          142, "-10", 37, "same", "-10", "-10", "same" => 1 // display resist fear icon
        END
      END
      PATCH_IF GAME_IS ~bgee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 25818, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"                 (BGEE)
        267, 20568, "-10", "", "-10", "-10", "same"  => 1 // protection from string "Morale Failure: Panic" (BGEE)
       END
      END
      PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 14007, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (BG2EE)
        267, 17427, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (BG2EE)
       END
      END
      PATCH_IF GAME_IS ~iwdee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 20568, "-10", "", "-10", "-10", "same"  => 1 // protection from string "Morale Failure: Panic"   (IWDEE)
        267, 35484, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (IWDEE)
       END
      END
    DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN END // nothing to delete
      PATCH_IF GAME_IS ~iwdee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
        267, 14007, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (BG2EE)
        267, 17427, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (BG2EE)
        267, 25818, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"                 (BGEE)
        267, 20568, "-10", "", "-10", "-10", "same"  => 1 // protection from string "Morale Failure: Panic" (BGEE)
       END
      END
      PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
        267, 20568, "-10", "", "-10", "-10", "same"  => 1 // protection from string "Morale Failure: Panic"   (IWDEE)
        267, 35484, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (IWDEE)
        267, 25818, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"                 (BGEE)
        267, 20568, "-10", "", "-10", "-10", "same"  => 1 // protection from string "Morale Failure: Panic" (BGEE)
       END
      END
      PATCH_IF GAME_IS ~bgee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
        267, 20568, "-10", "", "-10", "-10", "same"  => 1 // protection from string "Morale Failure: Panic"   (IWDEE)
        267, 35484, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (IWDEE)
        267, 14007, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (BG2EE)
        267, 17427, "-10", "", "-10", "-10", "same"  => 1 // protection from string "panic"   (BG2EE)
       END
      END
    END
    
    // turns disease immunity into full immunity
    DEFINE_PATCH_MACRO ~cd_immunity_disease_arrays~ BEGIN
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_key BEGIN
        101,  "-10", 78, "same",  "-10",  "-10", "same" => 1 // immunity to disease
      END
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
      END
      PATCH_IF cosmetic = 1 BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
          169, "-10", 7, "same", "-10", "-10", "same" => 1 // prevent diseased icon
        END
      END
      PATCH_IF GAME_IS ~bgee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 31238, "-10", "",  "-10", "-10", "same" => 1 // protection from string "Diseased" (BGEE)
        267, 26453, "-10", "",  "-10", "-10", "same" => 1 // protection from string "Stricken by a foul disease" (BGEE)
       END
      END
      PATCH_IF GAME_IS ~bg2ee eet iwdee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 39752, "-10", "same",  "-10", "-10", "same" => 1 // protection from string "stricken by a foul disease"  (BG2EE/IWDEE)
       END
      END
      PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 54337, "-10", "same",  "-10", "-10", "same" => 1 // protection from string "diseased"   (BG2EE/ALso EET)
       END
      END
      PATCH_IF GAME_IS ~iwdee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
        267, 35593, "-10", "same",  "-10", "-10", "same" => 1 // protection from string "diseased"  (IWDEE)
       END
      END
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN 
      END // nothing to delete
      PATCH_IF GAME_IS ~bgee~ BEGIN  //that's a lie!!!
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
        267, 35593, "-10", "same",  "-10", "-10", "same" => 1 // protection from string "diseased"  (IWDEE)
        267, 39752, "-10", "same",  "-10", "-10", "same" => 1 // protection from string "stricken by a foul disease"  (BG2EE/IWDEE)
       END
      END
      PATCH_IF GAME_IS ~bg2ee eet iwdee~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
        267, 31238, "-10", "",  "-10", "-10", "same" => 1 // protection from string "Diseased" (BGEE)
        267, 26453, "-10", "",  "-10", "-10", "same" => 1 // protection from string "Stricken by a foul disease" (BGEE)
       END
      END
      PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
       DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
        267, 35593, "-10", "same",  "-10", "-10", "same" => 1 // protection from string "diseased"  (IWDEE)
       END
      END
    END
    
    // turns level drain immunity into full immunity
    DEFINE_PATCH_MACRO ~cd_immunity_level_drain_arrays~ BEGIN
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_key BEGIN
        101,  "-10", 216, "same",  "-10",  "-10", "same" => 1 // immunity to level drain
      END
      DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
      END
      PATCH_IF cosmetic = 1 BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
          169, "-10", 59, "same", "-10", "-10", "same" => 1 // prevent level drain icon
          142, "-10", 90, "same", "-10", "-10", "same" => 1 // display npp icon
        END
      END
      PATCH_IF GAME_IS ~bgee~ BEGIN  //
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
          267, 25802, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"   (BGEE)
          267, 25803, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"   (BGEE)
          267, 25804, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"  (BGEE)
          267, 25805, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (BGEE)
          267, 25806, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"   (BGEE)
        END
      END
      PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
          267, 41495, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"   (BG2EE)
          267, 40968, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"  (BG2EE)
          267, 40969, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"  (BG2EE)
          267, 40979, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (BG2EE)
          267, 41616, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"  (BG2EE)
        END
      END
      PATCH_IF GAME_IS ~iwdee~ BEGIN  //FIND OTHER STRINGS!
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_extras BEGIN
          267, 35498, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"  (IWDEE)
          267, 35497, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"    (IWDEE)
          267, 35496, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"   (IWDEE)
          267, 35472, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (IWDEE)
          267, 35495, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"   (IWDEE)
        END
      END
    DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN 
    END // nothing to delete ...not
      PATCH_IF GAME_IS ~bgee~ BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
          267, 35498, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"  (IWDEE)
          267, 35497, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"    (IWDEE)
          267, 35496, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"   (IWDEE)
          267, 35472, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (IWDEE)
          267, 35495, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"   (IWDEE)
          267, 41495, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"   (BG2EE)
          267, 40968, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"  (BG2EE)
          267, 40969, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"  (BG2EE)
          267, 40979, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (BG2EE)
          267, 41616, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"  (BG2EE)
        END
      END
      PATCH_IF GAME_IS ~bg2ee eet~ BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
          267, 35498, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"  (IWDEE)
          267, 35497, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"    (IWDEE)
          267, 35496, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"   (IWDEE)
          267, 35472, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (IWDEE)
          267, 35495, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"   (IWDEE)
          267, 25802, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"   (BGEE)
          267, 25803, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"   (BGEE)
          267, 25804, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"  (BGEE)
          267, 25805, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (BGEE)
          267, 25806, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"   (BGEE)
        END
      END
      PATCH_IF GAME_IS ~iwdee~ BEGIN
        DEFINE_ASSOCIATIVE_ARRAY cd_immunity_batches_delete BEGIN
          267, 41495, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"   (BG2EE)
          267, 40968, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"  (BG2EE)
          267, 40969, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"  (BG2EE)
          267, 40979, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (BG2EE)
          267, 41616, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"  (BG2EE)
          267, 25802, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "one level drained"   (BGEE)
          267, 25803, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "two levels drained"   (BGEE)
          267, 25804, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "three levels drained"  (BGEE)
          267, 25805, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "four levels drained"   (BGEE)
          267, 25806, "-10",     "same",  "-10", "-10", "same" => 1 // protection from string "five levels drained"   (BGEE)
        END
      END
    END
    


    If you just want to use clone/alter effect, you can still use this. The relevant strings are here...

    i.e. after every "267" you will find the stringrefs for each notification as described after the "//"

    e.g., the very last line is:
    267, 25806, "-10", "same", "-10", "-10", "same" => 1 // protection from string "five levels drained" (BGEE). (bold added)

    i.e. the stringref for "five levels drained" in BGEE is "25806"

    Raduziel
Sign In or Register to comment.