using System; using System.ComponentModel; using pkNX.Structures; namespace pkNX.Randomization { /// /// Randomization settings when randomizing a . /// [Serializable] public class PersonalRandSettings : RandSettings { private const string Moves = nameof(Moves); private const string Types = nameof(Types); private const string Stats = nameof(Stats); private const string Abilities = nameof(Abilities); private const string Misc = nameof(Misc); private const string Evolutions = nameof(Evolutions); /// Toggle to use Evolution data for inherited properties. [Category("A1"), Description("Evolution Chain Species Randomization instead of Pure Random. Refer to the Evolutions settings when using this mode.")] public bool ModifyByEvolutions { get; set; } = true; #region Moves /// Permits randomizing the values. [Category(Moves), Description("Enables randomizing the TM (Technical Machine) compatibility flags.")] public bool ModifyLearnsetTM { get; set; } = true; /// Permits randomizing the values. [Category(Moves), Description("Enables randomizing the HM (Hidden Machine) compatibility flags.")] public bool ModifyLearnsetHM { get; set; } = true; /// Permits randomizing the values. [Category(Moves), Description("Enables randomizing the move tutor compatibility flags.")] public bool ModifyLearnsetMoveTutors { get; set; } = true; /// Permits randomizing the values. [Category(Moves), Description("Enables randomizing the type tutor compatibility flags.")] public bool ModifyLearnsetTypeTutors { get; set; } = false; /// Percent chance to learn a TMHM move (0-100). /// Average Learnable TMs is 35.260. [Category(Moves), Description("Percentage chance to learn a given TM move.")] public decimal LearnTMPercent { get; set; } = 35; /// Percent chance to learn a type tutor move (0-100). /// 136 special tutor moves learnable by species in Untouched ORAS. [Category(Moves), Description("Percentage chance to learn a given special Type Tutor move.")] public decimal LearnTypeTutorPercent { get; set; } = 2; /// Percent chance to learn a tutor move (0-100). /// 10001 tutor moves learnable by 826 species in Untouched ORAS. [Category(Moves), Description("Percentage chance to learn a given Move Tutor move.")] public decimal LearnMoveTutorPercent { get; set; } = 30; #endregion #region Types /// Permits modification of . [Category(Types), Description("Enables a PKM's Type to be modified.")] public bool ModifyTypes { get; set; } = true; /// Option to modify the . [Category(Types), Description("Option to modify the Types depending on the specified setting.")] public ModifyState Type { get; set; } = ModifyState.All; /// Chance that both types are the same. [Category(Types), Description("Chance that both types are the same.")] public decimal SameTypeChance { get; set; } = 50; #endregion #region Ability /// Toggle to permit modification of . [Category(Abilities), Description("Enables a PKM's Abilities to be modified.")] public bool ModifyAbility { get; set; } = true; /// Permits Wonder Guard as a random ability. [Category(Abilities), Description("Permits Wonder Guard as a random ability.")] public Permissive WonderGuard { get; set; } = Permissive.No; /// Option to modify the . [Category(Abilities), Description("Option to modify the Abilities depending on the specified setting.")] public ModifyState Ability { get; set; } = ModifyState.All; /// Chance that both abilities are the same. [Category(Abilities), Description("Chance that both abilities are the same.")] public decimal SameAbilityChance { get; set; } = 100; #endregion #region Stats /// Permits modification of . [Category(Stats), Description("Enables a PKM's base stats to be modified.")] public bool ModifyStats { get; set; } = true; /// Amount a Base Stat is amplified as a low bound. [Category(Stats), Description("Minimum Percentage bound a Base Stat is after randomizing. 100 corresponds to an unchanged minimum.")] public int StatDeviationMin { get; set; } = 75; /// Amount a Base Stat is amplified as a high bound. [Category(Stats), Description("Maximum Percentage bound a Base Stat is after randomizing. 100 corresponds to an unchanged maximum.")] public int StatDeviationMax { get; set; } = 125; /// Toggle to permit shuffling of . [Category(Stats), Description("Shuffles the PKM's base stats after any modifications have been made.")] public bool ShuffleStats { get; set; } = true; /// Permits randomizing the stat. [Category(Stats), Description("Permits randomizing the HP base stat.")] public bool HP { get; set; } = true; /// Permits randomizing the stat. [Category(Stats), Description("Permits randomizing the Attack base stat.")] public bool ATK { get; set; } = true; /// Permits randomizing the stat. [Category(Stats), Description("Permits randomizing the Defense base stat.")] public bool DEF { get; set; } = true; /// Permits randomizing the stat. [Category(Stats), Description("Permits randomizing the Special Attack base stat.")] public bool SPA { get; set; } = true; /// Permits randomizing the stat. [Category(Stats), Description("Permits randomizing the Special Defense base stat.")] public bool SPD { get; set; } = true; /// Permits randomizing the stat. [Category(Stats), Description("Permits randomizing the Speed base stat.")] public bool SPE { get; set; } = true; /// /// Flags to edit the stats when randomizing. /// public bool[] StatsToRandomize => new[] {HP, ATK, DEF, SPE, SPA, SPD}; #endregion #region Misc /// Option permitting modification of . [Category(Misc), Description("Enables a PKM's catch rate to be modified. Can inversely scale off BST.")] public CatchRate CatchRate { get; set; } = CatchRate.Unchanged; /// Permits modification of . [Category(Misc), Description("Enables a PKM's base stats to be modified.")] public bool ModifyHeldItems { get; set; } = true; /// Chance all held items are the same. [Category(Misc), Description("Percentage chance that all Held Items are the same, resulting in a 100% chance of having the held item.")] public decimal AlwaysHeldItemChance { get; set; } = 20; /// Permits modification of . [Category(Misc), Description("Enables a PKM's egg groups to be modified.")] public bool ModifyEgg { get; set; } = false; /// Chance both egg groups are the same. [Category(Misc), Description("Percentage chance that both egg groups will be the same.")] public decimal SameEggGroupChance { get; set; } = 50; #endregion #region Evolutions /// Toggles inheriting types from the pre-evolution that evolves into this species/form. [Category(Evolutions), Description("Toggles inheriting types from the pre-evolution that evolves into this species/form.")] public bool InheritType { get; set; } = true; /// Maximum amount of Types that can be different from the pre-evolution. [Category(Evolutions), Description("Maximum amount of Types that can be different from the pre-evolution.")] public ModifyState InheritTypeSetting { get; set; } = ModifyState.One; /// Percentage chance that only one type will be inherited, and a new random one will replace the other. [Category(Evolutions), Description("Percentage chance that only one type will be inherited, and a new random one will replace the other.")] public decimal InheritTypeOnlyOneChance { get; set; } = 65; /// Percentage chance that neither one type will be inherited, and new random ones will replace the others. [Category(Evolutions), Description("Percentage chance that neither type will be inherited, and new random ones will replace the others.")] public decimal InheritTypeNeitherChance { get; set; } = 30; /// Toggles chance that neither one type will be inherited, and new random ones will replace the others. [Category(Evolutions), Description("Amount of abilities that will be inherited, and new random ones will replace the others.")] public ModifyState InheritAbilitySetting { get; set; } = ModifyState.One; /// Toggles inheriting abilities from the pre-evolution that evolves into this species/form. [Category(Evolutions), Description("Toggles inheriting abilities from the pre-evolution that evolves into this species/form.")] public bool InheritAbility { get; set; } = true; /// Percentage chance that only one ability will be inherited, and a new random one will replace the other. [Category(Evolutions), Description("Percentage chance that only one ability will be inherited, and a new random one will replace the other.")] public decimal InheritAbilityOnlyOneChance { get; set; } = 45; /// Percentage chance that neither one ability will be inherited, and new random ones will replace the others. [Category(Evolutions), Description("Percentage chance that neither ability will be inherited, and new random ones will replace the others.")] public decimal InheritAbilityNeitherChance { get; set; } = 20; /// Inherit the held item values from the pre-evolution. [Category(Evolutions), Description("Inherit the held item values from the pre-evolution.")] public bool InheritHeldItem { get; set; } = true; /// Inherit the TM/HM compatibility from the pre-evolution. [Category(Evolutions), Description("Inherit the TM/HM compatibility values from the pre-evolution.")] public bool InheritChildTM { get; set; } = true; /// Inherit the Tutor compatibility from the pre-evolution. [Category(Evolutions), Description("Inherit the Tutor compatibility values from the pre-evolution.")] public bool InheritChildTutor { get; set; } = true; /// Inherit the Type Tutor values from the pre-evolution. [Category(Evolutions), Description("Inherit the Type Tutor compatibility values from the pre-evolution.")] public bool InheritChildSpecial { get; set; } = true; #endregion } }