static BlueprintFeature CreateFireBreath()
        {
            var feat = Helpers.CreateFeature("MysteryFlameBreath", RES.MysteryFlameBreathName_info,
                                             RES.MysteryFlameBreathDescription_info,
                                             "3f254ece8752466d8fd76ca358990eb9",
                                             Helpers.GetIcon("2a711cd134b91d34ab027b50d721778b"), // gold dragon fire breath
                                             FeatureGroup.None);

            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "f3cc34b0ed9c4457b0b7ad4d1f2cbdd4", null);

            resource.SetIncreasedByLevelStartPlusDivStep(1, 5, 1, 5, 1, 0, 0, oracleArray);

            var ability = library.CopyAndAdd <BlueprintAbility>("4783c3709a74a794dbe7c8e7e0b1b038", // burning hands
                                                                $"{feat.name}Ability", "67c3d034c25c4daf8c55ec97f7af116b");

            ability.Type = AbilityType.Supernatural;
            ability.ReplaceContextRankConfig(c =>
            {
                Helpers.SetField(c, "m_UseMax", false);
                Helpers.SetField(c, "m_Max", 20);
            });
            var components = ability.ComponentsArray.WithoutSpellComponents().ToList();

            components.Add(resource.CreateResourceLogic());
            ability.SetComponents(components);

            feat.SetComponents(
                resource.CreateAddAbilityResource(),
                ability.CreateAddFact(),
                OracleClass.CreateBindToOracle(ability));
            return(feat);
        }
        static BlueprintFeature CreateFireBreath()
        {
            var feat = Helpers.CreateFeature("MysteryFlameBreath", "Fire Breath",
                                             "As a standard action, you can unleash a 15-foot cone of flame from your mouth. This flame deals 1d4 points of fire damage per level. A Reflex save halves this damage. You can use this ability once per day, plus one additional time per day at 5th level and every five levels thereafter. The save DC is Charisma-based.",
                                             "3f254ece8752466d8fd76ca358990eb9",
                                             Helpers.GetIcon("2a711cd134b91d34ab027b50d721778b"), // gold dragon fire breath
                                             FeatureGroup.None);

            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "f3cc34b0ed9c4457b0b7ad4d1f2cbdd4", null);

            resource.SetIncreasedByLevelStartPlusDivStep(1, 5, 1, 5, 1, 0, 0, oracleArray);

            var ability = library.CopyAndAdd <BlueprintAbility>("4783c3709a74a794dbe7c8e7e0b1b038", // burning hands
                                                                $"{feat.name}Ability", "67c3d034c25c4daf8c55ec97f7af116b");

            ability.Type = AbilityType.Supernatural;
            ability.ReplaceContextRankConfig(c =>
            {
                Helpers.SetField(c, "m_UseMax", false);
                Helpers.SetField(c, "m_Max", 20);
            });
            var components = ability.ComponentsArray.WithoutSpellComponents().ToList();

            components.Add(resource.CreateResourceLogic());
            ability.SetComponents(components);

            feat.SetComponents(
                resource.CreateAddAbilityResource(),
                ability.CreateAddFact(),
                OracleClass.CreateBindToOracle(ability));
            return(feat);
        }
        static BlueprintFeature CreateFormOfFlame()
        {
            var feat = Helpers.CreateFeature("MysteryFlameForm", RES.MysteryFlameFormName_info,
                                             RES.MysteryFlameFormDescription_info,
                                             "1c18972911284249a0bc38f6f4ec4304",
                                             Helpers.GetIcon("bb6bb6d6d4b27514dae8ec694433dcd3"), // elemental body fire 1
                                             FeatureGroup.None);

            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "e86f5231a48548f2a4d76a9e664acfab", null);

            resource.SetFixedResource(1);

            var formIds = new string[] {
                "bb6bb6d6d4b27514dae8ec694433dcd3",
                "9a87d2fb0e288664c8dff299ff030a38",
                "2c40b391368f05e4b91aa8a8a51109ef",
                "c281eeecc554b72449fef43924e522ce"
            };

            var components = new List <BlueprintComponent> {
                Helpers.PrerequisiteClassLevel(oracle, 7),
                resource.CreateAddAbilityResource()
            };
            var abilities = new List <BlueprintAbility>();

            for (int i = 0; i < formIds.Length; i++)
            {
                var spellId = formIds[i];
                var spell   = library.Get <BlueprintAbility>(spellId);
                var ability = DragonMystery.CopyBuffSpellToAbility(spell, $"{feat.name}{i + 1}",
                                                                   Helpers.MergeIds("7bcf2c58cd3f4b64862c7d3b33daa305", spellId),
                                                                   AbilityType.Supernatural,
                                                                   feat.Description,
                                                                   resource, DurationRate.Hours);
                abilities.Add(ability);

                var isLast   = i == formIds.Length - 1;
                var minLevel = 7 + i * 2;
                var maxLevel = isLast ? 20 : 8 + i * 2;
                components.Add(ability.CreateAddFactOnLevelRange(oracle, minLevel, maxLevel));
            }
            components.Add(OracleClass.CreateBindToOracle(abilities.ToArray()));
            feat.SetComponents(components);
            return(feat);
        }