Page tree
Skip to end of metadata
Go to start of metadata

This is NWN:EE specific, where more spellcasters can now be added in classes.2da aeach with their own column in spells.2da. This is a more in depth guide that ties this all together.

Column Information

This is cribbed from classes.2da and is the relevant columns needed plus the default classes values for reference.

Column LabelValid ValuesClericPaladinDruidRangerSorcererBardWizardDescription and Notes
SpellGainTableResref: 2da nameCLS_SPGN_CLERCLS_SPGN_PALCLS_SPGN_DRUCLS_SPGN_RANGCLS_SPGN_SORCCLS_SPGN_BARDCLS_SPGN_WIZThe 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.
SpellKnownTableResref: 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".
SpellCaster1, 01111111Leave 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.
MemorizesSpells1, 01111001

When set to 1 (including when Spellcaster is 1), indicates this class gains spells by memorization (e.g. wizards, clerics)

0 means a Sorcerer or Bard who get spells at level up - see SpellKnownTable.

SpellbookRestricted1, 00000111

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

0 means all spells are unlocked to pick from.

PickDomains1, 01000000When set to 1 (including when Spellcaster is 1), indicates that the spell caster can choose clerical domains as part of their class
PickSchool1, 00000001When set to 1 (including when Spellcaster is 1), indicates that the spell caster can choose a spell school as part of their class
LearnScroll1, 00000001When set to 1 (including when Spellcaster is 1), indicates that the spell caster can learn spells from reading scrolls (e.g. wizards)
Arcane1, 00000111

When set to 1, indicates that the spell caster uses arcane spells (otherwise they are divine spell casters)

TBH we have no idea what this does.

ASF1, 00000111When set to 1, indicates that the spell caster is subject to the effects of arcane spell failure
SpellcastingAbilSTR, DEX, CON, WIS, INT, CHAWISWISWISWISCHACHAINTAbility score used as the primary source of their magical powers
SpellTableColumnColumn name in spells.2daClericPaladinDruidRangerWiz_SorcBardWiz_SorcColumn in the spells.2da file indicating which level the spell is. Default values are: Bard,  Cleric, Druid, Paladin, Ranger and Wiz_Sorc. New ones can be added as new columns.
CLMultiplierFloat1. Level multiplier
MinCastingLevelInteger1414111Minimum level required to cast spells
MinAssociateLevelInteger2552551612551Minimum level for the class to receive their Animal Companion and increase its level (Does not work for Familiars)
CanCastSpontaneously1, 01000000Indicates that spells can be cast spontaneously


You can make quite a varied caster from the above columns, but most of the time you would want to mostly mimic and existing class. Going too far astray can make the game act rather weird. Test thoroughly, including multiclassing and with prestige classes!

Some possible ideas:

  • Have a caster who knows their entire spellbook (like a Cleric) but casts spells without assigning slots (like a Sorcerer) by using SpellbookRestricted 0 and MemorizesSpells 0
  • Have a caster who only can learn from scrolls and knows no spells at levelup - see notes under LearnScroll
  • Have a divine caster (who gets an Animal Companion) who learns a selection of spells at levelup, and from scrolls, by using MemorizesSpells 1, SpellbookRestricted 1, LearnScroll 1, Arcane 0, and MinAssociateLevel 1
  • Have a non-Wizard who picks spell schools using PickSchool 1 allowing bonus spell slots and restricted spells
  • Have a limited level class (Say max level 5) with very limited spellbook that has a multipler for the caster level so they still are usable at higher levels (a 4.0 multipler would mean caster level 20 at class level 5).
  • All of the above could have customised spell lists using new columns in spells.2da

Below is an more thorough explanation of the individual columns in the 2da order.


Required for a caster - divine or arcane.

The 2da it references applies the number of spell slots (by default) the class knows at each level. For instance you could have a caster that only knows up to level 3 spells. Or even knows level 9 spells at level 1. See the examples cls_spgn_bard.2da, cls_spgn_cler.2da, cls_spgn_dru.2da, cls_spgn_pal.2da, cls_spgn_rang.2da, cls_spgn_sorc.2da and cls_spgn_wiz.2da


