PRC8/nwn/nwnprc/trunk/smp/phs_s_confusion.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

105 lines
4.1 KiB
Plaintext
Raw Permalink 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 Confusion
//:: Spell FileName PHS_S_Confusion
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Range: Medium (20M) Targets: Enemies in Large Area (5M)
Duration: 1 round/level. Will negats, SR applies.
This spell causes the targets to become confused, making them unable to
independently determine what they will do.
Roll on the following table at the beginning of each subjects turn each
round to see what the subject does in that round.
d% Behavior
01-10 Attack caster with melee or ranged weapons (or close with caster if
attack is not possible).
11-20 Act normally.
21-50 Do nothing but babble incoherently.
51-70 Flee away from caster at top possible speed.
71-100 Attack nearest creature (for this purpose, a familiar counts as
part of the subjects self).
A confused character who cant carry out the indicated action does nothing
but babble incoherently. Attackers are not at any special advantage when
attacking a confused character. Any confused character who is attacked
automatically attacks its attackers on its next turn, as long as it is still
confused when its turn comes. Note that a confused character will not make
attacks of opportunity against any creature that it is not already devoted
to attacking (either because of its most recent action or because it has
just been attacked).
Arcane Material Component: A set of three nut shells.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Applies confusion effect as par spell description. As you cannot choose targets
well in NwN, it only affects enemies.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell Hook Check
if(!PHS_SpellHookCheck(PHS_SPELL_CONFUSION)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
location lTarget = GetSpellTargetLocation();
object oTarget;
int nCasterLevel = PHS_GetCasterLevel();
int nSpellSaveDC = PHS_GetSpellSaveDC();
int nMetaMagic = PHS_GetMetaMagicFeat();
float fDelay;
// 1 round/level duration.
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
// Declare effects
effect eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S);
effect eConfuse = EffectConfused();
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
//Link duration VFX and confusion effects
effect eLink = EffectLinkEffects(eDur, eConfuse);
eLink = EffectLinkEffects(eLink, eCessate);
// Apply AOE at the location
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
PHS_ApplyLocationVFX(lTarget, eImpact);
// Search through target area
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget);
while(GetIsObjectValid(oTarget))
{
// Must be a hostile target (and take into account PvP!)
if(GetIsReactionTypeHostile(oTarget))
{
// Fire cast spell at event for the specified target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_CONFUSION);
// Get a random short delay
fDelay = PHS_GetRandomDelay(0.1, 0.5);
// Check spell resistance and immunity
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
{
// Make Will Save against Mind spells
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_MIND_SPELLS, oCaster, fDelay))
{
// Apply effecs
DelayCommand(fDelay, PHS_ApplyDurationAndVFX(oTarget, eVis, eLink, fDuration));
}
}
}
// Get next target in the shape
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget);
}
}