From 9e7046564c159bca48d5f7d60dec382f97676080 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sun, 17 Mar 2024 14:44:54 -0500 Subject: [PATCH] Revise naive ability deferral logic for gen9 Closes #4221 HA->1->2 requires a 2-step check --- .../Legality/Encounters/Templates/Gen9/EncounterDist9.cs | 9 ++++++++- .../Encounters/Templates/Gen9/EncounterFixed9.cs | 9 ++++++++- .../Encounters/Templates/Gen9/EncounterMight9.cs | 9 ++++++++- .../Encounters/Templates/Gen9/EncounterOutbreak9.cs | 9 ++++++++- .../Encounters/Templates/Gen9/EncounterStatic9.cs | 9 ++++++++- .../Legality/Encounters/Templates/Gen9/EncounterTera9.cs | 9 ++++++++- 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterDist9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterDist9.cs index 2cf7c300f..8fd78fd24 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterDist9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterDist9.cs @@ -353,7 +353,14 @@ private EncounterMatchRating IsMatchDeferred(PKM pk) } else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability { - if (Ability is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) + var a = Ability; + if (a is OnlyHidden) + { + if (!AbilityVerifier.CanAbilityPatch(9, PersonalTable.SV.GetFormEntry(Species, Form), pk.Species)) + return DeferredErrors; + a = num == 1 ? OnlyFirst : OnlySecond; + } + if (a is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) return DeferredErrors; } } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs index 484c30884..08c27090e 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs @@ -236,7 +236,14 @@ private EncounterMatchRating IsMatchDeferred(PKM pk) } else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability { - if (Ability is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) + var a = Ability; + if (a is OnlyHidden) + { + if (!AbilityVerifier.CanAbilityPatch(9, PersonalTable.SV.GetFormEntry(Species, Form), pk.Species)) + return EncounterMatchRating.DeferredErrors; + a = num == 1 ? OnlyFirst : OnlySecond; + } + if (a is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) return EncounterMatchRating.DeferredErrors; } } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterMight9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterMight9.cs index 0e1f53115..12ca01e43 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterMight9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterMight9.cs @@ -365,7 +365,14 @@ private EncounterMatchRating IsMatchDeferred(PKM pk) } else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability { - if (Ability is AbilityPermission.OnlyFirst or AbilityPermission.OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) + var a = Ability; + if (a is AbilityPermission.OnlyHidden) + { + if (!AbilityVerifier.CanAbilityPatch(9, PersonalTable.SV.GetFormEntry(Species, Form), pk.Species)) + return EncounterMatchRating.DeferredErrors; + a = num == 1 ? AbilityPermission.OnlyFirst : AbilityPermission.OnlySecond; + } + if (a is AbilityPermission.OnlyFirst or AbilityPermission.OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) return EncounterMatchRating.DeferredErrors; } } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterOutbreak9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterOutbreak9.cs index 49e0ac3ee..63ffed196 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterOutbreak9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterOutbreak9.cs @@ -217,7 +217,14 @@ private EncounterMatchRating IsMatchDeferred(PKM pk) } else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability { - if (Ability is AbilityPermission.OnlyFirst or AbilityPermission.OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) + var a = Ability; + if (a is AbilityPermission.OnlyHidden) + { + if (!AbilityVerifier.CanAbilityPatch(9, PersonalTable.SV.GetFormEntry(Species, Form), pk.Species)) + return EncounterMatchRating.DeferredErrors; + a = num == 1 ? AbilityPermission.OnlyFirst : AbilityPermission.OnlySecond; + } + if (a is AbilityPermission.OnlyFirst or AbilityPermission.OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) return EncounterMatchRating.DeferredErrors; } } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterStatic9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterStatic9.cs index 501f1e9d0..a8160c3be 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterStatic9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterStatic9.cs @@ -258,7 +258,14 @@ private EncounterMatchRating IsMatchDeferred(PKM pk) } else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability { - if (Ability is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) + var a = Ability; + if (a is OnlyHidden) + { + if (!AbilityVerifier.CanAbilityPatch(9, PersonalTable.SV.GetFormEntry(Species, Form), pk.Species)) + return EncounterMatchRating.DeferredErrors; + a = num == 1 ? OnlyFirst : OnlySecond; + } + if (a is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) return EncounterMatchRating.DeferredErrors; } } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterTera9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterTera9.cs index 749852c45..f851b732a 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterTera9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterTera9.cs @@ -289,7 +289,14 @@ private EncounterMatchRating IsMatchDeferred(PKM pk) } else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability { - if (Ability is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) + var a = Ability; + if (a is OnlyHidden) + { + if (!AbilityVerifier.CanAbilityPatch(9, PersonalTable.SV.GetFormEntry(Species, Form), pk.Species)) + return EncounterMatchRating.DeferredErrors; + a = num == 1 ? OnlyFirst : OnlySecond; + } + if (a is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(9, PersonalTable.SV.GetFormEntry(Species, Form))) return EncounterMatchRating.DeferredErrors; } }