Add support for Indigo Disk (#4111)

This commit is contained in:
Kurt 2023-12-17 16:41:15 -08:00 committed by GitHub
parent 4f56aa27f7
commit 01c82e472e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
308 changed files with 6286 additions and 2564 deletions

View file

@ -24,7 +24,7 @@ PKHeX erwartet entschlüsselte Spielstände. Da diese konsolenspezifisch verschl
## Screenshots
![Main Window](https://i.imgur.com/37SMQSr.png)
![Main Window](https://i.imgur.com/7ErmRJI.png)
## Erstellen

View file

@ -24,7 +24,7 @@ PKHeX espera archivos de guardado que no estén cifrados con las claves específ
## Capturas de Pantalla
![Pantalla principal](https://i.imgur.com/gREbXFH.png)
![Pantalla principal](https://i.imgur.com/oM407mV.png)
## Building

View file

@ -23,7 +23,7 @@ PKHeX attend des fichiers de sauvegarde qui ne sont pas chiffrés avec des clés
## Captures d'écran
![Main Window](https://i.imgur.com/fk6IX2a.png)
![Main Window](https://i.imgur.com/YEdBzlt.png)
## Construction

View file

@ -24,7 +24,7 @@ PKHeX si aspetta file di salvataggio non criptati con le chiavi specifiche della
## Screenshots
![Main Window](https://i.imgur.com/epXOQ5M.png)
![Main Window](https://i.imgur.com/ICmQ41m.png)
## Building

View file

@ -24,7 +24,7 @@ PKHeX 所读取存档文件必须是未经主机唯一密钥加密,因此请
## 截图
![主介面](https://i.imgur.com/hM8GJ4U.png)
![主介面](https://i.imgur.com/SfskT2Q.png)
## 构建

View file

@ -24,7 +24,7 @@ PKHeX 所讀取檔案須未經主機唯一密鑰加密,因而請使用儲存
## 螢幕擷取截圖
![主介面](https://i.imgur.com/U5FKBIF.png)
![主介面](https://i.imgur.com/zEGGuJC.png)
## 構建

View file

@ -66,6 +66,11 @@ public static class HiddenPower
return SixBitType[(int)hp];
}
/// <summary>
/// Count of unique Hidden Power Types
/// </summary>
public const int TypeCount = 16;
private static ReadOnlySpan<byte> SixBitType =>
[
// (low-bit mash) * 15 / 63

View file

@ -222,12 +222,17 @@ public static partial class Extensions
var afterBox = sav.GetBoxOffset(BoxLayout9.BoxCount);
var list = new List<SlotInfoMisc>
{
// Ride Legend
new(sav.BoxInfo.Data.AsMemory(afterBox), 0, true, Mutable: true) { Type = StorageSlotType.Party },
};
var block = sav.Blocks.GetBlock(SaveBlockAccessor9SV.KFusedCalyrex);
var c = new SlotInfoMisc(block.Data, 3, 0, true) { Type = StorageSlotType.Fused };
list.Add(c);
list.Add(new(block.Data, 0, 0, true) { Type = StorageSlotType.Fused });
if (sav.Blocks.TryGetBlock(SaveBlockAccessor9SV.KFusedKyurem, out var kyurem))
list.Add(new(kyurem.Data, 1, 0, true) { Type = StorageSlotType.Fused });
if (sav.Blocks.TryGetBlock(SaveBlockAccessor9SV.KFusedNecrozma, out var necrozma))
list.Add(new(necrozma.Data, 2, 0, true) { Type = StorageSlotType.Fused });
return list;
}
}

View file

@ -309,7 +309,11 @@ public sealed class ShowdownSet : IBattleTemplate
var types = Strings.types;
var val = StringUtil.FindIndexIgnoreCase(types, value);
if (val < 0)
return false;
{
if (value is not "Stellar")
return false;
val = TeraTypeUtil.Stellar;
}
TeraType = (MoveType)val;
return true;
}
@ -369,8 +373,14 @@ public sealed class ShowdownSet : IBattleTemplate
// Secondary Stats
if ((uint)Ability < Strings.Ability.Count)
result.Add($"Ability: {Strings.Ability[Ability]}");
if (Context == EntityContext.Gen9 && TeraType != MoveType.Any && (uint)TeraType < Strings.Types.Count)
result.Add($"Tera Type: {Strings.Types[(int)TeraType]}");
if (Context == EntityContext.Gen9 && TeraType != MoveType.Any)
{
if ((uint)TeraType <= (int)MoveType.Fairy)
result.Add($"Tera Type: {Strings.Types[(int)TeraType]}");
else if ((uint)TeraType == TeraTypeUtil.Stellar)
result.Add($"Tera Type: {Strings.Types[TeraTypeUtil.StellarTypeDisplayStringIndex]}");
}
if (Level != 100)
result.Add($"Level: {Level}");
if (Shiny)
@ -703,7 +713,8 @@ public sealed class ShowdownSet : IBattleTemplate
// Defined Hidden Power
var type = GetHiddenPowerType(moveString[(hiddenPowerName.Length + 1)..]);
int hpVal = StringUtil.FindIndexIgnoreCase(Strings.types.AsSpan(1, 16), type); // Get HP Type
var types = Strings.types.AsSpan(1, HiddenPower.TypeCount);
int hpVal = StringUtil.FindIndexIgnoreCase(types, type); // Get HP Type
if (hpVal == -1)
return hiddenPowerName;

View file

@ -312,5 +312,9 @@ public enum Ability : ushort
EmbodyAspect3,
ToxicChain,
SupersweetSyrup,
TeraShift,
TeraShell,
TeraformZero,
PoisonPuppeteer,
MAX_COUNT,
}

View file

@ -910,5 +910,20 @@ public enum Move : ushort
MatchaGotcha,
SyrupBomb,
IvyCudgel,
ElectroShot,
TeraStarstorm,
FickleBeam,
BurningBulwark,
Thunderclap,
MightyCleave,
TachyonCutter,
HardPress,
DragonCheer,
AlluringVoice,
TemperFlare,
SupercellSlam,
PsychicNoise,
UpperHand,
MalignantChain,
MAX_COUNT,
}

View file

@ -1023,5 +1023,13 @@ public enum Species : ushort
Munkidori,
Fezandipiti,
Ogerpon,
Archaludon,
Hydrapple,
GougingFire,
RagingBolt,
IronBoulder,
IronCrown,
Terapagos,
Pecharunt,
MAX_COUNT,
}

View file

@ -613,6 +613,9 @@ public sealed class GameStrings : IBasicStrings
m[164] += " (1)"; // Kitakami Wilds
m[167] += " (2)"; // Kitakami Wilds
m[196] += " (1)"; // Area Zero Underdepths
m[198] += " (2)"; // Area Zero Underdepths
set.Met3[1] += $" ({NPC})"; // Anything from an NPC
set.Met3[2] += $" ({EggName})"; // Egg From Link Trade
for (int i = 3; i <= 6; i++) // distinguish first set of regions (unused) from second (used)

View file

@ -169,8 +169,8 @@ public static class Locations
public static bool IsMetLocation7SM(ushort z) => z < 200; // Outer Cape
public static bool IsMetLocation7USUM(ushort z) => z < 234; // Dividing Peak Tunnel
public static bool IsMetLocation7GG(ushort z) => z <= 54; // Pokémon League
public static bool IsMetLocation8SWSH(ushort z) => z <= 246; // at the Crown Tundra Station
public static bool IsMetLocation8SWSH(ushort z) => z <= 246; // Crown Tundra Station
public static bool IsMetLocation8BDSP(ushort z) => z <= 657; // Ramanas Park (Genome Room)
public static bool IsMetLocation8LA(ushort z) => z <= 155; // Training Grounds
public static bool IsMetLocation9SV(ushort z) => z <= 131; // Uva Academy
public static bool IsMetLocation9SV(ushort z) => z <= 200; // Terarium (Entry Tunnel)
}

View file

@ -7,13 +7,23 @@ internal static class Locations9
/// <summary>
/// Checks if the location is accessible in Paldea (without DLC).
/// </summary>
public static bool IsAccessiblePreDLC(ushort location) => !IsKitakami(location);
public static bool IsAccessiblePreDLC(ushort location) => location <= 131;
/// <summary>
/// Checks if the location is accessible in Kitakami.
/// </summary>
public static bool IsKitakami(ushort location) => location is (>= 132 and <= 170);
/// <summary>
/// Checks if the location is accessible in Blueberry Academy.
/// </summary>
public static bool IsBlueberry(ushort location) => location is (>= 172 and <= 194);
/// <summary>
/// Checks if the location is accessible in Blueberry Academy.
/// </summary>
public static bool IsPaldeaDLC(ushort location) => location is 196 or 198; // Area Zero Underdepths
public static ReadOnlySpan<byte> Met0 =>
[
002, 004, 006, 008,
@ -36,7 +46,10 @@ internal static class Locations9
130, 131, 132, 134, 136, 138,
140, 142, 144, 146, 148, 150,
152, 154, 156, 158, 160, 162,
164, 166, 168, 170,
164, 166, 168, 170, 172, 174,
176, 178, 180, 182, 184, 186,
188, 190, 192, 194, 196, 198,
200,
];
public static ReadOnlySpan<ushort> Met3 =>

View file

@ -47,7 +47,7 @@ public static class HeldItemLumpUtil
9 when item is (>= 0328 and <= 0419) // TM01-TM92
or (>= 0618 and <= 0620) // TM093-TM095
or (>= 0690 and <= 0693) // TM096-TM099
or (>= 2160 and <= 2261) /* TM100-TM201 */ => HeldItemLumpImage.TechnicalMachine,
or (>= 2160 and <= 2289) /* TM100-TM229 */ => HeldItemLumpImage.TechnicalMachine,
_ => HeldItemLumpImage.NotLump,
};
}

View file

@ -40,27 +40,29 @@ public sealed class ItemStorage9SV : IItemStorage
0045, 0046, 0047, 0048, 0049, 0050, 0051, 0052, 0053, 0080,
0081, 0082, 0083, 0084, 0085, 0107, 0108, 0109, 0110, 0111,
0112, 0135, 0136, 0213, 0214, 0217, 0218, 0219, 0220, 0221,
0222, 0223, 0224, 0228, 0229, 0230, 0231, 0232, 0233, 0234,
0236, 0237, 0238, 0239, 0240, 0241, 0242, 0243, 0244, 0245,
0246, 0247, 0248, 0249, 0250, 0251, 0253, 0265, 0266, 0267,
0268, 0269, 0270, 0271, 0272, 0273, 0275, 0276, 0277, 0278,
0279, 0280, 0281, 0282, 0283, 0284, 0285, 0286, 0287, 0288,
0289, 0290, 0291, 0292, 0293, 0294, 0295, 0296, 0297, 0298,
0299, 0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307, 0308,
0309, 0310, 0311, 0312, 0313, 0325, 0326, 0327, 0485, 0486,
0487, 0488, 0489, 0490, 0491, 0537, 0538, 0539, 0540, 0541,
0542, 0543, 0544, 0545, 0546, 0547, 0564, 0565, 0566, 0567,
0568, 0569, 0570, 0639, 0640, 0644, 0645, 0648, 0649, 0650,
0795, 0796, 0846, 0849, 0853, 0854, 0855, 0856, 0879, 0880,
0881, 0882, 0883, 0884, 1103, 1104, 1116, 1117, 1118, 1119,
1120, 1121, 1122, 1123, 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,
1253, 1254, 1582, 1592, 1606, 1777, 1778, 1779, 1861, 1862,
1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872,
1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882,
1883, 1884, 1885, 1886, 2344, 2345, 2401, 2402, 2403, 2404,
2406, 2407, 2408, 2411, 2412, 2413, 2414, 2415, 2416, 2479,
0222, 0223, 0224, 0225, 0228, 0229, 0230, 0231, 0232, 0233,
0234, 0235, 0236, 0237, 0238, 0239, 0240, 0241, 0242, 0243,
0244, 0245, 0246, 0247, 0248, 0249, 0250, 0251, 0252, 0253,
0265, 0266, 0267, 0268, 0269, 0270, 0271, 0272, 0273, 0275,
0276, 0277, 0278, 0279, 0280, 0281, 0282, 0283, 0284, 0285,
0286, 0287, 0288, 0289, 0290, 0291, 0292, 0293, 0294, 0295,
0296, 0297, 0298, 0299, 0300, 0301, 0302, 0303, 0304, 0305,
0306, 0307, 0308, 0309, 0310, 0311, 0312, 0313, 0321, 0322,
0323, 0324, 0325, 0326, 0327, 0485, 0486, 0487, 0488, 0489,
0490, 0491, 0537, 0538, 0539, 0540, 0541, 0542, 0543, 0544,
0545, 0546, 0547, 0564, 0565, 0566, 0567, 0568, 0569, 0570,
0639, 0640, 0644, 0645, 0648, 0649, 0650, 0795, 0796, 0846,
0849, 0853, 0854, 0855, 0856, 0879, 0880, 0881, 0882, 0883,
0884, 1103, 1104, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 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, 1253, 1254, 1581, 1582, 1592, 1606,
1777, 1778, 1779, 1861, 1862, 1863, 1864, 1865, 1866, 1867,
1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877,
1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 2344,
2345, 2401, 2402, 2403, 2404, 2406, 2407, 2408, 2411, 2412,
2413, 2414, 2415, 2416, 2479, 2482, 2549,
];
private static ReadOnlySpan<ushort> Pouch_TM_SV =>
@ -85,7 +87,9 @@ public sealed class ItemStorage9SV : IItemStorage
2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239,
2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249,
2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259,
2260, 2261,
2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269,
2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279,
2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289,
];
private static ReadOnlySpan<ushort> Pouch_Treasure_SV =>
@ -112,14 +116,18 @@ public sealed class ItemStorage9SV : IItemStorage
2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398,
2399, 2400, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424,
2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434,
2435, 2436, 2437,
2435, 2436, 2437, 2548, 2551, 2552,
];
private static ReadOnlySpan<ushort> Pouch_Event_SV =>
[
0078, 0466, 0631, 0632, 0638, 0703, 0765, 1267, 1278, 1587,
1589, 1590, 1591, 1829, 1830, 1831, 1832, 1833, 1834, 1835,
1836, 1857, 1858, 2405, 2409, 2410, 2480, 2481,
0078, 0466, 0628, 0629, 0631, 0632, 0638, 0703, 0765, 0943,
0944, 0945, 0946, 1267, 1278, 1587, 1589, 1590, 1591, 1829,
1830, 1831, 1832, 1833, 1834, 1835, 1836, 1857, 1858, 2405,
2409, 2410, 2480, 2481, 2483, 2522, 2523, 2524, 2525, 2526,
2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536,
2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546,
2547, 2550, 2553, 2554, 2555, 2556, 2557,
];
private static ReadOnlySpan<ushort> Pouch_Material_SV =>
@ -146,7 +154,10 @@ public sealed class ItemStorage9SV : IItemStorage
2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456,
2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466,
2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476,
2477, 2478,
2477, 2478, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491,
2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501,
2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511,
2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521,
];
internal static ReadOnlySpan<InventoryType> ValidTypes =>
@ -166,10 +177,8 @@ public sealed class ItemStorage9SV : IItemStorage
InventoryType.Treasure,
];
// [AUCTION] Porto Marinada specialty auctioneer, locked behind HOME in 2023.
public static ReadOnlySpan<ushort> Unreleased =>
[
0005, // Safari Ball
0016, // Cherish Ball
0111, // Odd Keystone
@ -182,16 +191,12 @@ public sealed class ItemStorage9SV : IItemStorage
0490, // White Apricorn
0491, // Black Apricorn
0499, // Sport Ball
0500, // Park Ball
0708, // Lumiose Galette
0709, // Shalour Sable
1230, // TM00 - Mega Punch (Nothing learns, not obtainable even though it is assigned a move.)
1582, // Galarica Cuff
1592, // Galarica Wreath
1785, // Strange Ball
];

View file

