static void createOverwhelmingPower() { overwhelming_power = library.CopyAndAdd <BlueprintFeature>("2496916d8465dbb4b9ddeafdf28c67d8", "OverwhelmingPowerOverwhelmingSoulFeature", ""); overwhelming_power.SetNameDescription("Overwhelming Power", "At 3rd level, an overwhelming soul gains a +1 bonus on attack rolls and damage rolls with her kinetic blasts. The damage bonus doesn’t apply to kinetic blade, kinetic whip, or other infusions that don’t apply the damage bonus from elemental overflow.\n" + "This bonus increases by 1 at 6th level and every 3 levels thereafter." ); overwhelming_power.RemoveComponents <RecalculateOnStatChange>(); overwhelming_power.RemoveComponents <ContextRankConfig>(); overwhelming_power.AddComponent(Helpers.CreateContextRankConfig(ContextRankBaseValueType.ClassLevel, classes: new BlueprintCharacterClass[] { archetype.GetParentClass() }, progression: ContextRankProgression.StartPlusDivStep, startLevel: 3, stepLevel: 3)); }
static void createMindOverMatter() { mind_over_matter = library.CopyAndAdd <BlueprintFeature>("2fa48527ba627254ba9bf4556330a4d4", "MindOverMatterBurnFeature", ""); var burn_resource = Helpers.CreateAbilityResource("OverwhelmingSoulBurnResource", "", "", "", null); burn_resource.SetIncreasedByLevel(0, 1, new BlueprintCharacterClass[] { archetype.GetParentClass() }); burn_resource.SetIncreasedByStat(0, StatType.Charisma); var burn_per_round_resource = Helpers.CreateAbilityResource("OverwhelmingSoulBurnPerRoundResource", "", "", "", null); burn_per_round_resource.SetFixedResource(1); mind_over_matter.ReplaceComponent <AddAbilityResources>(a => a.Resource = burn_resource); mind_over_matter.ReplaceComponent <AddKineticistPart>(a => { a.MainStat = StatType.Charisma; a.MaxBurn = burn_resource; a.MaxBurnPerRound = burn_per_round_resource; } ); mind_over_matter.RemoveComponents <AddKineticistBurnValueChangedTrigger>(); mind_over_matter.SetNameDescription("Mind Over Matter", "An overwhelming soul uses her Charisma modifier instead of her Constitution modifier to determine her damage with wild talents, the DCs of Constitutionbased wild talents, the duration of wild talents with a Constitution-based duration, her bonus on concentration checks for wild talents, and the other Constitutionbased effects of all her wild talents."); mind_over_matter.AddComponents(burn_per_round_resource.CreateAddAbilityResource(), burn_resource.CreateAddAbilityResource() ); }
static void createRostlandBravoProficiencies() { rostland_bravo_proficiencies = library.CopyAndAdd <BlueprintFeature>("8f8c2640ffad89349883fc2e5ff2091e", //magus proficiencies "RostlandBravoSwashbucklerProficiencies", "12f3c40bac26460f97ec10e3e5e28035"); rostland_bravo_proficiencies.RemoveComponents <ArcaneArmorProficiency>(); rostland_bravo_proficiencies.AddComponent(Common.createAddWeaponProficiencies(WeaponCategory.DuelingSword)); rostland_bravo_proficiencies.SetName("Rostland Bravo Proficiencies"); rostland_bravo_proficiencies.SetDescription("The Rostland bravo is not proficient with bucklers."); }
static void createDeceptiveKi() { deceptive_ki = library.CopyAndAdd <BlueprintFeature>("e9590244effb4be4f830b1e3fffced13", "DeceptiveKiFeature", ""); deceptive_ki.RemoveComponents <AddFacts>(); var resource = deceptive_ki.GetComponent <AddAbilityResources>().Resource; var ki_feint = library.CopyAndAdd(NewFeats.improved_feint_ability, "KiFeintAbility", ""); ki_feint.SetNameDescriptionIcon("Ki Feint", "A sage counselor can spend 1 ki point while performing a flurry of blows to feint an opponent as a swift action, but he can’t spend 1 ki point to make an additional attack when making a flurry of blows.", LoadIcons.Image2Sprite.Create(@"FeatIcons/FeintingFlurry.png")); ki_feint.ActionType = CommandType.Swift; ki_feint.AddComponent(resource.CreateResourceLogic()); var deceptive_ki_buff = Helpers.CreateBuff("DeceptiveKiBuff", "Deceptive Ki", "At 3rd level, the sage counselor can spend 1 point from his ki pool as a swift action to give himself a +4 insight bonus on his next Bluff check.", "", Helpers.GetIcon("b3da3fbee6a751d4197e446c7e852bcb"), //true seeing null, Helpers.CreateAddStatBonus(StatType.CheckBluff, 4, ModifierDescriptor.Insight) ); deceptive_ki_buff.AddComponents(Helpers.Create <AddInitiatorSkillRollTrigger>(a => { a.Skill = StatType.CheckBluff; a.Action = Helpers.CreateActionList(Common.createContextActionRemoveBuff(deceptive_ki_buff)); }), Helpers.Create <AddInitiatorPartySkillRollTrigger>(a => { a.Skill = StatType.CheckBluff; a.Action = Helpers.CreateActionList(Common.createContextActionRemoveBuff(deceptive_ki_buff)); }) ); var ability = Helpers.CreateAbility("DeceptiveKiAbility", deceptive_ki_buff.Name, deceptive_ki_buff.Description, "", deceptive_ki_buff.Icon, AbilityType.Supernatural, CommandType.Swift, AbilityRange.Personal, "", "", Helpers.CreateRunActions(Common.createContextActionApplyBuff(deceptive_ki_buff, Helpers.CreateContextDuration(), is_permanent: true, dispellable: false)), resource.CreateResourceLogic() ); ability.setMiscAbilityParametersSelfOnly(); deceptive_ki.AddComponents(Helpers.CreateAddFacts(ki_feint, ability)); deceptive_ki.SetNameDescription("Deceptive Ki", "A sage counselor can spend 1 ki point while performing a flurry of blows to feint an opponent as a swift action, but he can’t spend 1 ki point to make an additional attack when making a flurry of blows.\n" + "In addition, the sage counselor can spend 1 point from his ki pool as a swift action to give himself a +4 insight bonus on his next Bluff check. The sage counselor does not gain the ability to spend ki to increase his speed by 20 feet for 1 round." ); }
private static void ReplaceEvangelistSpells() { var cleric = library.Get <BlueprintCharacterClass>("67819271767a9dd4fbfd4ae700befea0"); BlueprintFeature spontaneous_casting = library.Get <BlueprintFeature>("48811518d8204f43b991e4dd967a87b8"); //evangelist spontaneous casting feature spontaneous_casting.RemoveComponents <SpontaneousSpellConversion>(); //clear all the spontaneous spell conversions that are there BlueprintAbility[] spells = new BlueprintAbility[] { CallOfTheWild.NewSpells.command, CallOfTheWild.NewSpells.hypnotic_pattern, library.Get <BlueprintAbility>("faabd2cc67efa4646ac58c7bb3e40fcc"), //prayer NewSpells.suggestion, CallOfTheWild.NewSpells.command_greater, library.Get <BlueprintAbility>("d316d3d94d20c674db2c24d7de96f6a7"), //serenity NewSpells.suggestion_mass, library.Get <BlueprintAbility>("cbf3bafa8375340498b86a3313a11e2f"), //euphoric tranquility library.Get <BlueprintAbility>("3c17035ec4717674cae2e841a190e757") //dominate monster }; var description = "An evangelist does not gain the ability to spontaneously cast cure or inflict spells by sacrificing prepared spells. However, an evangelist can spontaneously cast the following splls, by sacrificing a prepared spell of the noted level: "; for (int i = 0; i < spells.Length; i++) { description += spells[i].Name + $" ({i + 1}{Common.getNumExtension(i + 1)})" + ((i + 1) == spells.Length ? "." : ", "); } var spells_array = Common.createSpelllistsForSpontaneousConversion(spells); spontaneous_casting.SetDescription(description); for (int i = 0; i < spells_array.Length; i++) { spontaneous_casting.AddComponent(Common.createSpontaneousSpellConversion(cleric, spells_array[i].ToArray())); } }
static void fixFlyingCreatures() { airborne.AddComponent(Common.createAddConditionImmunity(Kingmaker.UnitLogic.UnitCondition.DifficultTerrain)); airborne.AddComponent(Common.createBuffDescriptorImmunity(Kingmaker.Blueprints.Classes.Spells.SpellDescriptor.Ground)); airborne.AddComponent(Common.createSpellImmunityToSpellDescriptor(Kingmaker.Blueprints.Classes.Spells.SpellDescriptor.Ground)); airborne.AddComponent(Helpers.Create <AddFlying>()); airborne.AddComponent(Helpers.Create <ManeuverImmunity>(m => m.Type = CombatManeuver.Trip)); airborne.RemoveComponents <DamageBonusConditional>(); airborne.RemoveComponents <AttackBonusConditional>(); BlueprintUnitFact[] facts = new BlueprintUnitFact[] { library.Get <BlueprintBuff>("3689b69a30d6d7c48b90e28228fb7b7c"), //transmuter air elemental 1 library.Get <BlueprintBuff>("2b2060036a20108448299f3ee2b14015"), //transmuter air elemental 2 library.Get <BlueprintBuff>("2641f73f8d7864f4bba0bd6134018094"), //polymorph air elemental greater library.Get <BlueprintBuff>("933c5cd1113d2ef4a84f55660a744008"), //polymorph air elemental library.Get <BlueprintBuff>("70828d40058f2d3428bb767eb6e3e561"), //air elemental body 1 library.Get <BlueprintBuff>("3af4d4bc55fa0ae4e851708d7395f1dd"), //air elemental body 2 library.Get <BlueprintBuff>("db00581a03e6947419648dfba6aa03b2"), //air elemental body 3 library.Get <BlueprintBuff>("ba06b8cff52da9e4d8432144ed6a6d19"), //air elemental body 4 library.Get <BlueprintBuff>("dc1ef6f6d52b9fd49bc0696ab1a4f18b"), //air wildshape 1 library.Get <BlueprintBuff>("65fdf187fea97c94b9cf4ff6746901a6"), //air wildshape 2 library.Get <BlueprintBuff>("814bc75e74f969641bf110addf076ff9"), //air wildshape 3 library.Get <BlueprintBuff>("eb52d24d6f60fc742b32fe943b919180"), //air wildshape 4 library.Get <BlueprintBuff>("1a482859d9513e4418f57abcd396d315"), //wyvern library.Get <BlueprintBuff>("268fafac0a5b78c42a58bd9c1ae78bcf"), //black dragon I library.Get <BlueprintBuff>("b117bc8b41735924dba3fb23318f39ff"), //blue dragon I library.Get <BlueprintBuff>("17d330af03f5b3042a4417ab1d45e484"), //brass dragon I library.Get <BlueprintBuff>("1032d4ffb1c56444ca5bfce2c778614d"), //bronze dragon I library.Get <BlueprintBuff>("a4cc7169fb7e64a4a8f53bdc774341b1"), //copper dragon I library.Get <BlueprintBuff>("89669cfba3d9c15448c23b79dd604c41"), //gold dragon I library.Get <BlueprintBuff>("02611a12f38bed340920d1d427865917"), //green dragon buff I library.Get <BlueprintBuff>("294cbb3e1d547f341a5d7ec8500ffa44"), //red dragon I library.Get <BlueprintBuff>("feb2ab7613e563e45bcf9f7ffe4e05c6"), //silver dragon I library.Get <BlueprintBuff>("a6acd3ad1e9fa6c45998d43fd5dcd86d"), //white dragon buff I library.Get <BlueprintBuff>("9eb5ba8c396d2c74c8bfabd3f5e91050"), //black dragon II library.Get <BlueprintBuff>("cf8b4e861226e0545a6805036ab2a21b"), //blue dragon II library.Get <BlueprintBuff>("f7fdc15aa0219104a8b38c9891cac17b"), //brass dragon II library.Get <BlueprintBuff>("53e408cab2331bd48a3db846e531dfe8"), //bronze dragon II library.Get <BlueprintBuff>("799c8b6ae43c7d741ac7887c984f2aa2"), //copper dragon II library.Get <BlueprintBuff>("4300f60c00ecabc439deab11ce6d738a"), //gold dragon II library.Get <BlueprintBuff>("070543328d3e9af49bb514641c56911d"), //green dragon buff II library.Get <BlueprintBuff>("40a96969339f3c241b4d989910f255e1"), //red dragon II library.Get <BlueprintBuff>("16857109dafc2b94eafd1e888552ef76"), //silver dragon II library.Get <BlueprintBuff>("2652c61dff50a24479520c84005ede8b"), //white dragon buff II library.Get <BlueprintBuff>("c231e0cf7c203644d81e665d6115ae69"), //black dragon III library.Get <BlueprintBuff>("a4993affb4c4ad6429eca6daeb7b86a8"), //blue dragon III library.Get <BlueprintBuff>("8acd6ac6f89c73b4180191eb63768009"), //brass dragon III library.Get <BlueprintBuff>("1d3d388fd7b740842bde43dfb0aa56bb"), //bronze dragon III library.Get <BlueprintBuff>("c0e8f767f87ac354495865ce3dc3ee46"), //copper dragon III library.Get <BlueprintBuff>("ec6ad3612c4f0e340b54a11a0e78793d"), //gold dragon III library.Get <BlueprintBuff>("2d294863adf81f944a7558f7ae248448"), //green dragon buff III library.Get <BlueprintBuff>("782d09044e895fa44b9b6d9cca3a52b5"), //red dragon III library.Get <BlueprintBuff>("80babfb32011f384ea865d768857da79"), //silver dragon III library.Get <BlueprintBuff>("8dae421e48035a044a4b1a7b9208c5db"), //white dragon buff III }; for (int i = 0; i < facts.Length; i++) { facts[i].AddComponents(airborne.ComponentsArray); if (i < 12) { facts[i].AddComponent(Helpers.CreateAddFact(air_mastery)); } } var airborne_types = new BlueprintUnitType[] { library.Get <BlueprintUnitType>("b012216cc6867354fb088d0c36968ea3"), //black dragon library.Get <BlueprintUnitType>("f52b75839bb928242b6108df9d7f35a2"), //wyvern library.Get <BlueprintUnitType>("284b6fd0b67688a4bb3ec28b15152d69"), //ankou library.Get <BlueprintUnitType>("a574fa56e67623d41b538bdeae291fd5"), //gargoyle library.Get <BlueprintUnitType>("535823c600a2c8f4a906063b7b949eb5"), //jabberwok library.Get <BlueprintUnitType>("248c45d90c2f6e7429358fbe503e9c08") //manticore }; var units = library.GetAllBlueprints().OfType <BlueprintUnit>(); foreach (var unit in units) { if (airborne_types.Contains(unit.Type)) { unit.AddFacts = unit.AddFacts.AddToArray(airborne); } } }