Changes for Legends: Z-A (Mega Dimension) support (#4653)

Refer to pull request notes and the eventual changelog for a high-level summary.

Co-authored-by: Matt <17801814+sora10pls@users.noreply.github.com>
Co-authored-by: Lusamine <30205550+Lusamine@users.noreply.github.com>
Co-authored-by: SciresM <8676005+SciresM@users.noreply.github.com>
This commit is contained in:
Kurt 2025-12-12 01:30:35 -06:00 committed by GitHub
parent f2d33bf0cf
commit 34f3624b64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
190 changed files with 3206 additions and 507 deletions

View File

@ -313,6 +313,14 @@ private void SanitizeItemsZA(Span<string> items)
// Seed of Mastery
items[1622] += " (LA)";
items[2558] += " (ZA)";
items[2612] += " (-)"; // Cherished Ring (2596), this one is a quest item you cannot actually possess in save file
if (Language is French) // Mouchoir Sale
{
itemlist[0634] += " (G5)"; // Grubby Hanky
itemlist[2613] += " (ZA)"; // Dirty Scarf
}
// Canari Plushes
Canari(items[2620..]); // Red
Canari(items[2623..]); // Gold
@ -730,6 +738,9 @@ private static void SanitizeMetGen9a(LocationSet6 set)
set.Met4[65] += " (-)"; // Pokémon GO -- duplicate with 30012
set.Met4[70] += " (-)"; // Pokémon HOME -- duplicate with 30018
set.Met6[05] += " (-)"; // Lumiose City (6005) -- duplicate with 30026
set.Met3[33] += " (-)"; // Rouge Sector 1 (30033) -- duplicate with 70
set.Met3[34] += " (-)"; // Hyperspace Lumiose (30034) -- duplicate with 273
set.Met3[35] += " (-)"; // Quasartico Inc. -- duplicate with 62
Deduplicate(set.Met0, 00000);
Deduplicate(set.Met3, 30000);

View File

@ -33,6 +33,10 @@ internal static class Locations9a
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,
// Mega Dimension DLC
273, 274, 275, 276, 277, 278, 279,
280, 281, 282, 283,
];
/// <summary>
@ -43,7 +47,7 @@ internal static class Locations9a
30001, 30003, 30004, 30005, 30006, 30007, 30008, 30009,
30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019,
30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30029,
30030, 30031, 30032,
30030, 30031, 30032, 30033, 30034, 30035,
];
/// <summary>

View File

@ -11,6 +11,7 @@ public sealed class ItemStorage9ZA : IItemStorage
[
0017, 0018, 0019, 0020, 0021, 0022, 0023, 0024, 0025, 0026,
0027, 0028, 0029, 0030, 0031, 0032, 0033, 0708,
2684,
];
public static ReadOnlySpan<ushort> Balls => // 1
@ -23,16 +24,19 @@ public sealed class ItemStorage9ZA : IItemStorage
public static ReadOnlySpan<ushort> Other => // 2 (Items)
[
0045, 0046, 0047, 0048, 0049, 0050, 0052, 0080, 0081, 0082,
0083, 0084, 0085, 0103, 0107, 0108, 0109, 0214, 0217, 0218,
0221, 0222, 0230, 0231, 0232, 0233, 0234, 0236, 0237, 0238,
0239, 0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247, 0248,
0249, 0250, 0251, 0253, 0266, 0267, 0268, 0270, 0275, 0289,
0290, 0291, 0292, 0293, 0294, 0296, 0538, 0540, 0564, 0565,
0566, 0567, 0568, 0569, 0570, 0639, 0640, 0646, 0647, 0710,
0711, 0795, 0796, 0849, 1124, 1125, 1126, 1127, 1128, 1231,
1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241,
1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
1582, 1592, 2401, 2558, 2618, 2619, // Colorful Screw cannot be held.
0083, 0084, 0085, 0103, 0107, 0108, 0109, 0116, 0117, 0118,
0119, 0214, 0217, 0218, 0221, 0222, 0230, 0231, 0232, 0233,
0234, 0236, 0237, 0238, 0239, 0240, 0241, 0242, 0243, 0244,
0245, 0246, 0247, 0248, 0249, 0250, 0251, 0252, 0253, 0258,
0259, 0266, 0267, 0268, 0270, 0275, 0289, 0290, 0291, 0292,
0293, 0294, 0296, 0324, 0534, 0535, 0537, 0538, 0540, 0564,
0565, 0566, 0567, 0568, 0569, 0570, 0639, 0640, 0646, 0647,
0710, 0711, 0795, 0796, 0849, 1124, 1125, 1126, 1127, 1128,
1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240,
1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250,
1251, 1582, 1592, 1691, 1861, 2137, 2344, 2401, 2558, 2618,
2619, // Colorful Screw cannot be held.
];
public static ReadOnlySpan<ushort> Treasure => // 3
@ -42,9 +46,11 @@ public sealed class ItemStorage9ZA : IItemStorage
public static ReadOnlySpan<ushort> Key => // 4
[
0632, 0700, 0765, 0847, 2588, 2589, 2590, 2591, 2592, 2595,
2596, 2597, 2598, 2599, 2600, 2620, 2621, 2622, 2623, 2624,
2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634,
0632, 0700, 0765, 0847, 1278, 2588, 2589, 2590, 2591, 2592,
2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604,
2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2620,
2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630,
2631, 2632, 2633, 2634,
];
@ -54,6 +60,10 @@ public sealed class ItemStorage9ZA : IItemStorage
0170, 0171, 0172, 0173, 0174, 0184, 0185, 0186, 0187, 0188,
0189, 0190, 0191, 0192, 0193, 0194, 0195, 0196, 0197, 0198,
0199, 0200, 0686,
2651, 2652, 2653, 2654, 2655, 2656, 2657,
2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667,
2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677,
2678, 2679, 2680, 2681, 2682, 2683,
];
public static ReadOnlySpan<ushort> TM => // 6
@ -69,17 +79,27 @@ public sealed class ItemStorage9ZA : IItemStorage
0408, 0409, 0410, 0411, 0412, 0413, 0414, 0415, 0416, 0417,
0418, 0419, 0618, 0619, 0620, 0690, 0691, 0692, 0693, 2160,
2162, 2163, 2164, 2165, 2166, 2167, 2168,
2169, 2170, 2171,
2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181,
2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191,
2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201,
2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211,
2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221,
];
public static ReadOnlySpan<ushort> MegaStones => // 7
[
0656, 0657, 0658, 0659, 0660, 0661, 0662, 0663, 0665, 0666,
0667, 0668, 0669, 0670, 0671, 0672, 0673, 0674, 0675, 0676,
0677, 0678, 0679, 0680, 0681, 0682, 0683, 0754, 0755, 0756,
0757, 0758, 0759, 0760, 0761, 0762, 0763, 0764, 0767, 0768,
0769, 0770, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566,
2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578,
2579, 2580, 2581, 2582, 2583, 2584, 2585, 2587,
0656, 0657, 0658, 0659, 0660, 0661, 0662, 0663, 0664, 0665,
0666, 0667, 0668, 0669, 0670, 0671, 0672, 0673, 0674, 0675,
0676, 0677, 0678, 0679, 0680, 0681, 0682, 0683, 0684, 0685,
0752, 0753, 0754, 0755, 0756, 0757, 0758, 0759, 0760, 0761,
0762, 0763, 0764, 0767, 0768, 0769, 0770, 2559, 2560, 2561,
2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571,
2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581,
2582, 2583, 2584, 2585, 2586, 2587, 2635, 2636, 2637, 2638,
2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648,
2649, 2650,
];
internal static ReadOnlySpan<InventoryType> ValidTypes =>
@ -97,8 +117,12 @@ public sealed class ItemStorage9ZA : IItemStorage
public static ReadOnlySpan<ushort> Unreleased =>
[
0005, // Safari Ball (Season 3 Ranked Reward)
0851, // Beast Ball
0664, // Blazikenite
0752, // Swampertite
0753, // Sceptilite
2640, // Garchompite Z
2648, // Baxcalibrite
];
public int GetMax(InventoryType type) => type switch
@ -147,11 +171,16 @@ public static InventoryType GetInventoryPouch(ushort itemIndex)
public static bool IsMegaStone(ushort item) => MegaStones.Contains(item);
/// <summary>
/// Retrieves the expected Mega Stone item ID for a given Pokémon species and form.
/// Retrieves the expected Mega Stone or Primal Orb item ID for a given Pokémon species and form.
/// </summary>
/// <returns>0 if no item is expected for this species and form combination (in other words, not a mega form).</returns>
public static ushort GetExpectedMegaStone(ushort species, byte form) => (Species)species switch
/// <returns>0 if no item is expected for this species and form combination (in other words, not a Mega Evolution or Primal Reversion).</returns>
public static ushort GetExpectedMegaStoneOrPrimalOrb(ushort species, byte form) => (Species)species switch
{
// Primal Reversions
Groudon when form == 1 => 0534,
Kyogre when form == 1 => 0535,
// X/Y Mega Evolutions
Gengar when form == 1 => 0656,
Gardevoir when form == 1 => 0657,
Ampharos when form == 1 => 0658,
@ -182,6 +211,8 @@ public static InventoryType GetInventoryPouch(ushort itemIndex)
Garchomp when form == 1 => 0683,
Latias when form == 1 => 0684,
Latios when form == 1 => 0685,
// OR/AS Mega Evolutions
Swampert when form == 1 => 0752,
Sceptile when form == 1 => 0753,
Sableye when form == 1 => 0754,
@ -199,6 +230,8 @@ public static InventoryType GetInventoryPouch(ushort itemIndex)
Lopunny when form == 1 => 0768,
Salamence when form == 1 => 0769,
Beedrill when form == 1 => 0770,
// Z-A Mega Evolutions
Clefable when form == 1 => 2559,
Victreebel when form == 1 => 2560,
Starmie when form == 1 => 2561,
@ -229,14 +262,14 @@ public static InventoryType GetInventoryPouch(ushort itemIndex)
Zeraora when form == 1 => 2586,
Falinks when form == 1 => 2587,
// DLC Mega Stones
// Mega Dimension Mega Evolutions
Raichu when form == 2 => 2635, // X
Raichu when form == 3 => 2636, // Y
Chimecho when form == 1 => 2637,
Absol when form == 2 => 2638, // ZA
Absol when form == 2 => 2638, // Z
Staraptor when form == 1 => 2639,
Garchomp when form == 2 => 2640, // ZA
Lucario when form == 2 => 2641, // ZA
Garchomp when form == 2 => 2640, // Z
Lucario when form == 2 => 2641, // Z
Golurk when form == 1 => 2642,
Meowstic when form == 2 => 2643,
Crabominable when form == 1 => 2644,

View File

@ -50,6 +50,13 @@ internal static class Encounters9a
new(0142,0,35,255) { Location = 30027, Shiny = Random, IsAlpha = true, FlawlessIVCount = 3 }, // Aerodactyl (restoration_ptera)
new(0696,0,35,255) { Location = 30027, Shiny = Random, IsAlpha = true, FlawlessIVCount = 3 }, // Tyrunt (restoration_chigoras)
new(0698,0,35,255) { Location = 30027, Shiny = Random, IsAlpha = true, FlawlessIVCount = 3 }, // Amaura (restoration_amarus)
#region Sankaku
new(0801,0,80,128) { Location = 00000, Nature = Nature.Modest, FlawlessIVCount = 3 }, // Magearna (sub_addpoke_magiana)
new(0809,0,80,128) { Location = 00000, Nature = Nature.Adamant, FlawlessIVCount = 3 }, // Melmetal (sub_addpoke_merumetal)
new(0720,0,80,128) { Location = 00000, Nature = Nature.Lonely, FlawlessIVCount = 3, Moves = new(593,094,417,566) }, // Hoopa (sub_addpoke_huupa)
new(0999,0,05,128) { Location = 30033, Nature = Nature.Bold, FlawlessIVCount = 3, Trainer = TrainerGift9a.Gimmighoul }, // Gimmighoul (sub_addpoke_korekure)
#endregion
];
internal static readonly EncounterStatic9a[] Static =
@ -77,6 +84,52 @@ internal static class Encounters9a
new(0703,0,66,128) { Location = 00063, FlawlessIVCount = 3, Moves = new(444,430,605,157) }, // Carbink (sub_119_melecie_01)
new(0703,0,66,128) { Location = 00063, FlawlessIVCount = 3, Moves = new(444,446,408,605) }, // Carbink (sub_119_melecie_02)
new(0719,0,70,128) { Location = 00063, FlawlessIVCount = 3, Moves = new(591,585,446,577) }, // Diancie (sub_119_diancie)
#region Sankaku
// Rogue Mega Evolution
new(0359,0,75,255) { Location = 00275, Gender = 1, Nature = Nature.Quiet, IVs = new(31,31,20,28,31,18), Moves = new(282,400,555,425) }, // Absol (btl_ect_boss_0359_z_01)
new(0384,0,85,128) { Location = 00283, Nature = Nature.Brave, IVs = new(31,31,29,20,31,29), Moves = new(620,304,800,200) }, // Rayquaza (ect_boss_0384_01)
new(0398,0,75,255) { Location = 00276, Gender = 0, Nature = Nature.Adamant, IVs = new(31,31,15,24,31,20), Moves = new(411,814,038,370) }, // Staraptor (btl_ect_boss_0398_01)
new(0485,0,80,128) { Location = 00279, Gender = 0, Nature = Nature.Bold, IVs = new(31,31,28,08,31,25), Moves = new(463,430,523,315) }, // Heatran (btl_ect_boss_0485_01)
new(0491,0,85,128) { Location = 00280, Nature = Nature.Careful, IVs = new(31,31,18,26,31,21), Moves = new(464,248,138,555) }, // Darkrai (btl_ect_boss_0491_01)
new(0678,0,75,255) { Location = 00278, Gender = 0, Nature = Nature.Calm, IVs = new(31,31,22,24,31,25), Moves = new(094,115,113,060) }, // Meowstic (btl_ect_boss_0678_01)
new(0807,0,85,128) { Location = 00273, Nature = Nature.Brave, IVs = new(31,31,19,27,31,15), Moves = new(721,223,527,528) }, // Zeraora (btl_ect_boss_0807_01)
new(0978,0,75,255) { Location = 00277, Gender = 0, Nature = Nature.Timid, IVs = new(31,31,16,30,31,28), Moves = new(127,058,407,250) }, // Tatsugiri (btl_ect_boss_0952_01)
// Rogue Primal Reversion
new(0382,0,80,128) { Location = 00281, Nature = Nature.Modest, IVs = new(31,31,12,22,31,28), Moves = new(618,058,057,087) }, // Kyogre (ect_boss_0382_01)
new(0383,0,80,128) { Location = 00282, Nature = Nature.Impish, IVs = new(31,31,24,25,31,18), Moves = new(619,126,076,815) }, // Groudon (ect_boss_0383_01)
// Legendary Pokémon
new(0380,0,60,128) { Location = 00000, Shiny = Random, Gender = 1, IVs = new(12,07,31,16,31,31) }, // Latias (ect_zdm404_sp06_380_sp)
new(0381,0,60,128) { Location = 00000, Shiny = Random, Gender = 0, IVs = new(31,31,31,16,16,07) }, // Latios (ect_zdm404_sp07_381_sp)
new(0638,0,60,128) { Location = 00000, Shiny = Random, IVs = new(12,31,31,31,16,07) }, // Cobalion (ect_zdm406_sp01_638_sp)
new(0639,0,60,128) { Location = 00000, Shiny = Random, IVs = new(31,31,16,31,12,07) }, // Terrakion (ect_zdm406_sp02_639_sp)
new(0640,0,60,128) { Location = 00000, Shiny = Random, IVs = new(16,31,12,31,31,07) }, // Virizion (ect_zdm406_sp03_640_sp)
// Mythical Pokémon
new(0647,0,60,128) { Location = 00000, IVs = new(07,31,31,31,16,12) }, // Keldeo (ect_zdm402_sp04_647_sp)
new(0648,0,60,128) { Location = 00000, IVs = new(07,31,12,31,31,16) }, // Meloetta (ect_zdm402_sp05_648_sp)
new(0649,0,60,128) { Location = 00000, FlawlessIVCount = 3, Moves = new(546,430,679,405) }, // Genesect (Ev_sub_196_030)
new(0721,0,80,128) { Location = 00000, FlawlessIVCount = 3, Moves = new(592,056,114,315) }, // Volcanion (Ev_sub_201_011)
new(0802,0,80,128) { Location = 00000, FlawlessIVCount = 3, Moves = new(712,370,325,425) }, // Marshadow (Ev_sub_197_010)
new(0808,0,70,128) { Location = 00000, FlawlessIVCount = 3, Moves = new(430,151,693,000) }, // Meltan (Ev_sub_200_010)
// Side Missions
new(0551,0,38,128) { Location = 00093, Nature = Nature.Adamant, Moves = new(044,043,242,091) }, // Sandile (sub_152_020_1)
new(0552,0,50,128) { Location = 00093, Nature = Nature.Adamant, Moves = new(044,043,242,328) }, // Krokorok (sub_152_020_3)
new(0769,0,40,128) { Location = 00211, Nature = Nature.Impish, Moves = new(328,523,334,202) }, // Sandygast (Ev_sub_157_010_1)
new(0827,0,15,128) { Location = 00045, Gender = 1, Nature = Nature.Naughty, Moves = new(046,555,098,039) }, // Nickit (Ev_sub_160_040)
new(0932,0,40,128) { Location = 00030, Gender = 1, Nature = Nature.Impish, Moves = new(446,334,088,105) }, // Nacli (sub_153_010_kojio)
// TODO ZA DLC - VERIFY WHAT IS AND IS NOT CATCHABLE
new(0026,0,60,255) { Location = 00000, Gender = 0, Moves = new(087,063,130,000), IsAlpha = true }, // Raichu (ect_subq147_p1)
new(0450,0,60,255) { Location = 00000, Gender = 0, Moves = new(089,090,000,000) }, // Hippowdon (ect_subq147_p2)
new(0450,0,60,255) { Location = 00000, Gender = 0, Moves = new(091,446,157,000) }, // Hippowdon (ect_subq147_p2b)
new(0181,0,60,255) { Location = 00000, Gender = 0, Moves = new(451,087,000,000) }, // Ampharos (ect_subq147_p3)
new(0181,0,60,255) { Location = 00000, Gender = 0, Moves = new(192,129,000,000) }, // Ampharos (ect_subq147_p3b)
new(0349,0,17,000) { Location = 00000, Shiny = Random }, // Feebas (ect_subq173_349)
#endregion
];
private const string tradeZA = "tradeza";
@ -87,5 +140,6 @@ internal static class Encounters9a
new(TradeNames,1,0447,0,25) { ID32 = 348226, OTGender = 0, Gender = 0, Nature = Nature.Rash, IVs = new(15,31,15,31,31,15), Moves = new(418,098,249,197) }, // Riolu (sub_tradepoke_riolu)
new(TradeNames,2,0079,1,30) { ID32 = 934764, OTGender = 0, Gender = 0, FlawlessIVCount = 3, Moves = new(352,133,428,029) }, // Slowpoke-1 (sub_addpoke_gyadon)
new(TradeNames,3,0026,1,64) { ID32 = 693489, OTGender = 1, Gender = 0, Nature = Nature.Jolly, IVs = new(20,20,20,20,20,20), Moves = new(094,087,057,583) }, // Raichu-1 (sub_addpoke_araichu)
new(TradeNames,4,0233,0,50) { ID32 = 000000, OTGender = 0, Gender = 2, Nature = Nature.Modest }, // Porygon2 (sub_tradepoke_poligon2) -- TODO ZA DLC FIND TID
];
}