@ -206,6 +206,7 @@ public static class Breeding
(int)Koraidon or (int)Miraidon => false,
(int)WalkingWake or (int)IronLeaves => false,
(int)Okidogi or (int)Munkidori or (int)Fezandipiti or (int)Ogerpon => false,
(int)GougingFire or (int)RagingBolt or (int)IronBoulder or (int)IronCrown or (int)Terapagos or (int)Pecharunt => false,
_ => true,
};

View file

@ -114,10 +114,10 @@ public static class Legal
//internal const int MaxGameID_8b = (int)GameVersion.SP;
internal const int MaxAbilityID_8b = MaxAbilityID_8_R2;
internal const int MaxSpeciesID_9 = MaxSpeciesID_9_T1;
internal const int MaxMoveID_9 = MaxMoveID_9_T1;
internal const int MaxItemID_9 = MaxItemID_9_T1;
internal const int MaxAbilityID_9 = MaxAbilityID_9_T1;
internal const int MaxSpeciesID_9 = MaxSpeciesID_9_T2;
internal const int MaxMoveID_9 = MaxMoveID_9_T2;
internal const int MaxItemID_9 = MaxItemID_9_T2;
internal const int MaxAbilityID_9 = MaxAbilityID_9_T2;
internal const int MaxSpeciesID_9_T0 = (int)Species.IronLeaves;
internal const int MaxMoveID_9_T0 = (int)Move.MagicalTorque;
@ -129,6 +129,11 @@ public static class Legal
internal const int MaxItemID_9_T1 = 2481; // Glimmering Charm
internal const int MaxAbilityID_9_T1 = (int)Ability.SupersweetSyrup;
internal const int MaxSpeciesID_9_T2 = (int)Species.Pecharunt;
internal const int MaxMoveID_9_T2 = (int)Move.MalignantChain;
internal const int MaxItemID_9_T2 = 2557; // Briars Book
internal const int MaxAbilityID_9_T2 = (int)Ability.PoisonPuppeteer;
internal const int MaxBallID_9 = (int)Ball.LAOrigin;
internal const int MaxGameID_9 = (int)GameVersion.VL;
internal const int MaxGameID_HOME = MaxGameID_9;

View file

@ -74,6 +74,42 @@ internal static class Encounters9
new(SV) { FixedBall = Ball.Poke, Species = 0390, Shiny = Never, Level = 01, Location = 000, Ability = OnlyFirst, Size = 128, EggLocation = 60005 }, // Chimchar
new(SV) { FixedBall = Ball.Poke, Species = 0393, Shiny = Never, Level = 01, Location = 000, Ability = OnlyFirst, Size = 128, EggLocation = 60005 }, // Piplup
#endregion
#region Sudachi 2
// Legendary Pokémon
new(SV) { Species = 0144, Shiny = Never, Level = 70, Location = 038, Ability = OnlyFirst, TeraType = GemType.Ice, Size = 128 }, // Articuno
new(SV) { Species = 0145, Shiny = Never, Level = 70, Location = 006, Ability = OnlyFirst, TeraType = GemType.Electric, Size = 128 }, // Zapdos
new(SV) { Species = 0146, Shiny = Never, Level = 70, Location = 024, Ability = OnlyFirst, TeraType = GemType.Fire, Size = 128 }, // Moltres
new(SV) { Species = 0243, Shiny = Never, Level = 70, Location = 022, Ability = OnlyFirst, TeraType = GemType.Electric, Size = 128 }, // Raikou
new(SV) { Species = 0244, Shiny = Never, Level = 70, Location = 032, Ability = OnlyFirst, TeraType = GemType.Fire, Size = 128 }, // Entei
new(SV) { Species = 0245, Shiny = Never, Level = 70, Location = 040, Ability = OnlyFirst, TeraType = GemType.Water, Size = 128 }, // Suicune
new(SV) { Species = 0249, Shiny = Never, Level = 70, Location = 062, Ability = OnlyFirst, TeraType = GemType.Water, Size = 128 }, // Lugia
new(SV) { Species = 0250, Shiny = Never, Level = 70, Location = 014, Ability = OnlyFirst, TeraType = GemType.Fire, Size = 128 }, // Ho-Oh
new(SV) { Species = 0380, Shiny = Never, Level = 70, Location = 014, Ability = OnlyFirst, Gender = 1, TeraType = GemType.Psychic, Size = 128 }, // Latias
new(SV) { Species = 0381, Shiny = Never, Level = 70, Location = 048, Ability = OnlyFirst, Gender = 0, TeraType = GemType.Psychic, Size = 128, Moves = new(295,406,428,225) }, // Latios
new(SV) { Species = 0382, Shiny = Never, Level = 70, Location = 040, Ability = OnlyFirst, TeraType = GemType.Water, Size = 128 }, // Kyogre
new(SV) { Species = 0383, Shiny = Never, Level = 70, Location = 067, Ability = OnlyFirst, TeraType = GemType.Fire, Size = 128 }, // Groudon
new(SV) { Species = 0384, Shiny = Never, Level = 70, Location = 050, Ability = OnlyFirst, TeraType = GemType.Flying, Size = 128 }, // Rayquaza
new(SV) { Species = 0638, Shiny = Never, Level = 70, Location = 048, Ability = OnlyFirst, TeraType = GemType.Fighting, Size = 128 }, // Cobalion
new(SV) { Species = 0639, Shiny = Never, Level = 70, Location = 022, Ability = OnlyFirst, TeraType = GemType.Fighting, Size = 128 }, // Terrakion
new(SV) { Species = 0640, Shiny = Never, Level = 70, Location = 030, Ability = OnlyFirst, TeraType = GemType.Fighting, Size = 128 }, // Virizion
new(SV) { Species = 0643, Shiny = Never, Level = 70, Location = 034, Ability = OnlyFirst, TeraType = GemType.Dragon, Size = 128 }, // Reshiram
new(SV) { Species = 0644, Shiny = Never, Level = 70, Location = 018, Ability = OnlyFirst, TeraType = GemType.Dragon, Size = 128 }, // Zekrom
new(SV) { Species = 0646, Shiny = Never, Level = 70, Location = 069, Ability = OnlyFirst, TeraType = GemType.Dragon, Size = 128 }, // Kyurem
new(SV) { Species = 0791, Shiny = Never, Level = 70, Location = 010, Ability = OnlyFirst, TeraType = GemType.Psychic, Size = 128 }, // Solgaleo
new(SV) { Species = 0792, Shiny = Never, Level = 70, Location = 040, Ability = OnlyFirst, TeraType = GemType.Psychic, Size = 128 }, // Lunala
new(SV) { Species = 0800, Shiny = Never, Level = 70, Location = 109, Ability = OnlyFirst, TeraType = GemType.Psychic, Size = 128 }, // Necrozma
new(SV) { Species = 0891, Shiny = Never, Level = 30, Location = 048, Ability = OnlyFirst, TeraType = GemType.Fighting, Size = 128 }, // Kubfu
new(SV) { Species = 0896, Shiny = Never, Level = 70, Location = 038, Ability = OnlyFirst, TeraType = GemType.Ice, Size = 128 }, // Glastrier
new(SV) { Species = 0897, Shiny = Never, Level = 70, Location = 038, Ability = OnlyFirst, TeraType = GemType.Ghost, Size = 128 }, // Spectrier
// Terapagos (Captured in Stellar Form)
new(SV) { Species = 1024, Shiny = Never, Level = 85, Location = 198, Ability = OnlyFirst, Gender = 0, Nature = Nature.Hardy, TeraType = GemType.Stellar, Size = 128, IVs = new(31,15,31,31,31,31), Moves = new(906,428,414,352) }, // Terapagos
// Mythical Pokémon
new(SV) { Species = 0648, Shiny = Never, Level = 70, Location = 176, Ability = OnlyFirst, TeraType = GemType.Fighting, Size = 128, FlawlessIVCount = 3, Moves = new(547,304,047,094) }, // Meloetta
//new(SV) { Species = 1025, Shiny = Never, Level = 88, Location = 138, Ability = OnlyFirst, Nature = Nature.Timid, TeraType = GemType.Poison, Size = 128, FlawlessIVCount = 3, Moves = new(417,092,919,247) }, // Pecharunt
#endregion
];
internal static readonly EncounterStatic9[] StaticSL =
@ -89,6 +125,10 @@ internal static class Encounters9
// Former Quaking Earth Titan
new(SL) { Species = 0984, Shiny = Never, Level = 45, Location = 024, Ability = OnlyFirst, Nature = Nature.Naughty, Size = 255, IVs = new(30,30,30,30,30,30), Moves = new(229,280,282,707), IsTitan = true }, // Great Tusk
// Paradox Pokémon
new(SL) { Species = 1020, Shiny = Never, Level = 75, Location = 124, Ability = OnlyFirst, TeraType = GemType.Fire, Size = 128, IVs = new(20,20,20,20,20,20) }, // Gouging Fire
new(SL) { Species = 1021, Shiny = Never, Level = 75, Location = 124, Ability = OnlyFirst, TeraType = GemType.Electric, Size = 128, IVs = new(20,20,20,20,20,20) }, // Raging Bolt
];
internal static readonly EncounterStatic9[] StaticVL =
@ -105,20 +145,56 @@ internal static class Encounters9
// Former Quaking Earth Titan
new(VL) { Species = 0990, Shiny = Never, Level = 45, Location = 024, Ability = OnlyFirst, Nature = Nature.Naughty, Size = 255, IVs = new(30,30,30,30,30,30), Moves = new(229,442,282,707), IsTitan = true }, // Iron Treads
// Paradox Pokémon
new(VL) { Species = 1022, Shiny = Never, Level = 75, Location = 124, Ability = OnlyFirst, TeraType = GemType.Rock, Size = 128, IVs = new(20,20,20,20,20,20) }, // Iron Boulder
new(VL) { Species = 1023, Shiny = Never, Level = 75, Location = 124, Ability = OnlyFirst, TeraType = GemType.Steel, Size = 128, IVs = new(20,20,20,20,20,20) }, // Iron Crown
];
private const string tradeSV = "tradesv";
private static readonly string[][] TradeNames = Util.GetLanguageStrings10(tradeSV, "zh2");
// 3 Trades are currently inaccessible (legally at least) until the Mochi Mayhem Epilogue is released.
internal static readonly EncounterTrade9[] TradeGift_SV =
[
new(TradeNames, 00, SV, 0194,18) { ID32 = 033081, Ability = OnlySecond, OTGender = 1, Gender = 0, Nature = Nature.Relaxed, IVs = new(27,18,25,13,16,31) }, // Wooper
new(TradeNames, 01, SV, 0093,25) { ID32 = 016519, Ability = OnlyFirst, OTGender = 1, Gender = 1, Nature = Nature.Lonely, IVs = new(14,20,25,31,28,16), EvolveOnTrade = true }, // Haunter
new(TradeNames, 02, SV, 0872,10) { ID32 = 050724, Ability = Any12, OTGender = 0, Gender = 1, Nature = Nature.Bashful, IVs = new(31,18,13,20,28,26) }, // Snom
new(TradeNames, 00, SV, 0194, 18) { FixedBall = Ball.Poke, ID32 = 033081, Ability = OnlySecond, OTGender = 1, Gender = 0, Nature = Nature.Relaxed, TeraType = GemType.Water, Weight = SizeType9.M, Scale = SizeType9.M, IVs = new(27,18,25,13,16,31) }, // Wooper
new(TradeNames, 01, SV, 0093, 25) { FixedBall = Ball.Poke, ID32 = 016519, Ability = OnlyFirst, OTGender = 1, Gender = 1, Nature = Nature.Lonely, TeraType = GemType.Ghost, Weight = SizeType9.S, Scale = SizeType9.S, IVs = new(14,20,25,31,28,16), EvolveOnTrade = true }, // Haunter
new(TradeNames, 02, SV, 0240, 12) { FixedBall = Ball.Quick, ID32 = 418071, Ability = OnlyHidden, OTGender = 0, Gender = 0, Nature = Nature.Docile, TeraType = GemType.Fire, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(31,12,25,15,31,31), Moves = new(264,052,108,499) }, // Magby
new(TradeNames, 03, SV, 0982, 35) { FixedBall = Ball.Poke, ID32 = 766634, Ability = OnlyFirst, OTGender = 0, Gender = 0, Nature = Nature.Relaxed, TeraType = GemType.Flying, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(15,24,31,26,31,11), Moves = new(263,403,529,887) }, // Dudunsparce
//new(TradeNames, 04, SV, 0133, 01) { FixedBall = Ball.Poke, ID32 = 376983, Ability = OnlyHidden, OTGender = 1, Gender = 0, Nature = Nature.Modest, TeraType = GemType.Dark, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(08,26,31,31,31,31), Moves = new(033,039,270,174) }, // Eevee
new(TradeNames, 05, SV, 0194, 08) { FixedBall = Ball.Poke, ID32 = 591912, Ability = OnlyHidden, OTGender = 1, Gender = 0, Nature = Nature.Naughty, TeraType = GemType.Poison, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(27,31,31,06,16,30), Moves = new(341,068,491,342), Form = 1 }, // Wooper-1
new(TradeNames, 06, SV, 0922, 24) { FixedBall = Ball.Poke, ID32 = 209896, Ability = OnlyFirst, OTGender = 0, Gender = 0, Nature = Nature.Hasty, TeraType = GemType.Fighting, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(15,22,31,29,14,03) }, // Pawmo
new(TradeNames, 07, SV, 0974, 37) { FixedBall = Ball.Poke, ID32 = 209896, Ability = OnlyHidden, OTGender = 0, Gender = 0, Nature = Nature.Bashful, TeraType = GemType.Ice, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(31,23,18,31,15,09) }, // Cetoddle
new(TradeNames, 08, SV, 0976, 20) { FixedBall = Ball.Poke, ID32 = 373015, Ability = OnlyHidden, OTGender = 0, Gender = 1, Nature = Nature.Sassy, TeraType = GemType.Water, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(31,28,14,26,14,18) }, // Veluza
new(TradeNames, 09, SV, 0997, 45) { FixedBall = Ball.Poke, ID32 = 316242, Ability = OnlyFirst, OTGender = 0, Gender = 0, Nature = Nature.Relaxed, TeraType = GemType.Dragon, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(24,22,21,30,30,31), Moves = new(407,423,242,116) }, // Arctibax
new(TradeNames, 10, SV, 0415, 15) { FixedBall = Ball.Poke, ID32 = 993663, Ability = OnlyHidden, OTGender = 1, Gender = 1, Nature = Nature.Calm, TeraType = GemType.Bug, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(24,22,31,16,28,00) }, // Combee
new(TradeNames, 11, SV, 0884, 36) { FixedBall = Ball.Poke, ID32 = 217978, Ability = OnlyHidden, OTGender = 0, Gender = 0, Nature = Nature.Quiet, TeraType = GemType.Electric, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(20,30,25,00,31,13) }, // Duraludon
new(TradeNames, 12, SV, 0307, 28) { FixedBall = Ball.Poke, ID32 = 137719, Ability = OnlySecond, OTGender = 1, Gender = 0, Nature = Nature.Quirky, TeraType = GemType.Fire, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(24,30,12,29,00,06), Moves = new(223,007,008,009) }, // Meditite
new(TradeNames, 13, SV, 0192, 40) { FixedBall = Ball.Poke, ID32 = 584457, Ability = OnlySecond, OTGender = 0, Gender = 0, Nature = Nature.Brave, TeraType = GemType.Grass, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(12,19,25,20,16,24), Moves = new(885,241,283,235) }, // Sunflora
new(TradeNames, 14, SV, 0747, 20) { FixedBall = Ball.Poke, ID32 = 158604, Ability = OnlyHidden, OTGender = 1, Gender = 1, Nature = Nature.Timid, TeraType = GemType.Poison, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(30,21,10,16,22,29) }, // Mareanie
new(TradeNames, 15, SV, 0081, 22) { FixedBall = Ball.Poke, ID32 = 568659, Ability = OnlyFirst, OTGender = 1, Gender = 2, Nature = Nature.Rash, TeraType = GemType.Electric, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(04,29,08,30,31,02), Moves = new(527,048,086,209) }, // Magnemite
//new(TradeNames, 16, SV, 0128, 50) { FixedBall = Ball.Poke, ID32 = 933665, Ability = OnlyFirst, OTGender = 1, Gender = 0, Nature = Nature.Jolly, TeraType = GemType.Fighting, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(31,31,26,31,31,31), Moves = new(873,528,038,370), Form = 1 }, // Tauros-1
new(TradeNames, 17, SV, 0227, 40) { FixedBall = Ball.Heavy, ID32 = 745642, Ability = OnlySecond, OTGender = 1, Gender = 1, Nature = Nature.Lonely, TeraType = GemType.Steel, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(24,15,22,19,14,09) }, // Skarmory
new(TradeNames, 18, SV, 0969, 05) { FixedBall = Ball.Poke, ID32 = 661291, Ability = OnlyHidden, OTGender = 1, Gender = 1, Nature = Nature.Modest, TeraType = GemType.Psychic, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(31,00,22,31,30,31), Moves = new(851,092,088,479) }, // Glimmet
//new(TradeNames, 19, SV, 0819, 07) { FixedBall = Ball.Poke, ID32 = 105971, Ability = OnlyHidden, OTGender = 0, Gender = 1, Nature = Nature.Gentle, TeraType = GemType.Fighting, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(14,12,22,10,23,22) }, // Skwovet
new(TradeNames, 20, SV, 0958, 25) { FixedBall = Ball.Poke, ID32 = 949475, Ability = OnlyFirst, OTGender = 1, Gender = 1, Nature = Nature.Careful, TeraType = GemType.Fairy, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(12,29,29,26,28,22) }, // Tinkatuff
new(TradeNames, 21, SV, 0971, 10) { FixedBall = Ball.Poke, ID32 = 275703, Ability = OnlyHidden, OTGender = 1, Gender = 0, Nature = Nature.Jolly, TeraType = GemType.Ghost, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(15,26,14,16,04,31) }, // Greavard
new(TradeNames, 22, SV, 0999, 30) { FixedBall = Ball.Poke, ID32 = 361010, Ability = OnlyFirst, OTGender = 1, Gender = 2, Nature = Nature.Sassy, TeraType = GemType.Steel, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(05,12,01,22,16,18) }, // Gimmighoul
new(TradeNames, 23, SV, 0955, 32) { FixedBall = Ball.Poke, ID32 = 149671, Ability = OnlyHidden, OTGender = 1, Gender = 1, Nature = Nature.Impish, TeraType = GemType.Psychic, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(13,20,12,12,21,21) }, // Flittle
new(TradeNames, 24, SV, 0857, 33) { FixedBall = Ball.Poke, ID32 = 654886, Ability = OnlyFirst, OTGender = 0, Gender = 1, Nature = Nature.Serious, TeraType = GemType.Fairy, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(22,18,18,07,31,31) }, // Hattrem
new(TradeNames, 25, SV, 0052, 21) { FixedBall = Ball.Poke, ID32 = 314512, Ability = OnlySecond, OTGender = 0, Gender = 1, Nature = Nature.Relaxed, TeraType = GemType.Dark, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(09,31,24,11,12,12), Form = 1 }, // Meowth-1
new(TradeNames, 26, SV, 0522, 20) { FixedBall = Ball.Poke, ID32 = 390518, Ability = OnlyFirst, OTGender = 0, Gender = 0, Nature = Nature.Hardy, TeraType = GemType.Electric, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(31,25,23,31,23,31), Shiny = Always }, // Blitzle
new(TradeNames, 27, SV, 0840, 15) { FixedBall = Ball.Poke, ID32 = 184745, Ability = OnlyHidden, OTGender = 0, Gender = 0, Nature = Nature.Modest, TeraType = GemType.Dragon, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(30,31,22,18,31,26), Moves = new(110,310,278,389) }, // Applin
new(TradeNames, 28, SV, 0209, 18) { FixedBall = Ball.Nest, ID32 = 816963, Ability = OnlyFirst, OTGender = 1, Gender = 0, Nature = Nature.Adamant, TeraType = GemType.Fairy, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(18,30,24,31,24,25) }, // Snubbull
new(TradeNames, 29, SV, 0744, 12) { FixedBall = Ball.Poke, ID32 = 980975, Ability = OnlyHidden, OTGender = 1, Gender = 1, Nature = Nature.Impish, TeraType = GemType.Ground, Weight = SizeType9.M, Scale = SizeType9.M, IVs = new(20,30,02,19,15,17), Moves = new(707,088,387,283) }, // Rockruff
new(TradeNames, 30, SV, 1012, 30) { FixedBall = Ball.Poke, ID32 = 704310, Ability = OnlyFirst, OTGender = 1, Gender = 1, Nature = Nature.Sassy, TeraType = GemType.Water, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(12,19,29,22,31,03), Moves = new(506,072,078,503) }, // Poltchageist
new(TradeNames, 31, SV, 0316, 17) { FixedBall = Ball.Poke, ID32 = 134745, Ability = OnlyHidden, OTGender = 0, Gender = 1, Nature = Nature.Gentle, TeraType = GemType.Poison, Weight = SizeType9.VALUE, Scale = SizeType9.VALUE, IVs = new(12,28,25,19,17,31), Moves = new(491,227,499,281) }, // Gulpin
new(TradeNames, 32, SV, 0872, 10) { FixedBall = Ball.Poke, ID32 = 050724, Ability = Any12, OTGender = 0, Gender = 1, Nature = Nature.Bashful, TeraType = GemType.Ice, Weight = SizeType9.L, Scale = SizeType9.L, IVs = new(31,18,13,20,28,26) }, // Snom
];
internal static readonly EncounterTera9[] TeraBase = EncounterTera9.GetArray(Get("gem_paldea"), TeraRaidMapParent.Paldea);
internal static readonly EncounterTera9[] TeraDLC1 = EncounterTera9.GetArray(Get("gem_kitakami"), TeraRaidMapParent.Kitakami);
internal static readonly EncounterTera9[] TeraDLC2 = EncounterTera9.GetArray(Get("gem_blueberry"), TeraRaidMapParent.Blueberry);
internal static readonly EncounterDist9[] Dist = EncounterDist9.GetArray(Get("dist_paldea"));
internal static readonly EncounterMight9[] Might = EncounterMight9.GetArray(Get("might_paldea"));
internal static readonly EncounterFixed9[] Fixed = EncounterFixed9.GetArray(Get("fixed_paldea"));

