Skip to content

[How to] Making kit mods for the EE!

145791014

Comments

  • [Deleted User][Deleted User] Posts: 0
    edited July 2017
    The user and all related content has been deleted.
  • RaduzielRaduziel Member Posts: 4,714
    @subtledoctor Well, it was God's hand that solved that problem, then.
  • ArunsunArunsun Member Posts: 1,592
    edited July 2017
    Hello,

    My Warlock mod is rather close to release now but I am facing a couple of issues and I was hoping you could help me solving them. It shouldn't take long, as they are certainly due to some misunderstanding on how to use this or that function/OPcode

    I use a dialogue to allow the user to choose the invocations they want when they level up, much like the @Artemius_I 's Shadow Adept mod, and local variables to determine whether the user can learn invocations. These local variables are incremented upon level up thanks to an AP_Spell.
    Here are the issues I face:
    BG:EE : Apparently none. I have not been through extensive testing and playing though, just leveled up using console. Feel free to test if you want to (don't mind balance for now, I know the kit is too powerful when you get a couple of levels).

    SoD: only one or less of the available options display during dialogue, as shown in the screenshots. When one appears I can choose whatever spell should be available using digit keys, as you would select options in a normal dialogue, but they just don't display. When none appears I'm just stuck in the dialogue, with the "End Dialogue" Option being clickable but doing nothing when I click it. Joined two screenshots to show you what it looks like. This bug really blows my mind as I really, really don't have any idea why it behaves thus, and it only happens with the SoD install...

    SoD and BG2:EE : When leveling multiple levels at once (for example on character creation), the variables determining how many invocations I can learn are only incremented once. So for example upon creation in SoD, the Warlock is supposed to be level 7, and thus have the possibility to choose 3 Least Invocations, but it can only choose one. Artemius told me this was due to the OPcode "set local variable" being buggy when you try incrementing variables multiple times at once. As of now I have thought of two workarounds, but if anyone thinks of something more convenient or a way to solve the problem without changing the system, pray tell:

    Stopping using variables to stock the number of spells that can be learnt and simply using an on-level-up spell that triggers a dialogue when I need to, with only the choice possibility of choosing an invocation of the appropriate level. This might be a tad tedious when you start directly in ToB as you would have a lot of dialogues but at least it should work.
    OR incrementing them once at a time, with a 1 sec delay between each incrementation (a 4sec delay total at most, seems reasonable) and then triggering the dialogue another sec after (a 4sec delay total at most, seems reasonable).


    BG2EE: HLA table doesn't work, meaning I just can't choose HLAs when I level up past 3M exp, the button "Abilities" is gray and not clickable. This might be something very stupid I did but I just can't put my finger on it.

    I've joined a zip with the files of the mod, if anyone can take a look.
  • kjeronkjeron Member Posts: 2,368
    edited July 2017
    Arunsun said:

    SoD: only one or less of the available options display during dialogue, as shown in the screenshots. When one appears I can choose whatever spell should be available using digit keys, as you would select options in a normal dialogue, but they just don't display. When none appears I'm just stuck in the dialogue, with the "End Dialogue" Option being clickable but doing nothing when I click it. Joined two screenshots to show you what it looks like. This bug really blows my mind as I really, really don't have any idea why it behaves thus, and it only happens with the SoD install...

    Cannot reproduce, can only suspect UI-mod conflict or modmerge related.
    Arunsun said:

    SoD and BG2:EE : When leveling multiple levels at once (for example on character creation), the variables determining how many invocations I can learn are only incremented once. So for example upon creation in SoD, the Warlock is supposed to be level 7, and thus have the possibility to choose 3 Least Invocations, but it can only choose one. Artemius told me this was due to the OPcode "set local variable" being buggy when you try incrementing variables multiple times at once. As of now I have thought of two workarounds, but if anyone thinks of something more convenient or a way to solve the problem without changing the system, pray tell:


    Stopping using variables to stock the number of spells that can be learnt and simply using an on-level-up spell that triggers a dialogue when I need to, with only the choice possibility of choosing an invocation of the appropriate level. This might be a tad tedious when you start directly in ToB as you would have a lot of dialogues but at least it should work.
    OR incrementing them once at a time, with a 1 sec delay between each incrementation (a 4sec delay total at most, seems reasonable) and then triggering the dialogue another sec after (a 4sec delay total at most, seems reasonable).
    I don't remember having this issue(though I can reproduce it), and I eventually abandoned this method because the CLAB was getting to crowded. Instead I expanded my dialog to account for level ranges, and only adjusted variables when spells were gained/lost.
    For example, Least Invocations:
    LevelGT(0) LevelLT(2) GlobalLT(1) // Level 1-2, no Invocations of this tier
    LevelGT(1) LevelLT(4) GlobalLT(2) // Level 3-4, one or fewer Invocations of this tier
    LevelGT(3) LevelLT(41) GlobalLT(3) // Level 4+, two or fewer Invocations of this tier
    Gaining an invocation would raise that tiers variable, giving up an invocation(to replace) would lower that tiers variable.
    Arunsun said:

    BG2EE: HLA table doesn't work, meaning I just can't choose HLAs when I level up past 3M exp, the button "Abilities" is gray and not clickable. This might be something very stupid I did but I just can't put my finger on it.

    The MIN_LEV column is only for Multiclasses, for Single-class kits the value needs to be '1'.
  • ArunsunArunsun Member Posts: 1,592
    edited July 2017
    kjeron said:

    Arunsun said:

    SoD: only one or less of the available options display during dialogue, as shown in the screenshots. When one appears I can choose whatever spell should be available using digit keys, as you would select options in a normal dialogue, but they just don't display. When none appears I'm just stuck in the dialogue, with the "End Dialogue" Option being clickable but doing nothing when I click it. Joined two screenshots to show you what it looks like. This bug really blows my mind as I really, really don't have any idea why it behaves thus, and it only happens with the SoD install...

    Cannot reproduce, can only suspect UI-mod conflict or modmerge related.

    Weird, I'm pretty sure I installed it on a clean SoD. I will redownload it and try again then. But at least if you can't reproduce the bug then it means it's my install that's faulty. TY for testing.

    EDIT: After reinstalling it I no longer had the issue.
    kjeron said:


    Arunsun said:

    SoD and BG2:EE : When leveling multiple levels at once (for example on character creation), the variables determining how many invocations I can learn are only incremented once. So for example upon creation in SoD, the Warlock is supposed to be level 7, and thus have the possibility to choose 3 Least Invocations, but it can only choose one. Artemius told me this was due to the OPcode "set local variable" being buggy when you try incrementing variables multiple times at once. As of now I have thought of two workarounds, but if anyone thinks of something more convenient or a way to solve the problem without changing the system, pray tell:


    Stopping using variables to stock the number of spells that can be learnt and simply using an on-level-up spell that triggers a dialogue when I need to, with only the choice possibility of choosing an invocation of the appropriate level. This might be a tad tedious when you start directly in ToB as you would have a lot of dialogues but at least it should work.
    OR incrementing them once at a time, with a 1 sec delay between each incrementation (a 4sec delay total at most, seems reasonable) and then triggering the dialogue another sec after (a 4sec delay total at most, seems reasonable).
    I don't remember having this issue(though I can reproduce it), and I eventually abandoned this method because the CLAB was getting to crowded. Instead I expanded my dialog to account for level ranges, and only adjusted variables when spells were gained/lost.
    For example, Least Invocations:
    LevelGT(0) LevelLT(2) GlobalLT(1) // Level 1-2, no Invocations of this tier
    LevelGT(1) LevelLT(4) GlobalLT(2) // Level 3-4, one or fewer Invocations of this tier
    LevelGT(3) LevelLT(41) GlobalLT(3) // Level 4+, two or fewer Invocations of this tier
    Gaining an invocation would raise that tiers variable, giving up an invocation(to replace) would lower that tiers variable.

    I'll probably go for a different system then. Yours is interesting but the one I feel will be the easiest for me, given what I know about modding, will be my second workaround.
    kjeron said:



    Arunsun said:

    BG2EE: HLA table doesn't work, meaning I just can't choose HLAs when I level up past 3M exp, the button "Abilities" is gray and not clickable. This might be something very stupid I did but I just can't put my finger on it.

    The MIN_LEV column is only for Multiclasses, for Single-class kits the value needs to be '1'.
    Ty for the info, now this works perfectly.

    Thank you for your very helpful (and very fast) answer.

    An official release should come by the end of the week-end, if anyone's interested.
    Post edited by Arunsun on
  • RaduzielRaduziel Member Posts: 4,714
    One quick question:

    I think I read somewhere that it was not possible to make wizard kits. To be more accurate: the only way of doing so was giving up on some of the vanilla "kits".

    Is it true?
  • GrammarsaladGrammarsalad Member Posts: 2,582
    Raduziel said:

    One quick question:

    I think I read somewhere that it was not possible to make wizard kits. To be more accurate: the only way of doing so was giving up on some of the vanilla "kits".

    Is it true?

    I think you can in ee (though, they won't show up in character creation in SoD as that version does not have a scroll bar.) You could always create a wizard kit, but the problem was that there was that the engine would ignore any k_x_y assignments and so it wasn't possible to pick the class at character creation.

    But, otherwise, you could always create a kit and assign it by script (which would work seamlessly for npcs-- less so for player created characters).

    Anyway, it should work fine in the ee engines ( minus SoD...)
  • RaduzielRaduziel Member Posts: 4,714
    edited July 2017
    @Grammarsalad, thanks.

    I intend to make more four kits in the same line "I hate undead":

    1) The Deathslayer (a wizard kit from the Complete Book of Necromancer)

    2) The Purifier, a druid kit focused on fighting unnatural beings (will try to work around the opcode that rules the Root of All Problems)

    3) The Doomguide of Kelemvor, a priest devoted to giving the undeads their peace.

    4) The Requiem Chorist, a bard kit with special songs to put the undead back in their graves.

    Would go for a Thief kit too, but M&G's Tomb Runner does the trick. Too bad it's a kit for F/T only.

    That's the result of over fifteen years playing in the Ravenloft scenario.
  • ArunsunArunsun Member Posts: 1,592
    edited July 2017
    Does anyone know to how many lines one can write in a CLAB file?
    And what's the limit number of kits? I heard about 256 but would appreciate a confirmation
    Post edited by Arunsun on
  • [Deleted User][Deleted User] Posts: 0
    edited July 2017
    The user and all related content has been deleted.
  • ArunsunArunsun Member Posts: 1,592
    Hey guys,

    I had a few questions concerning Sorcerers and how they pick spells:

    I made a few tests concerning these tables, and apparently it checks whether you actually KNOW the spell you want to pick to decide whether it is available for picking, rather than checking if you have picked it in the past. So if you picked the spell, and somehow forgot it and then get to choose another spell from that level, you will be able to pick and relearn the aforementioned spell. Can anyone confirm that this is correct?

    Alternatively, is there a way to make a Sorcerer kit pick spells from a custom table of spells rather than the usual one? I meant not to modify the table for ALL sorcerer kits, but only for one kit that would pick from that table.

    TY for helping me!
  • kjeronkjeron Member Posts: 2,368
    Arunsun said:

    I made a few tests concerning these tables, and apparently it checks whether you actually KNOW the spell you want to pick to decide whether it is available for picking, rather than checking if you have picked it in the past. So if you picked the spell, and somehow forgot it and then get to choose another spell from that level, you will be able to pick and relearn the aforementioned spell. Can anyone confirm that this is correct?

    That's correct, the game does not store which spells you pick, only those you know.
    It also does not compare how many you know either, if you cheat yourself some extra spells, you will still get to pick additional ones as normal when you level up.

    As for custom spell tables, no. The most you can do through the level up screen is assign specialist kit flags to prevent their opposition schools from appearing. Making custom spell choice tables for sorcerers/shamans usually involves removing the level-up selection entirely, and making the selection through other means (dialogue, subspell menus, etc...).
  • The user and all related content has been deleted.
  • ArunsunArunsun Member Posts: 1,592

    Arunsun said:

    Alternatively, is there a way to make a Sorcerer kit pick spells from a custom table of spells rather than the usual one? I meant not to modify the table for ALL sorcerer kits, but only for one kit that would pick from that table.

    Only way is to trash the vanilla system entirely (I think, set the known spells to 0 in every column of the .2da file) and re-create it from the ground up with a dialogue-based version. This would be some work, and it's a bit finicky, but Aquadrizzt has done it in Tome & Blood. This gives you ultimate control over which spells can be chosen by which kit. But it affects all sorcerers so it would need to be applied universally.
    Certainly far too complicated and beyond the scope of a mere kit mod. By the way, is the file you are talking about the "HIDESPL.2da" file? That's what I could find that looks the most like your description but not all spells are present.
  • JJaANFJJaANF Member Posts: 11
    edited November 2017
    @Raduziel

    I have (I think) same problem you had:

    I used the guide to make a (fighter) kit of mine, but the record screen displays the base fighter description...

    I installed it on a fresh EET...

    I have no idea where to seek now...

    Edit: It is on my end, or has a link with EET... because i tried again with my base bg2EE and everything worked...
  • RaduzielRaduziel Member Posts: 4,714
    edited November 2017
    JJaANF said:

    @Raduziel

    I have (I think) same problem you had:

    I used the guide to make a (fighter) kit of mine, but the record screen displays the base fighter description...

    I installed it on a fresh EET...

    I have no idea where to seek now...

    Edit: It is on my end, or has a link with EET... because I tried again with my base bg2EE and everything worked...

    IIRC I solved this by excluding the biography and briefdesc entries.

    The LAF from my Circle Enforcer follows as an example:
    LAF fl#add_kit_ee
    STR_VAR
    kit_name = ~RACE~
    clascolr = ~6 42 54 242 236~
    END
    Post edited by Raduziel on
  • compostercomposter Member Posts: 25
    i create my kit, when i choose kit instead name "invalid : 71381" . how resolve it ?
  • semiticgoddesssemiticgoddess Member Posts: 14,903
    I'm working on a basic Archer kit for paladins and fighters, and while the mod installs without any warnings, the kit shows up as a mage kit instead of a fighter kit. I'm working with an unmodded v2.5 BG2:EE and BG:EE+SoD with ModMerge.

    This is the full TP2 I'm using. Currently the paladin section is commented out. Anyone know why the installer thinks it's a mage kit? @kjeron? @subtledoctor?

    BACKUP ~UniversalArcherKit/backup~
    AUTHOR ~ced2168@columbia.edu~

    VERSION ~1.0~

    //MODDER

    AUTO_TRA ~UniversalArcherKit/tra/%s~

    /*
    * This mod does not use any chapter checks
    *
    ALWAYS
    ACTION_IF GAME_IS ~eet~ BEGIN
    OUTER_SET bg2_chapter = 12
    END ELSE BEGIN
    OUTER_SET bg2_chapter = 0
    END
    OUTER_FOR (i=1; i<=10; i=i+1) BEGIN
    OUTER_SET bg2_chapter = bg2_chapter + 1
    OUTER_SPRINT name_source ~bg2_chapter_%i%~
    OUTER_SET EVAL ~%name_source%~ = bg2_chapter
    END
    END
    */

    LANGUAGE ~English~
    ~English~
    ~UniversalArcherKit/tra/English/UniversalArcherKit.tra~

    BEGIN "Universal Archer Kit" //
    INCLUDE "UniversalArcherKit/lib/fl#add_kit_ee.tpa"


    ADD_KIT ~USAF00~
    ~USAF00 1 1 1 1 1 1 1 1~
    ~USAF00 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 5 5 2 2 1 1 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0~
    ~USAF00 9 0 0 0 0 0~
    ~USAF00 0 0 0 0 0 0~
    ~USAF00 15 0 0 0 0 0~
    ~USAF00 15 0 0 0 0 0~
    ~USAF00 1 1 1 1 1 1 1 1 1~
    ~USAF00 0 1 1 1 1 0~
    ~UniversalArcherKit/CLABUSAF.2da~
    ~K_M_H K_M_D K_M_G K_M_E K_M_HE K_M_HL K_M_HO~
    ~0x00008000 2~
    ~FI0~
    ~LEAT14 * HELM07 BAG24 RING06 RING31 CLCK02 BOOT01 AMUL19 BRAC16 BELT06 AROW11,40 BULL03,40 BOLT06,40 POTN52,5 POTN04,2 POTN14,5 HAMM07 SW1H39 STAF08~

    SAY ~archer~
    SAY ~Archer~
    SAY ~ARCHER: The Archer is the epitome of skill with the bow—the ultimate marks<PRO_MANWOMAN>, able to make almost any shot, no matter how difficult. To become so skilled with the bow, the Archer has had to sacrifice some of proficiency with melee weapons and armor.

    Advantages:
    – +1 to hit and damage rolls with any missile weapon every 3 levels.
    – May achieve Grand Mastery (5 slots) in longbows, shortbows, and crossbows.
    – May use the Called Shot ability once per day. Gains one use at level 4 and an additional use every 4 levels thereafter.

    CALLED SHOT: All successful ranged attacks within the next 10 seconds have the following cumulative effects besides normal damage, according to the level of the Archer:
    4th level: -1 penalty to target's THAC0.
    8th level: -1 penalty to target's Saving Throws vs. Spell.
    12th level: -1 penalty to the target's Strength score.
    16th level: +2 bonus to damage roll.

    Disadvantages:
    – May only wear leather, studded leather, and hide armor.
    – May only become Proficient (one slot) with melee weapons.
    ~

    LAF fl#add_kit_ee
    INT_VAR
    biography = RESOLVE_STR_REF (~~)
    briefdesc = RESOLVE_STR_REF (~ARCHER: The Archer is the epitome of skill with the bow—the ultimate marks, able to make almost any shot, no matter how difficult. To become so skilled with the bow, the Archer has had to sacrifice some of proficiency with melee weapons and armor.~)
    STR_VAR
    kit_name = ~USAF00~
    clswpbon = ~1 0 2~
    numwslot = ~4~
    clascolr = ~30 91 93 23 93~
    hpclass = ~HPWAR~
    clsrcreq = ~1 1 1 1 1 1 1~
    clasthac = ~0~
    END


    /*
    ADD_KIT ~USAP00~
    ~USAP00 1 1 1 1 1 1 1 1~
    ~USAP00 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 5 5 2 2 1 1 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0~
    ~USAP00 12 0 0 0 12 17~
    ~USAP00 0 0 0 0 0 0~
    ~USAP00 0 0 0 0 0 0~
    ~USAP00 0 0 0 0 0 0~
    ~USAP00 1 0 0 0 0 0 0 0 0~
    ~USAP00 0 0 0 0 0 0~
    ~UniversalArcherKit/CLABUSAP.2da~
    ~K_M_H K_M_D K_M_G K_M_E K_M_HE K_M_HL K_M_HO~
    ~0x00008000 6~
    ~PA0~
    ~LEAT14 * HELM07 BAG24 RING06 RING31 CLCK02 BOOT01 AMUL19 BRAC16 BELT06 AROW11,40 BULL03,40 BOLT06,40 POTN52,5 POTN04,2 POTN14,5 HAMM07 SW1H39 STAF08~

    SAY ~archer~
    SAY ~Archer~
    SAY ~ARCHER: The Archer is the epitome of skill with the bow—the ultimate marks, able to make almost any shot, no matter how difficult. To become so skilled with the bow, the Archer has had to sacrifice some of proficiency with melee weapons and armor.

    Advantages:
    – +1 to hit and damage rolls with any missile weapon every 3 levels.
    – May achieve Grand Mastery (5 slots) in longbows, shortbows, and crossbows.
    – May use the Called Shot ability once per day. Gains one use at level 4 and an additional use every 4 levels thereafter.

    CALLED SHOT: All successful ranged attacks within the next 10 seconds have the following cumulative effects besides normal damage, according to the level of the Archer:
    4th level: -1 penalty to target's THAC0.
    8th level: -1 penalty to target's Saving Throws vs. Spell.
    12th level: -1 penalty to the target's Strength score.
    16th level: +2 bonus to damage roll.

    Disadvantages:
    – May only wear leather, studded leather, and hide armor.
    – May only become Proficient (one slot) with melee weapons.
    ~

    LAF fl#add_kit_ee
    INT_VAR
    biography = RESOLVE_STR_REF (~~)
    briefdesc = RESOLVE_STR_REF (~ARCHER: The Archer is the epitome of skill with the bow—the ultimate marks, able to make almost any shot, no matter how difficult. To become so skilled with the bow, the Archer has had to sacrifice some of proficiency with melee weapons and armor.~)
    STR_VAR
    kit_name = ~USAP00~
    clswpbon = ~1 0 2~
    numwslot = ~3~
    clascolr = ~25 28 57 2 24~
    hpclass = ~HPWAR~
    clsrcreq = ~1 1 1 1 1 1 1~
    clasthac = ~0~
    END
    */
  • kjeronkjeron Member Posts: 2,368


    ~K_M_H K_M_D K_M_G K_M_E K_M_HE K_M_HL K_M_HO~
    [/spoiler]

    ~K_M_X~ is for mage kits.
    ~K_P_X~ is for paladins
    ~K_F_X~ fighters
    ~K_T_X~ thieves
    etc...
    each is listed in KITTABLE.2da.
  • The user and all related content has been deleted.
  • semiticgoddesssemiticgoddess Member Posts: 14,903
    @subtledoctor: Your mod's too balanced for my taste. I wanted the original kit with the original Called Shot.
  • The user and all related content has been deleted.
  • semiticgoddesssemiticgoddess Member Posts: 14,903
    So now there are three mods that add an Archer kit for fighters that behaves just like the original game: (1) a component in Tactics, (2) Might and Guile, and (3) the Universal Archer Kit mod.
  • RaduzielRaduziel Member Posts: 4,714
    edited January 2018
    CrevsDaak said:



    Zero means the class cannot Fall, and one means the class can Fall like a Ranger or a Paladin do if their reputation drops low enough.

    fallen = 0
    This is the string that is displayed when you Fall and lose your class. You don't need to provide anything if the class can't become Fallen.
    fallen_notice = RESOLVE_STR_REF (~Lost Class: Keksimus Maximus.~)
    Some questions about the Fallen mechanics, if I may:

    1) Using this coding above in my Undead Predator made i) the kit name disappear from the Character Sheet Screen and ii) the string shows as Lost Class: Ranger instead of Lost Class: Undead Predator. And the Character Sheet Screen shows "Ranger" instead of "Fallen Ranger" as it was supposed to do.

    Actually, if I put any of the info from the INT_VAR field the kit's name and description vanishes from the character sheet (they only show up at character creation).

    Anyone knows why this is happening and how to fix it?

    2) Is it possible to make a Fighter kit that can Fall? If so, how do I do it?

    Thanks!

  • GwendolyneGwendolyne Member Posts: 461
    edited January 2018
    1) I had the same problem with my two paladin kits. The only way to solve it is the following workaround.
    // EE : Workaround to display the correct fallen status in character screens.
    // --------------------------------------------------------------------------
    ACTION_IF (FILE_EXISTS_IN_GAME ~clastext.2da~) BEGIN
    	ACTION_CLEAR_ARRAY GW_Fallen_Kits
    	ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_Fallen_Kits BEGIN
    	7700006,	7700007	=> GW_DIAMOND_KNIGHT	// @7700006 = ~chevalier de diamant déchu~	-	@7700007 = ~Chevalier de Diamant déchu~
    	7720006,	7720007	=> GW_UNICORN_RIDER	// @7720006 = ~chevaucheuse de licorne déchue~	-	@7720007 = ~Chevaucheuse de Licorne déchue~
    	END
    	ACTION_PHP_EACH GW_Fallen_Kits AS GW_kits => GW_kit_name BEGIN
    		COPY_EXISTING - ~clastext.2da~ ~override~
    			COUNT_2DA_COLS cols					// amount of columns
    			READ_2DA_ENTRIES_NOW kittable cols			// read all file into memory  
    			FOR (row = 1 ; row < kittable ; ++row) BEGIN		// iterate over rows
    				READ_2DA_ENTRY_FORMER kittable row 0 ~kit_name~	// read column value
    				PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~%GW_kit_name%~ BEGIN
    					READ_2DA_ENTRY_FORMER kittable row 1 kit_classid
    					READ_2DA_ENTRY_FORMER kittable row 2 kit_kitid
    					READ_2DA_ENTRY_FORMER kittable row 4 kit_desc
    					READ_2DA_ENTRY_FORMER kittable row 6 kit_bio
    					READ_2DA_ENTRY_FORMER kittable row 8 kit_briefdesc
    					SET patch_lower = RESOLVE_STR_REF ((AT %GW_kits_0%))
    					SET patch_mixed = RESOLVE_STR_REF ((AT %GW_kits_1%))
    					SET patch_fallen = 1
    					SET patch_fallen_notice = "-1"
    					SPRINT patch_clastext "FALLEN_%GW_kit_name% %kit_classid% %kit_kitid% %patch_lower% %kit_desc% %patch_mixed% %kit_bio% %patch_fallen% %kit_briefdesc% %patch_fallen_notice%"
    					i = kittable
    					INNER_ACTION BEGIN APPEND clastext.2da "%patch_clastext%" UNLESS "FALLEN_%GW_kit_name%" END
    				END
    			END
    	END
    	ACTION_CLEAR_ARRAY GW_Fallen_Kits
    END
    
    The trick is to create a fallen kit in the clastext.2da file, using the same values but the lower and mixed names.

    2) I don't think it is possible without scripting it. And even in this case, I am not sure it would work fine.
    Post edited by Gwendolyne on
  • RaduzielRaduziel Member Posts: 4,714
    edited January 2018
    @Gwendolyne

    In which part of the file this code enters? Should I remove the INT_VAR entries or those work together with your code?

    Thanks!

    This is how the code should look like?

    RAUP is the intern name of the Undead Predator:


    // EE : Workaround to display the correct fallen status in character screens (provided by Gwendolyne)
    // --------------------------------------------------------------------------
    ACTION_IF (FILE_EXISTS_IN_GAME ~clastext.2da~) BEGIN
    ACTION_CLEAR_ARRAY GW_Fallen_Kits
    ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_Fallen_Kits BEGIN
    101, 102 => GW_RAUP // @101 undead predator @102 Undead Predator
    END
    ACTION_PHP_EACH GW_Fallen_Kits AS GW_kits => GW_RAUP BEGIN
    COPY_EXISTING - ~clastext.2da~ ~override~
    COUNT_2DA_COLS cols // amount of columns
    READ_2DA_ENTRIES_NOW kittable cols // read all file into memory
    FOR (row = 1 ; row < kittable ; ++row) BEGIN // iterate over rows
    READ_2DA_ENTRY_FORMER kittable row 0 ~RAUP~ // read column value
    PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~%GW_RAUP%~ BEGIN
    READ_2DA_ENTRY_FORMER kittable row 1 kit_classid
    READ_2DA_ENTRY_FORMER kittable row 2 kit_kitid
    READ_2DA_ENTRY_FORMER kittable row 4 kit_desc
    READ_2DA_ENTRY_FORMER kittable row 6 kit_bio
    READ_2DA_ENTRY_FORMER kittable row 8 kit_briefdesc
    SET patch_lower = RESOLVE_STR_REF ((AT %GW_kits_0%))
    SET patch_mixed = RESOLVE_STR_REF ((AT %GW_kits_1%))
    SET patch_fallen = 1
    SET patch_fallen_notice = "-1"
    SPRINT patch_clastext "FALLEN_%GW_kit_name% %kit_classid% %kit_kitid% %patch_lower% %kit_desc% %patch_mixed% %kit_bio% %patch_fallen% %kit_briefdesc% %patch_fallen_notice%"
    i = kittable
    INNER_ACTION BEGIN APPEND clastext.2da "%patch_clastext%" UNLESS "FALLEN_%GW_RAUP%" END
    END
    END
    END
    ACTION_CLEAR_ARRAY GW_Fallen_Kits
    END
    That's it?
    Post edited by Raduziel on
  • [Deleted User][Deleted User] Posts: 0
    edited January 2018
    The user and all related content has been deleted.
  • GwendolyneGwendolyne Member Posts: 461
    edited January 2018
    @Raduziel
    Just change the array line:
    ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_Fallen_Kits BEGIN
    	101,	102	=> RAUP   // @101 undead predator   @102 Undead Predator
    END
    GW is my registered prefix and I use it even with my functions and macros.

    Edit: write this code AFTER your ADD_KIT bloc.

    @subtledoctor:

    The hardest part would be delving into the umpteen fights and quests and scenarios in the game and scripting their effects on your karma.


    This is exactly the kind of things I was thinking of when I said I was not sure it would work fine: a lot of coding through all the game quests (scripts and dialogues). Not impossible, but a huge amount of work. ;)
  • RaduzielRaduziel Member Posts: 4,714
    edited January 2018
    @Gwendolyne

    Using the following code I had no success. The message still is "Lost Class: Ranger" and the Character Sheet shows "Undead Predator" instead of "Fallen Undead Predator".

    Am I doing something wrong?

    // EE : Workaround to display the correct fallen status in character screens (provided by Gwendolyne)
    // --------------------------------------------------------------------------
    ACTION_IF (FILE_EXISTS_IN_GAME ~clastext.2da~) BEGIN
    ACTION_CLEAR_ARRAY GW_Fallen_Kits
    ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_Fallen_Kits BEGIN
    100, 101 => RAUP // @100 undead predator @101 Undead Predator
    END
    ACTION_PHP_EACH GW_Fallen_Kits AS GW_kits => GW_kit_name BEGIN
    COPY_EXISTING - ~clastext.2da~ ~override~
    COUNT_2DA_COLS cols // amount of columns
    READ_2DA_ENTRIES_NOW kittable cols // read all file into memory
    FOR (row = 1 ; row < kittable ; ++row) BEGIN // iterate over rows
    READ_2DA_ENTRY_FORMER kittable row 0 ~kit_name~ // read column value
    PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~%GW_kit_name%~ BEGIN
    READ_2DA_ENTRY_FORMER kittable row 1 kit_classid
    READ_2DA_ENTRY_FORMER kittable row 2 kit_kitid
    READ_2DA_ENTRY_FORMER kittable row 4 kit_desc
    READ_2DA_ENTRY_FORMER kittable row 6 kit_bio
    READ_2DA_ENTRY_FORMER kittable row 8 kit_briefdesc
    SET patch_lower = RESOLVE_STR_REF ((AT %GW_kits_0%))
    SET patch_mixed = RESOLVE_STR_REF ((AT %GW_kits_1%))
    SET patch_fallen = 1
    SET patch_fallen_notice = "-1"
    SPRINT patch_clastext "FALLEN_%GW_kit_name% %kit_classid% %kit_kitid% %patch_lower% %kit_desc% %patch_mixed% %kit_bio% %patch_fallen% %kit_briefdesc% %patch_fallen_notice%"
    i = kittable
    INNER_ACTION BEGIN APPEND clastext.2da "%patch_clastext%" UNLESS "FALLEN_%GW_kit_name%" END
    END
    END
    END
    ACTION_CLEAR_ARRAY GW_Fallen_Kits
    END


    PS: Did two tests with this code with and without the INT_VAR block of code, both tests gave me the same result.

    Thanks :)
  • GwendolyneGwendolyne Member Posts: 461
    edited January 2018
    Strange. I use this code for a while and it works fine with my kits. Here is a screenshot when a Diamond Knight (Chevalier de Diamant) becomes "fallen" (déchu):



    But I remember having huge headaches when I did not understand why the fallen status did not display well in the screenshot. I did a few tests with the INT_VAR variables and I came to that: if you want to display the fallen status, don't use fallen = 1 with LAF fl#add_kit_ee.

    I will try my code with your mod tonight. Maybe you missed something.
Sign In or Register to comment.