#include "prc_inc_spells"
#include "prc_add_spell_dc"
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();
    effect eImpact = EffectVisualEffect(VFX_FNF_BLINDDEAF);
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lTarget);

    // Create needed effects.
    effect eDazzle = EffectLinkEffects(EffectDazzle(),
        EffectVisualEffect(VFX_IMP_STUN));
    effect eBlindness = EffectLinkEffects(EffectBlindness(), 
        EffectVisualEffect(VFX_DUR_BLIND));

       int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF);
    
    object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget);
    while(GetIsObjectValid(oTarget))
    {
        if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
        {
            PRCSignalSpellEvent(oTarget);

            // Apply impact vfx.            
            SPApplyEffectToObject(DURATION_TYPE_INSTANT, 
                EffectVisualEffect(VFX_IMP_SONIC), oTarget);

            // Creatures are dazzled whether they save or not.
            SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDazzle, oTarget, RoundsToSeconds(1),TRUE,-1,nCasterLvl);
            
            // Let the creature make a will save, if it fails it's blinded.
            if (!PRCDoResistSpell(OBJECT_SELF, oTarget) &&
                !PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget,OBJECT_SELF)))
            {
                // Determine the spell's duration, the duration can be empower,
                // maximized, or extended (since it's variable, empower/maximize
                // apply.
                int nRounds = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 2, 8);
                float fDuration = PRCGetMetaMagicDuration(RoundsToSeconds(nRounds));

                SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBlindness, oTarget, fDuration,TRUE,-1,nCasterLvl);
            }
        }
        
        oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget);
    }

    PRCSetSchool();
}