public bool Compare(Frame frame) { // Check the nature first if (Natures != null) { // If the frame can be synchronized, it doesn't need to pass the check if (frame.EncounterMod != EncounterMod.Synchronize) { bool test = Natures.Any(nature => nature == frame.Nature); if (!test) { return(false); } } } if (synchOnly) { if (!frame.Synchable) { return(false); } } if (!GenderFilter.Filter(frame.GenderValue)) { return(false); } if (!GenderFilter.Filter(frame.EncounterMod)) { return(false); } // For 3rd Gen eggs - if an egg is not generated on that frame, ignore it if (frame.FrameType == FrameType.RSBredLower) { // need to replace this now that we're using numbered natures if (frame.Number == 0) { return(false); } } // Go through and check each IV against what the user has required. // Skip if it's a FrameType that doesn't use IVs if (frame.FrameType != FrameType.Method5Natures && frame.FrameType != FrameType.Gen4Normal && frame.FrameType != FrameType.Gen4International && frame.FrameType != FrameType.RSBredLower) { if (ABcheck) { uint frameIv = frame.Hp; if (frame.DisplayHp == "A") { frameIv = compareHpA; } if (frame.DisplayHp == "B") { frameIv = compareHpB; } if (!CompareIV(hpCompare, frameIv, hpValue)) { return(false); } frameIv = frame.Atk; if (frame.DisplayAtk == "A") { frameIv = compareAtkA; } if (frame.DisplayAtk == "B") { frameIv = compareAtkB; } if (!CompareIV(atkCompare, frameIv, atkValue)) { return(false); } frameIv = frame.Def; if (frame.DisplayDef == "A") { frameIv = compareDefA; } if (frame.DisplayDef == "B") { frameIv = compareDefB; } if (!CompareIV(defCompare, frameIv, defValue)) { return(false); } frameIv = frame.Spa; if (frame.DisplaySpa == "A") { frameIv = compareSpaA; } if (frame.DisplaySpa == "B") { frameIv = compareSpaB; } if (!CompareIV(spaCompare, frameIv, spaValue)) { return(false); } frameIv = frame.Spd; if (frame.DisplaySpd == "A") { frameIv = compareSpdA; } if (frame.DisplaySpd == "B") { frameIv = compareSpdB; } if (!CompareIV(spdCompare, frameIv, spdValue)) { return(false); } frameIv = frame.Spe; if (frame.DisplaySpe == "A") { frameIv = compareSpeA; } if (frame.DisplaySpe == "B") { frameIv = compareSpeB; } if (!CompareIV(speCompare, frameIv, speValue)) { return(false); } } else { if (frame.DisplayHp != "A" && frame.DisplayHp != "B") { if (!CompareIV(hpCompare, frame.Hp, hpValue)) { return(false); } } if (frame.DisplayAtk != "A" && frame.DisplayAtk != "B") { if (!CompareIV(atkCompare, frame.Atk, atkValue)) { return(false); } } if (frame.DisplayDef != "A" && frame.DisplayDef != "B") { if (!CompareIV(defCompare, frame.Def, defValue)) { return(false); } } if (frame.DisplaySpa != "A" && frame.DisplaySpa != "B") { if (!CompareIV(spaCompare, frame.Spa, spaValue)) { return(false); } } if (frame.DisplaySpd != "A" && frame.DisplaySpd != "B") { if (!CompareIV(spdCompare, frame.Spd, spdValue)) { return(false); } } if (frame.DisplaySpe != "A" && frame.DisplaySpe != "B") { if (!CompareIV(speCompare, frame.Spe, speValue)) { return(false); } } } } if (shinyOnly) { if (!frame.Shiny) { return(false); } } if (dreamWorld) { if (!frame.DreamAbility) { return(false); } } if (encounterSlots != null) { bool test = false; foreach (int slot in encounterSlots) { if (slot == frame.EncounterSlot) { test = true; break; } } if (!test) { return(false); } } if (ability != -1) { if ((ability == 0) && (frame.Ability != 0)) { return(false); } if ((ability == 1) && (frame.Ability != 1)) { return(false); } } return(true); }