diff --git a/PKHeX.Core/Game/Enums/GameVersion.cs b/PKHeX.Core/Game/Enums/GameVersion.cs
index 6f02718de..667bc2712 100644
--- a/PKHeX.Core/Game/Enums/GameVersion.cs
+++ b/PKHeX.Core/Game/Enums/GameVersion.cs
@@ -439,47 +439,20 @@ public enum GameVersion
///
Gen8,
- ///
- /// Generation 1/2 Game Boy Cartridge Era Only
- ///
- ///
- /// Since the original run of and could not transfer to future games,
- /// any special encounters (event data) can only be allowed if the savedata originated from that era.
- ///
- GBCartEraOnly,
-
///
/// Pocket Monsters Stadium data origin identifier
///
- ///
StadiumJ,
///
/// Pokémon Stadium data origin identifier
///
- ///
Stadium,
///
/// Pokémon Stadium 2 data origin identifier
///
- ///
Stadium2,
-
- ///
- /// Generation 1 Game Boy Cartridge Era Only data origin identifier
- ///
- EventsGBGen1,
-
- ///
- /// Generation 2 Game Boy Cartridge Era Only data origin identifier
- ///
- EventsGBGen2,
-
- ///
- /// Generation 1/2 3DS Virtual Console data origin identifier
- ///
- VCEvents,
#endregion
}
}
diff --git a/PKHeX.Core/Game/GameUtil.cs b/PKHeX.Core/Game/GameUtil.cs
index eda6a66b0..99eacd6ff 100644
--- a/PKHeX.Core/Game/GameUtil.cs
+++ b/PKHeX.Core/Game/GameUtil.cs
@@ -181,22 +181,17 @@ public static bool Contains(this GameVersion g1, GameVersion g2)
case RB:
return g2 == RD || g2 == BU || g2 == GN;
case Stadium:
- case EventsGBGen1:
- case VCEvents:
case RBY:
return RB.Contains(g2) || g2 == YW;
case Gen1:
- return RBY.Contains(g2) || g2 == Stadium || g2 == EventsGBGen1 || g2 == VCEvents;
+ return RBY.Contains(g2) || g2 == Stadium;
case GS: return g2 == GD || g2 == SV;
case Stadium2:
- case EventsGBGen2:
case GSC:
return GS.Contains(g2) || g2 == C;
case Gen2:
- return GSC.Contains(g2) || g2 == Stadium2 || g2 == EventsGBGen2;
- case GBCartEraOnly:
- return g2 == Stadium || g2 == Stadium2 || g2 == EventsGBGen1 || g2 == EventsGBGen2;
+ return GSC.Contains(g2) || g2 == Stadium2;
case RS: return g2 == R || g2 == S;
case RSE:
diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs
index 686b9d26d..db78c220b 100644
--- a/PKHeX.Core/Legality/Core.cs
+++ b/PKHeX.Core/Legality/Core.cs
@@ -342,16 +342,8 @@ public static bool IsValidMissingLanguage(PKM pkm)
return pkm.Format == 5 && pkm.BW;
}
- public static string GetG1OT_GFMew(int lang) => lang == (int)LanguageID.Japanese ? "ゲーフリ" : "GF";
public static string GetG5OT_NSparkle(int lang) => lang == (int)LanguageID.Japanese ? "N" : "N";
- public const string Stadium1JP = "スタジアム";
-
- public static int GetGBStadiumOTID_JPN(GameVersion s)
- {
- return s == GameVersion.Stadium2 ? 2000 : 1999;
- }
-
public static int GetMaxLengthOT(int gen, LanguageID lang)
{
switch (lang)
diff --git a/PKHeX.Core/Legality/Encounters/Data/Encounters1.cs b/PKHeX.Core/Legality/Encounters/Data/Encounters1.cs
index 9afd6bc65..ec3bb62f8 100644
--- a/PKHeX.Core/Legality/Encounters/Data/Encounters1.cs
+++ b/PKHeX.Core/Legality/Encounters/Data/Encounters1.cs
@@ -151,14 +151,23 @@ internal static class Encounters1
new EncounterTrade1(047, 05, RBY), // Parasect - Trade Tangela (GSC 5)
});
+ private static readonly int[] Flawless15 = {15, 15, 15, 15, 15, 15};
+
internal static readonly EncounterStatic1E[] StaticEventsVC =
{
- new EncounterStatic1E(151, 5, VCEvents) {IVs = new[] {15, 15, 15, 15, 15, 15}, Language = EncounterGBLanguage.Any }, // Event Mew
+ // Event Mew
+ new EncounterStatic1E(151, 5, RBY) { IVs = Flawless15, TID = 22796, OT_Name = "GF", Language = EncounterGBLanguage.International },
+ new EncounterStatic1E(151, 5, RBY) { IVs = Flawless15, TID = 22796, OT_Name = "ゲーフリ" },
};
internal static readonly EncounterStatic1E[] StaticEventsGB =
{
- new EncounterStatic1E(054, 15, Stadium) {Moves = new[] {133, 10}, Language = EncounterGBLanguage.Any }, // Stadium Psyduck (Amnesia)
+ // Stadium 1: Psyduck
+ new EncounterStatic1E(054, 15, Stadium) {Moves = new[] {133, 10}, TID = 1999, OT_Name = "スタジアム" }, // Stadium Psyduck (Amnesia)
+ new EncounterStatic1E(054, 15, Stadium) {Moves = new[] {133, 10}, TID = 2000, OT_Name = "STADIUM", Language = EncounterGBLanguage.International }, // Stadium Psyduck (Amnesia)
+ new EncounterStatic1E(054, 15, Stadium) {Moves = new[] {133, 10}, TID = 2000, OT_Name = "STADE", Language = EncounterGBLanguage.International }, // Stadium Psyduck (Amnesia)
+ new EncounterStatic1E(054, 15, Stadium) {Moves = new[] {133, 10}, TID = 2000, OT_Name = "STADIO", Language = EncounterGBLanguage.International }, // Stadium Psyduck (Amnesia)
+ new EncounterStatic1E(054, 15, Stadium) {Moves = new[] {133, 10}, TID = 2000, OT_Name = "ESTADIO", Language = EncounterGBLanguage.International }, // Stadium Psyduck (Amnesia)
};
}
}
diff --git a/PKHeX.Core/Legality/Encounters/Data/Encounters2.cs b/PKHeX.Core/Legality/Encounters/Data/Encounters2.cs
index 5d8e67573..0b09d6d70 100644
--- a/PKHeX.Core/Legality/Encounters/Data/Encounters2.cs
+++ b/PKHeX.Core/Legality/Encounters/Data/Encounters2.cs
@@ -148,37 +148,52 @@ internal static TreeEncounterAvailable GetGSCHeadbuttAvailability(EncounterSlot
new EncounterStatic2E(251, 30, C) { Location = 014, Language = EncounterGBLanguage.Any }, // Celebi @ Ilex Forest (VC)
};
+ private static readonly int[] Farfetchd = {226, 14, 97, 163};
+ private static readonly int[] Gligar = {89, 68, 17};
+
internal static readonly EncounterStatic2E[] StaticEventsGB =
{
- // Any Language
- new EncounterStatic2E(083, 05, Stadium2) { Moves = new [] { 226, 14, 97, 163 }, Language = EncounterGBLanguage.Any }, // Stadium 2 Baton Pass Farfetch'd
- new EncounterStatic2E(207, 05, Stadium2) { Moves = new [] { 89, 68, 17 }, Language = EncounterGBLanguage.Any }, // Stadium 2 Earthquake Gligar
+ // Stadium 2 Baton Pass Farfetch'd
+ new EncounterStatic2E(083, 05, GS) {Moves = Farfetchd, TID = 2000, OT_Name = "スタジアム"},
+ new EncounterStatic2E(083, 05, GS) {Moves = Farfetchd, TID = 2000, OT_Name = "Stadium", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(083, 05, GS) {Moves = Farfetchd, TID = 2001, OT_Name = "Stade", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(083, 05, GS) {Moves = Farfetchd, TID = 2001, OT_Name = "Stadion", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(083, 05, GS) {Moves = Farfetchd, TID = 2001, OT_Name = "Stadio", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(083, 05, GS) {Moves = Farfetchd, TID = 2001, OT_Name = "Estadio", Language = EncounterGBLanguage.Any},
+
+ // Stadium 2 Earthquake Gligar
+ new EncounterStatic2E(207, 05, GS) {Moves = Gligar, TID = 2000, OT_Name = "スタジアム"},
+ new EncounterStatic2E(207, 05, GS) {Moves = Gligar, TID = 2000, OT_Name = "Stadium", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(207, 05, GS) {Moves = Gligar, TID = 2001, OT_Name = "Stade", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(207, 05, GS) {Moves = Gligar, TID = 2001, OT_Name = "Stadion", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(207, 05, GS) {Moves = Gligar, TID = 2001, OT_Name = "Stadio", Language = EncounterGBLanguage.Any},
+ new EncounterStatic2E(207, 05, GS) {Moves = Gligar, TID = 2001, OT_Name = "Estadio", Language = EncounterGBLanguage.Any},
// Japanese Only (all below)
- new EncounterStatic2E(251, 30, GSC) { Location = 014 }, // Celebi @ Ilex Forest (GBC)
+ new EncounterStatic2E(251, 30, GSC) {Location = 014}, // Celebi @ Ilex Forest (GBC)
// Gen2 Events
// Pokémon Center Mystery Egg #1 (December 15, 2001 to January 14, 2002)
- new EncounterStatic2E(152, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Chikorita Petal Dance
- new EncounterStatic2E(173, 05, GS) { Moves = new [] { 129 }, EggLocation = 256 }, // Cleffa Swift
- new EncounterStatic2E(194, 05, GS) { Moves = new [] { 187 }, EggLocation = 256 }, // Wooper Belly Drum
- new EncounterStatic2E(231, 05, GS) { Moves = new [] { 227 }, EggLocation = 256 }, // Phanpy Encore
- new EncounterStatic2E(238, 05, GS) { Moves = new [] { 118 }, EggLocation = 256 }, // Smoochum Metronome
+ new EncounterStatic2E(152, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Chikorita Petal Dance
+ new EncounterStatic2E(173, 05, GS) {Moves = new[] {129}, EggLocation = 256}, // Cleffa Swift
+ new EncounterStatic2E(194, 05, GS) {Moves = new[] {187}, EggLocation = 256}, // Wooper Belly Drum
+ new EncounterStatic2E(231, 05, GS) {Moves = new[] {227}, EggLocation = 256}, // Phanpy Encore
+ new EncounterStatic2E(238, 05, GS) {Moves = new[] {118}, EggLocation = 256}, // Smoochum Metronome
// Pokémon Center Mystery Egg #2 (March 16 to April 7, 2002)
- new EncounterStatic2E(047, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Psyduck Petal Dance
- new EncounterStatic2E(152, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Chikorita Petal Dance
- new EncounterStatic2E(172, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Pichu Petal Dance
- new EncounterStatic2E(173, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Cleffa Petal Dance
- new EncounterStatic2E(174, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Igglybuff Petal Dance
- new EncounterStatic2E(238, 05, GS) { Moves = new [] { 080 }, EggLocation = 256 }, // Smoochum Petal Dance
+ new EncounterStatic2E(047, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Psyduck Petal Dance
+ new EncounterStatic2E(152, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Chikorita Petal Dance
+ new EncounterStatic2E(172, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Pichu Petal Dance
+ new EncounterStatic2E(173, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Cleffa Petal Dance
+ new EncounterStatic2E(174, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Igglybuff Petal Dance
+ new EncounterStatic2E(238, 05, GS) {Moves = new[] {080}, EggLocation = 256}, // Smoochum Petal Dance
// Pokémon Center Mystery Egg #3 (April 27 to May 12, 2002)
- new EncounterStatic2E(001, 05, GS) { Moves = new [] { 246 }, EggLocation = 256 }, // Bulbasaur Ancientpower
- new EncounterStatic2E(004, 05, GS) { Moves = new [] { 242 }, EggLocation = 256 }, // Charmander Crunch
- new EncounterStatic2E(158, 05, GS) { Moves = new [] { 066 }, EggLocation = 256 }, // Totodile Submission
- new EncounterStatic2E(163, 05, GS) { Moves = new [] { 101 }, EggLocation = 256 }, // Hoot-Hoot Night Shade
- new EncounterStatic2E(172, 05, GS) { Moves = new [] { 047 }, EggLocation = 256 }, // Pichu Sing
+ new EncounterStatic2E(001, 05, GS) {Moves = new[] {246}, EggLocation = 256}, // Bulbasaur Ancientpower
+ new EncounterStatic2E(004, 05, GS) {Moves = new[] {242}, EggLocation = 256}, // Charmander Crunch
+ new EncounterStatic2E(158, 05, GS) {Moves = new[] {066}, EggLocation = 256}, // Totodile Submission
+ new EncounterStatic2E(163, 05, GS) {Moves = new[] {101}, EggLocation = 256}, // Hoot-Hoot Night Shade
+ new EncounterStatic2E(172, 05, GS) {Moves = new[] {047}, EggLocation = 256}, // Pichu Sing
};
}
}
diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs
index 929765862..c9c7c3ccd 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic.cs
@@ -175,12 +175,11 @@ private int GetEdgeCaseLanguage(PKM pk, int lang)
{
switch (pk.Format)
{
- case 1 when Species == (int)Core.Species.Mew && Version == GameVersion.VCEvents: // VC Mew
- pk.TID = 22796;
- pk.OT_Name = Legal.GetG1OT_GFMew(lang);
- return lang;
- case 1 when Version == GameVersion.EventsGBGen1:
- case 2 when Version == GameVersion.EventsGBGen2:
+ case 1 when this is EncounterStatic1E e1:
+ return e1.Language == EncounterGBLanguage.Japanese ? 1 : 2;
+ case 1 when this is EncounterStatic2E e2:
+ return e2.Language == EncounterGBLanguage.Japanese ? 1 : 2;
+
case 3 when this is EncounterStaticShadow s && s.EReader:
case 3 when Species == (int)Core.Species.Mew:
pk.OT_Name = "ゲーフリ";
diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic1E.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic1E.cs
index f839bfefe..544e1b4d0 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic1E.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic1E.cs
@@ -13,11 +13,6 @@ public sealed class EncounterStatic1E : EncounterStatic1
/// Trainer ID for the event.
public int TID { get; set; } = -1;
- ///
- /// Indicates if the event was distributed to Japanese games or International games.
- ///
- public bool Japanese { get; set; }
-
public EncounterStatic1E(int species, int level, GameVersion ver) : base(species, level, ver)
{
}
@@ -47,10 +42,13 @@ public override bool IsMatchDeferred(PKM pkm)
}
}
+ ///
+ /// Generations 1 & 2 cannot communicate between Japanese & International versions.
+ ///
public enum EncounterGBLanguage
{
Japanese,
- English,
+ International,
Any,
}
-}
\ No newline at end of file
+}
diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2.cs
index e07cbe227..b62c270f1 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2.cs
@@ -73,11 +73,6 @@ protected override bool IsMatchLocation(PKM pkm)
return Location == pkm.Met_Location;
return true;
}
-
- public override bool IsMatchDeferred(PKM pkm)
- {
- return !ParseSettings.AllowGBCartEra && GameVersion.GBCartEraOnly.Contains(Version);
- }
}
public sealed class EncounterStatic2Odd : EncounterStatic2
diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2E.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2E.cs
index ba8624947..4b55f8070 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2E.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic2E.cs
@@ -13,11 +13,6 @@ public sealed class EncounterStatic2E : EncounterStatic2
/// Trainer ID for the event.
public int TID { get; set; } = -1;
- ///
- /// Indicates if the event was distributed to Japanese games or International games.
- ///
- public bool Japanese { get; set; }
-
public EncounterStatic2E(int species, int level, GameVersion ver) : base(species, level, ver)
{
}
diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs
index 180df9849..c02478f68 100644
--- a/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs
+++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs
@@ -65,6 +65,9 @@ private static IEnumerable GenerateRawEncounters12(PKM pkm, Game
private static IEnumerable GenerateGBEvents(PKM pkm, IReadOnlyList chain, GameVersion game)
{
+ if (pkm.Korean) // only GS; no events
+ yield break;
+
foreach (var e in EncounterStaticGenerator.GetValidGBGifts(pkm, chain, game))
{
foreach (var evo in chain)
diff --git a/PKHeX.Core/Legality/Moves/GameData.cs b/PKHeX.Core/Legality/Moves/GameData.cs
index 321ea958d..93e44167a 100644
--- a/PKHeX.Core/Legality/Moves/GameData.cs
+++ b/PKHeX.Core/Legality/Moves/GameData.cs
@@ -82,12 +82,9 @@ public static class GameData
{ GameVersion.Gen7, Legal.LevelUpSM },
{ GameVersion.Gen7b, Legal.LevelUpGG },
{ GameVersion.Gen8, Legal.LevelUpSWSH },
- { GameVersion.VCEvents, Legal.LevelUpY },
{ GameVersion.Stadium, Legal.LevelUpY },
- { GameVersion.EventsGBGen1, Legal.LevelUpY },
{ GameVersion.Stadium2, Legal.LevelUpGS },
- { GameVersion.EventsGBGen2, Legal.LevelUpGS },
};
private static readonly Dictionary Personal = new Dictionary
@@ -165,12 +162,9 @@ public static class GameData
{ GameVersion.Gen7, PersonalTable.USUM },
{ GameVersion.Gen7b, PersonalTable.GG },
{ GameVersion.Gen8, PersonalTable.SWSH },
- { GameVersion.VCEvents, PersonalTable.Y },
{ GameVersion.Stadium, PersonalTable.Y },
- { GameVersion.EventsGBGen1, PersonalTable.Y },
{ GameVersion.Stadium2, PersonalTable.GS },
- { GameVersion.EventsGBGen2, PersonalTable.GS },
};
}
}
diff --git a/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs b/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs
index 9cee44efb..b5ece23ad 100644
--- a/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs
+++ b/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs
@@ -119,16 +119,6 @@ public void VerifyOTG1(LegalityAnalysis data)
}
VerifyG1OTWithinBounds(data, tr);
- if (data.EncounterOriginal is EncounterStatic s && (s.Version == GameVersion.Stadium || s.Version == GameVersion.Stadium2))
- data.AddLine(VerifyG1OTStadium(pkm, tr, s));
-
- if (pkm.Species == (int)Species.Mew)
- {
- var OTMatch = (tr == Legal.GetG1OT_GFMew((int)LanguageID.Japanese))
- || (tr == Legal.GetG1OT_GFMew((int)LanguageID.English));
- if (!OTMatch || pkm.TID != 22796)
- data.AddLine(GetInvalid(LG1OTEvent));
- }
if (pkm.OT_Gender == 1 && ((pkm.Format == 2 && pkm.Met_Location == 0) || (pkm.Format > 2 && pkm.VC1)))
data.AddLine(GetInvalid(LG1OTGender));
@@ -157,36 +147,6 @@ private void VerifyG1OTWithinBounds(LegalityAnalysis data, string str)
}
}
- private CheckResult VerifyG1OTStadium(PKM pkm, string tr, IVersion s)
- {
- if (pkm.OT_Gender != 0)
- return GetInvalid(LG1OTGender);
-
- int tid = pkm.TID;
- if (pkm.Japanese)
- {
- if (tid == Legal.GetGBStadiumOTID_JPN(s.Version) && Legal.Stadium1JP == tr)
- return GetValid(LG1StadiumJapanese);
- }
- else
- {
- if (s.Version == GameVersion.Stadium && tid == 2000)
- {
- if (tr == "STADIUM" || tr == "STADE" || tr == "STADIO" || tr == "ESTADIO")
- return GetValid(LG1StadiumInternational);
- }
- else // Stadium2
- {
- if (tid == 2000 && tr == "Stadium")
- return GetValid(LG1StadiumInternational);
-
- if (tid == 2001 && (tr == "Stade" || tr == "Stadion" || tr == "Stadio" || tr == "Estadio"))
- return GetValid(LG1StadiumInternational);
- }
- }
- return GetInvalid(LG1Stadium);
- }
-
private static bool IsOTNameSuspicious(string name)
{
return SuspiciousOTNames.Any(name.StartsWith);
diff --git a/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs b/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs
index 505bc26ef..9a03d0520 100644
--- a/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs
+++ b/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs
@@ -152,15 +152,6 @@ public void VerifyTransferLegalityG8(LegalityAnalysis data)
public IEnumerable VerifyVCEncounter(PKM pkm, IEncounterable encounter, ILocation transfer, IList Moves)
{
- // Check existing EncounterMatch
- if (encounter is EncounterStatic v && (GameVersion.GBCartEraOnly.Contains(v.Version) || v.Version == GameVersion.VCEvents))
- {
- bool exceptions = false;
- exceptions |= v.Version == GameVersion.VCEvents && encounter.Species == (int)Species.Mew && pkm.TID == 22796;
- if (!exceptions)
- yield return GetInvalid(LG1GBEncounter);
- }
-
if (pkm.Met_Location != transfer.Location)
yield return GetInvalid(LTransferMetLocation);
if (pkm.Egg_Location != transfer.EggLocation)