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

137 lines
5.8 KiB
Plaintext
Raw Permalink Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Eyebite
//:: Spell FileName PHS_S_Eyebite
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Target: One living creature Duration: 1 round per three levels; see text
Saving Throw: Fortitude negates Spell Resistance: Yes
Each round, you may target a single living creature, striking it with waves
of evil power. Depending on the target<65>s HD, this attack has as many as three
effects.
HD Effect
10 or more Sickened
5-9 Panicked, sickened
4 or less Comatose, panicked, sickened
The effects are cumulative and concurrent.
Sickened: Sudden pain and fever sweeps over the subject<63>s body. A sickened
creature takes a -2 penalty on attack rolls, weapon damage rolls, saving
throws, and skills. A creature affected by this spell remains sickened for
10 minutes per caster level. The effects cannot be negated by a remove
disease or heal spell, but a remove curse is effective.
Panicked: The subject becomes panicked for for 10 minutes per caster level.
This is a fear effect.
Comatose: The subject falls into a catatonic standing coma for 10 minutes per
caster level. During this time, it cannot be awakened by any means short of
dispelling the effect. This is not a sleep effect, and thus elves are not
immune to it.
The spell lasts for 1 round per three caster levels. You can target a new
target until this duration expires using the Class Item you have.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Should be as spell effect, BUT camatose is a special function with animations
to make them "sleep"
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//:: Converted to PRC: Stratovarius
//::////////////////////////////////////////////*/
#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
// Spell hook check.
if(!X2PreSpellCastCode()) return;
// Declare Major Variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nMetaMagic = PRCGetMetaMagicFeat();
int nCasterLvl = PRCGetCasterLevel(oCaster);
int nPenetr = nCasterLvl + SPGetPenetr();
int nDC = PRCGetSaveDC(oTarget, oCaster);
int nSpellID = PRCGetSpellId();
int nHD, bCommandable;
// Duration is 10 minutes/caster level
float fDuration = nCasterLvl * 600.0;
if (nMetaMagic & METAMAGIC_EXTEND)
{
fDuration = (fDuration * 2);
}
// Panicked: The subject becomes panicked for for 10 minutes per caster level.
// This is a fear effect.
effect ePanicked = EffectFrightened();
effect ePanickedDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
effect ePanickedLink = EffectLinkEffects(ePanicked, ePanickedDur);
// Comatose: The subject falls into a catatonic standing coma for 10 minutes per
// caster level. During this time, it cannot be awakened by any means short of
// dispelling the effect. This is not a sleep effect, and thus elves are not
// immune to it.
effect eComatosePara = EffectCutsceneParalyze();
effect eComatoseDur = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION);
effect eComatoseVis = EffectVisualEffect(VFX_IMP_SLEEP);
effect eComatoseLink = EffectLinkEffects(eComatosePara, eComatoseDur);
// Check PvP settings
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster) && PRCGetIsAliveCreature(oTarget))
{
// Signal event
PRCSignalSpellEvent(oTarget);
// Check spell resistance
if(!PRCDoResistSpell(oCaster, oTarget, nPenetr))
{
// Check fortitude save (Evil save)
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_EVIL))
{
nHD = GetHitDice(oTarget);
// If they fail, do effects based on hit dice
// We always apply the sickening effect
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, fDuration, TRUE, nSpellID, nCasterLvl);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISEASE_S), oTarget);
// Anything at 9 or under is feared
if(nHD <= 9)
{
// Apply sickening effect
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePanickedLink, oTarget, RoundsToSeconds(d4()), TRUE, nSpellID, nCasterLvl);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectShaken(), oTarget, fDuration, TRUE, nSpellID, nCasterLvl);
// Anything at 4 or under is camatosed.
if(nHD <= 4)
{
// camatosed means, basically, a
// "PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 10.0)"
// and then instantly apply effects to stay looping dead.
bCommandable = GetCommandable(oTarget);
if(!bCommandable) SetCommandable(TRUE, oTarget);
// Make them go down
AssignCommand(oTarget, ClearAllActions());
AssignCommand(oTarget, PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 10.0));
// Apply duration after 1 second
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eComatoseLink, oTarget, fDuration, TRUE, nSpellID, nCasterLvl));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eComatoseVis, oTarget);
// Reset commandable flag
SetCommandable(bCommandable, oTarget);
}
}
}
}
}
}