diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs index e4990fb22..6fa6e32f8 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs @@ -251,23 +251,8 @@ namespace PKHeX.Core return Form == evo.Form || FormInfo.IsFormChangeable(Species, Form, pkm.Form, pkm.Format); } - protected virtual bool IsMatchEggLocation(PKM pkm) - { - if (pkm.IsEgg) // unhatched - { - if (!EggEncounter) - return false; - if (EggLocation != pkm.Met_Location) - return pkm.Met_Location == Locations.LinkTrade6 && pkm.Egg_Location == EggLocation; - return pkm.Egg_Location == 0; - } - - if (EggLocation == pkm.Egg_Location) - return true; - - // Only way to mismatch is to be a Link Traded egg. - return EggEncounter && pkm.Egg_Location == Locations.LinkTrade6; - } + // override me if the encounter type has any eggs + protected virtual bool IsMatchEggLocation(PKM pkm) => pkm.Egg_Location == 0; private bool IsMatchGender(PKM pkm) { diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic4.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic4.cs index 9d0365c47..03e5c7392 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic4.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic4.cs @@ -30,42 +30,33 @@ namespace PKHeX.Core return true; var locs = GetRoamLocations(Species, pk4.EncounterType); - return locs.Contains(pkm.Met_Location); + return locs.Contains(pk4.Met_Location); } protected override bool IsMatchEggLocation(PKM pkm) { - if (pkm.Egg_Location == EggLocation) - { - if (EggLocation == 0) - return true; + var eggloc = pkm.Egg_Location; + if (!EggEncounter) + return eggloc == 0; - // Check the inverse scenario for 4->5 eggs - if (!Locations.IsPtHGSSLocationEgg(EggLocation)) + // Transferring 4->5 clears Pt/HG/SS location value and keeps Faraway Place + if (pkm is not G4PKM pk4) + { + if (eggloc == Locations.LinkTrade4) return true; - return pkm.Format == 4; + var cmp = Locations.IsPtHGSSLocationEgg(EggLocation) ? Locations.Faraway4 : EggLocation; + return eggloc == cmp; } - if (pkm.IsEgg) // unhatched - { - if (EggLocation != pkm.Met_Location) - return false; - return pkm.Egg_Location == 0; - } + if (!pk4.IsEgg) // hatched + return eggloc == EggLocation || eggloc == Locations.LinkTrade4; - // Only way to mismatch is to be a Link Traded egg, or traded to Pt/HG/SS and hatched there. - if (pkm.Egg_Location == Locations.LinkTrade4) - return true; - - // check Pt/HGSS data - if (pkm.Format == 4) + // Unhatched: + if (eggloc != EggLocation) return false; - - if (!Locations.IsPtHGSSLocationEgg(EggLocation)) // non-Pt/HG/SS egg gift + if (pk4.Met_Location is not 0 or Locations.LinkTrade4) return false; - - // transferring 4->5 clears Pt/HG/SS location value and keeps Faraway Place - return pkm.Egg_Location == Locations.Faraway4; + return true; } protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk) diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic5.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic5.cs index 2fce317dd..0d707b44d 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic5.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic5.cs @@ -29,20 +29,19 @@ namespace PKHeX.Core protected override bool IsMatchEggLocation(PKM pkm) { - if (pkm.IsEgg) // unhatched - { - if (!EggEncounter) - return false; - if (EggLocation != pkm.Met_Location) - return pkm.Met_Location == Locations.LinkTrade5 && pkm.Egg_Location == EggLocation; - return pkm.Egg_Location == 0; - } + var eggloc = pkm.Egg_Location; + if (!EggEncounter) + return eggloc == EggLocation; - if (EggLocation == pkm.Egg_Location) - return true; + if (!pkm.IsEgg) // hatched + return eggloc == EggLocation || eggloc == Locations.LinkTrade5; - // Only way to mismatch is to be a Link Traded egg. - return EggEncounter && pkm.Egg_Location == Locations.LinkTrade5; + // Unhatched: + if (eggloc != EggLocation) + return false; + if (pkm.Met_Location is not 0 or Locations.LinkTrade5) + return false; + return true; } private static readonly int[] Roaming_MetLocation_BW = diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic6.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic6.cs index 1de63b5e0..7082a9052 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic6.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic6.cs @@ -30,6 +30,23 @@ return loc is 180 or 186 or 194; } + protected override bool IsMatchEggLocation(PKM pkm) + { + var eggloc = pkm.Egg_Location; + if (!EggEncounter) + return eggloc == EggLocation; + + if (!pkm.IsEgg) // hatched + return eggloc == EggLocation || eggloc == Locations.LinkTrade6; + + // Unhatched: + if (eggloc != EggLocation) + return false; + if (pkm.Met_Location is not 0 or Locations.LinkTrade6) + return false; + return true; + } + protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk) { base.ApplyDetails(sav, criteria, pk); diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic7.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic7.cs index b0792a67d..75f6e5cb4 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic7.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic7.cs @@ -23,6 +23,23 @@ namespace PKHeX.Core return base.IsMatchLocation(pkm); } + protected override bool IsMatchEggLocation(PKM pkm) + { + var eggloc = pkm.Egg_Location; + if (!EggEncounter) + return eggloc == EggLocation; + + if (!pkm.IsEgg) // hatched + return eggloc == EggLocation || eggloc == Locations.LinkTrade6; + + // Unhatched: + if (eggloc != EggLocation) + return false; + if (pkm.Met_Location is not 0 or Locations.LinkTrade6) + return false; + return true; + } + protected override bool IsMatchForm(PKM pkm, DexLevel evo) { if (SkipFormCheck) diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticShadow.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticShadow.cs index fe25990b7..845cc3f87 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticShadow.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticShadow.cs @@ -41,11 +41,6 @@ namespace PKHeX.Core 113, // Pyrite Town }; - protected override bool IsMatchEggLocation(PKM pkm) - { - return true; // transfer location verified later - } - protected override bool IsMatchLocation(PKM pkm) { if (pkm.Format != 3) diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 4/194 - Egg - B7B3E1614DCB Primo Wooper.pk4 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 4/194 - Egg - B7B3E1614DCB Primo Wooper.pk4 new file mode 100644 index 000000000..d03f74ed4 Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 4/194 - Egg - B7B3E1614DCB Primo Wooper.pk4 differ diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 5/440 - Egg - 5B70552258BA Breeder Happiny.pk5 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 5/440 - Egg - 5B70552258BA Breeder Happiny.pk5 new file mode 100644 index 000000000..3963ce855 Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 5/440 - Egg - 5B70552258BA Breeder Happiny.pk5 differ diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 5/636 - Egg - F2C5552258BA Breeder Larvesta.pk5 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 5/636 - Egg - F2C5552258BA Breeder Larvesta.pk5 new file mode 100644 index 000000000..ed8810ad9 Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 5/636 - Egg - F2C5552258BA Breeder Larvesta.pk5 differ diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 6 Static/360 - Egg - 4E07D3239217 Hot Springs Wynaut.pk6 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 6 Static/360 - Egg - 4E07D3239217 Hot Springs Wynaut.pk6 new file mode 100644 index 000000000..a7d352001 Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 6 Static/360 - Egg - 4E07D3239217 Hot Springs Wynaut.pk6 differ diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Static/133 - Egg - 9FD9E55BFB28 Daycare Eevee.pk7 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Static/133 - Egg - 9FD9E55BFB28 Daycare Eevee.pk7 new file mode 100644 index 000000000..9ca006abe Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Static/133 - Egg - 9FD9E55BFB28 Daycare Eevee.pk7 differ