public PokeWalkerEntry[] GetEntriesFor()
        {
            ushort[] evochildren = GetEvoChildren();

            List <PokeWalkerEntry> entries = new List <PokeWalkerEntry>();

            for (int i = 0; i < PokeWalkerCourse.PokeWalkerCourses.Length; i++)
            {
                PokeWalkerCourse course = PokeWalkerCourse.PokeWalkerCourses[i];

                if ((course.Language & (LangFlag)Math.Pow(2, (byte)Language)) != 0)
                {
                    for (int j = 0; j < 6; j++)
                    {
                        PokeWalkerEntry entry = course[j];

                        for (int k = 0; k < evochildren.Length; k++)
                        {
                            if (k == entry.NatID && entry.Level <= Level && entry.Female == (Gender == Gender.Female || Gender == Gender.Genderless))
                            {
                                entries.Add(entry);
                            }
                        }
                    }
                }
            }

            return(entries.ToArray());
        }
        private bool IsValidWalker()
        {
            byte nature = Nature;

            if (nature == 24)               //No Quirkies
            {
                return(false);
            }

            PokeWalkerEntry[] entries = null;

            List <uint> validPIDs = new List <uint>();

            if (entries = GetEntriesFor())
            {
                if (entries.Length == 0)
                {
                    return(false);
                }

                uint pid_seed = (uint)(((TID ^ SID) >> 8) ^ 0xFF) << 0x18;

                pid_seed += nature - (pid_seed % 25);

                if (GenderThresh > 0 && GenderThresh < 254)                   //Gender Forcing!
                {
                    bool female = (pid_seed % 256) < GenderThresh;

                    for (int i = 0; i < entries.Length; i++)
                    {
                        PokeWalkerEntry entry = entries[i];

                        uint pidcheck = pid_seed;

                        if (!entry.Female && female)
                        {
                            pidcheck += ((((GenderThresh - (pidcheck & 0xFF)) / 25) + 1) * 25);
                            if ((nature & 1) != (pidcheck & 1))
                            {
                                pidcheck += 25;
                            }
                        }
                        else if (entry.Female && !female)
                        {
                            pidcheck += (((((pidcheck & 0xFF) - GenderThresh) / 25) + 1) * 25);
                            if ((nature & 1) != (pidcheck & 1))
                            {
                                pidcheck -= 25;
                            }
                        }

                        validPIDs.Add(pidcheck);
                    }
                }

                for (int i = 0; i < validPIDs.Count; i++)
                {
                    if (PID == validPIDs[i])
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }