Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Column NameTypeExample valueDefault OptionsAny Known LimitationsNotes and Usage
LabelTextAcid_Fog
N/ANot used by the game as such, a human-readable name
NameTLK Integer750
TLK entryCan be an entry in dialog.TLK or a custom TLK, shows up in game as the spell title, and in feedback messages such as when casting unless overridden by AltMessage column. Feats being "cast" should use feat.2da names instead.
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 but 9 is likely for usual spells and 10 for anything else.

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 item-cast, cheat-cast or feat-cast things. 10 is likely the usual maximum for the game anyway, due to how "talents" work (CR for talent functions is double spell level).

You should always at least put an innate spell level. Blanking it out is not recommended, it can highly mess up a variety of in-engine things otherwise (and yes Bioware forgot it on some abilities making them bug out in certain circumstances, mainly related to Dispel Magic).

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

Usually 1500 or 900 for normal spells

Mostly 0 or 1 or 500 for abilities although Dragons Breath uses 2000

None? (Needs testing)

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 head

hand or head

See also for pictures/info: Animations

Hands usually are spinning hands around, head means spinning hands over the head. This is where the "Hand" visual will be attached as well.

If ConjTime is blank or 0 this effectively shouldn't be used.

If an item is used the "ConjAnim" is effectively replaced as per Animations for each item type, such as reading a scroll animation for a scroll item.

Annoyingly there is no way to set any custom animations using this column.

ConjHeadVisualModel resrefvco_mehedelec01
Resref of visual effect modelHead based conjuring visual effect (attached to the head node). Resref of visual effect model. "vco" = "visual conjure"
ConjHandVisualModel resrefvco_smhanfire01
Resref of visual effect modelHand based conjuring visual effect (attached to the hand node). Resref of visual effect model. "ConjAnim" alters where hands are by default.
ConjGrndVisualModel resrefvco_lgrinevil01
Resref of visual effect model

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
Resref of visual effect modelSound 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
Resref of sound effect file

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)

If a non-player race it seems to ignore playing this.

ConjSoundFemaleSound resrefvs_chant_ench_lf
Resref of sound effect file

Sound used if the caster is Female and a base race. As above variants are included for high/low magic and each school.

If a non-player race it seems to ignore playing this.

CastAnimSet valuesarea

area

attack

out

self

touch

up

creature

See also for pictures/info: Animations

area - Hands are placed up and apart. EG: Acid Fog.

attack - Attack animation is used. Used for Arcane Archer feat-spells.

out - Hands are placed together and forwards, for cones. EG: Burning Hands

self - Hands together, touching chest. EG: Ghostly Visage.

touch - One hand is placed out and one to the side. EG: Aid

up - Hands are placed up and together. EG: Call Lightning

creature - A special animation used only for Mind Flayers - "Suck Brain" - so probably unavailable for other creatures.

Animation to use for the casting (once conjuration animation is complete). Most are obvious, and fit for instance "out" being a cone spell (Holding hands where the cone will appear). If the creature casting the spell has limited animations this may not be fully adhered to.

Annoyingly there is no way to set any custom animations using this column.

CastTimeInteger (milliseconds)1000Usually 1000, but 1700 for conesNot sure

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
Resref of visual effect modelHead 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
Resref of visual effect modelHand 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

Resref of visual effect modelGround based casting visual effect (at the casters feet?). Resref of the visual effect mode. No default Bioware spells use this.
CastSoundSound resrefsar_conefire
Resref of sound effect fileSound 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 accepted

Does this have a projectile? activates the next 5 columns. It fires a single projectile model towards the target location (if ground) or object (if a object is selected).

A projectile will fire a VFX and will affect when the ImpactScript is run, with it waiting until the impact has occurred.

Note progfx.2da can now mimic some of these as MIRV style objects with EffectVisualEffect.

ProjModelModel resrefvpr_ectoacid01
Resref of visual effect model

Projectile visual effect (See ProjSpwnPoint for where it appears) "vpr" = visual projectile.

ProjTypeSet valueshominghoming, ballistic, highballistic, burst, accelerating, spiral, linked, bounce

homing - Example: Fireball. Straight line and homes in on a target even if moving, reasonably slow projectile.

ballistic - An arced object, again homing so will always hit. Giants Hurl Rock when polymorphed as a Giant uses this (and a lot of special cutscene/ballista style things)

highballistic - Not used by any spell by default, presumably an even higher arc.

burst - Not used by any spell by default. Needs testing. MIRVS use "BURST_UP" so similar perhaps.

