PKHeX/PKHeX.Core/Legality/Tables/Tables8bs.cs
sora10pls a02e97a8af Unban alternate Lake Verity zone
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>
2021-12-28 17:26:05 -05:00

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)
};
}
}