View file

@ -43,6 +43,7 @@ public record struct EncounterPossible9(EvoCriteria[] Chain, EncounterTypeGroup
StaticFixed,
StaticTeraBase,
StaticTeraDLC1,
StaticTeraDLC2,
StaticDist,
StaticOutbreak,
StaticMight,
@ -117,6 +118,10 @@ public record struct EncounterPossible9(EvoCriteria[] Chain, EncounterTypeGroup
case YieldState.StaticTeraDLC1:
if (TryGetNext(Encounters9.TeraDLC1))
return true;
Index = 0; State = YieldState.StaticTeraDLC2; goto case YieldState.StaticTeraDLC2;
case YieldState.StaticTeraDLC2:
if (TryGetNext(Encounters9.TeraDLC2))
return true;
Index = 0; State = YieldState.StaticDist; goto case YieldState.StaticDist;
case YieldState.StaticDist:
if (TryGetNext(Encounters9.Dist))

View file

@ -45,6 +45,7 @@ public record struct EncounterEnumerator9SWSH(PKM Entity, EvoCriteria[] Chain, G
StaticFixed,
StaticTeraBase,
StaticTeraDLC1,
StaticTeraDLC2,
StaticDist,
StaticOutbreak,
StaticMight,
@ -140,6 +141,10 @@ public record struct EncounterEnumerator9SWSH(PKM Entity, EvoCriteria[] Chain, G
case YieldState.StaticTeraDLC1:
if (TryGetNext(Encounters9.TeraDLC1))
return true;
Index = 0; State = YieldState.StaticTeraDLC2; goto case YieldState.StaticTeraDLC2;
case YieldState.StaticTeraDLC2:
if (TryGetNext(Encounters9.TeraDLC2))
return true;
Index = 0; State = YieldState.StaticDist; goto case YieldState.StaticDist;
case YieldState.StaticDist:
if (TryGetNext(Encounters9.Dist))

View file

@ -46,6 +46,7 @@ public record struct EncounterEnumerator9(PKM Entity, EvoCriteria[] Chain, GameV
StaticFixed,
StaticTeraBase,
StaticTeraDLC1,
StaticTeraDLC2,
StaticDist,
StaticOutbreak,
StaticMight,
@ -147,6 +148,10 @@ public record struct EncounterEnumerator9(PKM Entity, EvoCriteria[] Chain, GameV
case YieldState.StaticTeraDLC1:
if (TryGetNext(Encounters9.TeraDLC1))
return true;
Index = 0; State = YieldState.StaticTeraDLC2; goto case YieldState.StaticTeraDLC2;
case YieldState.StaticTeraDLC2:
if (TryGetNext(Encounters9.TeraDLC2))
return true;
Index = 0; State = YieldState.StaticDist; goto case YieldState.StaticDist;
case YieldState.StaticDist:
if (TryGetNext(Encounters9.Dist))

View file

@ -142,7 +142,7 @@ public abstract record EncounterStatic8Nest<T>(GameVersion Version)
if (pk is IRibbonSetMark8 { HasMarkEncounter8: true })
return false;
if (pk.Species == (int)Core.Species.Shedinja && pk is IRibbonSetAffixed { AffixedRibbon: >= (int)RibbonIndex.MarkLunchtime and <= (int)RibbonIndex.MarkSlump })
if (pk.Species == (int)Core.Species.Shedinja && pk is IRibbonSetAffixed x && ((RibbonIndex)x.AffixedRibbon).IsEncounterMark8())
return false;
if (!IsMatchEggLocation(pk))

View file

@ -174,7 +174,7 @@ public sealed record EncounterSlot8a(EncounterArea8a Parent, ushort Species, byt
private bool IsFormArgMismatch(PKM pk) => pk.Species switch
{
(int)Core.Species.Wyrdeer when Species is not (int)Core.Species.Wyrdeer && pk is IFormArgument { FormArgument: 0 } => true,
(int)Core.Species.Overqwil when Species is not (int)Core.Species.Overqwil && pk is IFormArgument { FormArgument: 0 } => true,
(int)Core.Species.Overqwil when Species is not (int)Core.Species.Overqwil && pk is IFormArgument { FormArgument: 0 } and IHomeTrack { HasTracker: false } => true,
(int)Core.Species.Basculegion when Species is not (int)Core.Species.Basculegion && pk is IFormArgument { FormArgument: 0 } => true,
_ => false,
};

View file

@ -6,7 +6,7 @@ namespace PKHeX.Core;
/// Generation 9 Static Encounter
/// </summary>
public sealed record EncounterStatic9(GameVersion Version)
: IEncounterable, IEncounterMatch, IEncounterConvertible<PK9>, IMoveset, IFlawlessIVCount, IFixedIVSet, IGemType, IFixedGender, IFixedNature, IEncounterMarkExtra
: IEncounterable, IEncounterMatch, IEncounterConvertible<PK9>, IMoveset, IFlawlessIVCount, IFixedIVSet, IGemType, IFatefulEncounterReadOnly, IFixedGender, IFixedNature, IEncounterMarkExtra
{
public int Generation => 9;
public EntityContext Context => EntityContext.Gen9;
@ -32,6 +32,7 @@ public sealed record EncounterStatic9(GameVersion Version)
public byte Size { get; init; }
public bool IsTitan { get; init; }
public bool RibbonMarkCrafty => Species == (int)Core.Species.Munchlax; // Shiny etc
public bool FatefulEncounter { get; init; }
public bool IsMissingExtraMark(PKM pk, out RibbonIndex index)
{
if (RibbonMarkCrafty)
@ -80,6 +81,7 @@ public sealed record EncounterStatic9(GameVersion Version)
MetDate = EncounterDate.GetDateSwitch(),
Version = (byte)version,
Ball = (byte)Ball.Poke,
FatefulEncounter = FatefulEncounter,
Nickname = SpeciesName.GetSpeciesNameGeneration(Species, lang, Generation),
Obedience_Level = LevelMin,

View file

@ -56,6 +56,7 @@ public sealed record EncounterTera9
{
TeraRaidMapParent.Paldea => GetRateTotalBaseSL(star),
TeraRaidMapParent.Kitakami => GetRateTotalKitakamiSL(star),
TeraRaidMapParent.Blueberry => GetRateTotalBlueberry(star),
_ => 0,
};
@ -64,6 +65,7 @@ public sealed record EncounterTera9
{
TeraRaidMapParent.Paldea => GetRateTotalBaseVL(star),
TeraRaidMapParent.Kitakami => GetRateTotalKitakamiVL(star),
TeraRaidMapParent.Blueberry => GetRateTotalBlueberry(star),
_ => 0,
};
@ -111,6 +113,18 @@ public sealed record EncounterTera9
_ => 0,
};
// finally the same for both games
public static short GetRateTotalBlueberry(int star) => star switch
{
1 => 1100,
2 => 1100,
3 => 2000,
4 => 1900,
5 => 2100,
6 => 2600,
_ => 0,
};
public static EncounterTera9[] GetArray(ReadOnlySpan<byte> data, TeraRaidMapParent map)
{
const int size = 0x18;
@ -312,4 +326,5 @@ public enum TeraRaidMapParent : byte
{
Paldea,
Kitakami,
Blueberry,
}

View file

@ -6,14 +6,14 @@ namespace PKHeX.Core;
/// Generation 9 Trade Encounter
/// </summary>
public sealed record EncounterTrade9
: IEncounterable, IEncounterMatch, IFixedTrainer, IFixedNickname, IEncounterConvertible<PK9>, IGemType, IFixedGender, IFixedNature
: IEncounterable, IEncounterMatch, IFixedTrainer, IFixedNickname, IEncounterConvertible<PK9>, IGemType, IFixedGender, IFixedNature, IRibbonPartner, IMoveset
{
public int Generation => 9;
public EntityContext Context => EntityContext.Gen9;
public int Location => Locations.LinkTrade6NPC;
public Shiny Shiny => Shiny.Never;
public Shiny Shiny { get; init; }
public bool EggEncounter => false;
public Ball FixedBall => Ball.Poke;
public Ball FixedBall { get; init; }
public bool IsShiny => false;
public int EggLocation => 0;
public bool IsFixedTrainer => true;
@ -24,16 +24,20 @@ public sealed record EncounterTrade9
private string[] Nicknames { get; }
public required Nature Nature { get; init; }
public required ushort ID32 { get; init; }
public required uint ID32 { get; init; }
public required AbilityPermission Ability { get; init; }
public required byte Gender { get; init; }
public byte Gender { get; init; }
public required byte OTGender { get; init; }
public required IndividualValueSet IVs { get; init; }
public ushort Species { get; }
public byte Level { get; }
public Moveset Moves { get; init; }
public bool EvolveOnTrade { get; init; }
public SizeType9 Weight { get; init; }
public SizeType9 Scale { get; init; }
private const byte FixedValueScale = 128;
public byte Form => 0;
public byte Form { get; init; }
private const string _name = "In-game Trade";
public string Name => _name;
@ -41,13 +45,15 @@ public sealed record EncounterTrade9
public byte LevelMin => Level;
public byte LevelMax => Level;
public GemType TeraType => GemType.Default;
public required GemType TeraType { get; init; }
public bool RibbonPartner { get; }
public EncounterTrade9(ReadOnlySpan<string[]> names, byte index, GameVersion game, ushort species, byte level)
{
Version = game;
Nicknames = EncounterUtil.GetNamesForLanguage(names, index);
TrainerNames = EncounterUtil.GetNamesForLanguage(names, (uint)(index + (names[1].Length >> 1)));
RibbonPartner = index is (>= 2 and <= 31);
Species = species;
Level = level;
}
@ -64,6 +70,7 @@ public sealed record EncounterTrade9
var version = this.GetCompatibleVersion((GameVersion)tr.Game);
int lang = (int)Language.GetSafeLanguage(Generation, (LanguageID)tr.Language, version);
var pi = PersonalTable.SV[Species, Form];
var rnd = new Xoroshiro128Plus(Util.Rand.Rand64());
var pk = new PK9
{
Species = Species,
@ -89,8 +96,8 @@ public sealed record EncounterTrade9
Nickname = Nicknames[lang],
HeightScalar = PokeSizeUtil.GetRandomScalar(),
WeightScalar = PokeSizeUtil.GetRandomScalar(),
Scale = PokeSizeUtil.GetRandomScalar(),
WeightScalar = Weight.GetSizeValue(Weight == SizeType9.RANDOM ? FixedValueScale : default, ref rnd),
Scale = Scale.GetSizeValue(Scale == SizeType9.RANDOM ? FixedValueScale : default, ref rnd),
TeraTypeOriginal = GetOriginalTeraType(),
HT_Name = tr.OT,
@ -104,6 +111,8 @@ public sealed record EncounterTrade9
SetPINGA(pk, criteria, pi);
if (EvolveOnTrade)
pk.Species++;
if (RibbonPartner)
pk.RibbonPartner = true;
pk.ResetPartyStats();
@ -174,9 +183,23 @@ public sealed record EncounterTrade9
return false;
if (EvolveOnTrade && pk.Species == Species)
return false;
if (pk is IScaledSize s2)
{
if (pk is IScaledSize3 s3 && !VerifyScalar(Scale, s3.Scale))
return false;
if (!VerifyScalar(Weight, s2.WeightScalar))
return false;
}
return true;
}
private static bool VerifyScalar(SizeType9 type, byte value)
{
if (type is SizeType9.VALUE)
return value == FixedValueScale;
return type.IsWithinRange(value);
}
private bool IsMatchEggLocation(PKM pk)
{
var metState = LocationsHOME.GetRemapState(Context, pk.Context);

View file

@ -36,6 +36,7 @@ public enum GemType : byte
Dragon = 17,
Dark = 18,
Fairy = 19,
Stellar = 101,
}
/// <summary>

View file

@ -39,7 +39,7 @@ public static class SizeType9Extensions
/// Gets a random size value for the specified <see cref="SizeType9"/>.
/// </summary>
/// <param name="type">Size Type</param>
/// <param name="value">Value if <see cref="SizeType9.VALUE"/>, unused otherwise.</param>
/// <param name="value">Value if <see cref="VALUE"/>, unused otherwise.</param>
/// <param name="rand">RNG to generate value with.</param>
/// <returns>Size Value</returns>
/// <exception cref="ArgumentOutOfRangeException"></exception>
@ -54,4 +54,22 @@ public static class SizeType9Extensions
VALUE => value,
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
};
/// <summary>
/// Checks if the specified value is within the range of the <see cref="SizeType9"/>.
/// </summary>
/// <param name="type">Size Type</param>
/// <param name="value">Value to check</param>
/// <returns>True if the value is within the range of the <see cref="SizeType9"/>.</returns>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public static bool IsWithinRange(this SizeType9 type, byte value) => type switch
{
RANDOM => true,
XS => value < 0x10,
S => value is >= 0x10 and < 0x30,
M => value is >= 0x30 and < 0xD0,
L => value is >= 0xD0 and < 0xF0,
XL => value >= 0xF0,
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
};
}

View file

@ -38,6 +38,9 @@ public static class EggHatchLocation9
3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
0, 0, 3, 0, 0, 0, 3, 0, 3, 0,
3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
3, 0,
3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
3, // Terarium (Entry Tunnel)
];
}

View file

@ -273,9 +273,5 @@ public sealed class EvolutionEnvironment9 : IEvolutionEnvironment
}
// Unreleased Item
private static bool IsEvolutionBanned(in ISpeciesForm head) => head.Species switch
{
(int)Species.Slowpoke => head.Form == 1,
_ => false,
};
private static bool IsEvolutionBanned(in ISpeciesForm head) => false;
}

View file

@ -7,6 +7,9 @@ namespace PKHeX.Core;
/// </summary>
public static class Tera9RNG
{
/// <summary>
/// Type max (exclusive) to use when picking a random a Tera Type.
/// </summary>
private const uint TeraTypeCount = 18;
/// <summary>

View file

@ -187,6 +187,7 @@ public static class FormInfo
(int)Palafin,
(int)Ogerpon,
(int)Terapagos,
];
/// <summary>

View file

@ -19,7 +19,8 @@ public static class SpeciesCategory
(int)Diancie or (int)Hoopa or (int)Volcanion or
(int)Magearna or (int)Marshadow or
(int)Zeraora or (int)Meltan or (int)Melmetal or
(int)Zarude
(int)Zarude or
(int)Pecharunt
;
/// <summary>
@ -36,7 +37,8 @@ public static class SpeciesCategory
(int)Xerneas or (int)Yveltal or (int)Zygarde or
(int)Cosmog or (int)Cosmoem or (int)Solgaleo or (int)Lunala or (int)Necrozma or
(int)Zacian or (int)Zamazenta or (int)Eternatus or (int)Calyrex or
(int)Koraidon or (int)Miraidon
(int)Koraidon or (int)Miraidon or
(int)Terapagos
;
/// <summary>
@ -63,7 +65,9 @@ public static class SpeciesCategory
/// <summary>
/// Checks if the <see cref="species"/> is a Paradox Pokémon.
/// </summary>
public static bool IsParadox(ushort species) => species is (>= (int)GreatTusk and <= (int)IronThorns) or (int)RoaringMoon or (int)IronValiant;
public static bool IsParadox(ushort species) => species is (>= (int)GreatTusk and <= (int)IronThorns)
or (int)RoaringMoon or (int)IronValiant
or (int)GougingFire or (int)RagingBolt or (int)IronBoulder or (int)IronCrown;
public static bool IsFixedGenderFromDual(ushort currentSpecies) => currentSpecies switch
{

View file

@ -91,56 +91,56 @@ public sealed class BallContextHOME : IBallContext
public static ReadOnlySpan<byte> Permit =>
[
0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7B, 0x0B, 0x0B, 0x6F, 0x0B, 0x0B, 0x6F, // 000-019
0x0B, 0x6F, 0x0B, 0x6F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 020-039
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0B, 0x7F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x6B, 0x7F, 0x7F, // 040-059
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x6B, 0x7F, 0x7F, 0x6F, 0x6B, 0x6B, 0x7F, 0x7F, 0x7F, // 060-079
0x7F, 0x7F, 0x7F, 0x7F, 0x2F, 0x0B, 0x6B, 0x0B, 0x6F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x7F, 0x7F, // 080-099
0x6F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 100-119
0x0B, 0x6F, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 020-039
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 040-059
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 060-079
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 080-099
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 100-119
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 120-139
0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x4B, 0x0B, 0x0B, 0x6B, 0x6B, 0x6B, 0x4B, 0x0B, // 140-159
0x0B, 0x6F, 0x6B, 0x7F, 0x7F, 0x6F, 0x0B, 0x6F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, // 160-179
0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x6F, 0x6F, 0x6F, 0x6B, 0x6F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x7F, // 180-199
0x6F, 0x00, 0x7F, 0x6F, 0x6F, 0x6B, 0x7F, 0x6F, 0x7F, 0x6F, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x6B, 0x6B, // 200-219
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x7F, 0x6F, 0x6B, 0x7F, 0x6F, 0x6F, 0x7F, 0x7F, 0x7F, 0x7F, // 220-239
0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 140-159
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 160-179
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 180-199
0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 200-219
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 220-239
0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 240-259
0x7F, 0x6B, 0x6B, 0x7F, 0x7F, 0x3B, 0x0B, 0x0B, 0x0B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x0B, 0x7F, 0x7F, // 260-279
0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x6F, 0x6B, 0x6F, 0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x6B, 0x7F, 0x6F, // 280-299
0x2B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x7F, 0x7F, 0x2B, 0x2B, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x7F, 0x7F, // 300-319
0x7F, 0x7F, 0x6B, 0x6B, 0x7F, 0x6B, 0x6B, 0x6F, 0x7F, 0x7F, 0x7F, 0x6F, 0x6B, 0x7F, 0x7F, 0x6F, 0x6F, 0x7F, 0x7F, 0x7F, // 320-339
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x6F, 0x6F, 0x6B, 0x7F, 0x7F, 0x6F, 0x6F, 0x7F, // 340-359
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x0B, 0x0B, 0x7F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, // 360-379
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x0B, 0x0B, 0x6B, 0x0B, 0x0B, 0x6B, 0x0B, 0x0B, 0x6F, 0x6B, 0x6B, 0x2F, // 380-399
0x0B, 0x7B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x23, 0x0B, 0x23, 0x0B, 0x2B, 0x0B, 0x0B, 0x7F, 0x7F, 0x6F, 0x6F, 0x6B, // 400-419
0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x6B, 0x2B, 0x0B, 0x6F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 420-439
0x7F, 0x2B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2F, 0x6B, 0x6B, 0x7F, 0x7F, // 440-459
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x7F, 0x7F, 0x6B, 0x7F, 0x7F, 0x7F, 0x6B, 0x7F, 0x7F, 0x7F, // 460-479
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x03, 0x03, 0x4B, 0x03, // 480-499
0x03, 0x6B, 0x6B, 0x6B, 0x03, 0x03, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x23, 0x03, 0x23, 0x03, 0x23, 0x03, 0x7F, 0x7F, 0x7F, // 500-519
0x7F, 0x7F, 0x03, 0x03, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 520-539
0x6B, 0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 540-559
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3B, 0x0B, 0x0B, 0x0B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x0B, 0x7F, 0x7F, // 260-279
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 280-299
0x2B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 300-319
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 320-339
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x6F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 340-359
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x0B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, // 360-379
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2F, // 380-399
0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2B, 0x0B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 400-419
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2B, 0x0B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 420-439
0x7F, 0x2B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2F, 0x7F, 0x7F, 0x7F, 0x7F, // 440-459
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 460-479
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 480-499
0x7F, 0x7F, 0x7F, 0x7F, 0x03, 0x03, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x23, 0x03, 0x23, 0x03, 0x23, 0x03, 0x7F, 0x7F, 0x7F, // 500-519
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 520-539
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 540-559
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 560-579
0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 580-599
0x7F, 0x7F, 0x6B, 0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 600-619
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 580-599
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 600-619
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, // 620-639
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, // 640-659
0x7F, 0x7F, 0x7F, 0x7F, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x7F, 0x4B, 0x7F, 0x7F, 0x7F, // 660-679
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 640-659
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x4B, 0x7F, 0x7F, 0x7F, // 660-679
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 680-699
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, // 700-719
0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x4B, 0x43, 0x43, 0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x6B, // 720-739
0x6B, 0x6B, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 740-759
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x4B, 0x6B, 0x7F, 0x7F, 0x7F, 0x6B, // 760-779
0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 720-739
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 740-759
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 760-779
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 780-799
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, // 800-819
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 800-819
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 820-839
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 840-859
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 860-879
0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, // 880-899
0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, // 900-919
0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, // 920-939
0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, // 940-959
0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, // 960-979
0x6B, 0x6B, 0x6B, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B, 0x00, // 980-999
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B,
0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, // 880-899
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 900-919
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 920-939
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 940-959
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // 960-979
0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, // 980-999
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, // 1000-1019
];
private enum BallType : byte

View file

@ -90,5 +90,6 @@ internal static class BallUseLegality
public const ulong WildPokeballs8g_WithRaid = WildPokeballs7b & ~(1ul << (int)Master); // Ultra Great Poke Premier, no Master
public const ulong WildPokeballs8g_WithoutRaid = WildPokeRegular & ~(1ul << (int)Master); // Ultra Great Poke, no Premier/Master
public const ulong WildPokeballs9 = WildPokeballs7 | WildPokeEnhance5; // Same as Gen7 + Dream
public const ulong WildPokeballs9 = WildPokeballs8;
public const ulong WildPokeballs9PreDLC2 = WildPokeballs7 | WildPokeEnhance5; // Same as Gen7 + Dream
}

View file

@ -30,10 +30,10 @@ public sealed class MarkVerifier : Verifier
private void VerifyNoMarksPresent(LegalityAnalysis data, IRibbonIndex m)
{
for (var x = MarkLunchtime; x <= MarkSlump; x++)
for (var mark = MarkLunchtime; mark <= MarkSlump; mark++)
{
if (m.GetRibbon((int)x))
data.AddLine(GetInvalid(string.Format(LRibbonMarkingFInvalid_0, GetRibbonNameSafe(x))));
if (m.GetRibbon((int)mark))
data.AddLine(GetInvalid(string.Format(LRibbonMarkingFInvalid_0, GetRibbonNameSafe(mark))));
}
}

View file

@ -175,6 +175,11 @@ public sealed class MiscVerifier : Verifier
if (pk9.TeraTypeOverride != (MoveType)TeraTypeUtil.OverrideNone)
data.AddLine(GetInvalid(LTeraTypeIncorrect));
}
else if (pk9.Species == (int)Species.Terapagos)
{
if (!TeraTypeUtil.IsValidTerapagos((byte)pk9.TeraTypeOverride))
data.AddLine(GetInvalid(LTeraTypeIncorrect));
}
else if (pk9.Species == (int)Species.Ogerpon)
{
if (!TeraTypeUtil.IsValidOgerpon((byte)pk9.TeraTypeOverride, pk9.Form))
@ -223,8 +228,15 @@ public sealed class MiscVerifier : Verifier
{
if (enc is { Species: (int)Species.Larvesta, Form: 0 } and not EncounterEgg)
DisallowLevelUpMove(24, (ushort)Move.BugBite, pk9, data);
if (enc is { Species: (int)Species.Zorua, Form: 1 } and not EncounterEgg)
else if (enc is { Species: (int)Species.Zorua, Form: 1 } and not EncounterEgg)
DisallowLevelUpMove(28, (ushort)Move.Spite, pk9, data);
else
return;
// Safari and Sport are not obtainable in the base game.
// For the learnset restricted cases, we need to check if the ball is available too.
if (((BallUseLegality.WildPokeballs9PreDLC2 >> pk9.Ball) & 1) != 1)
data.AddLine(GetInvalid(LBallUnavailable));
}
}

View file

@ -248,9 +248,9 @@ public static class MarkRules
public static RibbonIndex GetMaxAffixValue(EvolutionHistory evos)
{
if (evos.HasVisitedGen9)
return MarkTitan;
return RibbonIndexExtensions.MAX_G9;
if (evos.HasVisitedSWSH)
return MarkSlump; // Pioneer and Twinkling Star cannot be selected in SW/SH.
return RibbonIndexExtensions.MAX_G8; // Pioneer and Twinkling Star cannot be selected in SW/SH.
return unchecked((RibbonIndex)(-1));
}
}

View file

@ -94,7 +94,7 @@ public static class RibbonRules
return true;
// Legendaries can not compete in ranked yet.
if (evos.HasVisitedGen9 && IsRibbonValidMasterRankSV(pk))
if (evos.HasVisitedGen9 && IsRibbonValidMasterRankSV(enc))
return true;
return false;
@ -135,9 +135,111 @@ public static class RibbonRules
return false;
if (SpeciesCategory.IsMythical(species))
return false;
if (TempBanRegE.Contains(species))
return false;
return true;
}
private static ReadOnlySpan<ushort> TempBanRegE =>
[
0001, // Bulbasaur
0002, // Ivysaur
0003, // Venusaur
0007, // Squirtle
0008, // Wartortle
0009, // Blastoise
0043, // Oddish
0044, // Gloom
0045, // Vileplume
0084, // Doduo
0085, // Dodrio
0086, // Seel
0087, // Dewgong
0102, // Exeggcute
0103, // Exeggutor
0103, // Exeggutor
0106, // Hitmonlee
0107, // Hitmonchan
0111, // Rhyhorn
0112, // Rhydon
0126, // Magmar
0131, // Lapras
0152, // Chikorita
0153, // Bayleef
0154, // Meganium
0158, // Totodile
0159, // Croconaw
0160, // Feraligatr
0182, // Bellossom
0227, // Skarmory
0235, // Smeargle
0236, // Tyrogue
0237, // Hitmontop
0240, // Magby
0252, // Treecko
0253, // Grovyle
0254, // Sceptile
0255, // Torchic
0256, // Combusken
0257, // Blaziken
0258, // Mudkip
0259, // Marshtomp
0260, // Swampert
0328, // Trapinch
0329, // Vibrava
0330, // Flygon
0374, // Beldum
0375, // Metang
0376, // Metagross
0408, // Cranidos
0409, // Rampardos
0410, // Shieldon
0411, // Bastiodon
0464, // Rhyperior
0467, // Magmortar
0495, // Snivy
0496, // Servine
0497, // Serperior
0498, // Tepig
0499, // Pignite
0500, // Emboar
0522, // Blitzle
0523, // Zebstrika
0546, // Cottonee
0547, // Whimsicott
0572, // Minccino
0573, // Cinccino
0577, // Solosis
0578, // Duosion
0579, // Reuniclus
0622, // Golett
0623, // Golurk
0677, // Espurr
0678, // Meowstic
0686, // Inkay
0687, // Malamar
0725, // Litten
0726, // Torracat
0727, // Incineroar
0728, // Popplio
0729, // Brionne
0730, // Primarina
0731, // Pikipek
0732, // Trumbeak
0733, // Toucannon
0868, // Milcery
0869, // Alcremie
0884, // Duraludon
// New Species
(ushort)Archaludon,
//(ushort)Hydrapple,
(ushort)GougingFire,
(ushort)RagingBolt,
(ushort)IronBoulder,
(ushort)IronCrown,
];
/// <summary>
/// Checks if the input can receive the <see cref="IRibbonSetCommon6.RibbonTraining"/> ribbon.
/// </summary>

View file

@ -13,6 +13,8 @@ public static class RibbonVerifierCommon9
list.Add(ChampionPaldea);
if (r.RibbonOnceInALifetime) // Flag it.
list.Add(OnceInALifetime);
if (r.RibbonPartner != args.Encounter is IRibbonPartner { RibbonPartner: true })
list.Add(Partner);
}
public static void ParseEgg(this IRibbonSetCommon9 r, ref RibbonResultList list)
@ -21,5 +23,7 @@ public static class RibbonVerifierCommon9
list.Add(ChampionPaldea);
if (r.RibbonOnceInALifetime)
list.Add(OnceInALifetime);
if (r.RibbonPartner)
list.Add(Partner);
}
}

