#include "prc_alterations"
void main()
{


   //Declare major variables
   object oCaster = OBJECT_SELF;

   int Duration = GetAbilityModifier(ABILITY_CHARISMA)>0 ? GetAbilityModifier(ABILITY_CHARISMA):1;
   //Get the spell target location as opposed to the spell target.
    location lTarget = GetSpellTargetLocation();

    effect eSave   = EffectSavingThrowIncrease(SAVING_THROW_ALL,2);
    effect eAtk    = EffectAttackIncrease(2);
    effect eSkill  = EffectSkillIncrease(SKILL_ALL_SKILLS,2);
    effect eDamage = EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_SLASHING);
    effect eLink   = EffectLinkEffects(eSave,eAtk);
           eLink   = EffectLinkEffects(eLink,eSkill);
           eLink   = EffectLinkEffects(eLink,eDamage);

    effect eVFX    = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR);
           eLink   = EffectLinkEffects(eLink,eVFX);


       //Declare the spell shape, size and the location.  Capture the first target object in the shape.
    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE );
    //Cycle through the targets within the spell shape until an invalid object is captured.
    while (GetIsObjectValid(oTarget) && GetObjectHeard(oTarget,oCaster))
    {

        if ( GetIsFriend(oTarget)|| GetFactionEqual(oTarget))
        {
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLink,oTarget,RoundsToSeconds(Duration));
        }

        //Select the next target within the spell shape.
       oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE );
    }

}