View File

@ -6,7 +6,7 @@ namespace PKHeX.Core;
/// Gift Encounter found in <see cref="GameVersion.ZA"/>.
/// </summary>
public sealed record EncounterGift9a(ushort Species, byte Form, byte Level, byte Size = EncounterGift9a.NoScale)
: IEncounter9a, IEncounterConvertible<PA9>, IFixedGender, IFixedNature, IFixedIVSet, IMoveset, IFixedTrainer
: IEncounter9a, IEncounterConvertible<PA9>, IFixedGender, IFixedNature, IFixedIVSet, IMoveset, IFixedTrainer, IFixedNickname
{
public byte Generation => 9;
private const GameVersion Version = GameVersion.ZA;
@ -36,11 +36,18 @@ public sealed record EncounterGift9a(ushort Species, byte Form, byte Level, byte
public string LongName => Name;
public bool IsFixedTrainer => Trainer != TrainerGift9a.None;
public bool IsFixedNickname => Trainer == TrainerGift9a.Gimmighoul;
public bool IsTrainerMatch(PKM pk, ReadOnlySpan<char> trainer, int language)
{
var expect = GetFixedTrainerName(Trainer, pk.Language);
return trainer.SequenceEqual(expect);
}
public bool IsNicknameMatch(PKM pk, ReadOnlySpan<char> nickname, int language)
{
var expect = GetGimmighoulFixedNickname(Trainer, pk.Language);
return nickname.SequenceEqual(expect);
}
public string GetNickname(int language) => IsFixedNickname ? GetGimmighoulFixedNickname(Trainer, language) : SpeciesName.GetSpeciesNameGeneration(Species, language, Generation);
#region Generating
@ -65,7 +72,7 @@ public PA9 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
IsAlpha = IsAlpha,
Ball = (byte)Ball.Poke,
Nickname = SpeciesName.GetSpeciesNameGeneration(Species, lang, Generation),
Nickname = GetNickname(lang),
ObedienceLevel = LevelMin,
};
@ -80,6 +87,12 @@ public PA9 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
pk.OriginalTrainerName = GetFixedTrainerName(Trainer, lang);
pk.OriginalTrainerGender = GetFixedTrainerGender(Trainer);
pk.ID32 = GetFixedTrainerID32(Trainer);
if (Trainer is TrainerGift9a.Gimmighoul)
{
pk.IsNicknamed = true;
pk.Nickname = GetGimmighoulFixedNickname(Trainer, lang);
}
}
SetPINGA(pk, criteria, pi);
@ -243,6 +256,7 @@ private static bool IsMatchFixedTrainer(PKM pk, TrainerGift9a trainer)
TrainerGift9a.Lucario => 912562,
TrainerGift9a.Floette => 1,
TrainerGift9a.Stunfisk => 250932,
TrainerGift9a.Gimmighoul => 115090,
_ => throw new ArgumentOutOfRangeException(nameof(trainer), trainer, null),
};
@ -251,6 +265,7 @@ private static bool IsMatchFixedTrainer(PKM pk, TrainerGift9a trainer)
TrainerGift9a.Lucario => 1,
TrainerGift9a.Floette => 0,
TrainerGift9a.Stunfisk => 0,
TrainerGift9a.Gimmighoul => 0,
_ => throw new ArgumentOutOfRangeException(nameof(trainer), trainer, null),
};
@ -298,8 +313,37 @@ private static bool IsMatchFixedTrainer(PKM pk, TrainerGift9a trainer)
(int)LanguageID.SpanishL => "René",
_ => throw new ArgumentOutOfRangeException(nameof(language), language, null),
},
TrainerGift9a.Gimmighoul => language switch
{
(int)LanguageID.Japanese => "セロ",
(int)LanguageID.English => "Thelo",
(int)LanguageID.French => "Thélo",
(int)LanguageID.Italian => "Petens",
(int)LanguageID.German => "Will",
(int)LanguageID.Spanish => "Thelo",
(int)LanguageID.Korean => "텔로",
(int)LanguageID.ChineseS => "法才",
(int)LanguageID.ChineseT => "法才",
(int)LanguageID.SpanishL => "Turian",
_ => throw new ArgumentOutOfRangeException(nameof(language), language, null),
},
_ => throw new ArgumentOutOfRangeException(nameof(trainer), trainer, null),
};
private static string GetGimmighoulFixedNickname(TrainerGift9a trainer, int language) => language switch
{
(int)LanguageID.Japanese => "はこいり",
(int)LanguageID.English => "Chestly",
(int)LanguageID.French => "Trésor",
(int)LanguageID.Italian => "Bauletto",
(int)LanguageID.German => "Schätzchen",
(int)LanguageID.Spanish => "Tesorina",
(int)LanguageID.Korean => "보무리",
(int)LanguageID.ChineseS => "千金",
(int)LanguageID.ChineseT => "千金",
(int)LanguageID.SpanishL => "Tesorita",
_ => throw new ArgumentOutOfRangeException(nameof(language), language, null),
};
}
public enum TrainerGift9a : byte
@ -308,4 +352,5 @@ public enum TrainerGift9a : byte
Lucario,
Floette,
Stunfisk,
Gimmighoul,
}

View File

@ -28,7 +28,7 @@ public sealed record EncounterStatic9a(ushort Species, byte Form, byte Level, by
public Moveset Moves { get; init; }
public IndividualValueSet IVs { get; init; }
public Nature Nature { get; init; } = Nature.Random;
public required byte Location { get; init; }
public required ushort Location { get; init; }
public byte Gender { get; init; } = FixedGenderUtil.GenderRandom;
public Shiny Shiny { get; init; } = Shiny.Never;
public bool IsAlpha { get; init; }

View File

@ -74,6 +74,7 @@ public enum EvolutionType : byte
LevelUpRecoilDamageFemale = 60, // Basculegion-1
Hisui = 61,
UseMovePlusStyle = 62,
// These are fake IDs as PLA indexes clashed with mainline.
UseItemFullMoon = 90, // Ursaluna
@ -172,6 +173,7 @@ public static class EvolutionTypeExtensions
UseItemFullMoon => false,
UseMoveAgileStyle => false,
UseMoveStrongStyle => false,
UseMovePlusStyle => false,
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
};
}

View File

@ -132,11 +132,22 @@ public static class Legal
internal const ushort MaxItemID_9_T2 = 2557; // Briars Book
internal const ushort MaxAbilityID_9_T2 = (int)Ability.PoisonPuppeteer;
internal const int MaxSpeciesID_9a = (int)Species.Falinks;
internal const int MaxMoveID_9a = (int)Move.NihilLight;
internal const int MaxItemID_9a = 2634; // Blue Canari Plush
internal const int MaxAbilityID_9a = (int)Ability.PoisonPuppeteer;
internal const int MaxBallID_9a = (int)Ball.LAOrigin;
internal const int MaxSpeciesID_9a = MaxSpeciesID_9a_MD;
internal const int MaxMoveID_9a = MaxMoveID_9a_IK;
internal const int MaxItemID_9a = MaxItemID_9a_MD;
internal const int MaxAbilityID_9a = MaxAbilityID_9a_IK;
internal const int MaxBallID_9a = MaxBallID_9a_IK;
internal const int MaxSpeciesID_9a_IK = (int)Species.Falinks;
internal const int MaxMoveID_9a_IK = (int)Move.NihilLight;
internal const int MaxItemID_9a_IK = 2634; // Blue Canari Plush
internal const int MaxAbilityID_9a_IK = (int)Ability.PoisonPuppeteer;
internal const int MaxBallID_9a_IK = (int)Ball.LAOrigin;
internal const int MaxSpeciesID_9a_MD = (int)Species.Gholdengo;
internal const int MaxMoveID_9a_MD = MaxMoveID_9a_IK;
internal const int MaxItemID_9a_MD = 2684; // Canari Bread
internal const int MaxAbilityID_9a_MD = MaxAbilityID_9a_IK;
internal const int MaxBallID_9 = (int)Ball.LAOrigin;
internal const GameVersion MaxGameID_HOME = GameVersion.VL; // TODO HOME ZA - Replace with ZA when HOME; if backwards transfer is allowed. If prevented, rename epoch as HOME1.

View File

@ -238,6 +238,7 @@ public sealed class LegalityCheckLocalization
public string IVNotCorrect { get; set; } = "IVs do not match encounter requirements.";
public string IVFlawlessCountGEQ_0 { get; set; } = "Should have at least {0} IVs = 31.";
public string LevelBoostNotZero { get; set; } = "Level Boost should be zero.";
public string LevelEXPThreshold { get; set; } = "Current experience matches level threshold.";
public string LevelEXPTooHigh { get; set; } = "Current experience exceeds maximum amount for level 100.";
public string LevelMetBelow { get; set; } = "Current level is below met level.";

View File

@ -258,6 +258,8 @@ public static class LegalityCheckResultCodeExtensions
HintEvolvesToRareForm_0 => localization.HintEvolvesToRareForm_0,
ItemEgg => localization.ItemEgg,
ItemUnreleased => localization.ItemUnreleased,
LevelBoostNotZero => localization.LevelBoostNotZero,
LevelEXPThreshold => localization.LevelEXPThreshold,
LevelEXPTooHigh => localization.LevelEXPTooHigh,
LevelMetBelow => localization.LevelMetBelow,

View File

@ -220,6 +220,7 @@ public enum LegalityCheckResultCode : ushort
IVNotCorrect,
// Level
LevelBoostNotZero,
LevelEXPThreshold,
LevelEXPTooHigh,
LevelMetBelow,

View File

@ -36,6 +36,13 @@ public static bool IsMegaForm(ushort species, byte form)
return false;
}
/// <summary>
/// Checks if the form is a Primal form.
/// </summary>
/// <param name="species">Entity species</param>
/// <param name="form">Entity form</param>
public static bool IsPrimalForm(ushort species, byte form) => species is (ushort)Kyogre or (ushort)Groudon && form == 1;
/// <summary>
/// Checks if the species has a Mega form.
/// </summary>
@ -57,11 +64,16 @@ public static bool IsMegaForm(ushort species, byte form)
private static bool IsBattleMegaForm(ushort species, byte form) => species switch
{
(ushort)Raichu => form is 2 or 3,
(ushort)Slowbro => form == 1,
(ushort)Zygarde => form == 5,
(ushort)Floette => form == 6,
(ushort)Greninja => form == 3,
_ => form != 0
(ushort)Meowstic => form == 2,
(ushort)Magearna => form == 2,
(ushort)Tatsugiri => form is (3 or 4 or 5),
_ => form != 0,
};
/// <summary>
@ -272,9 +284,23 @@ public static bool IsFormChangeable(ushort species, byte oldForm, byte newForm,
(int)Floette,
//(int)Heatran,
//(int)Darkrai,
//(int)Zeraora,
(int)Heatran,
(int)Darkrai,
(int)Zeraora,
(int)Raichu,
(int)Magearna,
(int)Tatsugiri,
(int)Meowstic,
(int)Chimecho,
(int)Staraptor,
(int)Golurk,
(int)Crabominable,
(int)Golisopod,
(int)Scovillain,
(int)Baxcalibur,
(int)Glimmora,
];
/// <summary>

View File

@ -196,10 +196,10 @@ private CheckResult VerifyBattleForms9a(LegalityAnalysis data, ushort species, b
return GetInvalid(FormBattle); // Should have reverted to base form when stored.
// Battle forms can exist in Party.
if (!FormInfo.IsMegaForm(species, form))
if (!FormInfo.IsMegaForm(species, form) && !FormInfo.IsPrimalForm(species, form))
return VALID;
var megaStone = ItemStorage9ZA.GetExpectedMegaStone(species, form);
var megaStone = ItemStorage9ZA.GetExpectedMegaStoneOrPrimalOrb(species, form);
if (megaStone == 0 || data.Entity.HeldItem == megaStone)
return VALID;

View File

@ -14,6 +14,9 @@ public override void Verify(LegalityAnalysis data)
CheckLearnset(data, pa9);
CheckFlagsTM(data, pa9);
CheckFlagsPlus(data, pa9);
if (pa9.LevelBoost is not 0)
data.AddLine(GetInvalid(LevelBoostNotZero));
}
private void CheckLearnset(LegalityAnalysis data, PA9 pa)
@ -125,7 +128,7 @@ private void CheckFlagsTM(LegalityAnalysis data, PA9 pa9)
var enc = data.EncounterMatch;
if (enc.Context is not EntityContext.Gen9a)
return;
if (enc is not IAlphaReadOnly { IsAlpha: true })
if (enc is WA9 or not IAlphaReadOnly { IsAlpha: true })
return;
var pi = PersonalTable.ZA[enc.Species, enc.Form];

