mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-05-15 08:31:21 -05:00
Add hidden ability mismatch check for fixed abils
minor refactoring remove GameVersion.Pt unreachable code for eggmoves
This commit is contained in:
parent
cfc99f064f
commit
95eefb45ff
|
|
@ -1382,16 +1382,8 @@ private void verifyAbility()
|
|||
(EncounterMatch as EncounterTrade)?.Ability ??
|
||||
(EncounterMatch as EncounterLink)?.Ability;
|
||||
|
||||
if ((AbilityUnchanged ?? false) && EncounterAbility != null && EncounterAbility != 0 && pkm.AbilityNumber != EncounterAbility)
|
||||
{
|
||||
if (pkm.Format >= 6 && abilities[0] != abilities[1] && pkm.AbilityNumber < 4) //Ability Capsule
|
||||
AddLine(Severity.Valid, V109, CheckIdentifier.Ability);
|
||||
else if (pkm.Gen3 && EncounterMatch is EncounterTrade && EncounterAbility == 1 << abilval) // Edge case (Static PID?)
|
||||
AddLine(Severity.Valid, V115, CheckIdentifier.Ability);
|
||||
else
|
||||
AddLine(Severity.Invalid, V223, CheckIdentifier.Ability);
|
||||
return;
|
||||
}
|
||||
if (EncounterAbility != null && verifySetAbility(EncounterAbility, AbilityUnchanged, abilities, abilval))
|
||||
return; // result added via verifySetAbility
|
||||
|
||||
switch (pkm.GenNumber)
|
||||
{
|
||||
|
|
@ -1408,6 +1400,26 @@ private void verifyAbility()
|
|||
else
|
||||
AddLine(Severity.Valid, V115, CheckIdentifier.Ability);
|
||||
}
|
||||
private bool verifySetAbility(int? EncounterAbility, bool? AbilityUnchanged, int[] abilities, int abilval)
|
||||
{
|
||||
if (pkm.AbilityNumber == 4 && EncounterAbility != 4)
|
||||
{
|
||||
AddLine(Severity.Invalid, V108, CheckIdentifier.Ability);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(AbilityUnchanged ?? false) || EncounterAbility == 0 || pkm.AbilityNumber == EncounterAbility)
|
||||
return false;
|
||||
|
||||
if (pkm.Format >= 6 && abilities[0] != abilities[1] && pkm.AbilityNumber < 4) // Ability Capsule
|
||||
AddLine(Severity.Valid, V109, CheckIdentifier.Ability);
|
||||
else if (pkm.Gen3 && EncounterMatch is EncounterTrade && EncounterAbility == 1 << abilval)
|
||||
// Edge case (Static PID?)
|
||||
AddLine(Severity.Valid, V115, CheckIdentifier.Ability);
|
||||
else
|
||||
AddLine(Severity.Invalid, V223, CheckIdentifier.Ability);
|
||||
return true;
|
||||
}
|
||||
private bool? verifyAbilityPreCapsule(int[] abilities, int abilval)
|
||||
{
|
||||
// CXD pokemon could have any ability without maching PID
|
||||
|
|
@ -1433,13 +1445,12 @@ private void verifyAbility()
|
|||
private bool? verifyAbilityGen3Transfer(int[] abilities, int abilval, int Species_g3)
|
||||
{
|
||||
var abilities_g3 = PersonalTable.E[Species_g3].Abilities.Where(a => a != 0).Distinct().ToArray();
|
||||
if (abilities_g3.Length == 2)
|
||||
// For non-GC, it has 2 abilities in gen 3, must match PID
|
||||
if (abilities_g3.Length == 2) // Excluding Colosseum/XD, a gen3 pkm must match PID if it has 2 unique abilities
|
||||
return pkm.Version != (int)GameVersion.CXD;
|
||||
|
||||
var Species_g45 = Math.Max(EvoChainsAllGens[4].FirstOrDefault()?.Species ?? 0, pkm.Format == 5 ? EvoChainsAllGens[5].FirstOrDefault()?.Species ?? 0 : 0);
|
||||
if (Species_g45 > Species_g3)
|
||||
// it have evolved in gen 4 or 5 games, ability must match PID
|
||||
int Species_g4 = EvoChainsAllGens[4].FirstOrDefault()?.Species ?? 0;
|
||||
int Species_g5 = pkm.Format == 5 ? EvoChainsAllGens[5].FirstOrDefault()?.Species ?? 0 : 0;
|
||||
if (Math.Max(Species_g5, Species_g4) > Species_g3) // it has evolved in either gen 4 or gen 5; the ability must match PID
|
||||
return false;
|
||||
|
||||
var Evolutions_g45 = Math.Max(EvoChainsAllGens[4].Length, pkm.Format == 5 ? EvoChainsAllGens[5].Length : 0);
|
||||
|
|
@ -2783,7 +2794,6 @@ private CheckResult[] parseMovesForSmeargle(int[] Moves)
|
|||
}
|
||||
private GameVersion[] getBaseMovesIsEggGames()
|
||||
{
|
||||
GameVersion[] Games = { };
|
||||
switch (pkm.GenNumber)
|
||||
{
|
||||
case 1:
|
||||
|
|
@ -2823,15 +2833,13 @@ private GameVersion[] getBaseMovesIsEggGames()
|
|||
case GameVersion.B:
|
||||
case GameVersion.W:
|
||||
return new[] { GameVersion.BW };
|
||||
case GameVersion.Pt:
|
||||
return new[] { GameVersion.Pt };
|
||||
case GameVersion.B2:
|
||||
case GameVersion.W2:
|
||||
return new[] { GameVersion.B2W2 };
|
||||
}
|
||||
break;
|
||||
}
|
||||
return Games;
|
||||
return new GameVersion[] {};
|
||||
}
|
||||
private CheckResult[] parseMovesIsEggPreRelearn(int[] Moves, int[] SpecialMoves, bool allowinherited)
|
||||
{
|
||||
|
|
@ -2919,7 +2927,6 @@ private CheckResult[] parseMovesWasEggPreRelearn(int[] Moves, List<int>[] validL
|
|||
|
||||
if (res.All(r => r.Valid)) // moves is satisfactory
|
||||
return res;
|
||||
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user