mirror of
https://github.com/kwsch/PKHeX
synced 2024-12-24 11:23:11 +00:00
6441bdadd8
`Moveset` struct stores 4 moves, and exposes methods to interact with a moveset. `IndividualValueSet` stores a 6 IV template (signed). Performance impact: * Less allocating on the heap: Moves - (8 bytes member ptr, 20 bytes heap->8 bytes member) * Less allocating on the heap: IVs - (8 bytes member ptr, 28 bytes heap->8 bytes member) * No heap pointers, no need to jump to grab data. * Easy to inline logic for checking if moves are present (no linq usage with temporary collections). End result is faster ctor times, less memory used, faster program.
162 lines
8.9 KiB
C#
162 lines
8.9 KiB
C#
using static PKHeX.Core.GameVersion;
|
||
using static PKHeX.Core.EncounterGBLanguage;
|
||
using static PKHeX.Core.EncounterUtil;
|
||
|
||
namespace PKHeX.Core;
|
||
|
||
/// <summary>
|
||
/// Generation 1 Encounters
|
||
/// </summary>
|
||
internal static class Encounters1
|
||
{
|
||
internal static readonly EncounterArea1[] SlotsRD = EncounterArea1.GetAreas(Get("red", "g1"), RD);
|
||
internal static readonly EncounterArea1[] SlotsGN = EncounterArea1.GetAreas(Get("blue", "g1"), GN);
|
||
internal static readonly EncounterArea1[] SlotsYW = EncounterArea1.GetAreas(Get("yellow", "g1"), YW);
|
||
internal static readonly EncounterArea1[] SlotsBU = EncounterArea1.GetAreas(Get("blue_jp", "g1"), BU);
|
||
internal static readonly EncounterArea1[] SlotsRBY = ArrayUtil.ConcatAll(SlotsRD, SlotsGN, SlotsYW);
|
||
internal static readonly EncounterArea1[] SlotsRGBY = ArrayUtil.ConcatAll(SlotsRBY, SlotsBU);
|
||
|
||
static Encounters1() => MarkEncounterTradeNicknames(TradeGift_RBY, TradeGift_RBY_OTs);
|
||
|
||
internal static readonly EncounterStatic1[] StaticRBY =
|
||
{
|
||
// GameVersion is RBY for Pokemon with the same catch rate and initial moves in all games
|
||
// If there are any differences in moves or catch rate, they will be defined as different encounters (GameVersion)
|
||
new(001, 05, RBY), // Bulbasaur
|
||
new(004, 05, RBY), // Charmander
|
||
new(007, 05, RBY), // Squirtle
|
||
new(025, 05, YW), // Pikachu
|
||
|
||
// Game Corner
|
||
new(030, 17, RB), // Nidorina (Red Game Corner)
|
||
new(033, 17, RB), // Nidorino (Blue[EN] / Green[JP] Game Corner)
|
||
new(035, 08, RBY), // Clefairy (Red Game Corner)
|
||
new(036, 24, BU), // Clefable (Blue[JP] Game Corner)
|
||
new(037, 18, RBY), // Vulpix (Yellow Game Corner)
|
||
new(040, 22, RBY), // Wigglytuff (Yellow Game Corner)
|
||
new(063, 06, RB), // Abra (Blue[EN] / Green[JP] Game Corner)
|
||
new(116, 18, BU), // Horsea (Blue[JP] Game Corner)
|
||
new(123, 25, RBY), // Scyther (Red Game Corner)
|
||
new(127, 20, RB), // Pinsir (Blue[EN] / Green[JP] Game Corner)
|
||
new(127, 30, YW), // Pinsir (Yellow Game Corner) (Different initial moves)
|
||
new(137, 18, RB), // Porygon (Blue[EN] / Green[JP] Game Corner)
|
||
new(147, 18, RBY), // Dratini (Red Game Corner)
|
||
new(148, 30, BU), // Dragonair (Blue[JP] Game Corner)
|
||
new(025, 12, BU), // Pikachu (Blue[JP] Game Corner) (Different catch rate)
|
||
|
||
// Lower level less ideal matches; best match is from above.
|
||
// new(035, 12), // Clefairy (Blue[EN] / Green[JP] Game Corner)
|
||
// new(063, 09), // Abra (Red Game Corner)
|
||
// new(063, 08), // Abra (Blue[JP] Game Corner)
|
||
// new(063, 15), // Abra (Yellow Game Corner)
|
||
// new(123, 30), // Scyther (Yellow Game Corner)
|
||
// new(137, 22), // Porygon (Blue[JP] Game Corner)
|
||
// new(137, 26), // Porygon (Red Game Corner)
|
||
// new(137, 26), // Porygon (Yellow Game Corner)
|
||
// new(147, 24), // Dratini (Blue[EN] / Green[JP] Game Corner)
|
||
|
||
new(129, 05, RBY), // Magikarp
|
||
new(143, 30, RBY), // Snorlax
|
||
new(106, 30, RBY), // Hitmonlee
|
||
new(107, 30, RBY), // Hitmonchan
|
||
|
||
new(131, 15, RBY), // Lapras
|
||
new(138, 30, RBY), // Omanyte
|
||
new(140, 30, RBY), // Kabuto
|
||
new(142, 30, RBY), // Aerodactyl
|
||
|
||
new(144, 50, RBY), // Articuno
|
||
new(145, 50, RBY), // Zapdos
|
||
new(146, 50, RBY), // Moltres
|
||
|
||
new(150, 70, RBY), // Mewtwo
|
||
|
||
new(133, 25, RB) {Moves = new((int)Move.Tackle, (int)Move.SandAttack)}, // Eevee
|
||
new(133, 25, YW) {Moves = new((int)Move.TailWhip, (int)Move.SandAttack, (int)Move.Growl, (int)Move.QuickAttack)}, // Eevee (Different initial moves)
|
||
|
||
new(100, 40, RBY), // Voltorb (Power Plant)
|
||
new(101, 43, RBY), // Electrode (Power Plant)
|
||
|
||
// Yellow Only -- duplicate encounters with a higher level
|
||
// new(001, 10, YW), // Bulbasaur (Cerulean City)
|
||
// new(004, 10, YW), // Charmander (Route 24)
|
||
// new(007, 10, YW), // Squirtle (Vermillion City)
|
||
};
|
||
|
||
internal static readonly EncounterTrade1[] TradeGift_RBY =
|
||
{
|
||
new(122, RB, 06, 05), // Mr. Mime - Abra
|
||
new(032, RB, 02 ), // Nidoran♂ - Nidoran♀
|
||
new(030, RB, 16 ), // Nidorina - Nidorino
|
||
new(108, RB, 15 ), // Lickitung - Slowbro
|
||
new(124, RB, 15, 10), // Jynx - Poliwhirl
|
||
new(083, RB, 02 ), // Farfetch’d - Spearow
|
||
new(101, RB, 03 ), // Electrode - Raichu
|
||
new(114, RB, 13, 05), // Tangela - Venonat
|
||
new(086, RB, 28, 05), // Seel - Ponyta
|
||
|
||
new(122, YW, 08, 06), // Mr. Mime - Clefairy
|
||
new(067, YW, 16, 05) { EvolveOnTrade = true }, // Machoke - Cubone
|
||
new(051, YW, 15, 05), // Dugtrio - Lickitung
|
||
new(047, YW, 13, 05), // Parasect - Tangel
|
||
new(112, YW, 15, 10), // Rhydon - Golduck
|
||
new(087, YW, 15, 05), // Dewgong - Growlithe
|
||
new(089, YW, 25, 05), // Muk - Kangaskhan
|
||
|
||
new(122, BU, 03 ), // Mr. Mime - Jigglypuff
|
||
new(029, BU, 02 ), // Nidoran♀ - Nidoran♂
|
||
new(060, BU, 02 ), // Poliwag - Rattata
|
||
new(115, BU, 15, 10), // Kangaskhan - Rhydon
|
||
new(128, BU, 28, 18), // Tauros - Persian
|
||
new(093, BU, 28, 14) { EvolveOnTrade = true }, // Haunter - Machop->Machoke
|
||
new(083, BU, 02 ), // Farfetch’d - Wild Pidgey
|
||
new(075, BU, 16, 15) { EvolveOnTrade = true }, // Graveler - Abra->Kadabra
|
||
new(079, BU, 22, 05), // Slowpoke - Seel
|
||
new(098, BU, 15, 05), // Krabby - Growlithe
|
||
};
|
||
|
||
private const string tradeRBY = "traderby";
|
||
private static readonly string[][] TradeGift_RBY_OTs = Util.GetLanguageStrings7(tradeRBY);
|
||
|
||
private static readonly IndividualValueSet Flawless15 = new(15, 15, 15, 15, 15, 15);
|
||
private static readonly IndividualValueSet Yoshira = new(5, 10, 1, 12, 5, 5);
|
||
private static readonly string[] YoshiOT = { "YOSHIRA", "YOSHIRB", "YOSHIBA", "YOSHIBB" };
|
||
private static readonly string[] TourOT = { "LINKE", "LINKW", "LUIGE", "LUIGW", "LUIGIC", "YOSHIC" };
|
||
private static readonly string[] StadiumOT_Int = { "STADIUM", "STADE", "STADIO", "ESTADIO" };
|
||
private const string StadiumOT_JPN = "スタジアム";
|
||
|
||
internal static readonly EncounterStatic1E[] StaticEventsVC =
|
||
{
|
||
// Event Mew
|
||
new(151, 5, RBY) { IVs = Flawless15, TID = 22796, OT_Name = "GF", Language = International },
|
||
new(151, 5, RBY) { IVs = Flawless15, TID = 22796, OT_Name = "ゲーフリ" },
|
||
};
|
||
|
||
internal static readonly EncounterStatic1E[] StaticEventsGB =
|
||
{
|
||
// Stadium 1 (International)
|
||
new(001, 05, Stadium) {Moves = new(033, 045), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Bulbasaur
|
||
new(004, 05, Stadium) {Moves = new(010, 043), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Charmander
|
||
new(007, 05, Stadium) {Moves = new(033, 045), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Squirtle
|
||
new(106, 20, Stadium) {Moves = new(024, 096), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Hitmonlee
|
||
new(107, 20, Stadium) {Moves = new(004, 097), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Hitmonchan
|
||
new(133, 25, Stadium) {Moves = new(033, 039), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Eevee
|
||
new(138, 20, Stadium) {Moves = new(055, 110), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Omanyte
|
||
new(140, 20, Stadium) {Moves = new(010, 106), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Kabuto
|
||
new(054, 15, Stadium) {Moves = new(133, 010), TID = 2000, OT_Names = StadiumOT_Int, Language = International}, // Psyduck (Amnesia)
|
||
|
||
// Stadium 2 (Japan)
|
||
new(001, 05, Stadium) {Moves = new(033, 045), TID = 1999, OT_Name = StadiumOT_JPN}, // Bulbasaur
|
||
new(004, 05, Stadium) {Moves = new(010, 043), TID = 1999, OT_Name = StadiumOT_JPN}, // Charmander
|
||
new(007, 05, Stadium) {Moves = new(033, 045), TID = 1999, OT_Name = StadiumOT_JPN}, // Squirtle
|
||
new(106, 20, Stadium) {Moves = new(024, 096), TID = 1999, OT_Name = StadiumOT_JPN}, // Hitmonlee
|
||
new(107, 20, Stadium) {Moves = new(004, 097), TID = 1999, OT_Name = StadiumOT_JPN}, // Hitmonchan
|
||
new(133, 25, Stadium) {Moves = new(033, 039), TID = 1999, OT_Name = StadiumOT_JPN}, // Eevee
|
||
new(138, 20, Stadium) {Moves = new(055, 110), TID = 1999, OT_Name = StadiumOT_JPN}, // Omanyte
|
||
new(140, 20, Stadium) {Moves = new(010, 106), TID = 1999, OT_Name = StadiumOT_JPN}, // Kabuto
|
||
new(054, 15, Stadium) {Moves = new(133, 010), TID = 1999, OT_Name = StadiumOT_JPN}, // Psyduck (Amnesia)
|
||
|
||
new(151, 5, RB) {IVs = Yoshira, OT_Names = YoshiOT, Language = International }, // Yoshira Mew Events
|
||
new(151, 5, RB) {IVs = Yoshira, OT_Names = TourOT, Language = International }, // Pokémon 2000 Stadium Tour Mew
|
||
};
|
||
}
|