using System.Collections.Generic; using System.Linq; namespace PKHeX.Core { public static partial class Legal { internal const int MaxSpeciesID_7 = 802; internal const int MaxMoveID_7 = 719; internal const int MaxItemID_7 = 920; internal const int MaxAbilityID_7 = 232; internal const int MaxBallID_7 = 0x1A; // 26 internal const int MaxGameID_7 = 41; // Crystal (VC?) internal const int MaxSpeciesID_7_USUM = 807; internal const int MaxMoveID_7_USUM = 728; internal const int MaxItemID_7_USUM = 959; internal const int MaxAbilityID_7_USUM = 233; #region Met Locations internal static readonly int[] Met_SM_0 = { 002, 004, // Invalid 006, 008, 010, 012, 014, 016, 018, 020, 022, 024, 026, 028, 030, 032, 034, 036, 038, 040, 042, 044, 046, 048, 050, 052, 054, 056, 058, 060, 062, 064, 066, 068, 070, 072, 074, 076, 078, 082, 084, 086, 088, 090, 092, 094, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 195, 196, 197, // Invalid 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, }; internal static readonly int[] Met_SM_3 = { 30001, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017 }; internal static readonly int[] Met_SM_4 = { 40001, 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40035, 40036, 40037, 40038, 40039, 40040, 40041, 40042, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 40060, 40061, 40062, 40063, 40064, 40065, 40066, 40067, 40068, 40069, 40070, 40071, 40072, 40073, 40074, 40075, 40076, 40077, 40078, 40079, 40080, 40081, 40082, 40083, 40084, 40085, 40086, 40087, 40088, }; internal static readonly int[] Met_SM_6 = {/* XY */ 60001, 60003, /* ORAS */ 60004, }; #endregion internal static readonly int[] Tutors_USUM = { 450, 343, 162, 530, 324, 442, 402, 529, 340, 067, 441, 253, 009, 007, 008, 277, 335, 414, 492, 356, 393, 334, 387, 276, 527, 196, 401, 428, 406, 304, 231, 020, 173, 282, 235, 257, 272, 215, 366, 143, 220, 202, 409, 264, 351, 352, 380, 388, 180, 495, 270, 271, 478, 472, 283, 200, 278, 289, 446, 285, 477, 502, 432, 710, 707, 675, 673 }; internal static readonly ushort[] Pouch_Regular_SM = // 00 { 068, 069, 070, 071, 072, 073, 074, 075, 076, 077, 078, 079, 080, 081, 082, 083, 084, 085, 086, 087, 088, 089, 090, 091, 092, 093, 094, 099, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 116, 117, 118, 119, 135, 136, 137, 213, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 499, 534, 535, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 571, 572, 573, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 639, 640, 644, 646, 647, 648, 649, 650, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 699, 704, 710, 711, 715, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 767, 768, 769, 770, 795, 796, 844, 849, 853, 854, 855, 856, 879, 880, 881, 882, 883, 884, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, }; internal static readonly ushort[] Pouch_Ball_SM = { // 08 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 492, 493, 494, 495, 496, 497, 498, 576, 851 }; internal static readonly ushort[] Pouch_Battle_SM = { // 16 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 577, 846, }; internal static readonly ushort[] Pouch_Items_SM = Pouch_Regular_SM.Concat(Pouch_Ball_SM).Concat(Pouch_Battle_SM).ToArray(); internal static readonly ushort[] Pouch_Key_SM = { 216, 465, 466, 628, 629, 631, 632, 638, 705, 706, 765, 773, 797, 841, 842, 843, 845, 847, 850, 857, 858, 860, }; internal static readonly ushort[] Pouch_Key_USUM = Pouch_Key_SM.Concat(new ushort[] { 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 440, }).ToArray(); public static readonly ushort[] Pouch_Roto_USUM = { 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959 }; internal static readonly ushort[] Pouch_TMHM_SM = { // 02 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 618, 619, 620, 690, 691, 692, 693, 694, }; internal static readonly ushort[] Pouch_Medicine_SM = { // 32 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, 52, 53, 54, 65, 66, 67, 134, 504, 565, 566, 567, 568, 569, 570, 591, 645, 708, 709, 852, }; internal static readonly ushort[] Pouch_Berries_SM = { 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 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, 686, 687, 688, }; internal static readonly ushort[] Pouch_ZCrystal_SM = { // Bead 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, }; internal static readonly ushort[] Pouch_ZCrystalHeld_SM = { // Piece 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 798, 799, 800, 801, 802, 803, 804, 805, 806, 836 }; internal static readonly ushort[] Pouch_ZCrystal_USUM = Pouch_ZCrystal_SM.Concat(new ushort[] { // Bead 927, 928, 929, 930, 931, 932 }).ToArray(); internal static readonly ushort[] Pouch_ZCrystalHeld_USUM = Pouch_ZCrystalHeld_SM.Concat(new ushort[] { // Piece 921, 922, 923, 924, 925, 926 }).ToArray(); public static readonly Dictionary ZCrystalDictionary = Pouch_ZCrystal_USUM .Zip(Pouch_ZCrystalHeld_USUM, (k, v) => new KeyValuePair(k, v)) .ToDictionary(x => x.Key, x => x.Value); internal static readonly ushort[] HeldItems_SM = ArrayUtil.ConcatAll(Pouch_Items_SM, Pouch_Berries_SM, Pouch_Medicine_SM, Pouch_ZCrystalHeld_SM); internal static readonly ushort[] HeldItems_USUM = ArrayUtil.ConcatAll(Pouch_Items_SM, Pouch_Berries_SM, Pouch_Medicine_SM, Pouch_ZCrystalHeld_USUM, Pouch_Roto_USUM); internal static readonly HashSet WildPokeballs7 = new HashSet { 0x01, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, // Johto Balls 0x1A, // Beast }; internal static readonly HashSet AlolanOriginForms = new HashSet { 019, // Rattata 020, // Raticate 027, // Sandshrew 028, // Sandslash 037, // Vulpix 038, // Ninetales 050, // Diglett 051, // Dugtrio 052, // Meowth 053, // Persian 074, // Geodude 075, // Graveler 076, // Golem 088, // Grimer 089, // Muk }; internal static readonly HashSet AlolanVariantEvolutions12 = new HashSet { 026, // Raichu 103, // Exeggutor 105, // Marowak }; internal static readonly HashSet EvolveToAlolanForms = new HashSet(AlolanVariantEvolutions12.Concat(AlolanOriginForms)); public static readonly HashSet PastGenAlolanNatives = new HashSet { 010, 011, 012, 019, 020, 021, 022, 025, 026, 027, 028, 035, 036, 037, 038, 039, 040, 041, 042, 046, 047, 050, 051, 052, 053, 054, 055, 056, 057, 058, 059, 060, 061, 062, 063, 064, 065, 066, 067, 068, 072, 073, 074, 075, 076, 079, 080, 081, 082, 088, 089, 090, 091, 092, 093, 094, 096, 097, 102, 103, 104, 105, 113, 115, 118, 119, 120, 121, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 142, 143, 147, 148, 149, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 185, 186, 196, 197, 198, 199, 200, 209, 210, 212, 215, 222, 225, 227, 233, 235, 239, 240, 241, 242, 278, 279, 283, 284, 296, 297, 299, 302, 318, 319, 320, 321, 324, 327, 328, 329, 330, 339, 340, 349, 350, 351, 359, 361, 362, 369, 370, 371, 372, 373, 374, 375, 376, 408, 409, 410, 411, 422, 423, 425, 426, 429, 430, 438, 440, 443, 444, 445, 446, 447, 448, 456, 457, 461, 462, 466, 467, 470, 471, 474, 476, 478, 506, 507, 508, 524, 525, 526, 546, 547, 548, 549, 551, 552, 553, 564, 565, 566, 567, 568, 569, 582, 583, 584, 587, 594, 627, 628, 629, 630, 661, 662, 663, 674, 675, 700, 703, 704, 705, 706, 707, 708, 709, 718, // Regular 023, 086, 108, 122, 138, 140, 163, 177, 179, 190, 204, 206, 214, 223, 228, 238, 246, 303, 309, 341, 343, 345, 347, 352, 353, 357, 366, 427, 439, 458, 550, 559, 570, 572, 592, 605, 619, 621, 622, 624, 636, 667, 669, 676, 686, 690, 692, 696, 698, 701, 702, 714, // Wormhole 333, 334, // Altaria 193, 469, // Yanmega 561, // Sigilyph 580, 581, // Swanna 276, 277, // Swellow 451, 452, // Drapion 531, // Audino 694, 695, // Heliolisk 273, 274, 275, // Nuzleaf 325, 326, // Gumpig 459, 460, // Abomasnow 307, 308, // Medicham 449, 450, // Hippowdon 557, 558, // Crustle 218, 219, // Magcargo 688, 689, // Barbaracle 270, 271, 272, // Lombre 618, // Stunfisk 418, 419, // Floatzel 194, 195, // Quagsire 100, 101 // Voltorb & Electrode }; public static readonly HashSet PastGenAlolanNativesUncapturable = new HashSet { 142, // Aerodacyl 137, 233, 474, // Porygon++ 138, 139, 140, 141, // Gen1 Fossils 345, 346, 347, 348, // Gen3 Fossils 408, 409, 410, 411, // Gen4 Fossils 564, 565, 566, 567, // Gen5 Fossils 696, 697, 698, 699, // Gen6 Fossils }; internal static readonly HashSet PastGenAlolanScans = new HashSet { 069, // Bellsprout 111, // Rhyhorn 116, // Horsea 152, // Chikorita 155, // Cyndaquil 158, // Totodile 220, // Swinub 363, // Spheal 543, // Venipede 574, // Gothita 599, // Klink 607, // Litwick 610, // Axew 633, // Deino 679, // Honedge 183, 298, // Marill {Azurill} 315, 406, // Roselia {Budew} 175, // [468] Togekiss (Togepi) 287, // [288] Vigoroth (Slakoth) 396, // [397] Staravia (Starly) 403, // [404] Luxio (Shinx) 495, // [497] Serperior (Snivy) 577, // [578] Duosion (Solosis) 498, // [500] Emboar (Tepig) 501, // [503] Samurott (Oshawott) 532, // [534] Conkeldurr (Timburr) 540, // [542] Leavanny (Sewaddle) 602, // [604] Eelektross (Tynamo) 004, // Charmander 007, // Squirtle 095, // Onix 663, 664, // Scatterbug 001, // Bulbasaur 280, // Ralts 255, 256, // Combusken 013, 014, 015, // Beedrill 252, 253, // Grovyle 258, 259, // Marshtomp 393, 394, // Prinplup 387, 388, // Grotle 016, 017, 018, // Pidgeot 389, 390, 391, // Monferno 304, 305, 306, // Aggron 479, // Rotom 650, 651, 652, // Chesnaught 656, 657, 658, // Greninja 653, 654, 655, // Delphox }; internal static readonly HashSet Inherit_Apricorn6 = new HashSet { 010, 013, 016, 019, 021, 023, 025, 027, 029, 035, 037, 039, 041, 043, 046, 048, 050, 052, 054, 056, 058, 060, 063, 066, 069, 072, 074, 077, 079, 083, 084, 086, 088, 090, 092, 095, 096, 098, 102, 104, 108, 109, 111, 113, 114, 115, 116, 118, 122, 124, 125, 126, 129, 131, 143, 147, 161, 163, 165, 167, 170, 177, 179, 183, 185, 187, 190, 191, 193, 194, 198, 200, 202, 203, 204, 206, 207, 209, 211, 213, 214, 215, 216, 218, 220, 222, 223, 225, 226, 227, 228, 231, 234, 235, 241, 246, 261, 263, 265, 273, 276, 278, 280, 285, 287, 293, 296, 302, 303, 307, 311, 312, 316, 322, 325, 327, 333, 339, 359, 366, 369, 370, 396, 399, 401, 403, 406, 412, 415, 418, 420, 427, 433, 441, 455, 032, // Via Nidoran-F 440, // Via Chansey 238, // Via Jynx 239, // Via Electabuzz 240, // Via Magmar 298, // Via Marill 360, // Via Wobbuffet 438, // Via Sudowoodo 439, // Via Mr. Mime 446, // Via Snorlax 458, // Via Mantine 358, // Via Chingling 172, // Via Pikachu 173, // Via Clefairy 174, // Via Jigglypuff }; internal static readonly HashSet AlolanCaptureOffspring = new HashSet { 010, 019, 021, 025, 027, 035, 037, 039, 041, 046, 050, 052, 054, 056, 058, 060, 063, 066, 072, 074, 079, 081, 088, 090, 092, 096, 102, 104, 113, 115, 118, 120, 123, 127, 128, 129, 131, 132, 133, 143, 147, 165, 167, 170, 172, 173, 174, 185, 198, 200, 209, 212, 215, 222, 225, 227, 235, 239, 240, 241, 278, 283, 296, 299, 302, 318, 320, 324, 327, 328, 339, 349, 351, 359, 361, 369, 370, 371, 374, 422, 425, 438, 440, 443, 446, 447, 456, 506, 524, 546, 548, 551, 568, 582, 587, 594, 627, 629, 661, 674, 703, 704, 707, 708, 731, 734, 736, 739, 741, 742, 744, 746, 747, 749, 751, 753, 755, 757, 759, 761, 764, 765, 766, 767, 769, 771, 774, 775, 776, 777, 778, 779, 780, 781, 782, // USUM Additions 023, 086, 108, 122, 163, 177, 179, 190, 204, 206, 214, 223, 226, 228, 238, 246, 303, 309, 341, 343, 352, 353, 357, 366, 427, 439, 458, 550, 559, 570, 572, 592, 605, 619, 621, 622, 624, 636, 667, 669, 676, 686, 690, 692, 701, 702, 714, // Wormhole 333, 193, 561, 580, 276, 451, 531, 694, 273, 325, 459, 307, 449, 557, 218, 688, 270, 618, 418, 194, // Static Encounters 100, }; internal static readonly HashSet AlolanCaptureNoHeavyBall = new HashSet { 374, 785, 786, 787, 788}; // Beldum & Tapus internal static readonly HashSet Inherit_ApricornMale7 = new HashSet { 100, // Voltorb 343, // Baltoy 436, // Bronzor // Others are capturable in the Alola region // Magnemite, Staryu, Tauros }; internal static readonly HashSet Inherit_Apricorn7 = new HashSet (Inherit_Apricorn6.Concat(Inherit_ApricornMale7).Concat(PastGenAlolanScans).Concat(AlolanCaptureOffspring).Distinct()); internal static readonly HashSet Inherit_SafariMale = new HashSet { 128, // Tauros 081, // Magnemite 100, // Voltorb 337, // Lunatone 338, // Solrock 374, // Beldum 436, // Bronzor }; internal static readonly HashSet Inherit_DreamMale = new HashSet { // Starting with Gen7, Males pass Ball via breeding with Ditto. 001, 004, 007, // Gen1 Starters 025, // Pikachu 128, // Tauros 172, // Pichu 236, // Tyrogue (100% Male) 252, 255, 258, // Gen2 Starters 387, 390, 393, // Gen3 Starters 511, 513, 515, // Gen5 Monkeys 538, // Throh 539, // Sawk 574, // Gothita 081, // Magnemite 100, // Voltorb 120, // Staryu 137, // Porygon 337, // Lunatone 338, // Solrock 343, // Baltoy 374, // Beldum 436, // Bronzor 479, // Rotom 599, // Klink 622, // Golett }; internal static readonly HashSet Ban_Gen3Ball_7 = new HashSet { 489, // Phione 566, 567, 696, 697, 698, 699 // Fossil Only obtain }; internal static readonly HashSet Ban_Gen4Ball_7 = new HashSet { 489, // Phione 566, 567, 696, 697, 698, 699 // Fossil Only obtain }; internal static readonly HashSet Ban_SafariBallHidden_7 = new HashSet { 029, 030, 031, 032, 033, 034, // Nidos 313, 314, // Volbeat/Illumise 081, // Magnemite 100, // Voltorb 115, // Kangaskhan 128, // Tauros 132, // Ditto 241, // Miltank 374, // Beldum 436, // Bronzor 440, // Happiny // others not possible 236, // Tyrogue (100% Male) 120, // Staryu 337, // Lunatone 338, // Solrock 479, // Rotom 599, // Klink 622, // Golett }; internal static readonly int[] ZygardeMoves = { 245, // Extreme Speed 349, // Dragon Dance 614, // Thousand Arrows 615, // Thousand Waves 687, // Core Enforcer }; internal static readonly HashSet Totem_Alolan = new HashSet { 020, // Raticate (Normal, Alolan, Totem) 105, // Marowak (Normal, Alolan, Totem) 778, // Mimikyu (Normal, Busted, Totem, Totem_Busted) }; internal static readonly HashSet Totem_SM = new HashSet { 020, // Raticate 735, // Gumshoos //746, // Wishiwashi 758, // Salazzle 754, // Lurantis 738, // Vikavolt 778, // Mimikyu 784, // Kommo-o }; internal static readonly HashSet Totem_USUM = new HashSet { 020, // Raticate 735, // Gumshoos //746, // Wishiwashi 758, // Salazzle 754, // Lurantis 738, // Vikavolt 778, // Mimikyu 784, // Kommo-o 105, // Marowak 752, // Araquanid 777, // Togedemaru 743, // Ribombee }; internal static readonly int[] EggLocations7 = {Locations.Daycare5, Locations.LinkTrade6}; internal static readonly HashSet ValidMet_SM = new HashSet { 006, 008, 010, 012, 014, 016, 018, 020, 022, 024, 026, 028, 030, 032, 034, 036, 038, 040, 042, 044, 046, 048, 050, 052, 054, 056, 058, 060, 062, 064, 066, 068, 070, 072, 074, 076, 078, 082, 084, 086, 088, 090, 092, 094, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 30016 // Poké Pelago }; internal static readonly HashSet ValidMet_USUM = new HashSet(ValidMet_SM) { // 194, 195, 196, 197, // Unobtainable new Locations 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, }; internal static readonly int[] TMHM_SM = { 526, 337, 473, 347, 046, 092, 258, 339, 474, 237, 241, 269, 058, 059, 063, 113, 182, 240, 355, 219, 218, 076, 479, 085, 087, 089, 216, 141, 094, 247, 280, 104, 115, 482, 053, 188, 201, 126, 317, 332, 259, 263, 488, 156, 213, 168, 490, 496, 497, 315, 211, 411, 412, 206, 503, 374, 451, 507, 693, 511, 261, 512, 373, 153, 421, 371, 684, 416, 397, 694, 444, 521, 086, 360, 014, 019, 244, 523, 524, 157, 404, 525, 611, 398, 138, 447, 207, 214, 369, 164, 430, 433, 528, 057, 555, 267, 399, 127, 605, 590, // No HMs }; internal static readonly byte[] MovePP_SM = { 00, 35, 25, 10, 15, 20, 20, 15, 15, 15, 35, 30, 05, 10, 20, 30, 35, 35, 20, 15, 20, 20, 25, 20, 30, 05, 10, 15, 15, 15, 25, 20, 05, 35, 15, 20, 20, 10, 15, 30, 35, 20, 20, 30, 25, 40, 20, 15, 20, 20, 20, 30, 25, 15, 30, 25, 05, 15, 10, 05, 20, 20, 20, 05, 35, 20, 20, 20, 20, 20, 15, 25, 15, 10, 20, 25, 10, 35, 30, 15, 10, 40, 10, 15, 30, 15, 20, 10, 15, 10, 05, 10, 10, 25, 10, 20, 40, 30, 30, 20, 20, 15, 10, 40, 15, 10, 30, 10, 20, 10, 40, 40, 20, 30, 30, 20, 30, 10, 10, 20, 05, 10, 30, 20, 20, 20, 05, 15, 15, 20, 10, 15, 35, 20, 15, 10, 10, 30, 15, 40, 20, 10, 10, 05, 10, 30, 10, 15, 20, 15, 40, 20, 10, 05, 15, 10, 10, 10, 15, 30, 30, 10, 10, 20, 10, 01, 01, 10, 25, 10, 05, 15, 25, 15, 10, 15, 30, 05, 40, 15, 10, 25, 10, 30, 10, 20, 10, 10, 10, 10, 10, 20, 05, 40, 05, 05, 15, 05, 10, 05, 10, 10, 10, 10, 20, 20, 40, 15, 10, 20, 20, 25, 05, 15, 10, 05, 20, 15, 20, 25, 20, 05, 30, 05, 10, 20, 40, 05, 20, 40, 20, 15, 35, 10, 05, 05, 05, 15, 05, 20, 05, 05, 15, 20, 10, 05, 05, 15, 10, 15, 15, 10, 10, 10, 20, 10, 10, 10, 10, 15, 15, 15, 10, 20, 20, 10, 20, 20, 20, 20, 20, 10, 10, 10, 20, 20, 05, 15, 10, 10, 15, 10, 20, 05, 05, 10, 10, 20, 05, 10, 20, 10, 20, 20, 20, 05, 05, 15, 20, 10, 15, 20, 15, 10, 10, 15, 10, 05, 05, 10, 15, 10, 05, 20, 25, 05, 40, 15, 05, 40, 15, 20, 20, 05, 15, 20, 20, 15, 15, 05, 10, 30, 20, 30, 15, 05, 40, 15, 05, 20, 05, 15, 25, 25, 15, 20, 15, 20, 15, 20, 10, 20, 20, 05, 05, 10, 05, 40, 10, 10, 05, 10, 10, 15, 10, 20, 15, 30, 10, 20, 05, 10, 10, 15, 10, 10, 05, 15, 05, 10, 10, 30, 20, 20, 10, 10, 05, 05, 10, 05, 20, 10, 20, 10, 15, 10, 20, 20, 20, 15, 15, 10, 15, 15, 15, 10, 10, 10, 20, 10, 30, 05, 10, 15, 10, 10, 05, 20, 30, 10, 30, 15, 15, 15, 15, 30, 10, 20, 15, 10, 10, 20, 15, 05, 05, 15, 15, 05, 10, 05, 20, 05, 15, 20, 05, 20, 20, 20, 20, 10, 20, 10, 15, 20, 15, 10, 10, 05, 10, 05, 05, 10, 05, 05, 10, 05, 05, 05, 15, 10, 10, 10, 10, 10, 10, 15, 20, 15, 10, 15, 10, 15, 10, 20, 10, 10, 10, 20, 20, 20, 20, 20, 15, 15, 15, 15, 15, 15, 20, 15, 10, 15, 15, 15, 15, 10, 10, 10, 10, 10, 15, 15, 15, 15, 05, 05, 15, 05, 10, 10, 10, 20, 20, 20, 10, 10, 30, 15, 15, 10, 15, 25, 10, 15, 10, 10, 10, 20, 10, 10, 10, 10, 10, 15, 15, 05, 05, 10, 10, 10, 05, 05, 10, 05, 05, 15, 10, 05, 05, 05, 10, 10, 10, 10, 20, 25, 10, 20, 30, 25, 20, 20, 15, 20, 15, 20, 20, 10, 10, 10, 10, 10, 20, 10, 30, 15, 10, 10, 10, 20, 20, 05, 05, 05, 20, 10, 10, 20, 15, 20, 20, 10, 20, 30, 10, 10, 40, 40, 30, 20, 40, 20, 20, 10, 10, 10, 10, 05, 10, 10, 05, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 40, 15, 20, 30, 20, 15, 15, 20, 10, 15, 15, 10, 05, 10, 10, 20, 15, 10, 15, 15, 15, 05, 15, 20, 20, 01, 01, 01, 01, 01, 01, 01, 01, 01, 05, 05, 10, 10, 10, 20, 10, 10, 10, 05, 05, 20, 10, 10, 10, 01, 05, 15, 05, 01, 01, 01, 01, 01, 01, }; internal static readonly HashSet Ban_NoHidden7 = new HashSet { // SOS slots have 0 call rate 767, // Wimpod 768, // Golisopod // No Encounter 774, // Minior //Pre-Gen 710 + (1 << 11), //Pumpkaboo-Small 711 + (1 << 11), //Gourgeist-Small 710 + (2 << 11), //Pumpkaboo-Large 711 + (2 << 11), //Gourgeist-Large }; internal static readonly HashSet Ban_NoHidden7Apricorn = new HashSet { 029, // Nidoran 032, // Nidoran 100, // Voltorb 436, // Bronzor 669 + (3 << 11), // Flabébé-Blue }; #region Unreleased Items internal static readonly HashSet UnreleasedHeldItems_7 = new HashSet { 005, // Safari Ball 016, // Cherish Ball 064, // Fluffy Tail 065, // Blue Flute 066, // Yellow Flute 067, // Red Flute 068, // Black Flute 069, // White Flute 070, // Shoal Salt 071, // Shoal Shell 103, // Old Amber 111, // Odd Keystone 164, // Razz Berry 166, // Nanab Berry 167, // Wepear Berry 175, // Cornn Berry 176, // Magost Berry 177, // Rabuta Berry 178, // Nomel Berry 179, // Spelon Berry 180, // Pamtre Berry 181, // Watmel Berry 182, // Durin Berry 183, // Belue Berry //208, // Enigma Berry //209, // Micle Berry //210, // Custap Berry //211, // Jaboca Berry //212, // Rowap Berry 215, // Macho Brace 260, // Red Scarf 261, // Blue Scarf 262, // Pink Scarf 263, // Green Scarf 264, // Yellow Scarf 499, // Sport Ball 548, // Fire Gem 549, // Water Gem 550, // Electric Gem 551, // Grass Gem 552, // Ice Gem 553, // Fighting Gem 554, // Poison Gem 555, // Ground Gem 556, // Flying Gem 557, // Psychic Gem 558, // Bug Gem 559, // Rock Gem 560, // Ghost Gem 561, // Dragon Gem 562, // Dark Gem 563, // Steel Gem 576, // Dream Ball 584, // Relic Copper 585, // Relic Silver 587, // Relic Vase 588, // Relic Band 589, // Relic Statue 590, // Relic Crown 715, // Fairy Gem }; #endregion internal static readonly bool[] ReleasedHeldItems_7 = Enumerable.Range(0, MaxItemID_7_USUM+1).Select(i => HeldItems_USUM.Contains((ushort)i) && !UnreleasedHeldItems_7.Contains(i)).ToArray(); } }