View file

@ -77,7 +77,12 @@ public static class MoveInfo
/// Checks if the move can be known by anything in any context.
/// </summary>
/// <remarks> Assumes the move ID is within [0,max]. </remarks>
public static bool IsMoveKnowable(ushort move) => !IsMoveZ(move) && !IsMoveDynamax(move);
public static bool IsMoveKnowable(ushort move) => !IsMoveZ(move) && !IsMoveDynamax(move) && !IsMoveTorque(move);
/// <summary>
/// Checks if the move is a Starmobile-only move.
/// </summary>
public static bool IsMoveTorque(ushort move) => move - (uint)CombatTorque <= 3;
/// <summary>
/// Checks if the <see cref="move"/> is unable to be used in battle.
@ -173,6 +178,7 @@ public static class MoveInfo
{
Gen6 when move is (int)ThousandArrows or (int)ThousandWaves => false,
Gen8b when IsDummiedMove(MoveInfo8b.DummiedMoves, move) => false,
Gen9 when IsDummiedMove(MoveInfo9.DummiedMoves, move) => false,
_ => true,
};

View file

@ -54,7 +54,7 @@ internal static class MoveInfo9
10, 10, 10, 10, 15, 15, 10, 10, 10, 05, 15, 10, 10, 10, 10, 10, 10, 15, 15, 05,
10, 15, 05, 01, 15, 10, 15, 10, 10, 10, 10, 10, 10, 10, 05, 15, 15, 10, 05, 05,
10, 10, 10, 10, 20, 20, 20, 05, 10, 10, 05, 10, 05, 05, 10, 20, 10, 10, 10, 10,
10, 05, 15, 10, 10,
10, 05, 15, 10, 10, 10, 05, 05, 10, 05, 05, 10, 10, 15, 10, 10, 15, 10, 15, 05,
];
public static ReadOnlySpan<byte> MoveType_SV =>
@ -104,7 +104,7 @@ internal static class MoveInfo9
13, 07, 08, 01, 07, 16, 02, 12, 04, 13, 13, 00, 06, 01, 07, 13, 15, 10, 11, 08,
00, 14, 15, 00, 05, 10, 03, 00, 00, 16, 11, 09, 10, 00, 08, 13, 10, 16, 01, 12,
00, 14, 00, 14, 06, 11, 10, 00, 13, 07, 09, 09, 12, 08, 16, 10, 09, 16, 03, 01,
17, 00, 11, 11, 11,
17, 00, 11, 11, 11, 12, 00, 15, 09, 12, 05, 08, 08, 15, 17, 09, 12, 13, 01, 03,
];
/// <summary>
@ -118,13 +118,13 @@ internal static class MoveInfo9
[
0x1C, 0x20, 0x00, 0x0C, 0x00, 0x02, 0x02, 0x00, 0x04, 0x00,
0x04, 0x00, 0x09, 0x00, 0xA1, 0x22, 0x5D, 0x50, 0x36, 0xC8,
0xC1, 0x0E, 0x03, 0x42, 0x02, 0x00, 0x00, 0x65, 0x10, 0x22,
0x00, 0x00, 0x04, 0x0A, 0xA4, 0x80, 0xA7, 0x71, 0x00, 0x51,
0x91, 0x00, 0x00, 0x04, 0x64, 0x08, 0xA0, 0x67, 0x04, 0x00,
0x00, 0x00, 0x00, 0xA4, 0x80, 0x28, 0x01, 0x41, 0x04, 0x28,
0x23, 0x00, 0x04, 0x08, 0x10, 0x00, 0x0C, 0x83, 0xF7, 0xC6,
0x8A, 0x02, 0x4D, 0x10, 0x80, 0x03, 0xF0, 0xC3, 0xFF, 0xFF,
0xFF, 0xFF, 0x07, 0x85, 0x26, 0xA0, 0x94, 0xFF, 0x91, 0xE7,
0xFF, 0xFF, 0xFF, 0x00, 0xEE, 0xFF, 0x7F, 0x0A, 0x00, 0x0D,
0x00, 0x0E, 0x00, 0x42, 0x02, 0x00, 0x00, 0x45, 0x10, 0x22,
0x00, 0x00, 0x04, 0x0A, 0xA4, 0x80, 0x27, 0x70, 0x00, 0x51,
0x91, 0x00, 0x00, 0x04, 0x60, 0x08, 0xA0, 0x67, 0x04, 0x00,
0x00, 0x00, 0x00, 0xA4, 0x00, 0x28, 0x01, 0x01, 0x04, 0x28,
0x23, 0x00, 0x04, 0x08, 0x10, 0x00, 0x0C, 0x83, 0x07, 0x00,
0x8A, 0x02, 0x4C, 0x10, 0x80, 0x03, 0xF0, 0xC3, 0xFF, 0xFF,
0xFF, 0xFF, 0x07, 0x80, 0x26, 0xA0, 0x80, 0xFF, 0x11, 0xE1,
0xFB, 0xFF, 0xFF, 0x00, 0xEE, 0xFF, 0x7F, 0x08, 0x00, 0x0D,
];
}

