public Fearmonger(Classes.Antipaladin antipaladin)
 {
     Name = "Fearmonger";
     ArchetypeAbilities = new List <ArchetypeAbility>
     {
         new ArchetypeAbility
         {
             Name              = "Feed on Fear",
             Level             = 2,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.TouchOfCorruption
             }
         },
     };
     ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                 .Where(a => a.Name == "Cruelty")
                                 .Select(a => new ArchetypeAbility
     {
         Name              = "Frightening Cruelty",
         Level             = a.Level,
         ReplacedAbilities = new List <ClassAbility> {
             a
         }
     }));
 }
 public RoughRampager(Classes.Antipaladin antipaladin)
 {
     Name = "Rough Rampager";
     ArchetypeAbilities = new List <ArchetypeAbility>
     {
         new ArchetypeAbility
         {
             Name              = "Aura of Blood",
             Level             = 3,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfCowardice
             }
         },
         new ArchetypeAbility
         {
             Name              = "Aura of Putrefaction",
             Level             = 8,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfDespair
             }
         },
         new ArchetypeAbility
         {
             Name              = "Aura of Quietus",
             Level             = 14,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfSin
             }
         },
     };
 }
 public DreadVanguard(Classes.Antipaladin antipaladin)
 {
     Name = "Dread Vanguard";
     ArchetypeAbilities = new List <ArchetypeAbility>
     {
         new ArchetypeAbility
         {
             Name              = "Beacon of Evil",
             Level             = 4,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.Spells
             },
             Add    = () => antipaladin.SpellCaster = false,
             Remove = () => antipaladin.SpellCaster = true,
         },
         new ArchetypeAbility
         {
             Name              = "Dark Emisary",
             Level             = 14,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfSin
             }
         }
     };
 }
        public IronTyrant(Classes.Antipaladin antipaladin)
        {
            Name = "Iron Tyrant";
            ArchetypeAbilities = new List <ArchetypeAbility>
            {
                new ArchetypeAbility
                {
                    Name              = "Iron Fist",
                    Level             = 2,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.TouchOfCorruption
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Unstoppable",
                    Level             = 4,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.ChannelNegativeEnergy
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Fiendish Bond",
                    Level             = 5,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.FiendishBoon
                    }
                }
            };

            ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                        .Where(a => a.Name.Contains("Cruelty"))
                                        .Select(a => new ArchetypeAbility
            {
                Name              = "Bonus Feat",
                Level             = a.Level,
                ReplacedAbilities = new List <ClassAbility> {
                    a
                }
            }));
        }
 public Tyrant(Classes.Antipaladin antipaladin)
 {
     Name = "Tyrant";
     // Class Skills ?
     ArchetypeAbilities = new List <ArchetypeAbility>
     {
         new ArchetypeAbility
         {
             Name  = "Tyrant's Code",
             Level = 1,
         },
         new ArchetypeAbility
         {
             Name              = "Diabolic Boon",
             Level             = 5,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.FiendishBoon
             }
         }
     };
 }
 public SealBreaker(Classes.Antipaladin antipaladin)
 {
     Name = "Seal-Breaker";
     ArchetypeAbilities = new List <ArchetypeAbility>
     {
         new ArchetypeAbility
         {
             Name              = "Aura of the Grave",
             Level             = 3,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfCowardice
             }
         },
         new ArchetypeAbility
         {
             Name              = "Corpse Rider",
             Level             = 5,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.FiendishBoon
             }
         },
         new ArchetypeAbility
         {
             Name              = "Aura of Death",
             Level             = 8,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfDespair
             }
         },
         new ArchetypeAbility
         {
             Name              = "Aura of Rebirth",
             Level             = 11,
             ReplacedAbilities = new List <ClassAbility> {
                 antipaladin.AuraOfVengeance
             }
         },
     };
 }
        public BlightedMyrmidon(Classes.Antipaladin antipaladin)
        {
            Name = "Blighted Myrmidon";
            ArchetypeAbilities = new List <ArchetypeAbility>
            {
                new ArchetypeAbility
                {
                    Name              = "Corrupted Companion",
                    Level             = 5,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.FiendishBoon
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Feed on Decay",
                    Level             = 10,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.SmiteGood4
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Aura of Decay",
                    Level             = 11,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfVengeance
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Enervating Touch",
                    Level             = 15,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.Cruelty15
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Unnatural Champion",
                    Level             = 20,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.UnholyChampion
                    }
                }
            };

            ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                        .Where(a => a.Name.Contains("Smite") && a.Level < 10)
                                        .Select(a => new ArchetypeAbility
            {
                Name              = a.Name.Replace("Good", "Nature"),
                Level             = a.Level,
                ReplacedAbilities = new List <ClassAbility> {
                    a
                }
            }));

            ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                        .Where(a => a.Name.Contains("Smite") && a.Level >= 10 && a.Level < 17)
                                        .Select(a => new ArchetypeAbility
            {
                Name              = a.Name.Replace("Good", "Nature"),
                Level             = a.Level + 3,
                ReplacedAbilities = new List <ClassAbility>(antipaladin.ClassAbilities.Where(ability => ability.Name.Contains("Smite") && ability.Level == a.Level + 3))
            }));
        }
        public KnightOfTheSepulcher(Classes.Antipaladin antipaladin)
        {
            Name = "Knight of the Sepulcher";
            ArchetypeAbilities = new List <ArchetypeAbility>
            {
                new ArchetypeAbility
                {
                    Name              = "Touch of the Crypt",
                    Level             = 5,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.FiendishBoon
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Fortitude of the Crypt",
                    Level             = 8,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfDespair
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Cloak of the Crypt",
                    Level             = 10,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.SmiteGood4
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Will of the Crypt",
                    Level             = 11,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfVengeance
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Weapons of Sin",
                    Level             = 14,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfSin
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Crypt Lord",
                    Level             = 15,
                    ReplacedAbilities = new List <ClassAbility>(antipaladin.ClassAbilities.Where(a => a.Name.Contains("Cruelty")))
                },
                new ArchetypeAbility
                {
                    Name              = "Soul of the Crypt",
                    Level             = 17,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfDepravity
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Undying Champion",
                    Level             = 20,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.UnholyChampion
                    }
                }
            };

            ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                        .Where(a => a.Name.Contains("Smite") && a.Level >= 10 && a.Level < 17)
                                        .Select(a => new ArchetypeAbility
            {
                Name              = a.Name,
                Level             = a.Level + 3,
                ReplacedAbilities = new List <ClassAbility>(antipaladin.ClassAbilities.Where(ability => ability.Name.Contains("Smite") && ability.Level == a.Level + 3))
            }));
        }
        public Insinuator(Classes.Antipaladin antipaladin)
        {
            Name = "Insinuator";
            ArchetypeAbilities = new List <ArchetypeAbility>
            {
                new ArchetypeAbility
                {
                    Name   = "Alignment",
                    Level  = 1,
                    Add    = () => antipaladin.Alignment = "Any Evil",
                    Remove = () => antipaladin.Alignment = "Chaotic Evil"
                },
                new ArchetypeAbility
                {
                    Name  = "Code of Conduct",
                    Level = 1,
                },
                new ArchetypeAbility
                {
                    Name              = "Invocation",
                    Level             = 1,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfEvil
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Detect Balance",
                    Level             = 1,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.DetectGood
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Selfish Healing",
                    Level             = 2,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.TouchOfCorruption
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Aura of Ego",
                    Level             = 3,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfCowardice
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Stubborn Health",
                    Level             = 3,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.PlagueBrunger
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Channel Energy",
                    Level             = 4,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.ChannelNegativeEnergy
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Bonus Feat",
                    Level             = 4,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.Spells
                    },
                    Add    = () => antipaladin.SpellCaster = false,
                    Remove = () => antipaladin.SpellCaster = true,
                },
                new ArchetypeAbility
                {
                    Name  = "Bonus Feat",
                    Level = 7,
                },
                new ArchetypeAbility
                {
                    Name  = "Bonus Feat",
                    Level = 10,
                },
                new ArchetypeAbility
                {
                    Name  = "Bonus Feat",
                    Level = 13,
                },
                new ArchetypeAbility
                {
                    Name  = "Bonus Feat",
                    Level = 16,
                },
                new ArchetypeAbility
                {
                    Name  = "Bonus Feat",
                    Level = 19,
                },
                new ArchetypeAbility
                {
                    Name              = "Ambitious Bond",
                    Level             = 5,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.FiendishBoon
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Aura of Ambition",
                    Level             = 8,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfDespair
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Aura of Glory",
                    Level             = 11,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfVengeance
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Aura of Belief",
                    Level             = 14,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfSin
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Aura of Indomitability",
                    Level             = 17,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.AuraOfDepravity
                    }
                },
                new ArchetypeAbility
                {
                    Name              = "Personal Champion",
                    Level             = 20,
                    ReplacedAbilities = new List <ClassAbility> {
                        antipaladin.UnholyChampion
                    }
                },
            };

            ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                        .Where(a => a.Name.Contains("Smite"))
                                        .Select(a => new ArchetypeAbility
            {
                Name              = a.Name.Replace("Good", "Inpudence"),
                Level             = a.Level,
                ReplacedAbilities = new List <ClassAbility> {
                    a
                }
            }));
            ArchetypeAbilities.AddRange(antipaladin.ClassAbilities
                                        .Where(a => a.Name.Contains("Cruelty"))
                                        .Select(a => new ArchetypeAbility
            {
                Name              = "Greed",
                Level             = a.Level,
                ReplacedAbilities = new List <ClassAbility> {
                    a
                }
            }));
        }