public virtual double GetDamageScalar(Mobile target, double damageBonus)
        {
            PlayerMobile pm_Caster = m_Caster as PlayerMobile;
            BaseCreature bc_Caster = m_Caster as BaseCreature;

            PlayerMobile pm_Target = target as PlayerMobile;
            BaseCreature bc_Target = target as BaseCreature;

            bool PlayerCaster = false;
            bool PlayerTarget = false;

            bool CreatureCaster = false;
            bool CreatureTarget = false;

            bool TamedCaster = false;
            bool TamedTarget = false;

            if (pm_Caster != null)
            {
                PlayerCaster = true;
            }

            if (bc_Caster != null)
            {
                CreatureCaster = true;
            }

            if (pm_Target != null)
            {
                PlayerTarget = true;
            }

            if (bc_Target != null)
            {
                CreatureTarget = true;
            }

            if (CreatureCaster)
            {
                if (bc_Caster.Controlled && bc_Caster.ControlMaster != null)
                {
                    if (bc_Caster.ControlMaster is PlayerMobile)
                    {
                        TamedCaster = true;
                    }
                }
            }

            if (CreatureTarget)
            {
                if (bc_Target.Controlled && bc_Target.ControlMaster != null)
                {
                    if (bc_Target.ControlMaster is PlayerMobile)
                    {
                        TamedTarget = true;
                    }
                }
            }

            AspectArmorProfile casterAspectArmorProfile = AspectGear.GetAspectArmorProfile(m_Caster);
            AspectArmorProfile targetAspectArmorProfile = AspectGear.GetAspectArmorProfile(target);

            double damageScalar = SpellHelper.BaseDamageScalar;

            double evalIntBonus              = (m_Caster.Skills[SkillName.EvalInt].Value / 100) * SpellHelper.BaseEvalIntDamageBonus;
            double spiritSpeakBonus          = (m_Caster.Skills[SkillName.SpiritSpeak].Value / 100) * SpellHelper.BaseSpiritSpeakDamageBonus;
            double inscriptionBonus          = (m_Caster.Skills[SkillName.Inscribe].Value / 100) * SpellHelper.BaseInscriptionDamageBonus;
            double slayerBonus               = GetSlayerDamageBonus(target);
            double spellDamageInflictedBonus = 0;
            double spellDamageReceivedBonus  = 0;

            m_Caster.CheckSkill(SkillName.SpiritSpeak, 0.0, 120.0, 1.0);

            double targetMagicResist = target.Skills[SkillName.MagicResist].Value;
            double magicResistBonus  = target.GetSpecialAbilityEntryValue(SpecialAbilityEffect.MagicResist);

            //Player vs Player
            if (m_Caster is PlayerMobile && target is PlayerMobile)
            {
                evalIntBonus     *= SpellHelper.PlayerVsPlayerSkillDamageBonusScalar;
                spiritSpeakBonus *= SpellHelper.PlayerVsPlayerSkillDamageBonusScalar;
                inscriptionBonus *= SpellHelper.PlayerVsPlayerSkillDamageBonusScalar;

                slayerBonus = 0;
                spellDamageInflictedBonus = 0;
                damageBonus = 0;

                spellDamageReceivedBonus = 0;

                magicResistBonus = 0;
            }

            damageScalar += evalIntBonus + spiritSpeakBonus + inscriptionBonus + slayerBonus + spellDamageInflictedBonus + damageBonus - spellDamageReceivedBonus;

            targetMagicResist += magicResistBonus;

            //Player Caster
            if (PlayerCaster)
            {
                //Player Target
                if (PlayerTarget)
                {
                    damageScalar *= 1.0;
                }

                //Tamed Target
                else if (TamedTarget)
                {
                    damageScalar *= 2.0;
                }

                //Creature Target
                else
                {
                    damageScalar *= 2.0;
                }
            }

            //Tamed Creature Casting
            else if (TamedCaster)
            {
                //Player Target
                if (PlayerTarget)
                {
                    damageScalar *= 1.0;
                }

                //Tamed Target
                else if (TamedTarget)
                {
                    damageScalar *= 2.0;
                }

                //Creature Target
                else
                {
                    damageScalar *= 2.0;
                }
            }

            else //Normal Creature Casting
            {
                //Player Target
                if (PlayerTarget)
                {
                    damageScalar *= 1;
                }

                //Tamed Target
                else if (TamedTarget)
                {
                    damageScalar *= 2.0;
                }

                //Creature Target
                else
                {
                    damageScalar *= 2.0;
                }
            }

            if (CreatureTarget)
            {
                bc_Target.AlterDamageScalarFrom(m_Caster, ref damageScalar);
            }

            if (CreatureCaster)
            {
                bc_Caster.AlterDamageScalarTo(target, ref damageScalar);
            }

            target.Region.SpellDamageScalar(m_Caster, target, ref damageScalar);

            //Magic Resist
            double minDamageReduction = (targetMagicResist / 100) * SpellHelper.MagicResistMinDamageReductionScalar;
            double maxDamageReduction = (targetMagicResist / 100) * SpellHelper.MagicResistMaxDamageReductionScalar;

            double magicResistScalar = 1 - (minDamageReduction + ((maxDamageReduction - minDamageReduction) * Utility.RandomDouble()));

            damageScalar *= magicResistScalar;

            if (damageScalar < 0)
            {
                damageScalar = 0;
            }

            return(damageScalar);
        }