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

A spell in NWN, in essence, is a way to fire a script in-game that applies some effects.

Spell Types

"Spells" can be a variety of types. This outlines the main differences of how each spells.2da line can be used:

Spell TypeExampleAvailabilityAttack of OpportunityConcentration ChecksCounterspellableCaster Level calculationSpell Save DC calculationNotes
Standard SpellMagic Missile

Spellbook


YesYesYes

Class level of spell caster

10 + Spell level + Casting ability modifier + spell focus feats

Learned from a spellbook by a PC, or on a creatures blueprint memorised spell list

Magic Missile (3)Cast From ItemYes (item use)NoYesItem Properties determine this10 + Innate spell level + 3Setup in item properties

Magic MissileMonster spellYesYesYes1-15 from toolset (unknown if can set higher)10 + Innate spell level + Charisma modifierSetup on the monsters blueprints
Feat SpellGreater RuinFeat assignmentNoNoNoClass level of the class using the featTo test (10 + Innate spell level + Primary modifier?)This is when a feat.2da line link to a spells.2da line using the SPELLID column
Special AbilitiesDomination Gaze

Monster ability tab

Polymorphs

NoNoNoShouldn't be usedShouldn't be usedThis can be a monster-only ability (a Gaze, Aura or other thing)
Item-only spellRod of WonderAssigned Item PropertiesYes (item use)NoNoItem Properties determine this10 + Innate spell level + 3

These are item-only as in "Use Item", "Rod of Wonder" etc.

Noted here even if very similar to usual standard spells because they can't be countered

Cheat-cast only spellGoblin Ballista FireballScripting onlyYesNoTo test!

Always minimum of 10, or (2 * Innate spell level) - 1

(so 10 for 1-5, then level 6 is 11, 7 is 13, 8 is 15 and 9 is 17).

10 + Innate spell level + 3

Referenced here since several spells are completely unobtainable except by using ActionCastSpell with the bCheat flag

This can also cast all of the above, but defaults the caster level and spell save DC to specific values as shown.

Spells.2da

The spells.2da file has all the non-script information for setting up a spell, casting animations and so forth.

There are a handful of unused columns and almost all of them are not needed for a functional "spell".

Note: This is one of the only 2da files you can add additional valid columns - specifically columns that are like "Bard, "Cleric" which list the spell level of the entry for spell books, referenced in classes.2da in NWN:EE.

Column NameTypeExample valueDefault OptionsAny Known LimitationsNotes and Usage
LabelTextAcid_Fog
N/ANot used by the game as such, a human-readable name
NameInteger750
TLK entryCan be an entry in dialog.TLK or a custom TLK, shows up in game
IconResRefTextis_AcidFog
UnknownIcon name, minus the .tga extension
SchoolTextCA, C, D, E V, I, N, T

spellschool.2da values, but really just hardcoded

G is unused would need testing. Even monster abilities have this set (usually just to Evocation, V)

To test: Having additional spell schools or this as invalid

RangeTextLP, T, S, M, Lranges.2da valuesTo test: Is the ranges.2da references hardcoded? can more be added?
VSTextVSV, S, VSOnly V (Verbal) and S (Somatic) supportedVerbal or Somatic components needed. Verbal needs the caster to be able to speak (Eg; not silenced, deafened imposes 20% failure check). Somatic requires them to be able to use their arms (eg; not being Paralyzed) and is affected by armour failure chance.
MetaMagicBitwise Hex Integer

0x38


Recognized values are:

None = 0x00

Empower (1) = 0x01

Extend (2) = 0x02

Maximize (4) = 0x04

Quicken (8) = 0x08

Silent (16) = 0x10

Still (32) = 0x20

(see also Notes and Usage)

Some of this happens entirely in engine (Still Spell, Silent Spell and Quicken Spell).

The remaining (Empower Spell, Maximize Spell, Extend Spell) are captured in the spell script

To calculate the cost of multiple allowed Meta Magic feats, add the decimal values together. For example:

0x38 = Quicken+Still+Silent

0x3F = All metamagics

TargetTypeBitwise Hex Integer

0x09


Recognized values are:

self (1) = 0x01

creature (2) = 0x02

area (4) = 0x04

items (8) = 0x08

door (16) = 0x10

placeable (32) = 0x20

trigger (64) = 0x40

(see also Notes and Usage)

This primarily affects players - monsters seem to be able to ignore it, causing some "interesting" issues.

Some standard spells also are problematically miscoded, eg; having a Self Only target type, but a range higher than Personal.

To target more than one type, add the decimal values together.

Note: ALL spells must include the decimal value for Items (8) - 0x08 - in their calculated value or else Item Crafting will not work.

ImpactScriptTextnw_s0_light
Script name limit (16 characters)

Script name minus the .nss extension that fires on the impact. Will only fire when successfully cast - ie; not interrupted by a concentration failure.

Note, Bioware naming convention reserves S0 for spell scripts, S2 for feat abilities, and S3 for creature abilities.

Bard

Cleric

Druid

Range

Wiz_Sorc

Innate

Integer

6

**** denotes the spell is unusable by that class.


Integer, 0+ - unknown maximum

The only one that is required is Innate. The defaults are 0 (cantrips) through 10 (Epic spells). However the 10 value won't show up in usual spell books so would only affect cheat-cast or feat-cast things. 10 is likely the usual maximum for the game anyway, due to how "talents" work.

You can add more columns (anywhere in the 2da, but usually at the end) to add more spellbooks. For instance you could create one headed "Assassin" and have Assassin spells, with the relevant changes in classes.2da allowing that spellbook to be used.

Note: The spell lines for Dispel Magic spells are hardcoded into the engine assuming certain spell levels (the "Innate" column) for such things like Counterspelling.

