using System.Collections.Generic; namespace PKHeX.Core { public static class Records { private const int LargeRecordCount = 100; private const int SmallRecordCount = 100; private const int Count = LargeRecordCount + SmallRecordCount; /// /// Gets the maximum value for the specified record using the provided maximum list. /// /// Record ID to retrieve the maximum for /// Maximum enum values for each record /// Maximum the record can be public static int GetMax(int recordID, IReadOnlyList maxes) { if (recordID >= Count) return 0; return MaxByType[maxes[recordID]]; } public static int GetOffset(int baseOfs, int recordID) { if (recordID < LargeRecordCount) return baseOfs + (recordID * 4); if (recordID < Count) return baseOfs + (recordID * 2) + 200; // first 100 are 4bytes, so bias the difference return -1; } private static readonly int[] MaxByType = { 999999999, 9999999, 999999, 99999, 65535, 9999, 999 }; public static readonly IReadOnlyList MaxType_SM = new[] { 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, }; public static readonly IReadOnlyList MaxType_USUM = new[] { 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 5, 5, 4, 5, 5 }; public static readonly Dictionary RecordList_7 = new Dictionary { {000, "Steps Taken"}, {001, "Times Saved"}, {002, "Storyline Completed Time"}, {003, "Total Battles"}, {004, "Wild Pokémon Battles"}, {005, "Trainer Battles"}, {006, "Pokemon Caught"}, {007, "Pokemon Caught Fishing"}, {008, "Eggs Hatched"}, {009, "Pokémon Evolved"}, {010, "Pokémon Healed at Pokémon Centers"}, {011, "Link Trades"}, {012, "Link Battles"}, {013, "Link Battle Wins"}, {014, "Link Battle Losses"}, {015, "Battle Spot Battles"}, {016, "Battle Spot Wins"}, {017, "Battle Spot Losses"}, {018, "Mart Stack Purchases"}, {019, "Money Spent"}, {020, "Pokémon deposited at Nursery"}, {021, "Pokémon Defeated"}, {022, "Exp. Points Collected (Highest)"}, {023, "Exp. Points Collected (Today)"}, {024, "Deposited in the GTS"}, {025, "Nicknames Given"}, {026, "Bonus Premier Balls Received"}, {027, "Battle Points Earned"}, {028, "Battle Points Spent"}, {029, "Super Effective Moves Used"}, {030, "Clothing Count"}, {031, "Salon Uses"}, {032, "Berry Harvests"}, {033, "Trades at the GTS"}, {034, "Wonder Trades"}, {035, "Quick Links"}, {036, "Pokemon Rides"}, {037, "Beans Given"}, {038, "Festival Coins Spent"}, {039, "Poke Beans Collected"}, {040, "Battle Tree Challenges"}, {041, "Z-Moves Used"}, {042, "Balls Used"}, {043, "Items Thieved"}, {044, "Moves Used"}, {045, "Levels Raised"}, {046, "Ran From Battles"}, {047, "Rock Smash Items"}, {048, "Medicine Used"}, {050, "Total Thumbs-Ups"}, {051, "Times Twirled (Pirouette)"}, {052, "Record Thumbs-ups"}, {053, "Pokemon Petted"}, {054, "Poké Pelago Visits"}, {055, "Poké Bean Trades"}, {056, "Poké Pelago Tapped Pokémon"}, {057, "Poké Pelago Bean Stacks put in Crate"}, {058, "Poké Pelago Levels Gained"}, {062, "Battle Video QR Teams Scanned"}, {063, "Battle Videos Watched"}, {064, "Battle Videos Rebattled"}, {065, "RotomDex Interactions"}, {066, "Guests Interacted With"}, {067, "Berry Piles (not full) Collected"}, {068, "Berry Piles (full) Collected"}, {069, "Items Reeled In"}, // USUM {070, "Roto Lotos"}, {072, "Stickers Collected"}, {073, "Mantine Surf BP Earned"}, {074, "Battle Agency Wins"}, {100, "Champion Title Defense"}, {104, "Moves used with No Effect"}, {105, "Own Fainted Pokémon"}, {107, "Failed Run Attempts"}, {109, "Failed Fishing Attempts"}, {110, "Pokemon Defeated (Highest)"}, {111, "Pokemon Defeated (Today)"}, {112, "Pokemon Caught (Highest)"}, {113, "Pokemon Caught (Today)"}, {114, "Trainers Battled (Highest)"}, {115, "Trainers Battled (Today)"}, {116, "Pokemon Evolved (Highest)"}, {117, "Pokemon Evolved (Today)"}, {118, "Fossils Restored"}, {119, "Photos Rated"}, {120, "Best (Super) Singles Streak"}, {121, "Best (Super) Doubles Streak"}, {122, "Best (Super) Multi Streak"}, {123, "Loto-ID Wins"}, {124, "PP Raised"}, {125, "Amie Used"}, {126, "Fishing Chains"}, {127, "Shiny Pokemon Encountered"}, {128, "Missions Participated In"}, {129, "Facilities Hosted"}, {130, "QR Code Scans"}, {131, "Moves learned with TMs"}, {132, "Café Drinks Bought"}, {133, "Trainer Card Photos Taken"}, {134, "Evolutions Cancelled"}, {135, "SOS Battle Allies Called"}, {136, "Friendship Raised"}, {137, "Battle Royal Dome Battles"}, {138, "Items Picked Up after Battle"}, {139, "Ate in Malasadas Shop"}, {140, "Hyper Trainings Recieved"}, {141, "Dishes eaten in Battle Buffet"}, {142, "Pokémon Refresh Accessed"}, {143, "Pokémon Storage System Log-outs"}, {144, "Lomi Lomi Massages"}, {145, "Times laid down in Ilima's Bed"}, {146, "Times laid down in Guzma's Bed"}, {147, "Times laid down in Kiawe's Bed"}, {148, "Times laid down in Lana's Bed"}, {149, "Times laid down in Mallow's Bed"}, {150, "Times laid down in Olivia's Bed"}, {151, "Times laid down in Hapu's Bed"}, {152, "Times laid down in Lusamine's Bed"}, {153, "Ambush/Smash post-battle items received"}, {154, "Rustling Tree Encounters"}, {155, "Ledges Jumped Down"}, {156, "Water Splash Encounters"}, {157, "Sand Cloud Encounters"}, {158, "Outfit Changes"}, {159, "Battle Royal Dome Wins"}, {160, "Pelago Treasure Hunts"}, {161, "Pelago Training Sessions"}, {162, "Pelago Hot Spring Sessions"}, {163, "Special QR 1"}, {164, "Special QR 2"}, {165, "Special QR Code Scans"}, {166, "Island Scans"}, {167, "Rustling Bush Encounters"}, {168, "Fly Shadow Encounters"}, {169, "Rustling Grass Encounters"}, {170, "Dirt Cloud Encounters"}, {171, "Wimpod Chases"}, {172, "Berry Tree Battles won"}, {173, "Bubbling Spot Encounters/Items"}, {174, "Times laid down in Own Bed"}, {175, "Catch a lot of Pokémon!"}, {176, "Trade Pokémon at the GTS!"}, {177, "Hatch a lot of Eggs!"}, {178, "Harvest Poké Beans!"}, {179, "Get high scores with your Poké Finder!"}, {180, "Find Pokémon using Island Scan!"}, {181, "Catch Crabrawler!"}, {182, "Defend your Champion title!"}, {183, "Fish Pokémon at rare spots!"}, {185, "Try your luck!"}, {186, "Get BP at the Battle Tree!"}, {187, "Catch a lot of Pokémon!"}, // USUM {188, "Ultra Wormhole Travels"}, {189, "Mantine Surf Plays"}, {190, "Photo Club Photos saved"}, {191, "Battle Agency Battles"}, {195, "Photo Club Sticker usage"}, {196, "Photo Club Photo Shoots"}, {197, "Highest Wormhole Travel Distance"}, {198, "Highest Mantine Surf BP Earned"}, }; } }