Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
101 lines
3.5 KiB
Plaintext
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();
|
|
} |