PRC8/nwn/nwnprc/trunk/spells/x0_s0_bane.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

101 lines
3.5 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Bane
//:: X0_S0_Bane.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Bane
Enchantment (Compulsion) [Fear, Mind-Affecting]
Level: Clr 1
Components: V, S, DF
Casting Time: 1 standard action
Range: 50 ft.
Area: All enemies within 50 ft.
Duration: 1 min./level
Saving Throw: Will negates
Spell Resistance: Yes
Bane fills your enemies with fear and doubt. Each
affected creature takes a -1 penalty on attack
rolls and a -1 penalty on saving throws against
fear effects.
Bane counters and dispels bless.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: July 24, 2001
//:://////////////////////////////////////////////
//:: VFX Pass By: Preston W, On: June 20, 2001
//:: altered by mr_bumpkin Dec 4, 2003 for prc stuff
#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
if (!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
//Declare major variables
object oCaster = OBJECT_SELF;
location lLoc = GetLocation(oCaster);
int nCasterLvl = PRCGetCasterLevel(oCaster);
int nPenetr = nCasterLvl + SPGetPenetr();
int nMetaMagic = PRCGetMetaMagicFeat();
float fDuration = TurnsToSeconds(nCasterLvl);
float fRange = FeetToMeters(50.0);
float fDelay;
//Metamagic duration check
if(nMetaMagic & METAMAGIC_EXTEND)
fDuration *= 2; //Duration is +100%
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
//Apply Impact
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lLoc);
effect eAttack = EffectAttackDecrease(1);
effect eSave = EffectSavingThrowDecrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_FEAR);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eLink = EffectLinkEffects(eAttack, eSave);
eLink = EffectLinkEffects(eLink, eDur);
//Get the first target in the radius around the caster
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lLoc);
while(GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oCaster))
{
//Fire spell cast at event for target
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_BANE, FALSE));
if(!PRCDoResistSpell(oCaster, oTarget, nPenetr))
{
int nSpellDC = PRCGetSaveDC(oTarget, oCaster);
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC, SAVING_THROW_TYPE_MIND_SPELLS))
{
fDelay = PRCGetRandomDelay(0.4, 1.1);
if(GetHasSpellEffect(SPELL_BLESS, oTarget))
//Remove Bless spell
DelayCommand(fDelay, PRCRemoveEffectsFromSpell(oTarget, SPELL_BLESS));
else
{
//Apply penalty effect
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, SPELL_BANE, nCasterLvl));
}
//Apply VFX impact
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
//Get the next target in the specified area around the caster
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRange, lLoc);
}
PRCSetSchool();
}