mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-14 00:07:15 +00:00
c730dfa1ba
held item list now allocates less (concat arrays instead of ienumerables) item list already prunes out of range items, so simplify data source fetch simplify item list prune (return as list, so we can call RemoveAll instead of Where.ToList)
255 lines
14 KiB
C#
255 lines
14 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace PKHeX.Core
|
|
{
|
|
public static partial class Legal
|
|
{
|
|
internal const int MaxSpeciesID_5 = 649;
|
|
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_BW2_0 =
|
|
{
|
|
1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 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, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
|
75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
|
|
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
|
|
124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 140, 141, 142, 143, 144, 145, 146,
|
|
147, 148, 149, 150, 151, 152, 153,
|
|
};
|
|
|
|
internal static readonly int[] Met_BW2_3 =
|
|
{
|
|
30001, 30002, 30004, 30005, 30006, 30007, 30008, 30010, 30011, 30012,
|
|
30013, 30014, 30015,
|
|
};
|
|
|
|
internal static readonly int[] Met_BW2_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, 40089, 40090, 40091, 40092, 40093, 40094, 40095, 40096, 40097, 40098, 40099, 40100,
|
|
40101, 40102, 40103, 40104, 40105, 40106, 40107, 40108, 40109,
|
|
};
|
|
|
|
internal static readonly int[] Met_BW2_6 = { 60001, 60003 };
|
|
|
|
internal static readonly ushort[] Pouch_Items_BW = {
|
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 116, 117, 118, 119, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 213, 214, 215, 216, 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, 492, 493, 494, 495, 496, 497, 498, 499, 500, 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, 575, 576, 577, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Key_BW = {
|
|
437, 442, 447, 450, 465, 466, 471, 504, 533, 574, 578, 579, 616, 617, 621, 623, 624, 625, 626,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_TMHM_BW = {
|
|
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, 420, 421, 422, 423, 424, 425
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Medicine_BW = {
|
|
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, 134, 504, 565, 566, 567, 568, 569, 570, 591
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Berries_BW = {
|
|
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
|
|
};
|
|
|
|
internal static readonly ushort[] HeldItems_BW = ArrayUtil.ConcatAll(Pouch_Items_BW, Pouch_Medicine_BW, Pouch_Berries_BW);
|
|
|
|
internal static readonly ushort[] Pouch_Key_B2W2 = {
|
|
437, 442, 447, 450, 453, 458, 465, 466, 471, 504, 578, 616, 617, 621, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638,
|
|
};
|
|
|
|
internal static readonly int[] TMHM_BW =
|
|
{
|
|
468, 337, 473, 347, 046, 092, 258, 339, 474, 237,
|
|
241, 269, 058, 059, 063, 113, 182, 240, 477, 219,
|
|
218, 076, 479, 085, 087, 089, 216, 091, 094, 247,
|
|
280, 104, 115, 482, 053, 188, 201, 126, 317, 332,
|
|
259, 263, 488, 156, 213, 168, 490, 496, 497, 315,
|
|
502, 411, 412, 206, 503, 374, 451, 507, 510, 511,
|
|
261, 512, 373, 153, 421, 371, 514, 416, 397, 148,
|
|
444, 521, 086, 360, 014, 522, 244, 523, 524, 157,
|
|
404, 525, 526, 398, 138, 447, 207, 365, 369, 164,
|
|
430, 433, 528, 249, 555,
|
|
|
|
015, 019, 057, 070, 127, 291
|
|
};
|
|
|
|
internal static readonly byte[] MovePP_BW =
|
|
{
|
|
00,
|
|
35, 25, 10, 15, 20, 20, 15, 15, 15, 35, 30, 05, 10, 30, 30, 35, 35, 20, 15, 20, 20, 15, 20, 30, 05, 25, 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, 25, 20, 20, 20, 15, 25, 15, 10, 40, 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, 20, 20, 10, 40, 40, 30, 30, 30, 20, 30, 10, 10, 20, 05, 10, 30, 20, 20, 20, 05, 15, 15, 20, 15, 15, 35, 20, 15, 10, 10, 30, 15, 40, 20, 15, 10, 05, 10, 30, 10, 15, 20, 15, 40,
|
|
40, 10, 05, 15, 10, 10, 10, 15, 30, 30, 10, 10, 20, 10, 01, 01, 10, 10, 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, 10, 05, 40, 15, 20, 20, 05, 15, 20, 30, 15, 15, 05, 10, 30, 20, 30, 15, 05, 40, 15, 05, 20, 05, 15, 25, 40, 15, 20, 15, 20, 15, 20, 10,
|
|
20, 20, 05, 05, 10, 05, 40, 10, 10, 05, 10, 10, 15, 10, 20, 30, 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, 20, 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, 15, 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, 20, 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,
|
|
};
|
|
|
|
internal static readonly HashSet<int> WildPokeBalls5 = new HashSet<int>
|
|
{
|
|
1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
// Cherish ball not usable
|
|
// HGSS balls not usable
|
|
// Dream ball not usable in wild
|
|
};
|
|
|
|
internal static readonly HashSet<int> DreamWorldBalls = new HashSet<int> (WildPokeBalls5.Concat(new[] { 25 }));
|
|
|
|
internal static readonly int[] FutureEvolutionsGen5 =
|
|
{
|
|
700
|
|
};
|
|
|
|
internal static readonly HashSet<int> UnreleasedItems_5 = new HashSet<int>
|
|
{
|
|
005, // Safari Ball
|
|
016, // Cherish Ball
|
|
260, // Red Scarf
|
|
261, // Blue Scarf
|
|
262, // Pink Scarf
|
|
263, // Green Scarf
|
|
264, // Yellow Scarf
|
|
492, // Fast Ball
|
|
493, // Level Ball
|
|
494, // Lure Ball
|
|
495, // Heavy Ball
|
|
496, // Love Ball
|
|
497, // Friend Ball
|
|
498, // Moon Ball
|
|
499, // Sport Ball
|
|
500, // Park Ball
|
|
576, // Dream Ball
|
|
};
|
|
|
|
internal static readonly bool[] ReleasedHeldItems_5 = Enumerable.Range(0, MaxItemID_5_B2W2 + 1).Select(i => HeldItems_BW.Contains((ushort)i) && !UnreleasedItems_5.Contains(i)).ToArray();
|
|
|
|
internal static readonly int[][] Tutors_B2W2 =
|
|
{
|
|
new[] { 450, 343, 162, 530, 324, 442, 402, 529, 340, 067, 441, 253, 009, 007, 008 }, // Driftveil City
|
|
new[] { 277, 335, 414, 492, 356, 393, 334, 387, 276, 527, 196, 401, 399, 428, 406, 304, 231 }, // Lentimas Town
|
|
new[] { 020, 173, 282, 235, 257, 272, 215, 366, 143, 220, 202, 409, 355 }, // Humilau City
|
|
new[] { 380, 388, 180, 495, 270, 271, 478, 472, 283, 200, 278, 289, 446, 214, 285 } // Nacrene City
|
|
};
|
|
|
|
internal static readonly HashSet<int> ValidMet_BW = new HashSet<int>
|
|
{
|
|
004, 005, 006, 007, 008, 009, 010, 011, 012, 013, 014, 015, 016, 017, 018, 019, 020,
|
|
021, 022, 023, 024, 025, 026, 027, 028, 029, 030, 031, 032, 033, 034, 035, 036, 037, 038, 039, 040,
|
|
041, 042, 043, 044, 045, 046, 047, 048, 049, 050, 051, 052, 053, 054, 055, 056, 057, 058, 059, 060,
|
|
061, 062, 063, 064, 065, 066, 067, 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, 095, 096, 097, 098, 099, 100,
|
|
101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
|
|
};
|
|
|
|
internal static readonly HashSet<int> ValidMet_B2W2 = new HashSet<int>
|
|
{
|
|
004, 005, 006, 007, 008, 009, 010, 011, 012, 013, 014, 015, 016, 017, 018, 019, 020,
|
|
021, 022, 024, 025, 026, 027, 028, 029, 030, 031, 032, 033, 034, 035, 036, 037, 038, 039, //023 Route 10, 040->134 Victory Road
|
|
041, 042, 043, 044, 045, 046, 047, 048, 049, 050, 051, 052, 053, 054, 055, 056, 057, 058, 060, //059 Challenger's cave
|
|
061, 062, 063, 064, 065, 066, 067, 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, 095, 096, 097, 098, 099, 100,
|
|
101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
|
|
121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 140, //138 ---
|
|
141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
|
|
};
|
|
|
|
internal static readonly HashSet<int> EggLocations5 = new HashSet<int>
|
|
{
|
|
Locations.LinkTrade5NPC,
|
|
Locations.LinkTrade5,
|
|
Locations.Daycare5,
|
|
60003, // Breeder (NPC)
|
|
};
|
|
|
|
/// <summary>
|
|
/// Some mixed-gender species were only distributed male-only. Ban hidden abilities on these species when bred in Gen5.
|
|
/// </summary>
|
|
internal static readonly HashSet<int> Ban_BreedHidden5 = new HashSet<int>
|
|
{
|
|
// Only males distributed; unable to pass to offspring
|
|
001, // Bulbasaur
|
|
004, // Charmander
|
|
007, // Squirtle
|
|
128, // Tauros
|
|
152, // Chikorita
|
|
155, // Cyndaquil
|
|
158, // Totodile
|
|
236, // Tyrogue
|
|
252, // Treecko
|
|
255, // Torchic
|
|
258, // Mudkip
|
|
387, // Turtwig
|
|
390, // Chimchar
|
|
393, // Piplup
|
|
511, // Pansage
|
|
513, // Pansear
|
|
515, // Panpour
|
|
574, // Gothita
|
|
|
|
// Genderless; unable to pass to offspring
|
|
081, // Magnemite
|
|
100, // Voltorb
|
|
120, // Staryu
|
|
132, // Ditto... can't breed anyway.
|
|
137, // Porygon
|
|
374, // Beldum
|
|
436, // Bronzor
|
|
622, // Golett
|
|
|
|
// Not available at all
|
|
092, // Gastly
|
|
109, // Koffing
|
|
200, // Misdreavus
|
|
201, // Unown
|
|
287, // Slakoth
|
|
311, // Plusle
|
|
311, // Minun
|
|
337, // Lunatone
|
|
338, // Solrock
|
|
343, // Baltoy
|
|
351, // Castform
|
|
352, // Kecleon
|
|
355, // Duskull
|
|
358, // Chimecho
|
|
420, // Cherrim
|
|
433, // Chingling
|
|
479, // Rotom
|
|
489, // Phione
|
|
495, // Snivy
|
|
498, // Tepig
|
|
501, // Oshawott
|
|
538, // Throh
|
|
539, // Sawk
|
|
561, // Sigilyph
|
|
562, // Yamask
|
|
566, // Archen
|
|
570, // Zorua
|
|
597, // Ferroseed
|
|
599, // Klink
|
|
602, // Tynamo
|
|
607, // Litwick
|
|
615, // Cryogonal
|
|
627, // Rufflet
|
|
633, // Deino
|
|
636, // Larvesta
|
|
};
|
|
}
|
|
}
|