#include "NW_I0_SPELLS"
#include "prc_inc_spells"

void main()
{

 int nEvent=GetUserDefinedEventNumber();
 ///////////////////////////////////////////////////////////
    if(nEvent==1007) // Called by Death
        {

                 //Declare major variables
                object oCaster = OBJECT_SELF;
                int nMetaMagic = PRCGetMetaMagicFeat();
                int nDamage;
                float fDelay;
                effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
                effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
                effect eDam;
                //Get the spell target location as opposed to the spell target.
                location lTarget = GetLocation(OBJECT_SELF);
                //Limit Caster level for the purposes of damage
                //Apply the fireball explosion at the location captured above.
                ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
                //Declare the spell shape, size and the location.  Capture the first target object in the shape.
                object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
                //Cycle through the targets within the spell shape until an invalid object is captured.
                while (GetIsObjectValid(oTarget))
                 {
                //Fire cast spell at event for the specified target
                SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FIREBALL));
                //Get the distance between the explosion and the target to calculate delay
                fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
                if (!PRCDoResistSpell(OBJECT_SELF, oTarget, FloatToInt(fDelay)))
                  {
                    //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
                    nDamage = PRCGetReflexAdjustedDamage(20, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_COLD);
                    //Set the damage effect
                    eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
                    if(nDamage > 0)
                       {
                        // Apply effects to the currently selected target.
                        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
                        //This visual effect is applied to the target object not the location as above.  This visual effect
                        //represents the flame that erupts on the target not on the ground.
                        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
                       }
                    }
                    //Select the next target within the spell shape.
                    oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
                 //End While
                 }
                int iMarker = d4(1);
                if (iMarker < 3)
                  {
                    CreateObject(OBJECT_TYPE_PLACEABLE, "flamelarge001", lTarget, FALSE);
                  }
                else
                  {
                    CreateObject(OBJECT_TYPE_PLACEABLE, "flamemedium001", lTarget, FALSE);
                  }
                //End if Gob Bomber
                }
///////////End if Death////////////////////////////////////
    }
///////////////////////////////////////////////////////////