View file

@ -813,7 +813,7 @@ public sealed class WA8(byte[] Data) : DataMysteryGift(Data), ILangNick, INature
public void SetRibbon(int index, bool value = true)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)MarkSlump);
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)RibbonIndexExtensions.MAX_G8A);
if (value)
{
if (GetRibbon(index))

View file

@ -826,11 +826,11 @@ public sealed class WB8(byte[] Data) : DataMysteryGift(Data),
public bool RibbonHisui { get => this.GetRibbonIndex(Hisui); set => this.SetRibbonIndex(Hisui, value); }
public int GetRibbonByte(int index) => Array.IndexOf(Data, (byte)index, RibbonBytesOffset, RibbonBytesCount);
public bool GetRibbon(int index) => GetRibbonByte(index) >= 0;
public bool GetRibbon(int index) => RibbonSpan.Contains((byte)index);
public void SetRibbon(int index, bool value = true)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)MarkSlump);
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)RibbonIndexExtensions.MAX_G8B);
if (value)
{
if (GetRibbon(index))

View file

@ -195,16 +195,17 @@ public sealed class WC8(byte[] Data) : DataMysteryGift(Data), ILangNick, INature
private const int RibbonBytesCount = 0x20;
private const int RibbonByteNone = 0xFF; // signed -1
private ReadOnlySpan<byte> RibbonSpan => Data.AsSpan(RibbonBytesOffset, RibbonBytesCount);
public bool HasMarkEncounter8
{
get
{
for (int i = 0; i < RibbonBytesCount; i++)
foreach (var value in RibbonSpan)
{
var value = Data[RibbonBytesOffset + i];
if (value == RibbonByteNone)
return false;
if ((RibbonIndex)value is >= MarkLunchtime and <= MarkSlump)
return false; // end
if (((RibbonIndex)value).IsEncounterMark8())
return true;
}
@ -883,11 +884,11 @@ public sealed class WC8(byte[] Data) : DataMysteryGift(Data), ILangNick, INature
public bool RibbonHisui { get => this.GetRibbonIndex(Hisui); set => this.SetRibbonIndex(Hisui, value); }
public int GetRibbonByte(int index) => Array.IndexOf(Data, (byte)index, RibbonBytesOffset, RibbonBytesCount);
public bool GetRibbon(int index) => GetRibbonByte(index) >= 0;
public bool GetRibbon(int index) => RibbonSpan.Contains((byte)index);
public void SetRibbon(int index, bool value = true)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)MarkSlump);
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)RibbonIndexExtensions.MAX_G8);
if (value)
{
if (GetRibbon(index))

View file

@ -903,13 +903,14 @@ public sealed class WC9(byte[] Data) : DataMysteryGift(Data), ILangNick, INature
public bool RibbonMarkAlpha { get => this.GetRibbonIndex(MarkAlpha); set => this.SetRibbonIndex(MarkAlpha, value); }
public bool RibbonMarkMightiest { get => this.GetRibbonIndex(MarkMightiest); set => this.SetRibbonIndex(MarkMightiest, value); }
public bool RibbonMarkTitan { get => this.GetRibbonIndex(MarkTitan); set => this.SetRibbonIndex(MarkTitan, value); }
public bool RibbonPartner { get => this.GetRibbonIndex(Partner); set => this.SetRibbonIndex(Partner, value); }
public int GetRibbonByte(int index) => Array.IndexOf(Data, (byte)index, RibbonBytesOffset, RibbonBytesCount);
public bool GetRibbon(int index) => GetRibbonByte(index) >= 0;
public bool GetRibbon(int index) => RibbonSpan.Contains((byte)index);
public void SetRibbon(int index, bool value = true)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)RibbonPartner);
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)index, (uint)RibbonIndexExtensions.MAX_G9);
if (value)
{
if (GetRibbon(index))

View file

@ -191,7 +191,7 @@ public sealed class GameDataCore : IHomeTrack, ISpeciesForm, ITrainerID, INature
public bool RibbonMarkAlpha { get => GetFlag(0x3F, 3); set => SetFlag(0x3F, 3, value); }
public bool RibbonMarkMightiest { get => GetFlag(0x3F, 4); set => SetFlag(0x3F, 4, value); }
public bool RibbonMarkTitan { get => GetFlag(0x3F, 5); set => SetFlag(0x3F, 5, value); }
public bool RIB45_6 { get => GetFlag(0x3F, 6); set => SetFlag(0x3F, 6, value); }
public bool RibbonPartner { get => GetFlag(0x3F, 6); set => SetFlag(0x3F, 6, value); }
public bool RIB45_7 { get => GetFlag(0x3F, 7); set => SetFlag(0x3F, 7, value); }
public bool RIB46_0 { get => GetFlag(0x40, 0); set => SetFlag(0x40, 0, value); }

View file

@ -27,11 +27,21 @@ public static class TeraTypeUtil
/// </summary>
public const byte OverrideNone = 19;
/// <summary>
/// Magic value to indicate that a Tera Type is the Stellar type.
/// </summary>
public const byte Stellar = 99;
/// <summary>
/// Max amount of Tera Types possible. Range is [0,17].
/// </summary>
public const byte MaxType = 17;
/// <summary>
/// String resource index for the Stellar type.
/// </summary>
public const byte StellarTypeDisplayStringIndex = 18;
/// <summary>
/// For out of range values, we fall back to this Tera Type.
/// </summary>
@ -51,7 +61,14 @@ public static class TeraTypeUtil
/// </summary>
/// <param name="override">Current override value</param>
/// <returns>True if valid.</returns>
public static bool IsValid(byte @override) => @override is <= MaxType or OverrideNone;
public static bool IsValid(byte @override) => @override is <= MaxType or OverrideNone or Stellar;
/// <summary>
/// Indicates if the Tera Type value is valid (changed to anything).
/// </summary>
/// <param name="override">Current override value</param>
/// <returns>True if valid.</returns>
public static bool IsOverrideValid(byte @override) => @override is <= MaxType or Stellar;
/// <summary>
/// Checks if Ogerpon's Tera Type is valid.
@ -68,6 +85,13 @@ public static class TeraTypeUtil
_ => false,
};
/// <summary>
/// Checks if Terapagos' Tera Type is valid.
/// </summary>
/// <param name="type">Tera Type to check</param>
/// <returns>True if the Tera Type is valid.</returns>
public static bool IsValidTerapagos(byte type) => type == OverrideNone;
/// <summary>
/// Calculates the effective Tera Type based on the inputs.
/// </summary>
@ -75,12 +99,12 @@ public static class TeraTypeUtil
/// <param name="override">If the type was modified, this value will indicate accordingly.</param>
public static MoveType GetTeraType(byte original, byte @override)
{
if (@override <= MaxType)
if (IsOverrideValid(@override))
return (MoveType)@override;
if (@override != OverrideNone)
return Fallback; // 18 or out of range.
if (original <= MaxType)
if (original <= Stellar)
return (MoveType)original;
return Fallback; // out of range.
}
@ -92,7 +116,7 @@ public static class TeraTypeUtil
/// <param name="type">Value to update with.</param>
public static void SetTeraType(this ITeraType t, MoveType type)
{
if ((byte)type > MaxType)
if ((byte)type > Stellar)
type = Fallback;
var original = t.TeraTypeOriginal;
@ -139,5 +163,5 @@ public static class TeraTypeUtil
/// </summary>
/// <param name="species">Species to check</param>
/// <returns>True if the species can have its Tera Type changed.</returns>
public static bool CanChangeTeraType(ushort species) => species != (int)Species.Ogerpon;
public static bool CanChangeTeraType(ushort species) => species is not ((int)Species.Ogerpon or (int)Species.Terapagos);
}

View file

@ -290,7 +290,7 @@ public sealed class PA8 : PKM, ISanityChecksum,
public bool RibbonMarkAlpha { get => FlagUtil.GetFlag(Data, 0x45, 3); set => FlagUtil.SetFlag(Data, 0x45, 3, value); }
public bool RibbonMarkMightiest { get => FlagUtil.GetFlag(Data, 0x45, 4); set => FlagUtil.SetFlag(Data, 0x45, 4, value); }
public bool RibbonMarkTitan { get => FlagUtil.GetFlag(Data, 0x45, 5); set => FlagUtil.SetFlag(Data, 0x45, 5, value); }
public bool RIB45_6 { get => FlagUtil.GetFlag(Data, 0x45, 6); set => FlagUtil.SetFlag(Data, 0x45, 6, value); }
public bool RibbonPartner { get => FlagUtil.GetFlag(Data, 0x45, 6); set => FlagUtil.SetFlag(Data, 0x45, 6, value); }
public bool RIB45_7 { get => FlagUtil.GetFlag(Data, 0x45, 7); set => FlagUtil.SetFlag(Data, 0x45, 7, value); }
public bool RIB46_0 { get => FlagUtil.GetFlag(Data, 0x46, 0); set => FlagUtil.SetFlag(Data, 0x46, 0, value); }

