Fix encounter ability comparison

-1 is the 'no fixed ability parameters defined'

Closes #2041
(optimize abilitynumber check for early return)
This commit is contained in:
Kurt 2018-07-03 18:43:11 -07:00
parent 8e950e83b3
commit fdc4dd2811

View File

@ -55,7 +55,7 @@ private CheckResult VerifyAbility(LegalityAnalysis data, IReadOnlyList<int> abil
{
var EncounterMatch = data.EncounterMatch;
var eabil = GetEncounterFixedAbilityNumber(EncounterMatch);
if (eabil > 0)
if (eabil >= 0)
return VerifyFixedAbility(data, abilities, AbilityState.CanMismatch, eabil, abilnum);
var gen = data.Info.Generation;
@ -77,7 +77,7 @@ private CheckResult VerifyAbility345(LegalityAnalysis data, IReadOnlyList<int> a
var EncounterMatch = data.EncounterMatch;
int eabil = GetEncounterFixedAbilityNumber(EncounterMatch);
if (eabil > 0)
if (eabil >= 0)
return VerifyFixedAbility(data, abilities, state, eabil, abilnum);
int gen = data.Info.Generation;
@ -236,14 +236,18 @@ private CheckResult VerifyAbility5(LegalityAnalysis data, IReadOnlyList<int> abi
private CheckResult VerifyAbility6(LegalityAnalysis data)
{
var pkm = data.pkm;
if (pkm.AbilityNumber != 4)
return VALID;
// hidden abilities
var EncounterMatch = data.EncounterMatch;
if (EncounterMatch is EncounterSlot slot && pkm.AbilityNumber == 4)
if (EncounterMatch is EncounterSlot slot)
{
bool valid = slot.Permissions.DexNav || slot.Type == SlotType.FriendSafari || slot.Type == SlotType.Horde;
if (!valid)
return GetInvalid(V300);
}
if (Legal.Ban_NoHidden6.Contains(pkm.SpecForm) && pkm.AbilityNumber == 4)
if (Legal.Ban_NoHidden6.Contains(pkm.SpecForm))
return GetInvalid(V112);
return VALID;