PRC8/nwn/nwnprc/trunk/spells/sp_eyebite.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

137 lines
5.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:://////////////////////////////////////////////
//:: 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 targets 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 subjects 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);
}
}
}
}
}
}