mirror of
https://github.com/kwsch/PKHeX
synced 2024-12-23 19:03:11 +00:00
a02e97a8af
As you progress the story in the Sinnoh games, the water level in Lake Verity will rise allowing you to Surf and reach the Verity Cavern. When this happens differs between DP/BDSP and Pt. Zone 323 has nothing to do with it being early-game and only when Rowan's briefcase is present, but rather the differing water level. Riley's Riolu Egg can be hatched here without trading, as well. Co-Authored-By: Billo-PS <63661653+Billo-PS@users.noreply.github.com>
369 lines
17 KiB
C#
369 lines
17 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace PKHeX.Core
|
|
{
|
|
public static partial class Legal
|
|
{
|
|
internal const int MaxSpeciesID_8b = MaxSpeciesID_4; // Arceus-493
|
|
internal const int MaxMoveID_8b = MaxMoveID_8_R2;
|
|
internal const int MaxItemID_8b = 1822; // DS Sounds
|
|
internal const int MaxBallID_8b = (int)Ball.Beast;
|
|
internal const int MaxGameID_8b = (int)GameVersion.SP;
|
|
internal const int MaxAbilityID_8b = MaxAbilityID_8_R2;
|
|
|
|
#region Met Locations
|
|
|
|
// TODO
|
|
internal static readonly int[] Met_BS_0 =
|
|
{
|
|
000, 001, 002, 003, 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, 117, 118, 119,
|
|
120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
|
|
130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
|
|
140, 141, 142, 143, 144, 145, 146, 147, 148, 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, 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, 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,
|
|
420, 421, 422, 423, 424, 425, 426, 427, 428, 429,
|
|
430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
|
|
440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
|
|
450, 451, 452, 453, 454, 455, 456, 457, 458, 459,
|
|
460, 461, 462, 463, 464, 465, 466, 467, 468, 469,
|
|
470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
|
|
480, 481, 482, 483, 484, 485, 486, 487, 488, 489,
|
|
490, 491, 492, 493, 494, 495, 496, 497, 498, 499,
|
|
500, 501, 502, 503, 504, 505, 506, 507, 508, 509,
|
|
510, 511, 512, 513, 514, 515, 516, 517, 518, 519,
|
|
520, 521, 522, 523, 524, 525, 526, 527, 528, 529,
|
|
530, 531, 532, 533, 534, 535, 536, 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, 565, 566, 567, 568, 569,
|
|
570, 571, 572, 573, 574, 575, 576, 577, 578, 579,
|
|
580, 581, 582, 583, 584, 585, 586, 587, 588, 589,
|
|
590, 591, 592, 593, 594, 595, 596, 597, 598, 599,
|
|
600, 601, 602, 603, 604, 605, 606, 607, 608, 609,
|
|
610, 611, 612, 613, 614, 615, 616, 617, 618, 619,
|
|
620, 621, 622, 623, 624, 625, 626,
|
|
|
|
// Skip the secret base met location IDs because no Pokémon can be obtained in them.
|
|
|
|
// Ramanas Park rooms with lights out
|
|
648, 649, 650, 651, 652, 653, 654, 655, 656, 657,
|
|
};
|
|
|
|
internal static readonly int[] Met_BS_3 =
|
|
{
|
|
30001, 30003, 30004, 30005, 30006, 30007, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30022,
|
|
};
|
|
|
|
internal static readonly int[] Met_BS_4 =
|
|
{
|
|
40001, 40002, 40003, 40005, 40006, 40007, 40008, 40009,
|
|
40010, 40011, 40012, 40013, 40014, 40016, 40017, 40018, 40019,
|
|
40020, 40021, 40022, 40024, 40025, 40026, 40027, 40028, 40029,
|
|
40030, 40032, 40033, 40034, 40035, 40036, 40037, 40038, 40039,
|
|
40040, 40041, 40042, 40043, 40044, 40045, 40047, 40048, 40049,
|
|
40050, 40051, 40052, 40053, 40055, 40056, 40057, 40058, 40059,
|
|
40060, 40061, 40063, 40064, 40065, 40066, 40067, 40068, 40069,
|
|
40070, 40071, 40072, 40074, 40075, 40076, 40077,
|
|
};
|
|
|
|
internal static readonly int[] Met_BS_6 = {/* XY */ 60001, 60003, /* ORAS */ 60004, /* BDSP */ 60005, 60006, 60007, 60010 };
|
|
|
|
#endregion
|
|
|
|
internal static readonly ushort[] Pouch_Regular_BS =
|
|
{
|
|
045, 046, 047, 048, 049, 050, 051, 052, 053, 072, 073, 074, 075, 076, 077, 078,
|
|
079, 080, 081, 082, 083, 084, 085, 093, 094, 107, 108, 109, 110, 111, 112, 135,
|
|
136, 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, 537, 565, 566, 567, 568, 569, 570, 644, 645, 849,
|
|
|
|
1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
|
|
1245, 1246, 1247, 1248, 1249, 1250, 1251, 1606,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Ball_BS =
|
|
{
|
|
001, 002, 003, 004, 005, 006, 007, 008, 009, 010, 011, 012, 013, 014, 015, 016,
|
|
492, 493, 494, 495, 496, 497, 498, 499, 500,
|
|
576,
|
|
851,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Battle_BS =
|
|
{
|
|
055, 056, 057, 058, 059, 060, 061, 062, 063,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Items_BS = ArrayUtil.ConcatAll(Pouch_Regular_BS, Pouch_Ball_BS, Pouch_Battle_BS);
|
|
|
|
internal static readonly ushort[] Pouch_Key_BS =
|
|
{
|
|
428, 431, 432, 433, 438, 439, 440, 443, 445, 446, 447, 448, 449, 450, 451, 452,
|
|
453, 454, 459, 460, 461, 462, 463, 464, 466, 467, 631, 632,
|
|
|
|
1267, 1278, 1822,
|
|
|
|
// 455 Azure Flute (nonfunctional as of 1.1.0)
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Medicine_BS =
|
|
{
|
|
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, 054,
|
|
|
|
// 134 Sweet Heart (future event item?)
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Berries_BS =
|
|
{
|
|
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,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_Treasure_BS =
|
|
{
|
|
086, 087, 088, 089, 090, 091, 092, 099, 100, 101, 102, 103, 104, 105, 106, 795, 796,
|
|
|
|
1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821,
|
|
};
|
|
|
|
internal static readonly ushort[] Pouch_TMHM_BS = // TM01-TM100
|
|
{
|
|
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,
|
|
420, 421, 422, 423, 424, 425, 426, 427, // Previously called HM0X, in BDSP they're now called TM93-TM100
|
|
};
|
|
|
|
internal static readonly ushort[] HeldItems_BS = ArrayUtil.ConcatAll(Pouch_Items_BS, Pouch_Berries_BS, Pouch_TMHM_BS, Pouch_Medicine_BS, Pouch_Treasure_BS);
|
|
|
|
#region Moves
|
|
|
|
public static readonly int[] TMHM_BDSP =
|
|
{
|
|
264, 337, 352, 347, 046, 092, 258, 339, 331, 526,
|
|
241, 269, 058, 059, 063, 113, 182, 240, 202, 219,
|
|
605, 076, 231, 085, 087, 089, 490, 091, 094, 247,
|
|
280, 104, 115, 351, 053, 188, 201, 126, 317, 332,
|
|
259, 263, 521, 156, 213, 168, 211, 285, 503, 315,
|
|
355, 411, 412, 206, 362, 374, 451, 203, 406, 409,
|
|
261, 405, 417, 153, 421, 371, 278, 416, 397, 148,
|
|
444, 419, 086, 360, 014, 446, 244, 555, 399, 157,
|
|
404, 214, 523, 398, 138, 447, 207, 365, 369, 164,
|
|
430, 433,
|
|
015, 019, 057, 070, 432, 249, 127, 431,
|
|
};
|
|
|
|
internal static readonly int[] TypeTutor8b =
|
|
{
|
|
(int)Move.FrenzyPlant,
|
|
(int)Move.BlastBurn,
|
|
(int)Move.HydroCannon,
|
|
(int)Move.DracoMeteor,
|
|
};
|
|
|
|
/// <summary>
|
|
/// Unavailable Sketch Moves that are only learnable once certain species are distributed / made accessible.
|
|
/// </summary>
|
|
public static readonly HashSet<int> SignatureSketch_BDSP = new()
|
|
{
|
|
(int)Move.PsychoBoost, // Deoxys
|
|
(int)Move.SeedFlare, // Shaymin
|
|
(int)Move.DarkVoid, // Darkrai
|
|
(int)Move.Judgment, // Arceus
|
|
};
|
|
|
|
/// <summary>
|
|
/// Moves that are kill
|
|
/// </summary>
|
|
public static readonly HashSet<int> DummiedMoves_BDSP = new()
|
|
{
|
|
002, 003, 004, 013, 026, 027, 041, 049, 082, 096,
|
|
099, 112, 117, 119, 121, 125, 128, 131, 132, 140,
|
|
145, 146, 149, 158, 159, 169, 171, 185, 193, 216,
|
|
218, 222, 228, 265, 274, 287, 289, 290, 293, 300,
|
|
301, 302, 316, 318, 320, 324, 327, 346, 357, 358,
|
|
363, 373, 376, 377, 378, 381, 382, 386, 426, 429,
|
|
443, 445, 456, 466, 477, 481, 485, 498, 507, 508,
|
|
516, 518, 519, 520, 527, 531, 532, 533, 535, 537,
|
|
539, 541, 543, 544, 545, 546, 547, 548, 549, 550,
|
|
551, 552, 553, 554, 557, 558, 559, 560, 561, 563,
|
|
567, 569, 570, 571, 576, 578, 582, 587, 588, 591,
|
|
592, 593, 594, 600, 601, 603, 606, 607, 610, 613,
|
|
614, 615, 616, 617, 621, 622, 623, 624, 625, 626,
|
|
627, 628, 629, 630, 631, 632, 633, 634, 635, 636,
|
|
637, 638, 639, 640, 641, 642, 643, 644, 645, 646,
|
|
647, 648, 649, 650, 651, 652, 653, 654, 655, 656,
|
|
657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
|
|
669, 671, 674, 676, 677, 678, 680, 681, 683, 685,
|
|
686, 687, 688, 689, 690, 691, 693, 695, 696, 697,
|
|
698, 699, 700, 701, 702, 703, 704, 705, 706, 708,
|
|
709, 711, 712, 713, 714, 716, 717, 718, 719, 720,
|
|
721, 722, 723, 724, 725, 726, 727, 728, 729, 730,
|
|
731, 732, 733, 734, 735, 736, 737, 738, 739, 740,
|
|
741, 742, 743, 744, 745, 746, 747, 748, 749, 750,
|
|
751, 752, 753, 754, 755, 756, 757, 758, 759, 760,
|
|
761, 762, 763, 764, 765, 766, 767, 768, 769, 770,
|
|
771, 772, 773, 774, 775, 777, 778, 779, 780, 781,
|
|
782, 783, 784, 785, 786, 787, 788, 789, 790, 792,
|
|
793, 794, 795, 796, 797, 798, 799, 800, 801, 802,
|
|
803, 804, 805, 806, 807, 808, 809, 810, 811, 812,
|
|
813, 814, 815, 816, 817, 818, 819, 820, 821, 822,
|
|
823, 824, 825, 826,
|
|
};
|
|
|
|
#endregion
|
|
|
|
#region Unreleased Items
|
|
internal static readonly bool[] ReleasedHeldItems_8b = GetPermitList(MaxItemID_8b, HeldItems_BS, new ushort[]
|
|
{
|
|
537, // Prism Scale
|
|
565, // Health Feather
|
|
566, // Muscle Feather
|
|
567, // Resist Feather
|
|
568, // Genius Feather
|
|
569, // Clever Feather
|
|
570, // Swift Feather
|
|
849, // Ice Stone
|
|
|
|
005, // Safari Ball
|
|
016, // Cherish Ball
|
|
499, // Sport Ball
|
|
500, // Park Ball
|
|
576, // Dream Ball
|
|
851, // Beast Ball
|
|
|
|
// new BDSP items, but they can't be held
|
|
1808, // Mysterious Shard S
|
|
1809, // Mysterious Shard L
|
|
1810, // Digger Drill
|
|
1811, // Kanto Slate
|
|
1812, // Johto Slate
|
|
1813, // Soul Slate
|
|
1814, // Rainbow Slate
|
|
1815, // Squall Slate
|
|
1816, // Oceanic Slate
|
|
1817, // Tectonic Slate
|
|
1818, // Stratospheric Slate
|
|
1819, // Genome Slate
|
|
1820, // Discovery Slate
|
|
1821, // Distortion Slate
|
|
});
|
|
#endregion
|
|
|
|
private const int MaxValidHatchLocation8b = 657;
|
|
|
|
public static bool IsValidEggHatchLocation8b(int location, GameVersion version)
|
|
{
|
|
if ((uint)location > MaxValidHatchLocation8b)
|
|
return false;
|
|
if (LocationsNoHatchBDSP.Contains(location))
|
|
return false;
|
|
|
|
// Check if the location isn't an exclusive location that is only accessible in the other game.
|
|
var table = version == GameVersion.BD ? LocationsExclusiveSP : LocationsExclusiveBD;
|
|
return !table.Contains(location);
|
|
}
|
|
|
|
private static readonly HashSet<int> LocationsExclusiveBD = new()
|
|
{
|
|
216, // Spear Pillar
|
|
498, // Ramanas Park (Johto Room)
|
|
503, // Ramanas Park (Rainbow Room)
|
|
650, // Ramanas Park (Johto Room)
|
|
655, // Ramanas Park (Rainbow Room)
|
|
};
|
|
|
|
private static readonly HashSet<int> LocationsExclusiveSP = new()
|
|
{
|
|
217, // Spear Pillar
|
|
497, // Ramanas Park (Kanto Room)
|
|
504, // Ramanas Park (Squall Room)
|
|
649, // Ramanas Park (Kanto Room)
|
|
656, // Ramanas Park (Squall Room)
|
|
};
|
|
|
|
private static readonly HashSet<int> LocationsNoHatchBDSP = new()
|
|
{
|
|
020, 022, 023, // Jubilife City
|
|
035, // Canalave City
|
|
094, 103, 107, // Hearthome City
|
|
154, 155, 158, // Sunyshore City
|
|
181, 182, 183, // Pokémon League
|
|
218, // Hall of Origin (Diamond)
|
|
285, // Flower Paradise
|
|
329, // Lake Acuity
|
|
332, 333, // Newmoon Island
|
|
337, 338, // Battle Park
|
|
339, 340, 341, 342, 343, 344, // Battle Tower
|
|
345, 353, 421, // Mystery Zone
|
|
474, // Resort Area
|
|
483, 484, // Mystery Zone
|
|
490, // Seabreak Path
|
|
491, 492, 493, // Mystery Zone
|
|
495, // Ramanas Park
|
|
618, // Hall of Origin (Pearl)
|
|
620, 621, 622, 623, // Grand Underground (Secret Base)
|
|
625, // Sea (sailing animation)
|
|
627, 628, 629, 630, 631, 632, // Grand Underground (Secret Base)
|
|
633, 634, 635, 636, 637, 638, // Grand Underground (Secret Base)
|
|
639, 640, 641, 642, 643, 644, // Grand Underground (Secret Base)
|
|
645, 646, 647, // Grand Underground (Secret Base)
|
|
};
|
|
}
|
|
}
|