Skip to content

[Mod] 3.5 Edition/ Pathfinder style Tweaks Collection (thac0, Constitution, hit dice)

ReddbaneReddbane Member Posts: 222
edited March 2019 in General Modding
Thanks to @kjeron and @subtledoctor for all their help. Couldn't have done it without you.

This thread will host a collection of mods based on some my personal tweaks I tend to make to my playthroughs of IE games, based on some changes that were made to Dungeons and Dragons System after 2nd edition, specifically 3.5 and Pathfinder, my two personal favorite iterations of the system.

Here are the components:
1. Thac0 progression based on 3.5 BAB Progression (Finished)
2. Full Constitution bonuses (17+) for all Classes (Finished)
3. Pathfinder style (ie higher) hit dice for Rogue and Arcane classes (Finished Except for IWDEE [see below])
4. (3.5 Edition) Weapon Style Rebalance

Here are the Dropbox links:
1. https://www.dropbox.com/s/i08gwl50aj52hav/3.5 Thac0.rar?dl=0
2. https://www.dropbox.com/s/c5cukv66uuos3b6/3.5 Universal Con Bonus.rar?dl=0
3. https://www.dropbox.com/s/dxyk1r990hiiqww/Pathfinder Hit Dice.rar?dl=0
4. https://www.dropbox.com/s/1scwwnuzc8a4uzd/3.5weaponstyle.rar?dl=0

(a small note: this is my first weidu mod—in the past I merely modded my own game using nearinfinity—and I’m using this to slowly teach myself higher level modding and weidu.)

1 – 3.5 thac0

I have discussed this topic in depth in an earlier thread several months ago.

The short of it is that 3.5 streamlined attack progression for non-warriors, as well as significantly buffing the attacks of Thieves and Bards, and slightly buffing the attacks of mages. 3.5 (and later Pathfinder, which is based on 3.5) sorted attack progression into three easy to follow groups High, Medium, and Low, all of which is based upon the hit dice of the class. High is essentially the same as Warrior thac0 progression, with 1 BAB (base attack bonus) for each hit dice or level of the class. Medium is somewhat similar to Priest Thac0, but less janky, no longer suddenly increasing by 2 every three levels, but instead equaling ¾ of your hit dice (rounded down) only increasing by 1 at certain levels and capping at 15 BAB at level 20. Another major difference is that Priest and Rogues use the same attack progression, and the old thief attack progression of one ever other level (essentially ½ of hit dice) is called low and reserved on for non-brawling classes such as the Wizard. What my mod does is to alter thac0 progression to match the smoother and more balanced 3.5 attack balance, with 20 BAB essentially equaling 0 thac0. Warrior thac0 remained unchanged, but now Thief and Priests reduce their thac0 based upon ¾ of their level gained after level 1, and caps at 5 thac0 (rather than 6 or 8 per P&P) at level 21.
Thus Priests and Rogues thac0 can be calculated at any time based on the equation:
20 - [(Level - 1) X 0.75] = Thac0 rounded up
And now Mages and Sorcerers use the old Rogue progression of 1 thac0 every two levels, capping at 10 (rather than 13) at level 21.
For quick player reference: New Thac0 table pdf
New Thac0 Excel Sheet

For the most part Warriors and Mages remain the same gameplay wise, but now single class thieves are much more useful in melee, as they are in 3.5, and don’t become underpowered at higher levels, and Assassins backstab it much more likely to hit once you get to the endgame and they get their extra multipliers.

The mod changes very little, only a single file, and is compatible with any mod that does not alter the thac0 table (thus no un-nerfed thac0 table) and should generally be installed after other major tweaks, especially those that extend levels to 50, since those replace the thac0 table. (My thac0 already goes to 50 so there should be no problems)
My table also includes an entry for Shaman (using the new priest progression), so it is compatible with 2.0 and SOD, but still works with older versions of BGEE 1&2 as well as Icewind Dale EE.

2 – Universal Constitution Bonus, Full HP Bonus for all classes

