private static IEnumerable <RibbonResult> GetInvalidRibbons6Any(PKM pkm, IRibbonSetCommon6 s6, int gen) { foreach (var p in GetInvalidRibbons6Memory(pkm, s6, gen)) { yield return(p); } bool untraded = pkm.IsUntraded; var iter = untraded ? GetInvalidRibbons6Untraded(pkm, s6) : GetInvalidRibbons6Traded(pkm, s6); foreach (var p in iter) { yield return(p); } bool allContest = s6.RibbonBitsContest().All(z => z); if (allContest ^ s6.RibbonContestStar && !(untraded && pkm.XY)) // if not already checked { yield return(new RibbonResult(nameof(s6.RibbonContestStar), s6.RibbonContestStar)); } const int mem_Chatelaine = 30; bool hasChampMemory = pkm.HT_Memory == mem_Chatelaine || pkm.OT_Memory == mem_Chatelaine; if (!hasChampMemory || s6.RibbonBattlerSkillful || s6.RibbonBattlerExpert) { yield break; } var result = new RibbonResult(nameof(s6.RibbonBattlerSkillful), false); result.Combine(new RibbonResult(nameof(s6.RibbonBattlerExpert))); yield return(result); }
private static IEnumerable <RibbonResult> GetInvalidRibbons6Traded(PKM pkm, IRibbonSetCommon6 s6) { if (s6.RibbonTraining) { const int req = 12; // only first 12 int count = pkm.SuperTrainingMedalCount(req); if (count < req) { yield return(new RibbonResult(nameof(s6.RibbonTraining))); } } const int mem_Champion = 27; bool hasChampMemory = pkm.HT_Memory == mem_Champion || pkm.OT_Memory == mem_Champion; if (!hasChampMemory || s6.RibbonChampionKalos || s6.RibbonChampionG6Hoenn) { yield break; } var result = new RibbonResult(nameof(s6.RibbonChampionKalos), false); result.Combine(new RibbonResult(nameof(s6.RibbonChampionG6Hoenn))); yield return(result); }
private static IEnumerable <RibbonResult> GetInvalidRibbons6Memory(PKM pkm, IRibbonSetCommon6 s6, int gen) { int contest = 0; int battle = 0; switch (gen) { case 3: contest = IsAllowedInContest4(pkm.Species) ? 40 : 20; battle = IsAllowedBattleFrontier(pkm.Species) ? 8 : 0; break; case 4: contest = IsAllowedInContest4(pkm.Species) ? 20 : 0; battle = IsAllowedBattleFrontier(pkm.Species) ? 6 : 0; break; } if (s6.RibbonCountMemoryContest > contest) { yield return(new RibbonResult(nameof(s6.RibbonCountMemoryContest))); } if (s6.RibbonCountMemoryBattle > battle) { yield return(new RibbonResult(nameof(s6.RibbonCountMemoryBattle))); } }
private static IEnumerable <RibbonResult> GetInvalidRibbons6Any(PKM pkm, IRibbonSetCommon6 s6, int gen) { foreach (var p in GetInvalidRibbons6Memory(pkm, s6, gen)) { yield return(p); } bool untraded = pkm.IsUntraded; var iter = untraded ? GetInvalidRibbons6Untraded(pkm, s6) : GetInvalidRibbons6Traded(pkm, s6); foreach (var p in iter) { yield return(p); } var contest = s6.RibbonBitsContest(); bool allContest = contest.All(z => z); if (allContest ^ s6.RibbonContestStar && !(untraded && pkm.XY)) // if not already checked { yield return(new RibbonResult(nameof(s6.RibbonContestStar), s6.RibbonContestStar)); } // Each contest victory requires a contest participation; each participation gives 20 OT affection (not current trainer). var affect = pkm.OT_Affection; var contMemory = s6.RibbonNamesContest(); int contCount = 0; var present = contMemory.Where((_, i) => contest[i] && affect < 20 * ++contCount); foreach (var rib in present) { yield return(new RibbonResult(rib)); } const int mem_Chatelaine = 30; bool hasChampMemory = pkm.HT_Memory == mem_Chatelaine || pkm.OT_Memory == mem_Chatelaine; if (!IsAllowedBattleFrontier(pkm.Species)) { if (hasChampMemory || s6.RibbonBattlerSkillful) // having memory and not ribbon is too rare, just flag here. { yield return(new RibbonResult(nameof(s6.RibbonBattlerSkillful))); } if (s6.RibbonBattlerExpert) { yield return(new RibbonResult(nameof(s6.RibbonBattlerExpert))); } yield break; } if (!hasChampMemory || s6.RibbonBattlerSkillful || s6.RibbonBattlerExpert) { yield break; } var result = new RibbonResult(nameof(s6.RibbonBattlerSkillful), false); result.Combine(new RibbonResult(nameof(s6.RibbonBattlerExpert))); yield return(result); }
internal static bool[] RibbonBitsContest(this IRibbonSetCommon6 set) { return(new[] { set.RibbonMasterCoolness, set.RibbonMasterBeauty, set.RibbonMasterCuteness, set.RibbonMasterCleverness, set.RibbonMasterToughness, }); }
internal static void CopyRibbonSetCommon6(this IRibbonSetCommon6 set, IRibbonSetCommon6 dest) { dest.RibbonChampionKalos = set.RibbonChampionKalos; dest.RibbonChampionG6Hoenn = set.RibbonChampionG6Hoenn; dest.RibbonBestFriends = set.RibbonBestFriends; dest.RibbonTraining = set.RibbonTraining; dest.RibbonBattlerSkillful = set.RibbonBattlerSkillful; dest.RibbonBattlerExpert = set.RibbonBattlerExpert; dest.RibbonContestStar = set.RibbonContestStar; dest.RibbonMasterCoolness = set.RibbonMasterCoolness; dest.RibbonMasterBeauty = set.RibbonMasterBeauty; dest.RibbonMasterCuteness = set.RibbonMasterCuteness; dest.RibbonMasterCleverness = set.RibbonMasterCleverness; dest.RibbonMasterToughness = set.RibbonMasterToughness; dest.RibbonCountMemoryContest = set.RibbonCountMemoryContest; dest.RibbonCountMemoryBattle = set.RibbonCountMemoryBattle; }
private static void InvertDeadlockContest(IRibbonSetCommon6 c6, LegalityAnalysis la, bool desiredState) { // RibbonContestStar depends on having all contest ribbons, and having RibbonContestStar requires all. // Since the above logic sets individual ribbons, we must try setting this deadlock pair manually. if (c6.RibbonMasterToughness == desiredState || c6.RibbonContestStar == desiredState) { return; } la.ResetParse(); c6.RibbonMasterToughness = c6.RibbonContestStar = desiredState; bool result = UpdateIsValid(la); if (!result) { c6.RibbonMasterToughness = c6.RibbonContestStar = !desiredState; } }
internal static bool[] RibbonBits(this IRibbonSetCommon6 set) { return(new[] { set.RibbonChampionKalos, set.RibbonChampionG6Hoenn, //set.RibbonBestFriends, set.RibbonTraining, set.RibbonBattlerSkillful, set.RibbonBattlerExpert, set.RibbonContestStar, set.RibbonMasterCoolness, set.RibbonMasterBeauty, set.RibbonMasterCuteness, set.RibbonMasterCleverness, set.RibbonMasterToughness, }); }
private static IEnumerable <RibbonResult> GetInvalidRibbons6Untraded(PKM pkm, IRibbonSetCommon6 s6) { if (pkm.XY) { if (s6.RibbonChampionG6Hoenn) { yield return(new RibbonResult(nameof(s6.RibbonChampionG6Hoenn))); } if (s6.RibbonContestStar) { yield return(new RibbonResult(nameof(s6.RibbonContestStar))); } if (s6.RibbonMasterCoolness) { yield return(new RibbonResult(nameof(s6.RibbonMasterCoolness))); } if (s6.RibbonMasterBeauty) { yield return(new RibbonResult(nameof(s6.RibbonMasterBeauty))); } if (s6.RibbonMasterCuteness) { yield return(new RibbonResult(nameof(s6.RibbonMasterCuteness))); } if (s6.RibbonMasterCleverness) { yield return(new RibbonResult(nameof(s6.RibbonMasterCleverness))); } if (s6.RibbonMasterToughness) { yield return(new RibbonResult(nameof(s6.RibbonMasterToughness))); } } else if (pkm.AO) { if (s6.RibbonChampionKalos) { yield return(new RibbonResult(nameof(s6.RibbonChampionKalos))); } } }
internal static string[] RibbonNamesContest(this IRibbonSetCommon6 _) => RibbonSetNamesCommon6Contest;
internal static string[] RibbonNamesBool(this IRibbonSetCommon6 _) => RibbonSetNamesCommon6Bool;