View File

@ -118,12 +118,12 @@ internal static class MoveInfo9a
/// </remarks>
public static ReadOnlySpan<byte> DummiedMoves =>
[
0x7E, 0xBC, 0xB0, 0xDF, 0x29, 0x82, 0x0E, 0x40, 0x7E, 0x01, 0x05, 0x04, 0x69, 0xC8, 0xA1, 0x3A, 0xDD, 0xDD,
0x3F, 0xDD, 0xE3, 0xAF, 0x3F, 0x6F, 0xC6, 0xC2, 0xF5, 0x77, 0x7C, 0x62, 0x5B, 0xF8, 0xDD, 0xCF, 0xFD, 0xFA,
0xFF, 0xFD, 0xFE, 0x55, 0xFF, 0xA6, 0xC5, 0xA4, 0xFE, 0xFF, 0xF9, 0xFD, 0xBF, 0x2A, 0x06, 0x86, 0x08, 0xA4,
0x83, 0xA9, 0xCF, 0xFD, 0xFF, 0xFD, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0x35, 0x6C, 0xAB, 0xFF, 0xE7, 0x2E, 0x13,
0x7C, 0x68, 0xA0, 0xDD, 0x05, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0x7F, 0xDF, 0xFF, 0xBF, 0xFF,
0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x2E, 0x9C, 0xB0, 0xDF, 0x29, 0x02, 0x0E, 0x40, 0x7E, 0x01, 0x04, 0x00, 0x29, 0xC8, 0xA1, 0x3A, 0xD9, 0x59,
0x37, 0xD5, 0xE0, 0xAF, 0x3E, 0x6F, 0xC6, 0x02, 0xF5, 0x77, 0x7C, 0x62, 0x1B, 0xE8, 0x55, 0xCF, 0xFD, 0xFA,
0x7F, 0xF4, 0xE4, 0x15, 0xDF, 0x80, 0xC1, 0xA4, 0xFE, 0xFF, 0xF9, 0xFD, 0xBF, 0x2A, 0x02, 0x80, 0x08, 0xA4,
0x83, 0xA1, 0xC7, 0x79, 0xFA, 0xFD, 0xEA, 0xF2, 0x7F, 0xDF, 0xFF, 0x25, 0x48, 0xAB, 0xE3, 0xE7, 0x2E, 0x13,
0x7C, 0x68, 0xA0, 0xDD, 0x05, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9D, 0x7F, 0x7F, 0xDF, 0xFF, 0xA9, 0xFE,
0xFD, 0xFF, 0xBF, 0xEF, 0xFD, 0xFF, 0xFF, 0x7F, 0xFA, 0x6B, 0xFE, 0x0F, 0xFF, 0xBF, 0x7F, 0xFF, 0xBF, 0xBA,
0xFA, 0xFB, 0x9E, 0xD1, 0xFF, 0xFF, 0xFF
];
}

View File

@ -153,7 +153,7 @@ public override ushort SID16
public override byte Form { get => Data[0x272]; set => Data[0x272] = value; }
public override byte Gender { get => Data[0x273]; set => Data[0x273] = value; }
public override byte Level { get => Data[0x274]; set => Data[0x274] = value; }
public override bool IsEgg { get => Data[0x275] == 1; set => Data[0x275] = value ? (byte)1 : (byte)0; } // before level; might be a flag for random level?
public override bool IsEgg { get => Data[0x275] == 1; set => Data[0x275] = value ? (byte)1 : (byte)0; }
public Nature Nature
{
get
@ -843,7 +843,8 @@ public GenerateParam9a GetParams(PersonalInfo9ZA pi)
{
const byte rollCount = 1;
var hp = IV_HP;
var ivs = new IndividualValueSet((sbyte)hp, (sbyte)IV_ATK, (sbyte)IV_DEF, (sbyte)IV_SPE, (sbyte)IV_SPA, (sbyte)IV_SPD);
var flawless = FlawlessIVCount;
var ivs = flawless != 0 ? default : new IndividualValueSet((sbyte)hp, (sbyte)IV_ATK, (sbyte)IV_DEF, (sbyte)IV_SPE, (sbyte)IV_SPA, (sbyte)IV_SPD);
var sizeType = Scale == 256 ? SizeType9.RANDOM : SizeType9.VALUE;
var gender = Gender switch
{
@ -852,14 +853,14 @@ public GenerateParam9a GetParams(PersonalInfo9ZA pi)
2 => PersonalInfo.RatioMagicGenderless,
_ => pi.Gender,
};
return new GenerateParam9a(gender, FlawlessIVCount, rollCount, Correlation, sizeType, (byte)Scale, Nature, Ability, Shiny, ivs);
return new GenerateParam9a(gender, flawless, rollCount, Correlation, sizeType, (byte)Scale, Nature, Ability, Shiny, ivs);
}
private static byte GetFlawlessIVCount(int hp)
{
var tryFlawless = 0xFF - hp;
if ((uint)tryFlawless < 6)
return (byte)tryFlawless;
var tryFlawless = hp - 0xFC;
if ((uint)tryFlawless < 3)
return (byte)(tryFlawless + 1);
return 0;
}
}

View File

@ -317,8 +317,9 @@ public void FixRelearn()
public byte HeightScalar { get => Data[0x48]; set => Data[0x48] = value; }
public byte WeightScalar { get => Data[0x49]; set => Data[0x49] = value; }
public byte Scale { get => Data[0x4A]; set => Data[0x4A] = value; }
public byte LevelBoost { get => Data[0x4B]; set => Data[0x4B] = value; }
// 0x4B-0x57 is unused. S/V used them for DLC TM Record Flags.
// 0x4C-0x57 is unused. S/V used them for DLC TM Record Flags.
#endregion
#region Block B
@ -679,9 +680,17 @@ private void SetMovePlusFlag1(bool value, int index)
}
public bool GetMovePlusFlagAny() => GetMovePlusFlagAny0() || GetMovePlusFlagAny1();
public bool GetMovePlusFlagAnyImpossible() => PlusFlags0 is not [.., 0, 0]
|| ((PlusFlags0[^3] & ~0x7F) != 0) // 17 bits unused
|| GetMovePlusFlagAny1(); // All bits unused
public bool GetMovePlusFlagAnyImpossible()
{
// 340 flags used of 360
var tail = PlusFlags1;
if (tail is not [.., 0, 0])
return true;
// 20 bits unused -- 2 bytes + 4 bits (high) unused
if ((tail[^3] & 0b11110000) != 0)
return true;
return false;
}
private bool GetMovePlusFlagAny0() => PlusFlags0.ContainsAnyExcept<byte>(0);
private bool GetMovePlusFlagAny1() => PlusFlags1.ContainsAnyExcept<byte>(0);

View File

