public override bool Satisfies(DataElement obj)
        {
            bool result;

            List <Ability> val;
            bool           applicable = obj.GetAbilityListFromDataPath(dpath, out val);

            if (!applicable)
            {
                result = false;
            }
            else
            {
                switch (FilterType)
                {
                case AbilityListFilterType.CONTAINS:
                {
                    result = false;
                    foreach (Ability e in val)
                    {
                        if (e.ID == RefValue)
                        {
                            result = true;
                            break;
                        }
                    }
                }
                break;

                case AbilityListFilterType.CONTAINS_SIMILAR:
                {
                    result = false;
                    foreach (int ability_id in Program.database.Abilities_similar[Program.database.Abilities[RefValue].Name])
                    {
                        foreach (Ability e in val)
                        {
                            if (e.ID == ability_id)
                            {
                                result = true;
                                break;
                            }
                        }
                        if (result)
                        {
                            break;
                        }
                    }
                }
                break;

                default:
                    result = false;
                    break;
                }
            }

            return(result ^ NegateResult);
        }