In 2nd Edition, and thus Vanilla Baldur’s Gate and Icewind Dale, only Warriors (Fighters, Rangers, Paladins) gain extra HP for a Constitution score above 16. Thus, barring shorty races, non-warriors (Mages, Priests, Rogues) received almost no benefit for a Con score above 16, and thus a 19 Con Orc Thief was no hardier than a 16 Con Elf thief. One of the changes made in 3rd edition was to make so that physical ability scores did not discriminate between classes, thus a High Constitution score was good for any class. This mod merely makes it so that all classes receives the same bonuses for 17+ Constitution scores.

All I had to do was make the non-warrior and warrior tables identical in the HPCON.2da; it was so simple I’m surprised no one did it before. Like the thac0 mod, this mod changes only one file, and thus is compatible with any mod that does not change the files determining the bonuses of Constitution (HPCON.2da), but to be safe you should probably install it after any other major tweak mods.
As above it is compatible with 2.0 and SOD, but still works with older versions of BGEE 1&2 as well as Icewind Dale EE.

3 – Pathfinder Hit Dice

This mod is for people who prefer the changes Pathfinder made to the Hit Dice of Certain classes. For those who don’t know Rogues and Bards in PF use d8 like priests, and Mages and Sorcerers now use the d6, which thieves used before. The way this is implemented in this mod that Thieves and Bards now have a Hit Dice the same as Priests, d8 for the first 9 levels, and +2 for every level afterwards. Mages and Sorcerers now use d6 for the first 10 levels and +1 afterwards, while the Dragon Disciple uses d8 (combined with Universal Constitution DD get a lot of health, so perhaps be cautious about combining the mods if you think that breaks the Kit). I’ve also readjusted all the appropriate class multi combos so their Hit Dice reflect the altered classes: for example, a Fighter Thief now has a d9 (half of d10 + half of d8) and a Mage Thief now has a d7 (half d8 + half d6). If you want to check my math I’ve included a record of all the Hit Die changes: New Hit Die pdf
New Hit Die Excel
The mod also alters the class descriptions, but is still compatible with mods that also alter class descriptions (such as Rogue Rebalancing), so long as the leave the phrase “Hit Die: dx” in the description. Currently this mod is compatible with BGEE, SOD, BG2EE, and partially with IWDEE: in Icewind all the gameplay changes function, but currently the Character Creation Class Descriptions remains the same (working to fix this).

The mod is divided into two parts: “Pathfinder Hit Dice” installs all the gameplay files, and “Patch Class Descriptions” which changes the class descriptions. You can just install the first part if you are worried about a dialog.tlk conflict.

“Pathfinder Hit Dice” gives you three options based on what Hit Roll tweaks you may have made.
1. “Normal Rolls” is for the vanilla game and any game where you have not modded the manner in which HP is granted. (You get normal rolls with the altered Hit Dice)
2. “Average Rolls” is if you have the “Higher HP on Level Up: Average Rolls” component of Tweaks Anthology installed. (You are granted the Average roll of the altered Hit Dice)
3. “Maximum Rolls” is if you have the “Higher HP on Level Up: Maximum Rolls” component of Tweaks Anthology installed. (You are granted the Maximum roll of the altered Hit Dice)
4. "Ideal Average Rolls" is based on a preferred home-rule, where your Hp is the Ideal average (the average roll rounded up). Basically your health per level is half the die + 1, like a fighter would be 6 ( 10 / 2 + 1 ) per level while a Cleric/Thief would be 5 ( 8 / 2 + 1 ).

4 – (3.5 Edition) Weapon Style Rebalance

Check it's thread for description.
Post edited by Reddbane on
KamigoroshiCrevsDaakPurudayaRAM021Ludwig_II
«1

