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.

Cut Classes

There are two prestige 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.

You can also find more information in Hardcoded classes.2da lines and Cut Feats.

There is also a placeholder icon suggesting that the "Weapon Master" was originally "Kensei" - ir_kensei.png - and also you can see this with cls_pres_kensei.2da (now unused) which also has the script variable X2_AllowKensei.

Hardcoded Lines

See Hardcoded classes.2da lines. Boy are there are a lot of them.

Line Limits

You can use 0 through 254 for class lines, due to engine limitations. 255 is reserved for CLASS_TYPE_INVALID in the game engine/nwscript.

2da Columns

For more information on the NWN:EE caster spellbooks see Custom Spellbooks using classes.2da and spells.2da

Column LabelExampleValid ValuesDescription and Notes
ID (Blank)00-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.

LabelBarbarianTextThe 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 ****.
Name5213TLK referenceA StringRef indicating a string that will be displayed in the game as the name of the class ("Bard", "Barbarian") etc.)
Plural1TLK referenceA StringRef indicating a string that will be displayed in the game as the plural form of the name of the class. ("Bards", "Barbarians", etc.)
Lower4890TLK referenceA StringRef indicating a string that will be displayed in the game as the name of the class in lowercase. ("bard", "barbarian", etc.)
Description240TLK referenceA StringRef indicating a string that will be displayed in the game as the class description.
Iconir_barbarianResref: TextureA 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.
HitDie10IntegerThis determines what size of die is used to roll hit points on level-up. (4, 6, 8, 10, 12, etc.)
AttackBonusTablecls_atk_1Resref: 2da name, usually cls_atk_xxx.2daThe 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).
FeatsTablecls_feat_barbResref: 2da name, usually cls_feat_xxx.2daThe 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.
SavingThrowTablecls_savthr_barbResref: 2da name, usually cls_savthr_xxx.2daThe 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. Toolset won't start unless the file listed here exists.
SkillsTablecls_skill_barbResref: 2da name, usually cls_skill_xxx.2daThe name of the .2da file (without the extension) defining the skills available to this class, including specifying which ones are 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.
BonusFeatsTablecls_bfeat_barbResref: 2da name, usually cls_bfeat_xxx.2daThe 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.
SkillPointBase4Integer

This is number of skill points gained per level (before the intelligence modifier and before quadrupling at character level 1).

This appears to be read as a minimum of 1 although the stat associated with skill points can be blanked in racialtypes.2da by setting SkillPointModifierAbility to ****

SpellGainTablecls_spgn_bardResref: 2da name, usually cls_spgn_xxx.2daThe 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.
SpellKnownTablecls_spkn_bardResref: 2da name, usually cls_spkn_xxx.2daThe 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".
PlayerClass1

1 = Available to players

0 = Only available in the toolset to NPCs

Controls whether or not this class is available for players in the game, else if 0 it will restrict it to NPC classes in the toolset. If setting the vanilla classes to 0, they will be permanently grayed out, whereas for custom content, this setting determines if it shows up in the class list. If you want to hide the vanilla classes from showing up, you'd need to make sure this is 0 and that the Name column is set to a non-default value.

Prestige classes even if not initially available to choose from need this setting to 1.

SpellCaster01, 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.

Set to 1 for a custom class with its own spell list, as with the new NWN:EE columns below.

Str16IntegerThe value given to strength when a player uses the recommended button during character creation.
Dex15IntegerThe value given to dexterity when a player uses the recommended button during character creation.
Con14IntegerThe value given to constitution when a player uses the recommended button during character creation.
Wis10IntegerThe value given to wisdom when a player uses the recommended button during character creation.
Int10IntegerThe value given to intelligence when a player uses the recommended button during character creation.
Cha10IntegerThe value given to charisma when a player uses the recommended button during character creation.
PrimaryAbilSTRSTR, DEX, CON, WIS, INT, CHA

The primary ability of this class.

In pre-NWN:EE it was used to determine a spellcasters save DC. Spellbooks now use the SpellcastingAbil column (although it is safest to set this to the same value).

Although rarely if ever used by Bioware this applies to GetSpellSaveDC when class feats are used too (eg; a Harper casting Harper Sleep), see: Spells and Abilities.

AlignRestrict0x02

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. All the options here are:

  • 0x00 = No Restrictions
  • 0x01 = No Neutral
  • 0x02 = No Lawful
  • 0x03 = No Lawful, No Neutral
  • 0x04 = No Chaotic
  • 0x05 = No Chaotic, No Neutral
  • 0x06 = No Chaotic, No Lawful
  • 0x07 = No Chaotic, No Lawful, No Neutral
  • 0x08 = No Good
  • 0x09 = No Good, No Neutral
  • 0x0A = No Good, No Lawful
  • 0x0B = No Good, No Lawful, No Neutral
  • 0x0C = No Good, No Chaotic
  • 0x0D = No Good, No Chaotic, No Neutral
  • 0x0E = No Good, No Chaotic, No Lawful
  • 0x0F = No Good, No Chaotic, No Lawful, No Neutral
  • 0x10 = No Evil
  • 0x11 = No Evil, No Neutral
  • 0x12 = No Evil, No Lawful
  • 0x13 = No Evil, No Lawful, No Neutral
  • 0x14 = No Evil, No Chaotic
  • 0x15 = No Evil, No Chaotic, No Neutral
  • 0x16 = No Evil, No Chaotic, No Lawful
  • 0x17 = No Evil, No Chaotic, No Lawful, No Neutral
  • 0x18 = No Evil, No Good
  • 0x19 = No Evil, No Good, No Neutral
  • 0x1A = No Evil, No Good, No Lawful
  • 0x1B = No Evil, No Good, No Lawful, No Neutral
  • 0x1C = No Evil, No Good, No Chaotic
  • 0x1D = No Evil, No Good, No Chaotic, No Neutral
  • 0x1E = No Evil, No Good, No Chaotic, No Lawful
  • 0x1F = No Evil, No Good, No Chaotic, No Lawful, No Neutral