View file

@ -288,7 +288,7 @@ public sealed class PK9 : PKM, ISanityChecksum, ITeraType, ITechRecord, IObedien
public bool RibbonMarkAlpha { get => FlagUtil.GetFlag(Data, 0x45, 3); set => FlagUtil.SetFlag(Data, 0x45, 3, value); }
public bool RibbonMarkMightiest { get => FlagUtil.GetFlag(Data, 0x45, 4); set => FlagUtil.SetFlag(Data, 0x45, 4, value); }
public bool RibbonMarkTitan { get => FlagUtil.GetFlag(Data, 0x45, 5); set => FlagUtil.SetFlag(Data, 0x45, 5, value); }
public bool RIB45_6 { get => FlagUtil.GetFlag(Data, 0x45, 6); set => FlagUtil.SetFlag(Data, 0x45, 6, value); }
public bool RibbonPartner { get => FlagUtil.GetFlag(Data, 0x45, 6); set => FlagUtil.SetFlag(Data, 0x45, 6, value); }
public bool RIB45_7 { get => FlagUtil.GetFlag(Data, 0x45, 7); set => FlagUtil.SetFlag(Data, 0x45, 7, value); }
public bool RIB46_0 { get => FlagUtil.GetFlag(Data, 0x46, 0); set => FlagUtil.SetFlag(Data, 0x46, 0, value); }

View file

@ -264,7 +264,7 @@ public abstract class G8PKM : PKM, ISanityChecksum,
public bool RibbonMarkAlpha { get => FlagUtil.GetFlag(Data, 0x45, 3); set => FlagUtil.SetFlag(Data, 0x45, 3, value); }
public bool RibbonMarkMightiest { get => FlagUtil.GetFlag(Data, 0x45, 4); set => FlagUtil.SetFlag(Data, 0x45, 4, value); }
public bool RibbonMarkTitan { get => FlagUtil.GetFlag(Data, 0x45, 5); set => FlagUtil.SetFlag(Data, 0x45, 5, value); }
public bool RIB45_6 { get => FlagUtil.GetFlag(Data, 0x45, 6); set => FlagUtil.SetFlag(Data, 0x45, 6, value); }
public bool RibbonPartner { get => FlagUtil.GetFlag(Data, 0x45, 6); set => FlagUtil.SetFlag(Data, 0x45, 6, value); }
public bool RIB45_7 { get => FlagUtil.GetFlag(Data, 0x45, 7); set => FlagUtil.SetFlag(Data, 0x45, 7, value); }
public bool RIB46_0 { get => FlagUtil.GetFlag(Data, 0x46, 0); set => FlagUtil.SetFlag(Data, 0x46, 0, value); }

View file

@ -17,7 +17,7 @@ public static class StringConverter12
return false;
}
return true;
static bool IsJapanese(char c) => c is >= '\u3000' and <= '\u30FC'; // todo: bitmask check
static bool IsJapanese(char c) => c is >= '\u3000' and <= '\u30FC';
}
public static bool GetIsG1English(ReadOnlySpan<char> str) => !GetIsG1Japanese(str);

View file

@ -9,6 +9,8 @@ public static class StringConverter3
{
private const byte TerminatorByte = 0xFF;
private const char Terminator = (char)TerminatorByte;
private const char Apostrophe = '\''; //
private const byte ApostropheByte = 0xB4;
/// <summary>
/// Converts a Generation 3 encoded value array to string.
@ -68,8 +70,8 @@ public static class StringConverter3
for (; i < value.Length; i++)
{
var chr = value[i];
if (chr == '\'') //
return 0xB4;
if (chr == Apostrophe) //
return ApostropheByte;
var b = (byte)table.IndexOf(chr);
if (b == TerminatorByte)
break;
@ -102,8 +104,8 @@ public static class StringConverter3
/// <returns>Generation 3 encoded value.</returns>
public static byte SetG3Char(char chr, bool jp)
{
if (chr == '\'') //
return 0xB4;
if (chr == Apostrophe)
return ApostropheByte;
var table = jp ? G3_JP : G3_EN;
var index = table.IndexOf(chr);
return (byte)index;

View file

@ -22,6 +22,8 @@ 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)
{
int generation = context.Generation();
// Mega List
if (context.IsMegaGeneration() && IsFormListSingleMega(species))
return GetMegaSingle(types, forms);
@ -33,13 +35,13 @@ public static class FormConverter
{
<= Legal.MaxSpeciesID_1 => GetFormsGen1(species, types, forms, context),
<= Legal.MaxSpeciesID_2 => GetFormsGen2(species, types, forms, context),
<= Legal.MaxSpeciesID_3 => GetFormsGen3(species, types, forms, context.Generation()),
<= Legal.MaxSpeciesID_4 => GetFormsGen4(species, types, forms, context.Generation()),
<= Legal.MaxSpeciesID_5 => GetFormsGen5(species, types, forms, context.Generation()),
<= Legal.MaxSpeciesID_6 => GetFormsGen6(species, types, forms, genders, context.Generation()),
<= Legal.MaxSpeciesID_7_USUM => GetFormsGen7(species, types, forms, context.Generation()),
<= Legal.MaxSpeciesID_8a => GetFormsGen8(species, context.Generation(), types, forms, genders),
_ => GetFormsGen9(species, context.Generation(), types, forms, genders),
<= 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_6 => GetFormsGen6(species, types, forms, genders, generation),
<= Legal.MaxSpeciesID_7_USUM => GetFormsGen7(species, types, forms, generation),
<= Legal.MaxSpeciesID_8a => GetFormsGen8(species, generation, types, forms, genders),
_ => GetFormsGen9(species, generation, types, forms, genders),
};
}
@ -351,12 +353,17 @@ public static class FormConverter
forms[(int)Mimikyu], // Disguised
forms[1058], // Busted
],
Necrozma => [
Necrozma when generation == 7 => [
types[0], // Normal
forms[1065], // Dusk Mane
forms[1066], // Dawn Wings
forms[1067], // Ultra Necrozma
],
Necrozma => [
types[0], // Normal
forms[1065], // Dusk Mane
forms[1066], // Dawn Wings
],
Magearna => [
types[0],
forms[1062], // Original
@ -509,6 +516,11 @@ public static class FormConverter
forms[Unremarkable],
forms[Masterpiece],
],
Terapagos => [
types[0], // Normal
forms[Terastal],
forms[Stellar],
],
_ => EMPTY,
};
}
@ -904,6 +916,8 @@ public static class FormConverter
internal const int MaskCornerstone = 1132;
private const int Artisan = 1133;
private const int Masterpiece = 1134;
private const int Terastal = 1135;
private const int Stellar = 1136;
public static string GetGigantamaxName(IReadOnlyList<string> forms) => forms[Gigantamax];

View file

@ -150,12 +150,10 @@ public static class SpeciesConverter
029, -53, -65, 025, -06, -03, -07, -04, -04, -08,
-04, 001, -03, -03, -06, -04, -47, -47, -47, -23,
-23, -05, -07, -09, -07, -20, -13, -09, -09, -29,
-23, 001, 012, 012, 000, 000, 000, -06, UNK, UNK,
UNK, UNK, UNK, UNK, UNK, UNK,
-23, 001, 012, 012, 000, 000, 000, -06, 005, -06,
-03, -03, -02, -04, -03, -03,
];
private const sbyte UNK = 111;
/// <summary>
/// Difference of Gen9 Species IDs (index) and the associated National Dex IDs (value)
/// </summary>
@ -171,7 +169,7 @@ public static class SpeciesConverter
029, 008, 003, 004, 004, 020, 004, 023, 006, 003,
003, 004, -01, 013, 009, 007, 005, 007, 009, 009,
-43, -43, -43, -68, -68, -68, -58, -58, -25, -29,
-31, 006, -01, UNK, 000, 000, 000, UNK, UNK, UNK,
UNK, UNK, UNK, UNK, -12, -12,
-31, 006, -01, 006, 000, 000, 000, 003, 003, 004,
002, 003, 003, -05, -12, -12,
];
}

View file

@ -135,7 +135,9 @@ public sealed class PersonalInfo9SV(byte[] Data) : PersonalInfo, IPersonalAbilit
796, 851, 046, 268, 114, 092, 328, 180, 356, 479,
360, 282, 450, 162, 410, 679, 667, 333, 503, 535,
669, 253, 264, 311, 803, 807, 812, 814, 809, 808,
799, 802,
799, 802, 220, 244, 038, 283, 572, 915, 250, 330,
916, 527, 813, 811, 482, 815, 297, 248, 797, 806,
800, 675, 784, 319, 174, 912, 913, 914, 917, 918,
];
public byte DexKitakami { get => Data[0x4A]; set => Data[0x4A] = value; }

View file

@ -1,6 +1,66 @@
Marinchen
Spectra
Magby
Dummimisel
Evoli
Felino
Pamamo
Flaniwal
Agiluza
Cryospino
Wadribie
Duraludon
Meditie
Sonnflora
Garstella
Magnetilo
Tauros
Panzaeron
Lumispross
Raffel
Tafforgita
Gruff
Gierspenst
Flattutu
Brimano
Mauzi
Elezeba
Knapfel
Snubbull
Wuffels
Mortcha
Schluppuck
Flöckchen
Lotti
Polla
Matt
Aoki
Cosima
Cay
Clavel
Grusha
Kombu
Sinius
Ronah
Levy
Amura
Colzo
Mimi
Enigmara
Nemila
Erin
Sagaria
Pepper
Poppy
Etta
Moira
Tulia
Saguaro
Salvatore
Cyano
Jo
Tara
Quendella
Hana
Jim
Misha

View file

@ -1,6 +1,66 @@
Manchester
Hauntikins
Magby
Dudunsparce
Eevee
Wooper
Pawmo
Cetoddle
Veluza
Arctibax
Combee
Duraludon
Meditite
Sunflora
Mareanie
Magnemite
Tauros
Skarmory
Glimmet
Skwovet
Tinkatuff
Greavard
Gimmighoul
Flittle
Hattrem
Meowth
Blitzle
Applin
Snubbull
Rockruff
Poltchageist
Gulpin
Snowsalot
Sue
Blossom
Crispin
Larry
Penny
Rika
Clavell
Grusha
Kofu
Hassel
Katy
Drayton
Dendra
Brassius
Miriam
Iono
Nemona
Amarys
Geeta
Arven
Poppy
Ryme
Raifort
Tulip
Saguaro
Salvatore
Cyrano
Kieran
Lacey
Tyme
Carmine
Jacq
Glen

View file

@ -1,6 +1,66 @@
Celeste
Umbra
Magby
Dudunsparce
Eevee
Wooper
Pawmo
Cetoddle
Veluza
Arctibax
Combee
Duraludon
Meditite
Sunflora
Mareanie
Magnemite
Tauros
Skarmory
Glimmet
Skwovet
Tinkatuff
Greavard
Gimmighoul
Flittle
Hattrem
Meowth
Blitzle
Applin
Snubbull
Rockruff
Poltchageist
Gulpin
Nevadito
Anita
Estrella
Denis
Laureano
Noa
Cayena
Clavel
Grusha
Fuco
Hesperio
Araceli
Levi
Kendra
Brais
Mimí
e-Nigma
Mencía
Nerina
Ságita
Damián
Pola
Lima
Cloe
Tuli
Hugo
Silvio
Mirtilo
Cass
Aroa
Mila
Corin
Cinio
Fernán

View file

@ -1,6 +1,66 @@
Lazuli
Spectrounet
Magby
Deusolourdo
Évoli
Axoloto
Pohmotte
Piétacé
Délestin
Cryodo
Apitrini
Duralugon
Méditikka
Héliatronc
Vorastérie
Magnéti
Tauros
Airmure
Germéclat
Rongourmand
Forgella
Toutombe
Mordudor
Flotillon
Chapotus
Miaouss
Zébibron
Verpom
Snubbull
Rocabot
Poltchageist
Gloupti
Floconou
Anna
Electra
Rubépin
Okuba
Pania
Cayenn
Clavel
Grusha
Kombu
Hassa
Éra
Irido
Élige
Colza
Mimosa
Mashynn
Menzi
Nérine
Alisma
Pepper
Popi
Laïm
Mora
Tully
Saguaro
Salvio
Cyano
Kassis
Taro
Thaïm
Roseille
Jacq
Flavio

View file

@ -1,6 +1,66 @@
Celestino
Babau
Magby
Dudunsparce
Eevee
Wooper
Pawmo
Cetoddle
Veluza
Arctibax
Combee
Duraludon
Meditite
Sunflora
Mareanie
Magnemite
Tauros
Skarmory
Glimmet
Skwovet
Tinkatuff
Greavard
Gimmighoul
Flittle
Hattrem
Meowth
Blitzle
Applin
Snubbull
Rockruff
Poltchageist
Gulpin
Nevolino
Woopy
Harriet
Piros
Ubaldo
Penny
Capsi
Clavel
Grusha
Algaro
Oranzio
Aceria
Aris
Dendra
Brassius
Mimosa
Kissara
Nemi
Erin
Alisma
Pepe
Verina
Lima
Morasia
Tulipa
Guaro
Salvis
Bluebert
Riben
Rupi
Thyma
Rubra
Zim
Florio

View file

@ -1,6 +1,66 @@
マサオ
ちみちゃん
ブビィ
ノココッチ
イーブイ
ウパー
パモット
アルクジラ
ミガルーサ
セゴール
ミツハニー
ジュラルドン
アサナン
キマワリ
ヒドイデ
コイル
ケンタロス
エアームド
キラーメ
ホシガリス
ナカヌチャン
ボチ
コレクレー
ヒラヒナ
テブリム
ニャース
シママ
カジッチュ
ブルー
イワンコ
チャデス
ゴクリン
こゆきち
チェミ
サキねえ
アカマツ
アオキ
ボタン
チリ
クラベル
グルーシャ
ハイダイ
ハッサク
カエデ
カキツバタ
キハダ
コルサ
ミモザ
ナンジャモ
ネモ
ネリネ
オモダカ
ペパー
ポピー
ライム
レホール
リップ
サワロ
セイジ
シアノ
スグリ
タロ
タイム
ゼイユ
ジニア
ヒカタロ

View file

@ -1,6 +1,66 @@
퍼랭이
티미
마그비
노고고치
이브이
우파
빠모트
터벅고래
가비루사
드니꽁
세꿀버리
두랄루돈
요가랑
해루미
시마사리
코일
켄타로스
무장조
초롱순
탐리스
벼리짱
망망이
모으령
하느라기
손지브림
나옹
줄뮤마
과사삭벌레
블루
암멍이
차데스
꼴깍몬
가루누니
체미
소희
하솔
청목
모란
칠리
클라벨
그루샤
곤포
팔자크
단풍
제빈
운향
콜사
미모사
모야모
네모
네리네
테사
페퍼
뽀삐
라임
레포르
리파
사구아로
세이지
시아노
카지
타로
타임
시유
지니어
태호

View file

@ -1,6 +1,66 @@
真苍
智美
鸭嘴宝宝
土龙节节
伊布
乌波
布土拨
走鲸
轻身鳕
冻脊龙
三蜜蜂
铝钢龙
玛沙那
向日花怪
好坏星
小磁怪
肯泰罗
盔甲鸟
晶光芽
贪心栗鼠
巧锻匠
墓仔狗
索财灵
飘飘雏
提布莉姆
喵喵
斑斑马
啃果虫
布鲁
岩狗狗
斯魔茶
溶食兽
小由吉
彩美
纱希姐
赤松
青木
牡丹
辛俐
克拉韦尔
古鲁夏
海岱
八朔
阿枫
杜若
凰檗
寇沙
米莫莎
奇树
妮莫
纳莉
也慈
派帕
波琵
莱姆
蕾荷
莉普
萨瓦罗
赛吉
席蓝
乌栗
紫竽
泰姆
丹瑜
吉尼亚
彼加太郎

