private CheckResult VerifyBall(LegalityAnalysis data) { var EncounterMatch = data.EncounterMatch; var Info = data.Info; // Fixed ball cases -- can be only one ball ever switch (EncounterMatch) { case MysteryGift g: return(VerifyBallMysteryGift(data, g)); case EncounterTrade t: return(VerifyBallEquals(data, t.Ball)); case EncounterStatic s when s.Gift: return(VerifyBallEquals(data, s.Ball)); case EncounterSlot8GO _: // Already a strict match return(GetResult(true)); } // Capture / Inherit cases -- can be one of many balls var pkm = data.pkm; if (pkm.Species == (int)Species.Shedinja && data.EncounterMatch.Species != (int)Species.Shedinja) // Shedinja. For gen3, copy the ball from Nincada { // Only Gen3 origin Shedinja can copy the wild ball. // Evolution chains will indicate if it could have existed as Shedinja in Gen3. // The special move verifier has a similar check! if (Info.Generation != 3 || Info.EvoChainsAllGens[3].Count != 2) { return(VerifyBallEquals(data, (int)Poke)); // Pokeball Only } } if (pkm.Ball == (int)Heavy && Legal.AlolanCaptureNoHeavyBall.Contains(EncounterMatch.Species) && !EncounterMatch.EggEncounter && pkm.SM) { return(GetInvalid(LBallHeavy)); // Heavy Ball, can inherit if from egg (USUM fixed catch rate calc) } return(EncounterMatch switch { EncounterStatic e => VerifyBallStatic(data, e), EncounterSlot w => VerifyBallWild(data, w), EncounterEgg _ => VerifyBallEgg(data), EncounterInvalid _ => VerifyBallEquals(data, pkm.Ball), // ignore ball, pass whatever _ => VerifyBallEquals(data, (int)Poke) });
private CheckResult VerifyBall(LegalityAnalysis data) { var EncounterMatch = data.EncounterMatch; var Info = data.Info; // Fixed ball cases -- can be only one ball ever switch (EncounterMatch) { case MysteryGift g: return(VerifyBallMysteryGift(data, g)); case EncounterTrade t: return(VerifyBallEquals(data, t.Ball)); case EncounterStatic s when s.Gift: return(VerifyBallEquals(data, s.Ball)); } // Capture / Inherit cases -- can be one of many balls var pkm = data.pkm; if (pkm.Species == (int)Species.Shedinja && Info.Generation != 3 && data.EncounterMatch.Species != (int)Species.Shedinja) // Shedinja. For gen3, copy the ball from Nincada { return(VerifyBallEquals(data, (int)Poke)); // Pokeball Only } if (pkm.Ball == (int)Heavy && Legal.AlolanCaptureNoHeavyBall.Contains(EncounterMatch.Species) && !EncounterMatch.EggEncounter && pkm.SM) { return(GetInvalid(LBallHeavy)); // Heavy Ball, can inherit if from egg (USUM fixed catch rate calc) } return(EncounterMatch switch { EncounterStatic e => VerifyBallStatic(data, e), EncounterSlot w => VerifyBallWild(data, w), EncounterEgg _ => VerifyBallEgg(data), EncounterInvalid _ => VerifyBallEquals(data, pkm.Ball), // ignore ball, pass whatever _ => VerifyBallEquals(data, (int)Poke) });