void main()
{
    //Declare major variables
    int nLevel = GetCasterLevel(OBJECT_SELF);
    int nHP, nCnt, nDuration;
    nDuration = GetCasterLevel(OBJECT_SELF);
    //Determine bonus HP
    for(nCnt; nCnt <= nLevel; nCnt++)
    {
        nHP += d6(6);
    }
    effect eAttack = EffectAttackIncrease(nLevel,20);
    effect eDamage1 = EffectDamageIncrease(10,DAMAGE_TYPE_SLASHING);
    effect eDamage2 = EffectDamageIncrease(10,DAMAGE_TYPE_BLUDGEONING);
    effect eDamage3 = EffectDamageIncrease(10,DAMAGE_TYPE_PIERCING);
    effect eDamage4 = EffectDamageIncrease(7,DAMAGE_TYPE_MAGICAL);
    effect eSTR = EffectAbilityIncrease(ABILITY_STRENGTH,12);
    effect eDEX = EffectAbilityIncrease(ABILITY_DEXTERITY,12);
    effect eCON = EffectAbilityIncrease(ABILITY_CONSTITUTION,10);
    effect eDur = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
    effect eSwing = EffectModifyAttacks(5);
    effect ePoly = EffectPolymorph(29);
    effect eHP = EffectTemporaryHitpoints(nHP);
    effect eResist1 = EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING,35,0);
    effect eResist2 = EffectDamageResistance(DAMAGE_TYPE_PIERCING,35,0);
    effect eResist3 = EffectDamageResistance(DAMAGE_TYPE_SLASHING,35,0);
    effect eResist4 = EffectDamageResistance(DAMAGE_TYPE_ACID,10,0);
    effect eResist5 = EffectDamageResistance(DAMAGE_TYPE_COLD,20,0);
    effect eResist6 = EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL,20,0);
    effect eResist7 = EffectDamageResistance(DAMAGE_TYPE_FIRE,20,0);
    effect eResist8 = EffectDamageResistance(DAMAGE_TYPE_SONIC,20,0);
    effect eResist9 = EffectDamageResistance(DAMAGE_TYPE_MAGICAL,7,0);
    effect eHaste = EffectHaste();
    effect eTrue = EffectTrueSeeing();
    effect eVis = EffectVisualEffect(VFX_IMP_EVIL_HELP);
    effect eSaves = EffectSavingThrowIncrease(0,20,SAVING_THROW_TYPE_ALL);
    effect eRegen = EffectRegenerate(12,6.0);

    effect eLink = EffectLinkEffects(eAttack, ePoly);

    eLink = EffectLinkEffects(eLink, eDamage1);
    eLink = EffectLinkEffects(eLink, eDamage2);
    eLink = EffectLinkEffects(eLink, eDamage3);
    eLink = EffectLinkEffects(eLink, eDamage4);
    eLink = EffectLinkEffects(eLink, eDur);
    eLink = EffectLinkEffects(eLink, eCON);
    eLink = EffectLinkEffects(eLink, eDEX);
    eLink = EffectLinkEffects(eLink, eSTR);
    eLink = EffectLinkEffects(eLink, eSwing);
    eLink = EffectLinkEffects(eLink, eResist1);
    eLink = EffectLinkEffects(eLink, eResist2);
    eLink = EffectLinkEffects(eLink, eResist3);
    eLink = EffectLinkEffects(eLink, eResist4);
    eLink = EffectLinkEffects(eLink, eResist5);
    eLink = EffectLinkEffects(eLink, eResist6);
    eLink = EffectLinkEffects(eLink, eResist7);
    eLink = EffectLinkEffects(eLink, eResist8);
    eLink = EffectLinkEffects(eLink, eResist9);
    eLink = EffectLinkEffects(eLink, eHaste);
    eLink = EffectLinkEffects(eLink, eDur);
    eLink = EffectLinkEffects(eLink, eTrue);
    eLink = EffectLinkEffects(eLink, eSaves);
    eLink = EffectLinkEffects(eLink, eRegen);
    eLink = EffectLinkEffects(eLink, eHP);

    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, RoundsToSeconds(nDuration*3));
}