View file

@ -1,6 +1,66 @@
真蒼
智美
鴨嘴寶寶
土龍節節
伊布
烏波
布土撥
走鯨
輕身鱈
凍脊龍
三蜜蜂
鋁鋼龍
瑪沙那
向日花怪
好壞星
小磁怪
肯泰羅
盔甲鳥
晶光芽
貪心栗鼠
巧鍛匠
墓仔狗
索財靈
飄飄雛
提布莉姆
喵喵
斑斑馬
啃果蟲
布魯
岩狗狗
斯魔茶
溶食獸
小由吉
彩美
紗希姐
赤松
青木
牡丹
辛俐
克拉韋爾
古魯夏
海岱
八朔
阿楓
杜若
凰檗
寇沙
米莫莎
奇樹
妮莫
納莉
也慈
派帕
波琵
萊姆
蕾荷
莉普
薩瓦羅
賽吉
席藍
烏栗
紫竽
泰姆
丹瑜
吉尼亞
彼加太朗

View file

@ -2479,4 +2479,80 @@ Morpeko-Samen
Mortcha-Puder
Neuanfangs-Mochi
Rotom-Stick
Glitzerpin
Glitzerpin
Legierungsmetall
Blaue Style-Karte
Myrapla-Blatt
Tentacha-Stachel
Dodu-Daune
Jurob-Haar
Owei-Schale
Rabauz-Schweiß
Rihorn-Zahn
Seeper-Tinte
Elekid-Haar
Magby-Haar
Lapras-Träne
Porygon-Splitter
Lampi-Strom
Snubbull-Haar
Panzaeron-Feder
Farbeagle-Tinte
Plusle-Haar
Minun-Haar
Knacklion-Schale
Tanhel-Kralle
Koknodon-Stachel
Schilterus-Kralle
Elezeba-Mähnenhaar
Rotomurf-Kralle
Waumboll-Watte
Zurrokex-Schweiß
Picochilla-Haar
Monozyto-Gel
Wattzapf-Faden
Golbit-Splitter
Psiau-Haar
Iscalar-Tinte
Peppeck-Feder
Araqua-Faden
Curelei-Blüte
Meteno-Schale
Hokumil-Sahne
Duraludon-Patina
Arktos-Snack
Zapdos-Snack
Lavados-Snack
Raikou-Snack
Entei-Snack
Suicune-Snack
Lugia-Snack
Ho-Oh-Snack
Latias-Snack
Latios-Snack
Kyogre-Snack
Groudon-Snack
Rayquaza-Snack
Kobalium-Snack
Terrakium-Snack
Viridium-Snack
Reshiram-Snack
Zekrom-Snack
Kyurem-Snack
Solgaleo-Snack
Lunala-Snack
Necrozma-Snack
Dakuma-Snack
Polaross-Snack
Phantoross-Snack
Indigoblaue Scheibe
Flammen-Pikser
Tera-Stück (Stellar)
Mysteriöse Pirsifbeere
Blaubeer-Tischtuch
Blaubeer-Stühle
Synchromaschine
Meteorit
Karmesinbuch
Purpurbuch
Briannas Buch

View file

@ -2479,4 +2479,80 @@ Morpeko Snack
Poltchageist Powder
Fresh-Start Mochi
Roto-Stick
Glimmering Charm
Glimmering Charm
Metal Alloy
Indigo Style Card
Oddish Leaf
Tentacool Stinger
Doduo Down
Seel Fur
Exeggcute Shell
Tyrogue Sweat
Rhyhorn Fang
Horsea Ink
Elekid Fur
Magby Hair
Lapras Teardrop
Porygon Fragment
Chinchou Sparks
Snubbull Hair
Skarmory Feather
Smeargle Paint
Plusle Fur
Minun Fur
Trapinch Shell
Beldum Claw
Cranidos Spike
Shieldon Claw
Blitzle Mane Hair
Drilbur Claw
Cottonee Fluff
Scraggy Sweat
Minccino Fur
Solosis Gel
Joltik Thread
Golett Shard
Espurr Fur
Inkay Ink
Pikipek Feather
Dewpider Thread
Comfey Flower
Minior Shell
Milcery Cream
Duraludon Tarnish
Articuno Treat
Zapdos Treat
Moltres Treat
Raikou Treat
Entei Treat
Suicune Treat
Lugia Treat
Ho-Oh Treat
Latias Treat
Latios Treat
Kyogre Treat
Groudon Treat
Rayquaza Treat
Cobalion Treat
Terrakion Treat
Virizion Treat
Reshiram Treat
Zekrom Treat
Kyurem Treat
Solgaleo Treat
Lunala Treat
Necrozma Treat
Kubfu Treat
Glastrier Treat
Spectrier Treat
Indigo Disk
Fiery Pick
Stellar Tera Shard
Mythical Pecha Berry
Blueberry Tablecloth
Blueberry Chairs
Synchro Machine
Meteorite
Scarlet Book
Violet Book
Briars Book

View file

@ -449,7 +449,7 @@ Supercaña
Psydugadera
Pokochera
Bici
Llave Suite
Llave de la Suite
Carta Prof. Oak
Pluma Lunar
Carné de Socio
@ -2479,4 +2479,80 @@ Semilla de Morpeko
Polvo de Poltchageist
Mochi Reinicio
Paloselfi Rotom
Amuleto Cristalino
Amuleto Cristalino
Metal Compuesto
Tarjeta Chic Azul
Hoja de Oddish
Aguijón de Tentacool
Plumón de Doduo
Pelo de Seel
Cáscara de Exeggcute
Sudor de Tyrogue
Colmillo de Rhyhorn
Tinta de Horsea
Pelo de Elekid
Pelo de Magby
Lágrima de Lapras
Fragmento de Porygon
Electricidad de Chinchou
Pelo de Snubbull
Pluma de Skarmory
Pintura de Smeargle
Pelo de Plusle
Pelo de Minun
Coraza de Trapinch
Garra de Beldum
Púa de Cranidos
Garra de Shieldon
Mechón de Blitzle
Garra de Drilbur
Algodón de Cottonee
Sudor de Scraggy
Pelo de Minccino
Gel de Solosis
Hilo de Joltik
Fragmento de Golett
Pelo de Espurr
Tinta de Inkay
Pluma de Pikipek
Hilo de Dewpider
Flor de Comfey
Caparazón de Minior
Nata de Milcery
Óxido de Duraludon
Galleta Articuno
Galleta Zapdos
Galleta Moltres
Galleta Raikou
Galleta Entei
Galleta Suicune
Galleta Lugia
Galleta Ho-Oh
Galleta Latias
Galleta Latios
Galleta Kyogre
Galleta Groudon
Galleta Rayquaza
Galleta Cobalion
Galleta Terrakion
Galleta Virizion
Galleta Reshiram
Galleta Zekrom
Galleta Kyurem
Galleta Solgaleo
Galleta Lunala
Galleta Necrozma
Galleta Kubfu
Galleta Glastrier
Galleta Spectrier
Disco Índigo
Palillo Ígneo
Teralito Astral
Baya Meloc Singular
Mantel Arándano
Sillas Arándano
Sincromisor
Meteorito
Libro Escarlata
Libro Púrpura
Libro de Brie

View file

@ -2479,4 +2479,80 @@ Graine de Morpeko
Poudre de Poltchageist
Mochi Renouveau
Perche à Motismart
Charme Éclatant
Charme Éclatant
Métal Composite
Carte Élégance Bleue
Feuille de Mystherbe
Aiguillon de Tentacool
Duvet de Doduo
Poils dOtaria
Coquille de Noeunoeuf
Sueur de Debugant
Croc de Rhinocorne
Encre dHypotrempe
Poils dÉlekid
Poils de Magby
Larme de Lokhlass
Fragment de Porygon
Électricité de Loupio
Poils de Snubbull
Plume dAirmure
Peinture de Queulorior
Poils de Posipi
Poils de Négapi
Carapace de Kraknoix
Griffe de Terhal
Piquant de Kranidos
Ongle de Dinoclier
Crinière de Zébibron
Griffe de Rototaupe
Coton de Doudouvet
Sueur de Baggiguane
Poils de Chinchidou
Fluide de Nucléos
Fil de Statitik
Fragment de Gringolem
Poils de Psystigri
Encre de Sepiatop
Plume de Picassaut
Fil dAraqua
Fleur de Guérilande
Carapace de Météno
Crème de Crèmy
Rouille de Duralugon
Friandise Artikodin
Friandise Électhor
Friandise Sulfura
Friandise Raikou
Friandise Entei
Friandise Suicune
Friandise Lugia
Friandise Ho-Oh
Friandise Latias
Friandise Latios
Friandise Kyogre
Friandise Groudon
Friandise Rayquaza
Friandise Cobaltium
Friandise Terrakium
Friandise Viridium
Friandise Reshiram
Friandise Zekrom
Friandise Kyurem
Friandise Solgaleo
Friandise Lunala
Friandise Necrozma
Friandise Wushours
Friandise Blizzeval
Friandise Spectreval
Disque Indigo
Pique Volcanique
Téra-Éclat Stellaire
Baie Pêcha Fabuleuse
Nappe Myrtille
Sièges Myrtille
Synchrotron
Météorite
Livre Écarlate
Livre Violet
Livre de Bria

View file

@ -2479,4 +2479,80 @@ Seme di Morpeko
Polvere di Poltchageist
Mochi del ripristino
Bastone Rotoselfie
Brillamuleto
Brillamuleto
Metallo composito
Tessera chic blu
Foglia di Oddish
Aculeo di Tentacool
Piuma di Doduo
Pelo di Seel
Guscio di Exeggcute
Sudore di Tyrogue
Zanna di Rhyhorn
Inchiostro di Horsea
Pelo di Elekid
Pelo di Magby
Lacrime di Lapras
Frammento di Porygon
Elettricità di Chinchou
Pelo di Snubbull
Penna di Skarmory
Pittura di Smeargle
Pelo di Plusle
Pelo di Minun
Guscio di Trapinch
Artiglio di Beldum
Punta di Cranidos
Artiglio di Shieldon
Crine di Blitzle
Artiglio di Drilbur
Lanugine di Cottonee
Sudore di Scraggy
Pelo di Minccino
Gel di Solosis
Filo di Joltik
Frammento di Golett
Pelo di Espurr
Inchiostro di Inkay
Penna di Pikipek
Filo di Dewpider
Fiore di Comfey
Guscio di Minior
Panna di Milcery
Ruggine di Duraludon
Spuntino per Articuno
Spuntino per Zapdos
Spuntino per Moltres
Spuntino per Raikou
Spuntino per Entei
Spuntino per Suicune
Spuntino per Lugia
Spuntino per Ho-Oh
Spuntino per Latias
Spuntino per Latios
Spuntino per Kyogre
Spuntino per Groudon
Spuntino per Rayquaza
Spuntino per Cobalion
Spuntino per Terrakion
Spuntino per Virizion
Spuntino per Reshiram
Spuntino per Zekrom
Spuntino per Kyurem
Spuntino per Solgaleo
Spuntino per Lunala
Spuntino per Necrozma
Spuntino per Kubfu
Spuntino per Glastrier
Spuntino per Spectrier
Disco indaco
Stecchino infuocato
Teralite Astrale
Baccapesca misteriosa
Tovaglia Mirtillo
Sedie Mirtillo
Sincronizzatore
Meteorite
Libro scarlatto
Libro violetto
Libro di Rea

View file

@ -1613,16 +1613,16 @@
ふるさとマフィン
ぼんぐりのみ
コトブキマフィン
ビルドアッパー
マルチアップ
クリティカッター
こだわりちまき
にばいづけ
あべこべやき
まるいはっぱ
たくみのえまき
タマゼンマイ
かいでんのタネ
モンスターボール
ススキのおとしもの
こだいのこおり
えいえんのこおり
ユクシーのつめ
アグノムのきば
エムリットのはね
@ -1637,46 +1637,46 @@
ごりごりミネラル
もくざい
キングリーフ
シズメダマ
ぬまのシズメダマ
モンスターボール
スーパーボール
ハイパーボール
クラフトレシピ41
フェザーボール
ポケモンこけし
クラフトレシピ06
クラフトレシピ07
めかくしだま
ばりばりだま
ねばりだま
クラフトレシピ10
クラフトレシピ11
むらさきハーブ
クラフトレシピ12
クラフトレシピ13
クラフトレシピ14
クラフトレシピ15
クラフトレシピ16
クラフトレシピ17
クラフトレシピ18
クラフトレシピ19
クラフトレシピ20
クラフトレシピ21
クラフトレシピ22
クラフトレシピ23
クラフトレシピ24
クラフトレシピ25
クラフトレシピ26
クラフトレシピ27
クラフトレシピ28
クラフトレシピ29
クラフトレシピ30
クラフトレシピ31
ほしのかけら
キノコよせだま
ムシヨケソウ
ミツよせだま
イナホよせだま
マメよせだま
ミネラルよせだま
キズぐすり
いいキズぐすり
すごいキズぐすり
まんたんのくすり
かいふくのくすり
カンポーやく
いいカンポーやく
すごいカンポーやく
もりのヨウカン
コトブキマフィン
なんでもなおし
げんきのかけら
げんきのかたまり
ピーピーリカバー
ピーピーマックス
ひそやかスプレー
クラフトレシピ33
クラフトレシピ34
ラフトレシピ35
クラフトレシピ36
クラフトレシピ37
しずめダマ
せめのがんやく
まもりのがんやく
リティカッター
ヨクアタラーヌ
マルチアップ
もりのシズメダマ
てつのかけら
くろいろたまいし
@ -1684,38 +1684,38 @@
どろだんご
バリバリモズク
バリバリモ
ケムリイモ
むしくいぼんぐり
ゆきだま
ねばりだま
くろのきせき
ピートブロック
むしよけスプレー
ひそやかスプレー
クスリソウ
ゲンキツボミ
ゲンキツボミ
ピーピーグサ
ふしぎなおまもり2(仮)
ふしぎなおまもり3(仮)
みがわりおまもり2
みがわりおまもり3
ツルギマイタケ
テッペキクラゲ
カゲブンシメジ(仮)
キュウショウロ(仮)
すなはまダイコン
ふしぎなおまもり4(仮)
ふしぎなおまもり5(仮)
カゲブンシメジ
キュウショウロ
スナハマダイコン
みがわりおまもり4
みがわりおまもり5
スイートトリュフ
よせだまのもと
モンスターボール
スーパーボール
ハイパーボール
フェザーボール
アーチボール
とくしゅボール
ビビリだま
けむりだま
ばりばりだま
めかくしだま
ポケモンこけし
@ -1727,9 +1727,9 @@
マメよせだま
キノコよせだま
ミネラルよせだま
クラフトレシピ38
クラフトレシピ39
クラフトレシピ40
あべこべやき
こだわりちまき
にばいづけ
あんぜんおまもり1
あんぜんおまもり2
あんぜんおまもり3
@ -1750,30 +1750,30 @@
メガトンボール
ギガトンボール
ウイングボール
クラフトレシピ42
クラフトレシピ43
ジェットボール
ヘビーボール
ポフのみ
すごいカンポーやく
アタックアップ
ディフェンスアップ
せめのがんやく
まもりのがんやく
ヨクアタラーヌ
ガンバリのすな
ガンバリのじゃり
ガンバリのいし
ガンバリのいわ
ガンバリセット
ふしぎなおまもり
だれかのポーチ
だれかのポーチ
だれかのポーチ
だれかのポーチ
だれかのポーチ
スマートフォン
ひでんのくすり
みがわりおまもり1
だれかのおとしもの
だれかのおとしもの
だれかのおとしもの
だれかのおとしもの
だれかのおとしもの
オリジンボール
だれかのきんちゃく
タマカゴ
だんいんしょう
くさりのはへん
オリジンこうせき
だいこんごうだま
だいしらたま
@ -1781,15 +1781,15 @@
まっさらプレート
クラフトキット
クラフトレシピ44
クラフトレシピ45
メガトンボール
ギガトンボール
ストレンジボール
ポケモンずかん
ふるいポエム1
ふるいポエム2
ふるいポエム3
ふるいポエム4
アルセウスフォン
ふるいポエム5
ふるいポエム6
ふるいポエム7
@ -2479,4 +2479,80 @@ Bステンレスボトル
チャデスのこな
まっさらもち
ロトりぼう
きらめくおまもり
きらめくおまもり
ふくごうきんぞく
おしゃれカードあお
ナゾノクサのはっぱ
メノクラゲのはり
ドードーのうもう
パウワウのけ
タマタマのから
バルキーのあせ
サイホーンのキバ
タッツーのスミ
エレキッドのけ
ブビィのけ
ラプラスのなみだ
ポリゴンのかけら
チョンチーのでんき
ブルーのけ
エアームドのはね
ドーブルのインク
プラスルのけ
マイナンのけ
ナックラーのから
ダンバルのツメ
ズガイドスのトゲ
タテトプスのツメ
シママのたてがみ
モグリューのツメ
モンメンのわたげ
ズルッグのあせ
チラーミィのけ
ユニランのジェル
バチュルのいと
ゴビットのかけら
ニャスパーのけ
マーイーカのスミ
ツツケラのはね
シズクモのいと
キュワワーのはな
メテノのから
マホミルのクリーム
ジュラルドンのさび
フリーザーのおやつ
サンダーのおやつ
ファイヤーのおやつ
ライコウのおやつ
エンテイのおやつ
スイクンのおやつ
ルギアのおやつ
ホウオウのおやつ
ラティアスのおやつ
ラティオスのおやつ
カイオーガのおやつ
グラードンのおやつ
レックウザのおやつ
コバルオンのおやつ
テラキオンのおやつ
ビリジオンのおやつ
レシラムのおやつ
ゼクロムのおやつ
キュレムのおやつ
ソルガレオのおやつ
ルナアーラのおやつ
ネクロズマのおやつ
ダクマのおやつ
ブリザポスのおやつ
レイスポスのおやつ
あおのディスク
メラメラピック
テラピースステラ
まぼろしモモン
ブルーベリークロス
ブルーベリーチェア
シンクロマシン
いんせき
スカーレットブック
バイオレットブック
ゼロの秘宝

