diff --git a/PKHeX.Core/Legality/Encounters/Data/EncountersGO.cs b/PKHeX.Core/Legality/Encounters/Data/EncountersGO.cs index 9a32ec03f..48aa2259f 100644 --- a/PKHeX.Core/Legality/Encounters/Data/EncountersGO.cs +++ b/PKHeX.Core/Legality/Encounters/Data/EncountersGO.cs @@ -9,7 +9,7 @@ namespace PKHeX.Core internal static class EncountersGO { /// Clamp for generating encounters; no species allowed above this value except for those in . - private const int MaxSpeciesID_GO_HOME = Legal.MaxSpeciesID_6; + private const int MaxSpeciesID_GO_HOME = Legal.MaxSpeciesID_5; /// When generating encounters, these species will be skipped. private static readonly HashSet DisallowedSpecies = new HashSet @@ -25,6 +25,7 @@ internal static class EncountersGO (int)Obstagoon, (int)Perrserker, + (int)Sirfetchd, (int)Runerigus, }; diff --git a/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs b/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs index 9a03d0520..8160ebb9a 100644 --- a/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs @@ -119,34 +119,48 @@ public void VerifyTransferLegalityG8(LegalityAnalysis data) { data.AddLine(GetInvalid(LTransferBad)); } + else if (data.EncounterMatch.Version == GameVersion.GO) + { + VerifyHOMETracker(data, pkm); + } else if (data.Info.Generation < 8 && pkm.Format >= 8) { - if (!pkm.GG && pkm is IScaledSize s) + if (data.EncounterMatch is EncounterStatic7 s && FormConverter.IsTotemForm(s.Species, s.Form, 7)) { - if (s.HeightScalar != 0) + if (Legal.Totem_NoTransfer.Contains(s.Species)) data.AddLine(GetInvalid(LTransferBad)); - if (s.WeightScalar != 0) + if (pkm.AltForm != FormConverter.GetTotemBaseForm(s.Species, s.Form)) data.AddLine(GetInvalid(LTransferBad)); - - var enc = data.EncounterMatch; - if (data.Info.Generation == 7 && FormConverter.IsTotemForm(enc.Species, enc.Form, 7)) - { - if (Legal.Totem_NoTransfer.Contains(data.EncounterMatch.Species)) - data.AddLine(GetInvalid(LTransferBad)); - if (pkm.AltForm != FormConverter.GetTotemBaseForm(enc.Species, enc.Form)) - data.AddLine(GetInvalid(LTransferBad)); - } } - // Tracker value is set via Transfer across HOME. - // Can't validate the actual values (we aren't the server), so we can only check against zero. - if (pkm is IHomeTrack home && home.Tracker == 0) - { - data.AddLine(Get(LTransferTrackerMissing, ParseSettings.Gen8TransferTrackerNotPresent)); - // To the reader: It seems like the best course of action for setting a tracker is: - // - Transfer a 0-Tracker pkm to HOME to get assigned a valid Tracker - // - Don't make one up. - } + VerifyHOMETransfer(data, pkm); + VerifyHOMETracker(data, pkm); + } + } + + private void VerifyHOMETransfer(LegalityAnalysis data, PKM pkm) + { + if (!(pkm is IScaledSize s)) + return; + + if (pkm.LGPE || pkm.GO) + return; // can have any size value + if (s.HeightScalar != 0) + data.AddLine(GetInvalid(LTransferBad)); + if (s.WeightScalar != 0) + data.AddLine(GetInvalid(LTransferBad)); + } + + private void VerifyHOMETracker(LegalityAnalysis data, PKM pkm) + { + // Tracker value is set via Transfer across HOME. + // Can't validate the actual values (we aren't the server), so we can only check against zero. + if (pkm is IHomeTrack home && home.Tracker == 0) + { + data.AddLine(Get(LTransferTrackerMissing, ParseSettings.Gen8TransferTrackerNotPresent)); + // To the reader: It seems like the best course of action for setting a tracker is: + // - Transfer a 0-Tracker pkm to HOME to get assigned a valid Tracker + // - Don't make one up. } } diff --git a/PKHeX.Core/PKM/PKM.cs b/PKHeX.Core/PKM/PKM.cs index b0d294cef..26cb71774 100644 --- a/PKHeX.Core/PKM/PKM.cs +++ b/PKHeX.Core/PKM/PKM.cs @@ -298,9 +298,11 @@ private void SetID7(int sid7, int tid7) public bool SWSH => Version == (int)GameVersion.SW || Version == (int)GameVersion.SH; protected bool PtHGSS => Pt || HGSS; + public bool GO_LGPE => GO && Met_Location == 50; + public bool GO_HOME => GO && Met_Location == Locations.GO8; public bool VC => VC1 || VC2; - public bool GG => LGPE || GO; - public bool Gen8 => Version >= 44 && Version <= 45; + public bool GG => LGPE || GO_LGPE; + public bool Gen8 => (Version >= 44 && Version <= 45) || GO_HOME; public bool Gen7 => (Version >= 30 && Version <= 33) || GG; public bool Gen6 => Version >= 24 && Version <= 29; public bool Gen5 => Version >= 20 && Version <= 23;