Feats are used for a variety of purposes:
- Engine-coded bonuses and stat changes (eg: Skill Focus: Lore, Spell Focus, etc.)
- Active feats tied to engine things (eg: Knockdown)
- Active feats tied to spells.2da entries (eg; Wildshape)
- Non-active feats referenced in other 2da files, like more proficiency and weapon focus feats used in baseitems.2da for example.
- Non-active feats used for script checks (eg; Animal Domain Feat affecting Summon Monster spells)
Cut Feats
See Cut Feats for more information on these. There are several engine effects tied to dummied out lines.
Hardcoded Feats
There are a huge number of hardcoded feats, too many to list here. Some have some of their effects decoupled partially in ruleset.2da. It is not recommended to use these lines if replacing large portions of the feat.2da file. Instead dummy them out.
They are listed on another page.
Unhardcoded Feats
There are a number of changes in NWN:EE that allow some feats to be decoupled from the engine. The main ones are for Weapon Focus and similar feats; see baseitems.2da for more information since these now have new columns to refer to this 2da.
Adding New Feats
You can add new feats to the game but also usually need to assign it to a class, or make the feat available generally, so that players can select it at character creation or level up.
See cls_feat_xxx.2da for how feats are added to a classes level up menu. To add a usable feat for a racial type, there are methods similar to how the Horse Menu is added.
Seamless Granting of Multiple Feats at Once
If you want to give players feats (through cls_feat_*.2da or other means), but want the experience to remain seamless, you can change the tlk entry line number to read whatever you want, and this is simple. However, if you want to do it with multiple feats at a time but want it to only look like the player is getting 1 feat, you can create a successor feat, specify this feat as a successor for all the feats you want to give the player, point all these feats to the same tlk entry and icon resref as the successor feat, give the successor feat to the player (ie using cls_feat_*.2da) and the player will receive all the feats you want them to. The player won't ever know, because during level-up and on the feat list, only the successor will be listed (only seeing the successor feat during level-up is special behavior, while seeing only the successor on the character's feat list is expected by virtue of it being a successor feat).
The key ingredient here is that during level-up, the actual feat's name text is assumed to be unique, and if the text exactly matches the text of another feat being given, only 1 feat entry will show during the level-up even though all the feats are secretly being given to the play. This can promote immersion and give the module author more control over what the player sees and understands.
2da Contents
Column | Example Contents | Valid Values | Description and Notes |
---|---|---|---|
LABEL | Alertness | A text value identifying the feat associated with this row. It is not used by the game engine, but makes it easier to locate specific feats within the file. All spaces should be replaced with underscores ( _ ). | |
FEAT | 289 | Dialog.tlk number | A StringRef indicating the name of the feat, which will be displayed in the game. The games character sheet will automatically sort these. You can use Custom Tokens which are empty to alter the order nicely. |
DESCRIPTION | 290 | Dialog.tlk number | A StringRef indicating the description of the feat, which will be displayed in the game. |
ICON | ife_alertness | Texture resref name without extension, max 16 characters | The value of this field is the filename of the .TGA or .DDS file that is the icon for this feat. It is usually prefixed as ife_, for icon feat, followed by an abbreviation of the feat name. The total length of this name must be 16 characters or less. Feat icons are always square to fit in the current GUI, suggested minimum size 32x32 (but with NWN:EE better scaling 64x64 or even higher can work since they'll be scaled appropriately to fit). |
MINATTACKBONUS | 1 | **** if not requirement, or a positive integer | The minimum attack bonus a character must have to select this feat. |
MINSTR | 13 | **** if not requirement, or a positive integer | The minimum strength ability score a character must have to select this feat. |
MINDEX | 15 | **** if not requirement, or a positive integer | The minimum dexterity ability score a character must have to select this feat. |
MININT | 13 | **** if not requirement, or a positive integer | The minimum intelligence ability score a character must have to select this feat. |
MINWIS | 13 | **** if not requirement, or a positive integer | The minimum wisdom ability score a character must have to select this feat. |
MINCON | 15 | **** if not requirement, or a positive integer | The minimum constitution ability score a character must have to select this feat. |
MINCHA | 13 | **** if not requirement, or a positive integer | The minimum charisma ability score a character must have to select this feat. |
MINSPELLLVL | 2 | **** if not requirement, or a positive integer | The minimum spell level a spellcasting character must be able to cast in order to select this feat. To determine eligibility, a check is made in classes.2da, examining the "SpellGainTable" and either the "SpellKnownTable" (for bards and sorcerers) or the "PrimaryAbil" (for other classes). For instance Empower Spell requires level 2 spells to be available to the caster, thus 2 is used. |
PREREQFEAT1 | 3 | **** if not requirement, or a feat.2da entry | If this feat requires another feat to be selected before this one may be chosen, the ID number of the required feat(s) will be in these columns. If both are defined then both are required. |
PREREQFEAT2 | 4 | **** if not requirement, or a feat.2da entry | |
GAINMULTIPLE | **** | **** | Nonfunctional. Was meant to allow Extra Turning (and similar feats) to be allowed to be taken multiple times. |
EFFECTSSTACK | **** | **** | Nonfunctional. Was meant to allow Extra Turning (and similar feats) to be allowed to be taken multiple times. |
ALLCLASSESCANUSE | 1 | 1 or 0 | Value of 0 (false) or 1 (true). Determines whether all classes can use this feat or not. If 0 (not), the appropriate class feat 2da files (cls_feat_*) determine whether or not this feat is available to the character. If you mark a feat as usable by all classes but unobtainable (such as a required feat that is never granted) but you grant the feat by racialtypes.2da, and it is an active feat, it will not be available to use. Instead it should be added to every classes.2da FeatsTable entry (if you are doing active racial feats this way set the level requirement to 99 and use unique feats - not existing ones - for them). It then appears "properly" under class abilities like "Horse Menu". |
CATEGORY | 22 | **** if not a usable feat, or categories.2da entry | This determines how the AI treats this feat. It is an ID value in categories.2da. |
MAXCR | 1 | **** if not a usable feat, or a positive number. | To do with the functions around Talents. The "Level" of the feat when we are searching for feats we want to not use if the enemy is of a certain CR. Just as a reference spells.2da entries just double the spell level (so enemy is CR5, we cast level 1 or 2 spells, but not level 3 which doubles to 6). |
SPELLID | 317 | **** or a spells.2da entry | The ID number in spells.2da for the equivalent spell script to run for this feat, if it needs one. The spells.2da line must also reference this feat back in a 1:1 relationship. |
SUCCESSOR | 16 | **** if no successors, or the successor feat line. | The ID number of the feat which follows this feat. For example, the Disarm feat has the ID number of Improved Disarm in this column. The parent feat must be known if the successor is to be chosen on levelup (although it can be just granted by a class tied level up). Giving the player the successor feat on level-up (through cls_feat_*.2da or other means) will not also give the player this feat. A feat being a successor just means "if the successor feat exists in a creature or player's feat list, hide all feats that are a child of the successor, even though they still exist". If the feat is a useable feat (e.g., Barbarian Rage), then the icon of the original feat will be updated to use the icon of the successor feat when the successor is chosen (assuming the icon is different). |
CRValue | 0.3 | Float value. Recommended 0 instead of **** if it has no relevance to CR. | The weight of a feat in the CR calculations. CR is only calculated in the toolset. |
USESPERDAY | 3 | **** for unlimited uses/day -1 for hardcoded uses/day 1 - 99 for a set limit uses / day | -1 if uses per day depends on certain hardcoded conditions such as number of levels in a class (Example, stunning fist).
**** if feat can be used unlimited times per day or if feat is passive. Else it is the number of times per day this feat may be used which can be 1 - 99. 100 or more gets acted on as if it is unlimited. |
MASTERFEAT | 3 | **** or line in masterfeats.2da | This number references masterfeats.2da. The master feat is used when a feat falls into a subcategory, such as the way "improved critical (longsword)" is a subcategory of improved critical. |
TARGETSELF | **** if not usable, or 1 or 0 | Value 0 (false) or 1 (true). Determines whether this feat targets the character using the feat (so when using it, it doesn't pop up a selection for who to target). Overrides spells.2da targeting options for PCs. If this feat is linked to a spell in spells.2da, and that spell also has a master spell, and that master spell is attached to a feat, the spell attached to this feat will "target self" only if also the feat attached to the master spell has | |
OrReqFeat0 | 46 | **** if not applicable, or feat.2da entry | Similar to the PREREQFEAT columns above, this is the ID of a required feat the character needs to select this feat. These columns are different in that the character is only required to have one of the feats specified in these columns. This can be used in conjunction with the PREREQFEAT columns to specify that a character must have feat x (PREREQFEAT) and one of feats y or z (OrReqFeat). |
OrReqFeat1 | 48 | **** if not applicable, or feat.2da entry | |
OrReqFeat2 | 49 | **** if not applicable, or feat.2da entry | |
OrReqFeat3 | 50 | **** if not applicable, or feat.2da entry | |
OrReqFeat4 | 51 | **** if not applicable, or feat.2da entry | |
REQSKILL | 4 | **** if not applicable, or skills.2da entry | The ID value in skills.2da of a required skill the character must have to be able to select this feat. |
ReqSkillMinRanks | 20 | **** if not applicable, or positive integer | The minimum number of ranks the character must have of REQSKILL to be able to select this feat. Ranks are what has been assigned at levelup not the bonuses from abilities, items or other sources. If **** then the skill itself must be learnable, stopping Skill Focus: Animal Empathy for instance for those classes unable to get ranks in that skill. |
REQSKILL2 | 21 | **** if not applicable, or skills.2da entry | The ID value in skills.2da of a required skill the character must have to be able to select this feat. |
ReqSkillMinRanks2 | 30 | **** if not applicable, or positive integer | The minimum number of ranks the character must have of REQSKILL2 to be able to select this feat. Ranks are what has been assigned at levelup not the bonuses from abilities, items or other sources. If **** then the skill itself must be learnable, stopping Skill Focus: Animal Empathy for instance for those classes unable to get ranks in that skill. |
Constant | FEAT_ALERTNESS | Text | The name of the script constant used to represent this feat in scripts. It is usually a combination of FEAT_ + the value of the LABEL column. Constants are actually defined either in nwscript.nss or another script file. The constant name in this field has no bearing on any scripts, and is for reference purposes only. |
TOOLSCATEGORIES | 1 = combat feat 2 = active combat feat 3 = defensive feat 4 = magical feat 5 = class / racial feat 6 = other feat | This is a hardcoded value used by the Toolset. It sets the category of the feat when using the "filter feats by category" option in the Toolset. | |
HostileFeat | **** if not applicable (ie not usable), or 1 or 0 | Value 0 (false) or 1 (true). Determines whether the use of this feat is considered as a hostile act. | |
MinLevel | **** if not applicable or positive integer | The minimum level a character must have to be able to take this feat. Works with MinLevelClass. | |
MinLevelClass | **** if not applicable or positive integer | The ID value of the corresponding class from classes.2da the character must have MinLevel levels in. | |
MaxLevel | **** if not applicable or positive integer | The maximum character level allowed a character to be able to select this feat. | |
MinFortSave | 8 | **** if not applicable or positive integer | The minimum fortitude saving throw bonus a character must have to be able to select this feat. No way of having minimum will or reflex saves. |
PreReqEpic | 0 - No epic character required 1 - Epic character required (level 21 or higher) | Indicates if only epic characters can choose this feat. A value of 1 indicates epic-only, while 0 indicates no such requirement. | |
ReqAction | 0 - Instant feat, bypasses action queue 1 - Normal behaviour | 0 = This is an instant feat, bypassing the action queue and without animation. If linked to a spells.2da line the ImpactScript will fire immediately. 1 = Feat activation uses the action queue and plays an animation. |