PRC8/nwn/nwnprc/trunk/spells/sp_real_blind.nss

91 lines
2.4 KiB
Plaintext
Raw Normal View History

//::///////////////////////////////////////////////
//:: Name Reality Blind
//:: FileName sp_real_blind.nss
//:://////////////////////////////////////////////
/**@file Reality Blind
Illusion (Phantasm) [Evil, Mind<6E>Affecting]
Level: Sor/Wiz 3
Components: V, S, M
Casting Time: 1 action
Range: Close (25 ft. + 5 ft./2 levels)
Target: One creature
Duration: Concentration (see below)
Saving Throw: Will negates
Spell Resistance: Yes
This spell overwhelms the target with hallucinations,
causing him to be blinded and stunned if he fails
the save. The subject can attempt a new saving throw
each round to end the spell.
Even after the subject succeeds at the save or the
caster stops concentrating, the subject is plagued
with nightmares every night. The nightmares prevent
the subject from benefiting from natural healing.
These nightmares continue until the caster dies or
the subject succeeds at a Will saving throw, attempted
once per night. This nightmare effect is treated as a
curse and thus cannot be dispelled. It is subject to
remove curse, however.
Material Component: A 2-inch diameter multicolored
disk of paper or ribbon.
Author: Tenjac
Created: 6/6/06
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
void BlindLoop(object oTarget, object oPC);
#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ILLUSION);
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = PRCGetCasterLevel(oPC);
PRCSignalSpellEvent(oTarget,TRUE, SPELL_REALITY_BLIND, oPC);
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, nCasterLvl + SPGetPenetr()))
{
//Loop
BlindLoop(oTarget, oPC);
}
PRCSetSchool();
//SPEvilShift(oPC);
}
void BlindLoop(object oTarget, object oPC)
{
int nDC = PRCGetSaveDC(oTarget, oPC);
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_EVIL)) //&& Conc check successful
{
effect eBlind = EffectLinkEffects(EffectBlindness(), EffectStunned());
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBlind, oTarget, 6.0f);
//Schedule next round
DelayCommand(6.0f, BlindLoop(oTarget, oPC));
}
else
{
//Non healing code
SetLocalInt(oPC, "PRC_NoNaturalHeal", 1);
}
}