using System; using System.Collections.Generic; using System.ComponentModel; namespace pkNX.Randomization; /// /// Randomization settings when randomizing a personal info instance. /// [Serializable] [TypeConverter(typeof(ExpandableObjectConverter))] 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 personal info instance 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 TM learn permission flags. [Category(Moves), Description("Enables randomizing the TM (Technical Machine) compatibility flags.")] public bool ModifyLearnsetTM { get; set; } = true; /// Permits randomizing the HM learn permission flags. [Category(Moves), Description("Enables randomizing the HM (Hidden Machine) compatibility flags.")] public bool ModifyLearnsetHM { get; set; } = true; /// Permits randomizing the move tutor permission flags. [Category(Moves), Description("Enables randomizing the move tutor compatibility flags.")] public bool ModifyLearnsetMoveTutors { get; set; } = true; /// Permits randomizing the type tutor permission flags. [Category(Moves), Description("Enables randomizing the type tutor compatibility flags.")] public bool ModifyLearnsetTypeTutors { get; set; } /// 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 float 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 float 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 float LearnMoveTutorPercent { get; set; } = 30; #endregion #region Types /// Permits modification of elemental types. [Category(Types), Description("Enables a PKM's Type to be modified.")] public bool ModifyTypes { get; set; } = true; /// Option to modify the elemental types. [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 float SameTypeChance { get; set; } = 50; #endregion #region Ability /// Toggle to permit modification of abilities. [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 abilities. [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 float SameAbilityChance { get; set; } = 100; #endregion #region Stats /// Permits modification of Base Stats. [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 Base Stats. [Category(Stats), Description("Shuffles the PKM's base stats after any modifications have been made.")] public bool ShuffleStats { get; set; } = true; /// Permits randomizing the HP stat. [Category(Stats), Description("Permits randomizing the HP base stat.")] public bool HP { get; set; } = true; /// Permits randomizing the Attack stat. [Category(Stats), Description("Permits randomizing the Attack base stat.")] public bool ATK { get; set; } = true; /// Permits randomizing the Defense stat. [Category(Stats), Description("Permits randomizing the Defense base stat.")] public bool DEF { get; set; } = true; /// Permits randomizing the Special Attack stat. [Category(Stats), Description("Permits randomizing the Special Attack base stat.")] public bool SPA { get; set; } = true; /// Permits randomizing the Special Defense stat. [Category(Stats), Description("Permits randomizing the Special Defense base stat.")] public bool SPD { get; set; } = true; /// Permits randomizing the Speed stat. [Category(Stats), Description("Permits randomizing the Speed base stat.")] public bool SPE { get; set; } = true; /// /// Flags to edit the stats when randomizing. /// public IReadOnlyList StatsToRandomize => new[] {HP, ATK, DEF, SPE, SPA, SPD}; #endregion #region Misc /// Option permitting modification of Catch Rate. [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 Held Items. [Category(Misc), Description("Enables a PKM's held items 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 float AlwaysHeldItemChance { get; set; } = 20; /// Permits modification of Egg Groups. [Category(Misc), Description("Enables a PKM's egg groups to be modified.")] public bool ModifyEgg { get; set; } /// Chance both egg groups are the same. [Category(Misc), Description("Percentage chance that both egg groups will be the same.")] public float 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 float 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 float 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 float 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 float 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 }