diff --git a/PKHeX.Core/Legality/Areas/EncounterArea4.cs b/PKHeX.Core/Legality/Areas/EncounterArea4.cs index e6550de31..6e29de5bc 100644 --- a/PKHeX.Core/Legality/Areas/EncounterArea4.cs +++ b/PKHeX.Core/Legality/Areas/EncounterArea4.cs @@ -77,8 +77,12 @@ private IEnumerable GetSlotsMatching(IReadOnlyList if (slot.Species != evo.Species) continue; - if (slot.Form != evo.Form && !FormInfo.WildChangeFormAfter.Contains(slot.Species) && slot.Species != (int)Species.Unown) - break; + if (slot.Form != evo.Form && slot.Species is not (int)Species.Burmy) + { + // Unown forms are random, not specific form IDs + if (!slot.IsRandomUnspecificForm) + break; + } if (!slot.IsLevelWithinRange(lvl)) break; @@ -88,6 +92,7 @@ private IEnumerable GetSlotsMatching(IReadOnlyList } } + // original met level cannot be inferred private IEnumerable GetSlotsFuzzy(IReadOnlyList chain) { foreach (var slot in Slots) @@ -97,8 +102,12 @@ private IEnumerable GetSlotsFuzzy(IReadOnlyList cha if (slot.Species != evo.Species) continue; - if (slot.Form != evo.Form && !FormInfo.WildChangeFormAfter.Contains(slot.Species) && slot.Species != (int)Species.Unown) - break; + if (slot.Form != evo.Form && slot.Species is not (int)Species.Burmy) + { + // Unown forms are random, not specific form IDs + if (!slot.IsRandomUnspecificForm) + break; + } if (slot.LevelMin > evo.Level) break; diff --git a/PKHeX.Core/Legality/Areas/EncounterArea5.cs b/PKHeX.Core/Legality/Areas/EncounterArea5.cs index d541df943..23ddaa47d 100644 --- a/PKHeX.Core/Legality/Areas/EncounterArea5.cs +++ b/PKHeX.Core/Legality/Areas/EncounterArea5.cs @@ -60,7 +60,7 @@ public override IEnumerable GetMatchingSlots(PKM pkm, IReadOnlyLi if (!slot.IsLevelWithinRange(pkm.Met_Level)) break; - if (slot.Form != evo.Form && !FormInfo.WildChangeFormAfter.Contains(slot.Species)) + if (slot.Form != evo.Form) // no wild forms can change break; yield return slot; diff --git a/PKHeX.Core/Legality/Areas/EncounterArea6XY.cs b/PKHeX.Core/Legality/Areas/EncounterArea6XY.cs index 5e73e0814..aaf20bf4b 100644 --- a/PKHeX.Core/Legality/Areas/EncounterArea6XY.cs +++ b/PKHeX.Core/Legality/Areas/EncounterArea6XY.cs @@ -113,8 +113,9 @@ public override IEnumerable GetMatchingSlots(PKM pkm, IReadOnlyLi if (!slot.IsLevelWithinRange(pkm.Met_Level)) break; - if (slot.Form != evo.Form && !slot.IsRandomUnspecificForm && !FormInfo.WildChangeFormAfter.Contains(slot.Species)) + if (slot.Form != evo.Form && !slot.IsRandomUnspecificForm && slot.Species is not ((int)Species.Burmy or (int)Species.Furfrou)) { + // Only slot that can be form-mismatched via Pressure is Flabébé if (slot.Species != (int)Species.Flabébé) break; diff --git a/PKHeX.Core/Legality/Areas/EncounterArea7.cs b/PKHeX.Core/Legality/Areas/EncounterArea7.cs index 12609cec5..04374d9ee 100644 --- a/PKHeX.Core/Legality/Areas/EncounterArea7.cs +++ b/PKHeX.Core/Legality/Areas/EncounterArea7.cs @@ -60,7 +60,7 @@ public override IEnumerable GetMatchingSlots(PKM pkm, IReadOnlyLi if (!slot.IsLevelWithinRange(pkm.Met_Level)) break; - if (slot.Form != evo.Form && !FormInfo.WildChangeFormAfter.Contains(slot.Species)) + if (slot.Form != evo.Form && slot.Species is not ((int)Species.Furfrou or (int)Species.Oricorio)) { if (!slot.IsRandomUnspecificForm) // Minior, etc break; diff --git a/PKHeX.Core/Legality/Areas/EncounterArea8.cs b/PKHeX.Core/Legality/Areas/EncounterArea8.cs index d409fd8d9..cc2e6e90d 100644 --- a/PKHeX.Core/Legality/Areas/EncounterArea8.cs +++ b/PKHeX.Core/Legality/Areas/EncounterArea8.cs @@ -62,7 +62,7 @@ private IEnumerable GetUnboostedMatches(IReadOnlyList GetBoostedMatches(IReadOnlyList if (slot.LevelMin > BoostLevel) break; // Can't downlevel, only boost to 60. - if (slot.Form != evo.Form && !FormInfo.WildChangeFormAfter.Contains(evo.Species)) + if (slot.Form != evo.Form && slot.Species is not (int)Species.Rotom) break; if (Location != metLocation && !CanCrossoverTo(Location, metLocation, slot.SlotType))