This is an optional column (can be blanked) that references spells known at each level up (ie; Sorcerers and Bards who know partially but also don't learn from scrolls).

  • If blanked to **** or it auto-grants all cantrips but grants no spells of any other level if LearnScroll setting is used (a weird edge case).


Required to set this to 1 of course. Activates all the other values here.



If set to 0 this means you can cast any of your learned spells (ala Sorcerer, Bard) any number of times up to your limit for that spell level.

If set to 1 this means you have to pick specific spells to go in specific slots (ala Wizard, Cleric etc.) and can change them before resting.

Neither of these have effects on what learned spells you have access too. See SpellbookRestricted below.



If set to 0 then the class knows all it's spells and doesn't need to learn any such as Divine casters.

If set to 1 then some method must be used to learn a subset of spells - LearnScroll and SpellKnownTable are the two you can use.



If set to 0 no domains are chosen/this is ignored.

If set to 1 then domains from domains.2da are used and bonus spells/bonus feats are applied.



If set to 0 then no spell school can be chosen/this is ignored.

If set to 1 then a spellschool.2da entry is chosen with 1 bonus spell slot if not Generalist per level applied, and a prohibited spell school also applied.


Required insofar as it is a boolean. Mimics a Wizard class to a degree.

If 0 this does nothing additional.

If 1 it has a dual effect;

  • You can learn new spells from scrolls
  • You get to pick a certain amount of spells each levelup regardless of your SpellKnownTable. This is 6 non-cantrips at class level 1, and 2 for any future class levelup (from any spell level known).
    • If SpellKnownTable cannot load a 2da table (such as by using filename that does not exist or a blank 2da) and you have MemorizesSpells set to 0, you cannot learn spells on levelup.


Boolean. If the features below are not used it doesn't do anything really however but note Pale Master uses ArcSpellLvlMod in the base game classes.

If 0 it allows Animal Companions (if allowed) and the bonuses from DivSpellLvlMod column work on it.

If 1 it allows Familiars (if allowed) and the bonuses from ArcSpellLvlMod column work on it (eg; Pale Master bonus slots).



If 0 then any armour may be worn while casting this classes spellbooks.

If 1 then armour applies a arcane spell check failure.


This is the caster ability that provides bonus spell slots and bonuses to GetSpellSaveDC() when called. Basic stats are allowed. If set to nothing unsure what happens - probably just no bonus spells or bonuses to save DCs.


The SpellTableColumn field allows you to have a customised spellbook just for that class. For instance if you altered the Harper to have a divine spellbook of it's own spells, it could be the existing Ranger list or could be a new one - say called Harper - with a specific set of spells available just to that class.

It is a column in spells.2da - new or existing. Just don't use Innate, that's...not a good idea (it contains 99% of the spells.2da lines!).


A float which is - presumably - used to calculate the final GetCasterLevel value (and the innately stored one for dispel magic when effects are applied) so 2.0 would mean a level 1 caster gets a GetCasterLevel of 2 instead of 1. Unknown what partial values are rounded to.


This is either 1 (first level taken) or a number later to push back spellbooks. All usual lines then start from that level. For instance Rangers have this set to 4, and start learning spells at that level. Before it skips it entirely.


This does two things; enables or disables the Animal Companion (Divine Caster) or Familiar (Arcane Caster) use on the class, and if it is enabled what level you get the Animal Companion (Familiars always are available or always disabled).

Setting Name

Divine Caster

Animal Companion

Arcane Caster


Description and Notes
Disable Associate255255This works for both
Enable Associate from level 111This works for both
Enable Animal Companion from level XEG: 6N/A

You cannot delay familiars, only enable or disable them. Any value other than 255 will mean they can get them at level 1.

Animal companions can be delayed (ala a Ranger).

Note there is also a ruleset.2da line for Animal Companions only where you can specify different classes get split up (like they are currently, Druid and Ranger being split so only highest level applies) or class levels are merged (like Familiars are - which can't be altered - so a Wizard/Sorcerer gets a higher level familiar).


Allows spontaneously cast spells. For Clerics this is the Cure Wounds and Inflict line of spells. The column that controls it in spells.2da is called Spontaneous. Of course you can just add new spells.2da line entries to have different spontaneously available spells just for your custom class so they're not also enabled for clerics.

  • No labels