accelerating - Example: Dispel Magic. Goes to the point in a straight line and homes in on the target, but accelerates so quite fast.

spiral - Example: Hellball. Does a weird spiral around the target until it hits, takes a reasonably long time even if the target stands perfectly still

linked - While some with Proj set to 0 (Lightning Bolt) probably are nonfunctional, the Trap_Arrow and others are set to this, and send a projectile (ie an arrow).

bounce - Example: Grenades. Bounces a projectile object a few times on the ground before hitting the target location/object

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

Note that progfx.2da can now mimic these - although possibly not perfectly (although there are more options - like miss options) - with the options including all of these as integer values instead of names.

ProjSpwnPointSet valueshand

hand

monster0

monster1

monster2

monster3

monster4

hand

monster0

monster1

monster2

monster3

monster4

Spawn point on the caster that the projectile leaves from. Values are: hand (used for 99% of spells), and monster0, monster1, monster2, monster3, monster4 (used for Beholder rays from eyestalks).
ProjSoundSound resrefspr_ectoacid01
Resref of sound effect fileSound of the projectile
ProjOrientationSet valuespath

path

target

path

target

Orientation of this spell's projectile while it is in flight. All standard spells use path (projectile faces the direction it is traveling), but target is another supported value (projectile faces the target).
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

SubRadSpell1

SubRadSpell2

SubRadSpell3

SubRadSpell4

SubRadSpell5

Integer spells.2da line reference

spells.2da lineThe spells on a radial, such as when Polymorph has different options available.
CategoryInteger spells.2da line reference

categories.2da entry

This is the category as checked by the Talent script system. New cateogries can be defined in category.2da, although some are hardcoded (eg potion ones which overlap the usual ones).

Is buggy if a spell level is not set in the Innate column. Frankly it's also buggy overall.

MasterInteger spells.2da line reference

spells.2da line

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


1, 2, 3 or 4

1 is for general use spells, they can be assigned as special abilities with a caster level on a creature template even if no class can cast them. Needs the "Innate" column setting (which should typically always be set!). If a spell is not set to 1 then ResistSpell always returns -1 in the ImpactScript.

2 is for Creature Powers. They appear in the toolset and can be assigned as Special Abilities. There is no caster level associated with them only uses/rest. ResistSpell fails to function properly with them.

3 is for Feats. These do not appear in the toolset, and should be linked to a feats.2da line.

4 is for item powers or "not any of the above". Use it for hidden super cool cutscene spells, ballista shooting spells with high projectile arcs, and so forth. They don't intrinsically just appear on items - they need to be linked in the iprp_ 2da files.

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.

SpontaneouslyCastBoolean10, 10 or 1 are accepted

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.

AltMessageTLK Integer53231
TLK entries only

TLK reference to replace the "CREATURE casts SPELL NAME" text. This is recommended to use on non-spell abilities. EG: Bolts use 53231 which is:

<CUSTOM0> uses bolt attack.

<CUSTOM0> is the name of the spell caster (or "Someone" if you can't detect them), so the above would become "Lich uses bolt attack." in the feedback. You can't specify the Name field so you must code a single TLK line per different ability if you want them to be different.

Minor notes:

  • The default "casts" line appears to be TLK line 10482 (<CUSTOM0> <CUSTOM1> <CUSTOM2>) - CUSTOM0 is the same, but CUSTOM1 is "casts", "casting" or "uses" (might be an item) and CUSTOM2 is the spell, or "Unknown Spell" if spellcraft checks fail.
  • There are also alternatives, ie; interruption by counterspell, which is 10483 (<CUSTOM0> casts <CUSTOM1> : *spell countered by* : <CUSTOM2> casting <CUSTOM3>).
HostileSettingBoolean10, 10 or 1 are acceptedValue 0 (false) or 1 (true). Determines whether a spell is considered hostile when being cast on other creatures.
FeatIDInteger feat.2da line reference

feat.2da line referenceFead ID reference. Must be filled in for spells.2da lines attached to feats. There is a 1:1 mapping.

Counter1

Counter2

Integer spells.2da line reference

spells.2da line reference

These are 2 columns that say "This spell specifically can be used to counterspell these:". It has nothing to do with anything else.

When in counterspell mode, rather than using Dispel Magic, if either of these are known by the counterspeller they instantly and always work.

HasProjectileBoolean10, 10 or 1 are accepted

If 1 then the spell has a projectile - the spell script will not fire until the projectile has reached its target if it is 1.

If 0 it essentially ignores/disables the projectile columns (prefixed Proj)

...