Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
106 lines
4.2 KiB
Plaintext
106 lines
4.2 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Spell Curse
|
|
//:: Spell FileName XXX_S_SplCurse
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Evocation
|
|
Also known as: Israfel's Spell Curse
|
|
Level: Sor/Wiz 4
|
|
Components: V, S, M
|
|
Casting Time: 1 standard action
|
|
Range: Medium (20M)
|
|
Effect: One creature
|
|
Duration: 1 round/level
|
|
Saving Throw: Will negates; see text
|
|
Spell Resistance: Yes
|
|
Source: Various (Israfel666)
|
|
|
|
The target of this spell suffers 1d6 points of damage, plus 1 per level of
|
|
the spell cast (cantrips count as level 0 spells), to a maximum of 1d6 + 9
|
|
damage if they cast a level 9 spell, as the energy of the spell backlashes
|
|
on him/her. The spell cast works normally, though, and damage is dealt after
|
|
the spell is cast, so there is no risk of disrupting the spellcasting.
|
|
Spell-like abilities and spells cast from items do not cause damage. When
|
|
the spell is first cast, spell resistance and a will save will negate it.
|
|
Each time a spell is cast by an affected target, they must make an
|
|
additional will save which will half the damage done.
|
|
|
|
Only one spell curse of any type can affect a target at any one time. Greater
|
|
Spell Curse will override any Spell Curse on a target, they do not stack.
|
|
|
|
Note that unless the target identifies Israfel's Spell Curse (as if he meant
|
|
to counterspell it) he/she cannot know the effect of the spell until he
|
|
suffers backlash damage from spellcasting.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Applies a visual (which doesn't stack, any new one removes an old one)
|
|
for this to catch in the spell hook.
|
|
|
|
The greater version *overrides* and doesn't stack with the lesser one.
|
|
|
|
The save DC is saved onto the caster, under, of course, the last DC for
|
|
this spell (which is always saved by default).
|
|
|
|
- Will save negates it to start with (Might change and remove this)
|
|
- SR applies to negate it to start with
|
|
|
|
Then:
|
|
- Will save for half damage, from 1d6 + Spell Level cast, from 1d6, to 1d6 + 9.
|
|
|
|
Oh, and might remove the impact visual. It says they will not know about
|
|
its presence until they cast a spell (unless, of course, they identify it)
|
|
therefore, no impact visual means no way of knowing (dispite it being one
|
|
of the few without one, imagine it being cast not in combat).
|
|
|
|
No metamagic, such as Empower, yet. Might add in, might not...
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "SMP_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell hook check.
|
|
if(!SMP_SpellHookCheck(SMP_SPELL_SPELL_CURSE)) return;
|
|
|
|
// Delcare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget = GetSpellTargetObject();
|
|
int nSpellSaveDC = SMP_GetSpellSaveDC();
|
|
int nMetaMagic = SMP_GetMetaMagicFeat();
|
|
int nCasterLevel = SMP_GetCasterLevel();
|
|
|
|
// Get duration in rounds
|
|
float fDuration = SMP_GetDuration(SMP_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Declare effect to check for
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_MAGIC_PROTECTION);
|
|
|
|
// Check reaction type
|
|
if(!GetIsReactionTypeFriendly(oTarget))
|
|
{
|
|
// Signal event
|
|
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_SPELL_CURSE);
|
|
|
|
// Check spell resistance
|
|
if(!SMP_SpellResistanceCheck(oCaster, oTarget))
|
|
{
|
|
// Check will save which negates it
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC))
|
|
{
|
|
// Remove previous ones from this spell only (no overlapping casters)
|
|
// Just makes it easier. Its not fully to the rules, but oh well.
|
|
SMP_RemoveSpellEffectsFromTarget(SMP_SPELL_SPELL_CURSE, oTarget);
|
|
|
|
// Apply the visual
|
|
// - Spell hook does the rest.
|
|
SMP_ApplyDurationAndVFX(oTarget, eVis, eDur, fDuration);
|
|
}
|
|
}
|
|
}
|
|
}
|