Spells are the raw spells and monster abilities. Feats are covered under Feats.
spells.2da Bugs
Some notes on spells.2da bugs to check:
- What spells can be cast on items (for crafting purposes)
- Some things miss Innate column which is needed for in-engine purposes
- Some things need the VS checking for them
Also need to update iprp_spells.2da to properly reflect the cost of level X spells with Y caster level.
General Spell Changes
Standardised scripting functions (eg Metamagic, saving throws, immunities, spell save DC, caster level etc.)
Delayed effects should be applied with IgnoreEffectImmunity after a proper immunity check, not relying on the built in immunity checks, to stop item swapping or the like changing the outcomes (Wail of Banshee and other spells with DelayCommand usage for instance).
Description Changes
Might be worth noting:
- Some expanded descriptions for more complicated spells
- Save vs. might be easier to note there "Save vs. Negative" etc. in the saving throw section
Lower priority/lots of work:
- What metamagic is allowed on a spell (For instance while containing variables, things like Fire Shield can't actually have Empower applied, although Maximise I guess might work).
- Actual area of effect sizes in meters, ranges in meters
Will add separately:
- Manual of Polymorph Forms (so you can quickly view the statistics/items/etc.) - might be able to auto generate this from the polymorph.2da + GFF / JSON reading with some nwscript.
- Also need to maybe have a way of seeing "If I polymorphed with this equipment on what would my final statistics be?"
- Manual of Summons; statistics especially if they scale at all or have feats (Augment Summoning or the like) applied
This would go along nicely with other manual things.
Spell Consolidation
Spells will be consolidated in many cases:
- Feats to cast usual normal spells (ala Harper, Blackguard, Assassin) will be purged.
- Polymorph spells (usually on Shifter forms) will be consolidated into their usual spells or monster abilities. This can easily be checked for with a "GetIsPolymorphed()" check during the script that alters values as needed (generally only for monster abilities).
- Other feat-spells we need to retain can be invoked now with SetEffectSpellId and simply applying the games script using ExecuteScript.
For Shadow Conjuration or Shades and the like:
- Still necessary to have a Shades: Fireball etc. since they need the spell school changed etc. (and subspells do need a 1:1 map onto a master spell)
- The sub-spells can either execute the right script right away, or we have a parent script use ExecuteScript for it to be done (allowing us to swap them along with some other changes - a SetTlkOverride for specific players would be needed to fully do it however)
- Alternatively you could move to having a NUI interface where the spell you're doing is altered as needed on demand:
- This makes it easier per-player
- No restrictive 8 slot limit
- HOWEVER: Spell casting / projectile VFX are not updated (so no fancy fireball VFX will occur) although possibly can do some magic in the spell script itself (fire a projectile/delay the script execution). Could just have more of an "illusion" based VFX / projectile meaning we have it even look more illusionary.
This simplifies things immensely and you don't have to deal with 3 different "Invisibility" spells and potentially bugs in different scripts.
Spell Scripts
The spell scripts will all be redone from scratch and thus renamed, which will standardise the naming across spells and abilities and allow several to be compiled into one script in many cases.
Spell scripts names:
- op_s_XXX.nss - Spell
- op_f_XXX.nss - Feat (spell script)
- op_a_XXX.nss - Ability (spell script) (monster abilities like Dragon Breath, polymorph spell abilities etc.)
- op_ip_XXX.nss - Item only spells (eg Rogues Cunning, Blackstaff On Hit)
- op_i_XXX.nss - Include file(s)
- op_rs_XXX.nss - EffectRunScript - usually only has a certain effect, spell specific ones use the spell script itself
Area of Effect Notes
For persistent / mobile Area of Effects we must use the spell scripts attached to the AOE. This is mainly since SAVING_THROW_TYPE_SPELLS isn't applied otherwise (tried to use EffectRunScript as an alternative but it misses out this bonus).
For repeated effects: OnEnter will set a 5 second timer so you don't get "tons of enter events" for a particular creature (ie a PC running back over their AOE several times with a NPC following). OnEnter still is needed since OnHeartbeat may not fire before they exit it especially on thinner ones like Blade Barrier. Sometimes this might skip one of the Heartbeats unnecessarily but it's a minor price to pay.
For any semi-permanent effects applied: It will apply an EffectRunScript just in case a PC logs out and rejoins after the AOE is gone.
Note: There are some issues when using DelayCommand in some of the final OnHeartbeat scripts (eg to delay damage/effects randomly). We could execute a delayed command to apply the damage/VFX on the parent AOE creator perhaps. Or just not use a delay at all but it gets really spammy with VFX then.
Spell AOE and Range Notes
Some notes on radius sizes. Diameter is used in some spells like Mass Heal (One or more creatures, no two of which can be more than 30 ft. apart) the rest are radius like Fireball ("20-ft.-radius spread"). NWN
Constant | Feet Diameter equivalent ("no more than XX ft. apart") | Feet Radius equivalent ("XX-ft.-radius spread") | M Radius | Description |
---|---|---|---|---|
RADIUS_SIZE_COLOSSAL | 60 | 30 | 10.0 | Largest circle. Currently set to be 10 meters (`32 feet). |
RADIUS_SIZE_GARGANTUAN | 50 | 25 | 8.33 | Gigantic circle. Currently set to be 8.33 meters (`27 feet). |
RADIUS_SIZE_HUGE | 40 | 20 | 6.67 | Huge circle. Currently set to be 6.67 meters (`22 feet). |
RADIUS_SIZE_LARGE | 30 | 15 | 5.0 | Large circle. Currently set to be 5 meters (`16 feet). |
RADIUS_SIZE_MEDIUM | 20 | 10 | 3.33 | Medium circle. Currently set to be 3.33 meters (`11 feet). |
RADIUS_SIZE_SMALL | 10 | 5 | 1.67 | Smallest circle. Currently set to 1.67 meters (`5 feet). |
Range Name in NWN | Feet equivalent | M Distance | Equivalent in Meters if directly converted (with no increase per level) | Notes |
---|---|---|---|---|
Large | 400 ft. + 40 ft./level | 40 | 121.92 | |
Medium | 100 ft. + 10 ft./level | 20 | 30.48 | |
Short | 25 ft. + 5 ft./2 levels) | 8 | 7.62 | |
Touch | n/a | 2.25 | n/a | Probably should actually be a little closer to trigger AOOs since sometimes people are too far away for the AOOs to trigger Could actually make this a slightly different spell range...and use self/personal for touch attacks so they really run up close. But it'd be likely buggier (ie getting stuck pathfinding trying to get close enough). Maybe tune this a little downwards at some stage. |
Self | 0 | 0 | n/a |
Engine Improvements
Can have a quickbar or spellbook for spells with NUI. This also would allow some functional changes for things like Shadow spells (would be good to have shadow sub spells be Long/Medium/Short/Touch/Self range and just apply a different spell script on execution or something similar? will have a think...need to make sure that spells applied like this get properly removed later (eg by loops of spells)). You could also do some kind of more functional warlock who still has to do concentration checks etc.
Spell targeting visual improvements can be added to all new spells.
Some potential ruleset.2da things:
- Multiple classes - more spellcasting books available to people
- FIX_EFFECTDAMAGEINCREASE_BYPASSING_DR_AND_DI can be added to stop weird times DR and DI is broken by EffectDamageIncrease lowering that effects power
- MOVEMENT_SPEED_BONUS_DEFAULT_CAP increased to 3.0f to match Monks
- TURN_RESISTANCE_AFFECTS_PCS helps some polymorph spells with Undead forms/shifter polymorphs
- COUNTERSPELL_GREATER_DISPEL_THRESHOLD increased from 5 to 6 to make it more viable for mid-game counterspelling
Not considering for now:
- Haste can be made much more 3.5E like with no additional spellcasting time - this may help balance out casters a chunk! (HASTED_SPELL_CONJURE_TIME_MODIFIER)
See Overhaul Gameplay for details on these and more.
Effect Improvements
Some engine fixes:
- EffectDamage now correctly uses the damage power property - can bypass DR properly yay!
- Can now combine effects in EffectDamageResistance (excepting the last custom one) which allows more interesting damage resistance effects. Possibly better ones then the ones used in the current Endure Elements line of spells.
Some new engine additions:
- UnyieldingEffect - Stops things being removed by Death even. Could apply to curses and other long term effects.
- IgnoreEffectImmunity - Can be used to better apply certain effects to "immune" targets expanding the use of things, for instance a feat that applys a non-magical "stun" can apply that stun when the enemy is "immune to magical stuns". Can bypass magical immunities for non-magical purposes.
- EffectDamage and related 2das support new damage types, which is awesome. Proper "Poison" and "Psychic" damage types.
New effects:
- EffectIcon/HideEffectIcon - can replicate custom diseases, poisons and do "combined" effects like fatigue more easily.
- EffectRunScript - a much simpler less DelayCommand dependant self contained way to do complex multi-round effects, from Acid Arrow up to having special effects on the removal of a spell
- TagEffect, GetEffectInteger etc allow much more complex iteration over effects for the purposes of data driven scripts
Some changes we want to do with the above:
- Add additional effect icons, damage types, and so forth for modders and new spells/abilities
- Change over some spells to new effects
General Balance Changes
Some fixes/balance changes:
- Epic Spells are technically "just feats" - they really should not be usable when polymorphed though since they're "really" spells
- Need to think about ways to balance Etherealness (or fix it...)
- Selective 3.5E patching, eg Heal/Harm damage caps
- EffectParalyze could do with have a per-round save to resist and remove. This will boost the power of other save-or-suck (or save-or-get-stuck) spells. Will need to be implemented in the effect script probably.
Changed Spells
New Spells
There are many D&D and new made up spells that could be added. Some would be beneficial to add to add some variety for spellcasters who are limited in elemental damage types or otherwise. Some may be beneficial for Neverwinter Nights as a typical videogame.
Some themes for what to add:
- Make Evocation spells more varied - at least in damage types
- Add additional spells to schools with limited spell selections. There are plenty of source spells for this.
- Add some more useful video-gamey spells that are not standard DnD - Spell Triggers for instance, or Contingencies, would benefit many casters.
- Some may be sourced from NWN2 - which contains a fair chunk of new spells that can be redone in NWN1
Spells To Add
See Overhaul New Spells.
3.5E
There is a question: do you move to some 3.5 rules? There is some additional balance here (although Haste granting 2 spells per round is an intractable problem due to the item property), but also some difficulties with the clashing rules (there's no "cold iron" or whatever).
Some of the more 3.5E things:
- Haste no longer provides a bonus spell action. We could mimic this kind of with various effects which are added/removed as supernatural ones and EffectRunScript to recalculate this when a new effect is applied. Boots of haste would be replaced by ones that can cast the spell most likely.
- Spontaneous casting of Summon Natures Ally spells for Druids (Separate from Summon Creature which they'd lose access to)
- This would require a new set of cure spells to split from the normal Cleric ones. It might still work well enough though (can have just one set of scrolls still, counter lines have 2 options too).