Comments

  • The user and all related content has been deleted.
  • ReddbaneReddbane Member Posts: 222
    edited March 2017
    @subtledoctor
    Have you ever looked at the coding for Icewind Dale 2? So far its has never been enhanced, but Black Isle did modify the old engine to run D&D 3.0 (BAB included). It's a shame 3.5 hadn't come out yet, though, as the game can feel a little barebones with the lack of certain feats and prestige classes.

    For the most part thac0 does sort of functions like a counter-intuitive thac0. BAB is essentially 20 - thac0, with 20 thac0 being 0 BAB, and 0 thac0 being 20 BAB. The implementation of BAB was less of a major overhaul of the mechanics as making the old mechanics more intuitive to the player in ways that seem criminally simple in retrospect: BAB + d20 roll versus Armor (now ascending from 10 rather than descending from 10).

    What I mean to say is that you could possibly implement BAB in BG without changing the engine but rather making massive changes to the interface, flavor text, and tlk files.

    10 AC would still display as 10 AC, but armor bonuses that lower AC in vanilla would display as increasing the new Armor Class: 9 old AC would be 11 New AC. And a similar thing for the attack values, with 20 thac0 displaying as 0 BAB, and attack bonuses displaying as positive rather negative. Meanwhile, under the hood so to speak, the game would be processing data exactly the same as before. I don't how possible this is, but it could be a matter of cosmetic rather than engine tweaking.
  • ReddbaneReddbane Member Posts: 222
    edited March 2017
    @subtledoctor
    Also, do you happen to know if flavor text regarding class hit dice is displayed in game in any place other than the default Class descriptions? When I make the Pathfinder hit dice mod I want to make sure I don't miss any vanilla flavor text in game.
  • ReddbaneReddbane Member Posts: 222

    Hmmm...

    Sorry, nice work. Sounds cool. Just, you got my gears turning - maybe it's possible to actually make thac0 progression work the way BAB does, instead of the way thac0 does. It... just might be possible.

    You might look at Icewind Dale 2's engine, since it used 3e and BAB in the infinity engine.

    That aside, BAB is not drastically different from thac0, mechanically speaking, and functions almost the same; it merely conveys the information in a much more intuitive manner: 20 BAB + d20 roll versus AC. 20 BAB is essentially 0 thac0, and 20 thac0 is 0 BAB. It could be merely a matter of cosmetic and flavor text modding. The default 10 AC would still be 10 AC (10 is still your base AC in 3.5), but the bonuses that decrease AC would instead display as increasing AC. So that a Character that has 5 AC in-game would instead display in menu as 15 AC, and a similar display change for attack bonuses.
  • The user and all related content has been deleted.
  • kjeronkjeron Member Posts: 2,367
    What about the BAB/APR relation?
    If its to your preference:
    Switch all effects that use opcode 54(Base) to use 278(Bonus) instead, aside from things like the Assassin/Skald where you might want it to contribute to their APR progression.
    Apply a spell through every level of CLAB that uses SPLPROT to detect base THAC0 and set Base APR accordingly. As desired, use lower check values for Monks.
    Alter Creatures using Player-Classes to match.
    Zero-out WSPATCK.2da or set GETS_PROF_APR in CLSWPBON.2da to 0 for everyone.
    Set UNARMED_DIVISOR in CLSWPBON.2da to 0 for Monks.

    Use either 1/2 APR or 1 APR increments depending on preferred balance against spellcasting.
  • ReddbaneReddbane Member Posts: 222
    Part 2: Universal Constitution Bonus is finished.
    RAM021
  • QuickbladeQuickblade Member Posts: 957
    I do wish that Icewind Gate 2 had gotten out of Alpha.
    CrevsDaakGrammarsaladRAM021
  • ReddbaneReddbane Member Posts: 222
    kjeron said:

    What about the BAB/APR relation?
    If its to your preference:
    Switch all effects that use opcode 54(Base) to use 278(Bonus) instead, aside from things like the Assassin/Skald where you might want it to contribute to their APR progression.
    Apply a spell through every level of CLAB that uses SPLPROT to detect base THAC0 and set Base APR accordingly. As desired, use lower check values for Monks.
    Alter Creatures using Player-Classes to match.
    Zero-out WSPATCK.2da or set GETS_PROF_APR in CLSWPBON.2da to 0 for everyone.
    Set UNARMED_DIVISOR in CLSWPBON.2da to 0 for Monks.

    Use either 1/2 APR or 1 APR increments depending on preferred balance against spellcasting.

    It is a bit more complicated than that, as in 3.5 you got an extra attack every 5 BAB gained (regardless of class) but your next attack was made at only a + 1 Bonus (and +1 for every level after) and thus much less likely to hit, whereas each extra attack in BG is made with the same attack bonus. So a level 20 fighter gets four attacks per round (with a single weapon) the first at his full 20 BAB, the second at 15 BAB, the third at 10 BAB, and the final at 5 BAB. Such a change in BG might seriously underpower the warrior classes, since they lack the feats and other goodies from 3e that help balance them vs non-warrior classes. Due to specialization and their natural apr bonuses, the main factor separating endgame warriors from clerics is the sheer amount of attacks they can make per round that are all equally likely to hit. While a pure cleric can only really summon 1 APR (2 with the proper buffs), a full fighter, with proper specialization, can attack 4 times per round, and that is even before the use special abilities or magic buffs.

    I suppose I could make it so warriors gained their 1/2 apr every 5 levels like in 3.5, but as APR has a hard cap of 5 (barring Improved Haste and Whirlwind) this might nerf two weapon fighting in the late game.
    RAM021
  • ReddbaneReddbane Member Posts: 222
    @subtledoctor
    A quick question: I'm studying the weidu documentation and looking over the "SET_2DA_ENTRY" chapter and learning how to edit 2da through a weidu command, and I'm finding how to add a new entry to a 2da file but not so much how to read for a entry and then replace it with another entry, in 2da.
    Specifically I have to replace one line of the "hpclass.2da" file; making it so:
    "FIGHTER_MAGE_CLERIC HPFM"
    becomes:
    "FIGHTER_MAGE_CLERIC HPFMT"
    And I want to make sure the replacement is as compatible as possible with any mods that add line to the "hpclass.2da". Any tips/instructions?

    Also when I re-edit the class description text strings do I have to simply override the whole file with a new description (the same text but with the new hit dice) or can I write a weidu component that merely finds the appropriate line or phrase in the class description text string--As in, with the thief, replace "Hit Die: d6" with "Hit Die: d8"--so that the mod doesn't mess up other mods that change the text description of the affected class, like Rogue Rebalancing?

    Thanks to anyone who offers advice in advance.
  • The user and all related content has been deleted.
  • ReddbaneReddbane Member Posts: 222
    At the moment I believe there are only 5 text strings I have to replace:
    Thief, Bard, Mage, Sorcerer, Dragon Discipline (lucky for me none of the kits display hit die unless they vary from the base class)
    And the mod, for now, is only in English; so perhaps with less variables it might be less prone to meltdown.
  • The user and all related content has been deleted.
  • ReddbaneReddbane Member Posts: 222
    I suppose I need to patch the individual Class Hit Dice files rather than just overriding it with a pre-made version, in order for it not to mesh up people who use tweaks to get average or maximum hit dice.
    @subtledoctor
    Any advice so the mod doesn't conflict with CDTweaks.
    It's not just that I need to change the entire hit dice column, but in some cases I need to change the hp "MODIFIER" column as well as what level the modifier starts.
  • The user and all related content has been deleted.
  • ReddbaneReddbane Member Posts: 222


    In my experience all hit dice mods are incompatible with each other, so in that instance there's no reason not to overwrite the whole file. Just mention in the reader that the component is incompatible with other hit dice mods like the one in Tweaks Anthology, and people should just choose one.

    I suppose then I'll just include the option to to have normal hit dice or maximum, and just have two sets of hit dice 2da files. (And maybe add average hit dice).
  • The user and all related content has been deleted.
  • ReddbaneReddbane Member Posts: 222

    Max hit dice is an in-game option, I think it works regardless of which dice you have in the table. So there's no need to code that up as a mod component.

    I already made all the files, and despite there being an in game option, there is also a component of CDTweaks that makes all Class Hit Dice Maximum regardless of whether the option is set, so I'm giving players who installed that component an option that installs 2da files compatible with that mod.
  • ReddbaneReddbane Member Posts: 222
    @subtledoctor
    So I'm using you code you suggested in an earlier thread to so the string alteration, and I've edited for a Mage:

    ACTION_IF (FILE_EXISTS_IN_GAME ~clastext.2da~) BEGIN
    COPY_EXISTING ~clastext.2da~ ~override~
    COUNT_2DA_COLS cols // amount of columns
    READ_2DA_ENTRIES_NOW rows cols // read all file into memory
    FOR (row = 1; row < rows; ++row) BEGIN // iterate over rows
    READ_2DA_ENTRY_FORMER rows row 0 ~kit_name~ // read column value
    PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~MAGE~ BEGIN
    SET patch_row = %row%
    END
    END
    SET_2DA_ENTRY %patch_row% 3 cols RESOLVE_STR_REF (@20001)
    SET_2DA_ENTRY %patch_row% 4 cols RESOLVE_STR_REF (@20003)
    SET_2DA_ENTRY %patch_row% 5 cols RESOLVE_STR_REF (@20002)
    BUT_ONLY
    END
    ACTION_IF (FILE_EXISTS_IN_GAME ~sodcltxt.2da~) BEGIN
    COPY_EXISTING ~sodcltxt.2da~ ~override~
    COUNT_2DA_COLS cols // amount of columns
    READ_2DA_ENTRIES_NOW rows cols // read all file into memory
    FOR (row = 1; row < rows; ++row) BEGIN // iterate over rows
    READ_2DA_ENTRY_FORMER rows row 0 ~kit_name~ // read column value
    PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~MAGE~ BEGIN
    SET patch_row = %row%
    END
    END
    SET_2DA_ENTRY %patch_row% 3 cols RESOLVE_STR_REF (@20001)
    SET_2DA_ENTRY %patch_row% 4 cols RESOLVE_STR_REF (@20003)
    SET_2DA_ENTRY %patch_row% 5 cols RESOLVE_STR_REF (@20002)
    BUT_ONLY
    END
    ACTION_IF (FILE_EXISTS_IN_GAME ~kitlist.2da~) BEGIN
    COPY_EXISTING ~kitlist.2da~ ~override~
    COUNT_2DA_COLS cols // amount of columns
    READ_2DA_ENTRIES_NOW rows cols // read all file into memory
    FOR (row = 1; row < rows; ++row) BEGIN // iterate over rows
    READ_2DA_ENTRY_FORMER rows row 1 ~kit_name~ // read column value
    PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~MAGE~ BEGIN
    SET patch_row = %row%
    END
    END
    SET_2DA_ENTRY %patch_row% 2 cols RESOLVE_STR_REF (@20001)
    SET_2DA_ENTRY %patch_row% 3 cols RESOLVE_STR_REF (@20002)
    SET_2DA_ENTRY %patch_row% 4 cols RESOLVE_STR_REF (@20003)
    BUT_ONLY
    END

    I just want to know where I should replace the REPLACE_TEXTUALLY bit (I assume somewhere in the RESOLVE_STR_REF) and how to use REPLACE_TEXTUALLY to say replace ~Hit Die: d4~ with ~Hit Die: d6~, since when I look for instructions most of them are just posts saying: "Too complicated; don't use it."
  • The user and all related content has been deleted.
  • kjeronkjeron Member Posts: 2,367
    edited March 2017
    COPY_EXISTING ~clastext.2da~ ~override~
      COUNT_2DA_COLS cols // amount of columns
      READ_2DA_ENTRIES_NOW rows cols // read all file into memory 
      FOR (row = 1; row < rows; ++row) BEGIN // iterate over rows
        READ_2DA_ENTRY_FORMER rows row 0 ~kit_name~ // read column value
        PATCH_IF ~%kit_name%~ STRING_EQUAL_CASE ~MAGE~ BEGIN
          READ_2DA_ENTRY_FORMER rows row 4 ref // description
          GET_STRREF	ref old
          INNER_PATCH_SAVE	new ~%old%~	BEGIN
            REPLACE_TEXTUALLY ~Hit Die:.*~ ~Hit Die: d6~
          END
          INNER_ACTION	BEGIN
            STRING_SET_EVALUATE	ref ~%new%~
          END
        END
      END
    BUT_ONLY
    Edited from what you posted above, repeat for the others, making sure you read from the correct columns.
  • ReddbaneReddbane Member Posts: 222
    BG1 and Icewind Dale seem to use two separate class descriptions (whereas BG2 uses one), one for character creation and one for in game. The in game one I can scan for in clastext, but I can't seem to find where the other is listed in game files. For example in BG1 I can't find where the mage string 9563 is referenced in any game files (other that the tlk file).
  • ReddbaneReddbane Member Posts: 222
    Thanks @kjeron and @subtledoctor for the help.
    Part 3: Pathfinder Hit Dice is finished.
  • PurudayaPurudaya Member Posts: 816
    edited April 2017
    Thank you so much for this! It made sense for thieves to be less combat effective in PnP due to their utility and usefulness elsewhere, but in a game with such a heavy combat focus they really feel shortchanged. I never used to get very far with swashbuckler, assassin, or shadowdancer builds unless I did a keeper multi so they could actually hit reliably, but this changes that in a way that's much more balanced.

    Best tweak mod on here as far as I'm concerned. Looking forward to finally playing a blade without eventually wishing that I had run another combat class instead.
    Post edited by Purudaya on
  • ReddbaneReddbane Member Posts: 222
    @Purudaya
    I'd recommend Rogue Rebalancing too, as it restores a lot of Pnp abilites (what is rogue that can't dual Wield?!), just be aware that the RR Swashbuckler Kit revision (which gives a to-hit bonus every other level) sort of breaks the class if you use my thac0 revision too.
    Purudaya
  • PurudayaPurudaya Member Posts: 816
    @Reddbane I believe the newest version of RR does away with the Swashbuckler to-hit bonuses and just gives them the fighter thac0 table instead. In that case, is your mood still compatible? Which thac0 table would get applied, and would your other revisions be overridden since both mods probably override thac0.2da? Thanks!
  • ReddbaneReddbane Member Posts: 222
    edited May 2017
    Purudaya said:

    @Reddbane I believe the newest version of RR does away with the Swashbuckler to-hit bonuses and just gives them the fighter thac0 table instead. In that case, is your mood still compatible? Which thac0 table would get applied, and would your other revisions be overridden since both mods probably override thac0.2da? Thanks!

    RR uses an innate to-hit bonuses to make the Swashbuckler have an effective thac0 equal to a fighter of the same level (thus 1 to-hit melee bonus every even level until up to level 20), as kits can only use the thac0 table of their base class, regardless of modding. Thus by level 20 a RR Swas has a 10 to-hit melee bonus. When combined with my thac0 tables it will mean a level 21 Swash has a base thac0 of -5 when using melee weapons (though still 5 when using missile). This is probably does not best represent the Kit as it existed in BG2 or PNP, so I would advise sticking with vanilla Swash if you use the 3.5 thac0 (the other components of RR work fine though). For Comparison the vanilla swash (with my thac0) at level 21 has a effective base thac0 of 1 (4 to hit bonus from the kit, and a capped class thac0 of 5, plus 4 damage per hit.)

    So if you plan on using the Swashbuckler in your next run, don't use the Thief Kit Revision component, but if you plan on using an Assassin or Bounty Hunter, you can install the Thief Kit Revision component and it won't unbalance your play-through.
    Purudaya
  • PurudayaPurudaya Member Posts: 816
    Ah, got it - thanks for the clarification.
  • PracticalKatPracticalKat Member Posts: 7
    edited July 2017
    I'm still playing on the original version of BG1. The EE versions use the BG2 engine, but can I use this mod without major overhaul?
    Tentative Answer: Probably not as modpacks like SCS work on BG2 and the EEs, but not on BG1 (unless it has been converted to work in the BG2 interface etc)
    Post edited by PracticalKat on
  • ReddbaneReddbane Member Posts: 222
    As far as I know, it is EE only, since I modded the EE fies.
Sign In or Register to comment.