diff --git a/PKHeX.Core/Legality/Tables/Tables8bs.cs b/PKHeX.Core/Legality/Tables/Tables8bs.cs index a33e9d4d6..f6f54eb23 100644 --- a/PKHeX.Core/Legality/Tables/Tables8bs.cs +++ b/PKHeX.Core/Legality/Tables/Tables8bs.cs @@ -295,58 +295,61 @@ public static partial class Legal }); #endregion - internal static readonly HashSet ValidMet_BDSP = new() + /// + /// Valid egg hatch locations for BD/SP + /// + public static readonly HashSet ValidMet_BDSP = new() { 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, + 021, 024, 025, 026, 027, 028, 029, + 030, 031, 032, 033, 034, 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, + 090, 091, 092, 093, 095, 096, 097, 098, 099, + 100, 101, 102, 104, 105, 106, 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, + 150, 151, 152, 153, 156, 157, 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, + 180, 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, + 210, 211, 212, 213, 214, 215, 216, 217, 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, + 280, 281, 282, 283, 284, 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, + 320, 321, 322, 324, 325, 326, 327, 328, + 330, 331, 334, 335, 336, + 346, 347, 348, 349, + 350, 351, 352, 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, + 420, 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, + 470, 471, 472, 473, 475, 476, 477, 478, 479, + 480, 481, 482, 485, 486, 487, 488, 489, + 494, 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, @@ -358,8 +361,8 @@ public static partial class Legal 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, + 610, 611, 612, 613, 614, 615, 616, 617, 619, + 624, 626, // Ramanas Park rooms with lights out 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, diff --git a/Tests/PKHeX.Core.Tests/Legality/LegalityBDSP.cs b/Tests/PKHeX.Core.Tests/Legality/LegalityBDSP.cs new file mode 100644 index 000000000..cc7908e1d --- /dev/null +++ b/Tests/PKHeX.Core.Tests/Legality/LegalityBDSP.cs @@ -0,0 +1,49 @@ +using System.Linq; +using FluentAssertions; +using Xunit; + +namespace PKHeX.Core.Tests.Legality +{ + public static class LegalityBDSP + { + private static readonly int[] LocationsNoHatch = + { + 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 + 323, 329, // Lake Verity (start), 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) + }; + + [Fact] + public static void NoHatchLocations() + { + const int maxLegal = 658; + for (int i = 0; i < maxLegal; i++) + { + bool banned = LocationsNoHatch.Contains(i); + var isPermitted = Legal.ValidMet_BDSP.Contains(i); + isPermitted.Should().Be(!banned); + } + } + } +}