View file

@ -2479,4 +2479,80 @@ B 스테인리스 보틀
차데스의가루
순백떡
로토무셀카봉
반짝이는부적
반짝이는부적
복합금속
멋쟁이카드 블루
뚜벅쵸의잎
왕눈해의가시
두두의솜털
쥬쥬의털
아라리의껍데기
배루키의땀
뿔카노의이빨
쏘드라의먹물
에레키드의털
마그비의털
라프라스의눈물
폴리곤의조각
초라기의전기
블루의털
무장조의깃털
루브도의잉크
플러시의털
마이농의털
톱치의껍데기
메탕의발톱
두개도스의가시
방패톱스의발톱
줄뮤마의갈기
두더류의손톱
소미안의솜
곤율랭의땀
치라미의털
유니란의젤
파쪼옥의실
골비람의조각
냐스퍼의털
오케이징의먹물
콕코구리의깃털
물거미의실
큐아링의꽃
메테노의껍데기
마빌크의크림
두랄루돈의녹
프리져의간식
썬더의간식
파이어의간식
라이코의간식
앤테이의간식
스이쿤의간식
루기아의간식
칠색조의간식
라티아스의간식
라티오스의간식
가이오가의간식
그란돈의간식
레쿠쟈의간식
코바르온의간식
테라키온의간식
비리디온의간식
레시라무의간식
제크로무의간식
큐레무의간식
솔가레오의간식
루나아라의간식
네크로즈마의간식
치고마의간식
블리자포스의간식
레이스포스의간식
남청의디스크
이글이글 픽
테라피스 스텔라
환상복슝
블루베리 테이블보
블루베리 체어
싱크로머신
운석
스칼렛북
바이올렛북
제로의 비보

View file

@ -2479,4 +2479,80 @@
斯魔茶的粉
净空粘糕
洛拍棒
晶耀护符
晶耀护符
复合金属
蓝之时尚名人卡
走路草的叶片
玛瑙水母的针
嘟嘟的羽绒
小海狮的毛
蛋蛋的壳
无畏小子的汗
独角犀牛的牙
墨海马的墨汁
电击怪的毛
鸭嘴宝宝的毛
拉普拉斯的眼泪
多边兽的碎片
灯笼鱼的电力
布鲁的毛
盔甲鸟的羽毛
图图犬的墨汁
正电拍拍的毛
负电拍拍的毛
大颚蚁的壳
铁哑铃的爪子
头盖龙的刺
盾甲龙的爪子
斑斑马的鬃毛
螺钉地鼠的爪子
木棉球的棉絮
滑滑小子的汗
泡沫栗鼠的毛
单卵细胞球的凝胶
电电虫的丝
泥偶小人的碎片
妙喵的毛
好啦鱿的墨汁
小笃儿的羽毛
滴蛛的丝
花疗环环的花
小陨星的壳
小仙奶的奶油
铝钢龙的锈
急冻鸟的点心
闪电鸟的点心
火焰鸟的点心
雷公的点心
炎帝的点心
水君的点心
洛奇亚的点心
凤王的点心
拉帝亚斯的点心
拉帝欧斯的点心
盖欧卡的点心
固拉多的点心
烈空坐的点心
勾帕路翁的点心
代拉基翁的点心
毕力吉翁的点心
莱希拉姆的点心
捷克罗姆的点心
酋雷姆的点心
索尔迦雷欧的点心
露奈雅拉的点心
奈克洛兹玛的点心
熊徒弟的点心
雪暴马的点心
灵幽马的点心
蓝之光碟
鸭嘴炎兽三明治签
星晶太晶碎块
幻之桃桃果
蓝莓桌巾
蓝莓椅子
同步器
陨石
朱之书
紫之书
零之秘宝

View file

@ -2479,4 +2479,80 @@
斯魔茶的粉
淨空糬
洛拍棒
晶耀護符
晶耀護符
複合金屬
藍之時尚名人卡
走路草的葉片
瑪瑙水母的針
嘟嘟的羽絨
小海獅的毛
蛋蛋的殼
無畏小子的汗
獨角犀牛的牙
墨海馬的墨汁
電擊怪的毛
鴨嘴寶寶的毛
拉普拉斯的眼淚
多邊獸的碎片
燈籠魚的電力
布魯的毛
盔甲鳥的羽毛
圖圖犬的墨汁
正電拍拍的毛
負電拍拍的毛
大顎蟻的殼
鐵啞鈴的爪子
頭蓋龍的刺
盾甲龍的爪子
斑斑馬的鬃毛
螺釘地鼠的爪子
木棉球的棉絮
滑滑小子的汗
泡沫栗鼠的毛
單卵細胞球的凝膠
電電蟲的絲
泥偶小人的碎片
妙喵的毛
好啦魷的墨汁
小篤兒的羽毛
滴蛛的絲
花療環環的花
小隕星的殼
小仙奶的奶油
鋁鋼龍的鏽
急凍鳥的點心
閃電鳥的點心
火焰鳥的點心
雷公的點心
炎帝的點心
水君的點心
洛奇亞的點心
鳳王的點心
拉帝亞斯的點心
拉帝歐斯的點心
蓋歐卡的點心
固拉多的點心
烈空坐的點心
勾帕路翁的點心
代拉基翁的點心
畢力吉翁的點心
萊希拉姆的點心
捷克羅姆的點心
酋雷姆的點心
索爾迦雷歐的點心
露奈雅拉的點心
奈克洛茲瑪的點心
熊徒弟的點心
雪暴馬的點心
靈幽馬的點心
藍之光碟
鴨嘴炎獸三明治籤
星晶太晶碎塊
幻之桃桃果
藍莓桌巾
藍莓椅子
同步器
隕石
朱之書
紫之書
零之秘寶

View file

@ -168,4 +168,34 @@ Immerwald
Wildnis von Kitakami
Infernopass
Oniyama
Kaltwasserkarst
Kaltwasserkarst
Blaubeer-Akademie
Savannen-Areal
Tera-Kuppel
Küsten-Areal
Tera-Kuppel
Canyon-Areal
Tera-Kuppel
Polar-Areal
Tera-Kuppel
Zentralplatz
Tera-Kuppel
Savannen-Platz
Tera-Kuppel
Küsten-Platz
Tera-Kuppel
Canyon-Platz
Tera-Kuppel
Polar-Platz
Tera-Kuppel
Elektrolithgrotte
Tera-Kuppel
Fackellabyrinth
Tera-Kuppel
Höhlensystem Null
Höhlensystem Null
Tera-Kuppel

View file

@ -168,4 +168,34 @@ Timeless Woods
Kitakami Wilds
Infernal Pass
Oni Mountain
Chilling Waterhead
Chilling Waterhead
Blueberry Academy
Savanna Biome
Terarium
Coastal Biome
Terarium
Canyon Biome
Terarium
Polar Biome
Terarium
Central Plaza
Terarium
Savanna Plaza
Terarium
Coastal Plaza
Terarium
Canyon Plaza
Terarium
Polar Plaza
Terarium
Chargestone Cavern
Terarium
Torchlit Labyrinth
Terarium
Area Zero Underdepths
Area Zero Underdepths
Terarium

View file

@ -168,4 +168,34 @@ Soto Sempiterno
Campos Prístinos de Noroteo
Paso del Averno
Monte Ogro
Cueva Aguafría
Cueva Aguafría
Academia Arándano
Área Árida
Biodomo
Área Costera
Biodomo
Área Escarpada
Biodomo
Área Polar
Biodomo
Plaza Cúbica
Biodomo
Plaza Árida
Biodomo
Plaza Costera
Biodomo
Plaza Escarpada
Biodomo
Plaza Polar
Biodomo
Gruta Electrorroca
Biodomo
Laberinto Lumbre
Biodomo
Caverna Abisal Cero
Caverna Abisal Cero
Biodomo

View file

@ -168,4 +168,34 @@ Forêt Ternelle
Terres Vierges de Septentria
Val Infernal
Mont Strueux
Grotte Douche Froide
Grotte Douche Froide
Institut Myrtille
Zone Savane
Terra-Dôme
Zone Côtière
Terra-Dôme
Zone Canyon
Terra-Dôme
Zone Polaire
Terra-Dôme
Poste Central
Terra-Dôme
Poste Savane
Terra-Dôme
Poste Côtier
Terra-Dôme
Poste Canyon
Terra-Dôme
Poste Polaire
Terra-Dôme
Caverne Électrolithe
Terra-Dôme
Dédale des Torches
Terra-Dôme
Abîme Zéro
Abîme Zéro
Terra-Dôme

View file

@ -168,4 +168,34 @@ Foresta Perpetua
Terre Primeve di Nordivia
Pendio Infernale
Monte Orco
Grotta Doccia Fredda
Grotta Doccia Fredda
Istituto Mirtillo
Settore Savana
Bioterarium
Settore Costa
Bioterarium
Settore Canyon
Bioterarium
Settore Ghiacciai
Bioterarium
Piazza Centrale
Bioterarium
Piazza della Savana
Bioterarium
Piazza della Costa
Bioterarium
Piazza del Canyon
Bioterarium
Piazza dei Ghiacciai
Bioterarium
Grotta Pietrelettrica
Bioterarium
Labirinto dei Lumi
Bioterarium
Grande Abisso Zero
Grande Abisso Zero
Bioterarium

View file

@ -168,4 +168,34 @@
キタカミ原生地域
地獄谷
鬼が山
ひやみず洞
ひやみず洞
ブルーベリー学園
サバンナエリア
テラリウムドーム
コーストエリア
テラリウムドーム
キャニオンエリア
テラリウムドーム
ポーラエリア
テラリウムドーム
センタースクエア
テラリウムドーム
サバンナスクエア
テラリウムドーム
コーストスクエア
テラリウムドーム
キャニオンスクエア
テラリウムドーム
ポーラスクエア
テラリウムドーム
電気石の岩窟
テラリウムドーム
ともしびの迷路
テラリウムドーム
ゼロの大空洞
ゼロの大空洞
テラリウムドーム

View file

@ -168,4 +168,34 @@
북신 원생지
지옥골
도깨비산
찬물 동굴
찬물 동굴
블루베리 아카데미
사바나 에리어
테라리움 돔
코스트 에리어
테라리움 돔
캐니언 에리어
테라리움 돔
폴라 에리어
테라리움 돔
센터 스퀘어
테라리움 돔
사바나 스퀘어
테라리움 돔
코스트 스퀘어
테라리움 돔
캐니언 스퀘어
테라리움 돔
폴라 스퀘어
테라리움 돔
전기돌의 암굴
테라리움 돔
등불의 미로
테라리움 돔
제로의 대공동
제로의 대공동
테라리움 돔

View file

@ -168,4 +168,34 @@
北上原生区
地狱谷
鬼山
冷水洞
冷水洞
蓝莓学园
草原区
生态巨蛋
海岸区
生态巨蛋
峡谷区
生态巨蛋
极地区
生态巨蛋
中心广场
生态巨蛋
草原广场
生态巨蛋
海岸广场
生态巨蛋
峡谷广场
生态巨蛋
极地广场
生态巨蛋
电气石岩窟
生态巨蛋
火光迷宫
生态巨蛋
零之大空洞
零之大空洞
生态巨蛋

View file

@ -168,4 +168,34 @@
北上原生區
地獄谷
鬼山
冷水洞
冷水洞
藍莓學園
草原區
生態巨蛋
海岸區
生態巨蛋
峽谷區
生態巨蛋
極地區
生態巨蛋
中心廣場
生態巨蛋
草原廣場
生態巨蛋
海岸廣場
生態巨蛋
峽谷廣場
生態巨蛋
極地廣場
生態巨蛋
電氣石岩窟
生態巨蛋
火光迷宮
生態巨蛋
零之大空洞
零之大空洞
生態巨蛋

View file

@ -141,6 +141,5 @@ Pokémon HOME

View file

@ -77,70 +77,69 @@ a Pokémon shop
a demo version
the Poké Ball Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

View file

@ -77,70 +77,69 @@ Establecimiento Pokémon
Versión de prueba
Poké Ball Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

View file

@ -77,70 +77,69 @@ Magasin Pokémon
Démo
Poké Ball Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

View file

@ -77,70 +77,69 @@ un negozio Pokémon
una versione demo
la Poké Ball Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

View file

@ -77,70 +77,69 @@ Pokémon GO
体験版
モンスターボール Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

View file

@ -77,70 +77,69 @@ a Pokémon shop
체험판
몬스터볼 Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

View file

@ -77,70 +77,69 @@ Pokémon GO
体验版
精灵球 Plus
Pokémon HOME
[~ 78]
[~ 79]
[~ 80]
[~ 81]
[~ 82]
[~ 83]
[~ 84]
[~ 85]
[~ 86]
[~ 87]
[~ 88]
[~ 89]
[~ 90]
[~ 91]
[~ 92]
[~ 93]
[~ 94]
[~ 95]
[~ 96]
[~ 97]
[~ 98]
[~ 99]
[~ 100]
[~ 101]
[~ 102]
[~ 103]
[~ 104]
[~ 105]
[~ 106]
[~ 107]
[~ 108]
[~ 109]
[~ 110]
[~ 111]
[~ 112]
[~ 113]
[~ 114]
[~ 115]
[~ 116]
[~ 117]
[~ 118]
[~ 119]
[~ 120]
[~ 121]
[~ 122]
[~ 123]
[~ 124]
[~ 125]
[~ 126]
[~ 127]
[~ 128]
[~ 129]
[~ 130]
[~ 131]
[~ 132]
[~ 133]
[~ 134]
[~ 135]
[~ 136]
[~ 137]
[~ 138]
[~ 139]
[~ 140]
[~ 141]
[~ 142]
[~ 143]
[~ 144]

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