#include "prc_inc_spells" void main() { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell if (!X2PreSpellCastCode()) return; PRCSetSchool(SPELL_SCHOOL_EVOCATION); // Apply a burst visual effect at the target location. location lTarget = PRCGetSpellTargetLocation(); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_WORD), lTarget); // Build effects effect eDeath = EffectDeath(); eDeath = EffectLinkEffects(eDeath, EffectVisualEffect(VFX_IMP_DEATH_L)); effect eParalyzed = EffectParalyze(); eParalyzed = EffectLinkEffects(eParalyzed, EffectVisualEffect(VFX_DUR_PARALYZED)); // Determine the spell's duration. float fDuration = PRCGetMetaMagicDuration(RoundsToSeconds(PRCGetCasterLevel())); int nCasterLevel = PRCGetCasterLevel(); object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget); while(GetIsObjectValid(oTarget)) { if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) { PRCSignalSpellEvent(oTarget); // Apply effects as follows, based on differences between caster's level // and target creature's hit dice. // up to caster level : slowed 1 round // up to caster level - 1 : 2d6 str drain for 2d4 rounds // up to caster level - 5 : paralyzed for 1d10 minutes // up to caster level - 10 : killed // effects are cumulative. int nHitDice = GetHitDice(oTarget); if (nHitDice <= nCasterLevel - 10) { DeathlessFrenzyCheck(oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget); } // No point in doing anything else if we killed the target, but even // if we apply the effect they could be immune. if (!GetIsDead(oTarget)) { if (nHitDice <= nCasterLevel - 5) { // Determine duration (base 1d10 minutes) taking metamagic into // account. int nMinutes = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 1, 10); float fDuration = PRCGetMetaMagicDuration(MinutesToSeconds(nMinutes)); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eParalyzed, oTarget, fDuration,TRUE,-1,nCasterLevel); } if (nHitDice <= nCasterLevel - 1) { // Determine duration (base 1d10 minutes) taking metamagic into // account. int nRounds = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 2, 4); float fDuration = PRCGetMetaMagicDuration(RoundsToSeconds(nRounds)); // Roll 2d6 str drain and apply it to the target, along with impact // vfx. int nStrDrain = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 2, 6); /*SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_STRENGTH, nStrDrain), oTarget, fDuration,TRUE,-1,nCasterLevel);*/ ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nStrDrain, DURATION_TYPE_TEMPORARY, TRUE, fDuration, TRUE); SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE), oTarget); } if (nHitDice <= nCasterLevel) { // Slow the target for 1 round. SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oTarget, RoundsToSeconds(1),TRUE,-1,nCasterLevel); SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SLOW), oTarget); } } } oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget); } PRCSetSchool(); }