ConjTimeInteger (miliseconds)1500Usually 1500 or 900 for normal spells, 1 or more for abilitiesNone

The amount of time spent "Conjuring" the spell in milliseconds, applying the "Conj" animations, sounds, and VFX. Once this number is passed the CastTime and Proj fires if appropriate.

For spells this is the duration that can cause concentration checks. The default is 1500 but 900 is used for spells like Phantasmal Killer which has a slow "projectile".

Monster abilities vary (and don't matter as much - no concentration!) eg; gazes, bolts are 500, auras are 1, cones are 100 or 500. Dragon breath is 2000.

I think the number is halved for hasted spells (needs testing).

Using values above 2000 may cause issues from past experience. Game expects people to cast spells within 3 seconds.

ConjAnimSet valueshandhand or headhand or headHands usually are spinning hands around, head means spinning hands over the head. This is where the "Hand" visual will be attached.
ConjHeadVisualModel resrefvco_mehedelec01

Head based conjuring visual effect (attached to the head node). Resref of visual effect model. "vco" = "visual conjure"
ConjHandVisualModel resrefvco_smhanfire01

Hand based conjuring visual effect (attached to the hand node). Resref of visual effect model. "ConjAnim" alters where hands are by default.
ConjGrndVisualModel resrefvco_lgrinevil01

Ground based conjuring visual effect (at the casters feet). Resref of visual effect model.

Higher level spells tend to have this to differentiate them from lower level versions.

ConjSoundVFXSound resrefsco_mehannatr01

Sound used when conjuring. This is useful to always have because non-PC races don't get casting chants (next two lines).
ConjSoundMaleSound resrefvs_chant_ench_lm

Sound used if the caster is Male (or not-Female) and a base race. Bioware included variants for "high" and "low" magic, of each spell school.

vs_chant_XXXX_YZ - XXXX = 4 letters of school, Y = "l" (low) or "h" (high) and Z = "m" (male) or "f" (female)

ConjSoundFemaleSound resrefvs_chant_ench_lf

Sound used if the caster is Female and a base race. As above variants are included for high/low magic and each school.
CastAnimSet valuesareaarea, attack, out, self, touch, and uparea, attack, out, self, touch, and upAnimation to use for the casting. Most are obvious, and fit for instance "out" being a cone spell (Holding hands where the cone will appear).
CastTimeInteger (milliseconds)1000Usually 1000, but 1700 for cones

Milliseconds holding the CastAnim pose. Most are 1000 (1 second).

Cones benefit from more "hold out hands" time to match the spell visuals, although 1700 pushes these spells over a 3 second cast time which is odd.

CastHeadVisualModel resrefvca_dragbreath

Head based casting visual effect (attached to the head node). Resref of visual effect model. Occurs in the direction of casting. Example: Dragon Disciples Breath. "vca" = "visual cast"
CastHandVisualModel resrefvar_conefire

Hand based casting visual effect (attached to the hand node). Resref of visual effect model. Occurs in the direction of casting. Example: Cone spells. "var" = "visual area"
CastGrndVisualModel resref


Ground based casting visual effect (at the casters feet?). Resref of the visual effect mode. No default Bioware spells use this.
CastSoundSound resrefsar_conefire

Sound used when casting. This is mainly used to have the visual such as a cone match with an appropriate sound.
ProjBoolean10, 10 or 1 are acceptedDoes this have a projectile? activates the next 5 columns.
ProjModelModel resrefvpr_ectoacid01

Projectile visual effect (See ProjSpwnPoint for where it appears) "vpr" = visual projectile.
ProjTypeSet valueshoming
homing, ballistic, highballistic, burst, accelerating, spiral, linked, bounce

The projectile type. Also note this can be altered using the parameter "nProjectilePathType" in ActionCastSpell functions, although several are missing from the parameter.

ProjSpwnPoint




ProjSound




ProjOrientation




ImmunityTypeTextAcid

This is entirely unused by the game and may just be a developer-left-in notes field or a pre-nwscript way of doing immunities
ItemImmunityBoolean10, 10 or 1 are acceptedIf 1 it allows the spell to be immune on an item property
SubRadSpell1Integer spells.2da line reference


The first spell on a radial, such as when Polymorph has different options available.
SubRadSpell2Integer spells.2da line reference



SubRadSpell3Integer spells.2da line reference



SubRadSpell4Integer spells.2da line reference



SubRadSpell5Integer spells.2da line reference



CategoryInteger spells.2da line reference



MasterInteger spells.2da line reference


The master of this spell if it is a subradial spell. It should be left blank if it is not a subradial spell.

Note: This is buggy, and some spells have it set even if they're not a radial spell (copy and paste errors on Biowares part!). This causes GetHasSpell to perform incorrectly, but the game still works correctly otherwise - very frustrating!

UserTypeInteger

1 = spells

2 = creature power

3 = feats

4 = item power



Spells are always 1.

Note: Values higher than 4 are ignored.

SpellDescInteger113002
TLK entryCan be an entry in dialog.TLK or a custom TLK, shows up in game
UseConcentrationBoolean10, 10 or 1 are accepted

This stops concentration checks for this ability. Usually all monster abilities.

Note that it does not stop attacks of opportunity.

SpontaneouslyCast



If the caster has the "Can cast spontaneous spells" (usually only Clerics) this applies (usually only "Cure" and "Inflict Wounds" spells), and the spell is marked with a 1, then they can cast it and lose a different spell that is memorised of the same level.

Note: Domain spells memorised cannot be used to cast spontaneous spells.

AltMessage




HostileSetting




FeatID




Counter1

Counter2






HasProjectile




  • No labels