using System; namespace PKHeX.Core { public static class GenderApplicator { /// /// Sets the value, with special consideration for the values which derive the value. /// /// Pokémon to modify. /// Desired value to set. public static void SetGender(this PKM pk, string gender) { int g = string.IsNullOrEmpty(gender) ? pk.GetSaneGender() : PKX.GetGenderFromString(gender); pk.SetGender(g); } /// /// Sets the value, with special consideration for the values which derive the value. /// /// Pokémon to modify. /// Desired value to set. public static void SetGender(this PKM pk, int gender) { gender = Math.Min(2, Math.Max(0, gender)); if (pk.Format <= 2) { pk.SetAttackIVFromGender(gender); } else if (pk.Format <= 5) { pk.SetPIDGender(gender); pk.Gender = gender; } else { pk.Gender = gender; } } /// /// Sanity checks the provided value, and returns a sane value. /// /// /// Most-legal value public static int GetSaneGender(this PKM pk) { int gt = pk.PersonalInfo.Gender; switch (gt) { case 255: return 2; // Genderless case 254: return 1; // Female-Only case 0: return 0; // Male-Only } if (!pk.IsGenderValid()) return PKX.GetGenderFromPIDAndRatio(pk.PID, gt); return pk.Gender; } /// /// Updates the for a Generation 1/2 format . /// /// Pokémon to modify. /// Desired . public static void SetAttackIVFromGender(this PKM pk, int gender) { var rnd = Util.Rand; while (pk.Gender != gender) pk.IV_ATK = rnd.Next(16); } } }