diff --git a/PKHeX.Core/Legality/Encounters/Data/Encounters4.cs b/PKHeX.Core/Legality/Encounters/Data/Encounters4.cs
index 5ade58886..fe1a64c25 100644
--- a/PKHeX.Core/Legality/Encounters/Data/Encounters4.cs
+++ b/PKHeX.Core/Legality/Encounters/Data/Encounters4.cs
@@ -371,28 +371,28 @@ static Encounters4()
private static readonly EncounterTrade4[] RanchGifts =
{
- new EncounterTrade4RanchGift(323975838, 025, 18) { Moves = new[] {447,085,148,104}, TID = 1000, SID = 19840, OTGender = 1, Location = 0068, Gender = 0, Ability = 1, CurrentLevel = 20, }, // Pikachu
- new EncounterTrade4RanchGift(323977664, 037, 16) { Moves = new[] {412,109,053,219}, TID = 1000, SID = 21150, OTGender = 1, Location = 3000, Gender = 0, Ability = 1, CurrentLevel = 30, }, // Vulpix
- new EncounterTrade4RanchGift(323975579, 077, 13) { Moves = new[] {036,033,039,052}, TID = 1000, SID = 01123, OTGender = 1, Location = 3000, Gender = 0, Ability = 2, CurrentLevel = 16, }, // Ponyta
- new EncounterTrade4RanchGift(323975564, 108, 34) { Moves = new[] {076,111,014,205}, TID = 1000, SID = 03050, OTGender = 1, Location = 0077, Gender = 0, Ability = 1, CurrentLevel = 40, }, // Lickitung
- new EncounterTrade4RanchGift(323977579, 114, 01) { Moves = new[] {437,438,079,246}, TID = 1000, SID = 49497, OTGender = 1, Location = 3000, Gender = 1, Ability = 2, }, // Tangela
- new EncounterTrade4RanchGift(323977675, 133, 16) { Moves = new[] {363,270,098,247}, TID = 1000, SID = 47710, OTGender = 1, Location = 0068, Gender = 0, Ability = 2, CurrentLevel = 30, }, // Eevee
- new EncounterTrade4RanchGift(323977588, 142, 20) { Moves = new[] {363,089,444,332}, TID = 1000, SID = 43066, OTGender = 1, Location = 0094, Gender = 0, Ability = 1, CurrentLevel = 50, }, // Aerodactyl
- new EncounterTrade4RanchGift(232975554, 193, 22) { Moves = new[] {318,095,246,138}, TID = 1000, SID = 42301, OTGender = 1, Location = 0052, Gender = 0, Ability = 1, CurrentLevel = 45, Ball = 0x05, }, // Yanma
- new EncounterTrade4RanchGift(323975570, 241, 16) { Moves = new[] {208,215,360,359}, TID = 1000, SID = 02707, OTGender = 1, Location = 3000, Gender = 1, Ability = 1, CurrentLevel = 48, }, // Miltank
- new EncounterTrade4RanchGift(323975563, 285, 22) { Moves = new[] {402,147,206,078}, TID = 1000, SID = 02788, OTGender = 1, Location = 3000, Gender = 0, Ability = 2, CurrentLevel = 45, Ball = 0x05, }, // Shroomish
- new EncounterTrade4RanchGift(323975559, 320, 30) { Moves = new[] {156,323,133,058}, TID = 1000, SID = 27046, OTGender = 1, Location = 0038, Gender = 0, Ability = 2, CurrentLevel = 45, }, // Wailmer
- new EncounterTrade4RanchGift(323977657, 360, 01) { Moves = new[] {204,150,227,000}, TID = 1000, SID = 01788, OTGender = 1, Location = 0004, Gender = 0, Ability = 2, EggLocation = 2000, }, // Wynaut
- new EncounterTrade4RanchGift(323975563, 397, 02) { Moves = new[] {355,017,283,018}, TID = 1000, SID = 59298, OTGender = 1, Location = 0016, Gender = 0, Ability = 2, CurrentLevel = 23, }, // Staravia
- new EncounterTrade4RanchGift(323970584, 415, 05) { Moves = new[] {230,016,000,000}, TID = 1000, SID = 54140, OTGender = 1, Location = 0020, Gender = 1, Ability = 1, CurrentLevel = 20, }, // Combee
- new EncounterTrade4RanchGift(323977539, 417, 09) { Moves = new[] {447,045,351,098}, TID = 1000, SID = 18830, OTGender = 1, Location = 0020, Gender = 1, Ability = 2, CurrentLevel = 10, }, // Pachirisu
- new EncounterTrade4RanchGift(323974107, 422, 20) { Moves = new[] {363,352,426,104}, TID = 1000, SID = 39272, OTGender = 1, Location = 0028, Gender = 0, Ability = 2, CurrentLevel = 25, Form = 1 }, // Shellos
- new EncounterTrade4RanchGift(323977566, 427, 10) { Moves = new[] {204,193,409,098}, TID = 1000, SID = 31045, OTGender = 1, Location = 3000, Gender = 1, Ability = 1, CurrentLevel = 16, }, // Buneary
- new EncounterTrade4RanchGift(323975579, 453, 22) { Moves = new[] {310,207,426,389}, TID = 1000, SID = 41342, OTGender = 1, Location = 0052, Gender = 0, Ability = 2, CurrentLevel = 31, Ball = 0x05, }, // Croagunk
- new EncounterTrade4RanchGift(323977566, 456, 15) { Moves = new[] {213,352,219,392}, TID = 1000, SID = 48348, OTGender = 1, Location = 0020, Gender = 1, Ability = 1, CurrentLevel = 35, }, // Finneon
- new EncounterTrade4RanchGift(323975582, 459, 32) { Moves = new[] {452,420,275,059}, TID = 1000, SID = 23360, OTGender = 1, Location = 0031, Gender = 0, Ability = 1, CurrentLevel = 41, }, // Snover
- new EncounterTrade4RanchSpecial(151, 50) { Moves = new[] {235,216,095,100}, TID = 1000, SID = 59228, OTGender = 1, Location = 3000, Ball = 0x10, Gender = 2, }, // Mew
- new EncounterTrade4RanchSpecial(489, 01) { Moves = new[] {447,240,156,057}, TID = 1000, SID = 09248, OTGender = 1, Location = 3000, Ball = 0x10, Gender = 2, CurrentLevel = 50, EggLocation = 3000, }, // Phione
+ new EncounterTrade4RanchGift(323975838, 025, 18) { Moves = new[] {447,085,148,104}, TID = 1000, SID = 19840, OTGender = 1, MetLocation = 0068, Gender = 0, Ability = 1, CurrentLevel = 20, }, // Pikachu
+ new EncounterTrade4RanchGift(323977664, 037, 16) { Moves = new[] {412,109,053,219}, TID = 1000, SID = 21150, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = 1, CurrentLevel = 30, }, // Vulpix
+ new EncounterTrade4RanchGift(323975579, 077, 13) { Moves = new[] {036,033,039,052}, TID = 1000, SID = 01123, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = 2, CurrentLevel = 16, }, // Ponyta
+ new EncounterTrade4RanchGift(323975564, 108, 34) { Moves = new[] {076,111,014,205}, TID = 1000, SID = 03050, OTGender = 1, MetLocation = 0077, Gender = 0, Ability = 1, CurrentLevel = 40, }, // Lickitung
+ new EncounterTrade4RanchGift(323977579, 114, 01) { Moves = new[] {437,438,079,246}, TID = 1000, SID = 49497, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = 2, }, // Tangela
+ new EncounterTrade4RanchGift(323977675, 133, 16) { Moves = new[] {363,270,098,247}, TID = 1000, SID = 47710, OTGender = 1, MetLocation = 0068, Gender = 0, Ability = 2, CurrentLevel = 30, }, // Eevee
+ new EncounterTrade4RanchGift(323977588, 142, 20) { Moves = new[] {363,089,444,332}, TID = 1000, SID = 43066, OTGender = 1, MetLocation = 0094, Gender = 0, Ability = 1, CurrentLevel = 50, }, // Aerodactyl
+ new EncounterTrade4RanchGift(232975554, 193, 22) { Moves = new[] {318,095,246,138}, TID = 1000, SID = 42301, OTGender = 1, MetLocation = 0052, Gender = 0, Ability = 1, CurrentLevel = 45, Ball = 0x05, }, // Yanma
+ new EncounterTrade4RanchGift(323975570, 241, 16) { Moves = new[] {208,215,360,359}, TID = 1000, SID = 02707, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = 1, CurrentLevel = 48, }, // Miltank
+ new EncounterTrade4RanchGift(323975563, 285, 22) { Moves = new[] {402,147,206,078}, TID = 1000, SID = 02788, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = 2, CurrentLevel = 45, Ball = 0x05, }, // Shroomish
+ new EncounterTrade4RanchGift(323975559, 320, 30) { Moves = new[] {156,323,133,058}, TID = 1000, SID = 27046, OTGender = 1, MetLocation = 0038, Gender = 0, Ability = 2, CurrentLevel = 45, }, // Wailmer
+ new EncounterTrade4RanchGift(323977657, 360, 01) { Moves = new[] {204,150,227,000}, TID = 1000, SID = 01788, OTGender = 1, MetLocation = 0004, Gender = 0, Ability = 2, EggLocation = 2000, }, // Wynaut
+ new EncounterTrade4RanchGift(323975563, 397, 02) { Moves = new[] {355,017,283,018}, TID = 1000, SID = 59298, OTGender = 1, MetLocation = 0016, Gender = 0, Ability = 2, CurrentLevel = 23, }, // Staravia
+ new EncounterTrade4RanchGift(323970584, 415, 05) { Moves = new[] {230,016,000,000}, TID = 1000, SID = 54140, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = 1, CurrentLevel = 20, }, // Combee
+ new EncounterTrade4RanchGift(323977539, 417, 09) { Moves = new[] {447,045,351,098}, TID = 1000, SID = 18830, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = 2, CurrentLevel = 10, }, // Pachirisu
+ new EncounterTrade4RanchGift(323974107, 422, 20) { Moves = new[] {363,352,426,104}, TID = 1000, SID = 39272, OTGender = 1, MetLocation = 0028, Gender = 0, Ability = 2, CurrentLevel = 25, Form = 1 }, // Shellos
+ new EncounterTrade4RanchGift(323977566, 427, 10) { Moves = new[] {204,193,409,098}, TID = 1000, SID = 31045, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = 1, CurrentLevel = 16, }, // Buneary
+ new EncounterTrade4RanchGift(323975579, 453, 22) { Moves = new[] {310,207,426,389}, TID = 1000, SID = 41342, OTGender = 1, MetLocation = 0052, Gender = 0, Ability = 2, CurrentLevel = 31, Ball = 0x05, }, // Croagunk
+ new EncounterTrade4RanchGift(323977566, 456, 15) { Moves = new[] {213,352,219,392}, TID = 1000, SID = 48348, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = 1, CurrentLevel = 35, }, // Finneon
+ new EncounterTrade4RanchGift(323975582, 459, 32) { Moves = new[] {452,420,275,059}, TID = 1000, SID = 23360, OTGender = 1, MetLocation = 0031, Gender = 0, Ability = 1, CurrentLevel = 41, }, // Snover
+ new EncounterTrade4RanchSpecial(151, 50) { Moves = new[] {235,216,095,100}, TID = 1000, SID = 59228, OTGender = 1, Ball = 0x10, Gender = 2, }, // Mew
+ new EncounterTrade4RanchSpecial(489, 01) { Moves = new[] {447,240,156,057}, TID = 1000, SID = 09248, OTGender = 1, Ball = 0x10, Gender = 2, CurrentLevel = 50, EggLocation = 3000, }, // Phione
};
private static readonly EncounterTrade4PID[] TradeGift_DPPtIngame =
@@ -419,8 +419,8 @@ static Encounters4()
new(HGSS, 0x00101596, 208, 01) { Ability = 1, TID = 26491, SID = 00000, OTGender = 1, Gender = 0, IVs = new[] {08,30,28,06,18,20}}, // Any -> Steelix
//Gift
- new(HGSS, 0x00006B5E, 021, 20) { Ability = 1, TID = 01001, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,20,15,20,20,20}, Location = 183, Moves = new[]{043,031,228,332} },// Webster's Spearow
- new(HGSS, 0x000214D7, 213, 20) { Ability = 2, TID = 04336, SID = 00001, OTGender = 0, Gender = 0, IVs = new[] {15,20,15,20,20,20}, Location = 130, Moves = new[]{132,117,227,219} },// Kirk's Shuckle
+ new(HGSS, 0x00006B5E, 021, 20) { Ability = 1, TID = 01001, SID = 00000, OTGender = 0, Gender = 1, IVs = new[] {15,20,15,20,20,20}, MetLocation = 183, Moves = new[]{043,031,228,332} },// Webster's Spearow
+ new(HGSS, 0x000214D7, 213, 20) { Ability = 2, TID = 04336, SID = 00001, OTGender = 0, Gender = 0, IVs = new[] {15,20,15,20,20,20}, MetLocation = 130, Moves = new[]{132,117,227,219} },// Kirk's Shuckle
};
private const string tradeDPPt = "tradedppt";
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade.cs
index cf478f72b..3d8ff54dd 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade.cs
@@ -22,7 +22,7 @@ public abstract record EncounterTrade : IEncounterable, IMoveset, ILocation, IEn
public GameVersion Version { get; }
public int CurrentLevel { get; init; } = -1;
- public int Location { get; init; }
+ public abstract int Location { get; }
public int Ability { get; init; }
public int Gender { get; init; } = -1;
public Nature Nature { get; init; } = Nature.Random;
@@ -63,19 +63,6 @@ public int TID7
protected EncounterTrade(GameVersion game) => Version = game;
- private static int GetDefaultMetLocation(int generation) => generation switch
- {
- 1 => 0,
- 2 => Locations.LinkTrade2NPC,
- 3 => Locations.LinkTrade3NPC,
- 4 => Locations.LinkTrade4NPC,
- 5 => Locations.LinkTrade5NPC,
- 6 => Locations.LinkTrade6NPC,
- 7 => Locations.LinkTrade6NPC, // 7 is same as 6
- 8 => Locations.LinkTrade6NPC, // 8 is same as 6
- _ => throw new IndexOutOfRangeException(nameof(generation)),
- };
-
public PKM ConvertToPKM(ITrainerInfo sav) => ConvertToPKM(sav, EncounterCriteria.Unrestricted);
public PKM ConvertToPKM(ITrainerInfo sav, EncounterCriteria criteria)
@@ -120,8 +107,7 @@ protected virtual void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria
var time = DateTime.Now;
if (pk.Format != 2 || version == GameVersion.C)
{
- var location = Location != 0 ? Location : GetDefaultMetLocation(Generation);
- SetMetData(pk, level, location, time);
+ SetMetData(pk, level, Location, time);
}
else
{
@@ -226,8 +212,7 @@ private bool IsMatchLevel(PKM pkm, DexLevel evo)
if (!pkm.HasOriginalMetLocation)
return evo.Level >= Level;
- var loc = Location != 0 ? Location : GetDefaultMetLocation(Generation);
- if (loc != pkm.Met_Location)
+ if (Location != pkm.Met_Location)
return false;
if (pkm.Format < 5)
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade1.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade1.cs
index b17632230..2d57f541c 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade1.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade1.cs
@@ -16,6 +16,7 @@ public sealed record EncounterTrade1 : EncounterTradeGB
private readonly int LevelMinRBY;
private readonly int LevelMinGSC;
+ public override int Location => 0;
public EncounterTrade1(int species, GameVersion game, int rby, int gsc) : base(species, gsc, game)
{
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs
index 23c7d036e..4310fd8f8 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs
@@ -5,6 +5,7 @@ namespace PKHeX.Core
public sealed record EncounterTrade2 : EncounterTradeGB
{
public override int Generation => 2;
+ public override int Location => Locations.LinkTrade2NPC;
public EncounterTrade2(int species, int level, int tid) : base(species, level, GameVersion.GSC)
{
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade3.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade3.cs
index 55f8c0425..bbbc77915 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade3.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade3.cs
@@ -5,6 +5,7 @@ namespace PKHeX.Core
public sealed record EncounterTrade3 : EncounterTrade, IContestStats
{
public override int Generation => 3;
+ public override int Location => Locations.LinkTrade3NPC;
///
/// Fixed value the encounter must have.
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade4.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade4.cs
index 799f2f915..e29653127 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade4.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade4.cs
@@ -46,6 +46,9 @@ public byte Contest
}
}
+ public int MetLocation { get; init; }
+ public override int Location => MetLocation == default ? Locations.LinkTrade4NPC : MetLocation;
+
public override bool IsMatchExact(PKM pkm, DexLevel evo)
{
if (!base.IsMatchExact(pkm, evo))
@@ -103,6 +106,9 @@ public sealed record EncounterTrade4RanchGift : EncounterTrade4
///
public readonly uint PID;
+ public int MetLocation { private get; init; }
+ public override int Location => MetLocation;
+
public EncounterTrade4RanchGift(uint pid, int species, int level) : base(GameVersion.D)
{
PID = pid;
@@ -129,13 +135,14 @@ protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
public sealed record EncounterTrade4RanchSpecial : EncounterTrade4
{
+ public override int Location => 3000;
+
public EncounterTrade4RanchSpecial(int species, int level) : base(GameVersion.D)
{
Species = species;
Level = level;
Ball = 0x10;
OTGender = 1;
- Location = 3000;
TrainerNames = RanchOTNames;
}
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade5.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade5.cs
index 8054c8248..07d6150b0 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade5.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade5.cs
@@ -3,6 +3,7 @@
public sealed record EncounterTrade5 : EncounterTrade
{
public override int Generation => 5;
+ public override int Location => Locations.LinkTrade5NPC;
public EncounterTrade5(GameVersion game) : base(game)
{
@@ -12,6 +13,7 @@ public EncounterTrade5(GameVersion game) : base(game)
public sealed record EncounterTrade5PID : EncounterTrade
{
public override int Generation => 5;
+ public override int Location => Locations.LinkTrade5NPC;
///
/// Fixed value the encounter must have.
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade6.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade6.cs
index 1c137cdcb..3cadb5e3f 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade6.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade6.cs
@@ -3,6 +3,7 @@
public sealed record EncounterTrade6 : EncounterTrade, IMemoryOT
{
public override int Generation => 6;
+ public override int Location => Locations.LinkTrade6NPC;
public int OT_Memory { get; set; }
public int OT_Intensity { get; set; }
public int OT_Feeling { get; set; }
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7.cs
index d28d1c8e5..6b4811106 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7.cs
@@ -5,6 +5,7 @@ namespace PKHeX.Core
public sealed record EncounterTrade7 : EncounterTrade, IMemoryOT
{
public override int Generation => 7;
+ public override int Location => Locations.LinkTrade6NPC;
// immutable setters
public int OT_Memory { get => 1; set => throw new InvalidOperationException(); }
public int OT_Intensity { get => 3; set => throw new InvalidOperationException(); }
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7b.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7b.cs
index 862d27fce..4035b4fa4 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7b.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade7b.cs
@@ -3,6 +3,7 @@
public sealed record EncounterTrade7b : EncounterTrade
{
public override int Generation => 7;
+ public override int Location => Locations.LinkTrade6NPC;
public EncounterTrade7b(GameVersion game) : base(game)
{
diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade8.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade8.cs
index 6eb587d09..2b7544583 100644
--- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade8.cs
+++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade8.cs
@@ -6,6 +6,7 @@ namespace PKHeX.Core
public sealed record EncounterTrade8 : EncounterTrade, IDynamaxLevel, IRelearn, IMemoryOT
{
public override int Generation => 8;
+ public override int Location => Locations.LinkTrade6NPC;
public byte DynamaxLevel { get; set; }
public int FlawlessIVCount { get; init; }