static void createElementalFocus() { var kineticist = library.Get <BlueprintCharacterClass>("42a455d9ec1ad924d889272429eb8391"); var elemental_foci = new List <BlueprintFeature>(); var elemental_focus_standard = library.Get <BlueprintFeatureSelection>("1f3a15a3ae8a5524ab8b97f469bf4e3d"); foreach (var efs in elemental_focus_standard.AllFeatures) { var progression = efs as BlueprintProgression; var focus = Helpers.CreateProgression("ElementalAscetic" + progression.name, progression.Name, progression.Description, "", progression.Icon, progression.Groups[0]); focus.LevelEntries = new LevelEntry[] { progression.LevelEntries[0] }; elemental_foci.Add(focus); efs.AddComponent(Helpers.Create <NewMechanics.FeatureReplacement>(f => f.replacement_feature = focus)); //to work correctly with 2nd, 3rd element } elemental_focus = library.CopyAndAdd(elemental_focus_standard, "ElementalAscetic" + elemental_focus_standard.name, ""); elemental_focus.AllFeatures = elemental_foci.ToArray(); elemental_focus.RemoveComponents <NewMechanics.FeatureReplacement>(); elemental_focus_standard.AddComponent(Helpers.Create <NewMechanics.FeatureReplacement>(f => f.replacement_feature = elemental_focus)); //we need to hide all basic base blasts from elemental ascetic var kientic_blade_infusion = library.Get <BlueprintFeature>("9ff81732daddb174aa8138ad1297c787"); foreach (var c in kientic_blade_infusion.GetComponents <AddFeatureIfHasFact>()) { var blast_base = c.CheckedFact as BlueprintAbility; var standard_blast = blast_base.Variants[0]; standard_blast.AddComponent(Helpers.Create <NewMechanics.AbilityShowIfCasterHasNoFact>(s => s.UnitFact = elemental_focus)); } //done after havocker, so should no longer have AbilityShowIfCasterHasFact but only AbilityShowIfCasterHasFactsFromList var abilities = library.GetAllBlueprints().OfType <BlueprintAbility>().Where(a => { var comp = a.GetComponent <NewMechanics.AbilityShowIfCasterHasFactsFromList>(); return(comp != null && comp.UnitFacts.Contains(elemental_focus_standard)); } ); foreach (var a in abilities) { var comp = a.GetComponent <NewMechanics.AbilityShowIfCasterHasFactsFromList>(); comp.UnitFacts = comp.UnitFacts.AddToArray(elemental_focus); } }