2017-09-30 21:08:35 +00:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
2016-06-20 04:22:43 +00:00
|
|
|
|
|
2017-01-08 07:54:09 +00:00
|
|
|
|
namespace PKHeX.Core
|
2016-06-20 04:22:43 +00:00
|
|
|
|
{
|
|
|
|
|
public static partial class Legal
|
|
|
|
|
{
|
2016-10-24 04:57:04 +00:00
|
|
|
|
internal const int MaxSpeciesID_4 = 493;
|
2017-01-27 03:18:20 +00:00
|
|
|
|
internal const int MaxMoveID_4 = 467;
|
|
|
|
|
internal const int MaxItemID_4_DP = 464;
|
|
|
|
|
internal const int MaxItemID_4_Pt = 467;
|
|
|
|
|
internal const int MaxItemID_4_HGSS = 536;
|
|
|
|
|
internal const int MaxAbilityID_4 = 123;
|
|
|
|
|
internal const int MaxBallID_4 = 0x18;
|
2017-12-28 00:36:24 +00:00
|
|
|
|
internal const int MaxGameID_4 = 15; // CXD
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-11-02 06:46:46 +00:00
|
|
|
|
internal static readonly int[] Met_HGSS_0 =
|
|
|
|
|
{
|
|
|
|
|
0, 1, 2, 3, 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, 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,
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-11-02 06:46:46 +00:00
|
|
|
|
internal static readonly int[] Met_HGSS_2 =
|
|
|
|
|
{
|
|
|
|
|
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011,
|
|
|
|
|
2012, 2013, 2014,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
internal static readonly int[] Met_HGSS_3 =
|
|
|
|
|
{
|
|
|
|
|
3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010,
|
|
|
|
|
3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028,
|
|
|
|
|
3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046,
|
|
|
|
|
3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064,
|
|
|
|
|
3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076
|
|
|
|
|
};
|
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
#region DP
|
|
|
|
|
internal static readonly ushort[] Pouch_Items_DP = {
|
|
|
|
|
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, 135, 136, 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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Key_DP = {
|
|
|
|
|
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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_TMHM_DP = {
|
|
|
|
|
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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Mail_DP = {
|
|
|
|
|
137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Medicine_DP = {
|
|
|
|
|
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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Berries_DP = {
|
|
|
|
|
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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Ball_DP = {
|
|
|
|
|
1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Battle_DP = {
|
|
|
|
|
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2020-01-25 07:29:45 +00:00
|
|
|
|
internal static readonly ushort[] HeldItems_DP = ArrayUtil.ConcatAll(Pouch_Items_DP, Pouch_Mail_DP, Pouch_Medicine_DP, Pouch_Berries_DP, Pouch_Ball_DP, Pouch_TMHM_DP.Take(Pouch_TMHM_DP.Length - 8).ToArray());
|
2016-06-20 04:22:43 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Pt
|
|
|
|
|
internal static readonly ushort[] Pouch_Items_Pt = {
|
|
|
|
|
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, 135, 136, 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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Key_Pt = {
|
|
|
|
|
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
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_TMHM_Pt = Pouch_TMHM_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Mail_Pt = Pouch_Mail_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Medicine_Pt = Pouch_Medicine_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Berries_Pt = Pouch_Berries_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Ball_Pt = Pouch_Ball_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Battle_Pt = Pouch_Battle_DP;
|
|
|
|
|
|
2020-01-25 07:29:45 +00:00
|
|
|
|
internal static readonly ushort[] HeldItems_Pt = ArrayUtil.ConcatAll(Pouch_Items_Pt, Pouch_Mail_Pt, Pouch_Medicine_Pt, Pouch_Berries_Pt, Pouch_Ball_Pt, Pouch_TMHM_Pt.Take(Pouch_TMHM_Pt.Length - 8).ToArray());
|
2016-06-20 04:22:43 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region HGSS
|
|
|
|
|
internal static readonly ushort[] Pouch_Items_HGSS = Pouch_Items_Pt;
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Key_HGSS = {
|
|
|
|
|
434, 435, 437, 444, 445, 446, 447, 450, 456, 464, 465, 466, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 501, 502, 503, 504, 532, 533, 534, 535, 536
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_TMHM_HGSS = Pouch_TMHM_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Mail_HGSS = Pouch_Mail_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Medicine_HGSS = Pouch_Medicine_DP;
|
|
|
|
|
internal static readonly ushort[] Pouch_Berries_HGSS = Pouch_Berries_DP;
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Ball_HGSS = {
|
|
|
|
|
1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 492, 493, 494, 495, 496, 497, 498, 499, 500
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2016-06-20 04:22:43 +00:00
|
|
|
|
internal static readonly ushort[] Pouch_Battle_HGSS = Pouch_Battle_DP;
|
|
|
|
|
|
2020-01-25 07:29:45 +00:00
|
|
|
|
internal static readonly ushort[] HeldItems_HGSS = ArrayUtil.ConcatAll(Pouch_Items_HGSS, Pouch_Mail_HGSS, Pouch_Medicine_HGSS, Pouch_Berries_HGSS, Pouch_Ball_Pt, Pouch_TMHM_HGSS.Take(Pouch_TMHM_HGSS.Length - 8).ToArray());
|
2016-06-20 04:22:43 +00:00
|
|
|
|
#endregion
|
2016-07-22 06:49:52 +00:00
|
|
|
|
|
2017-03-20 18:10:50 +00:00
|
|
|
|
internal static readonly int[] TM_4 =
|
2017-03-19 10:14:03 +00:00
|
|
|
|
{
|
|
|
|
|
264, 337, 352, 347, 046, 092, 258, 339, 331, 237,
|
|
|
|
|
241, 269, 058, 059, 063, 113, 182, 240, 202, 219,
|
|
|
|
|
218, 076, 231, 085, 087, 089, 216, 091, 094, 247,
|
|
|
|
|
280, 104, 115, 351, 053, 188, 201, 126, 317, 332,
|
|
|
|
|
259, 263, 290, 156, 213, 168, 211, 285, 289, 315,
|
|
|
|
|
355, 411, 412, 206, 362, 374, 451, 203, 406, 409,
|
|
|
|
|
261, 318, 373, 153, 421, 371, 278, 416, 397, 148,
|
|
|
|
|
444, 419, 086, 360, 014, 446, 244, 445, 399, 157,
|
|
|
|
|
404, 214, 363, 398, 138, 447, 207, 365, 369, 164,
|
|
|
|
|
430, 433,
|
2017-03-20 18:10:50 +00:00
|
|
|
|
};
|
2017-03-19 10:14:03 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> HM_HGSS = new HashSet<int>
|
2017-03-20 18:10:50 +00:00
|
|
|
|
{
|
2019-02-21 06:10:15 +00:00
|
|
|
|
015, 019, 057, 070, 250, 249, 127, 431 // Whirlpool(HGSS)
|
2017-03-20 17:53:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> HM_DPPt = new HashSet<int>
|
2017-03-20 17:53:16 +00:00
|
|
|
|
{
|
2017-04-04 03:02:40 +00:00
|
|
|
|
015, 019, 057, 070, 432, 249, 127, 431 // Defog(DPPt)
|
2017-03-20 17:53:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> HM_4_RemovePokeTransfer = new HashSet<int>
|
2017-03-20 17:53:16 +00:00
|
|
|
|
{
|
|
|
|
|
015, 019, 057, 070, 249, 127, 431 // Defog(DPPt) & Whirlpool(HGSS) excluded
|
2017-03-19 10:14:03 +00:00
|
|
|
|
};
|
|
|
|
|
|
2019-04-11 05:05:57 +00:00
|
|
|
|
internal static readonly byte[] MovePP_DP =
|
2016-07-22 06:49:52 +00:00
|
|
|
|
{
|
|
|
|
|
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, 20, 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, 20, 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, 10, 20, 15, 15, 35, 20, 15, 10, 20, 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, 15,
|
|
|
|
|
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, 15, 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, 05, 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,
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> WildPokeBalls4_DPPt = new HashSet<int>
|
2017-02-12 17:52:26 +00:00
|
|
|
|
{
|
|
|
|
|
1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
|
|
|
// Cherish ball not usable
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> WildPokeBalls4_HGSS = new HashSet<int>
|
2017-02-12 17:52:26 +00:00
|
|
|
|
{
|
|
|
|
|
1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
|
|
|
// Cherish ball not usable
|
2017-05-01 01:28:29 +00:00
|
|
|
|
17, 18, 19, 20, 21, 22, 23
|
2017-02-12 17:52:26 +00:00
|
|
|
|
// Comp Ball not usable in wild
|
|
|
|
|
};
|
2017-02-15 23:05:13 +00:00
|
|
|
|
|
|
|
|
|
internal static readonly int[] FutureEvolutionsGen4 =
|
|
|
|
|
{
|
|
|
|
|
700
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> UnreleasedItems_4 = new HashSet<int>
|
2017-02-26 19:43:26 +00:00
|
|
|
|
{
|
2017-04-10 04:59:44 +00:00
|
|
|
|
005, // Safari Ball
|
|
|
|
|
016, // Cherish Ball
|
|
|
|
|
147, // Mosaic Mail
|
Special Eggs improvement and Generation 4 Encounter Type legal analysis (#1083)
* Ignore relearn level 2-100 moves from Phione
* Cave encounter types DPPt
* Generation 4 EncounterType filter and validation
Not every generation 4 static encounter have yet their encounter type defined, i temporally included Any to those encounters
Generation 4 roaaming static encounters have been splitted in two, grass and surf
* Added new legality texts
* Added unreleased event DP Darkai, added check for surf in jhoto route 45, is impossible
Moved unreleased DP locations to valid Platinum locations only
* Improved generation 3 special egg check.
Only check special egg if pokemon knows any of the special egg moves, also in that case do check for normal egg before special egg
because special eggs will explicitly check for normal egg moves but normal eggs will not check special egg moves, it will improve the error output
* Clean up
* Fix gen 5 pokemon from issue #1011
Those pokemon have generation 4 static gift encounters and also wild encounters, the analysis was selecting the static encounter, but if there is a valid wild encounter and the static encounter does not match the pokemon ball the willd encounter should be selected instead
Also move the transfer legality to check it before the static encounters and make that check to work like generation 3 transfer legality
* Another fix for Issue 1011, suppress temporally OT and pokemon name analysis for generations 3 to 5 instead of format 3 to 5, there is no data stored yet to make those analysis
* Do not make wild encounters prevail static encounter if the pokemon was an egg
* Changed type of WildEncounter variable to EncounterSlot[]
* Fix Jhoto Route 45 to avoid return error with fishing encounters
2017-04-22 18:49:49 +00:00
|
|
|
|
499, // Sport Ball
|
|
|
|
|
500, // Park Ball
|
2017-02-26 19:43:26 +00:00
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-02-26 23:54:28 +00:00
|
|
|
|
internal static readonly bool[] ReleasedHeldItems_4 = Enumerable.Range(0, MaxItemID_4_HGSS+1).Select(i => HeldItems_HGSS.Contains((ushort)i) && !UnreleasedItems_4.Contains(i)).ToArray();
|
2017-03-18 23:50:34 +00:00
|
|
|
|
|
|
|
|
|
internal static readonly int[] Tutors_4 =
|
|
|
|
|
{
|
|
|
|
|
291, 189, 210, 196, 205, 009, 007, 276,
|
|
|
|
|
008, 442, 401, 466, 380, 173, 180, 314,
|
|
|
|
|
270, 283, 200, 246, 235, 324, 428, 410,
|
|
|
|
|
414, 441, 239, 402, 334, 393, 387, 340,
|
|
|
|
|
271, 257, 282, 389, 129, 253, 162, 220,
|
|
|
|
|
081, 366, 356, 388, 277, 272, 215, 067,
|
2017-03-30 00:43:17 +00:00
|
|
|
|
143, 335, 450, 029
|
2017-03-18 23:50:34 +00:00
|
|
|
|
};
|
2017-03-20 14:49:05 +00:00
|
|
|
|
|
2017-03-20 17:53:16 +00:00
|
|
|
|
internal static readonly int[] SpecialTutors_4 =
|
|
|
|
|
{
|
|
|
|
|
307, 308, 338, 434
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
internal static readonly int[][] SpecialTutors_Compatibility_4 =
|
|
|
|
|
{
|
2017-03-22 03:17:21 +00:00
|
|
|
|
new[] { 006, 157, 257, 392 },
|
|
|
|
|
new[] { 009, 160, 260, 395 },
|
|
|
|
|
new[] { 003, 154, 254, 389 },
|
|
|
|
|
new[] { 147, 148, 149, 230, 329, 330, 334, 371, 372, 373, 380, 381, 384, 443, 444, 445, 483, 484, 487 }
|
2017-03-20 17:53:16 +00:00
|
|
|
|
};
|
|
|
|
|
|
2017-03-19 19:27:58 +00:00
|
|
|
|
// Encounter Slots that are replaced
|
2017-07-25 07:28:43 +00:00
|
|
|
|
internal static readonly int[] Slot4_Swarm = { 0, 1 };
|
|
|
|
|
internal static readonly int[] Slot4_Time = { 2, 3 };
|
|
|
|
|
internal static readonly int[] Slot4_Sound = { 2, 3, 4, 5 };
|
|
|
|
|
internal static readonly int[] Slot4_Radar = { 4, 5, 10, 11 };
|
|
|
|
|
internal static readonly int[] Slot4_Dual = { 8, 9 };
|
2017-03-20 04:36:03 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> ValidMet_DP = new HashSet<int>
|
2017-03-20 04:36:03 +00:00
|
|
|
|
{
|
Special Eggs improvement and Generation 4 Encounter Type legal analysis (#1083)
* Ignore relearn level 2-100 moves from Phione
* Cave encounter types DPPt
* Generation 4 EncounterType filter and validation
Not every generation 4 static encounter have yet their encounter type defined, i temporally included Any to those encounters
Generation 4 roaaming static encounters have been splitted in two, grass and surf
* Added new legality texts
* Added unreleased event DP Darkai, added check for surf in jhoto route 45, is impossible
Moved unreleased DP locations to valid Platinum locations only
* Improved generation 3 special egg check.
Only check special egg if pokemon knows any of the special egg moves, also in that case do check for normal egg before special egg
because special eggs will explicitly check for normal egg moves but normal eggs will not check special egg moves, it will improve the error output
* Clean up
* Fix gen 5 pokemon from issue #1011
Those pokemon have generation 4 static gift encounters and also wild encounters, the analysis was selecting the static encounter, but if there is a valid wild encounter and the static encounter does not match the pokemon ball the willd encounter should be selected instead
Also move the transfer legality to check it before the static encounters and make that check to work like generation 3 transfer legality
* Another fix for Issue 1011, suppress temporally OT and pokemon name analysis for generations 3 to 5 instead of format 3 to 5, there is no data stored yet to make those analysis
* Do not make wild encounters prevail static encounter if the pokemon was an egg
* Changed type of WildEncounter variable to EncounterSlot[]
* Fix Jhoto Route 45 to avoid return error with fishing encounters
2017-04-22 18:49:49 +00:00
|
|
|
|
// 063: Flower Paradise unreleased DP event
|
|
|
|
|
// 079: Newmoon Island unreleased DP event
|
|
|
|
|
// 085: Seabreak Path unreleased DP event
|
|
|
|
|
// 086: Hall of Origin unreleased event
|
2018-05-12 15:13:39 +00:00
|
|
|
|
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,
|
Special Eggs improvement and Generation 4 Encounter Type legal analysis (#1083)
* Ignore relearn level 2-100 moves from Phione
* Cave encounter types DPPt
* Generation 4 EncounterType filter and validation
Not every generation 4 static encounter have yet their encounter type defined, i temporally included Any to those encounters
Generation 4 roaaming static encounters have been splitted in two, grass and surf
* Added new legality texts
* Added unreleased event DP Darkai, added check for surf in jhoto route 45, is impossible
Moved unreleased DP locations to valid Platinum locations only
* Improved generation 3 special egg check.
Only check special egg if pokemon knows any of the special egg moves, also in that case do check for normal egg before special egg
because special eggs will explicitly check for normal egg moves but normal eggs will not check special egg moves, it will improve the error output
* Clean up
* Fix gen 5 pokemon from issue #1011
Those pokemon have generation 4 static gift encounters and also wild encounters, the analysis was selecting the static encounter, but if there is a valid wild encounter and the static encounter does not match the pokemon ball the willd encounter should be selected instead
Also move the transfer legality to check it before the static encounters and make that check to work like generation 3 transfer legality
* Another fix for Issue 1011, suppress temporally OT and pokemon name analysis for generations 3 to 5 instead of format 3 to 5, there is no data stored yet to make those analysis
* Do not make wild encounters prevail static encounter if the pokemon was an egg
* Changed type of WildEncounter variable to EncounterSlot[]
* Fix Jhoto Route 45 to avoid return error with fishing encounters
2017-04-22 18:49:49 +00:00
|
|
|
|
061, 062, 064, 065, 066, 067, 068, 069, 070, 071, 072, 073, 074, 075, 076, 077, 078, 080,
|
|
|
|
|
081, 082, 083, 084, 087, 088, 089, 090, 091, 092, 093, 094, 095, 096, 097, 098, 099, 100,
|
2018-05-12 15:13:39 +00:00
|
|
|
|
101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
2017-03-20 04:36:03 +00:00
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> ValidMet_Pt = new HashSet<int>(ValidMet_DP.Concat(new[]
|
2017-03-20 04:36:03 +00:00
|
|
|
|
{
|
2018-05-12 15:13:39 +00:00
|
|
|
|
63, 79, 85, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
|
2017-09-30 21:08:35 +00:00
|
|
|
|
}));
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> ValidMet_HGSS = new HashSet<int>
|
2017-03-20 04:36:03 +00:00
|
|
|
|
{
|
2020-02-25 21:15:50 +00:00
|
|
|
|
080, 112, 113, 114, 115, 116,
|
2017-03-22 22:42:59 +00:00
|
|
|
|
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,
|
2017-05-12 15:55:24 +00:00
|
|
|
|
161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 172, 173, 174, 175, 176, 177, 178, 179, 180, //171: Route 23 no longer exists
|
|
|
|
|
181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
|
2017-03-22 22:42:59 +00:00
|
|
|
|
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, 234, //233: Pokéwalker
|
2017-03-20 04:36:03 +00:00
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2020-01-25 20:19:59 +00:00
|
|
|
|
internal static readonly HashSet<int> ValidMet_4 = new HashSet<int>(ValidMet_Pt.Concat(ValidMet_HGSS));
|
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> GiftEggLocation4 = new HashSet<int>
|
2017-04-01 16:45:13 +00:00
|
|
|
|
{
|
|
|
|
|
2009, 2010, 2011, 2013, 2014
|
|
|
|
|
};
|
2018-09-15 05:37:47 +00:00
|
|
|
|
|
2017-09-30 21:08:35 +00:00
|
|
|
|
internal static readonly HashSet<int> EggLocations4 = new HashSet<int>
|
2017-04-01 16:45:13 +00:00
|
|
|
|
{
|
|
|
|
|
2000, 2002, 2009, 2010, 2011, 2013, 2014
|
|
|
|
|
};
|
2019-02-21 06:10:15 +00:00
|
|
|
|
|
|
|
|
|
internal static int GetTransfer45MetLocation(PKM pk5)
|
|
|
|
|
{
|
|
|
|
|
if (pk5.Gen4 && pk5.FatefulEncounter)
|
|
|
|
|
{
|
|
|
|
|
var spec = pk5.Species;
|
|
|
|
|
if (spec == 251) // Celebi
|
2019-05-11 03:46:49 +00:00
|
|
|
|
return Locations.Transfer4_CelebiUnused;
|
2019-02-21 06:10:15 +00:00
|
|
|
|
if (243 <= spec && spec <= 245) // Beast
|
2019-05-11 03:46:49 +00:00
|
|
|
|
return Locations.Transfer4_CrownUnused;
|
2019-02-21 06:10:15 +00:00
|
|
|
|
}
|
2019-05-11 03:46:49 +00:00
|
|
|
|
return Locations.Transfer4; // Pokétransfer (not Crown);
|
2019-02-21 06:10:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal static int[] RemoveMovesHM45(int[] moves)
|
|
|
|
|
{
|
|
|
|
|
var banned = GetFavorableHMBanlist(moves);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
|
|
|
{
|
|
|
|
|
if (banned.Contains(moves[i]))
|
|
|
|
|
moves[i] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return moves;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Transfer via advantageous game
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="moves">Current moves</param>
|
|
|
|
|
/// <returns>Preferred move ban list</returns>
|
|
|
|
|
private static HashSet<int> GetFavorableHMBanlist(int[] moves)
|
|
|
|
|
{
|
|
|
|
|
// if has defog, return ban list with whirlpool
|
|
|
|
|
return moves.Contains(432) ? HM_HGSS : HM_DPPt;
|
|
|
|
|
}
|
2016-06-20 04:22:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|