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.
111 lines
4.1 KiB
Plaintext
111 lines
4.1 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Dirge of Discord
|
|
//:: Spell FileName XXX_S_DirgeofDis
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Enchantment (Compulsion) [Chaos, Sonic]
|
|
Level: Clr 5
|
|
Components: V, S, F
|
|
Casting Time: 1 standard action
|
|
Range: Close (8M)
|
|
Area: 6.67M-radius spread (20-ft.)
|
|
Duration: 2d4 rounds + 1 round/level
|
|
Saving Throw: Will negates
|
|
Spell Resistance: Yes
|
|
Source: Various (WotC)
|
|
|
|
This spell creates an unholy, chaotic dirge that fills the subject's head
|
|
with the screams of the dying, the wailing of the damned, and the howling
|
|
of the mad. Affected creatures suffer a -4 profane penalty to attack rolls
|
|
and Concentration checks, a -8 enhancement penalty to effective Dexterity
|
|
(with Reflex saves reduced accordingly for the spell's duration), and halved
|
|
movement due to the subject's equilibrium being thrown off by the dirge.
|
|
|
|
Focus: A tiny urn containing some ashes of a destrachan.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
As the spell says.
|
|
|
|
Note that the urn focus isn't in yet.
|
|
|
|
Wizards spellbook spell.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "SMP_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!SMP_SpellHookCheck(SMP_SPELL_DIRGE_OF_DISCORD)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();
|
|
int nCasterLevel = SMP_GetCasterLevel();
|
|
int nSpellSaveDC = SMP_GetSpellSaveDC();
|
|
int nMetaMagic = SMP_GetMetaMagicFeat();
|
|
|
|
// Duration: 2d4 + 1 round/level
|
|
float fDuration;
|
|
|
|
// Declare Effects
|
|
effect eDex = EffectAbilityDecrease(ABILITY_DEXTERITY, 8);
|
|
effect eConcentration = EffectSkillDecrease(SKILL_CONCENTRATION, 4);
|
|
effect eAttack = EffectAttackDecrease(4);
|
|
effect eSlow = EffectMovementSpeedDecrease(50);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
|
|
// Link effects
|
|
effect eLink = EffectLinkEffects(eDex, eConcentration);
|
|
eLink = EffectLinkEffects(eLink, eAttack);
|
|
eLink = EffectLinkEffects(eLink, eSlow);
|
|
eLink = EffectLinkEffects(eLink, eDur);
|
|
eLink = EffectLinkEffects(eLink, eCessate);
|
|
|
|
|
|
// Apply AOE location explosion
|
|
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_20);
|
|
SMP_ApplyLocationVFX(lTarget, eImpact);
|
|
|
|
// Get all targets in a sphere, 6.67M radius, all creatures
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 6.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
// Loop targets
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// PvP Check
|
|
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
|
|
// Make sure they are not immune to spells
|
|
!SMP_TotalSpellImmunity(oTarget))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_DIRGE_OF_DISCORD);
|
|
|
|
// Spell resistance And immunity checking.
|
|
if(!SMP_SpellResistanceCheck(oCaster, oTarget))
|
|
{
|
|
// Other immunities: Must be able to hear!
|
|
if(SMP_GetCanHear(oTarget))
|
|
{
|
|
// Roll will save to negate
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_SONIC))
|
|
{
|
|
// Roll/get duration
|
|
fDuration = SMP_GetRandomDuration(SMP_ROUNDS, 4, 2, nMetaMagic, nCasterLevel);
|
|
|
|
// Apply effects for fDuration
|
|
SMP_ApplyDuration(oTarget, eLink, fDuration);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Get Next Target
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 6.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|