diff --git a/PKHeX.Core/PKM/PKM.cs b/PKHeX.Core/PKM/PKM.cs index e4c0e01fd..9ca33004f 100644 --- a/PKHeX.Core/PKM/PKM.cs +++ b/PKHeX.Core/PKM/PKM.cs @@ -549,7 +549,7 @@ public bool InhabitedGeneration(int Generation, int species = -1) } } - /// + /// do { /// Checks if the PKM has its original met location. /// /// Returns false if the Met Location has been overwritten via generational transfer. @@ -561,23 +561,19 @@ public bool InhabitedGeneration(int Generation, int species = -1) /// True if valid, False if invalid. public virtual bool getGenderIsValid() { + int gender = Gender; int gv = PersonalInfo.Gender; if (gv == 255) - return Gender == 2; + return gender == 2; if (gv == 254) - return Gender == 1; + return gender == 1; if (gv == 0) - return Gender == 0; + return gender == 0; if (GenNumber >= 6) return true; - if ((PID & 0xFF) < gv) - return Gender == 1; - if (gv <= (PID & 0xFF)) - return Gender == 0; - - return false; + return gender == PKX.getGender(Species, PID, gv); } /// diff --git a/PKHeX.Core/PKM/PKX.cs b/PKHeX.Core/PKM/PKX.cs index 3f6aa7cdb..8a23cc622 100644 --- a/PKHeX.Core/PKM/PKX.cs +++ b/PKHeX.Core/PKM/PKX.cs @@ -470,14 +470,12 @@ public static uint getRandomPID(int species, int cg, int origin, int nature, int else if (bits != (pid & 0x00010001)) // keep ability bits continue; - // Gen 3/4/5: Gender derived from PID - uint gv = pid & 0xFF; if (gt == 255 || gt == 254 || gt == 0) // Set Gender(less) return pid; // PID can be anything - if (cg == 1 && gv <= gt) // Female - return pid; // PID Passes - if (cg == 0 && gv > gt) // Male - return pid; // PID Passes + + // Gen 3/4/5: Gender derived from PID + if (cg == getGender(species, pid, gt)) + return pid; } } @@ -1408,6 +1406,11 @@ public static int getG3Species(int g4index) /// Gender ID (0/1/2) /// This method should only be used for Generations 3-5 origin. public static int getGender(int species, uint PID) + { + int genderratio = Personal[species].Gender; + return getGender(species, PID, genderratio); + } + public static int getGender(int species, uint PID, int gv) { int genderratio = Personal[species].Gender; switch (genderratio) @@ -1415,7 +1418,7 @@ public static int getGender(int species, uint PID) case 255: return 2; case 254: return 1; case 0: return 0; - default: return (PID & 0xFF) < genderratio ? 1 : 0; + default: return (PID & 0xFF) <= genderratio ? 1 : 0; } } #region Gen 3 Species Table