Creating custom feats

hi is there a guide for noobs on how to create a custom feat and add it to my PC in game? thanks

You need to modify the feat.2da (define your feat) and tlk file (create a description for it, and link the line to the feat.2da line).
Then, if I remember correctly you need to define these feats in a library as constants if you want the feat to stay between module transitions. At least that’s what my comments say… it’s been a while. This is how mine looks like.

Library defining feat constants
so that the feat stays between module transitions.

Andy 06.03.2014

const int FEAT_ROE_SPIRIT_SPEAKER = 2600;
const int FEAT_ROE_FIEND_SUMMONER = 2601;
const int FEAT_ROE_GRILL_MASTERY  = 2602;
const int FEAT_ROE_NARCISISM      = 2603;
const int FEAT_ROE_HUMILITY       = 2604;
const int FEAT_ROE_DREAM_WALKER   = 2605;
const int FEAT_ROE_DESTROYER_CIV  = 2606;
const int FEAT_ROE_HOPE_GIVER     = 2607;
const int FEAT_ROE_LORE_MANIAC    = 2608;
const int FEAT_ROE_SCALE_RIPPER   = 2609;

In my case these are history feats. I think to create anything else than a history feat you might need to touch the spells.2da and things like that but I’ve never done it so… probably someone more educated will drop in soon.

edit: modify means a copy of the original file. Don’t modify the original.

thanks for the reply, it would be really helpful if someone could give me a step by step of how to do it, for example a new feat based off weapon specialization, but with more bonus damage.
thank you in advance

@andysks the comment about requiring a constant in order that the feat stick between module transitions strikes me as incorrect. When a compiler sees a constant int it immediately replaces the constant with the defined literal int (that’s it). The constant-var is only for human readability (caveat: i don’t code compilers but everything i’ve read or experienced says this.)

if feats don’t stick between module transitions it’s something else, i suspect (tho possibly related).

@cakuyan Creating a feat depends on … personal choices/desires. The basic steps are

  1. create a new entry in Feat.2da
    1a. create a new entry in Spells.2da
    1b. write an ImpactScript
    1c. point the entry in Feat.2da to the entry in Spells.2da
  2. add descriptions to a .Tlk file
  3. grant the feat to a character

Each step might involve many substeps … there’s no ‘abc’ guide that i’m aware of. Note that very simple feats such as Andy mentions (background feats, epithet feats) can be made without changes to Spells.2da – if so, no spellscript either.

here are a couple of reference links (if you choose to pursue this*)


PS. Beware of Reserved 2da ranges.

* you’d be dealing with intermediate to advanced topics:

  • editing a .Tlk file (and making it work)
  • writing a spellscript (spellscripts usually require more knowledge than normal scripts)
  • editing 2da file(s) (see “editing a .Tlk file”)


if creating a feat that does something (other than just act as a variable that can be checked, or that merely provides a description) it’s not just touching Spells.2da. It is a spell – roughly called a “spellability”. Once the feat entry is good, most of the effort is getting the ‘spell’ right

1 Like

So basically constants in nwnscript are “contstants” like in C and not actual constants like in C++? Interesting but it makes sense since nwnscript looks like a C dialect more or less.

It’s been a while, you can see the library is from 2014 and my brain probably erased the actual reason why I needed it. But now that I read the comment and think about it, I believe I meant that I, as a builder, needed to access the feats from different modules so a campaign global library was needed.

As for spells and such, I kinda cheated the system. If a feat gives +1 to wisdom for example, I just use the stock method which increases the ability score and fire it when the feat is given. Of course, this renders the character illegal for PW but my campaign is single player only so I didn’t think twice.