From 5887f1be6fea1f2c05d0da89462e22903282ddcb Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 9 Mar 2017 17:19:36 -0800 Subject: [PATCH] Detect ability capsule usage on mystery gifts Closes #932 --- PKHeX/Legality/Checks.cs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/PKHeX/Legality/Checks.cs b/PKHeX/Legality/Checks.cs index c26748170..8abba65a3 100644 --- a/PKHeX/Legality/Checks.cs +++ b/PKHeX/Legality/Checks.cs @@ -918,9 +918,15 @@ private void verifyAbility() { var wc = EncounterMatch as WC6; var type = wc?.AbilityType; - if (type < 3 && pkm.AbilityNumber != 1 << type) // set number - AddLine(Severity.Invalid, "Ability does not match Mystery Gift.", CheckIdentifier.Ability); - else if (type == 3 && pkm.AbilityNumber == 4) // 1/2 only + int abilNumber = pkm.AbilityNumber; + if (type < 3 && abilNumber != 1 << type) // set number + { + if (type < 2 && abilNumber < 3 && abilities[0] != abilities[1]) // 0/1 required, not hidden, and ability can be changed + AddLine(Severity.Valid, "Ability modified with Ability Capsule.", CheckIdentifier.Ability); + else + AddLine(Severity.Invalid, "Ability does not match Mystery Gift.", CheckIdentifier.Ability); + } + else if (type == 3 && abilNumber == 4) // 1/2 only AddLine(Severity.Invalid, "Ability does not match Mystery Gift.", CheckIdentifier.Ability); } if (EncounterType == typeof(EncounterSlot[]) && pkm.AbilityNumber == 4) @@ -943,9 +949,15 @@ private void verifyAbility() { var wc = EncounterMatch as WC7; var type = wc?.AbilityType; - if (type < 3 && pkm.AbilityNumber != 1 << type) // set number - AddLine(Severity.Invalid, "Ability does not match Mystery Gift.", CheckIdentifier.Ability); - else if (type == 3 && pkm.AbilityNumber == 4) // 1/2 only + int abilNumber = pkm.AbilityNumber; + if (type < 3 && abilNumber != 1 << type) // set number + { + if (type < 2 && abilNumber < 3 && abilities[0] != abilities[1]) // 0/1 required, not hidden, and ability can be changed + AddLine(Severity.Valid, "Ability modified with Ability Capsule.", CheckIdentifier.Ability); + else + AddLine(Severity.Invalid, "Ability does not match Mystery Gift.", CheckIdentifier.Ability); + } + else if (type == 3 && abilNumber == 4) // 1/2 only AddLine(Severity.Invalid, "Ability does not match Mystery Gift.", CheckIdentifier.Ability); } if (EncounterType == typeof(EncounterSlot[]) && pkm.AbilityNumber == 4)