From c401781526c62191f3e242f60b5c155946771be2 Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 26 Jan 2017 19:18:20 -0800 Subject: [PATCH] Add pk6/pk7 differentiation Moves a lot of const values from SAV to Legal for reuse. Closes #754 --- PKHeX/Legality/Tables1.cs | 6 +++-- PKHeX/Legality/Tables2.cs | 6 +++-- PKHeX/Legality/Tables3.cs | 7 ++++-- PKHeX/Legality/Tables4.cs | 8 +++++-- PKHeX/Legality/Tables5.cs | 8 +++++-- PKHeX/Legality/Tables6.cs | 10 ++++++-- PKHeX/Legality/Tables7.cs | 6 ++++- PKHeX/PKM/PKMConverter.cs | 48 +++++++++++++++++++++++++++++++++++---- PKHeX/Saves/SAV1.cs | 6 ++--- PKHeX/Saves/SAV2.cs | 6 ++--- PKHeX/Saves/SAV3.cs | 8 +++---- PKHeX/Saves/SAV4.cs | 8 +++---- PKHeX/Saves/SAV5.cs | 10 ++++---- PKHeX/Saves/SAV6.cs | 10 ++++---- PKHeX/Saves/SAV7.cs | 10 ++++---- 15 files changed, 111 insertions(+), 46 deletions(-) diff --git a/PKHeX/Legality/Tables1.cs b/PKHeX/Legality/Tables1.cs index 2412eadba..2f6bd8891 100644 --- a/PKHeX/Legality/Tables1.cs +++ b/PKHeX/Legality/Tables1.cs @@ -5,8 +5,10 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_1 = 151; - - // PKHeX Valid Array Storage + internal const int MaxMoveID_1 = 165; + internal const int MaxItemID_1 = 255; + internal const int MaxAbilityID_1 = 0; + internal static readonly ushort[] Pouch_Items_RBY = Enumerable.Range(0, 7) // 0-6 .Concat(Enumerable.Range(10, 11)) // 10-20 .Concat(Enumerable.Range(29, 15)) // 29-43 diff --git a/PKHeX/Legality/Tables2.cs b/PKHeX/Legality/Tables2.cs index 8b7744802..542a7e868 100644 --- a/PKHeX/Legality/Tables2.cs +++ b/PKHeX/Legality/Tables2.cs @@ -5,8 +5,10 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_2 = 251; - - // PKHeX Valid Array Storage + internal const int MaxMoveID_2 = 251; + internal const int MaxItemID_2 = 255; + internal const int MaxAbilityID_2 = 0; + internal static readonly ushort[] Pouch_Items_GSC = { 3, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 52, 53, 57, 60, 62, 63, 64, 65, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 117, 118, 119, 121, 122, 123, 124, 125, 126, 131, 132, 138, 139, 140, 143, 144, 146, 150, 151, 152, 156, 158, 163, 168, 169, 170, 172, 173, 174, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189 }; diff --git a/PKHeX/Legality/Tables3.cs b/PKHeX/Legality/Tables3.cs index 298f0de22..6bd11db41 100644 --- a/PKHeX/Legality/Tables3.cs +++ b/PKHeX/Legality/Tables3.cs @@ -5,8 +5,11 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_3 = 386; - - // PKHeX Valid Array Storage + internal const int MaxMoveID_3 = 354; + internal const int MaxItemID_3 = 374; + internal const int MaxAbilityID_3 = 77; + internal const int MaxBallID_3 = 0xC; + #region RS internal static readonly ushort[] Pouch_Items_RS = { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 93, 94, 95, 96, 97, 98, 103, 104, 106, 107, 108, 109, 110, 111, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 254, 255, 256, 257, 258 diff --git a/PKHeX/Legality/Tables4.cs b/PKHeX/Legality/Tables4.cs index 83a7b1233..12127926c 100644 --- a/PKHeX/Legality/Tables4.cs +++ b/PKHeX/Legality/Tables4.cs @@ -5,8 +5,12 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_4 = 493; - - // PKHeX Valid Array Storage + internal const int MaxMoveID_4 = 467; + internal const int MaxItemID_4_DP = 464; + internal const int MaxItemID_4_Pt = 467; + internal const int MaxItemID_4_HGSS = 536; + internal const int MaxAbilityID_4 = 123; + internal const int MaxBallID_4 = 0x18; internal static readonly int[] Met_HGSS_0 = { diff --git a/PKHeX/Legality/Tables5.cs b/PKHeX/Legality/Tables5.cs index e3444b0c9..833b20018 100644 --- a/PKHeX/Legality/Tables5.cs +++ b/PKHeX/Legality/Tables5.cs @@ -5,8 +5,12 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_5 = 649; - - // PKHeX Valid Array Storage + internal const int MaxMoveID_5 = 559; + internal const int MaxItemID_5_BW = 632; + internal const int MaxItemID_5_B2W2 = 638; + internal const int MaxAbilityID_5 = 164; + internal const int MaxBallID_5 = 0x19; + internal const int MaxGameID_5 = 23; // B2 internal static readonly int[] Met_BW2c = { 0, 60002, 30003 }; diff --git a/PKHeX/Legality/Tables6.cs b/PKHeX/Legality/Tables6.cs index fae5711ee..dcd694a84 100644 --- a/PKHeX/Legality/Tables6.cs +++ b/PKHeX/Legality/Tables6.cs @@ -5,8 +5,14 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_6 = 721; - - // PKHeX Valid Array Storage + internal const int MaxMoveID_6_XY = 617; + internal const int MaxMoveID_6_AO = 621; + internal const int MaxItemID_6_XY = 717; + internal const int MaxItemID_6_AO = 775; + internal const int MaxAbilityID_6_XY = 188; + internal const int MaxAbilityID_6_AO = 191; + internal const int MaxBallID_6 = 0x19; + internal const int MaxGameID_6 = 27; // OR #region Met Locations internal static readonly int[] Met_XYc = {0, 60002, 30002,}; diff --git a/PKHeX/Legality/Tables7.cs b/PKHeX/Legality/Tables7.cs index 833a0e01d..da478a2cd 100644 --- a/PKHeX/Legality/Tables7.cs +++ b/PKHeX/Legality/Tables7.cs @@ -5,7 +5,11 @@ namespace PKHeX.Core public static partial class Legal { internal const int MaxSpeciesID_7 = 802; - // PKHeX Valid Array Storage + internal const int MaxMoveID_7 = 720; + internal const int MaxItemID_7 = 920; + internal const int MaxAbilityID_7 = 232; + internal const int MaxBallID_7 = 0x1A; // 26 + internal const int MaxGameID_7 = 38; // Yellow VC #region Met Locations diff --git a/PKHeX/PKM/PKMConverter.cs b/PKHeX/PKM/PKMConverter.cs index f16d423bf..e389ca8b9 100644 --- a/PKHeX/PKM/PKMConverter.cs +++ b/PKHeX/PKM/PKMConverter.cs @@ -109,14 +109,54 @@ namespace PKHeX.Core case 5: return new PK5(data, ident); case 6: - PKM pkx = new PK6(data, ident); - if (pkx.SM || pkx.VC || pkx.Horohoro) - pkx = new PK7(data, ident); - return pkx; + var pkx = new PK6(data, ident); + return checkPKMFormat7(pkx); default: return null; } } + + /// + /// Checks if the input PK6 file is really a PK7, if so, updates the object. + /// + /// PKM to check + /// Updated PKM if actually PK7 + private static PKM checkPKMFormat7(PK6 pk) => checkPK6is7(pk) ? new PK7(pk.Data, pk.Identifier) : (PKM)pk; + /// + /// Checks if the input PK6 file is really a PK7. + /// + /// PKM to check + /// Boolean is a PK7 + private static bool checkPK6is7(PK6 pk) + { + if (pk.Version > Legal.MaxGameID_6) + return true; + if (pk.Geo1_Country != 0) + return false; + + int lvl = pk.CurrentLevel; + if (lvl < 100 && pk.EncounterType != 0) + return false; + if (pk.EncounterType > 24) + return true; + + if (pk.Enjoyment != 0 || pk.Fullness != 0) + return false; + + // Check Ranges + if (pk.Species > Legal.MaxSpeciesID_6) + return true; + if (pk.Moves.Any(move => move > Legal.MaxMoveID_6_AO)) + return true; + if (pk.RelearnMoves.Any(move => move > Legal.MaxMoveID_6_AO)) + return true; + if (pk.Ability > Legal.MaxAbilityID_6_AO) + return true; + if (pk.HeldItem > Legal.MaxItemID_6_AO) + return true; + + return false; // 6 + } public static PKM convertToFormat(PKM pk, Type PKMType, out string comment) { diff --git a/PKHeX/Saves/SAV1.cs b/PKHeX/Saves/SAV1.cs index f4541f950..d947ca7a9 100644 --- a/PKHeX/Saves/SAV1.cs +++ b/PKHeX/Saves/SAV1.cs @@ -168,10 +168,10 @@ namespace PKHeX.Core public override PKM BlankPKM => new PK1(null, null, Japanese); public override Type PKMType => typeof(PK1); - public override int MaxMoveID => 165; + public override int MaxMoveID => Legal.MaxMoveID_1; public override int MaxSpeciesID => Legal.MaxSpeciesID_1; - public override int MaxAbilityID => 0; - public override int MaxItemID => 255; + public override int MaxAbilityID => Legal.MaxAbilityID_1; + public override int MaxItemID => Legal.MaxItemID_1; public override int MaxBallID => 0; public override int MaxGameID => 99; // What do I set this to...? public override int MaxMoney => 999999; diff --git a/PKHeX/Saves/SAV2.cs b/PKHeX/Saves/SAV2.cs index 7349c4e1b..9ef1626fa 100644 --- a/PKHeX/Saves/SAV2.cs +++ b/PKHeX/Saves/SAV2.cs @@ -219,10 +219,10 @@ namespace PKHeX.Core private int SIZE_BOX => BoxSlotCount*SIZE_STORED; private int SIZE_STOREDBOX => PokemonList2.GetDataLength(Japanese ? PokemonList2.CapacityType.StoredJP : PokemonList2.CapacityType.Stored, Japanese); - public override int MaxMoveID => 251; + public override int MaxMoveID => Legal.MaxMoveID_2; public override int MaxSpeciesID => Legal.MaxSpeciesID_2; - public override int MaxAbilityID => 0; - public override int MaxItemID => 255; + public override int MaxAbilityID => Legal.MaxAbilityID_2; + public override int MaxItemID => Legal.MaxItemID_2; public override int MaxBallID => 0; public override int MaxGameID => 99; // What do I set this to...? public override int MaxMoney => 999999; diff --git a/PKHeX/Saves/SAV3.cs b/PKHeX/Saves/SAV3.cs index 376f5c4a3..54b903a4b 100644 --- a/PKHeX/Saves/SAV3.cs +++ b/PKHeX/Saves/SAV3.cs @@ -166,11 +166,11 @@ namespace PKHeX.Core public override PKM BlankPKM => new PK3(); public override Type PKMType => typeof(PK3); - public override int MaxMoveID => 354; + public override int MaxMoveID => Legal.MaxMoveID_3; public override int MaxSpeciesID => Legal.MaxSpeciesID_3; - public override int MaxAbilityID => 77; - public override int MaxItemID => 374; - public override int MaxBallID => 0xC; + public override int MaxAbilityID => Legal.MaxAbilityID_3; + public override int MaxItemID => Legal.MaxItemID_3; + public override int MaxBallID => Legal.MaxBallID_3; public override int MaxGameID => 5; public override int BoxCount => 14; diff --git a/PKHeX/Saves/SAV4.cs b/PKHeX/Saves/SAV4.cs index e92d45305..d31648565 100644 --- a/PKHeX/Saves/SAV4.cs +++ b/PKHeX/Saves/SAV4.cs @@ -56,11 +56,11 @@ namespace PKHeX.Core public override int NickLength => 10; public override int MaxMoney => 999999; - public override int MaxMoveID => 467; + public override int MaxMoveID => Legal.MaxMoveID_4; public override int MaxSpeciesID => Legal.MaxSpeciesID_4; - public override int MaxItemID => Version == GameVersion.HGSS ? 536 : Version == GameVersion.Pt ? 467 : 464; - public override int MaxAbilityID => 123; - public override int MaxBallID => 0x18; + public override int MaxItemID => Version == GameVersion.HGSS ? Legal.MaxItemID_4_HGSS : Version == GameVersion.Pt ? Legal.MaxItemID_4_Pt : Legal.MaxItemID_4_DP; + public override int MaxAbilityID => Legal.MaxAbilityID_4; + public override int MaxBallID => Legal.MaxBallID_4; public override int MaxGameID => 15; // Colo/XD // Checksums diff --git a/PKHeX/Saves/SAV5.cs b/PKHeX/Saves/SAV5.cs index a5a700dec..6d86ac581 100644 --- a/PKHeX/Saves/SAV5.cs +++ b/PKHeX/Saves/SAV5.cs @@ -108,12 +108,12 @@ namespace PKHeX.Core protected override int EventConstMax => 0x35E/2; protected override int GiftCountMax => 12; - public override int MaxMoveID => 559; + public override int MaxMoveID => Legal.MaxMoveID_5; public override int MaxSpeciesID => Legal.MaxSpeciesID_5; - public override int MaxItemID => Version == GameVersion.BW ? 632 : 638; - public override int MaxAbilityID => 164; - public override int MaxBallID => 0x19; - public override int MaxGameID => 23; // B2 + public override int MaxItemID => Version == GameVersion.BW ? Legal.MaxItemID_5_BW : Legal.MaxItemID_5_B2W2; + public override int MaxAbilityID => Legal.MaxAbilityID_5; + public override int MaxBallID => Legal.MaxBallID_5; + public override int MaxGameID => Legal.MaxGameID_5; // B2 // Blocks & Offsets private BlockInfo[] Blocks; diff --git a/PKHeX/Saves/SAV6.cs b/PKHeX/Saves/SAV6.cs index 527486a87..37fa8415f 100644 --- a/PKHeX/Saves/SAV6.cs +++ b/PKHeX/Saves/SAV6.cs @@ -44,12 +44,12 @@ namespace PKHeX.Core public override int OTLength => 12; public override int NickLength => 12; - public override int MaxMoveID => XY ? 617 : 621; + public override int MaxMoveID => XY ? Legal.MaxMoveID_6_XY : Legal.MaxMoveID_6_AO; public override int MaxSpeciesID => Legal.MaxSpeciesID_6; - public override int MaxItemID => XY ? 717 : 775; - public override int MaxAbilityID => XY ? 188 : 191; - public override int MaxBallID => 0x19; - public override int MaxGameID => 27; // OR + public override int MaxItemID => XY ? Legal.MaxItemID_6_XY : Legal.MaxItemID_6_AO; + public override int MaxAbilityID => XY ? Legal.MaxAbilityID_6_XY : Legal.MaxAbilityID_6_AO; + public override int MaxBallID => Legal.MaxBallID_6; + public override int MaxGameID => Legal.MaxGameID_6; // OR // Feature Overrides public override bool HasGeolocation => true; diff --git a/PKHeX/Saves/SAV7.cs b/PKHeX/Saves/SAV7.cs index 61a51ebe5..171907937 100644 --- a/PKHeX/Saves/SAV7.cs +++ b/PKHeX/Saves/SAV7.cs @@ -80,12 +80,12 @@ namespace PKHeX.Core public override int OTLength => 12; public override int NickLength => 12; - public override int MaxMoveID => 720; + public override int MaxMoveID => Legal.MaxMoveID_7; public override int MaxSpeciesID => Legal.MaxSpeciesID_7; - public override int MaxItemID => 920; - public override int MaxAbilityID => 232; - public override int MaxBallID => 0x1A; // 26 - public override int MaxGameID => 38; // Yellow VC + public override int MaxItemID => Legal.MaxItemID_7; + public override int MaxAbilityID => Legal.MaxAbilityID_7; + public override int MaxBallID => Legal.MaxBallID_7; // 26 + public override int MaxGameID => Legal.MaxGameID_7; public int QRSaveData;