classes.2da defines the NWN class system. You can add new base and prestige classes. NWN:EE has expanded the "unhardcoded" parts of this 2da significantly.
Missing Classes
There are two presitege classes from lines 39 and 40 not implemented by Bioware for whatever reason (and were they going to be patched in or HotU content?), this is why they are dummied out and skipped for the Purple Dragon Disciple (which contains no engine specific coding). They contain special feats and even some engine-tied abilities in the case of the Shou Disciple since they act like a Monk.
Some associated feats are also left in the game again as dummied out lines. Many entries in ruleset.2da also reference these classes. However there is no artwork - ie the class icon.
Assessments of getting these back in the game and extent they're complete will come in the future. The Community Patch Project included versions of these. The notes below on hardcoded lines are where the notes are.
2da Contents
For more information on the NWN:EE caster spellbooks see Custom Spellbooks using classes.2da and spells.2da
| Column Label | Example | Valid Values | Description and Notes |
|---|---|---|---|
| ID (Blank) | 0 | 0-254 | Max Class is defined as 255 and is an unusable line. Many of the default 0-40 lines have hardcoded features and it is not recommended to reuse these. See above. |
| Label | Barbarian | Text | The name of the class (without spaces, as required by .2da files). This value is usually just for reference purposes, but can be displayed in game if the value in the Name column is ****. |
| Name | 5213 | TLK reference | A StringRef indicating a string that will be displayed in the game as the name of the class ("Bard", "Barbarian") etc.) |
| Plural | 1 | TLK reference | A StringRef indicating a string that will be displayed in the game as the plural form of the name of the class. ("Bards", "Barbarians", etc.) |
| Lower | TLK reference | A StringRef indicating a string that will be displayed in the game as the name of the class in lowercase. ("bard", "barbarian", etc.) | |
| Description | TLK reference | A StringRef indicating a string that will be displayed in the game as the class description. | |
| Icon | Resref: Texture | A ResRef specifying the icon displayed in the game for this class. By convention, these start with "ir_", followed by the class name, abbreviated if necessary to fit the ResRef limit of 16 characters. | |
| HitDie | 10 | Integer | This determines what size of die is used to roll hit points on level-up. (4, 6, 8, 10, 12, etc.) |
| AttackBonusTable | cls_atk_1 | Resref: 2da name | The name of the .2da file (without the extension) to be consulted for the base attack bonus progression of this class. The format of this .2da must match that of the cls_atk_*.2da files. The standard values for this column are cls_atk_1 (full progression), cls_atk_2 (3/4 progression), and cls_atk_3 (1/2 progression). |
| FeatsTable | Resref: 2da name | The name of the .2da file (without the extension) defining the class feats. The format of this .2da must match that of the cls_feat_*.2da files. The standard values for this column are "CLS_FEAT_" followed by the class name, possibly abbreviated. | |
| SavingThrowTable | Resref: 2da name | The name of the .2da file (without the extension) defining the saving throw progression of this class at pre-epic levels. The format of this .2da must match that of the cls_savthr_*.2da files. The standard values for this column are "CLS_SAVTHR_" followed by a base class name (or "CONS" or "WILD"), possibly abbreviated. | |
| SkillsTable | Resref: 2da name | The name of the .2da file (without the extension) defining the skills available to this class, including specifying which ones are cross-class skills. The format of this .2da must match that of the cls_skill_*.2da files. The standard values for this column are "CLS_SKILL_" followed by the class name, possibly abbreviated. | |
| BonusFeatsTable | Resref: 2da name | The name of the .2da file (without the extension) defining the class levels at which this class receives bonus feats. The format of this .2da must match that of the cls_bfeat_*.2da files. The standard values for this column are "CLS_BFEAT_" followed by the class name, possibly abbreviated. | |
| SkillPointBase | Integer | This is number of skill points gained per level (before the intelligence modifier and before quadrupling at character level 1). | |
| SpellGainTable | Resref: 2da name | The name of the .2da file (without the extension) defining how many spell slots this class has at each level. The format of this .2da must match that of the cls_spgn_*.2da files. The standard values for this column are "CLS_SPGN_" followed by the class name, possibly abbreviated. | |
| SpellKnownTable | Resref: 2da name | The name of the .2da file (without the extension) defining how many spells are known by this class at each level (for classes with a limited number of known spells, specifically bards and sorcerers). The format of this .2da must match that of the cls_spkn_*.2da files. The standard values for this column are "CLS_SPKN_BARD" and "CLS_SPKN_SORC". | |
| PlayerClass | 1 | 1, 0 | Controls whether or not this class is visible during initial character creation and leveling up. 1 = shown; 0 = not shown. |
| SpellCaster | 0 | 1, 0 | Leave as 0 for custom classes that add to existing spell casting classes. If you set to 1, this will prevent the DivSpellLvlMod and ArcSpellLvlMod from working. Possibly set to 1 for a custom class with its own spell list? |
| Str | 16 | Integer | The value given to strength when a player uses the recommended button during character creation. |
| Dex | 15 | Integer | The value given to dexterity when a player uses the recommended button during character creation. |
| Con | 14 | Integer | The value given to constitution when a player uses the recommended button during character creation. |
| Wis | 10 | Integer | The value given to wisdom when a player uses the recommended button during character creation. |
| Int | 10 | Integer | The value given to intelligence when a player uses the recommended button during character creation. |
| Cha | 10 | Integer | The value given to charisma when a player uses the recommended button during character creation. |
| PrimaryAbil | The primary ability of this class. | ||
| AlignRestrict | 0x01 = neutral (with the axis determined by the AlignRestrictType column) 0x02 = lawful 0x04 = chaotic 0x08 = good 0x10 = evil | Specifies the alignments that are not allowed to obtain levels in this class. This is a bit field with the alignments defined as follows. | |
| AlignRstrctType | law-chaos axis (0x1) good-evil axis (0x2) both (0x3) neither (0x0) | Specifies if the alignment restriction specified in the AlignRestrict column applies to the law-chaos axis (0x1), the good-evil axis (0x2), both (0x3), or neither (0x0). | |
| InvertRestrict | 0 | 1, 0 | If set to 1 (the default is 0), the alignments specified in the AlignRestrict and AlignRestrictType columns are the only alignments allowed to gain levels in this class, rather than being the alignments prohibited from gaining them. |
| Constant | The NWScript symbolic constant for this class. This is for the reference of human readers and is ignored by the game engine. | ||
EffCRLvl01 ... EffCRLvl20 | The effective character level for each of the first 20 levels in this class. The actual class level minus this number is the bonus added to the challenge rating of monsters killed when determining experience point awards if the current module was created without the expansion packs installed. Levels past 20 presumably count as 1 per class level, since they all get to 20 in the column EffCRLvl20. | ||
| PreReqTable | Resref: 2da file | The name of the .2da file (without the extension) defining the prerequisites for this class (making this class a prestige class). The format of this .2da must match that of the cls_pres_*.2da files. The standard values for this column are "CLS_PRES_" followed by the class name, possibly abbreviated. | |
| MaxLevel | Integer 0 - 40 | The maximum level of this class that can be taken, or 0 for no limit. | |
| XPPenalty | 1, 0 | Determines if this class is counted when determining if a multiclass penalty applies. 1 = counted (normal for base classes); 0 = not counted (normal for prestige classes). | |
| ArcSpellLvlMod | If positive, this specifies the number of levels in this class that together add one level to an arcane class when determining the spell slots based on class level. It does not add on any known spells and does not automatically increase caster level. That is, the number of levels in this class are divided by this number, with fractions of half or more rounded up. The result is added to an arcane class level before the spell slots for that class are determined. For example, the pale master has this set to 2. The Arcane column set to 1 determines Arcane spellcasting classes for the purposes of this column For this and DivSpellLvlMod these notes apply:
| ||
| DivSpellLvlMod | If positive, this specifies the number of levels in this class that together add one level to a divine class when determining the spell slots based on class level. That is, the number of levels in this class are divided by this number, with fractions of half or more rounded up. The result is added to a divine class level before the spell slots for that class are determined. The Arcane column set to 0 determines the Divine spellcasting classes for the purposes of this column. | ||
| EpicLevel | Integer | The number of levels of this class that can be taken pre-epic (before character level 21; c.f. prestige class). A value of -1 indicates that there is no limit. | |
| Package | packages.2da line ID | The ID of the row in packages.2da that is the default package for this class (used in scripting, specifically by the LevelUpHenchman() command). | |
| StatGainTable | Resref: 2da file | The name of the .2da file (without the extension) defining the ability and natural AC gains for this class at each level. (Currently only implemented for red dragon disciples and pale masters.) | |
| MemorizesSpells | 1, 0 | When set to 1 (including when Spellcaster is 1), indicates this class gains spells by memorization (e.g. wizards) | |
| SpellbookRestricted | 1, 0 | When set to 1 (including when Spellcaster is 1), indicates that the spell caster is restricted to selecting spells from a spellbook (e.g. wizards) | |
| PickDomains | 1, 0 | When set to 1 (including when Spellcaster is 1), indicates that the spell caster can choose clerical domains as part of their class | |
| PickSchool | 1, 0 | When set to 1 (including when Spellcaster is 1), indicates that the spell caster can choose a spell school as part of their class | |
| LearnScroll | 1, 0 | When set to 1 (including when Spellcaster is 1), indicates that the spell caster can learn spells from reading scrolls (e.g. wizards) | |
| Arcane | 1, 0 | When set to 1, indicates that the spell caster uses arcane spells (otherwise they are divine spell casters) | |
| ASF | 1, 0 | When set to 1, indicates that the spell caster is subject to the effects of arcane spell failure | |
| SpellcastingAbil | STR, DEX, CON, WIS, INT, CHA | Ability score used as the primary source of their magical powers | |
| SpellTableColumn | Column name in spells.2da | Column in the spells.2da file indicating which level the spell is. Default values are Bard, Cleric, Druid, Paladin, Ranger and Wiz_Sorc. You can add new columns, see: Custom Spellbooks using classes.2da and spells.2da | |
| CLMultiplier | Float | Caster Level multiplier | |
| MinCastingLevel | Integer | Minimum level required to cast spells | |
| MinAssociateLevel | Integer | Minimum level for the class to receive their Animal Companion and increase its level (Does not work for Familiars) | |
| CanCastSpontaneously | 1, 0 | Indicates that spells can be cast spontaneously |
Hardcoded Lines
Lines with hardcoded effects, although there may be ruleset.2da entries you cannot change what lines these are applied to. If you want to replicate these features you have to reuse the line. NWN:EE has removed some of these limitations so they are not listed here but will be in the 2da documentation further down.
NOTE: Scripts that run (eg; Turn Undead or Lay on Hands) for feats are not considered hardcoded!
0 - Barbarian
Barbarians (very likely - need to confirm) get Movement Speed Bonuses applied, which is tied to the class line not feat - the feat just is a nice UI bonus for players. Not sure how this affects NPCs.
| 307 | BARBARIAN_ENDURANCE_BONUS | 0.1f | FEAT_BARBARIAN_ENDURANCE provides this amount of % EffectMovementSpeedIncrease. So 0.1f is 10% bonus. It is probably specially hardcoded to CLASS_TYPE_BARBARIAN as well. |
Uncanny dodge II grants immunity to sneak attacks from a flanking attacker unless the attacker has at least four more combined class levels of rogue, assassin, and barbarian than the defender. (Shadowdancer and blackguard levels are not counted.) For example, a level 10 rogue would have this immunity when attacked by a level 13 rogue, but not when attacked by a level 14 rogue. This immunity does not apply when the defender is flat-footed.
Appears Barbarian Rage may have some hardcoded items; see https://nwn.fandom.com/wiki/Barbarian_rage
1 - Bard
In NWN:EE it has unhardcoded spellcasting tied to an Arcane spellbook and Charisma.
Bard Song is scripted.
Bardic Knowledge feat is tied to Bard and Harper class levels combined.
2 - Cleric
No known limitations. In NWN:EE it has unhardcoded Domains choice and spellcasting ability tied to Divine spellbook and Wisdom.
Turn Undead is scripted.
3 - Druid
No known limitations. In NWN:EE it has unhardcoded Animal Companions (the option to combine class levels for the Animal Companion level is a ruleset.2da entry) and spellcasting ability tied to Divine spellbook and Wisdom.
4 - Fighter
No known limitations.
5 - Monk
Monks get a wide array of "Monk Bonuses". These equally apply to the missing "Shou Disciple" line below. These include a different Base Attack Bonus progression, Unarmed Strike damage and ability to use "Monk abilities" in armour (just giving the feat doesn't seem to work in many cases).
The "Monk Glowing Eyes" appears to be hardcoded (although the vfx it uses could be blanked out).
Monk feats - like Ki Strike, Quivering Palm etc. may be tied to having a particular class level, or that the DC includes monk class levels, or sometimes they just fail altogether. Need to document all of these limitations (so you don't go adding Ki Strike to a monster NPC and expect it to work properly).
6 - Paladin
In NWN:EE it has unhardcoded Divine spellbook based on Wisdom.
Champion of Torm and paladin levels are added together to determine the bonus damage to Smite Evil.
Other abilities such as Lay on Hands and Turn Undead are scripted.
7 - Ranger
In NWN:EE it has unhardcoded Animal Companions (the option to combine class levels for the Animal Companion level is a ruleset.2da entry) and spellcasting ability tied to Divine spellbook and Wisdom.
Note according to nwn.fandom.com the class choosing a Favoured Enemy determines the class level associated with it.
8 - Rogue
Having a single rogue class level unlocks these two "high DC" for disarming and detecting traps.
Note that Flagging, Examining and even Recovering are still possible actions if the trap is found from some means (commonly Find Traps being altered to not disable traps, only detect them).
| 40 | MAX_NON_ROGUE_DISARM_LEVEL | 35 | The maximum DC of a trap that can be disabled by a non-Rogue class using SKILL_DISARM_TRAP. |
| 41 | MAX_NON_ROGUE_DETECT_LEVEL | 35 | The maximum DC of a trap that can be detected by a non-Rogue class using SKILL_SEARCH. |
Uncanny dodge II grants immunity to sneak attacks from a flanking attacker unless the attacker has at least four more combined class levels of rogue, assassin, and barbarian than the defender. (Shadowdancer and blackguard levels are not counted.) For example, a level 10 rogue would have this immunity when attacked by a level 13 rogue, but not when attacked by a level 14 rogue. This immunity does not apply when the defender is flat-footed.
9 - Sorcerer
In NWN:EE it has unhardcoded Familiar availability (and they stack with other Familiar compatible classes) and spellcasting ability tied to Arcane spellbook and Charisma.
10 - Wizard
In NWN:EE it has unhardcoded Familiar availability (and they stack with other Familiar compatible classes) and spellcasting ability tied to Arcane spellbook and Intelligence.
11 - 26 - NPC Classes
Aberration, Animal, Construct, Humanoid, Monstrous, Elemental, Fey, Dragon, Undead, Commoner, Beast, Giant, MagicBeast, Outsider, Shapechanger, Vermin have no special qualities at all.
27 - Shadowdancer
No known hardcoded things, go mad adding Hide in Plain Sight feat to things.
28 - Harper
Worth noting: NWN:EE now allows this class to have a proper spellbook.
Bardic Knowledge feat is tied to Bard and Harper class levels combined.
29 - Arcane Archer
No known hardcoded things.
30 - Assassin
Uncanny dodge II grants immunity to sneak attacks from a flanking attacker unless the attacker has at least four more combined class levels of rogue, assassin, and barbarian than the defender. (Shadowdancer and blackguard levels are not counted.) For example, a level 10 rogue would have this immunity when attacked by a level 13 rogue, but not when attacked by a level 14 rogue. This immunity does not apply when the defender is flat-footed.
Assassins Death Attack is tied to Assassin levels.
31 - Blackguard
Class levels of Blackguard are tied to the Feat: Smite Evil.
32 - Champion of Torm
Champion of Torm and paladin levels are added together to determine the bonus damage to Smite Evil.
Sacred Defence seems to be tied to Champion of Torm levels since there is no ruleset.2da entry.
33 - Weapon Master
Superior Weapon Focus bonus is tied to Weapon Master Levels.
Ki Damage uses/day are tied to Weapon Master.
34 - Pale Master
The start changes should be unhardcoded in NWN:EE. See cls_stat_palema.2da
Deathless Vigor is tied to Pale Master levels, and has some ruleset.2da alterations for the values:
| 342 | FEAT_DEATHLESS_VIGOR_HP_BONUS | 3 | FEAT_DEATHLESS_VIGOR amount of HP to add at levels 5, 6, 7, 8, 9 and 10 when taking CLASS_PALE_MASTER. |
| 343 | FEAT_EPIC_DEATHLESS_VIGOR_HP_BONUS | 5 | FEAT_EPIC_DEATHLESS_VIGOR amount of HP to add at levels 15, 20, 25 and 30 when taking CLASS_PALE_MASTER. |
Undead Graft may also be tied to this class line - the uses/day part that is.
35 - Shifter
No known specific hardcoded things. All abilities are scripted or not tied to the class lines.
36 - Dwarven Defender
The Defensive Stance uses and the level tied to the feat is this class line. Some of the amounts can be altered using
| 132 | DWARVEN_DEFENDER_DAMAGE_REDUCTION | 3 | FEAT_DAMAGE_REDUCTION_6 appears to be the CLASS_TYPE_DWARVEN_DEFENDER feat this applies to. It increases by 3 as levels increase, see NWN wiki |
| 345 | FEAT_DEFENSIVES_STANCE_STR_BONUS | 2 | FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE bonus to strength when used. |
| 346 | FEAT_DEFENSIVES_STANCE_CON_BONUS | 4 | FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE bonus to constitution when used. |
| 347 | FEAT_DEFENSIVES_STANCE_SAVE_BONUS | 2 | FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE bonus to saving throws when used. |
| 348 | FEAT_DEFENSIVES_STANCE_DODGE_BONUS | 4 | FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE bonus to dodge AC when used. |
37 - Dragon Disciple
The stat increases of this class should be now be unhardcoded to more or less degrees; see cls_stat_dradis.2da
38 - Ooze
NPC class not used specially (note the racial type doesn't even have a favoured enemy type!).
39 - Eye of Grummsh
Book Information: https://www.realmshelps.net/charbuild/classes/prestige/general/eyeofgruumsh.shtml
Not included in the base game - unknown why. Seems SoU era? Not sure. Basically a Barbarian prestige class for Half-Orcs only, so very narrow focus (possibly better if it was made more generic? although there are some specific bonuses for other Half-Orcs too!). Some slight Rage bonuses, and Blindsight 5 and 10 feet distances, and some other bits and bobs.
See feat.2da for info on the removed feats (which have TLK references and some in-game functionality leftover).
Class Eye of Gruumsh information for reference:
40 - Shou Disciple
Book Information: https://www.realmshelps.net/charbuild/classes/prestige/realms/shoudisciple.shtml
Basically a Monk Prestige Class that can use light weapons instead of fists. Has a variety of ruleset.2da entries for the other bonuses it has tied to feats that are dummied out. See the Monk line for further information on hardcoded aspects of this class.
See feat.2da for info on the removed feats (which have TLK references and some in-game functionality leftover).
Class Shou Disciple for reference:
Ruleset.2da references:
41 - Purple Dragon Knight
No hardcoded lines this is essentially a custom content class added in a Bioware patch, coded by the PrC by Stratovarius, and first used in the Wyvern Crown of Corymr Premium Module.