PRC8_fork/nwn/nwnprc/trunk/spells/sp_heart_ripr.nss

90 lines
3.1 KiB
Plaintext
Raw Permalink Normal View History

//::///////////////////////////////////////////////
//:: Name Heart Ripper
//:: FileName sp_heart_ripr
//:://////////////////////////////////////////////
/**@file Heart Ripper
Necromancy [Death]
Level: Assassin 4
Components: V, S
Casting Time: 1 standard action
Range: Close (25 ft. + 5 ft./2 levels)
Target: One living creature
Duration: Instantaneous
Saving Throw: Fortitude negates
Spell Resistance: Yes
Invisible bolts of force instantly slay
the target you designate by driving its
heart from its body unless it succeeds
on a Fortitude save. If the target has
HD higher than your caster level, it
does not die on a failed saving throw,
but instead is stunned for 1d4 rounds.
Creatures that don<6F>t depend on their
hearts for survival, creatures with no
anatomy, and creatures immune to
extra damage from critical hits are
unaffected by the spell.
Author: Tenjac
Created: 6/28/07
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = PRCGetCasterLevel(oPC);
int nType = MyPRCGetRacialType(oTarget);
if(nType == RACIAL_TYPE_UNDEAD ||
nType == RACIAL_TYPE_ELEMENTAL ||
nType == RACIAL_TYPE_CONSTRUCT ||
GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
{
SendMessageToPC(oPC, "Target creature is immune to the effects of this spell.");
PRCSetSchool();
return;
}
//SR check
if(!PRCDoResistSpell(oPC, oTarget, (nCasterLvl + SPGetPenetr())))
{
//Save
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oPC), SAVING_THROW_TYPE_DEATH))
{
//Check HD
int nHD = GetHitDice(oTarget);
if(nHD > nCasterLvl)
{
int nStun = d4(1);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(nStun), TRUE, SPELL_HEART_RIPPER, nCasterLvl);
}
else
{
//Kill it. Chunkaliciously.
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_RED_MEDIUM), oTarget);
effect eDeath = EffectDeath();
SupernaturalEffect(eDeath);
DeathlessFrenzyCheck(oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
}
}
}
PRCSetSchool();
}