AlignRstrctType0x1

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).

InvertRestrict01, 0If 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.
ConstantCLASS_TYPE_BARBARIANTextThe NWScript symbolic constant for this class. This is for the reference of human readers and is ignored by the game engine.

EffCRLvl01

...

EffCRLvl20

1Positive Integer

Official docs: Effective level of character for purposes of encounter challenge rating calculations used by original NWN Official Campaign. Ignored if not playing original Official Campaign.

Expanded: 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.

PreReqTableCLS_PRES_SHADOWResref: cls_pres_xxx.2da file, although can be named anything.

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.

Note you have an option in these to restrict a class by variable name.

Usual classes can use most of the options in the 2da file for base classes (non-prestige) eg to limit Wizards to Elves or requiring a certain feat - so only available level 2 and up. This needs further testing however on what options work fully at character generation and level up.

MaxLevel5Integer 0 - 40The maximum level of this class that can be taken, or 0 for no limit. Usually only applies to prestige classes (although most are set to 40). Only Harper and Purple Dragon Knight in the base game are restricted. Unsure if base classes (like Cleric) could be restricted or if it is only for prestige classes.
XPPenalty11, 0Determines 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).
ArcSpellLvlMod2**** or a positive integer

This cannot be used if SpellCaster is set to 1.

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 (the latter can be fixed a bit in scripting in the base game, although not entirely).

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:

  • It is possible to combine both columns for one class, making that class expand both arcane and divine spellcasting.
  • If a character has two arcane or divine classes, the engine adds spells only to the class that has the higher level. In case of a tie, the most recently leveled class gets the spells.
DivSpellLvlMod0**** or a positive integer

This cannot be used if SpellCaster is set to 1.

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.

EpicLevel10

-1 - No limit

0 - Cannot be taken pre-epic

1+ - Amount of levels that can be taken pre-Epic

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.

Most prestige classes are set to 10.

Package0packages.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).

It is not used at chargen the list will auto select the first entry (lowest ID in packages.2da) so lining up your base classes with the first package being the top most selectable one is sensible.

StatGainTablecls_stat_palema

**** or Resref: 2da file, usually cls_stat_xxx.2da

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.) This column value is only used in singleplayer; in multiplayer, the server's classes.2da column is used (the values aren't relayed from client → server and checked by ELC).

Beamdog used cls_stat_ as the prefix so check there for info on layout.

MemorizesSpells1**** or 1, 0When set to 1 (including when SpellCaster is 1), indicates this class gains spells by memorization (e.g. clerics, wizards but not sorcerers or bards)
SpellbookRestricted1**** or 1, 0When set to 1 (including when SpellCaster is 1), indicates that the spell caster is restricted to selecting spells from a spellbook (e.g. sorcerers, wizards, but not clerics or druids who know all spells in their spellbooks)
PickDomains1**** or 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

This value is hardcoded for the vanilla classes; changing it is only relevant for new custom content/classes (NB: This might no longer be true needs further testing!)

PickSchool1**** or 1, 0When set to 1 (including when SpellCaster is 1), indicates that the spell caster can choose a spell school as part of their class and gain the benefits / penalties from it (1 more spell slot vs. one school they cannot use)
LearnScroll1**** or 1, 0When set to 1 (including when SpellCaster is 1), indicates that the spell caster can learn spells from reading scrolls (e.g. wizards). You also gain 3 + intelligence bonus spells each level (the intelligence stat is hardcoded) rather than the 2 per level as most casters.
Arcane1**** or 1, 0When set to 1, indicates that the spell caster uses arcane spells (otherwise they are divine spell casters). This primarily affects the familiar/animal companion choice and what ArcSpellLvlMod and DivSpellLvlMod affects.
ASF1**** or 1, 0When set to 1, indicates that the spell caster is subject to the effects of arcane spell failure (ie casting in armour), unaffected by Arcane setting above.
SpellcastingAbilCHA**** or STR, DEX, CON, WIS, INT, CHAAbility score used as the primary source of their magical powers, used for the level of spells they can use/learn, spell save DCs and extra spell slots and feat requirements.
SpellTableColumnBard**** or Column name in spells.2daColumn 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. Existing classes can also make use of new columns but obviously this may break imported characters.
CLMultiplier1.0**** or FloatCaster Level multiplier. Needs further testing (What does 0.5 do for instance, and what rounding is done).
MinCastingLevel1**** or IntegerMinimum level required to cast spells, primarily used for Paladin and Ranger style classes.
MinAssociateLevel6**** or Integer1 to enable associate (Familar for Arcane casters, Animal Companion for Divine casters). 255 to disable adding one (eg; Cleric). If you have something other than 1 to enable, it becomes a minimum level for the class to receive their Animal Companion and increase its level (Does not work for Familiars).
CanCastSpontaneously11, 0

Indicates that spells can be cast spontaneously. This specifically means casting spells marked as "Spontaneous" in spells.2da, not spontaneous casters like Sorcerers and Bards (who can pick any spell they know to cast).

  • No labels