@ -7,7 +7,7 @@
namespace PKHeX.Core;
/// <summary>
/// Retrieves localized form names for indicating <see cref="PKM.Form"/> values.
/// Retrieves localized form names for indicating <see cref="ISpeciesForm.Form"/> values.
/// </summary>
public static class FormConverter
{
@ -22,8 +22,6 @@ public static class FormConverter
/// <returns>A list of strings corresponding to the forms that a Pokémon can have.</returns>
public static string[] GetFormList(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, IReadOnlyList<string> genders, EntityContext context)
{
byte generation = context.Generation();
// Mega List
if (context.IsMegaContext() && IsFormListSingleMega(species, context))
return GetMegaSingle(types, forms);
@ -35,13 +33,13 @@ public static string[] GetFormList(ushort species, IReadOnlyList<string> types,
{
<= Legal.MaxSpeciesID_1 => GetFormsGen1(species, types, forms, context),
<= Legal.MaxSpeciesID_2 => GetFormsGen2(species, types, forms, context),
<= Legal.MaxSpeciesID_3 => GetFormsGen3(species, types, forms, generation),
<= Legal.MaxSpeciesID_4 => GetFormsGen4(species, types, forms, generation),
<= Legal.MaxSpeciesID_5 => GetFormsGen5(species, types, forms, generation),
<= Legal.MaxSpeciesID_3 => GetFormsGen3(species, types, forms, context),
<= Legal.MaxSpeciesID_4 => GetFormsGen4(species, types, forms, context),
<= Legal.MaxSpeciesID_5 => GetFormsGen5(species, types, forms, context),
<= Legal.MaxSpeciesID_6 => GetFormsGen6(species, types, forms, genders, context),
<= Legal.MaxSpeciesID_7_USUM => GetFormsGen7(species, types, forms, generation),
<= Legal.MaxSpeciesID_8a => GetFormsGen8(species, generation, types, forms, genders),
_ => GetFormsGen9(species, generation, types, forms, genders),
<= Legal.MaxSpeciesID_7_USUM => GetFormsGen7(species, types, forms, context),
<= Legal.MaxSpeciesID_8a => GetFormsGen8(species, context, types, forms, genders),
_ => GetFormsGen9(species, context, types, forms, genders),
};
}
@ -60,7 +58,6 @@ public static string[] GetFormList(ushort species, IReadOnlyList<string> types,
private static string[] GetFormsGen1(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, EntityContext context)
{
byte generation = context.Generation();
return (Species)species switch
{
Charizard or Mewtwo when context.IsMegaContext() => GetMegaXY(types, forms),
@ -70,11 +67,11 @@ private static string[] GetFormsGen1(ushort species, IReadOnlyList<string> types
Starter,
],
Pikachu => GetFormsPikachu(context, types, forms),
Slowbro when generation >= 8 => GetFormsGalarSlowbro(types, forms),
Slowbro when context.Generation() >= 8 => GetFormsGalarSlowbro(types, forms),
Weezing or Ponyta or Rapidash or Slowpoke or MrMime or Farfetchd or Articuno or Zapdos or Moltres when generation >= 8 => GetFormsGalar(types, forms),
Growlithe or Arcanine or Voltorb or Electrode when generation >= 8 => GetFormsHisui(species, generation, types, forms),
Tauros when generation >= 9 => GetFormsPaldea(species, types, forms),
Weezing or Ponyta or Rapidash or Slowpoke or MrMime or Farfetchd or Articuno or Zapdos or Moltres when context.Generation() >= 8 => GetFormsGalar(types, forms),
Growlithe or Arcanine or Voltorb or Electrode when context.Generation() >= 8 => GetFormsHisui(species, context, types, forms),
Tauros when context.Generation() >= 9 => GetFormsPaldea(species, types, forms),
_ => GetFormsAlolan(context, types, forms, species),
};
@ -82,30 +79,30 @@ private static string[] GetFormsGen1(ushort species, IReadOnlyList<string> types
private static string[] GetFormsGen2(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, EntityContext context)
{
byte generation = context.Generation();
return (Species)species switch
{
Pichu when context is Gen4 => GetFormsPichu(types, forms),
Slowking or Corsola when generation >= 8 => GetFormsGalar(types, forms),
Typhlosion or Qwilfish or Sneasel when generation >= 8 => GetFormsHisui(species, generation, types, forms),
Wooper when generation >= 9 => GetFormsPaldea(species, types, forms),
Unown => GetFormsUnown(generation),
Slowking or Corsola when context.Generation() >= 8 => GetFormsGalar(types, forms),
Typhlosion or Qwilfish or Sneasel when context.Generation() >= 8 => GetFormsHisui(species, context, types, forms),
Wooper when context.Generation() >= 9 => GetFormsPaldea(species, types, forms),
Unown => GetFormsUnown(context),
_ => EMPTY,
};
}
private static string[] GetFormsGen3(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, byte generation)
private static string[] GetFormsGen3(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, EntityContext context)
{
return (Species)species switch
{
Zigzagoon or Linoone when generation >= 8 => GetFormsGalar(types, forms),
Zigzagoon or Linoone when context.Generation() >= 8 => GetFormsGalar(types, forms),
Absol when context.IsMegaContext() => GetMegaZ(types, forms), // Single mega would return earlier
Castform => [
types[0], // Normal
forms[889], // Sunny
forms[890], // Rainy
forms[891], // Snowy
],
Kyogre or Groudon when generation < 8 => [
Kyogre or Groudon when context.IsMegaContext() => [
types[0], // Normal
forms[899], // Primal
],
@ -119,7 +116,7 @@ private static string[] GetFormsGen3(ushort species, IReadOnlyList<string> types
};
}
private static string[] GetFormsGen4(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, byte generation)
private static string[] GetFormsGen4(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, EntityContext context)
{
return (Species)species switch
{
@ -136,6 +133,7 @@ private static string[] GetFormsGen4(ushort species, IReadOnlyList<string> types
forms[(int)Shellos], // West
forms[911], // East
],
Garchomp or Lucario when context.IsMegaContext() => GetMegaZ(types, forms), // Single mega would return earlier
Rotom => [
types[0], // Normal
forms[917], // Heat
@ -144,7 +142,7 @@ private static string[] GetFormsGen4(ushort species, IReadOnlyList<string> types
forms[920], // Fan
forms[921], // Mow
],
Dialga or Palkia when generation >= 8 => [
Dialga or Palkia when context.Generation() >= 8 => [
types[0], // Normal
forms[922], // Origin
],
@ -156,17 +154,17 @@ private static string[] GetFormsGen4(ushort species, IReadOnlyList<string> types
forms[(int)Shaymin], // Land
forms[923], // Sky
],
Arceus => GetFormsArceus(species, generation, types, forms),
Arceus => GetFormsArceus(context, types, forms),
_ => EMPTY,
};
}
private static string[] GetFormsGen5(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, byte generation)
private static string[] GetFormsGen5(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, EntityContext context)
{
return (Species)species switch
{
Samurott or Lilligant or Zorua or Zoroark or Braviary when generation >= 8 => GetFormsHisui(species, generation, types, forms),
Basculin when generation >= 8 => [
Samurott or Lilligant or Zorua or Zoroark or Braviary when context.Generation() >= 8 => GetFormsHisui(species, context, types, forms),
Basculin when context.Generation() >= 8 => [
forms[(int)Basculin], // Red
forms[942], // Blue
forms[989], // White
@ -175,8 +173,8 @@ private static string[] GetFormsGen5(ushort species, IReadOnlyList<string> types
forms[(int)Basculin], // Red
forms[942], // Blue
],
Darumaka or Stunfisk or Yamask when generation >= 8 => GetFormsGalar(types, forms),
Darmanitan when generation >= 8 => [
Darumaka or Stunfisk or Yamask when context.Generation() >= 8 => GetFormsGalar(types, forms),
Darmanitan when context.Generation() >= 8 => [
forms[(int)Darmanitan], // Standard
forms[943], // Zen
forms[Galarian], // Standard
@ -222,10 +220,9 @@ private static string[] GetFormsGen5(ushort species, IReadOnlyList<string> types
private static string[] GetFormsGen6(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, IReadOnlyList<string> genders, EntityContext context)
{
var generation = context.Generation();
return (Species)species switch
{
Greninja => GetFormsGreninja(types, forms, new string[!context.IsMegaContext() ? 2 : generation >= 9 ? 4 : 3]),
Greninja => GetFormsGreninja(types, forms, new string[!context.IsMegaContext() ? 2 : context.Generation() >= 9 ? 4 : 3]),
Scatterbug or Spewpa or Vivillon => [
forms[(int)Vivillon], // Icy Snow
forms[963], // Polar
@ -255,7 +252,7 @@ private static string[] GetFormsGen6(ushort species, IReadOnlyList<string> types
forms[988], // Blue
forms[989], // White
],
Floette => GetFormsFloette(forms, new string[!context.IsMegaContext() ? 5 : generation >= 9 ? 7 : 6]),
Floette => GetFormsFloette(forms, new string[!context.IsMegaContext() ? 5 : context.Generation() >= 9 ? 7 : 6]),
Furfrou => [
forms[(int)Furfrou], // Natural
forms[995], // Heart
@ -268,6 +265,12 @@ private static string[] GetFormsGen6(ushort species, IReadOnlyList<string> types
forms[1002], // Kabuki
forms[1003], // Pharaoh
],
Meowstic when context.IsMegaContext() && context.Generation() >= 9 => [
genders[000], // Male
genders[001], // Female
$"{genders[000]}-{forms[Mega]}", // Mega (Male)
$"{genders[001]}-{forms[Mega]}", // Mega (Female)
],
Meowstic => [
genders[000], // Male
genders[001], // Female
@ -276,8 +279,8 @@ private static string[] GetFormsGen6(ushort species, IReadOnlyList<string> types
forms[(int)Aegislash], // Shield
forms[1005], // Blade
],
Sliggoo or Goodra or Avalugg when generation >= 8 => GetFormsHisui(species, generation, types, forms),
Pumpkaboo or Gourgeist when generation >= 9 => [
Sliggoo or Goodra or Avalugg when context.Generation() >= 8 => GetFormsHisui(species, context, types, forms),
Pumpkaboo or Gourgeist when context.Generation() >= 9 => [
forms[MediumVariety],
forms[SmallVariety],
forms[LargeVariety],
@ -289,11 +292,11 @@ private static string[] GetFormsGen6(ushort species, IReadOnlyList<string> types
forms[1007], // Large
forms[1008], // Super
],
Xerneas when generation < 9 => [
Xerneas when context.Generation() < 9 => [
forms[(int)Xerneas], // Neutral
forms[1012], // Active
],
Zygarde => GetFormsZygarde(forms, new string[context.IsMegaContext() && generation >= 9 ? 6 : 5]),
Zygarde => GetFormsZygarde(forms, new string[context.IsMegaContext() && context.Generation() >= 9 ? 6 : 5]),
Hoopa => [
forms[(int)Hoopa], // Confined
forms[1018], // Unbound
@ -302,11 +305,11 @@ private static string[] GetFormsGen6(ushort species, IReadOnlyList<string> types
};
}
private static string[] GetFormsGen7(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, byte generation)
private static string[] GetFormsGen7(ushort species, IReadOnlyList<string> types, IReadOnlyList<string> forms, EntityContext context)
{
return (Species)species switch
{
Decidueye when generation >= 8 => GetFormsHisui(species, generation, types, forms),
Decidueye when context.Generation() >= 8 => GetFormsHisui(species, context, types, forms),
Oricorio => [
forms[(int)Oricorio], // "RED" - Baile
forms[1021], // "YLW" - Pom-Pom
@ -326,7 +329,7 @@ private static string[] GetFormsGen7(ushort species, IReadOnlyList<string> types
forms[(int)Wishiwashi],
forms[1025], // School
],
Silvally => GetFormsArceus(species, 7, types, forms),
Silvally => GetFormsArceus(Gen7, types, forms),
Minior => [
forms[(int)Minior], // "R-Meteor", // Meteor Red
forms[1045], // "O-Meteor", // Meteor Orange
@ -347,7 +350,7 @@ private static string[] GetFormsGen7(ushort species, IReadOnlyList<string> types
forms[(int)Mimikyu], // Disguised
forms[1058], // Busted
],
Necrozma when generation == 7 => [
Necrozma when context is Gen7 => [
types[0], // Normal
forms[1065], // Dusk Mane
forms[1066], // Dawn Wings
@ -358,6 +361,12 @@ private static string[] GetFormsGen7(ushort species, IReadOnlyList<string> types
forms[1065], // Dusk Mane
forms[1066], // Dawn Wings
],
Magearna when context.IsMegaContext() && context.Generation() >= 9 => [
types[0],
forms[1062], // Original Color
$"{types[0]}-{forms[Mega]}", // Mega
$"{forms[1062]}-{forms[Mega]}", // Mega (Original Color)
],
Magearna => [
types[0],
forms[1062], // Original
@ -366,7 +375,7 @@ private static string[] GetFormsGen7(ushort species, IReadOnlyList<string> types
};
}
private static string[] GetFormsGen8(ushort species, byte generation, IReadOnlyList<string> types, IReadOnlyList<string> forms, IReadOnlyList<string> genders)
private static string[] GetFormsGen8(ushort species, EntityContext context, IReadOnlyList<string> types, IReadOnlyList<string> forms, IReadOnlyList<string> genders)
{
return (Species)species switch
{
@ -410,7 +419,7 @@ private static string[] GetFormsGen8(ushort species, byte generation, IReadOnlyL
forms[HeroOfManyBattles],
forms[Crowned],
],
Eternatus when generation == 8 => [
Eternatus when context.Generation() == 8 => [
types[0], // Normal
forms[Eternamax],
],
@ -427,11 +436,11 @@ private static string[] GetFormsGen8(ushort species, byte generation, IReadOnlyL
forms[IceRider],
forms[ShadowRider],
],
Kleavor when generation == 8 => [
Kleavor when context.Generation() == 8 => [
types[0],
forms[Lord],
],
Ursaluna when generation >= 9 => [
Ursaluna when context.Generation() >= 9 => [
types[0],
forms[Bloodmoon],
],
@ -443,7 +452,7 @@ private static string[] GetFormsGen8(ushort species, byte generation, IReadOnlyL
};
}
private static string[] GetFormsGen9(ushort species, byte generation, IReadOnlyList<string> types, IReadOnlyList<string> forms, IReadOnlyList<string> genders)
private static string[] GetFormsGen9(ushort species, EntityContext context, IReadOnlyList<string> types, IReadOnlyList<string> forms, IReadOnlyList<string> genders)
{
return (Species)species switch
{
@ -465,6 +474,14 @@ private static string[] GetFormsGen9(ushort species, byte generation, IReadOnlyL
forms[Zero],
forms[HeroPalafin],
],
Tatsugiri when context.IsMegaContext() => [
forms[Curly],
forms[Droopy],
forms[Stretchy],
$"{forms[Curly]}-{forms[Mega]}",
$"{forms[Droopy]}-{forms[Mega]}",
$"{forms[Stretchy]}-{forms[Mega]}",
],
Tatsugiri => [
forms[Curly],
forms[Droopy],
@ -533,6 +550,13 @@ private static string[] GetFormsAlolan(EntityContext context, IReadOnlyList<stri
forms[Galarian], // Galarian
],
Raichu when generation >= 9 && context.IsMegaContext() => [
types[0],
forms[Alolan], // Alolan
forms[MegaX], // Mega X
forms[MegaY], // Mega Y
],
// Only reached when Gen8+, as Totem logic picks up Gen7 earlier.
Rattata or Raticate
or Raichu
@ -553,10 +577,10 @@ or Exeggutor
private static string[] GetFormsPikachu(EntityContext context, IReadOnlyList<string> types, IReadOnlyList<string> forms)
{
byte generation = context.Generation();
return generation switch
return context switch
{
6 => [
< Gen6 => EMPTY,
Gen6 => [
types[0], // Normal
forms[729], // Rockstar
forms[730], // Belle
@ -565,7 +589,7 @@ private static string[] GetFormsPikachu(EntityContext context, IReadOnlyList<str
forms[733], // Libre
forms[734], // Cosplay
],
7 when context is Gen7b => [
Gen7b => [
types[0], // Normal
forms[813], // Original
forms[814], // Hoenn
@ -576,7 +600,7 @@ private static string[] GetFormsPikachu(EntityContext context, IReadOnlyList<str
forms[1063], // Partner
Starter,
],
7 => [
Gen7 => [
types[0], // Normal
forms[813], // Original
forms[814], // Hoenn
@ -586,7 +610,7 @@ private static string[] GetFormsPikachu(EntityContext context, IReadOnlyList<str
forms[818], // Alola
forms[1063], // Partner
],
8 or 9 => [
_ => [
types[0], // Normal
forms[813], // Original
forms[814], // Hoenn
@ -598,7 +622,6 @@ private static string[] GetFormsPikachu(EntityContext context, IReadOnlyList<str
Starter,
forms[1085], // World
],
_ => EMPTY,
};
}
@ -611,11 +634,11 @@ private static string[] GetFormsPichu(IReadOnlyList<string> types, IReadOnlyList
];
}
private static string[] GetFormsArceus(ushort species, byte generation, IReadOnlyList<string> types, IReadOnlyList<string> forms)
private static string[] GetFormsArceus(EntityContext context, IReadOnlyList<string> types, IReadOnlyList<string> forms)
{
return generation switch
return context switch
{
4 => [
Gen4 => [
types[00], // Normal
types[01], // Fighting
types[02], // Flying
@ -635,7 +658,7 @@ private static string[] GetFormsArceus(ushort species, byte generation, IReadOnl
types[15],
types[16], // No Fairy Type
],
5 => [
Gen5 => [
types[00], // Normal
types[01], // Fighting
types[02], // Flying
@ -654,7 +677,7 @@ private static string[] GetFormsArceus(ushort species, byte generation, IReadOnl
types[15],
types[16], // No Fairy type
],
8 when (Species)species is Arceus =>
Gen8a =>
[
types[00], // Normal
types[01], // Fighting
@ -721,9 +744,9 @@ private static string[] GetFormsArceus(ushort species, byte generation, IReadOnl
],
};
private static string[] GetFormsUnown(byte generation) => generation switch
private static string[] GetFormsUnown(EntityContext context) => context switch
{
2 =>
Gen2 =>
[
"A", "B", "C", "D", "E",
"F", "G", "H", "I", "J",
@ -744,15 +767,20 @@ private static string[] GetFormsArceus(ushort species, byte generation, IReadOnl
"!", "?",
],
};
private static bool IsFormListSingleMega(ushort species, EntityContext context)
{
if (context.Generation() >= 9 && species is (int)Slowbro) // Kanto, Mega, Galar
return false;
if (IsFormListSingleMega6(species))
if (context.Generation() < 9)
return IsFormListSingleMega6(species);
if (species is (int)Slowbro)
return false; // Galar, Mega
if (species is (int)Absol or (int)Garchomp or (int)Lucario)
return false; // Mega, Z Mega
if (IsFormListSingleMega9(species))
return true;
if (context.Generation() >= 9 && IsFormListSingleMega9(species))
return true;
return false;
return IsFormListSingleMega6(species);
}
private static bool IsFormListSingleMega6(ushort species) => (Species)species is
@ -767,6 +795,15 @@ private static bool IsFormListSingleMega(ushort species, EntityContext context)
;
private static bool IsFormListSingleMega9(ushort species) => (Species)species is
// XY
Venusaur or Blastoise or Alakazam or Gengar or Kangaskhan or Pinsir or Gyarados or Aerodactyl or Ampharos or Scizor or
Heracross or Houndoom or Tyranitar or Blaziken or Gardevoir or Mawile or Aggron or Medicham or Manectric or Banette or
/* Absol or */ Latias or Latios /* or Garchomp or Lucario */ or Abomasnow or
// AO
Beedrill or Pidgeot or Slowbro or Steelix or Sceptile or Swampert or Sableye or Sharpedo or Camerupt or Altaria or
Glalie or Salamence or Metagross or Rayquaza or Lopunny or Gallade or Audino or Diancie or
// ZA
Clefable or Victreebel or Starmie or Dragonite or
Meganium or Feraligatr or Skarmory or
@ -775,6 +812,13 @@ Froslass or
Chesnaught or Delphox or Pyroar or Malamar or Barbaracle or Dragalge or Hawlucha or
Drampa or
Falinks
// MD
or Chimecho
or Staraptor or Heatran or Darkrai
or Golurk
or Crabominable or Golisopod or Zeraora
or Scovillain or Glimmora or Baxcalibur
;
private static string[] GetMegaSingle(IReadOnlyList<string> types, IReadOnlyList<string> forms)
@ -796,6 +840,16 @@ private static string[] GetMegaXY(IReadOnlyList<string> types, IReadOnlyList<str
];
}
private static string[] GetMegaZ(IReadOnlyList<string> types, IReadOnlyList<string> forms)
{
return
[
types[0], // Normal
forms[Mega], // Mega
forms[MegaZ], // Mega Z
];
}
private static string[] GetFormsGalar(IReadOnlyList<string> types, IReadOnlyList<string> forms)
{
return
@ -805,9 +859,9 @@ private static string[] GetFormsGalar(IReadOnlyList<string> types, IReadOnlyList
];
}
private static string[] GetFormsHisui(ushort species, byte generation, IReadOnlyList<string> types, IReadOnlyList<string> forms) => generation switch
private static string[] GetFormsHisui(ushort species, EntityContext context, IReadOnlyList<string> types, IReadOnlyList<string> forms) => context switch
{
8 => (Species)species switch
Gen8a => (Species)species switch
{
Lilligant =>
[
@ -896,9 +950,22 @@ private static string[] GetFormsZygarde(IReadOnlyList<string> forms, string[] re
return result;
}
public static MegaFormNames GetMegaFormNames(ReadOnlySpan<string> forms) => new()
{
Regular = forms[Mega],
X = forms[MegaX],
Y = forms[MegaY],
Z = forms[MegaZ],
Tatsu0 = $"{forms[Curly]}-{forms[Mega]}",
Tatsu1 = $"{forms[Droopy]}-{forms[Mega]}",
Tatsu2 = $"{forms[Stretchy]}-{forms[Mega]}",
};
private const int Mega = 804;
private const int MegaX = 805;
private const int MegaY = 806;
private const int MegaZ = 1141;
private const int Alolan = 810;
@ -1061,3 +1128,15 @@ public static string GetStringFromForm(byte form, GameStrings strings, ushort sp
return result;
}
}
public sealed record MegaFormNames
{
public required string Regular { get; init; }
public required string X { get; init; }
public required string Y { get; init; }
public required string Z { get; init; }
public required string Tatsu0 { get; init; }
public required string Tatsu1 { get; init; }
public required string Tatsu2 { get; init; }
}

View File

@ -131,13 +131,20 @@ public void SetAllLearnTM(Span<bool> result)
404, 369, 417, 430, 164, 528, 231, 191, 390, 399,
174, 605, 200, 018, 269, 056, 377, 127, 118, 441,
527, 411, 526, 394, 059, 087, 370,
// ZA DLC
004, 263, 886,
047, 491, 490, 488, 885, 006, 318, 325, 466, 246,
259, 206, 305, 706, 102, 443, 138, 402, 509, 451,
409, 458, 299, 814, 530, 815, 480, 524, 207, 330,
252, 660, 799, 813, 013, 130, 161, 503, 333, 410,
080, 669, 143, 090, 329, 800, 796, 307, 308, 338,
];
public override int BaseEXP { get => ReadUInt16LittleEndian(Data[0x4C..]); set => WriteUInt16LittleEndian(Data[0x4C..], (ushort)value); }
public ushort AlphaMove { get => ReadUInt16LittleEndian(Data[0x4E..]); set => WriteUInt16LittleEndian(Data[0x4E..], value); }
public int PlusCountTotal => (33 + 12) * 8; // 360
public int PlusCountUsed => 247;
public int PlusCountUsed => 340; // as of Mega Dimension DLC 2.0.0
// Set by Seed of Mastery or Alpha Move granted
public static ReadOnlySpan<ushort> PlusMoves =>
@ -168,6 +175,16 @@ public void SetAllLearnTM(Span<bool> result)
611, 612, 613, 614, 615, 616, 617, 621, 670, 679,
687, 693, 710, 748, 784, 812, 920,
097, // lol
004, 006, 013, 047, 080, 090, 102, 130, 138,
143, 147, 155, 160, 161, 176, 206, 207, 246, 252,
259, 263, 295, 296, 299, 305, 307, 308, 318, 325,
329, 330, 333, 338, 402, 409, 410, 443, 451, 458,
463, 464, 466, 480, 488, 490, 491, 503, 509, 524,
530, 533, 546, 547, 548, 618, 619, 620, 659, 660,
665, 669, 705, 706, 708, 712, 721, 742, 753, 783,
786, 794, 796, 799, 800, 813, 814, 815, 830, 839,
854, 856, 858, 862, 864, 866, 874, 880, 885, 886,
889, 890, 891, 893,
];
public ReadOnlySpan<ushort> PlusMoveIndexes => PlusMoves;

View File

@ -2,7 +2,9 @@ Corni
Rioluis
Picanto
Fluffy
Smoothie
Échan
Bondo
Tranquillo
Panca
Panca
Trian

View File

@ -2,7 +2,9 @@ Bois
Riolouie
Spicy
Floffy
Alias
Tracie
Bond
Quille
Griddella
Griddella
Trian

View File

@ -2,7 +2,9 @@ Gastón
Riolito
Apetito
Pachoncito
Bisel
Lidia
Sandro
Plácido
Mónica
Mónica
Polifacio

View File

@ -2,7 +2,9 @@ Gastón
Riolito
Riquiño
Panqueque
Bisel
Camille
Ludovic
Plácido
Loli
Loli
Policarpo

View File

@ -2,7 +2,9 @@ Dyna
Ribébou
Piment
Raidoudou
Polissé
Odile
Marsaut
Kylian
Rozell
Rozell
Trian

View File

@ -2,7 +2,9 @@ Cornì
Rioletto
Spezia
Sofficio
Tondino
Echan
Balzac
Quilliam
Suzette
Suzette
Trian

View File

@ -2,7 +2,9 @@
リオぼう
スパイス
ふわふわ
なめらか
エシャン
ボンド
トランキー
クレープ
クレープ
トリアン

View File

@ -2,7 +2,9 @@
리오룽
스파이스
푹신이
매끈이
에스얀
본드
트랭키
크레이프
크레이프
트리앙

View File

@ -2,7 +2,9 @@
利欧宝
香料
飘绵绵
滑滑
娇环
斐岳
佑哉
可莉萍
可莉萍
多连安

View File

@ -2,7 +2,9 @@
利歐寶
香料
飄綿綿
滑滑
嬌環
斐岳
佑哉
可莉萍
可莉萍
多連安

View File

@ -2565,8 +2565,8 @@ Meganienit
Impergatornit
Panzaeronit
Frosdedjenit
Heatranit
Darkrainit
Flambirexonit
Stalobornit
Cerapendranit
@ -2584,7 +2584,7 @@ Tandraknit
Resladeronit
Zygardenit
Sen-Longnit
Zeraoranit
Legiosnit
Zimmerschlüssel 202
Illumina-Gigalette
@ -2599,19 +2599,19 @@ Signierter Anhänger
Gourmetmüll
Vitalzweig
Duros Tasche
Illumina-Butter
Superbutter
Hyperbutter
Ultrabutter
Meisterbutter
Dimensionsbutter
Hoenn-Steinsalz
Dunkelwürze
Olithena-Öl
Knisterbrause
Wichtiger Brief
Besonderer Ring
Dreckiger Schal
@ -2633,3 +2633,53 @@ Grüner Canary-Anhänger
Blauer Canary-Anhänger
Blauer Canary-Anhänger
Blauer Canary-Anhänger
Raichunit X
Raichunit Y
Palimpalimonit
Absolnit Z
Staraptornit
Knakracknit Z
Lucarionit Z
Golgantesnit
Psiaugonit
Krawellonit
Tectassnit
Magearnanit
Halupenjonit
Espinodonit
Nigiraginit
Lumifloranit
Dimensions-Amrenabeere
Dimensions-Maronbeere
Dimensions-Pirsifbeere
Dimensions-Fragiabeere
Dimensions-Wilbirbeere
Dimensions-Sinelbeere
Dimensions-Persimbeere
Dimensions-Prunusbeere
Dimensions-Tsitrubeere
Dimensions-Granabeere
Dimensions-Setangbeere
Dimensions-Qualotbeere
Dimensions-Honmelbeere
Dimensions-Labrusbeere
Dimensions-Tamotbeere
Dimensions-Koakobeere
Dimensions-Foepasbeere
Dimensions-Kerzalbeere
Dimensions-Grindobeere
Dimensions-Kiroyabeere
Dimensions-Rospelbeere
Dimensions-Grarzbeere
Dimensions-Schukebeere
Dimensions-Kobabeere
Dimensions-Pyapabeere
Dimensions-Tanigabeere
Dimensions-Chiaribeere
Dimensions-Zitarzbeere
Dimensions-Terirobeere
Dimensions-Burleobeere
Dimensions-Babiribeere
Dimensions-Latchibeere
Dimensions-Hibisbeere
Canary-Brot

View File

@ -2565,8 +2565,8 @@ Meganiumite
Feraligite
Skarmorite
Froslassite
Heatranite
Darkranite
Emboarite
Excadrite
Scolipite
@ -2584,7 +2584,7 @@ Dragalgite
Hawluchanite
Zygardite
Drampanite
Zeraorite
Falinksite
Key to Room 202
Super Lumiose Galette
@ -2599,19 +2599,19 @@ Autographed Plush
Tasty Trash
Revitalizing Twig
Lidas Things
Lumiosian Butter
Nice Butter
Great Butter
Amazing Butter
Supreme Butter
Hyperspace Butter
Hoennian Salt
Épice Noire
Arboliva Oil
Popping Candy
Important Letter
Cherished Ring
Dirty Scarf
@ -2632,4 +2632,54 @@ Green Canari Plush
Green Canari Plush
Blue Canari Plush
Blue Canari Plush
Blue Canari Plush
Blue Canari Plush
Raichunite X
Raichunite Y
Chimechite
Absolite Z
Staraptite
Garchompite Z
Lucarionite Z
Golurkite
Meowsticite
Crabominite
Golisopite
Magearnite
Scovillainite
Baxcalibrite
Tatsugirinite
Glimmoranite
Hyper Cheri Berry
Hyper Chesto Berry
Hyper Pecha Berry
Hyper Rawst Berry
Hyper Aspear Berry
Hyper Oran Berry
Hyper Persim Berry
Hyper Lum Berry
Hyper Sitrus Berry
Hyper Pomeg Berry
Hyper Kelpsy Berry
Hyper Qualot Berry
Hyper Hondew Berry
Hyper Grepa Berry
Hyper Tamato Berry
Hyper Occa Berry
Hyper Passho Berry
Hyper Wacan Berry
Hyper Rindo Berry
Hyper Yache Berry
Hyper Chople Berry
Hyper Kebia Berry
Hyper Shuca Berry
Hyper Coba Berry
Hyper Payapa Berry
Hyper Tanga Berry
Hyper Charti Berry
Hyper Kasib Berry
Hyper Haban Berry
Hyper Colbur Berry
Hyper Babiri Berry
Hyper Chilan Berry
Hyper Roseli Berry
Canari Bread

View File

@ -2565,8 +2565,8 @@ Meganiumita
Feraligatrita
Skarmorita
Froslassita
Heatranita
Darkrainita
Emboarita
Excadrillita
Scolipedita
@ -2584,7 +2584,7 @@ Dragalgita
Hawluchanita
Zygardita
Drampanita
Zeraoranita
Falinksita
Llave Habitación 202
Supergalette Luminalia
@ -2599,19 +2599,19 @@ Nariamuleto Autografiado
Basura Suculenta
Ramita Revitalizante
Cosas de Adira
Mantequilla de Luminalia
Supermantequilla
Hipermantequilla
Ultramantequilla
Mantequilla Máxima
Mantequilla D
Sal Gruesa de Hoenn
Especia Negra
Aceite de Arboliva
Caramelos Chispeantes
Carta Importante
Anillo Entrañable
Pañuelo Mugriento
@ -2632,4 +2632,54 @@ Nariamuleto Verde
Nariamuleto Verde
Nariamuleto Azul
Nariamuleto Azul
Nariamuleto Azul
Nariamuleto Azul
Raichunita X
Raichunita Y
Chimechita
Absolita Z
Staraptorita
Garchompita Z
Lucarita Z
Golurkita
Meowsticita
Crabominablita
Golisopodita
Magearnita
Scovillainita
Baxcaliburita
Tatsugirita
Glimmoranita
Baya Zreza D
Baya Atania D
Baya Duraz D
Baya Safre D
Baya Perasi D
Baya Aranja D
Baya Caquic D
Baya Ziuela D
Baya Citrón D
Baya Grana D
Baya Algama D
Baya Ispero D
Baya Meluce D
Baya Uvav D
Baya Tamate D
Baya Caoca D
Baya Pasio D
Baya Gualot D
Baya Tamar D
Baya Rimoya D
Baya Pomaro D
Baya Kebia D
Baya Acardo D
Baya Kouba D
Baya Payapa D
Baya Yecana D
Baya Alcho D
Baya Drasi D
Baya Anjiro D
Baya Dillo D
Baya Baribá D
Baya Chilan D
Baya Hibis D
Pan de Naria

View File

@ -2565,8 +2565,8 @@ Meganiumita
Feraligatrita
Skarmorita
Froslassita
Heatranita
Darkrainita
Emboarita
Excadrillita
Scolipedita
@ -2584,7 +2584,7 @@ Dragalgita
Hawluchanita
Zygardita
Drampanita
Zeraoranita
Falinksita
Llave Habitación 202
Supergalette Luminalia
@ -2599,19 +2599,19 @@ Amuleto de Naria Firmado
Basura Suculenta
Ramita Revitalizante
Enseres de Bárbara
Mantequilla de Luminalia
Supermantequilla
Hipermantequilla
Ultramantequilla
Mantequilla Máxima
Mantequilla D
Sal Gruesa de Hoenn
Especia Negra
Aceite de Arboliva
Caramelos Chispeantes
Carta Importante
Anillo Preciado
Pañuelo Mugriento
@ -2633,3 +2633,53 @@ Amuleto de Naria Verde
Amuleto de Naria Azul
Amuleto de Naria Azul
Amuleto de Naria Azul
Raichunita X
Raichunita Y
Chimechita
Absolita Z
Staraptorita
Garchompita Z
Lucarita Z
Golurkita
Meowsticita
Crabominablita
Golisopodita
Magearnita
Scovillainita
Baxcaliburita
Tatsugirita
Glimmoranita
Baya Zreza D
Baya Atania D
Baya Meloc D
Baya Safre D
Baya Perasi D
Baya Aranja D
Baya Caquic D
Baya Ziuela D
Baya Zidra D
Baya Grana D
Baya Algama D
Baya Ispero D
Baya Meluce D
Baya Uvav D
Baya Tamate D
Baya Caoca D
Baya Pasio D
Baya Gualot D
Baya Tamar D
Baya Rimoya D
Baya Pomaro D
Baya Kebia D
Baya Acardo D
Baya Kouba D
Baya Payapa D
Baya Yecana D
Baya Alcho D
Baya Drasi D
Baya Anjiro D
Baya Dillo D
Baya Baribá D
Baya Chilan D
Baya Hibis D
Pan de Naria

View File

@ -2565,8 +2565,8 @@ Méganiumite
Aligatueurite
Airmurite
Momartikite
Heatranite
Darkraïte
Roitiflamite
Minotaupite
Brutapodite
@ -2584,7 +2584,7 @@ Kravarekite
Brutalibrite
Zygardite
Draïeulite
Zeraorite
Hexadronite
Clé de la Chambre 202
Galette de Choc
@ -2599,19 +2599,19 @@ Naricâline Dédicacée
Déchets Alléchants
Rameau de Vie
Sacoche de Rudi
Beurre dIllumis
Super Beurre
Hyper Beurre
Ultra Beurre
Master Beurre
Extra Beurre
Gros Sel de Hoenn
Épice Noire
Huile dArboliva
Bonbon Zap-Zap
Lettre Importante
Bague Souvenirs
Mouchoir Sale
@ -2632,4 +2632,54 @@ Naricâline Verte
Naricâline Verte
Naricâline Bleue
Naricâline Bleue
Naricâline Bleue
Naricâline Bleue
Raichuïte X
Raichuïte Y
Éokite
Absolite Z
Étouraptorite
Carchacrokite Z
Lucarite Z
Golemastokite
Mistigrixite
Crabominablite
Sarmuraïte
Magearnite
Scovilainite
Glaivodite
Nigirigonite
Floréclatite
Extra Baie Ceriz
Extra Baie Maron
Extra Baie Pêcha
Extra Baie Fraive
Extra Baie Willia
Extra Baie Oran
Extra Baie Kika
Extra Baie Prine
Extra Baie Sitrus
Extra Baie Grena
Extra Baie Alga
Extra Baie Qualot
Extra Baie Lonme
Extra Baie Résin
Extra Baie Tamato
Extra Baie Chocco
Extra Baie Pocpoc
Extra Baie Parma
Extra Baie Ratam
Extra Baie Nanone
Extra Baie Pomroz
Extra Baie Kébia
Extra Baie Jouca
Extra Baie Cobaba
Extra Baie Yapap
Extra Baie Panga
Extra Baie Charti
Extra Baie Sédra
Extra Baie Fraigo
Extra Baie Lampou
Extra Baie Babiri
Extra Baie Zalis
Extra Baie Selro
Pain Narica

View File

@ -2565,8 +2565,8 @@ Meganiumite
Feraligatrite
Skarmorite
Froslassite
Heatranite
Darkraite
Emboarite
Excadrillite
Scolipedite
@ -2584,7 +2584,7 @@ Dragalgite
Hawluchite
Zygardite
Drampite
Zeraorite
Falinksite
Chiave stanza 202
Pan di Lumi speciale
@ -2599,19 +2599,19 @@ Peluche autografato
Rifiuti prelibati
Rametto energizzante
Sacca di Cerril
Burro di Luminopoli
Burro super
Burro mega
Burro ultra
Burro master
Burro dimensionale
Sale grosso di Hoenn
Nero di spezie
Olio dArboliva
Caramelle zipzap
Lettera importante
Anello prezioso
Sciarpa sporca
@ -2632,4 +2632,54 @@ Peluche di Canary verde
Peluche di Canary verde
Peluche di Canary blu
Peluche di Canary blu
Peluche di Canary blu
Peluche di Canary blu
Raichuite X
Raichuite Y
Chimechite
Absolite Z
Staraptorite
Garchompite Z
Lucarite Z
Golurkite
Meowsticite
Crabominablite
Golisopodite
Magearnite
Scovillainite
Baxcaliburite
Tatsugirite
Glimmorite
Baccaliegia dimensionale
Baccastagna dimensionale
Baccapesca dimensionale
Baccafrago dimensionale
Baccaperina dimensionale
Baccarancia dimensionale
Baccaki dimensionale
Baccaprugna dimensionale
Baccacedro dimensionale
Baccagrana dimensionale
Baccalga dimensionale
Baccaloquat dimensionale
Baccamelon dimensionale
Baccauva dimensionale
Baccamodoro dimensionale
Baccacao dimensionale
Baccapasflo dimensionale
Baccaparmen dimensionale
Baccarindo dimensionale
Baccamoya dimensionale
Baccarosmel dimensionale
Baccakebia dimensionale
Baccanaca dimensionale
Baccababa dimensionale
Baccapayapa dimensionale
Baccaitan dimensionale
Baccaciofo dimensionale
Baccacitrus dimensionale
Baccahaban dimensionale
Baccaxan dimensionale
Baccababiri dimensionale
Baccacinlan dimensionale
Baccarcadè dimensionale
Pan di Canary

View File

@ -2565,8 +2565,8 @@ Bステンレスボトル
オーダイルナイト
エアームドナイト
ユキメノコナイト
ヒードラナイト
ダークライナイト
エンブオナイト
ドリュウズナイト
ペンドラナイト
@ -2584,7 +2584,7 @@ Bステンレスボトル
ルチャブルナイト
ジガルデナイト
ジジーロナイト
ゼラオラナイト
タイレーツナイト
202ごうしつのカギ
すごいミアレガレット
@ -2599,19 +2599,19 @@ Bステンレスボトル
おいしいゴミ
げんきのこえだ
デウロのわすれもの
ミアレバター
スーパーバター
ハイパーバター
ウルトラバター
マスターバター
いじげんバター
ホウエンのあらじお
スパイスブラック
オリーヴァオイル
パチパチキャンディ
たいせつなてがみ
おもいでのゆびわ
よごれたスカーフ
@ -2632,4 +2632,54 @@ Bステンレスボトル
みどりのカナリィぬい
あおのカナリィぬい
あおのカナリィぬい
あおのカナリィぬい
あおのカナリィぬい
ライチュウナイトX
ライチュウナイトY
チリーンナイト
アブソルナイトZ
ムクホークナイト
ガブリアスナイトZ
ルカリオナイトZ
ゴルーグナイト
ニャオニクスナイト
ケケンカニナイト
グソクムシャナイト
マギアナイト
スコヴィラナイト
セグレイブナイト
シャリタツナイト
キラフロルナイト
いじげんクラボのみ
いじげんカゴのみ
いじげんモモンのみ
いじげんチーゴのみ
いじげんナナシのみ
いじげんオレンのみ
いじげんキーのみ
いじげんラムのみ
いじげんオボンのみ
いじげんザロクのみ
いじげんネコブのみ
いじげんタポルのみ
いじげんロメのみ
いじげんウブのみ
いじげんマトマのみ
いじげんオッカのみ
いじげんイトケのみ
いじげんソクノのみ
いじげんリンドのみ
いじげんヤチェのみ
いじげんヨプのみ
いじげんビアーのみ
いじげんシュカのみ
いじげんバコウのみ
いじげんウタンのみ
いじげんタンガのみ
いじげんヨロギのみ
いじげんカシブのみ
いじげんハバンのみ
いじげんナモのみ
いじげんリリバのみ
いじげんホズのみ
いじげんロゼルのみ
カナリィパン

View File

@ -2565,8 +2565,8 @@ B 스테인리스 보틀
장크로다일나이트
무장조나이트
눈여아나이트
히드런나이트
다크라이나이트
염무왕나이트
몰드류나이트
펜드라나이트
@ -2584,7 +2584,7 @@ B 스테인리스 보틀
루차불나이트
지가르데나이트
할비롱나이트
제라오라나이트
대여르나이트
202호실열쇠
대단한미르갈레트
@ -2599,19 +2599,19 @@ B 스테인리스 보틀
맛있는쓰레기
기력의잔가지
루디의 잊은물건
미르버터
슈퍼버터
하이퍼버터
울트라버터
마스터버터
이차원버터
호연산왕소금
스파이스블랙
올리르바오일
톡톡캔디
중요한편지
추억의반지
더러운스카프
@ -2632,4 +2632,54 @@ B 스테인리스 보틀
초록카나리인형
파랑카나리인형
파랑카나리인형
파랑카나리인형
파랑카나리인형
라이츄나이트X
라이츄나이트Y
치렁나이트
앱솔나이트Z
찌르호크나이트
한카리아스나이트Z
루카리오나이트Z
골루그나이트
냐오닉스나이트
모단단게나이트
갑주무사나이트
마기아나이트
스코빌런나이트
드닐레이브나이트
싸리용나이트
킬라플로르나이트
이차원 버치열매
이차원 유루열매
이차원 복슝열매
이차원 복분열매
이차원 배리열매
이차원 오랭열매
이차원 시몬열매
이차원 리샘열매
이차원 자뭉열매
이차원 유석열매
이차원 시마열매
이차원 파비열매
이차원 로매열매
이차원 또뽀열매
이차원 토망열매
이차원 오카열매
이차원 꼬시개열매
이차원 초나열매
이차원 린드열매
이차원 플카열매
이차원 로플열매
이차원 으름열매
이차원 슈캐열매
이차원 바코열매
이차원 야파열매
이차원 리체열매
이차원 루미열매
이차원 수불열매
이차원 하반열매
이차원 마코열매
이차원 바리비열매
이차원 카리열매
이차원 로셀열매
카나리빵

View File

@ -2565,8 +2565,8 @@
大力鳄进化石
盔甲鸟进化石
雪妖女进化石
席多蓝恩进化石
达克莱伊进化石
炎武王进化石
龙头地鼠进化石
蜈蚣王进化石
@ -2584,7 +2584,7 @@
摔角鹰人进化石
基格尔德进化石
老翁龙进化石
捷拉奥拉进化石
列阵兵进化石
202号客房的钥匙
厉害密阿雷格雷派饼
@ -2599,19 +2599,19 @@
美味垃圾
活力小树枝
玳萝的遗忘物
密阿雷黄油
超级黄油
高级黄油
究极黄油
大师黄油
异次元黄油
丰缘的粗盐
黑香料
奥利瓦油
噼里啪啦糖果
重要信件
纪念戒指
脏围巾
@ -2632,4 +2632,54 @@
绿色卡娜莉玩偶
蓝色卡娜莉玩偶
蓝色卡娜莉玩偶
蓝色卡娜莉玩偶
蓝色卡娜莉玩偶
雷丘进化石X
雷丘进化石Y
风铃铃进化石
阿勃梭鲁进化石Z
姆克鹰进化石
烈咬陆鲨进化石Z
路卡利欧进化石Z
泥偶巨人进化石
超能妙喵进化石
好胜毛蟹进化石
具甲武者进化石
玛机雅娜进化石
狠辣椒进化石
戟脊龙进化石
米立龙进化石
晶光花进化石
异次元樱子果
异次元零余果
异次元桃桃果
异次元莓莓果
异次元利木果
异次元橙橙果
异次元柿仔果
异次元木子果
异次元文柚果
异次元榴石果
异次元藻根果
异次元比巴果
异次元哈密果
异次元萄葡果
异次元茄番果
异次元巧可果
异次元千香果
异次元烛木果
异次元罗子果
异次元番荔果
异次元莲蒲果
异次元通通果
异次元腰木果
异次元棱瓜果
异次元福禄果
异次元扁樱果
异次元草蚕果
异次元佛柑果
异次元莓榴果
异次元刺耳果
异次元霹霹果
异次元灯浆果
异次元洛玫果
卡娜莉面包

View File

@ -233,4 +233,52 @@ Geschäftsgebäude
Illumina-Kunstmuseum
Bistro Flordelis
Labor von Flordelis
Kanalisation
Kanalisation
Zimmer 201
Zimmer 202
Zimmer 203
Zimmer 204
Dimensions-Illumina
Portal ins Dimensions-Illumina
Ort des Desasters
Stolze Jagdgründe
Sushi-Paradies
Sphäre des Hellsehers
Brodelndes Inferno
Neumondinsel der Alpträume
Urmeer
Endland
Großer Himmelturm

View File

@ -233,4 +233,52 @@ Old Building
Lumiose Museum
Lysandre Café
Lysandre Labs
The Sewers
The Sewers
Room 201
Room 202
Room 203
Room 204
Hyperspace Lumiose
Hyperspace Entry Point
Hyperspace Disaster Arena
Hyperspace Hunting Grounds
Hyperspace Sushi Paradise
Hyperspace Second-Sight Arena
Hyperspace Infernal Arena
Hyperspace Newmoon Nightmare
Hyperspace Primordial Sea
Hyperspace Desolate Land
Hyperspace Sky Pillar

View File

@ -233,4 +233,52 @@ Local vacante
Museo de Luminalia
Café Lysandre
Laboratorios Lysandre
Alcantarillas
Alcantarillas
Habitación 201
Habitación 202
Habitación 203
Habitación 204
Luminalia Dimensional
Portal
Territorio Catastrófico
Terreno de Caza Aislado
Buffet de Sushi
Zona de la Clarividencia
Averno Abrasador
Isla Lunanueva Tenebrosa
Mar del Albor
Tierra del Ocaso
Gran Pilar Celeste

View File

@ -233,4 +233,52 @@ Local vacante
Museo de Arte de Luminalia
Café Lysson
Laboratorios Lysson
Alcantarillas
Alcantarillas
Habitación 201
Habitación 202
Habitación 203
Habitación 204
Luminalia Dimensional
Portal
Paraje Catastrófico
Coto Aislado
Buffet de Sushi
Espacio de la Clarividencia
Averno Abrasador
Isla Lunanueva de Pesadilla
Mar del Albor
Tierra del Ocaso
Gran Pilar Celeste

View File

@ -233,4 +233,52 @@ Immeuble de bureaux
Musée dIllumis
Café Lysandre
Labos Lysandre
Égouts
Égouts
Chambre 201
Chambre 202
Chambre 203
Chambre 204
Extra Illumis
Portail daccès vers Extra Illumis
Zone du Désastre
Territoire du Chasseur Solitaire
Au Mât Cassé
Antre du Clairvoyant
Enfer Embrasé
Cauchemar de Nouvellune
Mer Primaire
Terre Finale
Pilier des Cieux

View File

@ -233,4 +233,52 @@ Edificio commerciale
Museo di Luminopoli
Caffè Elisio
Laboratori Elisio
Acquedotto
Acquedotto
Stanza 201
Stanza 202
Stanza 203
Stanza 204
Luminopoli dimensionale
Varco dingresso dimensionale
Luogo della catastrofe (Luminopoli dimensionale)
Terra di caccia solitaria (Luminopoli dimensionale)
Sushi-bar satollo (Luminopoli dimensionale)
Sala del veggente (Luminopoli dimensionale)
Inferno di fiamme (Luminopoli dimensionale)
Incubo dellIsola Lunanuova (Luminopoli dimensionale)
Mare primordiale (Luminopoli dimensionale)
Terra estrema (Luminopoli dimensionale)
Pilastro dei cieli (Luminopoli dimensionale)

View File

@ -233,4 +233,52 @@ AXION 4
ミアレ美術館
フラダリカフェ
フラダリラボ
地下水道
地下水道
201号室
202号室
203号室
204号室
異次元ミアレ
異次元入口
異次元ミアレ 災いの場所
異次元ミアレ 孤高の狩場
異次元ミアレ 満腹寿司屋
異次元ミアレ 千里眼の間
異次元ミアレ 火炎地獄
異次元ミアレ 悪夢の新月島
異次元ミアレ 始まりの海
異次元ミアレ 終わりの大地
異次元ミアレ 大空の柱

View File

@ -233,4 +233,52 @@ SUBATOMIC 4
미르 미술관
플라드리 카페
플라드리 래버러토리
지하 수도
지하 수도
201호실
202호실
203호실
204호실
이차원 미르
이차원 입구
이차원 미르 재난의 장소
이차원 미르 고고한 사냥터
이차원 미르 배부른 초밥집
이차원 미르 천리안의 공간
이차원 미르 화염지옥
이차원 미르 악몽의 신월섬
이차원 미르 시작의 바다
이차원 미르 끝의 대지
이차원 미르 창공의 기둥

View File

@ -233,4 +233,52 @@ SUBATOMIC 4
密阿雷美术馆
弗拉达利咖啡店
弗拉达利研究所
下水道
下水道
201号客房
202号客房
203号客房
204号客房
异次元密阿雷
异次元入口
异次元密阿雷:灾祸之地
异次元密阿雷:孤高狩猎场
异次元密阿雷:饱足寿司店
异次元密阿雷:千里眼之域
异次元密阿雷:火焰地狱
异次元密阿雷:噩梦新月岛
异次元密阿雷:始源之海
异次元密阿雷:终结之地
异次元密阿雷:长空之柱

View File

@ -233,4 +233,52 @@ SUBATOMIC 4
密阿雷美術館
弗拉達利咖啡店
弗拉達利研究所
下水道
下水道
201號客房
202號客房
203號客房
204號客房
異次元密阿雷
異次元入口
異次元密阿雷:災禍之地
異次元密阿雷:孤高狩獵場
異次元密阿雷:飽足壽司店
異次元密阿雷:千里眼之域
異次元密阿雷:火焰地獄
異次元密阿雷:惡夢新月島
異次元密阿雷:始源之海
異次元密阿雷:終結之地
異次元密阿雷:長空之柱

View File

@ -30,4 +30,7 @@ Wildsektor 11
Illumina-Kunstmuseum
Académie Étoile
Rose-Bezirk 2
Nordring
Nordring
Rouge-Bezirk 1
Dimensions-Illumina
Quazar Corporation

View File

@ -30,4 +30,7 @@ Wild Zone 11
the Lumiose Museum
Académie Étoile
Magenta Sector 2
North Boulevard
North Boulevard
Rouge Sector 1
Hyperspace Lumiose
Quasartico Inc.

View File

@ -30,4 +30,7 @@ Zona salvaje 11
Museo de Luminalia
Escuela Andrómeda
Distrito Rosa: sector 2
Bulevar Norte
Bulevar Norte
Distrito Rojo: sector 1
Luminalia Dimensional
Quastelar S. A.

View File

@ -30,4 +30,7 @@ Zona salvaje 11
Museo de Arte de Luminalia
Escuela Perseida
Distrito Rosa: sector 2
Bulevar Norte
Bulevar Norte
Distrito Rojo: sector 1
Luminalia Dimensional
Quastelar S. A.

View File

@ -30,4 +30,7 @@ Zone sauvage nº 11
Musée dIllumis
Institut Nivers
2ᵉ arrondissement de Rosavilliers
Rue Septentrionale
Rue Septentrionale
1ᵉʳ arrondissement de Maurouge
Extra Illumis
Société Quazar

View File

@ -30,4 +30,7 @@ zona selvaggia 11
Museo di Luminopoli
Istituto Étoile
2º isolato del Quartiere Rosa
Corso Alto
Corso Alto
1º isolato del Quartiere Rosso
Luminopoli dimensionale
Q-asar Inc.

View File

@ -30,4 +30,7 @@ Pokémon HOME
ミアレ美術館
エトワール校
ローズ2番地
ノースサイドストリート
ノースサイドストリート
ルージュ1番地
異次元ミアレ
クエーサー社

View File

@ -30,4 +30,7 @@ Pokémon HOME
미르 미술관
에투알 스쿨
로즈 2번지
노스사이드 스트리트
노스사이드 스트리트
루주 1번지
이차원 미르
퀘이사 주식회사

View File

@ -30,4 +30,7 @@ Pokémon HOME
密阿雷美术馆
艾特瓦鲁学校
蓉粉2号街区
北侧大道
北侧大道
榴红1号街区
异次元密阿雷
阔星公司

View File

@ -30,4 +30,7 @@ Pokémon HOME
密阿雷美術館
艾特瓦魯學校
蓉粉2號街區
北側大道
北側大道
榴紅1號街區
異次元密阿雷
闊星公司

View File

@ -1138,4 +1138,5 @@ Stellar
Mittelgroße
Kleine
Große
Extragroße
Extragroße
Mega Z

View File

@ -1138,4 +1138,5 @@ Stellar
Medium
Small
Large
Jumbo
Jumbo
Mega Z

View File

@ -1138,4 +1138,5 @@ Astral
Mediana
Pequeña
Grande
Enorme
Enorme
Mega Z

View File

@ -1138,4 +1138,5 @@ Astral
Mediana
Pequeña
Grande
Enorme
Enorme
Mega Z

View File

@ -1138,4 +1138,5 @@ Stellaire
Moyenne
Petite
Grande
Giga
Giga
Méga Z

View File

@ -1138,4 +1138,5 @@ Astrale
Media
Piccola
Grande
Gigante
Gigante
Mega Z

View File

@ -1138,4 +1138,5 @@
ちゅうだましゅ
こだましゅ
おおだましゅ
ギガだましゅ
ギガだましゅ
メガ

View File

@ -1138,4 +1138,5 @@
중과종
소과종
대과종
특대과종
특대과종
메가 Z

View File

@ -1138,4 +1138,5 @@
中颗种
小颗种
大颗种
巨颗种
巨颗种
超级

View File

@ -1138,4 +1138,5 @@ Mega蒂安希
中顆種
小顆種
大顆種
巨顆種
巨顆種
Mega

View File

@ -63,6 +63,7 @@ public sealed class SaveBlockAccessor9ZA(SAV9ZA sav) : SCBlockAccessor
public const uint KBoxWallpapers = 0x2EB1B190; // Box Wallpapers
public const uint KMoney = 0x4F35D0DD; // u32
public const uint KCurrentBox = 0x017C3CBB; // U32 Box Index
public const uint KSaveRevision = 0x0926555A; // u64 revision
private const uint KCoordinates = 0x910D381F; // Player Coordinates/Rotation
private const uint KInfiniteRoyale = 0x8929BFB6; // object
private const uint KConfig = 0xAC6DD22F; // u64 object

View File

@ -14,7 +14,6 @@ private SAV9ZA(IReadOnlyList<SCBlock> blocks) : base(Memory<byte>.Empty)
{
AllBlocks = blocks;
Blocks = new SaveBlockAccessor9ZA(this);
SaveRevision = 0;
Initialize();
}
@ -22,7 +21,7 @@ public SAV9ZA()
{
AllBlocks = BlankBlocks9a.GetBlankBlocks();
Blocks = new SaveBlockAccessor9ZA(this);
SaveRevision = 0;
SaveRevision = BlankBlocks9a.BlankRevision;
Initialize();
ClearBoxes();
}
@ -38,11 +37,17 @@ public override void CopyChangesFrom(SaveFile sav)
State.Edited = true;
}
public int SaveRevision { get; }
public int SaveRevision
{
get => (int)GetValue<ulong>(SaveBlockAccessor9ZA.KSaveRevision);
private init => SetValue(SaveBlockAccessor9ZA.KSaveRevision, (ulong)value);
}
public string SaveRevisionString => SaveRevision switch
{
0 => "-Base", // Vanilla
1 => "-MD", // Mega Dimension
_ => throw new ArgumentOutOfRangeException(nameof(SaveRevision)),
};
@ -104,14 +109,17 @@ private void Initialize()
int rev = SaveRevision;
if (rev == 0)
{
m_move = Legal.MaxMoveID_9a;
m_spec = Legal.MaxSpeciesID_9a;
m_item = Legal.MaxItemID_9a;
m_abil = Legal.MaxAbilityID_9a;
m_move = Legal.MaxMoveID_9a_IK;
m_spec = Legal.MaxSpeciesID_9a_IK;
m_item = Legal.MaxItemID_9a_IK;
m_abil = Legal.MaxAbilityID_9a_IK;
}
else
{
throw new ArgumentOutOfRangeException(nameof(SaveRevision));
m_move = Legal.MaxMoveID_9a_MD;
m_spec = Legal.MaxSpeciesID_9a_MD;
m_item = Legal.MaxItemID_9a_MD;
m_abil = Legal.MaxAbilityID_9a_MD;
}
}

View File

@ -7,7 +7,7 @@ namespace PKHeX.Core;
/// </summary>
public static class BlankBlocks9a
{
public const byte BlankRevision = 0; // Latest
public const byte BlankRevision = 1;
/// <summary>
/// Creates a blank <see cref="SCBlock"/> array for <see cref="GameVersion.ZA"/>
@ -16,46 +16,51 @@ public static class BlankBlocks9a
private static ReadOnlySpan<uint> DefaultChunkSizes =>
[
0x006ABFB7, 0x00004, 0x017C3CBB, 0x00001, 0x03913534, 0x04000, 0x041137D8, 0x00004,
0x05773961, 0x00004, 0x08638763, 0x00640, 0x08B59D02, 0x00004, 0x08D4C4DC, 0x00008,
0x0926555A, 0x00008, 0x0AABCD8F, 0x00200, 0x0B758BF5, 0x00090, 0x0D49F01C, 0x00008,
0x0D66012C, 0x5FA00, 0x0F0A6814, 0x00004, 0x0FED62EB, 0x00020, 0x10789EC8, 0x00004,
0x10B0677E, 0x00140, 0x11796819, 0x04000, 0x1354939F, 0x000F0, 0x150F04DB, 0x00900,
0x1522C79C, 0x00008, 0x1720A5E0, 0x00400, 0x1866780C, 0x000E4, 0x18A80B0E, 0x08000,
0x19722C89, 0x00440, 0x19FC5B7B, 0x00004, 0x1C140AA0, 0x00004, 0x1C91B58A, 0x00008,
0x1CDCD72D, 0x00020, 0x1D7EE369, 0x00004, 0x20487806, 0x00044, 0x21BB87D5, 0x00018,
0x21C9BD44, 0x0BC00, 0x23FF8209, 0x00002, 0x2482AD60, 0x3A980, 0x267FB825, 0x00040,
0x293B1722, 0x01C20, 0x2A07F494, 0x00300, 0x2A192063, 0x00C00, 0x2C2C6964, 0x00400,
0x2C5A822A, 0x00008, 0x2D87BE5C, 0x27068, 0x2EB1B190, 0x00020, 0x31379AF7, 0x00028,
0x324F26DD, 0x05DC0, 0x33395EDE, 0x05A00, 0x33F30168, 0x00008, 0x33F39467, 0x00048,
0x34597EF7, 0x00008, 0x356087AD, 0x02000, 0x385BD589, 0x00004, 0x3AA1A9AD, 0x00B40,
0x40CC5A21, 0x00002, 0x41D869BD, 0x00004, 0x48064544, 0x2E2D8, 0x4856C1F4, 0x00200,
0x4B5C1B96, 0x08000, 0x4BF1E19C, 0x00008, 0x4C26C29B, 0x05DC0, 0x4DCB6EBC, 0x0A5A0,
0x4F35D0DD, 0x00004, 0x502EA6C8, 0x00640, 0x53106AFC, 0x00200, 0x53FD0223, 0x46500,
0x550EC7E1, 0x00040, 0x580634CD, 0x00004, 0x58505C5E, 0x08000, 0x5CD6F27B, 0x00004,
0x5D2A4162, 0x00004, 0x5E8E1711, 0x28488, 0x6019F261, 0x015E0, 0x605EBC30, 0x00001,
0x618477B1, 0x00008, 0x6249C002, 0x00020, 0x64235B3D, 0x00068, 0x649123E2, 0x000CC,
0x654FCD1E, 0x0D400, 0x698521C7, 0x00008, 0x6AC77BA1, 0x00068, 0x6BE9A4DA, 0x00008,
0x6C585058, 0x00008, 0x6CF6C183, 0x0001D, 0x6F11121F, 0x00080, 0x703B681A, 0x00008,
0x70CDE2DF, 0x00004, 0x711A8242, 0x00008, 0x71392A77, 0x2E2D8, 0x7147C953, 0x27100,
0x71825204, 0x00001, 0x718B8CB1, 0x00800, 0x7211D868, 0x00100, 0x72A45DD7, 0x00004,
0x7378188A, 0x00020, 0x79ABCB0B, 0x75300, 0x7B70DA66, 0x00004, 0x7C008151, 0x00004,
0x7C858F12, 0x00008, 0x7C896A83, 0x02000, 0x7D78DBBB, 0x00050, 0x7DC11835, 0x05000,
0x812FC3E3, 0x00048, 0x82EEA400, 0x00100, 0x835F3F37, 0x00004, 0x85DBDCE9, 0x0000C,
0x8881D333, 0x00008, 0x8929BFB6, 0x00018, 0x89816ADE, 0x20000, 0x8C71870A, 0x00004,
0x8D80EC0F, 0x00400, 0x8E466865, 0x000F0, 0x910D381F, 0x00070, 0x916BCA9E, 0x00158,
0x92EA5F2C, 0x00030, 0x954C8BAB, 0x00C80, 0x9590D3F0, 0x00008, 0x9A730DE1, 0x00004,
0x9AD85DFD, 0x00004, 0x9D48303D, 0x00200, 0x9EA30E65, 0x00008, 0x9FEC35B4, 0x00008,
0xA1EDE127, 0x00008, 0xA9BF43AF, 0x00200, 0xAB54C91A, 0x00180, 0xAC6DD22F, 0x00008,
0xAF2165F0, 0x03000, 0xB25E7EE5, 0x00400, 0xB654DB77, 0x0028C, 0xB7BA6680, 0x00001,
0xB9B223B9, 0x04000, 0xB9DBD20C, 0x00008, 0xBAEF1BD4, 0x002B2, 0xBEC26CD5, 0x08D20,
0xBF60CD09, 0x00004, 0xC074374C, 0x00008, 0xC7409C89, 0x00004, 0xC81B476B, 0x00008,
0xC9541EB3, 0x00002, 0xCB883AEE, 0x00004, 0xCE3AF8F2, 0x00008, 0xD1A3FF7B, 0x15180,
0xD1C4A383, 0x00008, 0xD4BCE690, 0x09600, 0xDACF515D, 0x000A0, 0xDD90CEEC, 0x00190,
0xDE67CD9D, 0x00080, 0xE2CC4DC7, 0x00004, 0xE3AFBE89, 0x00020, 0xE3E89BD1, 0x00078,
0xE9A56AA6, 0x00008, 0xE9DC8427, 0x00100, 0xEA8121EB, 0x00001, 0xED6F46E7, 0x08000,
0xEDAFF794, 0x0000C, 0xF1397E13, 0x08000, 0xF286ADA4, 0x00004, 0xF3A8569D, 0x01360,
0xF428AFF2, 0x00200, 0xF4439BD4, 0x00960, 0xFA089054, 0x00960, 0xFADA7742, 0x01000,
0xFC08F055, 0x00040,
0x006ABFB7, 0x00004, 0x017C3CBB, 0x00001, 0x0235471C, 0x00004, 0x027296CD, 0x00808,
0x03913534, 0x04000, 0x041137D8, 0x00004, 0x05773961, 0x00004, 0x08638763, 0x00640,
0x08B59D02, 0x00004, 0x08D4C4DC, 0x00008, 0x0926555A, 0x00008, 0x0AABCD8F, 0x00200,
0x0B758BF5, 0x00090, 0x0D49F01C, 0x00008, 0x0D66012C, 0x5FA00, 0x0F0A6814, 0x00004,
0x0FED62EB, 0x00020, 0x10789EC8, 0x00004, 0x10B0677E, 0x00140, 0x11796819, 0x04000,
0x1354939F, 0x000F0, 0x150F04DB, 0x00900, 0x1522C79C, 0x00008, 0x1720A5E0, 0x00400,
0x1866780C, 0x000E4, 0x18A80B0E, 0x08000, 0x19722C89, 0x00440, 0x19FC5B7B, 0x00004,
0x1B5C8189, 0x00008, 0x1C140AA0, 0x00004, 0x1C91B58A, 0x00008, 0x1CDCD72D, 0x00020,
0x1D7EE369, 0x00004, 0x20487806, 0x00044, 0x21BB87D5, 0x00018, 0x21C9BD44, 0x0BC00,
0x23FF8209, 0x00002, 0x2482AD60, 0x3A980, 0x25335B2A, 0x00048, 0x267FB825, 0x00040,
0x293B1722, 0x01C20, 0x2A07F494, 0x00300, 0x2A192063, 0x00C00, 0x2A9871E9, 0x00001,
0x2C2C6964, 0x00400, 0x2C5A822A, 0x00008, 0x2D87BE5C, 0x27068, 0x2EB1B190, 0x00020,
0x2EDF4180, 0x01800, 0x31379AF7, 0x00028, 0x324F26DD, 0x05DC0, 0x33395EDE, 0x05A00,
0x33F30168, 0x00008, 0x33F39467, 0x00048, 0x34597EF7, 0x00008, 0x356087AD, 0x02000,
0x385BD589, 0x00004, 0x3AA1A9AD, 0x00B40, 0x406B7EED, 0x00004, 0x40CC5A21, 0x00002,
0x41D869BD, 0x00004, 0x48064544, 0x2E2D8, 0x4856C1F4, 0x00200, 0x4B5C1B96, 0x08000,
0x4B62954E, 0x000C8, 0x4BF1E19C, 0x00008, 0x4C26C29B, 0x05DC0, 0x4DCB6EBC, 0x0A5A0,
0x4F314909, 0x00014, 0x4F35D0DD, 0x00004, 0x502EA6C8, 0x00640, 0x53106AFC, 0x00200,
0x53FD0223, 0x46500, 0x550EC7E1, 0x00040, 0x580634CD, 0x00004, 0x58505C5E, 0x08000,
0x5CD6F27B, 0x00004, 0x5D2A4162, 0x00004, 0x5E8E1711, 0x28488, 0x6019F261, 0x015E0,
0x605EBC30, 0x00001, 0x618477B1, 0x00008, 0x6249C002, 0x00020, 0x64235B3D, 0x00068,
0x649123E2, 0x000CC, 0x654FCD1E, 0x0D400, 0x698521C7, 0x00008, 0x6AC77BA1, 0x00068,
0x6BE9A4DA, 0x00008, 0x6C585058, 0x00008, 0x6CF6C183, 0x0001D, 0x6F11121F, 0x00080,
0x703B681A, 0x00008, 0x70CDE2DF, 0x00004, 0x711A8242, 0x00008, 0x71392A77, 0x2E2D8,
0x7147C953, 0x27100, 0x71825204, 0x00001, 0x718B8CB1, 0x00800, 0x7211D868, 0x00100,
0x72A45DD7, 0x00004, 0x7378188A, 0x00020, 0x79ABCB0B, 0x75300, 0x7B70DA66, 0x00004,
0x7C008151, 0x00004, 0x7C858F12, 0x00008, 0x7C896A83, 0x02000, 0x7D78DBBB, 0x00050,
0x7DC11835, 0x05000, 0x812FC3E3, 0x00048, 0x82EEA400, 0x00100, 0x835F3F37, 0x00004,
0x84D0F3CA, 0x00008, 0x85DBDCE9, 0x0000C, 0x8881D333, 0x00008, 0x8929BFB6, 0x00018,
0x89816ADE, 0x20000, 0x8C71870A, 0x00004, 0x8D80EC0F, 0x00400, 0x8E466865, 0x000F0,
0x910D381F, 0x00070, 0x916BCA9E, 0x00158, 0x92EA5F2C, 0x00030, 0x954C8BAB, 0x00C80,
0x9590D3F0, 0x00008, 0x9854CBC7, 0x00800, 0x9A730DE1, 0x00004, 0x9AD85DFD, 0x00004,
0x9D48303D, 0x00200, 0x9D74BB52, 0x00008, 0x9E14BFFB, 0x028B8, 0x9EA30E65, 0x00008,
0x9FEC35B4, 0x00008, 0xA1EDE127, 0x00008, 0xA2C00646, 0x000A8, 0xA9BF43AF, 0x00200,
0xAB54C91A, 0x00180, 0xAC6DD22F, 0x00008, 0xAF2165F0, 0x03000, 0xB1451E63, 0x00004,
0xB25E7EE5, 0x00400, 0xB654DB77, 0x0028C, 0xB7BA6680, 0x00001, 0xB9B223B9, 0x04000,
0xB9DBD20C, 0x00008, 0xBAEF1BD4, 0x002B2, 0xBCCE00D6, 0x00026, 0xBE007476, 0x118F8,
0xBEC26CD5, 0x08D20, 0xBF60CD09, 0x00004, 0xC074374C, 0x00008, 0xC5FDF49B, 0x00008,
0xC7409C89, 0x00004, 0xC81B476B, 0x00008, 0xC8976FAA, 0x00004, 0xC9541EB3, 0x00002,
0xCB883AEE, 0x00004, 0xCE3AF8F2, 0x00008, 0xD035ED5E, 0x00080, 0xD1A3FF7B, 0x15180,
0xD1C4A383, 0x00008, 0xD4BCE690, 0x09600, 0xD4DDC4F8, 0x00010, 0xDACF515D, 0x000A0,
0xDD90CEEC, 0x00190, 0xDE67CD9D, 0x00080, 0xE2CC4DC7, 0x00004, 0xE3AFBE89, 0x00028,
0xE3E89BD1, 0x00078, 0xE9A56AA6, 0x00008, 0xE9DC8427, 0x00100, 0xE9E6CDBA, 0x00008,
0xEA8121EB, 0x00001, 0xED6F46E7, 0x08000, 0xEDAFF794, 0x0000C, 0xF1397E13, 0x08000,
0xF286ADA4, 0x00004, 0xF3A8569D, 0x01360, 0xF428AFF2, 0x00200, 0xF4439BD4, 0x00960,
0xFA089054, 0x00960, 0xFADA7742, 0x01000, 0xFC08F055, 0x00040,
];
}

View File

@ -151,7 +151,7 @@ public DisplayGender9a GetDisplayGender(Gender gender, ushort species, byte form
}
// Gender differences?
if (BiGender.Contains(species))
if (BiGender.Contains(species) || BiGenderDLC.Contains(species))
return gender == Gender.Male ? DisplayGender9a.Male : DisplayGender9a.Female;
return DisplayGender9a.GenderedNoDifference;
}
@ -159,6 +159,7 @@ public DisplayGender9a GetDisplayGender(Gender gender, ushort species, byte form
/// <summary>
/// Species with gender differences in the dex.
/// </summary>
/// <remarks>Unique models to display</remarks>
private static ReadOnlySpan<ushort> BiGender =>
[
003, 025, 026, 064, 065, 123, 129, 130, 133,
@ -169,6 +170,20 @@ public DisplayGender9a GetDisplayGender(Gender gender, ushort species, byte form
668, // Pyroar
];
private static ReadOnlySpan<ushort> BiGenderDLC =>
[
(int)Species.Zubat,
(int)Species.Golbat, // no Crobat
(int)Species.Torchic,
(int)Species.Combusken,
(int)Species.Blaziken,
(int)Species.Starly,
(int)Species.Staravia,
(int)Species.Staraptor,
];
public void SetDisplayGender(Gender gender, ushort species, byte form)
{
DisplayGender = GetDisplayGender(gender, species, form);

View File

@ -0,0 +1,73 @@
namespace PKHeX.Core;
public static class TechnicalMachine9a
{
public static readonly (string FieldItem, ushort ItemID, (float X, float Y, float Z) Point)[] TechnicalMachines =
[
("itb_a0102_134", 328, (-668.78064f, 0.003661115f,-786.5982f)), // TM001 t1
("itb_a0402_98", 329, (-598.0553f, 13.174822f,-287.42545f)), // TM002 t1
("itb_a0401_97", 332, (-387.8171f, 20.788715f,-299.42838f)), // TM005 t1
("itb_a0402_93", 333, (-548.05615f, 17.956745f,-309.41443f)), // TM007 t1
("itb_a0102_106", 400, (-628.5779f, 0.17770624f,-877.47003f)), // TM008 t1
("itb_a0301_104", 336, (-203.56674f, 19.54758f,-578.75195f)), // TM009 t1
("itb_a0302_107", 358, (-242.89536f, 2.5021734f,-288.7877f)), // TM010 t1
("itb_a0201_04", 371, (-413.6917f, -0.63286465f,-812.2086f)), // TM013 t1
("itb_a0301_72", 692, (-126.87326f, 21.763037f,-591.8911f)), // TM018 t1
("itb_a0102_132", 348, (-589.59576f, 14.404035f,-846.56836f)), // TM019 t1
("itb_a0403_01", 367, (-474.7154f, 26.323023f,-262.3075f)), // TM022 t1
("itd_d02_09", 354, (-0.22722217f, -0.14778668f,-227.65642f)),// TM025 t3
("itb_a0201_84", 380, (-390.05823f, 14.896092f,-893.6906f)), // TM026 t1
("itb_a0103_02", 397, (-645.02545f, -0.04693967f,-687.2036f)), // TM027 t1
("itb_a0102_125", 362, (-553.793f, 9.140966f,-765.46625f)), // TM033 t1
("itb_a0202_79", 386, (-139.0708f, 23.921827f,-676.4186f)), // TM034 t1
("itb_a0501_106", 2166,(-727.915f, 25.065262f,-354.03f)), // TM035 t1
("itb_a0503_01", 366, (-725.98834f, 11.949879f,-418.04816f)), // TM036 t1
("itb_a0301_103", 2160,(-78.887596f, 26.310556f,-494.585f)), // TM037 t1
("itb_a0301_19", 369, (-66.5289f, 0.1400345f,-478.4983f)), // TM039 t1
("itb_a0202_07", 370, (-404.98746f, 13.583943f,-656.57623f)), // TM040 t1
("itb_a0502_11", 390, (-905.83636f, 22.09935f,-593.2861f)), // TM041 t1
("itb_a0501_105", 342, (-745.1518f, 7.9030557f,-251.46582f)), // TM044 t1
("itb_a0102_133", 381, (-564.167f, 15.68258f,-634.10364f)), // TM049 t1
("itb_a0501_11", 383, (-805.57544f, 21.37394f,-166.47404f)), // TM052 t1
("itb_a0601_11", 385, (-476.4867f, 0.42864984f,-481.21725f)), // TM054 t1
("itb_a0201_82", 387, (-478.0298f, 18.44303f,-743.7157f)), // TM056 t1
("itb_a0201_83", 372, (-442.49258f, 17.34272f,-925.71234f)), // TM058 t1
("itb_a0101_21", 389, (-785.04614f, 19.495068f,-787.48315f)), // TM062 t1
("itb_a0502_80", 356, (-853.27094f, -0.5143876f,-569.87335f)), // TM063 t1
("itb_a0302_13", 398, (-215.81284f, 8.283916f,-191.6045f)), // TM065 t1
("itb_a0401_94", 404, (-475.05746f, 19.873632f,-47.76264f)), // TM071 t1
("itb_a0402_14", 405, (-567.85974f, 0.10609335f,-157.4825f)), // TM072 t1
("itb_a0101_108", 357, (-786.8892f, 17.097988f,-751.10626f)), // TM074 t1
("itb_a0202_105", 374, (-316.60748f, 24.58596f,-616.53375f)), // TM075 t1
("itb_a0203_03", 410, (-377.62292f, 0.18011375f,-659.8689f)), // TM076 t1
("itb_a0501_02", 384, (-820.16254f, 5.383784f,-266.6281f)), // TM079 t1
("itb_a0101_109", 414, (-848.59955f, 13.002884f,-790.4249f)), // TM080 t1
("itb_a0401_61", 396, (-388.79446f, 0.14138407f,-52.917423f)), // TM081 t1
("itb_a0502_99", 618, (-704.1312f, 21.50592f,-522.5093f)), // TM086 t1
("itb_a0402_94", 690, (-574.86664f, 22.051146f,-181.31502f)), // TM089 t1
("itd_d01_01_16", 691, (-67.99764f, 0.005415537f,52.998158f)), // TM090 t2
("itb_a0303_03", 693, (-279.5345f, 0.29320198f,-428.36847f)), // TM092 t1
("itd_d02_02_05", 2163,(-83.20368f, 3.0284998f,-90.00267f)), // TM095 t3_2
("itd_d02_13", 368, (-104.26371f, -0.1468494f,-129.4581f)), // TM098 t3
("itb_a0102_116", 415, (-592.1722f, 22.07336f,-927.0465f)), // TM103 t1
];
/// <summary>
/// Utility function to set all overworld Technical Machines to collected or uncollected state.
/// </summary>
public static int SetAllTechnicalMachines(SAV9ZA sav, bool collected = false)
{
int ctr = 0;
foreach (var item in TechnicalMachines)
{
var hash = FnvHash.HashFnv1a_64(item.FieldItem);
var index = sav.Blocks.FieldItems.GetIndex(hash);
if (index == -1)
continue; // Shouldn't happen. All TMs should be populated in a save file, except if it's a DLC TM (not applicable).
sav.Blocks.FieldItems.SetValue(index, collected);
sav.Items.SetItemQuantity(item.ItemID, collected ? 1 : 0);
ctr++;
}
return ctr;
}
}

View File

@ -39,7 +39,7 @@ private void Register(PKM pk, ushort species, byte form)
entry.SetIsFormCaught(form, true);
if (FormInfo.IsMegaForm(species, form))
entry.SetIsSeenMega(0, true);
if (IsMegaFormXY(species))
if (IsMegaFormXY(species, SAV.SaveRevision))
entry.SetIsSeenMega(1, true);
entry.SetLanguageFlag(pk.Language, true);
@ -69,7 +69,7 @@ private void Register(PKM pk, ushort species, byte form)
}
/// <summary>
/// Fetches extra alternate form flags for all forms it can shift between, for Shiny entities.
/// Fetches extra alternate form flags for all forms it can shift between, for regular entities.
/// </summary>
public static bool GetFormExtraFlags(ushort species, out uint value)
{
@ -79,8 +79,12 @@ public static bool GetFormExtraFlags(ushort species, out uint value)
(int)Species.Aegislash => 3, // both forms
// Returning in DLC
(int)Species.Rotom => 0x3F, // all 5+1 forms
(int)Species.Meloetta => 3, // both forms
(int)Species.Genesect => 0x1F, // all 4+1 forms
(int)Species.Mimikyu => 3, // both forms
(int)Species.Morpeko => 3, // both forms
(int)Species.Hoopa => 3, // both forms
// Not present in game, but left in code from prior games.
//(int)Species.Minior => 0, // handled separately (sets both core and meteor forms for the color) (((1u << 7) | 1u) << (form % 7))
@ -97,7 +101,7 @@ public static bool GetFormExtraFlags(ushort species, out uint value)
/// <summary>
/// Fetches extra alternate form flags for all forms it can shift between, for Shiny entities.
/// </summary>
public static bool GetFormExtraFlagsShinySeen(ushort species, byte form, out uint value)
public bool GetFormExtraFlagsShinySeen(ushort species, byte form, out uint value)
{
value = species switch
{
@ -107,28 +111,81 @@ public static bool GetFormExtraFlagsShinySeen(ushort species, byte form, out uin
(int)Species.Spewpa or (int)Species.Scatterbug => 0xF_FFFF, // all 20 forms of Vivillon. Not for Vivillon!
// Returning in DLC
(int)Species.Rotom => 0x3F, // all 5+1 forms
(int)Species.Meloetta => 3, // both forms
(int)Species.Genesect => 0x1F, // all 4+1 forms
(int)Species.Mimikyu => 3, // both forms
(int)Species.Morpeko => 3, // both forms
(int)Species.Hoopa => 3, // both forms
(int)Species.Tatsugiri => form switch
{
0 => 8,
1 => 16,
2 => 32,
_ => 0,
}, // Mega
(int)Species.Magearna => form switch
{
1 => 8u,
0 => 4u,
_ => 0u,
}, // Mega
// Mega Forms
(int)Species.Zygarde => 0b11_1111, // all forms (normally sets 31, but Mega adds another flag)
(int)Species.Greninja when form != 2 => 0b1011, // Mega and Ash/Normal forms (normally sets 3, but Mega adds another flag)
(int)Species.Floette when form == 5 => 0b10_0000, // Mega (not form 1)
// New Megas (Absol, Lucario, Meowstic, Magearna, Tatsugiri) will need handling in DLC updates.
_ when IsMegaFormXY(species) => 0b_0011, // Two mega forms
_ when FormInfo.HasMegaForm(species) => 0b_0001, // One mega form
_ => 0,
_ => GetFallbackBits(species),
};
return value != 0;
}
public static bool IsMegaFormXY(ushort species) => species switch
private uint GetFallbackBits(ushort species)
{
if (SAV.SaveRevision is not 0) // DLC released
return GetFallbackBitsDLC(species);
return GetFallbackBitsBase(species);
}
private static uint GetFallbackBitsDLC(ushort species) => species switch
{
(int)Species.Absol or (int)Species.Lucario or (int)Species.Garchomp
=> 0b_0110, // Mega + Z Mega
(int)Species.Meowstic => 0b_0100, // Mega only (M,F,Mega)
(int)Species.Raichu => 0b_1100, // X and Y forms (Base,Alolan,X,Y)
// What about others? Slowbro?
_ => GetFallbackBitsBase(species),
};
private static uint GetFallbackBitsBase(ushort species)
{
if (IsMegaFormXY(species, 0))
return 0b_0110; // Two mega forms (Base,Mega X,Mega Y)
if (FormInfo.HasMegaForm(species))
return 0b_0010; // One mega form (Base,Mega)
return 0;
}
public static bool IsMegaFormXY(ushort species, int revision) => species switch
{
(int)Species.Raichu when revision is not 0 => true,
(int)Species.Charizard => true,
(int)Species.Mewtwo => true,
_ => false,
};
public static bool IsMegaFormZA(ushort species, int revision) => revision is not 0 && species switch
{
(int)Species.Absol => true,
(int)Species.Lucario => true,
(int)Species.Garchomp => true,
_ => false,
};
public override void SeenNone()
{
Data.Clear();
@ -161,8 +218,10 @@ private void SeenAll(ushort species, PersonalInfo9ZA pi, bool value = true, bool
entry.SetIsSeenAlpha(value);
if (FormInfo.IsMegaForm(species, form))
entry.SetIsSeenMega(0, value);
if (IsMegaFormXY(species))
if (IsMegaFormXY(species, SAV.SaveRevision) || IsMegaFormZA(species, SAV.SaveRevision))
entry.SetIsSeenMega(1, value);
else if (species is (int)Species.Tatsugiri or (int)Species.Magearna)
entry.SetIsSeenMega(form, value);
if (value)
{

View File

@ -295,8 +295,14 @@ private int GetSuggestedItemCount(ITrainerInfo sav, int item, int requestVal = 1
return 1;
if (sav is SAV9SV)
return InventoryPouch9.GetSuggestedCount(Type, item, requestVal);
if (sav is SAV9ZA za && item is ColorfulScrew9a.ColorfulScrewItemIndex)
return (int)za.Items.GetItemQuantity(ColorfulScrew9a.ColorfulScrewItemIndex); // Don't modify screw count
if (sav is SAV9ZA za)
{
if (item is ColorfulScrew9a.ColorfulScrewItemIndex)
return (int)za.Items.GetItemQuantity(ColorfulScrew9a.ColorfulScrewItemIndex); // Don't modify screw count
if (item is 2612) // Cherished Ring (quest item, never possessed)
return 0;
}
return Math.Min(MaxCount, requestVal);
}

View File

@ -14,8 +14,9 @@ namespace PKHeX.Core;
/// </summary>
public static class SaveUtil
{
private const int SIZE_G9ZA_Min = 0x2F3284;
private const int SIZE_G9ZA_Max = 0x2F3289;
private const int SIZE_G9ZA_100 = 0x2F3284;
private const int SIZE_G9ZA_102 = 0x2F3289; // +5 for Ranked bug fix boolean block
private const int SIZE_G9ZA_200 = 0x309FA6; // Mega Dimension DLC
private const int SIZE_G9_0 = 0x31626F; // 1.0.0 fresh
private const int SIZE_G9_0a = 0x31627C; // 1.0.0 after multiplayer
@ -120,7 +121,7 @@ public static class SaveUtil
new SaveHandlerNSO(),
];
private static bool IsSizeGen9ZA(int length) => length is (>= SIZE_G9ZA_Min) and (<= SIZE_G9ZA_Max);
private static bool IsSizeGen9ZA(int length) => length is SIZE_G9ZA_100 or SIZE_G9ZA_102 or SIZE_G9ZA_200;
private static bool IsSizeGen9SV(int length) => length is
SIZE_G9_0 or SIZE_G9_0a or

File diff suppressed because it is too large Load Diff

View File

@ -17827,4 +17827,274 @@
<data name="_ball9" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\ball\_ball9.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_998_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_998-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_26_2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_26-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_26_3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_26-3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_358_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_358-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_359_2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_359-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_398_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_398-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_445_2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_445-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_448_2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_448-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_485_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_485-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_491_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_491-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_623_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_623-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_678_2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_678-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_740_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_740-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_768_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_768-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_801_2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_801-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_801_3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_801-3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_807_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_807-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_952_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_952-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_970_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_970-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_978_3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_978-3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_978_4" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_978-4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_978_5" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_978-5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_116" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_116.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2684" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2684.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2683" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2683.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2682" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2682.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2681" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2681.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2680" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2680.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2679" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2679.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2678" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2678.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2677" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2677.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2676" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2676.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2675" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2675.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2674" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2674.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2673" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2673.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2672" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2672.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2671" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2671.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2670" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2670.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2669" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2669.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2668" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2668.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2667" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2667.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2666" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2666.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2665" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2665.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2664" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2664.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2663" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2663.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2662" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2662.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2661" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2661.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2660" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2660.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2659" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2659.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2658" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2658.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2657" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2657.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2656" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2656.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2655" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2655.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2654" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2654.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2653" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2653.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2652" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2652.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2651" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2651.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2650" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2650.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2649" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2649.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2648" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2648.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2647" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2647.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2646" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2646.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2645" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2645.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2644" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2644.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2643" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2643.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2642" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2642.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2641" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2641.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2640" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2640.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2639" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2639.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2638" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2638.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2637" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2637.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2636" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2636.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2635" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2635.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2586" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2586.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2568" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2568.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_2567" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_2567.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_1691" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_1691.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_753" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_753.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_752" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_752.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_685" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_685.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_684" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_684.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_664" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_664.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_535" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_535.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_534" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_534.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_259" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_259.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_258" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_258.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_119" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_119.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_118" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_118.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aitem_117" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Items\aitem_117.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="a_678_3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\Artwork Pokemon Sprites\a_678-3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show More