static void fillAzataProgression() { var base_evolutions = Helpers.CreateFeature("AzataEidolonBaseEvolutionsFeature", "", "", "", null, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.resistance[2]) ); base_evolutions.HideInCharacterSheetAndLevelUp = true; var feature1 = Helpers.CreateFeature("AzataEidolonLevel1Feature", "Base Evolutions", "At 1st level, azata eidolons gain the resistance (electricity) evolution and the 4-point weapon training evolution (proficiency in martial weapons).", "", azata_eidolon.Icon, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.weapon_training[0]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.weapon_training[1]), Helpers.CreateAddFeatureOnClassLevel(base_evolutions, 32, Summoner.getSummonerArray(), before: true) ); var feature4 = Helpers.CreateFeature("AzataEidolonLevel4Feature", "Resistance", "At 4th level, azata eidolons gain cold resistance 10 and fire resistance 10.", "", Helpers.GetIcon("21ffef7791ce73f468b6fca4d9371e8b"), //resist energy FeatureGroup.None, addTransferableFeatToEidolon("AzataEidolonLevel4AddFeature", Common.createEnergyDR(10, DamageEnergyType.Cold), Common.createEnergyDR(10, DamageEnergyType.Fire)) ); var feature8 = Helpers.CreateFeature("AzataEidolonLevel8Feature", "Wings", "At 8th level, azata eidolons grow large, feathery wings, gaining the flight evolution.", "", Evolutions.flight.Icon, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.flight) ); var feature12 = Helpers.CreateFeature("AzataEidolonLevel12Feature", "Damage Reduction", "At 12th level, azata eidolons gain DR 5/evil. They also gain immunity to petrification.", "", Helpers.GetIcon("9e1ad5d6f87d19e4d8883d63a6e35568"), //mage armor FeatureGroup.None, addTransferableFeatToEidolon("AzataEidolonLevel12AddFeature", Common.createContextAlignmentDR(Helpers.CreateContextValue(AbilityRankType.Default), DamageAlignment.Evil), Helpers.CreateContextRankConfig(baseValueType: ContextRankBaseValueType.FeatureList, progression: ContextRankProgression.MultiplyByModifier, stepLevel: 10, min: 5, featureList: new BlueprintFeature[] { Evolutions.damage_reduction } ), Common.createSpellImmunityToSpellDescriptor(SpellDescriptor.Petrified), Common.createBuffDescriptorImmunity(SpellDescriptor.Petrified), Helpers.Create <RecalculateOnFactsChange>(r => r.CheckedFacts = new BlueprintUnitFact[] { Evolutions.damage_reduction })) ); var feature16 = Helpers.CreateFeatureSelection("AzataEidolonLevel16Feature", "Immunity", "At 16th level, azata eidolons lose the resistance (electricity) evolution, and instead gain the immunity (electricity) evolution. They also gain the ability increase evolution, applied to an ability score of the summoner’s choice.", "", Helpers.GetIcon("d2f116cfe05fcdd4a94e80143b67046f"), //protection from energy, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.immunity[2]) ); feature16.AllFeatures = Evolutions.getPermanenetEvolutions(e => Evolutions.ability_increase.Any(ai => ai[0] == e)); var icon = library.Get <BlueprintAbility>("3e4ab69ada402d145a5e0ad3ad4b8564").Icon; //mirror image var invisibility_buff = library.Get <BlueprintBuff>("e6b35473a237a6045969253beb09777c"); var ghost_fx = library.Get <BlueprintBuff>("20f79fea035330b479fc899fa201d232"); var incorporeal = library.Get <BlueprintFeature>("c4a7f98d743bc784c9d4cf2105852c39"); var buff = Helpers.CreateBuff("AzataFeature20Buff", "Energy Form", "At 20th level, an azata eidolon gains the ability to switch between its normal form and an energy form as a standard action. In its energy form, an azata eidolon is incorporeal and doubles its fly speed, but it can’t make natural or manufactured weapon attacks; it can, however, activate any spell-like ability evolutions it possesses.", "", icon, ghost_fx.FxOnStart, Helpers.CreateAddFacts(incorporeal), Helpers.Create <BuffMovementSpeed>(b => { b.Descriptor = ModifierDescriptor.UntypedStackable; b.Value = 100; b.MultiplierCap = 2; b.CappedOnMultiplier = true; }), Helpers.Create <AddCondition>(a => a.Condition = Kingmaker.UnitLogic.UnitCondition.CanNotAttack) ); var ability = Helpers.CreateActivatableAbility("AzataFeature20ToggleAbility", buff.Name, buff.Description, "", buff.Icon, buff, AbilityActivationType.Immediately, CommandType.Standard, null ); var feature20 = Helpers.CreateFeature("AzataEidolonLevel20Feature", "Energy Form", "At 20th level, an azata eidolon gains the ability to switch between its normal form and an energy form as a standard action. In its energy form, an azata eidolon is incorporeal and doubles its fly speed, but it can’t make natural or manufactured weapon attacks; it can, however, activate any spell-like ability evolutions it possesses.", "", buff.Icon, FeatureGroup.None, addTransferableFeatToEidolon("AzataEidolonLevel20AddFeature", Helpers.CreateAddFact(ability)) ); azata_eidolon.LevelEntries = new LevelEntry[] { Helpers.LevelEntry(1, feature1), Helpers.LevelEntry(4, feature4), Helpers.LevelEntry(8, feature8), Helpers.LevelEntry(12, feature12), Helpers.LevelEntry(16, feature16), Helpers.LevelEntry(20, feature20) }; azata_eidolon.UIGroups = Helpers.CreateUIGroups(feature1, feature4, feature8, feature12, feature16, feature20); addLesserEidolon(azata_eidolon); }
static void fillTwinnedProgression() { var feature1 = Helpers.CreateFeature("TwinnedEidolonLevel1Feature", "Base Evolutions", "A twinned eidolon gains the weapon training evolution. The twinned eidolon also gains the skilled (Stealth) evolution.", "", twinned_eidolon.Icon, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.weapon_training[0]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.skilled[8]) ); var resource = Helpers.CreateAbilityResource("TwinnedEidolonSpellLikeResource", "", "", "", null); resource.SetIncreasedByLevelStartPlusDivStep(1, 9, 1, 5, 1, 0, 0.0f, new BlueprintCharacterClass[] { Eidolon.eidolon_class }); var feature4 = createTwinnedSpellLikeAbility("Spell-Like Ability", "At 4th level, a twinned eidolon can cast a summoner spell once per day as a spell-like ability. The spell must be one known by the eidolon’s summoner and must be at least 1 level lower than the highest-level spell the summoner can cast. The eidolon must have a Charisma score of at least 10 + the spell level. The caster level for this spell-like ability is equal to the eidolon’s Hit Dice. The save DC is 10 + half the eidolon’s HD + the eidolon’s Charisma modifier.\n" + "Eidolon can use this ability one more time per day when summoner reaches levels 11 and 18.", Helpers.GetIcon("55edf82380a1c8540af6c6037d34f322"), //elven magic 1, resource, false ); var feature4_7 = createTwinnedSpellLikeAbility(feature4.Name, feature4.Description, feature4.Icon, 2, resource); var feature4_10 = createTwinnedSpellLikeAbility(feature4.Name, feature4.Description, feature4.Icon, 3, resource); var feature4_13 = createTwinnedSpellLikeAbility(feature4.Name, feature4.Description, feature4.Icon, 4, resource); var feature4_16 = createTwinnedSpellLikeAbility(feature4.Name, feature4.Description, feature4.Icon, 5, resource); var feature8 = Helpers.CreateFeatureSelection("TwinnedEidolonLevel8FeatureSelection", "Shared Slot", "At 8th level, a twinned eidolon gains the shared slot evolution.", "", null, FeatureGroup.None ); feature8.AllFeatures = Evolutions.getPermanenetEvolutions(e => Evolutions.shared_slots.Any(ai => ai == e)); var feature12 = Helpers.CreateFeature("TwinnedEidolonLevel12Feature", "Damage Reduction", "At 12th level, a twinned eidolon gains DR 5/magic. In addition the eidolon also gains the extra feat when it reaches lvl 10.", "", Helpers.GetIcon("9e1ad5d6f87d19e4d8883d63a6e35568"), //mage armor FeatureGroup.None, addTransferableFeatToEidolon("TwinnedEidolonLevel12AddFeature", Common.createMagicDR(Helpers.CreateContextValue(AbilityRankType.Default)), Helpers.CreateContextRankConfig(baseValueType: ContextRankBaseValueType.FeatureList, progression: ContextRankProgression.MultiplyByModifier, stepLevel: 10, min: 5, featureList: new BlueprintFeature[] { Evolutions.damage_reduction } ), Helpers.Create <RecalculateOnFactsChange>(r => r.CheckedFacts = new BlueprintUnitFact[] { Evolutions.damage_reduction })) //extra feat to eidolon ); var feature16_1 = Helpers.CreateFeatureSelection("TwinnedEidolonLevel161Feature", "Ability Increase Evolution", "At 16th level, a twinned eidolon gains the skilled evolution and the ability increase evolution, applied to a skill and an ability score of the summoner’s choice.", "", null, FeatureGroup.None ); feature16_1.AllFeatures = Evolutions.getPermanenetEvolutions(e => Evolutions.ability_increase.Any(ai => ai[0] == e)); var feature16_2 = Helpers.CreateFeatureSelection("TwinnedEidolonLevel162Feature", "Skilled Evolution", "At 16th level, a twinned eidolon gains the skilled evolution and the ability increase evolution, applied to a skill and an ability score of the summoner’s choice.", "", null, FeatureGroup.None ); feature16_2.AllFeatures = Evolutions.getPermanenetEvolutions(e => Evolutions.skilled.Any(ai => ai == e)); var feature20 = Helpers.CreateFeature("TwinnedEidolonLevel20Feature", "Fast Healing", "At 20th level, a twinned eidolon gains fast healing V evolution.", "", Helpers.GetIcon("4093d5a0eb5cae94e909eb1e0e1a6b36"), FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.fast_healing[0]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.fast_healing[1]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.fast_healing[2]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.fast_healing[3]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.fast_healing[4]) ); twinned_eidolon.LevelEntries = new LevelEntry[] { Helpers.LevelEntry(1, feature1), Helpers.LevelEntry(4, feature4), Helpers.LevelEntry(7, feature4_7), Helpers.LevelEntry(8, feature8), Helpers.LevelEntry(10, feature4_10), Helpers.LevelEntry(12, feature12), Helpers.LevelEntry(13, feature4_13), Helpers.LevelEntry(16, feature16_1, feature16_2, feature4_16), Helpers.LevelEntry(20, feature20) }; twinned_eidolon.UIGroups = Helpers.CreateUIGroups(feature1, feature4, feature8, feature12, feature16_1, feature20); twinned_eidolon_small.LevelEntries = twinned_eidolon.LevelEntries; twinned_eidolon_small.UIGroups = twinned_eidolon.UIGroups; }
static void fillDemonProgression() { var base_evolutions = Helpers.CreateFeature("DemonEidolonBaseEvolutionsFeature", "", "", "", null, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.resistance[2]), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.resistance[3]) ); base_evolutions.HideInCharacterSheetAndLevelUp = true; var feature1 = Helpers.CreateFeature("DemonEidolonLevel1Feature", "Base Evolutions", "Starting at 1st level, demon eidolons gain the claws, resistance (electricity) and resistance (fire) evolutions as well as a +4 bonus on saving throws against poison.", "", demon_eidolon.Icon, FeatureGroup.None, addTransferableFeatToEidolon("DemonEidolonLevel1AddFeature", Common.createContextSavingThrowBonusAgainstDescriptor(4, ModifierDescriptor.UntypedStackable, SpellDescriptor.Poison) ), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.claws), Helpers.CreateAddFeatureOnClassLevel(base_evolutions, 32, Summoner.getSummonerArray(), before: true) ); var feature4 = Helpers.CreateFeature("DemonEidolonLevel4Feature", "Resistance", "At 4th level, demon eidolons gain acid resistance 10 and cold resistance 10.", "", Helpers.GetIcon("21ffef7791ce73f468b6fca4d9371e8b"), //resist energy FeatureGroup.None, addTransferableFeatToEidolon("DemonEidolonLevel4AddFeature", Common.createEnergyDR(10, DamageEnergyType.Acid), Common.createEnergyDR(10, DamageEnergyType.Cold) ) ); var feature8 = Helpers.CreateFeature("DemonEidolonLevel8Feature", "Poison Immunity", "At 8th level, demon eidolons lose the +4 bonus on saving throws against poison and gain immunity to poison. They also add 1 point to their evolution pools.", "", Helpers.GetIcon("b48b4c5ffb4eab0469feba27fc86a023"), //delay poison FeatureGroup.None, addTransferableFeatToEidolon("DemonEidolonLevel8AddFeature", Common.createSpellImmunityToSpellDescriptor(SpellDescriptor.Poison), Common.createBuffDescriptorImmunity(SpellDescriptor.Poison) ), Helpers.Create <EvolutionMechanics.IncreaseEvolutionPool>(i => i.amount = 1) ); var feature12 = Helpers.CreateFeatureSelection("DemonEidolonLevel12Feature", "Damage Reduction", "At 12th level, demon eidolons gain DR 5/good. They also gain the ability increase evolution in an ability score of the summoner’s choice.", "", Helpers.GetIcon("9e1ad5d6f87d19e4d8883d63a6e35568"), //mage armor FeatureGroup.None, addTransferableFeatToEidolon("DemonEidolonLevel12AddFeature", Common.createContextAlignmentDR(Helpers.CreateContextValue(AbilityRankType.Default), DamageAlignment.Good), Helpers.CreateContextRankConfig(baseValueType: ContextRankBaseValueType.FeatureList, progression: ContextRankProgression.MultiplyByModifier, stepLevel: 10, min: 5, featureList: new BlueprintFeature[] { Evolutions.damage_reduction } ), Helpers.Create <RecalculateOnFactsChange>(r => r.CheckedFacts = new BlueprintUnitFact[] { Evolutions.damage_reduction }) ) ); feature12.AllFeatures = Evolutions.getPermanenetEvolutions(e => Evolutions.ability_increase.Any(ai => ai[0] == e)); var feature16 = Helpers.CreateFeature("DemonEidolonLevel16Feature", "Elictricity Immunity", "At 16th level, demon eidolons lose the resistance (electricity) evolution, and instead gain the immunity (electricity) evolution.", "", Helpers.GetIcon("d2f116cfe05fcdd4a94e80143b67046f"), //protection from energy, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.immunity[2]) ); var feature20 = Helpers.CreateFeature("DemonEidolonLevel20Feature", "Regeneration", "At 20th level, demon eidolons gain true seeing as a constant ability.", "", Helpers.GetIcon("b3da3fbee6a751d4197e446c7e852bcb"), //true seeing FeatureGroup.None, addTransferableFeatToEidolon("DemonEidolonLevel20AddFeature", Helpers.Create <AddCondition>(a => a.Condition = UnitCondition.TrueSeeing) ) ); demon_eidolon.LevelEntries = new LevelEntry[] { Helpers.LevelEntry(1, feature1), Helpers.LevelEntry(4, feature4), Helpers.LevelEntry(8, feature8), Helpers.LevelEntry(12, feature12), Helpers.LevelEntry(16, feature16), Helpers.LevelEntry(20, feature20) }; demon_eidolon.UIGroups = Helpers.CreateUIGroups(feature1, feature4, feature8, feature12, feature16, feature20); addLesserEidolon(demon_eidolon); }
static void fillFeyProgression() { var feature1 = Helpers.CreateFeatureSelection("FeyEidolonLevel1Feature", "Base Evolutions", "Starting at 1st level, fey eidolons gain Mobility, Persuasion, Lore (nature), Trickery, and Use Magic Device as class skills instead of those gained by most eidolons. They also gain the slam evolution and the skilled evolution (selecting one class skill).", "", fey_eidolon.Icon, FeatureGroup.None, Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.slam_biped) ); feature1.AllFeatures = Evolutions.getPermanenetEvolutions(e => Evolutions.skilled.Contains(e)); var woodland_stride = library.Get <BlueprintFeature>("11f4072ea766a5840a46e6660894527d"); transferable_abilities.Add(woodland_stride); var feature4 = Helpers.CreateFeature("FeyEidolonLevel4Feature", "Woodland Stride", "At 4th level, fey eidolons gain woodland stride.", "", woodland_stride.Icon, FeatureGroup.None, Helpers.Create <AddFeatureToCompanion>(a => a.Feature = woodland_stride) ); var fey_magic1 = createFeySpellLikeAbilitiesSpellList(3, library.Get <BlueprintAbility>("0fd00984a2c0e0a429cf1a911b4ec5ca"), //entangle library.Get <BlueprintAbility>("95851f6e85fe87d4190675db0419d112"), //grease library.Get <BlueprintAbility>("f001c73999fb5a543a199f890108d936"), NewSpells.obscuring_mist); var feature8 = Helpers.CreateFeatureSelection("FeyEidolonLevel8Feature", "Fey Magic I", "At 8th level, fey eidolons gain the ability to use either entangle, grease, obscuring mist, or vanish as a spell-like ability three times per day. At 16th level Fey Eidolon can select another spell-like ability.", "", Helpers.GetIcon("0fd00984a2c0e0a429cf1a911b4ec5ca"), //entangle FeatureGroup.None ); feature8.AllFeatures = fey_magic1; var feature82 = library.CopyAndAdd <BlueprintFeatureSelection>(feature8, "FeyEidolon2Level8Feature", ""); var fey_dr = Helpers.CreateFeature("FeyEidolonDRFeature", "Resistance and Wings", "At 12th level, fey eidolons gain DR 5/ cold iron. They also grow wings, gaining the flight evolution.", "", Helpers.GetIcon("9e1ad5d6f87d19e4d8883d63a6e35568"), //mage armor FeatureGroup.None, Common.createMaterialDR(Helpers.CreateContextValue(AbilityRankType.Default), PhysicalDamageMaterial.ColdIron) ); var fey_extra_dr = Helpers.CreateFeature("FeyEidolonExtraDrFeature", "", "", "", null, FeatureGroup.None); fey_extra_dr.HideInCharacterSheetAndLevelUp = true; fey_dr.AddComponents(Helpers.CreateContextRankConfig(baseValueType: ContextRankBaseValueType.FeatureList, progression: ContextRankProgression.MultiplyByModifier, stepLevel: 5, min: 5, featureList: new BlueprintFeature[] { Evolutions.damage_reduction, fey_dr, fey_extra_dr } ), Helpers.Create <RecalculateOnFactsChange>(r => r.CheckedFacts = new BlueprintUnitFact[] { Evolutions.damage_reduction, fey_extra_dr }) ); transferable_abilities.Add(fey_dr); var feature12 = Helpers.CreateFeature("FeyEidolonLevel12Feature", fey_dr.Name, fey_dr.Description, "", fey_dr.Icon, FeatureGroup.None, Helpers.Create <AddFeatureToCompanion>(a => a.Feature = fey_dr), Helpers.Create <EvolutionMechanics.AddPermanentEvolution>(a => a.Feature = Evolutions.flight) ); var fey_magic2 = createFeySpellLikeAbilitiesSpellList(3, library.Get <BlueprintAbility>("46fd02ad56c35224c9c91c88cd457791"), //blindness library.Get <BlueprintAbility>("ce7dad2b25acf85429b6c9550787b2d9"), //glitterdust library.Get <BlueprintAbility>("fd4d9fd7f87575d47aafe2a64a6e2d8d"), //hideous laughter library.Get <BlueprintAbility>("89940cde01689fb46946b2f8cd7b66b7"), //invisibility library.Get <BlueprintAbility>("3e4ab69ada402d145a5e0ad3ad4b8564") //mirror image ); var feature16 = Helpers.CreateFeatureSelection("FeyEidolonLevel16Feature", "Fey Magic II", "At 16th level, fey eidolons gain the ability to use either blindness, glitterdust, hideous laughter, invisibility, or mirror image as a spell-like ability three times per day.", "", Helpers.GetIcon("89940cde01689fb46946b2f8cd7b66b7"), //invisibility FeatureGroup.None ); feature16.AllFeatures = fey_magic2; var fey_magic3 = createFeySpellLikeAbilitiesSpellList(1, library.Get <BlueprintAbility>("7f71a70d822af94458dc1a235507e972"), //claock of dreams library.Get <BlueprintAbility>("1e2d1489781b10a45a3b70192bba9be3"), //waves of ectasy library.Get <BlueprintAbility>("ecaa0def35b38f949bd1976a6c9539e0"), //invisibility greater library.Get <BlueprintAbility>("98310a099009bbd4dbdf66bcef58b4cd") //invisibility mass ); transferable_abilities.Add(fey_extra_dr); var feature20 = Helpers.CreateFeatureSelection("FeyEidolonLevel20Feature", "Fey Magic III", "At 20th level, fey eidolons increase their DR to DR 10/cold iron. They gain the ability to use either waves of ectasy, invisibility, mass, invisibility greater, or cloak of dreams as a spell-like ability once per day.", "", Helpers.GetIcon("7f71a70d822af94458dc1a235507e972"), //cloak of dreams FeatureGroup.None, Helpers.Create <AddFeatureToCompanion>(a => a.Feature = fey_extra_dr) ); feature20.AllFeatures = fey_magic3; var feature220 = Helpers.CreateFeatureSelection("FeyEidolon2Level20Feature", "Fey Magic I or II", "At 20th level, fey eidolons can select another spell-like ability from 8th level list or 16th level list.", "", Helpers.GetIcon("ce7dad2b25acf85429b6c9550787b2d9"), //glitterdust FeatureGroup.None ); feature220.AllFeatures = fey_magic1.AddToArray(fey_magic2); fey_eidolon.LevelEntries = new LevelEntry[] { Helpers.LevelEntry(1, feature1), Helpers.LevelEntry(4, feature4), Helpers.LevelEntry(8, feature8), Helpers.LevelEntry(12, feature12), Helpers.LevelEntry(16, feature16, feature82), Helpers.LevelEntry(20, feature20, feature220) }; fey_eidolon.UIGroups = new UIGroup[] { Helpers.CreateUIGroup(feature1, feature4, feature8, feature12, feature16, feature20), Helpers.CreateUIGroup(feature82, feature220) }; }