diff --git a/PKHeX.Core/Legality/Encounters/Data/Gen3/EncountersWC3.cs b/PKHeX.Core/Legality/Encounters/Data/Gen3/EncountersWC3.cs
index 3d2a760c9..2cfb574ca 100644
--- a/PKHeX.Core/Legality/Encounters/Data/Gen3/EncountersWC3.cs
+++ b/PKHeX.Core/Legality/Encounters/Data/Gen3/EncountersWC3.cs
@@ -28,16 +28,16 @@ internal static class EncountersWC3
new(263, 05, S) { Moves = new(033,045,039,000), Language = (int)Japanese, Method = BACD_RBCD, ID32 = 21121, Shiny = Always, OriginalTrainerName = "ルビー", OriginalTrainerGender = RandD3_1 }, // Berry Fix Ruby
new(263, 05, S) { Moves = new(033,045,039,000), Language = (int)Japanese, Method = BACD_RBCD, ID32 = 21121, Shiny = Always, OriginalTrainerName = "サファイア", OriginalTrainerGender = RandD3_0 }, // Berry Fix Sapphire
- new(385, 05, R) { Moves = new(001,144,000,000), Language = (int)Japanese, Method = BACD_T2, ID32 = 30719, Shiny = Never, OriginalTrainerName = "ネガイボシ", OriginalTrainerGender = Only0 }, // Negai Boshi Jirachi
- new(385, 05, RS){ Moves = new(001,144,000,000), Language = (int)Japanese, Method = BACD_U_AX, ID32 = 30719, Shiny = Never, OriginalTrainerName = "ネガイボシ", OriginalTrainerGender = Recipient }, // Negai Boshi Jirachi (Match Recipient)
- new(385, 05, R) { Moves = new(001,144,000,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 40707, Shiny = Never, OriginalTrainerName = "タナバタ", OriginalTrainerGender = Only1 }, // Tanabata Jirachi (2004)
+ new(385, 05, R) { Moves = new(273,093,156,000), Language = (int)Japanese, Method = BACD_T2, ID32 = 30719, Shiny = Never, OriginalTrainerName = "ネガイボシ", OriginalTrainerGender = Only0 }, // Negai Boshi Jirachi
+ new(385, 05, RS){ Moves = new(273,093,156,000), Language = (int)Japanese, Method = BACD_U_AX, ID32 = 30719, Shiny = Never, OriginalTrainerName = "ネガイボシ", OriginalTrainerGender = Recipient }, // Negai Boshi Jirachi (Match Recipient)
+ new(385, 05, R) { Moves = new(273,093,156,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 40707, Shiny = Never, OriginalTrainerName = "タナバタ", OriginalTrainerGender = Only1 }, // Tanabata Jirachi (2004)
new(025, 10, R) { Moves = new(019,084,039,086), Language = (int)Japanese, Method = BACD_R_A, ID32 = 41205, Shiny = Never, OriginalTrainerName = "ANA", OriginalTrainerGender = Only0 }, // ANA Pikachu
new(052, 05, R) { Moves = new(010,045,000,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50318, Shiny = Never, OriginalTrainerName = "ポケパーク", OriginalTrainerGender = Only0 }, // PokéPark Meowth
new(025, 10, R) { Moves = new(084,045,086,057), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50319, Shiny = Never, OriginalTrainerName = "ヨコハマ", OriginalTrainerGender = Only0 }, // Yokohama Pikachu
new(151, 10, R) { Moves = new(001,144,000,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50716, Shiny = Never, OriginalTrainerName = "ハドウ", OriginalTrainerGender = RandD3, FatefulEncounter = true }, // Hadou Mew
new(025, 10, R) { Moves = new(045,039,086,019), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50425, Shiny = Never, OriginalTrainerName = "GW", OriginalTrainerGender = RandS3 }, // GW Pikachu
new(025, 10, R) { Moves = new(045,039,086,019), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50701, Shiny = Never, OriginalTrainerName = "サッポロ", OriginalTrainerGender = Only0 }, // Sapporo Pikachu
- new(385, 05, R) { Moves = new(001,144,000,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50707, Shiny = Never, OriginalTrainerName = "タナバタ", OriginalTrainerGender = Only1 }, // Tanabata Jirachi (2005)
+ new(385, 05, R) { Moves = new(273,093,156,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50707, Shiny = Never, OriginalTrainerName = "タナバタ", OriginalTrainerGender = Only1 }, // Tanabata Jirachi (2005)
new(375, 30, R) { Moves = new(036,093,232,287), Language = (int)Japanese, Method = BACD_R_A, ID32 = 02005, Shiny = Never, OriginalTrainerName = "フェスタ", OriginalTrainerGender = Only0, RibbonNational = true }, // Festa Metang
new(202, 05, R) { Moves = new(068,243,219,194), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50701, Shiny = Never, OriginalTrainerName = "サンデー", OriginalTrainerGender = RandS3 }, // Sunday Wobbuffet
new(377, 40, R) { Moves = new(174,276,246,063), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50901, Shiny = Never, OriginalTrainerName = "ハドウ", OriginalTrainerGender = RandSG15 }, // Regirock
@@ -45,7 +45,7 @@ internal static class EncountersWC3
new(379, 40, R) { Moves = new(174,276,246,063), Language = (int)Japanese, Method = BACD_R_A, ID32 = 50901, Shiny = Never, OriginalTrainerName = "ハドウ", OriginalTrainerGender = RandSG15 }, // Registeel
new(151, 30, R) { Moves = new(001,144,005,118), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60510, Shiny = Never, OriginalTrainerName = "ポケパーク", OriginalTrainerGender = RandD3, FatefulEncounter = true }, // PokéPark Mew
new(251, 30, R) { Moves = new(215,219,246,248), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60623, Shiny = Never, OriginalTrainerName = "ポケパーク", OriginalTrainerGender = RandS7 }, // PokéPark Celebi
- new(385, 05, R) { Moves = new(001,144,000,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60707, Shiny = Never, OriginalTrainerName = "タナバタ", OriginalTrainerGender = RandS7 }, // Tanabata Jirachi (2006)
+ new(385, 05, R) { Moves = new(273,093,156,000), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60707, Shiny = Never, OriginalTrainerName = "タナバタ", OriginalTrainerGender = RandS7 }, // Tanabata Jirachi (2006)
new(251, 10, R) { Moves = new(073,105,215,219), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60720, Shiny = Never, OriginalTrainerName = "ミツリン", OriginalTrainerGender = RandS7 }, // Mitsurin Celebi (2006)
new(385, 30, R) { Moves = new(273,094,270,156), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60731, Shiny = Never, OriginalTrainerName = "ポケパーク", OriginalTrainerGender = RandD3 }, // PokéPark Jirachi (2006)
new(385, 30, R) { Moves = new(273,094,270,156), Language = (int)Japanese, Method = BACD_R_A, ID32 = 60830, Shiny = Never, OriginalTrainerName = "ポケパーク", OriginalTrainerGender = RandD3 }, // PokéPark Jirachi (2006)
diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3.cs
index 4afa56252..afe8a20c3 100644
--- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3.cs
+++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3.cs
@@ -96,6 +96,11 @@ public PK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
Version = GetVersion(tr),
EXP = Experience.GetEXP(Level, pi.EXPGrowth),
};
+ if (TID16 is not UnspecifiedID)
+ pk.TID16 = TID16;
+ if (SID16 is not UnspecifiedID)
+ pk.SID16 = SID16;
+
pk.SetMoves(Moves);
pk.SetMaximumPPCurrent(Moves);
@@ -108,11 +113,10 @@ public PK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
}
else
{
- pk.ID32 = TID16;
- pk.SID16 = SID16;
pk.Language = (int)GetSafeLanguage((LanguageID)tr.Language);
pk.OriginalTrainerName = !string.IsNullOrWhiteSpace(OriginalTrainerName) ? OriginalTrainerName : tr.OT;
- pk.OriginalTrainerGender = OriginalTrainerGender == GiftGender3.Recipient ? tr.Gender : (byte)GetGender(seed);
+ if (OriginalTrainerGender is not GiftGender3.RandAlgo)
+ pk.OriginalTrainerGender = OriginalTrainerGender == GiftGender3.Recipient ? tr.Gender : (byte)GetGender(seed);
if (IsEgg)
{
@@ -180,6 +184,8 @@ private uint SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 pi)
{
var gr = pi.Gender;
uint idXor = pk.TID16 ^ (uint)pk.SID16;
+ if (Method is Channel)
+ return SetPINGAChannel(pk, criteria);
while (true)
{
uint seed = Util.Rand32();
@@ -198,7 +204,21 @@ private uint SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 pi)
continue;
pk.PID = pid;
- PIDGenerator.SetIVsFromSeedSequentialLCRNG(ref seed, pk);
+ pk.IV32 = PIDGenerator.SetIVsFromSeedSequentialLCRNG(ref seed);
+ pk.RefreshAbility((int)(pk.PID & 1));
+ return seed;
+ }
+ }
+
+ private static uint SetPINGAChannel(PK3 pk, EncounterCriteria criteria)
+ {
+ while (true)
+ {
+ uint seed = Util.Rand32();
+ seed = ChannelJirachi.SkipToPIDIV(seed);
+ PIDGenerator.SetValuesFromSeedChannel(pk, seed);
+ if (criteria.IsSpecifiedNature() && criteria.Nature != pk.Nature)
+ continue; // try again
pk.RefreshAbility((int)(pk.PID & 1));
return seed;
}
@@ -207,8 +227,9 @@ private uint SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 pi)
private uint GetSaneSeed(uint seed) => Method switch
{
BACD_RBCD => Math.Clamp(seed, 3, 213), // BCD digit sum
- Channel => ChannelJirachi.SkipToPIDIV(seed),
- BACD_T2 when Species is not (ushort)Core.Species.Jirachi
+ BACD_T2 when Species is (ushort)Core.Species.Jirachi
+ => LCRNG.Next2(seed & 0xFFFF),
+ BACD_T2
=> LCRNG.Next2(PCJPFifthAnniversary.GetSeedForResult(Species, Shiny == Shiny.Always, Moves.Contains((ushort)Move.Wish), seed)),
BACD_T3
=> LCRNG.Next2(PCJPFifthAnniversary.GetSeedForResult(Species, Shiny == Shiny.Always, Moves.Contains((ushort)Move.Wish), seed)),
@@ -257,6 +278,9 @@ public bool IsMatchExact(PKM pk, EvoCriteria evo)
if (!Version.Contains(pk.Version))
return false;
+ if (pk.IsEgg && !IsEgg)
+ return false;
+
bool hatchedEgg = IsEgg && !pk.IsEgg;
if (!hatchedEgg)
{
@@ -320,7 +344,7 @@ public bool IsCompatibleReviseReset(ref PIDIV value, PKM pk)
if (type is BACD_EA or BACD_ES && !IsEgg)
return false;
- if (OriginalTrainerGender is not GiftGender3.Recipient && (!IsEgg || pk.IsEgg) && !IsMatchGender(pk, value.OriginSeed))
+ if (OriginalTrainerGender is not (GiftGender3.RandAlgo or GiftGender3.Recipient) && (!IsEgg || pk.IsEgg) && !IsMatchGender(pk, value.OriginSeed))
return false;
return Method switch
@@ -328,8 +352,9 @@ public bool IsCompatibleReviseReset(ref PIDIV value, PKM pk)
BACD_U => true,
BACD_R => IsRestrictedSimple(ref value, type),
BACD_R_A => IsRestrictedAnti(ref value, type),
+ BACD_U_AX => IsUnrestrictedAntiX(ref value, type),
- BACD_T2 => IsRestrictedTable2(ref value, type, Species, Moves.Contains((ushort)Move.Wish)),
+ BACD_T2 => IsRestrictedTable2(ref value, type, Species, Moves.Contains((ushort)Move.Wish)),
BACD_T3 => IsRestrictedTable3(ref value, type, Species, Moves.Contains((ushort)Move.Wish)),
BACD_RBCD => IsBerryFixShiny(ref value, type),
BACD_M => IsMystryMew(ref value, type),
@@ -341,9 +366,11 @@ public bool IsCompatibleReviseReset(ref PIDIV value, PKM pk)
private bool IsMatchGender(PKM pk, uint seed)
{
- var expect = OriginalTrainerGender is GiftGender3.RandD3_0 or GiftGender3.RandD3_1
- ? GetGenderBit0(LCRNG.Next6(seed) >> 16)
- : GetGender(LCRNG.Next4(seed)); // another implicit advance inside the method
+ var expect = OriginalTrainerGender switch
+ {
+ GiftGender3.RandD3_0 or GiftGender3.RandD3_1 => GetGenderBit0(LCRNG.Next6(seed) >> 16),
+ _ => GetGender(LCRNG.Next4(seed)),
+ }; // another implicit advance inside the method
return pk.OriginalTrainerGender == expect;
}
}
diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3JPN.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3JPN.cs
index e6df9ccab..a63b41948 100644
--- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3JPN.cs
+++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3JPN.cs
@@ -83,9 +83,8 @@ private static void SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 p
if (!criteria.IsGenderSatisfied(gender))
continue;
- PIDGenerator.SetIVsFromSeedSequentialLCRNG(ref seed, pk);
-
pk.PID = pid;
+ pk.IV32 = PIDGenerator.SetIVsFromSeedSequentialLCRNG(ref seed);
pk.RefreshAbility((int)(pid & 1));
pk.OriginalTrainerGender = (byte)GetGender(LCRNG.Next16(ref seed));
return;
@@ -101,6 +100,9 @@ public bool IsMatchExact(PKM pk, EvoCriteria evo)
if (Version != 0 && !Version.Contains(pk.Version))
return false;
+ if (pk.IsEgg)
+ return false;
+
if (pk.SID16 != 0)
return false;
if (!IsValidTrainerID(pk.TID16))
diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3NY.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3NY.cs
index 556720293..2846af0bf 100644
--- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3NY.cs
+++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Gifts/EncounterGift3NY.cs
@@ -84,9 +84,8 @@ private static void SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 p
if (!criteria.IsGenderSatisfied(gender))
continue;
- PIDGenerator.SetIVsFromSeedSequentialLCRNG(ref seed, pk);
-
pk.PID = pid;
+ pk.IV32 = PIDGenerator.SetIVsFromSeedSequentialLCRNG(ref seed);
pk.RefreshAbility((int)(pid & 1));
pk.OriginalTrainerGender = (byte)GetGender(LCRNG.Next16(ref seed));
return;
@@ -100,6 +99,9 @@ public bool IsMatchExact(PKM pk, EvoCriteria evo)
if (Version != 0 && !Version.Contains(pk.Version))
return false;
+ if (pk.IsEgg)
+ return false;
+
if (pk.SID16 != 0)
return false;
if (!Distribution.IsValidTrainerID(pk.TID16))
diff --git a/PKHeX.Core/Legality/RNG/ClassicEra/Gen3/CommonEvent3Checker.cs b/PKHeX.Core/Legality/RNG/ClassicEra/Gen3/CommonEvent3Checker.cs
index 3f8b16041..274931739 100644
--- a/PKHeX.Core/Legality/RNG/ClassicEra/Gen3/CommonEvent3Checker.cs
+++ b/PKHeX.Core/Legality/RNG/ClassicEra/Gen3/CommonEvent3Checker.cs
@@ -121,8 +121,6 @@ public static bool IsUnrestrictedAnti(ref PIDIV value, PIDType observed)
{
if (observed is not (BACD or BACD_A or BACD_EA))
return false;
- if (value.OriginSeed > ushort.MaxValue)
- return false;
value = value.AsMutated(BACD_U);
return true;
}
@@ -139,6 +137,16 @@ public static bool IsRestrictedAnti(ref PIDIV value, PIDType observed)
return true;
}
+ /// Regular Antishiny without seed restriction constraint.
+ ///
+ public static bool IsUnrestrictedAntiX(ref PIDIV value, PIDType observed)
+ {
+ if (observed is not (BACD_AX))
+ return false;
+ value = value.AsMutated(BACD_AX);
+ return true;
+ }
+
/// Berry Fix Zigzagoon seed restriction constraint.
///
public static bool IsBerryFixShiny(ref PIDIV value, PIDType observed)
diff --git a/PKHeX.Core/Legality/RNG/PIDGenerator.cs b/PKHeX.Core/Legality/RNG/PIDGenerator.cs
index a190425ea..68d54181c 100644
--- a/PKHeX.Core/Legality/RNG/PIDGenerator.cs
+++ b/PKHeX.Core/Legality/RNG/PIDGenerator.cs
@@ -8,7 +8,7 @@ namespace PKHeX.Core;
///
public static class PIDGenerator
{
- private static void SetValuesFromSeedLCRNG(PKM pk, PIDType type, uint seed)
+ private static uint SetValuesFromSeedLCRNG(PKM pk, PIDType type, uint seed)
{
var A = LCRNG.Next(seed);
var B = LCRNG.Next(A);
@@ -41,14 +41,16 @@ private static void SetValuesFromSeedLCRNG(PKM pk, PIDType type, uint seed)
IVs[2..].Clear();
}
pk.SetIVs(IVs);
+ return D;
}
- private static void SetValuesFromSeedBACD(PKM pk, PIDType type, uint seed)
+ private static uint SetValuesFromSeedBACD(PKM pk, PIDType type, uint seed)
{
uint idxor = pk.TID16 ^ (uint)pk.SID16;
pk.PID = GetPIDFromSeedBACD(ref seed, type, idxor);
SetIVsFromSeedSequentialLCRNG(ref seed, pk);
pk.RefreshAbility((int)(pk.PID & 1));
+ return seed;
}
private static uint GetPIDFromSeedBACD(ref uint seed, PIDType type, uint idXor) => type switch
@@ -59,6 +61,13 @@ private static void SetValuesFromSeedBACD(PKM pk, PIDType type, uint seed)
_ => CommonEvent3.GetRegularAntishiny(ref seed, idXor),
};
+ public static uint SetIVsFromSeedSequentialLCRNG(ref uint seed)
+ {
+ var c16 = LCRNG.Next16(ref seed) & 0x7FFF;
+ var d16 = LCRNG.Next16(ref seed) & 0x7FFF;
+ return (d16 << 15) | c16;
+ }
+
public static void SetIVsFromSeedSequentialLCRNG(ref uint seed, PKM pk)
{
var c16 = LCRNG.Next16(ref seed);
@@ -68,7 +77,7 @@ public static void SetIVsFromSeedSequentialLCRNG(ref uint seed, PKM pk)
pk.SetIVs(IVs);
}
- private static void SetValuesFromSeedXDRNG(PKM pk, uint seed)
+ private static uint SetValuesFromSeedXDRNG(PKM pk, uint seed)
{
var species = pk.Species;
switch (species)
@@ -106,17 +115,19 @@ private static void SetValuesFromSeedXDRNG(PKM pk, uint seed)
var e16 = XDRNG.Next16(ref seed); // PID
pk.PID = (d16 << 16) | e16;
}
+ return seed;
}
- public static void SetValuesFromSeedXDRNG_EReader(PKM pk, uint seed)
+ public static uint SetValuesFromSeedXDRNG_EReader(PKM pk, uint seed)
{
var D = XDRNG.Prev3(seed); // PID
var E = XDRNG.Next(D); // PID
pk.PID = (D & 0xFFFF0000) | (E >> 16);
+ return seed;
}
- private static void SetValuesFromSeedChannel(PKM pk, uint seed)
+ public static uint SetValuesFromSeedChannel(PKM pk, uint seed)
{
const ushort TID16 = 40122;
var sid = XDRNG.Next16(ref seed);
@@ -134,6 +145,7 @@ private static void SetValuesFromSeedChannel(PKM pk, uint seed)
Span ivs = stackalloc int[6];
XDRNG.GetSequentialIVsInt32(seed, ivs);
pk.SetIVs(ivs);
+ return seed;
}
public static void SetValuesFromSeed(PKM pk, PIDType type, uint seed)
@@ -142,7 +154,7 @@ public static void SetValuesFromSeed(PKM pk, PIDType type, uint seed)
method(pk, seed);
}
- private static Action GetGeneratorMethod(PIDType t)
+ private static Func GetGeneratorMethod(PIDType t)
{
switch (t)
{
@@ -173,6 +185,7 @@ public static void SetValuesFromSeed(PKM pk, PIDType type, uint seed)
{
var pid = pk.PID = PokewalkerRNG.GetPID(pk.TID16, pk.SID16, seed % 24, pk.Gender, pk.PersonalInfo.Gender);
pk.RefreshAbility((int)(pid & 1));
+ return seed;
};
// others: unimplemented
@@ -183,20 +196,22 @@ public static void SetValuesFromSeed(PKM pk, PIDType type, uint seed)
case G4MGAntiShiny:
break;
}
- return (_, _) => { };
+ return (_, seed) => seed;
}
- public static void SetRandomChainShinyPID(PKM pk, uint seed)
+ public static uint SetRandomChainShinyPID(PKM pk, uint seed)
{
pk.PID = ClassicEraRNG.GetChainShinyPID(ref seed, pk.ID32);
SetIVsFromSeedSequentialLCRNG(ref seed, pk);
+ return seed;
}
- private static void SetRandomPokeSpotPID(PKM pk, uint seed)
+ private static uint SetRandomPokeSpotPID(PKM pk, uint seed)
{
var D = XDRNG.Next(seed); // PID
var E = XDRNG.Next(D); // PID
pk.PID = (D & 0xFFFF0000) | (E >> 16);
+ return E;
}
public static void SetRandomPokeSpotPID(PKM pk, Nature nature, byte gender, int ability, int slot)
@@ -226,12 +241,13 @@ public static uint GetMG5ShinyPID(uint gval, uint av, ushort TID16, ushort SID16
return PID;
}
- public static void SetValuesFromSeedMG5Shiny(PKM pk, uint seed)
+ public static uint SetValuesFromSeedMG5Shiny(PKM pk, uint seed)
{
var gv = seed >> 24;
var av = seed & 1; // arbitrary choice
pk.PID = GetMG5ShinyPID(gv, av, pk.TID16, pk.SID16);
SetRandomIVs(pk);
+ return seed; // meh
}
public static uint SetRandomWildPID4(PKM pk, Nature nature, int ability, byte gender, PIDType type)
diff --git a/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs b/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs
index beb1b306f..189d90d0d 100644
--- a/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs
+++ b/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs
@@ -24,9 +24,11 @@ public override void Verify(LegalityAnalysis data)
PK8 when enc.Version == GameVersion.PLA => (int)Poke,
// No replacement done.
- _ => (int)None,
+ _ => NoBallReplace,
};
+ private const int NoBallReplace = (int)None;
+
private CheckResult VerifyBall(LegalityAnalysis data)
{
var info = data.Info;
@@ -34,7 +36,7 @@ private CheckResult VerifyBall(LegalityAnalysis data)
var pk = data.Entity;
var ball = IsReplacedBall(enc, pk);
- if (ball != 0)
+ if (ball != NoBallReplace)
return VerifyBallEquals(pk, ball);
// Capture / Inherit cases -- can be one of many balls
@@ -118,7 +120,7 @@ private CheckResult VerifyBallEggGen8BDSP(PKM pk, IEncounterTemplate enc)
if (species is (int)Species.Spinda) // Can't transfer via HOME.
return VerifyBallEquals(ball, BallUseLegality.WildPokeBalls4_HGSS);
- var result = BallContextHOME.Instance.CanBreedWithBall(species, enc.Form, ball, pk);
+ var result = BallContextHOME.Instance.CanBreedWithBall(species, enc.Form, ball);
return GetResult(result);
}
@@ -128,7 +130,7 @@ private CheckResult VerifyBallEggGen8(PKM pk, IEncounterTemplate enc)
if (ball > Beast)
return GetInvalid(LBallUnavailable);
- var result = BallContextHOME.Instance.CanBreedWithBall(enc.Species, enc.Form, ball, pk);
+ var result = BallContextHOME.Instance.CanBreedWithBall(enc.Species, enc.Form, ball);
return GetResult(result);
}
@@ -143,7 +145,7 @@ private CheckResult VerifyBallEggGen9(PKM pk, IEncounterTemplate enc)
if (species is >= (int)Species.Sprigatito and <= (int)Species.Quaquaval)
return VerifyBallEquals(ball, BallUseLegality.WildPokeballs8g_WithoutRaid);
- var result = BallContextHOME.Instance.CanBreedWithBall(enc.Species, enc.Form, ball, pk);
+ var result = BallContextHOME.Instance.CanBreedWithBall(species, enc.Form, ball);
return GetResult(result);
}