mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-25 21:40:21 +00:00
Encounter Templates: Searching and Creating (#3955)
We implement simple state machine iterators to iterate through every split type encounter array, and more finely control the path we iterate through. And, by using generics, we can have the compiler generate optimized code to avoid virtual calls. In addition to this, we shift away from the big-5 encounter types and not inherit from an abstract class. This allows for creating a PK* of a specific type and directly writing properties (no virtual calls). Plus we can now fine-tune each encounter type to call specific code, and not have to worry about future game encounter types bothering the generation routines.
This commit is contained in:
parent
18812550e8
commit
f632aedd15
405 changed files with 22165 additions and 13346 deletions
|
@ -31,9 +31,7 @@ public static class CatchRateApplicator
|
|||
var enc = la.EncounterMatch;
|
||||
switch (enc)
|
||||
{
|
||||
case EncounterTrade1 c:
|
||||
return c.GetInitialCatchRate();
|
||||
case EncounterStatic1E { Version: GameVersion.Stadium, Species: (int)Species.Psyduck}:
|
||||
case EncounterGift1 { Version: GameVersion.Stadium, Species: (int)Species.Psyduck }:
|
||||
return pk.Japanese ? (byte)167 : (byte)168; // Amnesia Psyduck has different catch rates depending on language
|
||||
default:
|
||||
var pt = GetPersonalTable(sav, enc);
|
||||
|
|
|
@ -64,8 +64,6 @@ public static class MoveApplicator
|
|||
pk.SetMoves(moves);
|
||||
if (maxPP && Legal.IsPPUpAvailable(pk))
|
||||
pk.SetMaximumPPUps(moves);
|
||||
else
|
||||
pk.SetMaximumPPCurrent(moves);
|
||||
pk.FixMoves();
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ public static class MoveSetApplicator
|
|||
|
||||
var clone = pk.Clone();
|
||||
clone.SetMoves(moves);
|
||||
clone.SetMaximumPPCurrent(moves);
|
||||
var newLa = new LegalityAnalysis(clone);
|
||||
|
||||
if (newLa.Valid)
|
||||
|
|
|
@ -538,7 +538,9 @@ public static class BatchEditing
|
|||
{
|
||||
if (cmd.PropertyName == nameof(PKM.IVs))
|
||||
{
|
||||
pk.SetRandomIVs();
|
||||
var la = new LegalityAnalysis(pk);
|
||||
var flawless = la.EncounterMatch is IFlawlessIVCount fc ? fc.FlawlessIVCount : 0;
|
||||
pk.SetRandomIVs(flawless);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -120,7 +120,6 @@ internal static class BatchModifications
|
|||
public static ModifyResult SetMoves(PKM pk, ReadOnlySpan<ushort> moves)
|
||||
{
|
||||
pk.SetMoves(moves);
|
||||
pk.HealPP();
|
||||
return ModifyResult.Modified;
|
||||
}
|
||||
|
||||
|
|
|
@ -403,7 +403,7 @@ public static class CommonEdits
|
|||
/// <param name="la">Precomputed optional</param>
|
||||
public static void SetDefaultNickname(this PKM pk, LegalityAnalysis la)
|
||||
{
|
||||
if (la is { Parsed: true, EncounterOriginal: EncounterTrade {HasNickname: true} t })
|
||||
if (la is { Parsed: true, EncounterOriginal: IFixedNickname {IsFixedNickname: true} t })
|
||||
pk.SetNickname(t.GetNickname(pk.Language));
|
||||
else
|
||||
pk.ClearNickname();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
@ -139,7 +139,7 @@ public sealed class TrainerDatabase
|
|||
if (pk is IRegionOrigin r)
|
||||
r.CopyRegionOrigin(result);
|
||||
else
|
||||
result.SetDefaultRegionOrigins();
|
||||
result.SetDefaultRegionOrigins(result.Language);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using static PKHeX.Core.MessageStrings;
|
||||
|
||||
|
@ -9,7 +9,7 @@ namespace PKHeX.Core;
|
|||
/// </summary>
|
||||
public static class EntitySuggestionUtil
|
||||
{
|
||||
public static List<string> GetMetLocationSuggestionMessage(PKM pk, int level, int location, int minimumLevel)
|
||||
public static List<string> GetMetLocationSuggestionMessage(PKM pk, int level, int location, int minimumLevel, IEncounterable? enc)
|
||||
{
|
||||
var suggestion = new List<string> { MsgPKMSuggestionStart };
|
||||
if (pk.Format >= 3)
|
||||
|
@ -19,6 +19,22 @@ public static class EntitySuggestionUtil
|
|||
suggestion.Add($"{MsgPKMSuggestionMetLocation} {locationName}");
|
||||
suggestion.Add($"{MsgPKMSuggestionMetLevel} {level}");
|
||||
}
|
||||
else if (pk is ICaughtData2)
|
||||
{
|
||||
var metList = GameInfo.GetLocationList(GameVersion.C, pk.Context);
|
||||
string locationName;
|
||||
if (enc?.Version.Contains(GameVersion.C) == true)
|
||||
{
|
||||
locationName = metList.First(loc => loc.Value == location).Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
locationName = metList[0].Text;
|
||||
level = 0;
|
||||
}
|
||||
suggestion.Add($"{MsgPKMSuggestionMetLocation} {locationName}");
|
||||
suggestion.Add($"{MsgPKMSuggestionMetLevel} {level}");
|
||||
}
|
||||
if (pk.CurrentLevel < minimumLevel)
|
||||
suggestion.Add($"{MsgPKMSuggestionLevel} {minimumLevel}");
|
||||
return suggestion;
|
||||
|
|
|
@ -105,5 +105,4 @@ public sealed class EventUnlocker8b : EventUnlocker<SAV8BS>
|
|||
for (int i = FASHION_START; i <= FASHION_END; i++)
|
||||
SAV.FlagWork.SetFlag(i, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,23 +12,23 @@ public sealed class ItemStorage2 : IItemStorage
|
|||
|
||||
private static ReadOnlySpan<ushort> Pouch_Items_GSC => new ushort[]
|
||||
{
|
||||
003, 008, 009,
|
||||
003, 008, 009,
|
||||
010, 011, 012, 013, 014, 015, 016, 017, 018, 019,
|
||||
020, 021, 022, 023, 024, 026, 027, 028, 029,
|
||||
030, 031, 032, 033, 034, 035, 036, 037, 038, 039,
|
||||
040, 041, 042, 043, 044, 046, 047, 048, 049,
|
||||
051, 052, 053, 057,
|
||||
051, 052, 053, 057,
|
||||
060, 062, 063, 064, 065,
|
||||
072, 073, 074, 075, 076, 077, 078, 079,
|
||||
072, 073, 074, 075, 076, 077, 078, 079,
|
||||
080, 081, 082, 083, 084, 085, 086, 087, 088, 089,
|
||||
091, 092, 093, 094, 095, 096, 097, 098, 099,
|
||||
101, 102, 103, 104, 105, 106, 107, 108, 109,
|
||||
091, 092, 093, 094, 095, 096, 097, 098, 099,
|
||||
101, 102, 103, 104, 105, 106, 107, 108, 109,
|
||||
110, 111, 112, 113, 114, 117, 118, 119,
|
||||
121, 122, 123, 124, 125, 126,
|
||||
131, 132, 138, 139,
|
||||
121, 122, 123, 124, 125, 126,
|
||||
131, 132, 138, 139,
|
||||
140, 143, 144, 146,
|
||||
150, 151, 152, 156, 158,
|
||||
163, 167, 168, 169,
|
||||
163, 167, 168, 169,
|
||||
170, 172, 173, 174,
|
||||
180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
|
||||
};
|
||||
|
@ -40,7 +40,7 @@ public sealed class ItemStorage2 : IItemStorage
|
|||
|
||||
private static ReadOnlySpan<ushort> Pouch_Key_GS => new ushort[]
|
||||
{
|
||||
7, 54, 55, 58, 59, 61, 66, 67, 68, 69, 71, 127, 128, 130, 133, 134, 175, 178,
|
||||
007, 054, 055, 058, 059, 061, 066, 067, 068, 069, 071, 127, 128, 130, 133, 134, 175, 178,
|
||||
};
|
||||
|
||||
private const int ExtraKeyCrystal = 4;
|
||||
|
@ -53,10 +53,10 @@ public sealed class ItemStorage2 : IItemStorage
|
|||
|
||||
private static ReadOnlySpan<ushort> Pouch_TMHM_GSC => new ushort[]
|
||||
{
|
||||
191, 192, 193, 194, 196, 197, 198, 199,
|
||||
191, 192, 193, 194, 196, 197, 198, 199,
|
||||
200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
|
||||
210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
|
||||
221, 222, 223, 224, 225, 226, 227, 228, 229,
|
||||
221, 222, 223, 224, 225, 226, 227, 228, 229,
|
||||
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
|
||||
240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
|
||||
};
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an Area where <see cref="PKM"/> can be encountered, which contains a Location ID and <see cref="EncounterSlot"/> data.
|
||||
/// </summary>
|
||||
public abstract record EncounterArea(GameVersion Version) : IVersion
|
||||
{
|
||||
public int Location { get; protected init; }
|
||||
public SlotType Type { get; protected init; }
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the provided met location ID matches the parameters for the area.
|
||||
/// </summary>
|
||||
/// <param name="location">Met Location ID</param>
|
||||
/// <returns>True if possibly originated from this area, false otherwise.</returns>
|
||||
public virtual bool IsMatchLocation(int location) => Location == location;
|
||||
}
|
||||
|
||||
internal interface IMemorySpeciesArea
|
||||
{
|
||||
bool HasSpecies(ushort species);
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.RBY"/> encounter area
|
||||
/// </summary>
|
||||
public sealed record EncounterArea1 : EncounterArea
|
||||
{
|
||||
public readonly int Rate;
|
||||
public readonly EncounterSlot1[] Slots;
|
||||
|
||||
public static EncounterArea1[] GetAreas(BinLinkerAccessor input, GameVersion game)
|
||||
{
|
||||
var result = new EncounterArea1[input.Length];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
result[i] = new EncounterArea1(input[i], game);
|
||||
return result;
|
||||
}
|
||||
|
||||
private EncounterArea1(ReadOnlySpan<byte> data, GameVersion game) : base(game)
|
||||
{
|
||||
Location = data[0];
|
||||
// 1 byte unused
|
||||
Type = (SlotType)data[2];
|
||||
Rate = data[3];
|
||||
|
||||
var next = data[4..];
|
||||
int count = next.Length / 4;
|
||||
var slots = new EncounterSlot1[count];
|
||||
for (int i = 0; i < slots.Length; i++)
|
||||
{
|
||||
const int size = 4;
|
||||
var entry = next.Slice(i * size, size);
|
||||
byte max = entry[3];
|
||||
byte min = entry[2];
|
||||
byte slotNum = entry[1];
|
||||
byte species = entry[0];
|
||||
slots[i] = new EncounterSlot1(this, species, min, max, slotNum);
|
||||
}
|
||||
Slots = slots;
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot1> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
(bool useCatchRate, byte rate) = pk is PK1 pk1 ? (true, pk1.Catch_Rate) : (false, (byte)0);
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.LevelMin > evo.LevelMax)
|
||||
break;
|
||||
if (slot.Form != evo.Form)
|
||||
break;
|
||||
|
||||
if (useCatchRate)
|
||||
{
|
||||
var expect = (slot.Version == GameVersion.YW ? PersonalTable.Y : PersonalTable.RB)[slot.Species].CatchRate;
|
||||
if (expect != rate && !(ParseSettings.AllowGen1Tradeback && GBRestrictions.IsTradebackCatchRate(rate)))
|
||||
break;
|
||||
}
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,128 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.GSC"/> encounter area
|
||||
/// </summary>
|
||||
public sealed record EncounterArea2 : EncounterArea
|
||||
{
|
||||
private static ReadOnlySpan<byte> BCC_SlotRates => new byte[] { 20, 20, 10, 10, 05, 05, 10, 10, 05, 05 };
|
||||
private static ReadOnlySpan<byte> RatesGrass => new byte[] { 30, 30, 20, 10, 5, 4, 1 };
|
||||
private static ReadOnlySpan<byte> RatesSurf => new byte[] { 60, 30, 10 };
|
||||
|
||||
internal readonly EncounterTime Time;
|
||||
public readonly byte Rate;
|
||||
public readonly byte[]? Rates;
|
||||
public readonly EncounterSlot2[] Slots;
|
||||
|
||||
public static EncounterArea2[] GetAreas(BinLinkerAccessor input, GameVersion game)
|
||||
{
|
||||
var result = new EncounterArea2[input.Length];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
result[i] = new EncounterArea2(input[i], game);
|
||||
return result;
|
||||
}
|
||||
|
||||
private EncounterArea2(ReadOnlySpan<byte> data, GameVersion game) : base(game)
|
||||
{
|
||||
Location = data[0];
|
||||
Time = (EncounterTime)data[1];
|
||||
var type = (Type = (SlotType)data[2]) & (SlotType)0xF;
|
||||
Rate = data[3];
|
||||
|
||||
var next = data[4..];
|
||||
if (type is > SlotType.Surf and not SlotType.BugContest) // Not Grass/Surf
|
||||
{
|
||||
const int size = 5;
|
||||
int count = next.Length / size;
|
||||
Rates = next[..count].ToArray();
|
||||
Slots = ReadSlots(next[count..], count);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int size = 4;
|
||||
int count = next.Length / size;
|
||||
Rates = null; // fetch as needed.
|
||||
Slots = ReadSlots(next, count);
|
||||
}
|
||||
}
|
||||
|
||||
private EncounterSlot2[] ReadSlots(ReadOnlySpan<byte> data, int count)
|
||||
{
|
||||
const int size = 4;
|
||||
var slots = new EncounterSlot2[count];
|
||||
for (int i = 0; i < slots.Length; i++)
|
||||
{
|
||||
var entry = data.Slice(i * size, size);
|
||||
byte max = entry[3];
|
||||
byte min = entry[2];
|
||||
byte slotNum = entry[1];
|
||||
byte species = entry[0];
|
||||
slots[i] = new EncounterSlot2(this, species, min, max, slotNum);
|
||||
}
|
||||
return slots;
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot2> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
if (pk is not ICaughtData2 {CaughtData: not 0} pk2)
|
||||
return GetSlotsFuzzy(chain);
|
||||
|
||||
if (pk2.Met_Location != Location)
|
||||
return Array.Empty<EncounterSlot2>();
|
||||
return GetSlotsSpecificLevelTime(chain, pk2.Met_TimeOfDay, pk2.Met_Level);
|
||||
}
|
||||
|
||||
private IEnumerable<EncounterSlot2> GetSlotsSpecificLevelTime(EvoCriteria[] chain, int time, int lvl)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.Form != evo.Form)
|
||||
{
|
||||
if (slot.Species != (int)Species.Unown || evo.Form >= 26) // Don't yield !? forms
|
||||
break;
|
||||
}
|
||||
|
||||
if (!slot.IsLevelWithinRange(lvl))
|
||||
break;
|
||||
|
||||
if (!Time.Contains(time))
|
||||
break;
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerable<EncounterSlot2> GetSlotsFuzzy(EvoCriteria[] chain)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.Form != evo.Form)
|
||||
{
|
||||
if (slot.Species != (int) Species.Unown || evo.Form >= 26) // Don't yield !? forms
|
||||
break;
|
||||
}
|
||||
if (slot.LevelMin > evo.LevelMax)
|
||||
break;
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.XD"/> encounter area
|
||||
/// </summary>
|
||||
public sealed record EncounterArea3XD : EncounterArea
|
||||
{
|
||||
public readonly EncounterSlot3PokeSpot[] Slots;
|
||||
|
||||
public EncounterArea3XD(int loc, ushort s0, byte l0, ushort s1, byte l1, ushort s2, byte l2) : base(GameVersion.XD)
|
||||
{
|
||||
Location = loc;
|
||||
Type = SlotType.Grass;
|
||||
Slots = new[]
|
||||
{
|
||||
new EncounterSlot3PokeSpot(this, s0, 10, l0, 0),
|
||||
new EncounterSlot3PokeSpot(this, s1, 10, l1, 1),
|
||||
new EncounterSlot3PokeSpot(this, s2, 10, l2, 2),
|
||||
};
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot3PokeSpot> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
if (pk.Format != 3) // Met Location and Met Level are changed on PK3->PK4
|
||||
return GetSlotsFuzzy(chain);
|
||||
if (pk.Met_Location != Location)
|
||||
return Array.Empty<EncounterSlot3PokeSpot>();
|
||||
return GetSlotsMatching(chain, pk.Met_Level);
|
||||
}
|
||||
|
||||
private IEnumerable<EncounterSlot3PokeSpot> GetSlotsMatching(EvoCriteria[] chain, int lvl)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.Form != evo.Form)
|
||||
break;
|
||||
if (!slot.IsLevelWithinRange(lvl))
|
||||
break;
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerable<EncounterSlot3PokeSpot> GetSlotsFuzzy(EvoCriteria[] chain)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.Form != evo.Form)
|
||||
break;
|
||||
if (slot.LevelMin > evo.LevelMax)
|
||||
break;
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.Gen4"/> encounter area
|
||||
/// </summary>
|
||||
public sealed record EncounterArea4 : EncounterArea
|
||||
{
|
||||
public readonly int Rate;
|
||||
public readonly GroundTileAllowed GroundTile;
|
||||
public readonly EncounterSlot4[] Slots;
|
||||
|
||||
public static EncounterArea4[] GetAreas(BinLinkerAccessor input, GameVersion game)
|
||||
{
|
||||
var result = new EncounterArea4[input.Length];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
result[i] = new EncounterArea4(input[i], game);
|
||||
return result;
|
||||
}
|
||||
|
||||
private EncounterArea4(ReadOnlySpan<byte> data, GameVersion game) : base(game)
|
||||
{
|
||||
Location = ReadUInt16LittleEndian(data);
|
||||
Type = (SlotType)data[2];
|
||||
Rate = data[3];
|
||||
// although GroundTilePermission flags are 32bit, none have values > 16bit.
|
||||
GroundTile = (GroundTileAllowed)ReadUInt16LittleEndian(data[4..]);
|
||||
|
||||
Slots = ReadRegularSlots(data);
|
||||
}
|
||||
|
||||
private EncounterSlot4[] ReadRegularSlots(ReadOnlySpan<byte> data)
|
||||
{
|
||||
const int size = 10;
|
||||
int count = (data.Length - 6) / size;
|
||||
var slots = new EncounterSlot4[count];
|
||||
for (int i = 0; i < slots.Length; i++)
|
||||
{
|
||||
int offset = 6 + (size * i);
|
||||
var entry = data.Slice(offset, size);
|
||||
slots[i] = ReadRegularSlot(entry);
|
||||
}
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
||||
private EncounterSlot4 ReadRegularSlot(ReadOnlySpan<byte> entry)
|
||||
{
|
||||
ushort species = ReadUInt16LittleEndian(entry);
|
||||
byte form = entry[2];
|
||||
byte slotNum = entry[3];
|
||||
byte min = entry[4];
|
||||
byte max = entry[5];
|
||||
byte mpi = entry[6];
|
||||
byte mpc = entry[7];
|
||||
byte sti = entry[8];
|
||||
byte stc = entry[9];
|
||||
return new EncounterSlot4(this, species, form, min, max, slotNum, mpi, mpc, sti, stc);
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot4> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
if (pk.Format != 4) // Met Location and Met Level are changed on PK4->PK5
|
||||
return GetSlotsFuzzy(chain);
|
||||
if (pk.Met_Location != Location)
|
||||
return Array.Empty<EncounterSlot4>();
|
||||
return GetSlotsMatching(chain, pk.Met_Level, pk);
|
||||
}
|
||||
|
||||
private IEnumerable<EncounterSlot4> GetSlotsMatching(EvoCriteria[] chain, int lvl, PKM pk)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.Form != evo.Form && slot.Species is not (int)Species.Burmy)
|
||||
{
|
||||
// Unown forms are random, not specific form IDs
|
||||
if (!slot.IsRandomUnspecificForm)
|
||||
break;
|
||||
}
|
||||
if (!slot.IsLevelWithinRange(lvl))
|
||||
break;
|
||||
|
||||
if (Type is SlotType.HoneyTree && IsInaccessibleHoneySlotLocation(slot, pk))
|
||||
break;
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsInaccessibleHoneySlotLocation(EncounterSlot4 slot, PKM pk)
|
||||
{
|
||||
// A/B/C tables, only Munchlax is a 'C' encounter, and A/B are accessible from any tree.
|
||||
// C table encounters are only available from 4 trees, which are determined by TID16/SID16 of the save file.
|
||||
if (slot.Species is not (int)Species.Munchlax)
|
||||
return false;
|
||||
|
||||
// We didn't encode the honey tree index to the encounter slot resource.
|
||||
// Check if any of the slot's location doesn't match any of the groupC trees' area location ID.
|
||||
var location = pk.Met_Location;
|
||||
var trees = SAV4Sinnoh.CalculateMunchlaxTrees(pk.TID16, pk.SID16);
|
||||
return LocationID_HoneyTree[trees.Tree1] != location
|
||||
&& LocationID_HoneyTree[trees.Tree2] != location
|
||||
&& LocationID_HoneyTree[trees.Tree3] != location
|
||||
&& LocationID_HoneyTree[trees.Tree4] != location;
|
||||
}
|
||||
|
||||
private static ReadOnlySpan<byte> LocationID_HoneyTree => new byte[]
|
||||
{
|
||||
20, // 00 Route 205 Floaroma
|
||||
20, // 01 Route 205 Eterna
|
||||
21, // 02 Route 206
|
||||
22, // 03 Route 207
|
||||
23, // 04 Route 208
|
||||
24, // 05 Route 209
|
||||
25, // 06 Route 210 Solaceon
|
||||
25, // 07 Route 210 Celestic
|
||||
26, // 08 Route 211
|
||||
27, // 09 Route 212 Hearthome
|
||||
27, // 10 Route 212 Pastoria
|
||||
28, // 11 Route 213
|
||||
29, // 12 Route 214
|
||||
30, // 13 Route 215
|
||||
33, // 14 Route 218
|
||||
36, // 15 Route 221
|
||||
37, // 16 Route 222
|
||||
47, // 17 Valley Windworks
|
||||
48, // 18 Eterna Forest
|
||||
49, // 19 Fuego Ironworks
|
||||
58, // 20 Floaroma Meadow
|
||||
};
|
||||
|
||||
// original met level cannot be inferred
|
||||
private IEnumerable<EncounterSlot4> GetSlotsFuzzy(EvoCriteria[] chain)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
if (slot.Form != evo.Form && slot.Species is not (int)Species.Burmy)
|
||||
{
|
||||
// Unown forms are random, not specific form IDs
|
||||
if (!slot.IsRandomUnspecificForm)
|
||||
break;
|
||||
}
|
||||
if (slot.LevelMin > evo.LevelMax)
|
||||
break;
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,99 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.ORAS"/> encounter area
|
||||
/// </summary>
|
||||
public sealed record EncounterArea6AO : EncounterArea, IMemorySpeciesArea
|
||||
{
|
||||
public readonly EncounterSlot6AO[] Slots;
|
||||
|
||||
public static EncounterArea6AO[] GetAreas(BinLinkerAccessor input, GameVersion game)
|
||||
{
|
||||
var result = new EncounterArea6AO[input.Length];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
result[i] = new EncounterArea6AO(input[i], game);
|
||||
return result;
|
||||
}
|
||||
|
||||
private EncounterArea6AO(ReadOnlySpan<byte> data, GameVersion game) : base(game)
|
||||
{
|
||||
Location = ReadInt16LittleEndian(data);
|
||||
Type = (SlotType)data[2];
|
||||
|
||||
Slots = ReadSlots(data);
|
||||
}
|
||||
|
||||
private EncounterSlot6AO[] ReadSlots(ReadOnlySpan<byte> data)
|
||||
{
|
||||
const int size = 4;
|
||||
int count = (data.Length - 4) / size;
|
||||
var slots = new EncounterSlot6AO[count];
|
||||
for (int i = 0; i < slots.Length; i++)
|
||||
{
|
||||
int offset = 4 + (size * i);
|
||||
var entry = data.Slice(offset, size);
|
||||
slots[i] = ReadSlot(entry);
|
||||
}
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
||||
private EncounterSlot6AO ReadSlot(ReadOnlySpan<byte> entry)
|
||||
{
|
||||
ushort species = ReadUInt16LittleEndian(entry);
|
||||
byte form = (byte)(species >> 11);
|
||||
species &= 0x3FF;
|
||||
byte min = entry[2];
|
||||
byte max = entry[3];
|
||||
return new EncounterSlot6AO(this, species, form, min, max);
|
||||
}
|
||||
|
||||
private const int FluteBoostMin = 4; // White Flute decreases levels.
|
||||
private const int FluteBoostMax = 4; // Black Flute increases levels.
|
||||
private const int DexNavBoost = 30; // Maximum DexNav chain
|
||||
|
||||
public IEnumerable<EncounterSlot6AO> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
|
||||
var boostMax = Type != SlotType.Rock_Smash ? DexNavBoost : FluteBoostMax;
|
||||
const int boostMin = FluteBoostMin;
|
||||
if (!slot.IsLevelWithinRange(pk.Met_Level, boostMin, boostMax))
|
||||
break;
|
||||
|
||||
if (slot.Form != evo.Form && !slot.IsRandomUnspecificForm)
|
||||
break;
|
||||
|
||||
// Track some metadata about how this slot was matched.
|
||||
var clone = slot with
|
||||
{
|
||||
WhiteFlute = evo.LevelMin < slot.LevelMin,
|
||||
BlackFlute = evo.LevelMin > slot.LevelMax && evo.LevelMin <= slot.LevelMax + FluteBoostMax,
|
||||
DexNav = slot.CanDexNav && (evo.LevelMin != slot.LevelMax || pk.RelearnMove1 != 0 || pk.AbilityNumber == 4),
|
||||
};
|
||||
yield return clone;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasSpecies(ushort species)
|
||||
{
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
if (slot.Species == species)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -1,112 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.GO"/> encounter area for <see cref="GameVersion.GG"/>
|
||||
/// </summary>
|
||||
public sealed record EncounterArea7g : EncounterArea, ISpeciesForm
|
||||
{
|
||||
/// <summary> Species for the area </summary>
|
||||
/// <remarks> Due to how the encounter data is packaged by PKHeX, each species-form is grouped together. </remarks>
|
||||
public ushort Species { get; }
|
||||
/// <summary> Form of the Species </summary>
|
||||
public byte Form { get; }
|
||||
public readonly EncounterSlot7GO[] Slots;
|
||||
|
||||
private EncounterArea7g(ushort species, byte form, EncounterSlot7GO[] slots) : base(GameVersion.GO)
|
||||
{
|
||||
Species = species;
|
||||
Form = form;
|
||||
Location = Locations.GO7;
|
||||
Slots = slots;
|
||||
}
|
||||
|
||||
internal static EncounterArea7g[] GetArea(BinLinkerAccessor data)
|
||||
{
|
||||
var areas = new EncounterArea7g[data.Length];
|
||||
for (int i = 0; i < areas.Length; i++)
|
||||
areas[i] = GetArea(data[i]);
|
||||
return areas;
|
||||
}
|
||||
|
||||
private const int meta = 4;
|
||||
private const int entrySize = (2 * sizeof(int)) + 2;
|
||||
|
||||
private static EncounterArea7g GetArea(ReadOnlySpan<byte> data)
|
||||
{
|
||||
var species = ReadUInt16LittleEndian(data);
|
||||
var form = data[2];
|
||||
//var import = (EntityFormatDetected)data[3];
|
||||
|
||||
data = data[meta..];
|
||||
var result = new EncounterSlot7GO[data.Length / entrySize];
|
||||
var area = new EncounterArea7g(species, form, result);
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
{
|
||||
var offset = i * entrySize;
|
||||
var entry = data.Slice(offset, entrySize);
|
||||
result[i] = ReadSlot(entry, area, species, form);
|
||||
}
|
||||
|
||||
return area;
|
||||
}
|
||||
|
||||
private static EncounterSlot7GO ReadSlot(ReadOnlySpan<byte> entry, EncounterArea7g area, ushort species, byte form)
|
||||
{
|
||||
int start = ReadInt32LittleEndian(entry);
|
||||
int end = ReadInt32LittleEndian(entry[4..]);
|
||||
var sg = entry[8];
|
||||
var shiny = (Shiny)(sg & 0x3F);
|
||||
var gender = (Gender)(sg >> 6);
|
||||
var type = (PogoType)entry[9];
|
||||
return new EncounterSlot7GO(area, species, form, start, end, shiny, gender, type);
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot7GO> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
var sf = Array.Find(chain, z => z.Species == Species && z.Form == Form);
|
||||
if (sf == default)
|
||||
return Array.Empty<EncounterSlot7GO>();
|
||||
|
||||
return GetMatchingSlots(pk, sf);
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot7GO> GetMatchingSlots(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
// Find the first chain that has slots defined.
|
||||
// Since it is possible to evolve before transferring, we only need the highest evolution species possible.
|
||||
// PoGoEncTool has already extrapolated the evolutions to separate encounters!
|
||||
var stamp = EncounterSlotGO.GetTimeStamp(pk.Met_Year + 2000, pk.Met_Month, pk.Met_Day);
|
||||
var met = Math.Max(evo.LevelMin, pk.Met_Level);
|
||||
EncounterSlot7GO? deferredIV = null;
|
||||
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
if (!slot.IsLevelWithinRange(met))
|
||||
continue;
|
||||
//if (!slot.IsBallValid(ball)) -- can have any of the in-game balls due to re-capture
|
||||
// continue;
|
||||
if (!slot.Shiny.IsValid(pk))
|
||||
continue;
|
||||
//if (slot.Gender != Gender.Random && (int) slot.Gender != pk.Gender)
|
||||
// continue;
|
||||
if (!slot.IsWithinStartEnd(stamp))
|
||||
continue;
|
||||
|
||||
if (!slot.GetIVsValid(pk))
|
||||
{
|
||||
deferredIV ??= slot;
|
||||
continue;
|
||||
}
|
||||
|
||||
yield return slot;
|
||||
}
|
||||
|
||||
if (deferredIV != null)
|
||||
yield return deferredIV;
|
||||
}
|
||||
}
|
|
@ -1,131 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.GO"/> encounter area for direct-to-HOME transfers.
|
||||
/// </summary>
|
||||
public sealed record EncounterArea8g : EncounterArea, ISpeciesForm
|
||||
{
|
||||
/// <summary> Species for the area </summary>
|
||||
/// <remarks> Due to how the encounter data is packaged by PKHeX, each species-form is grouped together. </remarks>
|
||||
public ushort Species { get; }
|
||||
/// <summary> Form of the Species </summary>
|
||||
public byte Form { get; }
|
||||
public readonly EncounterSlot8GO[] Slots;
|
||||
|
||||
private EncounterArea8g(ushort species, byte form, EncounterSlot8GO[] slots) : base(GameVersion.GO)
|
||||
{
|
||||
Species = species;
|
||||
Form = form;
|
||||
Location = Locations.GO8;
|
||||
Slots = slots;
|
||||
}
|
||||
|
||||
internal static EncounterArea8g[] GetArea(BinLinkerAccessor data)
|
||||
{
|
||||
var areas = new EncounterArea8g[data.Length];
|
||||
for (int i = 0; i < areas.Length; i++)
|
||||
areas[i] = GetArea(data[i]);
|
||||
return areas;
|
||||
}
|
||||
|
||||
private const int meta = 4;
|
||||
private const int entrySize = (2 * sizeof(int)) + 2;
|
||||
|
||||
private static EncounterArea8g GetArea(ReadOnlySpan<byte> data)
|
||||
{
|
||||
var species = ReadUInt16LittleEndian(data);
|
||||
var form = data[2];
|
||||
var import = (PogoImportFormat)data[3];
|
||||
|
||||
data = data[meta..];
|
||||
var result = new EncounterSlot8GO[data.Length / entrySize];
|
||||
var area = new EncounterArea8g(species, form, result);
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
{
|
||||
var offset = i * entrySize;
|
||||
var entry = data.Slice(offset, entrySize);
|
||||
result[i] = ReadSlot(entry, area, species, form, import);
|
||||
}
|
||||
|
||||
return area;
|
||||
}
|
||||
|
||||
private static EncounterSlot8GO ReadSlot(ReadOnlySpan<byte> entry, EncounterArea8g area, ushort species, byte form, PogoImportFormat format)
|
||||
{
|
||||
int start = ReadInt32LittleEndian(entry);
|
||||
int end = ReadInt32LittleEndian(entry[4..]);
|
||||
var sg = entry[8];
|
||||
var shiny = (Shiny)(sg & 0x3F);
|
||||
var gender = (Gender)(sg >> 6);
|
||||
var type = (PogoType)entry[9];
|
||||
return new EncounterSlot8GO(area, species, form, start, end, shiny, gender, type, format);
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot8GO> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
// Find the first chain that has slots defined.
|
||||
// Since it is possible to evolve before transferring, we only need the highest evolution species possible.
|
||||
// PoGoEncTool has already extrapolated the evolutions to separate encounters!
|
||||
var sf = FindCriteriaToIterate(pk, chain);
|
||||
if (sf == default)
|
||||
return Array.Empty<EncounterSlot8GO>();
|
||||
|
||||
return GetMatchingSlots(pk, sf);
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot8GO> GetMatchingSlots(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
var species = pk.Species;
|
||||
var ball = (Ball)pk.Ball;
|
||||
var met = Math.Max(evo.LevelMin, pk.Met_Level);
|
||||
EncounterSlot8GO? deferredIV = null;
|
||||
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
if (!slot.IsLevelWithinRange(met))
|
||||
continue;
|
||||
if (!slot.IsBallValid(ball, species, pk))
|
||||
continue;
|
||||
if (!slot.Shiny.IsValid(pk))
|
||||
continue;
|
||||
if (slot.Gender != Gender.Random && (int)slot.Gender != pk.Gender)
|
||||
continue;
|
||||
|
||||
if (!slot.GetIVsValid(pk))
|
||||
{
|
||||
deferredIV ??= slot;
|
||||
continue;
|
||||
}
|
||||
|
||||
yield return slot;
|
||||
}
|
||||
|
||||
if (deferredIV != null)
|
||||
yield return deferredIV;
|
||||
}
|
||||
|
||||
private EvoCriteria FindCriteriaToIterate(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (evo.Species != Species)
|
||||
continue;
|
||||
|
||||
if (evo.Form == Form)
|
||||
return evo;
|
||||
|
||||
// Check for form mismatches
|
||||
if (FormInfo.IsFormChangeable(Species, Form, evo.Form, EntityContext.Gen8, pk.Context))
|
||||
return evo;
|
||||
if (Species == (int)Core.Species.Burmy)
|
||||
return evo;
|
||||
break;
|
||||
}
|
||||
return default;
|
||||
}
|
||||
}
|
|
@ -1,89 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <inheritdoc cref="EncounterArea" />
|
||||
/// <summary>
|
||||
/// <see cref="GameVersion.SV"/> encounter area
|
||||
/// </summary>
|
||||
public sealed record EncounterArea9 : EncounterArea
|
||||
{
|
||||
public readonly EncounterSlot9[] Slots;
|
||||
|
||||
public ushort CrossFrom { get; }
|
||||
|
||||
public static EncounterArea9[] GetAreas(BinLinkerAccessor input, GameVersion game)
|
||||
{
|
||||
var result = new EncounterArea9[input.Length];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
result[i] = new EncounterArea9(input[i], game);
|
||||
return result;
|
||||
}
|
||||
|
||||
private EncounterArea9(ReadOnlySpan<byte> areaData, GameVersion game) : base(game)
|
||||
{
|
||||
Location = areaData[0];
|
||||
CrossFrom = areaData[2];
|
||||
Slots = ReadSlots(areaData[4..]);
|
||||
}
|
||||
|
||||
private EncounterSlot9[] ReadSlots(ReadOnlySpan<byte> areaData)
|
||||
{
|
||||
const int size = 8;
|
||||
var result = new EncounterSlot9[areaData.Length / size];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
{
|
||||
var slot = areaData[(i * size)..];
|
||||
var species = ReadUInt16LittleEndian(slot);
|
||||
var form = slot[2];
|
||||
var gender = (sbyte)slot[3];
|
||||
|
||||
var min = slot[4];
|
||||
var max = slot[5];
|
||||
var time = slot[6];
|
||||
|
||||
result[i] = new EncounterSlot9(this, species, form, min, max, gender, time);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public IEnumerable<EncounterSlot9> GetMatchingSlots(PKM pk, EvoCriteria[] chain)
|
||||
{
|
||||
var lvl = pk.Met_Level;
|
||||
foreach (var slot in Slots)
|
||||
{
|
||||
foreach (var evo in chain)
|
||||
{
|
||||
if (slot.Species != evo.Species)
|
||||
continue;
|
||||
if (slot.Form != evo.Form && !slot.IsRandomUnspecificForm && !IsFormOkayWild(slot.Species, evo.Form))
|
||||
break;
|
||||
if (slot.Gender != -1 && pk.Gender != slot.Gender)
|
||||
break;
|
||||
if (!slot.IsLevelWithinRange(lvl))
|
||||
break;
|
||||
|
||||
if (pk is ITeraType t)
|
||||
{
|
||||
var orig = (byte)t.TeraTypeOriginal;
|
||||
var pi = PersonalTable.SV[slot.Species, slot.Form];
|
||||
if (pi.Type1 != orig && pi.Type2 != orig)
|
||||
break;
|
||||
}
|
||||
|
||||
yield return slot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsFormOkayWild(ushort species, byte form) => species switch
|
||||
{
|
||||
(int)Species.Rotom => form <= 5,
|
||||
(int)Species.Deerling or (int)Species.Sawsbuck => form < 4,
|
||||
(int)Species.Oricorio => form < 4,
|
||||
_ => false,
|
||||
};
|
||||
}
|
|
@ -1,3 +1,6 @@
|
|||
namespace PKHeX.Core.Bulk;
|
||||
|
||||
/// <summary>
|
||||
/// Tuple wrapper to store a legality analysis result and the slot it was generated from.
|
||||
/// </summary>
|
||||
public sealed record CombinedReference(SlotCache Slot, LegalityAnalysis Analysis);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using static PKHeX.Core.EncountersWC3;
|
||||
|
@ -11,38 +12,69 @@ namespace PKHeX.Core;
|
|||
/// </summary>
|
||||
public static class EncounterEvent
|
||||
{
|
||||
#region Pickle Data
|
||||
/// <summary>Event Database for Generation 3</summary>
|
||||
public static IReadOnlyList<WC3> MGDB_G3 { get; private set; } = Array.Empty<WC3>();
|
||||
public static WC3[] MGDB_G3 => Encounter_WC3;
|
||||
|
||||
/// <summary>Event Database for Generation 4</summary>
|
||||
public static IReadOnlyList<PCD> MGDB_G4 { get; private set; } = Array.Empty<PCD>();
|
||||
public static readonly PCD[] MGDB_G4 = GetPCDDB(Util.GetBinaryResource("wc4.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 5</summary>
|
||||
public static IReadOnlyList<PGF> MGDB_G5 { get; private set; } = Array.Empty<PGF>();
|
||||
public static readonly PGF[] MGDB_G5 = GetPGFDB(Util.GetBinaryResource("pgf.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 6</summary>
|
||||
public static IReadOnlyList<WC6> MGDB_G6 { get; private set; } = Array.Empty<WC6>();
|
||||
public static readonly WC6[] MGDB_G6 = GetWC6DB(Util.GetBinaryResource("wc6.pkl"), Util.GetBinaryResource("wc6full.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 7</summary>
|
||||
public static IReadOnlyList<WC7> MGDB_G7 { get; private set; } = Array.Empty<WC7>();
|
||||
public static readonly WC7[] MGDB_G7 = GetWC7DB(Util.GetBinaryResource("wc7.pkl"), Util.GetBinaryResource("wc7full.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 7 <see cref="GameVersion.GG"/></summary>
|
||||
public static IReadOnlyList<WB7> MGDB_G7GG { get; private set; } = Array.Empty<WB7>();
|
||||
public static readonly WB7[] MGDB_G7GG = GetWB7DB(Util.GetBinaryResource("wb7full.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 8</summary>
|
||||
public static IReadOnlyList<WC8> MGDB_G8 { get; private set; } = Array.Empty<WC8>();
|
||||
public static readonly WC8[] MGDB_G8 = GetWC8DB(Util.GetBinaryResource("wc8.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 8 <see cref="GameVersion.PLA"/></summary>
|
||||
public static IReadOnlyList<WA8> MGDB_G8A { get; private set; } = Array.Empty<WA8>();
|
||||
public static readonly WA8[] MGDB_G8A = GetWA8DB(Util.GetBinaryResource("wa8.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 8 <see cref="GameVersion.BDSP"/></summary>
|
||||
public static IReadOnlyList<WB8> MGDB_G8B { get; private set; } = Array.Empty<WB8>();
|
||||
public static readonly WB8[] MGDB_G8B = GetWB8DB(Util.GetBinaryResource("wb8.pkl"));
|
||||
|
||||
/// <summary>Event Database for Generation 9 <see cref="GameVersion.SV"/></summary>
|
||||
public static IReadOnlyList<WC9> MGDB_G9 { get; private set; } = Array.Empty<WC9>();
|
||||
public static readonly WC9[] MGDB_G9 = GetWC9DB(Util.GetBinaryResource("wc9.pkl"));
|
||||
#endregion
|
||||
|
||||
#region Locally Loaded Data
|
||||
/// <summary>Event Database for Generation 4</summary>
|
||||
public static PCD[] EGDB_G4 { get; private set; } = Array.Empty<PCD>();
|
||||
|
||||
/// <summary>Event Database for Generation 5</summary>
|
||||
public static PGF[] EGDB_G5 { get; private set; } = Array.Empty<PGF>();
|
||||
|
||||
/// <summary>Event Database for Generation 6</summary>
|
||||
public static WC6[] EGDB_G6 { get; private set; } = Array.Empty<WC6>();
|
||||
|
||||
/// <summary>Event Database for Generation 7</summary>
|
||||
public static WC7[] EGDB_G7 { get; private set; } = Array.Empty<WC7>();
|
||||
|
||||
/// <summary>Event Database for Generation 7 <see cref="GameVersion.GG"/></summary>
|
||||
public static WB7[] EGDB_G7GG { get; private set; } = Array.Empty<WB7>();
|
||||
|
||||
/// <summary>Event Database for Generation 8</summary>
|
||||
public static WC8[] EGDB_G8 { get; private set; } = Array.Empty<WC8>();
|
||||
|
||||
/// <summary>Event Database for Generation 8 <see cref="GameVersion.PLA"/></summary>
|
||||
public static WA8[] EGDB_G8A { get; private set; } = Array.Empty<WA8>();
|
||||
|
||||
/// <summary>Event Database for Generation 8 <see cref="GameVersion.BDSP"/></summary>
|
||||
public static WB8[] EGDB_G8B { get; private set; } = Array.Empty<WB8>();
|
||||
|
||||
/// <summary>Event Database for Generation 9 <see cref="GameVersion.SV"/></summary>
|
||||
public static WC9[] EGDB_G9 { get; private set; } = Array.Empty<WC9>();
|
||||
#endregion
|
||||
|
||||
/// <summary>Indicates if the databases are initialized.</summary>
|
||||
public static bool Initialized => MGDB_G3.Count != 0;
|
||||
public static bool Initialized => MGDB_G3.Length != 0;
|
||||
|
||||
private static PCD[] GetPCDDB(ReadOnlySpan<byte> bin) => Get(bin, PCD.Size, static d => new PCD(d));
|
||||
private static PGF[] GetPGFDB(ReadOnlySpan<byte> bin) => Get(bin, PGF.Size, static d => new PGF(d));
|
||||
|
@ -61,7 +93,7 @@ public static class EncounterEvent
|
|||
// bin is a multiple of size
|
||||
// bin.Length % size == 0
|
||||
var result = new T[bin.Length / size];
|
||||
System.Diagnostics.Debug.Assert(result.Length * size == bin.Length);
|
||||
Debug.Assert(result.Length * size == bin.Length);
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
{
|
||||
var offset = i * size;
|
||||
|
@ -72,79 +104,69 @@ public static class EncounterEvent
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reloads the stored event templates.
|
||||
/// Reloads the locally stored event templates.
|
||||
/// </summary>
|
||||
/// <param name="paths">External folder(s) to source individual mystery gift template files from.</param>
|
||||
public static void RefreshMGDB(params string[] paths)
|
||||
{
|
||||
ICollection<PCD> g4 = GetPCDDB(Util.GetBinaryResource("wc4.pkl"));
|
||||
ICollection<PGF> g5 = GetPGFDB(Util.GetBinaryResource("pgf.pkl"));
|
||||
ICollection<WC6> g6 = GetWC6DB(Util.GetBinaryResource("wc6.pkl"), Util.GetBinaryResource("wc6full.pkl"));
|
||||
ICollection<WC7> g7 = GetWC7DB(Util.GetBinaryResource("wc7.pkl"), Util.GetBinaryResource("wc7full.pkl"));
|
||||
ICollection<WB7> b7 = GetWB7DB(Util.GetBinaryResource("wb7full.pkl"));
|
||||
ICollection<WC8> g8 = GetWC8DB(Util.GetBinaryResource("wc8.pkl"));
|
||||
ICollection<WB8> b8 = GetWB8DB(Util.GetBinaryResource("wb8.pkl"));
|
||||
ICollection<WA8> a8 = GetWA8DB(Util.GetBinaryResource("wa8.pkl"));
|
||||
ICollection<WC9> g9 = GetWC9DB(Util.GetBinaryResource("wc9.pkl"));
|
||||
HashSet<PCD>? g4 = null; List<PCD>? lg4 = null;
|
||||
HashSet<PGF>? g5 = null; List<PGF>? lg5 = null;
|
||||
HashSet<WC6>? g6 = null; List<WC6>? lg6 = null;
|
||||
HashSet<WC7>? g7 = null; List<WC7>? lg7 = null;
|
||||
HashSet<WB7>? b7 = null; List<WB7>? lb7 = null;
|
||||
HashSet<WC8>? g8 = null; List<WC8>? lg8 = null;
|
||||
HashSet<WB8>? b8 = null; List<WB8>? lb8 = null;
|
||||
HashSet<WA8>? a8 = null; List<WA8>? la8 = null;
|
||||
HashSet<WC9>? g9 = null; List<WC9>? lg9 = null;
|
||||
|
||||
// Load external files
|
||||
// For each file, load the gift object into the appropriate list.
|
||||
var gifts = GetGifts(paths);
|
||||
foreach (var gift in gifts)
|
||||
{
|
||||
static void AddOrExpand<T>(ref ICollection<T> arr, T obj)
|
||||
{
|
||||
if (arr is HashSet<T> h)
|
||||
h.Add(obj);
|
||||
else
|
||||
arr = new HashSet<T>(arr) {obj};
|
||||
}
|
||||
switch (gift)
|
||||
{
|
||||
case PCD pcd: AddOrExpand(ref g4, pcd); continue;
|
||||
case PGF pgf: AddOrExpand(ref g5, pgf); continue;
|
||||
case WC6 wc6: AddOrExpand(ref g6, wc6); continue;
|
||||
case WC7 wc7: AddOrExpand(ref g7, wc7); continue;
|
||||
case WB7 wb7: AddOrExpand(ref b7, wb7); continue;
|
||||
case WC8 wc8: AddOrExpand(ref g8, wc8); continue;
|
||||
case WB8 wb8: AddOrExpand(ref b8, wb8); continue;
|
||||
case WA8 wa8: AddOrExpand(ref a8, wa8); continue;
|
||||
case WC9 wc9: AddOrExpand(ref g9, wc9); continue;
|
||||
}
|
||||
}
|
||||
|
||||
static T[] SetArray<T>(ICollection<T> arr)
|
||||
{
|
||||
if (arr is T[] x)
|
||||
return x;
|
||||
|
||||
// rather than use Linq to build an array, just do it the quick way directly.
|
||||
var result = new T[arr.Count];
|
||||
arr.CopyTo(result, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
MGDB_G3 = Encounter_WC3; // hardcoded
|
||||
MGDB_G4 = SetArray(g4);
|
||||
MGDB_G5 = SetArray(g5);
|
||||
MGDB_G6 = SetArray(g6);
|
||||
MGDB_G7 = SetArray(g7);
|
||||
MGDB_G7GG = SetArray(b7);
|
||||
MGDB_G8 = SetArray(g8);
|
||||
MGDB_G8A = SetArray(a8);
|
||||
MGDB_G8B = SetArray(b8);
|
||||
MGDB_G9 = SetArray(g9);
|
||||
}
|
||||
|
||||
private static IEnumerable<MysteryGift> GetGifts(IEnumerable<string> paths)
|
||||
{
|
||||
foreach (var path in paths)
|
||||
{
|
||||
if (!Directory.Exists(path))
|
||||
continue;
|
||||
var gifts = MysteryUtil.GetGiftsFromFolder(path);
|
||||
foreach (var gift in gifts)
|
||||
yield return gift;
|
||||
{
|
||||
var added = gift switch
|
||||
{
|
||||
PCD pcd => AddOrExpand(ref g4, ref lg4, pcd, MGDB_G4),
|
||||
PGF pgf => AddOrExpand(ref g5, ref lg5, pgf, MGDB_G5),
|
||||
WC6 wc6 => AddOrExpand(ref g6, ref lg6, wc6, MGDB_G6),
|
||||
WC7 wc7 => AddOrExpand(ref g7, ref lg7, wc7, MGDB_G7),
|
||||
WB7 wb7 => AddOrExpand(ref b7, ref lb7, wb7, MGDB_G7GG),
|
||||
WC8 wc8 => AddOrExpand(ref g8, ref lg8, wc8, MGDB_G8),
|
||||
WB8 wb8 => AddOrExpand(ref b8, ref lb8, wb8, MGDB_G8B),
|
||||
WA8 wa8 => AddOrExpand(ref a8, ref la8, wa8, MGDB_G8A),
|
||||
WC9 wc9 => AddOrExpand(ref g9, ref lg9, wc9, MGDB_G9),
|
||||
_ => false,
|
||||
};
|
||||
if (!added)
|
||||
Trace.WriteLine($"Failed to add gift in {Path.GetDirectoryName(path)}: {gift.FileName}");
|
||||
|
||||
static bool AddOrExpand<T>(ref HashSet<T>? arr, ref List<T>? extra, T obj, T[] master)
|
||||
{
|
||||
arr ??= new(master);
|
||||
if (arr.Add(obj))
|
||||
(extra ??= new()).Add(obj);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
EGDB_G4 = SetArray(lg4);
|
||||
EGDB_G5 = SetArray(lg5);
|
||||
EGDB_G6 = SetArray(lg6);
|
||||
EGDB_G7 = SetArray(lg7);
|
||||
EGDB_G7GG = SetArray(lb7);
|
||||
EGDB_G8 = SetArray(lg8);
|
||||
EGDB_G8A = SetArray(la8);
|
||||
EGDB_G8B = SetArray(lb8);
|
||||
EGDB_G9 = SetArray(lg9);
|
||||
static T[] SetArray<T>(List<T>? arr)
|
||||
{
|
||||
if (arr is null)
|
||||
return Array.Empty<T>();
|
||||
return arr.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,15 +178,15 @@ public static class EncounterEvent
|
|||
{
|
||||
var regular = new IReadOnlyList<MysteryGift>[]
|
||||
{
|
||||
MGDB_G4,
|
||||
MGDB_G5,
|
||||
MGDB_G6,
|
||||
MGDB_G7,
|
||||
MGDB_G7GG,
|
||||
MGDB_G8,
|
||||
MGDB_G8A,
|
||||
MGDB_G8B,
|
||||
MGDB_G9,
|
||||
MGDB_G4, EGDB_G4,
|
||||
MGDB_G5, EGDB_G5,
|
||||
MGDB_G6, EGDB_G6,
|
||||
MGDB_G7, EGDB_G7,
|
||||
MGDB_G7GG, EGDB_G7GG,
|
||||
MGDB_G8, EGDB_G8,
|
||||
MGDB_G8A, EGDB_G8A,
|
||||
MGDB_G8B, EGDB_G8B,
|
||||
MGDB_G9, EGDB_G9,
|
||||
}.SelectMany(z => z);
|
||||
regular = regular.Where(mg => mg is { IsItem: false, IsEntity: true, Species: > 0 });
|
||||
var result = MGDB_G3.Concat(regular);
|
||||
|
|
|
@ -11,43 +11,6 @@ internal static class EncounterUtil
|
|||
internal static ReadOnlySpan<byte> Get(string resource) => Util.GetBinaryResource($"encounter_{resource}.pkl");
|
||||
internal static BinLinkerAccessor Get(string resource, string ident) => BinLinkerAccessor.Get(Get(resource), ident);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the relevant <see cref="EncounterStatic"/> objects that appear in the relevant game.
|
||||
/// </summary>
|
||||
/// <param name="source">Table of valid encounters that appear for the game pairing</param>
|
||||
/// <param name="game">Game to filter for</param>
|
||||
/// <returns>Array of encounter objects that can be encountered in the input game</returns>
|
||||
internal static T[] GetEncounters<T>(T[] source, GameVersion game) where T : IVersion
|
||||
{
|
||||
return Array.FindAll(source, s => s.Version.Contains(game));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the relevant <see cref="EncounterStatic"/> objects that appear in the relevant game.
|
||||
/// </summary>
|
||||
/// <param name="source">Table of valid encounters that appear for the game pairing</param>
|
||||
/// <param name="exclude">Game to filter out</param>
|
||||
/// <returns>Array of encounter objects that can be encountered in the input game</returns>
|
||||
internal static T[] GetEncounters<T>(T[][] source, GameVersion exclude) where T : EncounterStatic
|
||||
{
|
||||
var count = 0;
|
||||
foreach (T[] arr in source)
|
||||
count += arr.Length;
|
||||
|
||||
var temp = new T[count];
|
||||
count = 0;
|
||||
foreach (var arr in source)
|
||||
{
|
||||
foreach (var enc in arr)
|
||||
{
|
||||
if (enc.Version != exclude)
|
||||
temp[count++] = enc;
|
||||
}
|
||||
}
|
||||
Array.Resize(ref temp, count);
|
||||
return temp;
|
||||
}
|
||||
|
||||
internal static T? GetMinByLevel<T>(ReadOnlySpan<EvoCriteria> chain, IEnumerable<T> possible) where T : class, IEncounterTemplate
|
||||
{
|
||||
// MinBy grading: prefer species-form match, select lowest min level encounter.
|
||||
|
@ -75,49 +38,13 @@ internal static class EncounterUtil
|
|||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the language string lists into the <see cref="T"/> objects.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Encounter template type</typeparam>
|
||||
/// <param name="table">Trade templates</param>
|
||||
/// <param name="strings">Localization strings, grouped by language.</param>
|
||||
/// <remarks>
|
||||
/// The first half of strings in the language resource array are <see cref="EncounterTrade.Nicknames"/>
|
||||
/// The second half of strings in the language resource strings are <see cref="EncounterTrade.TrainerNames"/>
|
||||
/// </remarks>
|
||||
internal static void MarkEncounterTradeStrings<T>(T[] table, ReadOnlySpan<string[]> strings) where T : EncounterTrade
|
||||
{
|
||||
uint languageCount = (uint)strings[1].Length / 2;
|
||||
for (uint i = 0; i < languageCount; i++)
|
||||
{
|
||||
var t = table[i];
|
||||
t.Nicknames = GetNamesForLanguage(strings, i);
|
||||
t.TrainerNames = GetNamesForLanguage(strings, languageCount + i);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the language string lists into the <see cref="T"/> objects.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Encounter template type</typeparam>
|
||||
/// <param name="table">Trade templates</param>
|
||||
/// <param name="strings">Localization strings, grouped by language.</param>
|
||||
internal static void MarkEncounterTradeNicknames<T>(T[] table, ReadOnlySpan<string[]> strings) where T : EncounterTrade
|
||||
{
|
||||
for (uint i = 0; i < table.Length; i++)
|
||||
{
|
||||
var t = table[i];
|
||||
t.Nicknames = GetNamesForLanguage(strings, i);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Grabs the localized names for individual templates for all languages from the specified <see cref="index"/> of the <see cref="names"/> list.
|
||||
/// </summary>
|
||||
/// <param name="names">Arrays of strings grouped by language</param>
|
||||
/// <param name="index">Index to grab from the language arrays</param>
|
||||
/// <returns>Row of localized strings for the template.</returns>
|
||||
private static string[] GetNamesForLanguage(ReadOnlySpan<string[]> names, uint index)
|
||||
public static string[] GetNamesForLanguage(ReadOnlySpan<string[]> names, uint index)
|
||||
{
|
||||
var result = new string[names.Length];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
|
|
132
PKHeX.Core/Legality/Encounters/Data/Gen1/Encounters1.cs
Normal file
132
PKHeX.Core/Legality/Encounters/Data/Gen1/Encounters1.cs
Normal file
|
@ -0,0 +1,132 @@
|
|||
using static PKHeX.Core.GameVersion;
|
||||
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);
|
||||
|
||||
private const string tradeRBY = "traderby";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings7(tradeRBY);
|
||||
|
||||
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
|
||||
|
||||
// Game Corner
|
||||
new(035, 08, RBY), // Clefairy (Red Game Corner)
|
||||
new(037, 18, RBY), // Vulpix (Yellow Game Corner)
|
||||
new(040, 22, RBY), // Wigglytuff (Yellow Game Corner)
|
||||
new(123, 25, RBY), // Scyther (Red Game Corner)
|
||||
new(147, 18, RBY), // Dratini (Red Game Corner)
|
||||
|
||||
// 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(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 EncounterStatic1[] StaticRB =
|
||||
{
|
||||
new(030, 17, RB), // Nidorina (Red Game Corner)
|
||||
new(033, 17, RB), // Nidorino (Blue[EN] / Green[JP] Game Corner)
|
||||
new(063, 06, RB), // Abra (Blue[EN] / Green[JP] Game Corner)
|
||||
new(133, 25, RB), // Eevee
|
||||
new(127, 20, RB), // Pinsir (Blue[EN] / Green[JP] Game Corner)
|
||||
new(137, 18, RB), // Porygon (Blue[EN] / Green[JP] Game Corner)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic1[] StaticYW =
|
||||
{
|
||||
new(025, 05, YW), // Pikachu
|
||||
new(127, 30, YW), // Pinsir (Yellow Game Corner) (Different initial moves)
|
||||
new(133, 25, YW), // Eevee (Different initial moves)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic1[] StaticBU =
|
||||
{
|
||||
new(116, 18, BU), // Horsea (Blue[JP] Game Corner)
|
||||
new(036, 24, BU), // Clefable (Blue[JP] Game Corner)
|
||||
new(148, 30, BU), // Dragonair (Blue[JP] Game Corner)
|
||||
new(025, 12, BU), // Pikachu (Blue[JP] Game Corner) (Different catch rate)
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade1[] TradeGift_RB =
|
||||
{
|
||||
new(TradeNames, 00, 122, RB, 06, 05), // Mr. Mime - Abra
|
||||
new(TradeNames, 01, 032, RB, 02 ), // Nidoran♂ - Nidoran♀
|
||||
new(TradeNames, 02, 030, RB, 16 ), // Nidorina - Nidorino
|
||||
new(TradeNames, 03, 108, RB, 15 ), // Lickitung - Slowbro
|
||||
new(TradeNames, 04, 124, RB, 15, 10), // Jynx - Poliwhirl
|
||||
new(TradeNames, 05, 083, RB, 02 ), // Farfetch’d - Spearow
|
||||
new(TradeNames, 06, 101, RB, 03 ), // Electrode - Raichu
|
||||
new(TradeNames, 07, 114, RB, 13, 05), // Tangela - Venonat
|
||||
new(TradeNames, 08, 086, RB, 28, 05), // Seel - Ponyta
|
||||
};
|
||||
|
||||
public static readonly EncounterTrade1[] TradeGift_YW =
|
||||
{
|
||||
new(TradeNames, 09, 122, YW, 08, 06), // Mr. Mime - Clefairy
|
||||
new(TradeNames, 10, 067, YW, 16, 05) { EvolveOnTrade = true }, // Machoke - Cubone
|
||||
new(TradeNames, 11, 051, YW, 15, 05), // Dugtrio - Lickitung
|
||||
new(TradeNames, 12, 047, YW, 13, 05), // Parasect - Tangel
|
||||
new(TradeNames, 13, 112, YW, 15, 10), // Rhydon - Golduck
|
||||
new(TradeNames, 14, 087, YW, 15, 05), // Dewgong - Growlithe
|
||||
new(TradeNames, 15, 089, YW, 25, 05), // Muk - Kangaskhan
|
||||
};
|
||||
|
||||
public static readonly EncounterTrade1[] TradeGift_BU =
|
||||
{
|
||||
new(TradeNames, 16, 122, BU, 03 ), // Mr. Mime - Jigglypuff
|
||||
new(TradeNames, 17, 029, BU, 02 ), // Nidoran♀ - Nidoran♂
|
||||
new(TradeNames, 18, 060, BU, 02 ), // Poliwag - Rattata
|
||||
new(TradeNames, 19, 115, BU, 15, 10), // Kangaskhan - Rhydon
|
||||
new(TradeNames, 20, 128, BU, 28, 18), // Tauros - Persian
|
||||
new(TradeNames, 21, 093, BU, 28, 14) { EvolveOnTrade = true }, // Haunter - Machop->Machoke
|
||||
new(TradeNames, 22, 083, BU, 02 ), // Farfetch’d - Wild Pidgey
|
||||
new(TradeNames, 23, 075, BU, 16, 15) { EvolveOnTrade = true }, // Graveler - Abra->Kadabra
|
||||
new(TradeNames, 24, 079, BU, 22, 05), // Slowpoke - Seel
|
||||
new(TradeNames, 25, 098, BU, 15, 05), // Krabby - Growlithe
|
||||
};
|
||||
}
|
38
PKHeX.Core/Legality/Encounters/Data/Gen1/Encounters1GBEra.cs
Normal file
38
PKHeX.Core/Legality/Encounters/Data/Gen1/Encounters1GBEra.cs
Normal file
|
@ -0,0 +1,38 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
internal static class Encounters1GBEra
|
||||
{
|
||||
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 EncounterGift1[] Gifts =
|
||||
{
|
||||
// Stadium 1 (International)
|
||||
new(001, 05, GameVersion.Stadium) {Moves = new(033, 045), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Bulbasaur
|
||||
new(004, 05, GameVersion.Stadium) {Moves = new(010, 043), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Charmander
|
||||
new(007, 05, GameVersion.Stadium) {Moves = new(033, 045), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Squirtle
|
||||
new(106, 20, GameVersion.Stadium) {Moves = new(024, 096), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Hitmonlee
|
||||
new(107, 20, GameVersion.Stadium) {Moves = new(004, 097), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Hitmonchan
|
||||
new(133, 25, GameVersion.Stadium) {Moves = new(033, 039), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Eevee
|
||||
new(138, 20, GameVersion.Stadium) {Moves = new(055, 110), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Omanyte
|
||||
new(140, 20, GameVersion.Stadium) {Moves = new(010, 106), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Kabuto
|
||||
new(054, 15, GameVersion.Stadium) {Moves = new(133, 010), TID16 = 2000, OT_Names = StadiumOT_Int, Language = EncounterGBLanguage.International}, // Psyduck (Amnesia)
|
||||
|
||||
// Stadium 2 (Japan)
|
||||
new(001, 05, GameVersion.Stadium) {Moves = new(033, 045), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Bulbasaur
|
||||
new(004, 05, GameVersion.Stadium) {Moves = new(010, 043), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Charmander
|
||||
new(007, 05, GameVersion.Stadium) {Moves = new(033, 045), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Squirtle
|
||||
new(106, 20, GameVersion.Stadium) {Moves = new(024, 096), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Hitmonlee
|
||||
new(107, 20, GameVersion.Stadium) {Moves = new(004, 097), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Hitmonchan
|
||||
new(133, 25, GameVersion.Stadium) {Moves = new(033, 039), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Eevee
|
||||
new(138, 20, GameVersion.Stadium) {Moves = new(055, 110), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Omanyte
|
||||
new(140, 20, GameVersion.Stadium) {Moves = new(010, 106), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Kabuto
|
||||
new(054, 15, GameVersion.Stadium) {Moves = new(133, 010), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Psyduck (Amnesia)
|
||||
|
||||
new(151, 5, GameVersion.RB) {IVs = Yoshira, OT_Names = YoshiOT, Language = EncounterGBLanguage.International }, // Yoshira Mew Events
|
||||
new(151, 5, GameVersion.RB) {IVs = Yoshira, OT_Names = TourOT, Language = EncounterGBLanguage.International }, // Pokémon 2000 Stadium Tour Mew
|
||||
};
|
||||
}
|
13
PKHeX.Core/Legality/Encounters/Data/Gen1/Encounters1VC.cs
Normal file
13
PKHeX.Core/Legality/Encounters/Data/Gen1/Encounters1VC.cs
Normal file
|
@ -0,0 +1,13 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
internal static class Encounters1VC
|
||||
{
|
||||
private static readonly IndividualValueSet Flawless15 = new(15, 15, 15, 15, 15, 15);
|
||||
|
||||
internal static readonly EncounterGift1[] Gifts =
|
||||
{
|
||||
// Event Mew
|
||||
new(151, 5, GameVersion.RBY) { IVs = Flawless15, TID16 = 22796, OT_Name = "GF", Language = EncounterGBLanguage.International },
|
||||
new(151, 5, GameVersion.RBY) { IVs = Flawless15, TID16 = 22796, OT_Name = "ゲーフリ" },
|
||||
};
|
||||
}
|
|
@ -1,162 +0,0 @@
|
|||
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, TID16 = 22796, OT_Name = "GF", Language = International },
|
||||
new(151, 5, RBY) { IVs = Flawless15, TID16 = 22796, OT_Name = "ゲーフリ" },
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic1E[] StaticEventsGB =
|
||||
{
|
||||
// Stadium 1 (International)
|
||||
new(001, 05, Stadium) {Moves = new(033, 045), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Bulbasaur
|
||||
new(004, 05, Stadium) {Moves = new(010, 043), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Charmander
|
||||
new(007, 05, Stadium) {Moves = new(033, 045), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Squirtle
|
||||
new(106, 20, Stadium) {Moves = new(024, 096), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Hitmonlee
|
||||
new(107, 20, Stadium) {Moves = new(004, 097), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Hitmonchan
|
||||
new(133, 25, Stadium) {Moves = new(033, 039), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Eevee
|
||||
new(138, 20, Stadium) {Moves = new(055, 110), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Omanyte
|
||||
new(140, 20, Stadium) {Moves = new(010, 106), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Kabuto
|
||||
new(054, 15, Stadium) {Moves = new(133, 010), TID16 = 2000, OT_Names = StadiumOT_Int, Language = International}, // Psyduck (Amnesia)
|
||||
|
||||
// Stadium 2 (Japan)
|
||||
new(001, 05, Stadium) {Moves = new(033, 045), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Bulbasaur
|
||||
new(004, 05, Stadium) {Moves = new(010, 043), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Charmander
|
||||
new(007, 05, Stadium) {Moves = new(033, 045), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Squirtle
|
||||
new(106, 20, Stadium) {Moves = new(024, 096), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Hitmonlee
|
||||
new(107, 20, Stadium) {Moves = new(004, 097), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Hitmonchan
|
||||
new(133, 25, Stadium) {Moves = new(033, 039), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Eevee
|
||||
new(138, 20, Stadium) {Moves = new(055, 110), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Omanyte
|
||||
new(140, 20, Stadium) {Moves = new(010, 106), TID16 = 1999, OT_Name = StadiumOT_JPN}, // Kabuto
|
||||
new(054, 15, Stadium) {Moves = new(133, 010), TID16 = 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
|
||||
};
|
||||
}
|
|
@ -1,382 +0,0 @@
|
|||
using System;
|
||||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.EncounterGBLanguage;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 2 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters2
|
||||
{
|
||||
internal static readonly EncounterArea2[] SlotsGD = EncounterArea2.GetAreas(Get("gold", "g2"), GD);
|
||||
internal static readonly EncounterArea2[] SlotsSV = EncounterArea2.GetAreas(Get("silver", "g2"), SI);
|
||||
internal static readonly EncounterArea2[] SlotsC = EncounterArea2.GetAreas(Get("crystal", "g2"), C);
|
||||
|
||||
internal static readonly EncounterArea2[] SlotsGS = ArrayUtil.ConcatAll(SlotsGD, SlotsSV);
|
||||
internal static readonly EncounterArea2[] SlotsGSC = ArrayUtil.ConcatAll(SlotsGS, SlotsC);
|
||||
|
||||
static Encounters2() => MarkEncounterTradeStrings(TradeGift_GSC, TradeGift_GSC_OTs);
|
||||
|
||||
private static readonly EncounterStatic2[] Encounter_GSC_Common =
|
||||
{
|
||||
new(152, 05, GSC) { Location = 001 }, // Chikorita @ New Bark Town
|
||||
new(155, 05, GSC) { Location = 001 }, // Cyndaquil @ New Bark Town
|
||||
new(158, 05, GSC) { Location = 001 }, // Totodile @ New Bark Town
|
||||
|
||||
new(175, 05, GSC) { EggLocation = 256 }, // Togepi
|
||||
new(131, 20, GSC) { Location = 010 }, // Lapras @ Union Cave
|
||||
new(133, 20, GSC) { Location = 016 }, // Eevee @ Goldenrod City
|
||||
|
||||
new(185, 20, GSC) { Location = 020 }, // Sudowoodo @ Route 36
|
||||
new(236, 10, GSC) { Location = 035 }, // Tyrogue @ Mt. Mortar
|
||||
|
||||
new(130, 30, GSC) { Location = 038, Shiny = Shiny.Always, Gender = 0, IVs = new(0, 14, 10, 10, 10, 10) }, // Gyarados @ Lake of Rage (forcing shiny IVs result in always Male)
|
||||
new(074, 21, GSC) { Location = 036 }, // Geodude @ Rocket Hideout (Mahogany Town)
|
||||
new(109, 21, GSC) { Location = 036 }, // Koffing @ Rocket Hideout (Mahogany Town)
|
||||
new(100, 23, GSC) { Location = 036 }, // Voltorb @ Rocket Hideout (Mahogany Town)
|
||||
new(101, 23, GSC) { Location = 036 }, // Electrode @ Rocket Hideout (Mahogany Town)
|
||||
new(143, 50, GSC) { Location = 061 }, // Snorlax @ Vermillion City
|
||||
|
||||
new(211, 05, GSC) { Location = 008 }, // Qwilfish Swarm @ Route 32 (Old Rod)
|
||||
new(211, 20, GSC) { Location = 008 }, // Qwilfish Swarm @ Route 32 (Good Rod)
|
||||
new(211, 40, GSC) { Location = 008 }, // Qwilfish Swarm @ Route 32 (Super Rod)
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic2[] Encounter_GS_Exclusive =
|
||||
{
|
||||
new(245, 40, GS), // Suicune
|
||||
|
||||
new(249, 70, GD), // Lugia @ Whirl Islands
|
||||
new(249, 40, SI), // Lugia @ Whirl Islands
|
||||
|
||||
new(250, 40, GD), // Ho-Oh @ Tin Tower
|
||||
new(250, 70, SI), // Ho-Oh @ Tin Tower
|
||||
|
||||
new(137, 15, GS), // Porygon @ Celadon Game Corner
|
||||
new(133, 15, GS), // Eevee @ Celadon Game Corner
|
||||
new(122, 15, GS), // Mr. Mime @ Celadon Game Corner
|
||||
|
||||
new(063, 10, GS), // Abra @ Goldenrod City (Game Corner)
|
||||
new(147, 10, GS), // Dratini @ Goldenrod City (Game Corner)
|
||||
new(023, 10, GS), // Ekans @ Goldenrod City (Game Corner) (Gold)
|
||||
new(027, 10, GS), // Sandshrew @ Goldenrod City (Game Corner) (Silver)
|
||||
|
||||
new(223, 05, GS), // Remoraid Swarm @ Route 44 (Old Rod)
|
||||
new(223, 20, GS), // Remoraid Swarm @ Route 44 (Good Rod)
|
||||
new(223, 40, GS), // Remoraid Swarm @ Route 44 (Super Rod)
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic2[] Encounter_C_Exclusive =
|
||||
{
|
||||
new(245, 40, C) { Location = 023 }, // Suicune @ Tin Tower
|
||||
|
||||
new EncounterStatic2Odd(172) {Moves = new((int)Move.ThunderShock,(int)Move.Charm, (int)Move.DizzyPunch)}, // Pichu
|
||||
new EncounterStatic2Odd(173) {Moves = new((int)Move.Pound, (int)Move.Charm, (int)Move.DizzyPunch)}, // Cleffa
|
||||
new EncounterStatic2Odd(174) {Moves = new((int)Move.Sing, (int)Move.Charm, (int)Move.DizzyPunch)}, // Igglybuff
|
||||
new EncounterStatic2Odd(236) {Moves = new((int)Move.Tackle, (int)Move.DizzyPunch)}, // Tyrogue
|
||||
new EncounterStatic2Odd(238) {Moves = new((int)Move.Pound, (int)Move.Lick, (int)Move.DizzyPunch)}, // Smoochum
|
||||
new EncounterStatic2Odd(239) {Moves = new((int)Move.QuickAttack, (int)Move.Leer, (int)Move.DizzyPunch)}, // Elekid
|
||||
new EncounterStatic2Odd(240) {Moves = new((int)Move.Ember, (int)Move.DizzyPunch)}, // Magby
|
||||
|
||||
new(147, 15, C) { Location = 042, Moves = new((int)Move.ExtremeSpeed, (int)Move.Wrap, (int)Move.ThunderWave, (int)Move.Twister) }, // Dratini ExtremeSpeed
|
||||
|
||||
new(249, 60, C) { Location = 031 }, // Lugia @ Whirl Islands
|
||||
new(250, 60, C) { Location = 023 }, // Ho-Oh @ Tin Tower
|
||||
|
||||
new(137, 15, C) { Location = 071 }, // Porygon @ Celadon Game Corner
|
||||
new(025, 25, C) { Location = 071 }, // Pikachu @ Celadon Game Corner
|
||||
new(246, 40, C) { Location = 071 }, // Larvitar @ Celadon Game Corner
|
||||
|
||||
new(063, 05, C) { Location = 016 }, // Abra @ Goldenrod City (Game Corner)
|
||||
new(104, 15, C) { Location = 016 }, // Cubone @ Goldenrod City (Game Corner)
|
||||
new(202, 15, C) { Location = 016 }, // Wobbuffet @ Goldenrod City (Game Corner)
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic2[] Encounter_GSC_Roam =
|
||||
{
|
||||
new EncounterStatic2Roam(243, 40, GSC), // Raikou
|
||||
new EncounterStatic2Roam(244, 40, GSC), // Entei
|
||||
new EncounterStatic2Roam(245, 40, GS), // Suicune
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic2[] Encounter_GS = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_GS_Exclusive, Encounter_GSC_Roam);
|
||||
private static readonly EncounterStatic2[] Encounter_C = ArrayUtil.ConcatAll<EncounterStatic2>(Encounter_GSC_Common, Encounter_C_Exclusive, Encounter_GSC_Roam.AsSpan(0, 2));
|
||||
private static readonly EncounterStatic2[] Encounter_GSC = ArrayUtil.ConcatAll(Encounter_GSC_Common, Encounter_GS_Exclusive, Encounter_C_Exclusive, Encounter_GSC_Roam);
|
||||
|
||||
internal static readonly EncounterTrade2[] TradeGift_GSC =
|
||||
{
|
||||
new(095, 03, 48926) { Gender = 0, IVs = new(08, 09, 06, 06, 06, 06) }, // Onix @ Violet City for Bellsprout [wild]
|
||||
new(066, 05, 37460) { Gender = 1, IVs = new(12, 03, 07, 06, 06, 06) }, // Machop @ Goldenrod City for Drowzee [wild 9, hatched egg 5]
|
||||
new(100, 05, 29189) { Gender = 2, IVs = new(08, 09, 08, 08, 08, 08) }, // Voltorb @ Olivine City for Krabby [egg]
|
||||
new(112, 10, 00283) { Gender = 1, IVs = new(12, 07, 07, 06, 06, 06) }, // Rhydon @ Blackthorn City for Dragonair [wild]
|
||||
new(142, 05, 26491) { Gender = 0, IVs = new(08, 09, 06, 06, 06, 06), OTGender = 1}, // Aerodactyl @ Route 14 for Chansey [egg]
|
||||
new(078, 14, 15616) { Gender = 0, IVs = new(08, 09, 06, 06, 06, 06) }, // Rapidash @ Pewter City for Gloom [wild]
|
||||
|
||||
new(085, 10, 00283) { Gender = 1, IVs = new(12, 07, 07, 06, 06, 06), OTGender = 1}, // Dodrio @ Blackthorn City for Dragonair [wild]
|
||||
new(178, 15, 15616) { Gender = 0, IVs = new(08, 09, 06, 08, 06, 06) }, // Xatu @ Pewter City for Haunter [wild]
|
||||
new(082, 05, 50082) { Gender = 2, IVs = new(08, 09, 06, 06, 06, 06) }, // Magneton @ Power Plant for Dugtrio [traded for Lickitung]
|
||||
|
||||
new(021, 10, 01001) { Moves = new(64,45,43) }, // Spearow @ Goldenrod City for free
|
||||
new(213, 15, 00518), // Shuckle @ Cianwood City for free
|
||||
};
|
||||
|
||||
private const string tradeGSC = "tradegsc";
|
||||
private static readonly string[][] TradeGift_GSC_OTs = Util.GetLanguageStrings8(tradeGSC);
|
||||
|
||||
internal static readonly EncounterStatic2[] StaticGSC = Encounter_GSC;
|
||||
internal static readonly EncounterStatic2[] StaticGS = Encounter_GS;
|
||||
internal static readonly EncounterStatic2[] StaticC = Encounter_C;
|
||||
|
||||
internal static readonly EncounterStatic2E[] StaticEventsVC =
|
||||
{
|
||||
new(251, 30, C) { Location = 014, Language = EncounterGBLanguage.Any }, // Celebi @ Ilex Forest (VC)
|
||||
};
|
||||
|
||||
private static readonly string[] PCNYx = {"PCNYa", "PCNYb", "PCNYc", "PCNYd"};
|
||||
|
||||
internal static readonly EncounterStatic2E[] StaticEventsGB =
|
||||
{
|
||||
// Stadium 2 Baton Pass Farfetch'd
|
||||
new(083, 05, C) {Moves = new(226, 14, 97, 163), Location = 127, TID16 = 2000, OT_Name = "スタジアム"},
|
||||
new(083, 05, C) {Moves = new(226, 14, 97, 163), Location = 127, TID16 = 2000, OT_Name = "Stadium", Language = International},
|
||||
new(083, 05, C) {Moves = new(226, 14, 97, 163), Location = 127, TID16 = 2001, OT_Names = new[]{"Stade", "Stadion", "Stadio", "Estadio"}, Language = International},
|
||||
|
||||
// Stadium 2 Earthquake Gligar
|
||||
new(207, 05, C) {Moves = new(89, 68, 17), Location = 127, TID16 = 2000, OT_Name = "スタジアム"},
|
||||
new(207, 05, C) {Moves = new(89, 68, 17), Location = 127, TID16 = 2000, OT_Name = "Stadium", Language = International},
|
||||
new(207, 05, C) {Moves = new(89, 68, 17), Location = 127, TID16 = 2001, OT_Names = new[]{"Stade", "Stadion", "Stadio", "Estadio"}, Language = International},
|
||||
|
||||
//New York Pokémon Center Events
|
||||
|
||||
// Legendary Beasts (November 22 to 29, 2001)
|
||||
new(243, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Raikou
|
||||
new(244, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Entei
|
||||
new(245, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Suicune
|
||||
|
||||
// Legendary Birds (November 30 to December 6, 2001)
|
||||
new(144, 05, C) {OT_Names = PCNYx, CurrentLevel = 50, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Articuno
|
||||
new(145, 05, C) {OT_Names = PCNYx, CurrentLevel = 50, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Zapdos
|
||||
new(146, 05, C) {OT_Names = PCNYx, CurrentLevel = 50, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Moltres
|
||||
|
||||
// Christmas Week (December 21 to 27, 2001)
|
||||
new(225, 05, GS) {OT_Names = PCNYx, Moves = new(006), EggLocation = 256, EggCycles = 10, Language = International}, // Pay Day Delibird
|
||||
new(251, 05, C) {OT_Names = PCNYx, Location = 127, Language = International}, // Celebi
|
||||
|
||||
// The Initial Three Set (December 28, 2001 to January 31, 2002)
|
||||
new(001, 05, GS) {OT_Names = PCNYx, Moves = new(246), EggLocation = 256, EggCycles = 10, Language = International}, // Bulbasaur Ancientpower
|
||||
new(004, 05, GS) {OT_Names = PCNYx, Moves = new(242), EggLocation = 256, EggCycles = 10, Language = International}, // Charmander Crunch
|
||||
new(007, 05, GS) {OT_Names = PCNYx, Moves = new(192), EggLocation = 256, EggCycles = 10, Language = International}, // Squirtle Zap Cannon
|
||||
new(152, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Chikorita Petal Dance
|
||||
new(155, 05, GS) {OT_Names = PCNYx, Moves = new(038), EggLocation = 256, EggCycles = 10, Language = International}, // Cyndaquil Double-Edge
|
||||
new(158, 05, GS) {OT_Names = PCNYx, Moves = new(066), EggLocation = 256, EggCycles = 10, Language = International}, // Totodile Submission
|
||||
|
||||
// Valentine Week (February 1 to 14, 2002)
|
||||
new(029, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggLocation = 256, EggCycles = 10, Language = International}, // Nidoran (F) Lovely Kiss
|
||||
new(029, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggLocation = 256, EggCycles = 10, Language = International}, // Nidoran (F) Sweet Kiss
|
||||
new(032, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggLocation = 256, EggCycles = 10, Language = International}, // Nidoran (M) Lovely Kiss
|
||||
new(032, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggLocation = 256, EggCycles = 10, Language = International}, // Nidoran (M) Sweet Kiss
|
||||
new(069, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggLocation = 256, EggCycles = 10, Language = International}, // Bellsprout Lovely Kiss
|
||||
new(069, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggLocation = 256, EggCycles = 10, Language = International}, // Bellsprout Sweet Kiss
|
||||
|
||||
// Swarm Week (February 22 to March 14, 2002)
|
||||
new(183, 05, GS) {OT_Names = PCNYx, Moves = new(056), EggLocation = 256, EggCycles = 10, Language = International}, // Marill Hydro Pump
|
||||
new(193, 05, GS) {OT_Names = PCNYx, Moves = new(211), EggLocation = 256, EggCycles = 10, Language = International}, // Yanma Steel Wing
|
||||
new(206, 05, GS) {OT_Names = PCNYx, Moves = new(032), EggLocation = 256, EggCycles = 10, Language = International}, // Dunsparce Horn Drill
|
||||
new(209, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggLocation = 256, EggCycles = 10, Language = International}, // Snubbull Lovely Kiss
|
||||
new(211, 05, GS) {OT_Names = PCNYx, Moves = new(038), EggLocation = 256, EggCycles = 10, Language = International}, // Qwilfish Double-Edge
|
||||
new(223, 05, GS) {OT_Names = PCNYx, Moves = new(133), EggLocation = 256, EggCycles = 10, Language = International}, // Remoraid Amnesia
|
||||
|
||||
// Shiny RBY Starters (March 15 to 21, 2002)
|
||||
new(003, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Venusaur
|
||||
new(006, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Charizard
|
||||
new(009, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Blastoise
|
||||
|
||||
// Babies Week (March 22 to April 11, 2002)
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(047), EggLocation = 256, EggCycles = 10, Language = International}, // Pichu Sing
|
||||
new(173, 05, GS) {OT_Names = PCNYx, Moves = new(129), EggLocation = 256, EggCycles = 10, Language = International}, // Cleffa Swift
|
||||
new(174, 05, GS) {OT_Names = PCNYx, Moves = new(102), EggLocation = 256, EggCycles = 10, Language = International}, // Igglybuff Mimic
|
||||
new(238, 05, GS) {OT_Names = PCNYx, Moves = new(118), EggLocation = 256, EggCycles = 10, Language = International}, // Smoochum Metronome
|
||||
new(239, 05, GS) {OT_Names = PCNYx, Moves = new(228), EggLocation = 256, EggCycles = 10, Language = International}, // Elekid Pursuit
|
||||
new(240, 05, GS) {OT_Names = PCNYx, Moves = new(185), EggLocation = 256, EggCycles = 10, Language = International}, // Magby Faint Attack
|
||||
|
||||
// Spring Into Spring (April 12 to May 4, 2002)
|
||||
new(054, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Psyduck Petal Dance
|
||||
new(152, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Chikorita Petal Dance
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Pichu Petal Dance
|
||||
new(173, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Cleffa Petal Dance
|
||||
new(174, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Igglybuff Petal Dance
|
||||
new(238, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggLocation = 256, EggCycles = 10, Language = International}, // Smoochum Petal Dance
|
||||
|
||||
// Baby Weeks (May 5 to June 7, 2002)
|
||||
new(194, 05, GS) {Moves = new(187), EggLocation = 256, EggCycles = 10, Language = International}, // Wooper Belly Drum
|
||||
|
||||
// Tropical Promotion to Summer Festival 1 (June 8 to 21, 2002)
|
||||
new(060, 05, GS) {OT_Names = PCNYx, Moves = new(074), EggLocation = 256, EggCycles = 10, Language = International}, // Poliwag Growth
|
||||
new(116, 05, GS) {OT_Names = PCNYx, Moves = new(114), EggLocation = 256, EggCycles = 10, Language = International}, // Horsea Haze
|
||||
new(118, 05, GS) {OT_Names = PCNYx, Moves = new(014), EggLocation = 256, EggCycles = 10, Language = International}, // Goldeen Swords Dance
|
||||
new(129, 05, GS) {OT_Names = PCNYx, Moves = new(179), EggLocation = 256, EggCycles = 10, Language = International}, // Magikarp Reversal
|
||||
new(183, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggLocation = 256, EggCycles = 10, Language = International}, // Marill Dizzy Punch
|
||||
|
||||
// Tropical Promotion to Summer Festival 2 (July 12 to August 8, 2002)
|
||||
new(054, 05, GS) {OT_Names = PCNYx, Moves = new(161), EggLocation = 256, EggCycles = 10, Language = International}, // Psyduck Tri Attack
|
||||
new(072, 05, GS) {OT_Names = PCNYx, Moves = new(109), EggLocation = 256, EggCycles = 10, Language = International}, // Tentacool Confuse Ray
|
||||
new(131, 05, GS) {OT_Names = PCNYx, Moves = new(044), EggLocation = 256, EggCycles = 10, Language = International}, // Lapras Bite
|
||||
new(170, 05, GS) {OT_Names = PCNYx, Moves = new(113), EggLocation = 256, EggCycles = 10, Language = International}, // Chinchou Light Screen
|
||||
new(223, 05, GS) {OT_Names = PCNYx, Moves = new(054), EggLocation = 256, EggCycles = 10, Language = International}, // Remoraid Mist
|
||||
new(226, 05, GS) {OT_Names = PCNYx, Moves = new(016), EggLocation = 256, EggCycles = 10, Language = International}, // Mantine Gust
|
||||
|
||||
// Safari Week (August 9 to 29, 2002)
|
||||
new(029, 05, GS) {OT_Names = PCNYx, Moves = new(236), EggLocation = 256, EggCycles = 10, Language = International}, // Nidoran (F) Moonlight
|
||||
new(032, 05, GS) {OT_Names = PCNYx, Moves = new(234), EggLocation = 256, EggCycles = 10, Language = International}, // Nidoran (M) Morning Sun
|
||||
new(113, 05, GS) {OT_Names = PCNYx, Moves = new(230), EggLocation = 256, EggCycles = 10, Language = International}, // Chansey Sweet Scent
|
||||
new(115, 05, GS) {OT_Names = PCNYx, Moves = new(185), EggLocation = 256, EggCycles = 10, Language = International}, // Kangaskhan Faint Attack
|
||||
new(128, 05, GS) {OT_Names = PCNYx, Moves = new(098), EggLocation = 256, EggCycles = 10, Language = International}, // Tauros Quick Attack
|
||||
new(147, 05, GS) {OT_Names = PCNYx, Moves = new(056), EggLocation = 256, EggCycles = 10, Language = International}, // Dratini Hydro Pump
|
||||
|
||||
// Sky Week (August 30 to September 26, 2002)
|
||||
new(021, 05, GS) {OT_Names = PCNYx, Moves = new(049), EggLocation = 256, EggCycles = 10, Language = International}, // Spearow SonicBoom
|
||||
new(083, 05, GS) {OT_Names = PCNYx, Moves = new(210), EggLocation = 256, EggCycles = 10, Language = International}, // Farfetch'd Fury Cutter
|
||||
new(084, 05, GS) {OT_Names = PCNYx, Moves = new(067), EggLocation = 256, EggCycles = 10, Language = International}, // Doduo Low Kick
|
||||
new(177, 05, GS) {OT_Names = PCNYx, Moves = new(219), EggLocation = 256, EggCycles = 10, Language = International}, // Natu Safeguard
|
||||
new(198, 05, GS) {OT_Names = PCNYx, Moves = new(251), EggLocation = 256, EggCycles = 10, Language = International}, // Murkrow Beat Up
|
||||
new(227, 05, GS) {OT_Names = PCNYx, Moves = new(210), EggLocation = 256, EggCycles = 10, Language = International}, // Skarmory Fury Cutter
|
||||
|
||||
// The Kanto Initial Three Pokémon (September 27 to October 3, 2002)
|
||||
new(150, 05, C) {OT_Names = PCNYx, CurrentLevel = 70, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Mewtwo
|
||||
|
||||
// Power Plant Pokémon (October 4 to October 10, 2002)
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggLocation = 256, EggCycles = 10, Language = International}, // Pichu Dizzy Punch
|
||||
new(081, 05, GS) {OT_Names = PCNYx, Moves = new(097), EggLocation = 256, EggCycles = 10, Language = International}, // Magnemite Agility
|
||||
new(239, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggLocation = 256, EggCycles = 10, Language = International}, // Elekid Dizzy Punch
|
||||
new(100, 05, GS) {OT_Names = PCNYx, Moves = new(097), EggLocation = 256, EggCycles = 10, Language = International}, // Voltorb Agility
|
||||
|
||||
// Scary Face Pokémon (October 25 to October 31, 2002)
|
||||
new(173, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggLocation = 256, EggCycles = 10, Language = International}, // Cleffa Scary Face
|
||||
new(174, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggLocation = 256, EggCycles = 10, Language = International}, // Igglybuff Scary Face
|
||||
new(183, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggLocation = 256, EggCycles = 10, Language = International}, // Marill Scary Face
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggLocation = 256, EggCycles = 10, Language = International}, // Pichu Scary Face
|
||||
new(194, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggLocation = 256, EggCycles = 10, Language = International}, // Wooper Scary Face
|
||||
|
||||
// Silver Cave (November 1 to November 7, 2002)
|
||||
new(114, 05, GS) {OT_Names = PCNYx, Moves = new(235), EggLocation = 256, EggCycles = 10, Language = International}, // Tangela Synthesis
|
||||
new(077, 05, GS) {OT_Names = PCNYx, Moves = new(067), EggLocation = 256, EggCycles = 10, Language = International}, // Ponyta Low Kick
|
||||
new(200, 05, GS) {OT_Names = PCNYx, Moves = new(095), EggLocation = 256, EggCycles = 10, Language = International}, // Misdreavus Hypnosis
|
||||
new(246, 05, GS) {OT_Names = PCNYx, Moves = new(099), EggLocation = 256, EggCycles = 10, Language = International}, // Larvitar Rage
|
||||
|
||||
// Union Cave Pokémon (November 8 to 14, 2002)
|
||||
new(120, 05, GS) {OT_Names = PCNYx, Moves = new(239), EggLocation = 256, EggCycles = 10, Language = International}, // Staryu Twister
|
||||
new(098, 05, GS) {OT_Names = PCNYx, Moves = new(232), EggLocation = 256, EggCycles = 10, Language = International}, // Krabby Metal Claw
|
||||
new(095, 05, GS) {OT_Names = PCNYx, Moves = new(159), EggLocation = 256, EggCycles = 10, Language = International}, // Onix Sharpen
|
||||
new(131, 05, GS) {OT_Names = PCNYx, Moves = new(248), EggLocation = 256, EggCycles = 10, Language = International}, // Lapras Future Sight
|
||||
|
||||
// Johto Legendary (November 15 to 21, 2002)
|
||||
new(250, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Ho-Oh
|
||||
new(249, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Lugia
|
||||
|
||||
// Celebi Present SP (November 22 to 28, 2002)
|
||||
new(151, 05, C) {OT_Names = PCNYx, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Mew
|
||||
|
||||
// Psychic Type Pokémon (November 29 to December 5, 2002)
|
||||
new(063, 05, GS) {OT_Names = PCNYx, Moves = new(193), EggLocation = 256, EggCycles = 10, Language = International}, // Abra Foresight
|
||||
new(096, 05, GS) {OT_Names = PCNYx, Moves = new(133), EggLocation = 256, EggCycles = 10, Language = International}, // Drowzee Amnesia
|
||||
new(102, 05, GS) {OT_Names = PCNYx, Moves = new(230), EggLocation = 256, EggCycles = 10, Language = International}, // Exeggcute Sweet Scent
|
||||
new(122, 05, GS) {OT_Names = PCNYx, Moves = new(170), EggLocation = 256, EggCycles = 10, Language = International}, // Mr. Mime Mind Reader
|
||||
|
||||
// The Johto Initial Three Pokémon (December 6 to 12, 2002)
|
||||
new(154, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Meganium
|
||||
new(157, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Typhlosion
|
||||
new(160, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Feraligatr
|
||||
|
||||
// Rock Tunnel Pokémon (December 13 to December 19, 2002)
|
||||
new(074, 05, GS) {OT_Names = PCNYx, Moves = new(229), EggLocation = 256, EggCycles = 10, Language = International}, // Geodude Rapid Spin
|
||||
new(041, 05, GS) {OT_Names = PCNYx, Moves = new(175), EggLocation = 256, EggCycles = 10, Language = International}, // Zubat Flail
|
||||
new(066, 05, GS) {OT_Names = PCNYx, Moves = new(037), EggLocation = 256, EggCycles = 10, Language = International}, // Machop Thrash
|
||||
new(104, 05, GS) {OT_Names = PCNYx, Moves = new(031), EggLocation = 256, EggCycles = 10, Language = International}, // Cubone Fury Attack
|
||||
|
||||
// Ice Type Pokémon (December 20 to 26, 2002)
|
||||
new(225, 05, GS) {OT_Names = PCNYx, Moves = new(191), EggLocation = 256, EggCycles = 10, Language = International}, // Delibird Spikes
|
||||
new(086, 05, GS) {OT_Names = PCNYx, Moves = new(175), EggLocation = 256, EggCycles = 10, Language = International}, // Seel Flail
|
||||
new(220, 05, GS) {OT_Names = PCNYx, Moves = new(018), EggLocation = 256, EggCycles = 10, Language = International}, // Swinub Whirlwind
|
||||
|
||||
// Pokémon that Appear at Night only (December 27, 2002 to January 2, 2003)
|
||||
new(163, 05, GS) {OT_Names = PCNYx, Moves = new(101), EggLocation = 256, EggCycles = 10, Language = International}, // Hoothoot Night Shade
|
||||
new(215, 05, GS) {OT_Names = PCNYx, Moves = new(236), EggLocation = 256, EggCycles = 10, Language = International}, // Sneasel Moonlight
|
||||
|
||||
// Grass Type ( January 3 to 9, 2003)
|
||||
new(191, 05, GS) {OT_Names = PCNYx, Moves = new(150), EggLocation = 256, EggCycles = 10, Language = International}, // Sunkern Splash
|
||||
new(046, 05, GS) {OT_Names = PCNYx, Moves = new(235), EggLocation = 256, EggCycles = 10, Language = International}, // Paras Synthesis
|
||||
new(187, 05, GS) {OT_Names = PCNYx, Moves = new(097), EggLocation = 256, EggCycles = 10, Language = International}, // Hoppip Agility
|
||||
new(043, 05, GS) {OT_Names = PCNYx, Moves = new(073), EggLocation = 256, EggCycles = 10, Language = International}, // Oddish Leech Seed
|
||||
|
||||
// Normal Pokémon (January 10 to 16, 2003)
|
||||
new(161, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggLocation = 256, EggCycles = 10, Language = International}, // Sentret Dizzy Punch
|
||||
new(234, 05, GS) {OT_Names = PCNYx, Moves = new(219), EggLocation = 256, EggCycles = 10, Language = International}, // Stantler Safeguard
|
||||
new(241, 05, GS) {OT_Names = PCNYx, Moves = new(025), EggLocation = 256, EggCycles = 10, Language = International}, // Miltank Mega Kick
|
||||
new(190, 05, GS) {OT_Names = PCNYx, Moves = new(102), EggLocation = 256, EggCycles = 10, Language = International}, // Aipom Mimic
|
||||
new(108, 05, GS) {OT_Names = PCNYx, Moves = new(003), EggLocation = 256, EggCycles = 10, Language = International}, // Lickitung DoubleSlap
|
||||
new(143, 05, GS) {OT_Names = PCNYx, Moves = new(150), EggLocation = 256, EggCycles = 10, Language = International}, // Snorlax Splash
|
||||
|
||||
// Mt. Mortar (January 24 to 30, 2003)
|
||||
new(066, 05, GS) {OT_Names = PCNYx, Moves = new(206), EggLocation = 256, EggCycles = 10, Language = International}, // Machop False Swipe
|
||||
new(129, 05, GS) {OT_Names = PCNYx, Moves = new(145), EggLocation = 256, EggCycles = 10, Language = International}, // Magikarp Bubble
|
||||
new(236, 05, GS) {OT_Names = PCNYx, Moves = new(099), EggLocation = 256, EggCycles = 10, Language = International}, // Tyrogue Rage
|
||||
|
||||
// Dark Cave Pokémon (January 31 to February 6, 2003)
|
||||
new(206, 05, GS) {OT_Names = PCNYx, Moves = new(031), EggLocation = 256, EggCycles = 10, Language = International}, // Dunsparce Fury Attack
|
||||
new(202, 05, GS) {OT_Names = PCNYx, Moves = new(102), EggLocation = 256, EggCycles = 10, Language = International}, // Wobbuffet Mimic
|
||||
new(231, 05, GS) {OT_Names = PCNYx, Moves = new(071), EggLocation = 256, EggCycles = 10, Language = International}, // Phanpy Absorb
|
||||
new(216, 05, GS) {OT_Names = PCNYx, Moves = new(230), EggLocation = 256, EggCycles = 10, Language = International}, // Teddiursa Sweet Scent
|
||||
|
||||
// Valentine's Day Special (February 7 to 13, 2003)
|
||||
new(060, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggLocation = 256, EggCycles = 10, Language = International}, // Poliwag Sweet Kiss
|
||||
new(060, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggLocation = 256, EggCycles = 10, Language = International}, // Poliwag Lovely Kiss
|
||||
new(143, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggLocation = 256, EggCycles = 10, Language = International}, // Snorlax Sweet Kiss
|
||||
new(143, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggLocation = 256, EggCycles = 10, Language = International}, // Snorlax Lovely Kiss
|
||||
|
||||
// Rare Pokémon (February 21 to 27, 2003)
|
||||
new(140, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggLocation = 256, EggCycles = 10, Language = International}, // Kabuto Rock Throw
|
||||
new(138, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggLocation = 256, EggCycles = 10, Language = International}, // Omanyte Rock Throw
|
||||
new(142, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggLocation = 256, EggCycles = 10, Language = International}, // Aerodactyl Rock Throw
|
||||
new(137, 05, GS) {OT_Names = PCNYx, Moves = new(112), EggLocation = 256, EggCycles = 10, Language = International}, // Porygon Barrier
|
||||
new(133, 05, GS) {OT_Names = PCNYx, Moves = new(074), EggLocation = 256, EggCycles = 10, Language = International}, // Eevee Growth
|
||||
new(185, 05, GS) {OT_Names = PCNYx, Moves = new(164), EggLocation = 256, EggCycles = 10, Language = International}, // Sudowoodo Substitute
|
||||
|
||||
// Bug Type Pokémon (February 28 to March 6, 2003)
|
||||
new(123, 05, GS) {OT_Names = PCNYx, Moves = new(049), EggLocation = 256, EggCycles = 10, Language = International}, // Scyther SonicBoom
|
||||
new(214, 05, GS) {OT_Names = PCNYx, Moves = new(069), EggLocation = 256, EggCycles = 10, Language = International}, // Heracross Seismic Toss
|
||||
new(127, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggLocation = 256, EggCycles = 10, Language = International}, // Pinsir Rock Throw
|
||||
new(165, 05, GS) {OT_Names = PCNYx, Moves = new(112), EggLocation = 256, EggCycles = 10, Language = International}, // Ledyba Barrier
|
||||
new(167, 05, GS) {OT_Names = PCNYx, Moves = new(074), EggLocation = 256, EggCycles = 10, Language = International}, // Spinarak Growth
|
||||
new(193, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggLocation = 256, EggCycles = 10, Language = International}, // Yanma Sweet Kiss
|
||||
new(204, 05, GS) {OT_Names = PCNYx, Moves = new(164), EggLocation = 256, EggCycles = 10, Language = International}, // Pineco Substitute
|
||||
|
||||
// Japanese Only (all below)
|
||||
new(251, 30, GSC) {Location = 014}, // Celebi @ Ilex Forest (GBC)
|
||||
|
||||
// Gen2 Events
|
||||
// Egg Cycles Subject to Change. OTs for Eggs are unknown.
|
||||
// Pokémon Center Mystery Egg #1 (December 15, 2001 to January 14, 2002)
|
||||
new(152, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Chikorita Petal Dance
|
||||
new(172, 05, GSC) {Moves = new(047), EggLocation = 256, EggCycles = 10}, // Pichu Sing
|
||||
new(173, 05, GSC) {Moves = new(129), EggLocation = 256, EggCycles = 10}, // Cleffa Swift
|
||||
new(194, 05, GSC) {Moves = new(187), EggLocation = 256, EggCycles = 10}, // Wooper Belly Drum
|
||||
new(231, 05, GSC) {Moves = new(227), EggLocation = 256, EggCycles = 10}, // Phanpy Encore
|
||||
new(238, 05, GSC) {Moves = new(118), EggLocation = 256, EggCycles = 10}, // Smoochum Metronome
|
||||
|
||||
// Pokémon Center Mystery Egg #2 (March 16 to April 7, 2002)
|
||||
new(054, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Psyduck Petal Dance
|
||||
new(152, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Chikorita Petal Dance
|
||||
new(172, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Pichu Petal Dance
|
||||
new(173, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Cleffa Petal Dance
|
||||
new(174, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Igglybuff Petal Dance
|
||||
new(238, 05, GSC) {Moves = new(080), EggLocation = 256, EggCycles = 10}, // Smoochum Petal Dance
|
||||
|
||||
// Pokémon Center Mystery Egg #3 (April 27 to May 12, 2002)
|
||||
new(001, 05, GSC) {Moves = new(246), EggLocation = 256, EggCycles = 10}, // Bulbasaur Ancientpower
|
||||
new(004, 05, GSC) {Moves = new(242), EggLocation = 256, EggCycles = 10}, // Charmander Crunch
|
||||
new(158, 05, GSC) {Moves = new(066), EggLocation = 256, EggCycles = 10}, // Totodile Submission
|
||||
new(163, 05, GSC) {Moves = new(101), EggLocation = 256, EggCycles = 10}, // Hoot-Hoot Night Shade
|
||||
};
|
||||
}
|
125
PKHeX.Core/Legality/Encounters/Data/Gen2/Encounters2.cs
Normal file
125
PKHeX.Core/Legality/Encounters/Data/Gen2/Encounters2.cs
Normal file
|
@ -0,0 +1,125 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 2 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters2
|
||||
{
|
||||
internal static readonly EncounterArea2[] SlotsGD = EncounterArea2.GetAreas(Get("gold", "g2"), GD);
|
||||
internal static readonly EncounterArea2[] SlotsSI = EncounterArea2.GetAreas(Get("silver", "g2"), SI);
|
||||
internal static readonly EncounterArea2[] SlotsC = EncounterArea2.GetAreas(Get("crystal", "g2"), C);
|
||||
|
||||
private const string tradeGSC = "tradegsc";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeGSC);
|
||||
|
||||
public static readonly EncounterStatic2[] StaticGSC =
|
||||
{
|
||||
new(152, 05, GSC) { Location = 001 }, // Chikorita @ New Bark Town
|
||||
new(155, 05, GSC) { Location = 001 }, // Cyndaquil @ New Bark Town
|
||||
new(158, 05, GSC) { Location = 001 }, // Totodile @ New Bark Town
|
||||
|
||||
new(175, 05, GSC) { Location = 000, EggEncounter = true }, // Togepi
|
||||
new(131, 20, GSC) { Location = 010 }, // Lapras @ Union Cave
|
||||
new(133, 20, GSC) { Location = 016 }, // Eevee @ Goldenrod City
|
||||
|
||||
new(185, 20, GSC) { Location = 020 }, // Sudowoodo @ Route 36
|
||||
new(236, 10, GSC) { Location = 035 }, // Tyrogue @ Mt. Mortar
|
||||
|
||||
new(130, 30, GSC) { Location = 038, Shiny = Shiny.Always, Gender = 0, IVs = new(0, 14, 10, 10, 10, 10) }, // Gyarados @ Lake of Rage (forcing shiny IVs result in always Male)
|
||||
new(074, 21, GSC) { Location = 036 }, // Geodude @ Rocket Hideout (Mahogany Town)
|
||||
new(109, 21, GSC) { Location = 036 }, // Koffing @ Rocket Hideout (Mahogany Town)
|
||||
new(100, 23, GSC) { Location = 036 }, // Voltorb @ Rocket Hideout (Mahogany Town)
|
||||
new(101, 23, GSC) { Location = 036 }, // Electrode @ Rocket Hideout (Mahogany Town)
|
||||
new(143, 50, GSC) { Location = 061 }, // Snorlax @ Vermillion City
|
||||
|
||||
new(211, 05, GSC) { Location = 008 }, // Qwilfish Swarm @ Route 32 (Old Rod)
|
||||
new(211, 20, GSC) { Location = 008 }, // Qwilfish Swarm @ Route 32 (Good Rod)
|
||||
new(211, 40, GSC) { Location = 008 }, // Qwilfish Swarm @ Route 32 (Super Rod)
|
||||
|
||||
new(137, 15, GSC) { Location = 071 }, // Porygon @ Celadon Game Corner
|
||||
|
||||
// Roamer
|
||||
new(243, 40, GSC) { Location = 002 }, // Raikou
|
||||
new(244, 40, GSC) { Location = 002 }, // Entei
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic2[] StaticGS =
|
||||
{
|
||||
new(133, 15, GS) { Location = 071 }, // Eevee @ Celadon Game Corner
|
||||
new(122, 15, GS) { Location = 071 }, // Mr. Mime @ Celadon Game Corner
|
||||
|
||||
new(063, 10, GS) { Location = 016 }, // Abra @ Goldenrod City (Game Corner)
|
||||
new(147, 10, GS) { Location = 016 }, // Dratini @ Goldenrod City (Game Corner)
|
||||
new(023, 10, GS) { Location = 016 }, // Ekans @ Goldenrod City (Game Corner) (Gold)
|
||||
new(027, 10, GS) { Location = 016 }, // Sandshrew @ Goldenrod City (Game Corner) (Silver)
|
||||
|
||||
new(223, 05, GS) { Location = 039 }, // Remoraid Swarm @ Route 44 (Old Rod)
|
||||
new(223, 20, GS) { Location = 039 }, // Remoraid Swarm @ Route 44 (Good Rod)
|
||||
new(223, 40, GS) { Location = 039 }, // Remoraid Swarm @ Route 44 (Super Rod)
|
||||
|
||||
// Roamer
|
||||
new(245, 40, GS) { Location = 002 }, // Suicune
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic2[] StaticGD =
|
||||
{
|
||||
new(249, 70, GD) { Location = 031 }, // Lugia @ Whirl Islands
|
||||
new(250, 40, GD) { Location = 023 }, // Ho-Oh @ Tin Tower
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic2[] StaticSI =
|
||||
{
|
||||
new(249, 40, SI) { Location = 031 }, // Lugia @ Whirl Islands
|
||||
new(250, 70, SI) { Location = 023 }, // Ho-Oh @ Tin Tower
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic2[] StaticC =
|
||||
{
|
||||
new(245, 40, C) { Location = 023 }, // Suicune @ Tin Tower
|
||||
|
||||
new(147, 15, C) { Location = 042, Moves = new((int)Move.ExtremeSpeed, (int)Move.Wrap, (int)Move.ThunderWave, (int)Move.Twister) }, // Dratini ExtremeSpeed
|
||||
|
||||
new(249, 60, C) { Location = 031 }, // Lugia @ Whirl Islands
|
||||
new(250, 60, C) { Location = 023 }, // Ho-Oh @ Tin Tower
|
||||
|
||||
new(025, 25, C) { Location = 071 }, // Pikachu @ Celadon Game Corner
|
||||
new(246, 40, C) { Location = 071 }, // Larvitar @ Celadon Game Corner
|
||||
|
||||
new(063, 05, C) { Location = 016 }, // Abra @ Goldenrod City (Game Corner)
|
||||
new(104, 15, C) { Location = 016 }, // Cubone @ Goldenrod City (Game Corner)
|
||||
new(202, 15, C) { Location = 016 }, // Wobbuffet @ Goldenrod City (Game Corner)
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic2[] StaticOddEggC =
|
||||
{
|
||||
new(172, 05, C) { EggEncounter = true, Moves = new((int)Move.ThunderShock,(int)Move.Charm, (int)Move.DizzyPunch)}, // Pichu
|
||||
new(173, 05, C) { EggEncounter = true, Moves = new((int)Move.Pound, (int)Move.Charm, (int)Move.DizzyPunch)}, // Cleffa
|
||||
new(174, 05, C) { EggEncounter = true, Moves = new((int)Move.Sing, (int)Move.Charm, (int)Move.DizzyPunch)}, // Igglybuff
|
||||
new(236, 05, C) { EggEncounter = true, Moves = new((int)Move.Tackle, (int)Move.DizzyPunch)}, // Tyrogue
|
||||
new(238, 05, C) { EggEncounter = true, Moves = new((int)Move.Pound, (int)Move.Lick, (int)Move.DizzyPunch)}, // Smoochum
|
||||
new(239, 05, C) { EggEncounter = true, Moves = new((int)Move.QuickAttack, (int)Move.Leer, (int)Move.DizzyPunch)}, // Elekid
|
||||
new(240, 05, C) { EggEncounter = true, Moves = new((int)Move.Ember, (int)Move.DizzyPunch)}, // Magby
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic2 CelebiVC = new(251, 30, C) { Location = 014 }; // Celebi @ Ilex Forest (VC)
|
||||
|
||||
internal static readonly EncounterTrade2[] TradeGift_GSC =
|
||||
{
|
||||
new(TradeNames, 0, 095, 03, 48926) { Gender = 0, IVs = new(08, 09, 06, 06, 06, 06) }, // Onix @ Violet City for Bellsprout [wild]
|
||||
new(TradeNames, 1, 066, 05, 37460) { Gender = 1, IVs = new(12, 03, 07, 06, 06, 06) }, // Machop @ Goldenrod City for Drowzee [wild 9, hatched egg 5]
|
||||
new(TradeNames, 2, 100, 05, 29189) { Gender = 2, IVs = new(08, 09, 08, 08, 08, 08) }, // Voltorb @ Olivine City for Krabby [egg]
|
||||
new(TradeNames, 3, 112, 10, 00283) { Gender = 1, IVs = new(12, 07, 07, 06, 06, 06) }, // Rhydon @ Blackthorn City for Dragonair [wild]
|
||||
new(TradeNames, 4, 142, 05, 26491) { Gender = 0, IVs = new(08, 09, 06, 06, 06, 06), OTGender = 1}, // Aerodactyl @ Route 14 for Chansey [egg]
|
||||
new(TradeNames, 5, 078, 14, 15616) { Gender = 0, IVs = new(08, 09, 06, 06, 06, 06) }, // Rapidash @ Pewter City for Gloom [wild]
|
||||
|
||||
new(TradeNames, 6, 085, 10, 00283) { Gender = 1, IVs = new(12, 07, 07, 06, 06, 06), OTGender = 1}, // Dodrio @ Blackthorn City for Dragonair [wild]
|
||||
new(TradeNames, 7, 178, 15, 15616) { Gender = 0, IVs = new(08, 09, 06, 08, 06, 06) }, // Xatu @ Pewter City for Haunter [wild]
|
||||
new(TradeNames, 8, 082, 05, 50082) { Gender = 2, IVs = new(08, 09, 06, 06, 06, 06) }, // Magneton @ Power Plant for Dugtrio [traded for Lickitung]
|
||||
|
||||
new(TradeNames, 9, 021, 10, 01001), // Spearow @ Goldenrod City for free
|
||||
new(TradeNames, 10, 213, 15, 00518), // Shuckle @ Cianwood City for free
|
||||
};
|
||||
}
|
253
PKHeX.Core/Legality/Encounters/Data/Gen2/Encounters2GBEra.cs
Normal file
253
PKHeX.Core/Legality/Encounters/Data/Gen2/Encounters2GBEra.cs
Normal file
|
@ -0,0 +1,253 @@
|
|||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.EncounterGBLanguage;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
internal static class Encounters2GBEra
|
||||
{
|
||||
private static readonly string[] PCNYx = { "PCNYa", "PCNYb", "PCNYc", "PCNYd" };
|
||||
|
||||
internal static readonly EncounterGift2[] StaticEventsGB =
|
||||
{
|
||||
// Stadium 2 Baton Pass Farfetch'd
|
||||
new(083, 05, C) {Moves = new(226, 14, 97, 163), Location = 127, TID16 = 2000, OT_Name = "スタジアム"},
|
||||
new(083, 05, C) {Moves = new(226, 14, 97, 163), Location = 127, TID16 = 2000, OT_Name = "Stadium", Language = International},
|
||||
new(083, 05, C) {Moves = new(226, 14, 97, 163), Location = 127, TID16 = 2001, OT_Names = new[]{"Stade", "Stadion", "Stadio", "Estadio"}, Language = International},
|
||||
|
||||
// Stadium 2 Earthquake Gligar
|
||||
new(207, 05, C) {Moves = new(89, 68, 17), Location = 127, TID16 = 2000, OT_Name = "スタジアム"},
|
||||
new(207, 05, C) {Moves = new(89, 68, 17), Location = 127, TID16 = 2000, OT_Name = "Stadium", Language = International},
|
||||
new(207, 05, C) {Moves = new(89, 68, 17), Location = 127, TID16 = 2001, OT_Names = new[]{"Stade", "Stadion", "Stadio", "Estadio"}, Language = International},
|
||||
|
||||
//New York Pokémon Center Events
|
||||
|
||||
// Legendary Beasts (November 22 to 29, 2001)
|
||||
new(243, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Raikou
|
||||
new(244, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Entei
|
||||
new(245, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Suicune
|
||||
|
||||
// Legendary Birds (November 30 to December 6, 2001)
|
||||
new(144, 05, C) {OT_Names = PCNYx, CurrentLevel = 50, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Articuno
|
||||
new(145, 05, C) {OT_Names = PCNYx, CurrentLevel = 50, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Zapdos
|
||||
new(146, 05, C) {OT_Names = PCNYx, CurrentLevel = 50, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Moltres
|
||||
|
||||
// Christmas Week (December 21 to 27, 2001)
|
||||
new(225, 05, GS) {OT_Names = PCNYx, Moves = new(006), EggCycles = 10, Language = International}, // Pay Day Delibird
|
||||
new(251, 05, C) {OT_Names = PCNYx, Location = 127, Language = International}, // Celebi
|
||||
|
||||
// The Initial Three Set (December 28, 2001 to January 31, 2002)
|
||||
new(001, 05, GS) {OT_Names = PCNYx, Moves = new(246), EggCycles = 10, Language = International}, // Bulbasaur Ancientpower
|
||||
new(004, 05, GS) {OT_Names = PCNYx, Moves = new(242), EggCycles = 10, Language = International}, // Charmander Crunch
|
||||
new(007, 05, GS) {OT_Names = PCNYx, Moves = new(192), EggCycles = 10, Language = International}, // Squirtle Zap Cannon
|
||||
new(152, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Chikorita Petal Dance
|
||||
new(155, 05, GS) {OT_Names = PCNYx, Moves = new(038), EggCycles = 10, Language = International}, // Cyndaquil Double-Edge
|
||||
new(158, 05, GS) {OT_Names = PCNYx, Moves = new(066), EggCycles = 10, Language = International}, // Totodile Submission
|
||||
|
||||
// Valentine Week (February 1 to 14, 2002)
|
||||
new(029, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggCycles = 10, Language = International}, // Nidoran (F) Lovely Kiss
|
||||
new(029, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggCycles = 10, Language = International}, // Nidoran (F) Sweet Kiss
|
||||
new(032, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggCycles = 10, Language = International}, // Nidoran (M) Lovely Kiss
|
||||
new(032, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggCycles = 10, Language = International}, // Nidoran (M) Sweet Kiss
|
||||
new(069, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggCycles = 10, Language = International}, // Bellsprout Lovely Kiss
|
||||
new(069, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggCycles = 10, Language = International}, // Bellsprout Sweet Kiss
|
||||
|
||||
// Swarm Week (February 22 to March 14, 2002)
|
||||
new(183, 05, GS) {OT_Names = PCNYx, Moves = new(056), EggCycles = 10, Language = International}, // Marill Hydro Pump
|
||||
new(193, 05, GS) {OT_Names = PCNYx, Moves = new(211), EggCycles = 10, Language = International}, // Yanma Steel Wing
|
||||
new(206, 05, GS) {OT_Names = PCNYx, Moves = new(032), EggCycles = 10, Language = International}, // Dunsparce Horn Drill
|
||||
new(209, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggCycles = 10, Language = International}, // Snubbull Lovely Kiss
|
||||
new(211, 05, GS) {OT_Names = PCNYx, Moves = new(038), EggCycles = 10, Language = International}, // Qwilfish Double-Edge
|
||||
new(223, 05, GS) {OT_Names = PCNYx, Moves = new(133), EggCycles = 10, Language = International}, // Remoraid Amnesia
|
||||
|
||||
// Shiny RBY Starters (March 15 to 21, 2002)
|
||||
new(003, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Venusaur
|
||||
new(006, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Charizard
|
||||
new(009, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Blastoise
|
||||
|
||||
// Babies Week (March 22 to April 11, 2002)
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(047), EggCycles = 10, Language = International}, // Pichu Sing
|
||||
new(173, 05, GS) {OT_Names = PCNYx, Moves = new(129), EggCycles = 10, Language = International}, // Cleffa Swift
|
||||
new(174, 05, GS) {OT_Names = PCNYx, Moves = new(102), EggCycles = 10, Language = International}, // Igglybuff Mimic
|
||||
new(238, 05, GS) {OT_Names = PCNYx, Moves = new(118), EggCycles = 10, Language = International}, // Smoochum Metronome
|
||||
new(239, 05, GS) {OT_Names = PCNYx, Moves = new(228), EggCycles = 10, Language = International}, // Elekid Pursuit
|
||||
new(240, 05, GS) {OT_Names = PCNYx, Moves = new(185), EggCycles = 10, Language = International}, // Magby Faint Attack
|
||||
|
||||
// Spring Into Spring (April 12 to May 4, 2002)
|
||||
new(054, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Psyduck Petal Dance
|
||||
new(152, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Chikorita Petal Dance
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Pichu Petal Dance
|
||||
new(173, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Cleffa Petal Dance
|
||||
new(174, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Igglybuff Petal Dance
|
||||
new(238, 05, GS) {OT_Names = PCNYx, Moves = new(080), EggCycles = 10, Language = International}, // Smoochum Petal Dance
|
||||
|
||||
// Baby Weeks (May 5 to June 7, 2002)
|
||||
new(194, 05, GS) {Moves = new(187), EggCycles = 10, Language = International}, // Wooper Belly Drum
|
||||
|
||||
// Tropical Promotion to Summer Festival 1 (June 8 to 21, 2002)
|
||||
new(060, 05, GS) {OT_Names = PCNYx, Moves = new(074), EggCycles = 10, Language = International}, // Poliwag Growth
|
||||
new(116, 05, GS) {OT_Names = PCNYx, Moves = new(114), EggCycles = 10, Language = International}, // Horsea Haze
|
||||
new(118, 05, GS) {OT_Names = PCNYx, Moves = new(014), EggCycles = 10, Language = International}, // Goldeen Swords Dance
|
||||
new(129, 05, GS) {OT_Names = PCNYx, Moves = new(179), EggCycles = 10, Language = International}, // Magikarp Reversal
|
||||
new(183, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggCycles = 10, Language = International}, // Marill Dizzy Punch
|
||||
|
||||
// Tropical Promotion to Summer Festival 2 (July 12 to August 8, 2002)
|
||||
new(054, 05, GS) {OT_Names = PCNYx, Moves = new(161), EggCycles = 10, Language = International}, // Psyduck Tri Attack
|
||||
new(072, 05, GS) {OT_Names = PCNYx, Moves = new(109), EggCycles = 10, Language = International}, // Tentacool Confuse Ray
|
||||
new(131, 05, GS) {OT_Names = PCNYx, Moves = new(044), EggCycles = 10, Language = International}, // Lapras Bite
|
||||
new(170, 05, GS) {OT_Names = PCNYx, Moves = new(113), EggCycles = 10, Language = International}, // Chinchou Light Screen
|
||||
new(223, 05, GS) {OT_Names = PCNYx, Moves = new(054), EggCycles = 10, Language = International}, // Remoraid Mist
|
||||
new(226, 05, GS) {OT_Names = PCNYx, Moves = new(016), EggCycles = 10, Language = International}, // Mantine Gust
|
||||
|
||||
// Safari Week (August 9 to 29, 2002)
|
||||
new(029, 05, GS) {OT_Names = PCNYx, Moves = new(236), EggCycles = 10, Language = International}, // Nidoran (F) Moonlight
|
||||
new(032, 05, GS) {OT_Names = PCNYx, Moves = new(234), EggCycles = 10, Language = International}, // Nidoran (M) Morning Sun
|
||||
new(113, 05, GS) {OT_Names = PCNYx, Moves = new(230), EggCycles = 10, Language = International}, // Chansey Sweet Scent
|
||||
new(115, 05, GS) {OT_Names = PCNYx, Moves = new(185), EggCycles = 10, Language = International}, // Kangaskhan Faint Attack
|
||||
new(128, 05, GS) {OT_Names = PCNYx, Moves = new(098), EggCycles = 10, Language = International}, // Tauros Quick Attack
|
||||
new(147, 05, GS) {OT_Names = PCNYx, Moves = new(056), EggCycles = 10, Language = International}, // Dratini Hydro Pump
|
||||
|
||||
// Sky Week (August 30 to September 26, 2002)
|
||||
new(021, 05, GS) {OT_Names = PCNYx, Moves = new(049), EggCycles = 10, Language = International}, // Spearow SonicBoom
|
||||
new(083, 05, GS) {OT_Names = PCNYx, Moves = new(210), EggCycles = 10, Language = International}, // Farfetch'd Fury Cutter
|
||||
new(084, 05, GS) {OT_Names = PCNYx, Moves = new(067), EggCycles = 10, Language = International}, // Doduo Low Kick
|
||||
new(177, 05, GS) {OT_Names = PCNYx, Moves = new(219), EggCycles = 10, Language = International}, // Natu Safeguard
|
||||
new(198, 05, GS) {OT_Names = PCNYx, Moves = new(251), EggCycles = 10, Language = International}, // Murkrow Beat Up
|
||||
new(227, 05, GS) {OT_Names = PCNYx, Moves = new(210), EggCycles = 10, Language = International}, // Skarmory Fury Cutter
|
||||
|
||||
// The Kanto Initial Three Pokémon (September 27 to October 3, 2002)
|
||||
new(150, 05, C) {OT_Names = PCNYx, CurrentLevel = 70, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Mewtwo
|
||||
|
||||
// Power Plant Pokémon (October 4 to October 10, 2002)
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggCycles = 10, Language = International}, // Pichu Dizzy Punch
|
||||
new(081, 05, GS) {OT_Names = PCNYx, Moves = new(097), EggCycles = 10, Language = International}, // Magnemite Agility
|
||||
new(239, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggCycles = 10, Language = International}, // Elekid Dizzy Punch
|
||||
new(100, 05, GS) {OT_Names = PCNYx, Moves = new(097), EggCycles = 10, Language = International}, // Voltorb Agility
|
||||
|
||||
// Scary Face Pokémon (October 25 to October 31, 2002)
|
||||
new(173, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggCycles = 10, Language = International}, // Cleffa Scary Face
|
||||
new(174, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggCycles = 10, Language = International}, // Igglybuff Scary Face
|
||||
new(183, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggCycles = 10, Language = International}, // Marill Scary Face
|
||||
new(172, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggCycles = 10, Language = International}, // Pichu Scary Face
|
||||
new(194, 05, GS) {OT_Names = PCNYx, Moves = new(184), EggCycles = 10, Language = International}, // Wooper Scary Face
|
||||
|
||||
// Silver Cave (November 1 to November 7, 2002)
|
||||
new(114, 05, GS) {OT_Names = PCNYx, Moves = new(235), EggCycles = 10, Language = International}, // Tangela Synthesis
|
||||
new(077, 05, GS) {OT_Names = PCNYx, Moves = new(067), EggCycles = 10, Language = International}, // Ponyta Low Kick
|
||||
new(200, 05, GS) {OT_Names = PCNYx, Moves = new(095), EggCycles = 10, Language = International}, // Misdreavus Hypnosis
|
||||
new(246, 05, GS) {OT_Names = PCNYx, Moves = new(099), EggCycles = 10, Language = International}, // Larvitar Rage
|
||||
|
||||
// Union Cave Pokémon (November 8 to 14, 2002)
|
||||
new(120, 05, GS) {OT_Names = PCNYx, Moves = new(239), EggCycles = 10, Language = International}, // Staryu Twister
|
||||
new(098, 05, GS) {OT_Names = PCNYx, Moves = new(232), EggCycles = 10, Language = International}, // Krabby Metal Claw
|
||||
new(095, 05, GS) {OT_Names = PCNYx, Moves = new(159), EggCycles = 10, Language = International}, // Onix Sharpen
|
||||
new(131, 05, GS) {OT_Names = PCNYx, Moves = new(248), EggCycles = 10, Language = International}, // Lapras Future Sight
|
||||
|
||||
// Johto Legendary (November 15 to 21, 2002)
|
||||
new(250, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Ho-Oh
|
||||
new(249, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Lugia
|
||||
|
||||
// Celebi Present SP (November 22 to 28, 2002)
|
||||
new(151, 05, C) {OT_Names = PCNYx, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Mew
|
||||
|
||||
// Psychic Type Pokémon (November 29 to December 5, 2002)
|
||||
new(063, 05, GS) {OT_Names = PCNYx, Moves = new(193), EggCycles = 10, Language = International}, // Abra Foresight
|
||||
new(096, 05, GS) {OT_Names = PCNYx, Moves = new(133), EggCycles = 10, Language = International}, // Drowzee Amnesia
|
||||
new(102, 05, GS) {OT_Names = PCNYx, Moves = new(230), EggCycles = 10, Language = International}, // Exeggcute Sweet Scent
|
||||
new(122, 05, GS) {OT_Names = PCNYx, Moves = new(170), EggCycles = 10, Language = International}, // Mr. Mime Mind Reader
|
||||
|
||||
// The Johto Initial Three Pokémon (December 6 to 12, 2002)
|
||||
new(154, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Meganium
|
||||
new(157, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Typhlosion
|
||||
new(160, 05, C) {OT_Names = PCNYx, CurrentLevel = 40, Shiny = Shiny.Always, Location = 127, Language = International}, // Shiny Feraligatr
|
||||
|
||||
// Rock Tunnel Pokémon (December 13 to December 19, 2002)
|
||||
new(074, 05, GS) {OT_Names = PCNYx, Moves = new(229), EggCycles = 10, Language = International}, // Geodude Rapid Spin
|
||||
new(041, 05, GS) {OT_Names = PCNYx, Moves = new(175), EggCycles = 10, Language = International}, // Zubat Flail
|
||||
new(066, 05, GS) {OT_Names = PCNYx, Moves = new(037), EggCycles = 10, Language = International}, // Machop Thrash
|
||||
new(104, 05, GS) {OT_Names = PCNYx, Moves = new(031), EggCycles = 10, Language = International}, // Cubone Fury Attack
|
||||
|
||||
// Ice Type Pokémon (December 20 to 26, 2002)
|
||||
new(225, 05, GS) {OT_Names = PCNYx, Moves = new(191), EggCycles = 10, Language = International}, // Delibird Spikes
|
||||
new(086, 05, GS) {OT_Names = PCNYx, Moves = new(175), EggCycles = 10, Language = International}, // Seel Flail
|
||||
new(220, 05, GS) {OT_Names = PCNYx, Moves = new(018), EggCycles = 10, Language = International}, // Swinub Whirlwind
|
||||
|
||||
// Pokémon that Appear at Night only (December 27, 2002 to January 2, 2003)
|
||||
new(163, 05, GS) {OT_Names = PCNYx, Moves = new(101), EggCycles = 10, Language = International}, // Hoothoot Night Shade
|
||||
new(215, 05, GS) {OT_Names = PCNYx, Moves = new(236), EggCycles = 10, Language = International}, // Sneasel Moonlight
|
||||
|
||||
// Grass Type ( January 3 to 9, 2003)
|
||||
new(191, 05, GS) {OT_Names = PCNYx, Moves = new(150), EggCycles = 10, Language = International}, // Sunkern Splash
|
||||
new(046, 05, GS) {OT_Names = PCNYx, Moves = new(235), EggCycles = 10, Language = International}, // Paras Synthesis
|
||||
new(187, 05, GS) {OT_Names = PCNYx, Moves = new(097), EggCycles = 10, Language = International}, // Hoppip Agility
|
||||
new(043, 05, GS) {OT_Names = PCNYx, Moves = new(073), EggCycles = 10, Language = International}, // Oddish Leech Seed
|
||||
|
||||
// Normal Pokémon (January 10 to 16, 2003)
|
||||
new(161, 05, GS) {OT_Names = PCNYx, Moves = new(146), EggCycles = 10, Language = International}, // Sentret Dizzy Punch
|
||||
new(234, 05, GS) {OT_Names = PCNYx, Moves = new(219), EggCycles = 10, Language = International}, // Stantler Safeguard
|
||||
new(241, 05, GS) {OT_Names = PCNYx, Moves = new(025), EggCycles = 10, Language = International}, // Miltank Mega Kick
|
||||
new(190, 05, GS) {OT_Names = PCNYx, Moves = new(102), EggCycles = 10, Language = International}, // Aipom Mimic
|
||||
new(108, 05, GS) {OT_Names = PCNYx, Moves = new(003), EggCycles = 10, Language = International}, // Lickitung DoubleSlap
|
||||
new(143, 05, GS) {OT_Names = PCNYx, Moves = new(150), EggCycles = 10, Language = International}, // Snorlax Splash
|
||||
|
||||
// Mt. Mortar (January 24 to 30, 2003)
|
||||
new(066, 05, GS) {OT_Names = PCNYx, Moves = new(206), EggCycles = 10, Language = International}, // Machop False Swipe
|
||||
new(129, 05, GS) {OT_Names = PCNYx, Moves = new(145), EggCycles = 10, Language = International}, // Magikarp Bubble
|
||||
new(236, 05, GS) {OT_Names = PCNYx, Moves = new(099), EggCycles = 10, Language = International}, // Tyrogue Rage
|
||||
|
||||
// Dark Cave Pokémon (January 31 to February 6, 2003)
|
||||
new(206, 05, GS) {OT_Names = PCNYx, Moves = new(031), EggCycles = 10, Language = International}, // Dunsparce Fury Attack
|
||||
new(202, 05, GS) {OT_Names = PCNYx, Moves = new(102), EggCycles = 10, Language = International}, // Wobbuffet Mimic
|
||||
new(231, 05, GS) {OT_Names = PCNYx, Moves = new(071), EggCycles = 10, Language = International}, // Phanpy Absorb
|
||||
new(216, 05, GS) {OT_Names = PCNYx, Moves = new(230), EggCycles = 10, Language = International}, // Teddiursa Sweet Scent
|
||||
|
||||
// Valentine's Day Special (February 7 to 13, 2003)
|
||||
new(060, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggCycles = 10, Language = International}, // Poliwag Sweet Kiss
|
||||
new(060, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggCycles = 10, Language = International}, // Poliwag Lovely Kiss
|
||||
new(143, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggCycles = 10, Language = International}, // Snorlax Sweet Kiss
|
||||
new(143, 05, GS) {OT_Names = PCNYx, Moves = new(142), EggCycles = 10, Language = International}, // Snorlax Lovely Kiss
|
||||
|
||||
// Rare Pokémon (February 21 to 27, 2003)
|
||||
new(140, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggCycles = 10, Language = International}, // Kabuto Rock Throw
|
||||
new(138, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggCycles = 10, Language = International}, // Omanyte Rock Throw
|
||||
new(142, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggCycles = 10, Language = International}, // Aerodactyl Rock Throw
|
||||
new(137, 05, GS) {OT_Names = PCNYx, Moves = new(112), EggCycles = 10, Language = International}, // Porygon Barrier
|
||||
new(133, 05, GS) {OT_Names = PCNYx, Moves = new(074), EggCycles = 10, Language = International}, // Eevee Growth
|
||||
new(185, 05, GS) {OT_Names = PCNYx, Moves = new(164), EggCycles = 10, Language = International}, // Sudowoodo Substitute
|
||||
|
||||
// Bug Type Pokémon (February 28 to March 6, 2003)
|
||||
new(123, 05, GS) {OT_Names = PCNYx, Moves = new(049), EggCycles = 10, Language = International}, // Scyther SonicBoom
|
||||
new(214, 05, GS) {OT_Names = PCNYx, Moves = new(069), EggCycles = 10, Language = International}, // Heracross Seismic Toss
|
||||
new(127, 05, GS) {OT_Names = PCNYx, Moves = new(088), EggCycles = 10, Language = International}, // Pinsir Rock Throw
|
||||
new(165, 05, GS) {OT_Names = PCNYx, Moves = new(112), EggCycles = 10, Language = International}, // Ledyba Barrier
|
||||
new(167, 05, GS) {OT_Names = PCNYx, Moves = new(074), EggCycles = 10, Language = International}, // Spinarak Growth
|
||||
new(193, 05, GS) {OT_Names = PCNYx, Moves = new(186), EggCycles = 10, Language = International}, // Yanma Sweet Kiss
|
||||
new(204, 05, GS) {OT_Names = PCNYx, Moves = new(164), EggCycles = 10, Language = International}, // Pineco Substitute
|
||||
|
||||
// Japanese Only (all below)
|
||||
new(251, 30, GSC) {Location = 014}, // Celebi @ Ilex Forest (GBC)
|
||||
|
||||
// Gen2 Events
|
||||
// Egg Cycles Subject to Change. OTs for Eggs are unknown.
|
||||
// Pokémon Center Mystery Egg #1 (December 15, 2001 to January 14, 2002)
|
||||
new(152, 05, GSC) {Moves = new(080), EggCycles = 10}, // Chikorita Petal Dance
|
||||
new(172, 05, GSC) {Moves = new(047), EggCycles = 10}, // Pichu Sing
|
||||
new(173, 05, GSC) {Moves = new(129), EggCycles = 10}, // Cleffa Swift
|
||||
new(194, 05, GSC) {Moves = new(187), EggCycles = 10}, // Wooper Belly Drum
|
||||
new(231, 05, GSC) {Moves = new(227), EggCycles = 10}, // Phanpy Encore
|
||||
new(238, 05, GSC) {Moves = new(118), EggCycles = 10}, // Smoochum Metronome
|
||||
|
||||
// Pokémon Center Mystery Egg #2 (March 16 to April 7, 2002)
|
||||
new(054, 05, GSC) {Moves = new(080), EggCycles = 10}, // Psyduck Petal Dance
|
||||
new(152, 05, GSC) {Moves = new(080), EggCycles = 10}, // Chikorita Petal Dance
|
||||
new(172, 05, GSC) {Moves = new(080), EggCycles = 10}, // Pichu Petal Dance
|
||||
new(173, 05, GSC) {Moves = new(080), EggCycles = 10}, // Cleffa Petal Dance
|
||||
new(174, 05, GSC) {Moves = new(080), EggCycles = 10}, // Igglybuff Petal Dance
|
||||
new(238, 05, GSC) {Moves = new(080), EggCycles = 10}, // Smoochum Petal Dance
|
||||
|
||||
// Pokémon Center Mystery Egg #3 (April 27 to May 12, 2002)
|
||||
new(001, 05, GSC) {Moves = new(246), EggCycles = 10}, // Bulbasaur Ancientpower
|
||||
new(004, 05, GSC) {Moves = new(242), EggCycles = 10}, // Charmander Crunch
|
||||
new(158, 05, GSC) {Moves = new(066), EggCycles = 10}, // Totodile Submission
|
||||
new(163, 05, GSC) {Moves = new(101), EggCycles = 10}, // Hoot-Hoot Night Shade
|
||||
};
|
||||
}
|
|
@ -4,103 +4,115 @@ namespace PKHeX.Core;
|
|||
|
||||
internal static class Encounters3Colo
|
||||
{
|
||||
internal static readonly EncounterStatic3[] Encounter_ColoGift =
|
||||
internal static readonly EncounterStatic3Colo[] Starters =
|
||||
{
|
||||
// Colosseum Starters: Gender locked to male
|
||||
new(196, 25, GameVersion.COLO) { Gift = true, Location = 254, Gender = 0 }, // Espeon
|
||||
new(197, 26, GameVersion.COLO) { Gift = true, Location = 254, Gender = 0, Moves = new(044) }, // Umbreon (Bite)
|
||||
new(196, 25) { Moves = new(093, 216, 115, 270) }, // Espeon
|
||||
new(197, 26) { Moves = new(044, 269, 290, 289) }, // Umbreon (Bite)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStaticShadow[] Encounter_Colo =
|
||||
internal static readonly string[] TrainerNameDuking = { string.Empty, "ギンザル", "DUKING", "DOKING", "RODRIGO", "GRAND", string.Empty, "GERMÁN", };
|
||||
|
||||
internal static readonly EncounterGift3Colo[] Gifts =
|
||||
{
|
||||
new(GameVersion.COLO, 01, 03000, ColoMakuhita) { Species = 296, Level = 30, Moves = new(193,116,233,238), Location = 005 }, // Makuhita: Miror B.Peon Trudly @ Phenac City
|
||||
// In-Game without Bonus Disk
|
||||
new(311, 13, TrainerNameDuking, GameVersion.CXD) { Location = 254, TID16 = 37149, OT_Gender = 0, Moves = new(045, 086, 098, 270) }, // Plusle @ Ingame Trade
|
||||
};
|
||||
|
||||
new(GameVersion.COLO, 02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 003 }, // Bayleef: Cipher Peon Verde @ Phenac City
|
||||
new(GameVersion.COLO, 02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 069 }, // Bayleef: Cipher Peon Verde @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 115 }, // Bayleef: Cipher Peon Verde @ Realgam Tower
|
||||
new(GameVersion.COLO, 02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 132 }, // Bayleef: Cipher Peon Verde @ Snagem Hideout
|
||||
new(GameVersion.COLO, 03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 003 }, // Quilava: Cipher Peon Rosso @ Phenac City
|
||||
new(GameVersion.COLO, 03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 069 }, // Quilava: Cipher Peon Rosso @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 115 }, // Quilava: Cipher Peon Rosso @ Realgam Tower
|
||||
new(GameVersion.COLO, 03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 132 }, // Quilava: Cipher Peon Rosso @ Snagem Hideout
|
||||
new(GameVersion.COLO, 04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 003 }, // Croconaw: Cipher Peon Bluno @ Phenac City
|
||||
new(GameVersion.COLO, 04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 069 }, // Croconaw: Cipher Peon Bluno @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 115 }, // Croconaw: Cipher Peon Bluno @ Realgam Tower
|
||||
new(GameVersion.COLO, 04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 132 }, // Croconaw: Cipher Peon Bluno @ Snagem Hideout
|
||||
new(GameVersion.COLO, 05, 03000, First) { Species = 164, Level = 30, Moves = new(211,095,115,019), Location = 015 }, // Noctowl: Rider Nover @ Pyrite Town
|
||||
new(GameVersion.COLO, 06, 03000, First) { Species = 180, Level = 30, Moves = new(085,086,178,084), Location = 015 }, // Flaaffy: St.Performer Diogo @ Pyrite Town
|
||||
new(GameVersion.COLO, 07, 03000, First) { Species = 188, Level = 30, Moves = new(235,079,178,072), Location = 015 }, // Skiploom: Rider Leba @ Pyrite Town
|
||||
new(GameVersion.COLO, 08, 04000, First) { Species = 195, Level = 30, Moves = new(341,133,021,057), Location = 015 }, // Quagsire: Bandana Guy Divel @ Pyrite Town
|
||||
new(GameVersion.COLO, 09, 04000, First) { Species = 200, Level = 30, Moves = new(060,109,212,247), Location = 015 }, // Misdreavus: Rider Vant @ Pyrite Town
|
||||
new(GameVersion.COLO, 10, 05000, First) { Species = 193, Level = 33, Moves = new(197,048,049,253), Location = 025 }, // Yanma: Cipher Peon Nore @ Pyrite Bldg
|
||||
new(GameVersion.COLO, 10, 05000, First) { Species = 193, Level = 33, Moves = new(197,048,049,253), Location = 132 }, // Yanma: Cipher Peon Nore @ Snagem Hideout
|
||||
new(GameVersion.COLO, 11, 05000, First) { Species = 162, Level = 33, Moves = new(231,270,098,070), Location = 015 }, // Furret: Rogue Cail @ Pyrite Town
|
||||
new(GameVersion.COLO, 12, 04000, First) { Species = 218, Level = 30, Moves = new(241,281,088,053), Location = 015 }, // Slugma: Roller Boy Lon @ Pyrite Town
|
||||
new(GameVersion.COLO, 13, 04000, First) { Species = 223, Level = 20, Moves = new(061,199,060,062), Location = 028 }, // Remoraid: Miror B.Peon Reath @ Pyrite Bldg
|
||||
new(GameVersion.COLO, 13, 04000, First) { Species = 223, Level = 20, Moves = new(061,199,060,062), Location = 030 }, // Remoraid: Miror B.Peon Reath @ Pyrite Cave
|
||||
new(GameVersion.COLO, 14, 05000, First) { Species = 226, Level = 33, Moves = new(017,048,061,036), Location = 028 }, // Mantine: Miror B.Peon Ferma @ Pyrite Bldg
|
||||
new(GameVersion.COLO, 14, 05000, First) { Species = 226, Level = 33, Moves = new(017,048,061,036), Location = 030 }, // Mantine: Miror B.Peon Ferma @ Pyrite Cave
|
||||
new(GameVersion.COLO, 15, 05000, First) { Species = 211, Level = 33, Moves = new(042,107,040,057), Location = 015 }, // Qwilfish: Hunter Doken @ Pyrite Bldg
|
||||
new(GameVersion.COLO, 16, 05000, First) { Species = 307, Level = 33, Moves = new(197,347,093,136), Location = 031 }, // Meditite: Rider Twan @ Pyrite Cave
|
||||
new(GameVersion.COLO, 17, 05000, First) { Species = 206, Level = 33, Moves = new(180,137,281,036), Location = 029 }, // Dunsparce: Rider Sosh @ Pyrite Cave
|
||||
new(GameVersion.COLO, 18, 05000, First) { Species = 333, Level = 33, Moves = new(119,047,219,019), Location = 032 }, // Swablu: Hunter Zalo @ Pyrite Cave
|
||||
new(GameVersion.COLO, 19, 10000, First) { Species = 185, Level = 35, Moves = new(175,335,067,157), Location = 104 }, // Sudowoodo: Cipher Admin Miror B. @ Realgam Tower
|
||||
new(GameVersion.COLO, 19, 10000, First) { Species = 185, Level = 35, Moves = new(175,335,067,157), Location = 125 }, // Sudowoodo: Cipher Admin Miror B. @ Deep Colosseum
|
||||
new(GameVersion.COLO, 19, 10000, First) { Species = 185, Level = 35, Moves = new(175,335,067,157), Location = 030 }, // Sudowoodo: Cipher Admin Miror B. @ Pyrite Cave
|
||||
new(GameVersion.COLO, 20, 06000, First) { Species = 237, Level = 38, Moves = new(097,116,167,229), Location = 039 }, // Hitmontop: Cipher Peon Skrub @ Agate Village
|
||||
new(GameVersion.COLO, 20, 06000, First) { Species = 237, Level = 38, Moves = new(097,116,167,229), Location = 132 }, // Hitmontop: Cipher Peon Skrub @ Snagem Hideout
|
||||
new(GameVersion.COLO, 20, 06000, First) { Species = 237, Level = 38, Moves = new(097,116,167,229), Location = 068 }, // Hitmontop: Cipher Peon Skrub @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 21, 13000, First) { Species = 244, Level = 40, Moves = new(241,043,044,126), Location = 106 }, // Entei: Cipher Admin Dakim @ Realgam Tower
|
||||
new(GameVersion.COLO, 21, 13000, First) { Species = 244, Level = 40, Moves = new(241,043,044,126), Location = 125 }, // Entei: Cipher Admin Dakim @ Deep Colosseum
|
||||
new(GameVersion.COLO, 21, 13000, First) { Species = 244, Level = 40, Moves = new(241,043,044,126), Location = 076 }, // Entei: Cipher Admin Dakim @ Mt. Battle
|
||||
new(GameVersion.COLO, 22, 06000, First) { Species = 166, Level = 40, Moves = new(226,219,048,004), Location = 047 }, // Ledian: Cipher Peon Kloak @ The Under
|
||||
new(GameVersion.COLO, 22, 06000, First) { Species = 166, Level = 40, Moves = new(226,219,048,004), Location = 132 }, // Ledian: Cipher Peon Kloak @ Snagem Hideout
|
||||
new(GameVersion.COLO, 23, 13000, First) { Species = 245, Level = 40, Moves = new(240,043,016,057), Location = 110 }, // Suicune (Surf): Cipher Admin Venus @ Realgam Tower
|
||||
new(GameVersion.COLO, 23, 13000, First) { Species = 245, Level = 40, Moves = new(240,043,016,056), Location = 125 }, // Suicune (Hydro Pump): Cipher Admin Venus @ Deep Colosseum
|
||||
new(GameVersion.COLO, 23, 13000, First) { Species = 245, Level = 40, Moves = new(240,043,016,057), Location = 055 }, // Suicune (Surf): Cipher Admin Venus @ The Under
|
||||
new(GameVersion.COLO, 24, 06000, Gligar) { Species = 207, Level = 43, Moves = new(185,028,040,163), Location = 058 }, // Gligar: Hunter Frena @ The Under Subway
|
||||
new(GameVersion.COLO, 24, 06000, Gligar) { Species = 207, Level = 43, Moves = new(185,028,040,163), Location = 133 }, // Gligar: Hunter Frena @ Snagem Hideout
|
||||
new(GameVersion.COLO, 25, 06000, First) { Species = 234, Level = 43, Moves = new(310,095,043,036), Location = 058 }, // Stantler: Chaser Liaks @ The Under Subway
|
||||
new(GameVersion.COLO, 25, 06000, First) { Species = 234, Level = 43, Moves = new(310,095,043,036), Location = 133 }, // Stantler: Chaser Liaks @ Snagem Hideout
|
||||
new(GameVersion.COLO, 25, 06000, First) { Species = 221, Level = 43, Moves = new(203,316,091,059), Location = 058 }, // Piloswine: Bodybuilder Lonia @ The Under Subway
|
||||
new(GameVersion.COLO, 26, 06000, First) { Species = 221, Level = 43, Moves = new(203,316,091,059), Location = 134 }, // Piloswine: Bodybuilder Lonia @ Snagem Hideout
|
||||
new(GameVersion.COLO, 27, 06000, First) { Species = 215, Level = 43, Moves = new(185,103,154,196), Location = 058 }, // Sneasel: Rider Nelis @ The Under Subway
|
||||
new(GameVersion.COLO, 27, 06000, First) { Species = 215, Level = 43, Moves = new(185,103,154,196), Location = 134 }, // Sneasel: Rider Nelis @ Snagem Hideout
|
||||
new(GameVersion.COLO, 28, 06000, First) { Species = 190, Level = 43, Moves = new(226,321,154,129), Location = 067 }, // Aipom: Cipher Peon Cole @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 29, 06000, Murkrow) { Species = 198, Level = 43, Moves = new(185,212,101,019), Location = 067 }, // Murkrow: Cipher Peon Lare @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 30, 06000, First) { Species = 205, Level = 43, Moves = new(153,182,117,229), Location = 067 }, // Forretress: Cipher Peon Vana @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 31, 06000, First) { Species = 210, Level = 43, Moves = new(044,184,046,070), Location = 069 }, // Granbull: Cipher Peon Tanie @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 32, 06000, First) { Species = 329, Level = 43, Moves = new(242,103,328,225), Location = 068 }, // Vibrava: Cipher Peon Remil @ Shadow PKMN Lab
|
||||
new(GameVersion.COLO, 33, 06000, First) { Species = 168, Level = 43, Moves = new(169,184,141,188), Location = 069 }, // Ariados: Cipher Peon Lesar @ Shadow PKMN Lab
|
||||
internal static readonly EncounterShadow3Colo[] Shadow =
|
||||
{
|
||||
new(01, 03000, ColoMakuhita) { Species = 296, Level = 30, Moves = new(193,116,233,238), Location = 005 }, // Makuhita: Miror B.Peon Trudly @ Phenac City
|
||||
|
||||
new(GameVersion.COLO, 34, 13000, First) { Species = 243, Level = 40, Moves = new(240,043,098,087), Location = 113 }, // Raikou: Cipher Admin Ein @ Realgam Tower
|
||||
new(GameVersion.COLO, 34, 13000, First) { Species = 243, Level = 40, Moves = new(240,043,098,087), Location = 125 }, // Raikou: Cipher Admin Ein @ Deep Colosseum
|
||||
new(GameVersion.COLO, 34, 13000, First) { Species = 243, Level = 40, Moves = new(240,043,098,087), Location = 069 }, // Raikou: Cipher Admin Ein @ Shadow PKMN Lab
|
||||
new(02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 003 }, // Bayleef: Cipher Peon Verde @ Phenac City
|
||||
new(02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 069 }, // Bayleef: Cipher Peon Verde @ Shadow PKMN Lab
|
||||
new(02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 115 }, // Bayleef: Cipher Peon Verde @ Realgam Tower
|
||||
new(02, 03000, First) { Species = 153, Level = 30, Moves = new(241,235,075,034), Location = 132 }, // Bayleef: Cipher Peon Verde @ Snagem Hideout
|
||||
new(03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 003 }, // Quilava: Cipher Peon Rosso @ Phenac City
|
||||
new(03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 069 }, // Quilava: Cipher Peon Rosso @ Shadow PKMN Lab
|
||||
new(03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 115 }, // Quilava: Cipher Peon Rosso @ Realgam Tower
|
||||
new(03, 03000, First) { Species = 156, Level = 30, Moves = new(241,108,091,172), Location = 132 }, // Quilava: Cipher Peon Rosso @ Snagem Hideout
|
||||
new(04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 003 }, // Croconaw: Cipher Peon Bluno @ Phenac City
|
||||
new(04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 069 }, // Croconaw: Cipher Peon Bluno @ Shadow PKMN Lab
|
||||
new(04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 115 }, // Croconaw: Cipher Peon Bluno @ Realgam Tower
|
||||
new(04, 03000, First) { Species = 159, Level = 30, Moves = new(240,184,044,057), Location = 132 }, // Croconaw: Cipher Peon Bluno @ Snagem Hideout
|
||||
new(05, 03000, First) { Species = 164, Level = 30, Moves = new(211,095,115,019), Location = 015 }, // Noctowl: Rider Nover @ Pyrite Town
|
||||
new(06, 03000, First) { Species = 180, Level = 30, Moves = new(085,086,178,084), Location = 015 }, // Flaaffy: St.Performer Diogo @ Pyrite Town
|
||||
new(07, 03000, First) { Species = 188, Level = 30, Moves = new(235,079,178,072), Location = 015 }, // Skiploom: Rider Leba @ Pyrite Town
|
||||
new(08, 04000, First) { Species = 195, Level = 30, Moves = new(341,133,021,057), Location = 015 }, // Quagsire: Bandana Guy Divel @ Pyrite Town
|
||||
new(09, 04000, First) { Species = 200, Level = 30, Moves = new(060,109,212,247), Location = 015 }, // Misdreavus: Rider Vant @ Pyrite Town
|
||||
new(10, 05000, First) { Species = 193, Level = 33, Moves = new(197,048,049,253), Location = 025 }, // Yanma: Cipher Peon Nore @ Pyrite Bldg
|
||||
new(10, 05000, First) { Species = 193, Level = 33, Moves = new(197,048,049,253), Location = 132 }, // Yanma: Cipher Peon Nore @ Snagem Hideout
|
||||
new(11, 05000, First) { Species = 162, Level = 33, Moves = new(231,270,098,070), Location = 015 }, // Furret: Rogue Cail @ Pyrite Town
|
||||
new(12, 04000, First) { Species = 218, Level = 30, Moves = new(241,281,088,053), Location = 015 }, // Slugma: Roller Boy Lon @ Pyrite Town
|
||||
new(13, 04000, First) { Species = 223, Level = 20, Moves = new(061,199,060,062), Location = 028 }, // Remoraid: Miror B.Peon Reath @ Pyrite Bldg
|
||||
new(13, 04000, First) { Species = 223, Level = 20, Moves = new(061,199,060,062), Location = 030 }, // Remoraid: Miror B.Peon Reath @ Pyrite Cave
|
||||
new(14, 05000, First) { Species = 226, Level = 33, Moves = new(017,048,061,036), Location = 028 }, // Mantine: Miror B.Peon Ferma @ Pyrite Bldg
|
||||
new(14, 05000, First) { Species = 226, Level = 33, Moves = new(017,048,061,036), Location = 030 }, // Mantine: Miror B.Peon Ferma @ Pyrite Cave
|
||||
new(15, 05000, First) { Species = 211, Level = 33, Moves = new(042,107,040,057), Location = 015 }, // Qwilfish: Hunter Doken @ Pyrite Bldg
|
||||
new(16, 05000, First) { Species = 307, Level = 33, Moves = new(197,347,093,136), Location = 031 }, // Meditite: Rider Twan @ Pyrite Cave
|
||||
new(17, 05000, First) { Species = 206, Level = 33, Moves = new(180,137,281,036), Location = 029 }, // Dunsparce: Rider Sosh @ Pyrite Cave
|
||||
new(18, 05000, First) { Species = 333, Level = 33, Moves = new(119,047,219,019), Location = 032 }, // Swablu: Hunter Zalo @ Pyrite Cave
|
||||
new(19, 10000, First) { Species = 185, Level = 35, Moves = new(175,335,067,157), Location = 104 }, // Sudowoodo: Cipher Admin Miror B. @ Realgam Tower
|
||||
new(19, 10000, First) { Species = 185, Level = 35, Moves = new(175,335,067,157), Location = 125 }, // Sudowoodo: Cipher Admin Miror B. @ Deep Colosseum
|
||||
new(19, 10000, First) { Species = 185, Level = 35, Moves = new(175,335,067,157), Location = 030 }, // Sudowoodo: Cipher Admin Miror B. @ Pyrite Cave
|
||||
new(20, 06000, First) { Species = 237, Level = 38, Moves = new(097,116,167,229), Location = 039 }, // Hitmontop: Cipher Peon Skrub @ Agate Village
|
||||
new(20, 06000, First) { Species = 237, Level = 38, Moves = new(097,116,167,229), Location = 132 }, // Hitmontop: Cipher Peon Skrub @ Snagem Hideout
|
||||
new(20, 06000, First) { Species = 237, Level = 38, Moves = new(097,116,167,229), Location = 068 }, // Hitmontop: Cipher Peon Skrub @ Shadow PKMN Lab
|
||||
new(21, 13000, First) { Species = 244, Level = 40, Moves = new(241,043,044,126), Location = 106 }, // Entei: Cipher Admin Dakim @ Realgam Tower
|
||||
new(21, 13000, First) { Species = 244, Level = 40, Moves = new(241,043,044,126), Location = 125 }, // Entei: Cipher Admin Dakim @ Deep Colosseum
|
||||
new(21, 13000, First) { Species = 244, Level = 40, Moves = new(241,043,044,126), Location = 076 }, // Entei: Cipher Admin Dakim @ Mt. Battle
|
||||
new(22, 06000, First) { Species = 166, Level = 40, Moves = new(226,219,048,004), Location = 047 }, // Ledian: Cipher Peon Kloak @ The Under
|
||||
new(22, 06000, First) { Species = 166, Level = 40, Moves = new(226,219,048,004), Location = 132 }, // Ledian: Cipher Peon Kloak @ Snagem Hideout
|
||||
new(23, 13000, First) { Species = 245, Level = 40, Moves = new(240,043,016,057), Location = 110 }, // Suicune (Surf): Cipher Admin Venus @ Realgam Tower
|
||||
new(23, 13000, First) { Species = 245, Level = 40, Moves = new(240,043,016,056), Location = 125 }, // Suicune (Hydro Pump): Cipher Admin Venus @ Deep Colosseum
|
||||
new(23, 13000, First) { Species = 245, Level = 40, Moves = new(240,043,016,057), Location = 055 }, // Suicune (Surf): Cipher Admin Venus @ The Under
|
||||
new(24, 06000, Gligar) { Species = 207, Level = 43, Moves = new(185,028,040,163), Location = 058 }, // Gligar: Hunter Frena @ The Under Subway
|
||||
new(24, 06000, Gligar) { Species = 207, Level = 43, Moves = new(185,028,040,163), Location = 133 }, // Gligar: Hunter Frena @ Snagem Hideout
|
||||
new(25, 06000, First) { Species = 234, Level = 43, Moves = new(310,095,043,036), Location = 058 }, // Stantler: Chaser Liaks @ The Under Subway
|
||||
new(25, 06000, First) { Species = 234, Level = 43, Moves = new(310,095,043,036), Location = 133 }, // Stantler: Chaser Liaks @ Snagem Hideout
|
||||
new(25, 06000, First) { Species = 221, Level = 43, Moves = new(203,316,091,059), Location = 058 }, // Piloswine: Bodybuilder Lonia @ The Under Subway
|
||||
new(26, 06000, First) { Species = 221, Level = 43, Moves = new(203,316,091,059), Location = 134 }, // Piloswine: Bodybuilder Lonia @ Snagem Hideout
|
||||
new(27, 06000, First) { Species = 215, Level = 43, Moves = new(185,103,154,196), Location = 058 }, // Sneasel: Rider Nelis @ The Under Subway
|
||||
new(27, 06000, First) { Species = 215, Level = 43, Moves = new(185,103,154,196), Location = 134 }, // Sneasel: Rider Nelis @ Snagem Hideout
|
||||
new(28, 06000, First) { Species = 190, Level = 43, Moves = new(226,321,154,129), Location = 067 }, // Aipom: Cipher Peon Cole @ Shadow PKMN Lab
|
||||
new(29, 06000, Murkrow) { Species = 198, Level = 43, Moves = new(185,212,101,019), Location = 067 }, // Murkrow: Cipher Peon Lare @ Shadow PKMN Lab
|
||||
new(30, 06000, First) { Species = 205, Level = 43, Moves = new(153,182,117,229), Location = 067 }, // Forretress: Cipher Peon Vana @ Shadow PKMN Lab
|
||||
new(31, 06000, First) { Species = 210, Level = 43, Moves = new(044,184,046,070), Location = 069 }, // Granbull: Cipher Peon Tanie @ Shadow PKMN Lab
|
||||
new(32, 06000, First) { Species = 329, Level = 43, Moves = new(242,103,328,225), Location = 068 }, // Vibrava: Cipher Peon Remil @ Shadow PKMN Lab
|
||||
new(33, 06000, First) { Species = 168, Level = 43, Moves = new(169,184,141,188), Location = 069 }, // Ariados: Cipher Peon Lesar @ Shadow PKMN Lab
|
||||
|
||||
new(GameVersion.COLO, 35, 07000, First) { Species = 192, Level = 45, Moves = new(241,074,275,076), Location = 109 }, // Sunflora: Cipher Peon Baila @ Realgam Tower
|
||||
new(GameVersion.COLO, 35, 07000, First) { Species = 192, Level = 45, Moves = new(241,074,275,076), Location = 132 }, // Sunflora: Cipher Peon Baila @ Snagem Hideout
|
||||
new(GameVersion.COLO, 36, 07000, First) { Species = 225, Level = 45, Moves = new(059,213,217,019), Location = 109 }, // Delibird: Cipher Peon Arton @ Realgam Tower
|
||||
new(GameVersion.COLO, 36, 07000, First) { Species = 225, Level = 45, Moves = new(059,213,217,019), Location = 132 }, // Delibird: Cipher Peon Arton @ Snagem Hideout
|
||||
new(GameVersion.COLO, 37, 07000, Heracross) { Species = 214, Level = 45, Moves = new(179,203,068,280), Location = 111 }, // Heracross: Cipher Peon Dioge @ Realgam Tower
|
||||
new(GameVersion.COLO, 37, 07000, Heracross) { Species = 214, Level = 45, Moves = new(179,203,068,280), Location = 132 }, // Heracross: Cipher Peon Dioge @ Snagem Hideout
|
||||
new(GameVersion.COLO, 38, 13000, First) { Species = 227, Level = 47, Moves = new(065,319,314,211), Location = 117 }, // Skarmory: Snagem Head Gonzap @ Realgam Tower
|
||||
new(GameVersion.COLO, 38, 13000, First) { Species = 227, Level = 47, Moves = new(065,319,314,211), Location = 133 }, // Skarmory: Snagem Head Gonzap @ Snagem Hideout
|
||||
new(34, 13000, First) { Species = 243, Level = 40, Moves = new(240,043,098,087), Location = 113 }, // Raikou: Cipher Admin Ein @ Realgam Tower
|
||||
new(34, 13000, First) { Species = 243, Level = 40, Moves = new(240,043,098,087), Location = 125 }, // Raikou: Cipher Admin Ein @ Deep Colosseum
|
||||
new(34, 13000, First) { Species = 243, Level = 40, Moves = new(240,043,098,087), Location = 069 }, // Raikou: Cipher Admin Ein @ Shadow PKMN Lab
|
||||
|
||||
new(GameVersion.COLO, 39, 07000, First) { Species = 241, Level = 48, Moves = new(208,111,205,034), Location = 118 }, // Miltank: Bodybuilder Jomas @ Tower Colosseum
|
||||
new(GameVersion.COLO, 40, 07000, First) { Species = 359, Level = 48, Moves = new(195,014,163,185), Location = 118 }, // Absol: Rider Delan @ Tower Colosseum
|
||||
new(GameVersion.COLO, 41, 07000, First) { Species = 229, Level = 48, Moves = new(185,336,123,053), Location = 118 }, // Houndoom: Cipher Peon Nella @ Tower Colosseum
|
||||
new(GameVersion.COLO, 42, 07000, First) { Species = 357, Level = 49, Moves = new(076,235,345,019), Location = 118 }, // Tropius: Cipher Peon Ston @ Tower Colosseum
|
||||
new(GameVersion.COLO, 43, 15000, First) { Species = 376, Level = 50, Moves = new(063,334,232,094), Location = 118 }, // Metagross: Cipher Nascour @ Tower Colosseum
|
||||
new(GameVersion.COLO, 44, 20000, First) { Species = 248, Level = 55, Moves = new(242,087,157,059), Location = 118 }, // Tyranitar: Cipher Head Evice @ Tower Colosseum
|
||||
new(35, 07000, First) { Species = 192, Level = 45, Moves = new(241,074,275,076), Location = 109 }, // Sunflora: Cipher Peon Baila @ Realgam Tower
|
||||
new(35, 07000, First) { Species = 192, Level = 45, Moves = new(241,074,275,076), Location = 132 }, // Sunflora: Cipher Peon Baila @ Snagem Hideout
|
||||
new(36, 07000, First) { Species = 225, Level = 45, Moves = new(059,213,217,019), Location = 109 }, // Delibird: Cipher Peon Arton @ Realgam Tower
|
||||
new(36, 07000, First) { Species = 225, Level = 45, Moves = new(059,213,217,019), Location = 132 }, // Delibird: Cipher Peon Arton @ Snagem Hideout
|
||||
new(37, 07000, Heracross) { Species = 214, Level = 45, Moves = new(179,203,068,280), Location = 111 }, // Heracross: Cipher Peon Dioge @ Realgam Tower
|
||||
new(37, 07000, Heracross) { Species = 214, Level = 45, Moves = new(179,203,068,280), Location = 132 }, // Heracross: Cipher Peon Dioge @ Snagem Hideout
|
||||
new(38, 13000, First) { Species = 227, Level = 47, Moves = new(065,319,314,211), Location = 117 }, // Skarmory: Snagem Head Gonzap @ Realgam Tower
|
||||
new(38, 13000, First) { Species = 227, Level = 47, Moves = new(065,319,314,211), Location = 133 }, // Skarmory: Snagem Head Gonzap @ Snagem Hideout
|
||||
|
||||
new(GameVersion.COLO, 55, 07000, First) { Species = 235, Level = 45, Moves = new(166,039,003,231), Location = 132 }, // Smeargle: Team Snagem Biden @ Snagem Hideout
|
||||
new(GameVersion.COLO, 56, 07000, Ursaring) { Species = 217, Level = 45, Moves = new(185,313,122,163), Location = 132 }, // Ursaring: Team Snagem Agrev @ Snagem Hideout
|
||||
new(GameVersion.COLO, 57, 07000, First) { Species = 213, Level = 45, Moves = new(219,227,156,117), Location = 125 }, // Shuckle: Deep King Agnol @ Deep Colosseum
|
||||
new(39, 07000, First) { Species = 241, Level = 48, Moves = new(208,111,205,034), Location = 118 }, // Miltank: Bodybuilder Jomas @ Tower Colosseum
|
||||
new(40, 07000, First) { Species = 359, Level = 48, Moves = new(195,014,163,185), Location = 118 }, // Absol: Rider Delan @ Tower Colosseum
|
||||
new(41, 07000, First) { Species = 229, Level = 48, Moves = new(185,336,123,053), Location = 118 }, // Houndoom: Cipher Peon Nella @ Tower Colosseum
|
||||
new(42, 07000, First) { Species = 357, Level = 49, Moves = new(076,235,345,019), Location = 118 }, // Tropius: Cipher Peon Ston @ Tower Colosseum
|
||||
new(43, 15000, First) { Species = 376, Level = 50, Moves = new(063,334,232,094), Location = 118 }, // Metagross: Cipher Nascour @ Tower Colosseum
|
||||
new(44, 20000, First) { Species = 248, Level = 55, Moves = new(242,087,157,059), Location = 118 }, // Tyranitar: Cipher Head Evice @ Tower Colosseum
|
||||
|
||||
new(GameVersion.COLO, 67, 05000, First) { Species = 176, Level = 20, Moves = new(118,204,186,281), Location = 001 }, // Togetic: Cipher Peon Fein @ Outskirt Stand
|
||||
new(55, 07000, First) { Species = 235, Level = 45, Moves = new(166,039,003,231), Location = 132 }, // Smeargle: Team Snagem Biden @ Snagem Hideout
|
||||
new(56, 07000, Ursaring) { Species = 217, Level = 45, Moves = new(185,313,122,163), Location = 132 }, // Ursaring: Team Snagem Agrev @ Snagem Hideout
|
||||
new(57, 07000, First) { Species = 213, Level = 45, Moves = new(219,227,156,117), Location = 125 }, // Shuckle: Deep King Agnol @ Deep Colosseum
|
||||
|
||||
new(GameVersion.COLO, 00, 00000, CTogepi) { Species = 175, Level = 20, Moves = new(118,204,186,281), Location = 128, IVs = new(0, 0, 0, 0, 0, 0) }, // Togepi: Chaser ボデス @ Card e Room (Japanese games only)
|
||||
new(GameVersion.COLO, 00, 00000, CMareep) { Species = 179, Level = 37, Moves = new(087,084,086,178), Location = 128, IVs = new(0, 0, 0, 0, 0, 0) }, // Mareep: Hunter ホル @ Card e Room (Japanese games only)
|
||||
new(GameVersion.COLO, 00, 00000, CScizor) { Species = 212, Level = 50, Moves = new(210,232,014,163), Location = 128, IVs = new(0, 0, 0, 0, 0, 0) }, // Scizor: Bodybuilder ワーバン @ Card e Room (Japanese games only)
|
||||
new(67, 05000, First) { Species = 176, Level = 20, Moves = new(118,204,186,281), Location = 001 }, // Togetic: Cipher Peon Fein @ Outskirt Stand
|
||||
};
|
||||
|
||||
public static readonly EncounterShadow3Colo[] EReader =
|
||||
{
|
||||
// Japanese E-Reader: 0 IVs
|
||||
new(00, 00000, CTogepi) { Species = 175, Level = 20, Moves = new(118,204,186,281), Location = 128 }, // Togepi: Chaser ボデス @ Card e Room (Japanese games only)
|
||||
new(00, 00000, CMareep) { Species = 179, Level = 37, Moves = new(087,084,086,178), Location = 128 }, // Mareep: Hunter ホル @ Card e Room (Japanese games only)
|
||||
new(00, 00000, CScizor) { Species = 212, Level = 50, Moves = new(210,232,014,163), Location = 128 }, // Scizor: Bodybuilder ワーバン @ Card e Room (Japanese games only)
|
||||
};
|
||||
}
|
||||
|
|
|
@ -15,47 +15,32 @@ internal static class Encounters3FRLG
|
|||
|
||||
private static EncounterArea3[] GetRegular(string resource, string ident, GameVersion game) => EncounterArea3.GetAreas(Get(resource, ident), game);
|
||||
|
||||
static Encounters3FRLG() => MarkEncounterTradeStrings(TradeGift_FRLG, TradeFRLG);
|
||||
private const string tradeFRLG = "tradefrlg";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings7(tradeFRLG);
|
||||
|
||||
private static readonly EncounterStatic3[] Encounter_FRLG_Roam =
|
||||
public static readonly EncounterStatic3[] StaticFRLG =
|
||||
{
|
||||
new(243, 50, FRLG) { Roaming = true, Location = 16 }, // Raikou
|
||||
new(244, 50, FRLG) { Roaming = true, Location = 16 }, // Entei
|
||||
new(245, 50, FRLG) { Roaming = true, Location = 16 }, // Suicune
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic3[] Encounter_FRLG_Stationary =
|
||||
{
|
||||
// Starters @ Pallet Town
|
||||
new(001, 05, FRLG) { Gift = true, Location = 088 }, // Bulbasaur
|
||||
new(004, 05, FRLG) { Gift = true, Location = 088 }, // Charmander
|
||||
new(007, 05, FRLG) { Gift = true, Location = 088 }, // Squirtle
|
||||
new(001, 05, FRLG) { FixedBall = Ball.Poke, Location = 088 }, // Bulbasaur
|
||||
new(004, 05, FRLG) { FixedBall = Ball.Poke, Location = 088 }, // Charmander
|
||||
new(007, 05, FRLG) { FixedBall = Ball.Poke, Location = 088 }, // Squirtle
|
||||
|
||||
// Fossil @ Cinnabar Island
|
||||
new(138, 05, FRLG) { Gift = true, Location = 096 }, // Omanyte
|
||||
new(140, 05, FRLG) { Gift = true, Location = 096 }, // Kabuto
|
||||
new(142, 05, FRLG) { Gift = true, Location = 096 }, // Aerodactyl
|
||||
new(138, 05, FRLG) { FixedBall = Ball.Poke, Location = 096 }, // Omanyte
|
||||
new(140, 05, FRLG) { FixedBall = Ball.Poke, Location = 096 }, // Kabuto
|
||||
new(142, 05, FRLG) { FixedBall = Ball.Poke, Location = 096 }, // Aerodactyl
|
||||
|
||||
// Gift
|
||||
new(106, 25, FRLG) { Gift = true, Location = 098 }, // Hitmonlee @ Saffron City
|
||||
new(107, 25, FRLG) { Gift = true, Location = 098 }, // Hitmonchan @ Saffron City
|
||||
new(129, 05, FRLG) { Gift = true, Location = 099 }, // Magikarp @ Route 4
|
||||
new(131, 25, FRLG) { Gift = true, Location = 134 }, // Lapras @ Silph Co.
|
||||
new(133, 25, FRLG) { Gift = true, Location = 094 }, // Eevee @ Celadon City
|
||||
new(175, 05, FRLG) { Gift = true, EggLocation = 253, Moves = new(045,204,118) }, // Togepi Egg
|
||||
|
||||
// Celadon City Game Corner
|
||||
new(063, 09, FR) { Gift = true, Location = 94 }, // Abra
|
||||
new(035, 08, FR) { Gift = true, Location = 94 }, // Clefairy
|
||||
new(123, 25, FR) { Gift = true, Location = 94 }, // Scyther
|
||||
new(147, 18, FR) { Gift = true, Location = 94 }, // Dratini
|
||||
new(137, 26, FR) { Gift = true, Location = 94 }, // Porygon
|
||||
|
||||
new(063, 07, LG) { Gift = true, Location = 94 }, // Abra
|
||||
new(035, 12, LG) { Gift = true, Location = 94 }, // Clefairy
|
||||
new(127, 18, LG) { Gift = true, Location = 94 }, // Pinsir
|
||||
new(147, 24, LG) { Gift = true, Location = 94 }, // Dratini
|
||||
new(137, 18, LG) { Gift = true, Location = 94 }, // Porygon
|
||||
new(106, 25, FRLG) { FixedBall = Ball.Poke, Location = 098 }, // Hitmonlee @ Saffron City
|
||||
new(107, 25, FRLG) { FixedBall = Ball.Poke, Location = 098 }, // Hitmonchan @ Saffron City
|
||||
new(129, 05, FRLG) { FixedBall = Ball.Poke, Location = 099 }, // Magikarp @ Route 4
|
||||
new(131, 25, FRLG) { FixedBall = Ball.Poke, Location = 134 }, // Lapras @ Silph Co.
|
||||
new(133, 25, FRLG) { FixedBall = Ball.Poke, Location = 094 }, // Eevee @ Celadon City
|
||||
new(175, 05, FRLG) { FixedBall = Ball.Poke, Location = 253, EggEncounter = true, Moves = new(045,204,118) }, // Togepi Egg
|
||||
|
||||
// Stationary
|
||||
new(143, 30, FRLG) { Location = 112 }, // Snorlax @ Route 12
|
||||
|
@ -72,11 +57,36 @@ internal static class Encounters3FRLG
|
|||
// Event
|
||||
new(249, 70, FRLG) { Location = 174, FatefulEncounter = true }, // Lugia @ Navel Rock
|
||||
new(250, 70, FRLG) { Location = 174, FatefulEncounter = true }, // Ho-Oh @ Navel Rock
|
||||
new(386, 30, FR ) { Location = 187, FatefulEncounter = true, Form = 1 }, // Deoxys @ Birth Island
|
||||
new(386, 30, LG) { Location = 187, FatefulEncounter = true, Form = 2 }, // Deoxys @ Birth Island
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic3[] Encounter_FRLG = ArrayUtil.ConcatAll(Encounter_FRLG_Roam, Encounter_FRLG_Stationary);
|
||||
public static readonly EncounterStatic3[] StaticFR =
|
||||
{
|
||||
// Celadon City Game Corner
|
||||
new(063, 09, FR) { FixedBall = Ball.Poke, Location = 94 }, // Abra
|
||||
new(035, 08, FR) { FixedBall = Ball.Poke, Location = 94 }, // Clefairy
|
||||
new(123, 25, FR) { FixedBall = Ball.Poke, Location = 94 }, // Scyther
|
||||
new(147, 18, FR) { FixedBall = Ball.Poke, Location = 94 }, // Dratini
|
||||
new(137, 26, FR) { FixedBall = Ball.Poke, Location = 94 }, // Porygon
|
||||
|
||||
new(386, 30, FR ) { Location = 187, FatefulEncounter = true, Form = 1 }, // Deoxys @ Birth Island
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic3[] StaticLG =
|
||||
{
|
||||
// Celadon City Game Corner
|
||||
new(063, 09, FR) { FixedBall = Ball.Poke, Location = 94 }, // Abra
|
||||
new(035, 08, FR) { FixedBall = Ball.Poke, Location = 94 }, // Clefairy
|
||||
new(123, 25, FR) { FixedBall = Ball.Poke, Location = 94 }, // Scyther
|
||||
new(147, 18, FR) { FixedBall = Ball.Poke, Location = 94 }, // Dratini
|
||||
new(137, 26, FR) { FixedBall = Ball.Poke, Location = 94 }, // Porygon
|
||||
|
||||
new(063, 07, LG) { FixedBall = Ball.Poke, Location = 94 }, // Abra
|
||||
new(035, 12, LG) { FixedBall = Ball.Poke, Location = 94 }, // Clefairy
|
||||
new(127, 18, LG) { FixedBall = Ball.Poke, Location = 94 }, // Pinsir
|
||||
new(147, 24, LG) { FixedBall = Ball.Poke, Location = 94 }, // Dratini
|
||||
new(137, 18, LG) { FixedBall = Ball.Poke, Location = 94 }, // Porygon
|
||||
new(386, 30, LG) { Location = 187, FatefulEncounter = true, Form = 2 }, // Deoxys @ Birth Island
|
||||
};
|
||||
|
||||
private static ReadOnlySpan<byte> TradeContest_Cool => new byte[] { 30, 05, 05, 05, 05, 10 };
|
||||
private static ReadOnlySpan<byte> TradeContest_Beauty => new byte[] { 05, 30, 05, 05, 05, 10 };
|
||||
|
@ -86,24 +96,28 @@ internal static class Encounters3FRLG
|
|||
|
||||
internal static readonly EncounterTrade3[] TradeGift_FRLG =
|
||||
{
|
||||
new(FRLG, 0x00009CAE, 122, 05) { Ability = OnlyFirst, TID16 = 01985, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(20,15,17,24,23,22), Contest = TradeContest_Clever }, // Abra (Level 5 Breeding) -> Mr. Mime
|
||||
new(FR , 0x4C970B89, 029, 05) { Ability = OnlyFirst, TID16 = 63184, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(22,18,25,19,15,22), Contest = TradeContest_Tough }, // Nidoran♀
|
||||
new( LG, 0x4C970B9E, 032, 05) { Ability = OnlyFirst, TID16 = 63184, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(19,25,18,22,22,15), Contest = TradeContest_Cool }, // Nidoran♂ *
|
||||
new(FR , 0x00EECA15, 030, 16) { Ability = OnlyFirst, TID16 = 13637, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(22,25,18,19,22,15), Contest = TradeContest_Cute }, // Nidorina *
|
||||
new( LG, 0x00EECA19, 033, 16) { Ability = OnlyFirst, TID16 = 13637, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(19,18,25,22,15,22), Contest = TradeContest_Tough }, // Nidorino *
|
||||
new(FR , 0x451308AB, 108, 25) { Ability = OnlyFirst, TID16 = 01239, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(24,19,21,15,23,21), Contest = TradeContest_Tough }, // Golduck (Level 25) -> Lickitung *
|
||||
new( LG, 0x451308AB, 108, 25) { Ability = OnlyFirst, TID16 = 01239, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(24,19,21,15,23,21), Contest = TradeContest_Tough }, // Slowbro (Level 25) -> Lickitung *
|
||||
new(FRLG, 0x498A2E1D, 124, 20) { Ability = OnlyFirst, TID16 = 36728, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(18,17,18,22,25,21), Contest = TradeContest_Beauty }, // Poliwhirl (Level 20) -> Jynx
|
||||
new(FRLG, 0x151943D7, 083, 03) { Ability = OnlyFirst, TID16 = 08810, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(20,25,21,24,15,20), Contest = TradeContest_Cool }, // Spearow (Level 3 Capture) -> Farfetch'd
|
||||
new(FRLG, 0x06341016, 101, 03) { Ability = OnlySecond, TID16 = 50298, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(19,16,18,25,25,19), Contest = TradeContest_Cool }, // Raichu (Level 3) -> Electrode
|
||||
new(FRLG, 0x5C77ECFA, 114, 05) { Ability = OnlyFirst, TID16 = 60042, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(22,17,25,16,23,20), Contest = TradeContest_Cute }, // Venonat (Level 5 Breeding) -> Tangela
|
||||
new(FRLG, 0x482CAC89, 086, 05) { Ability = OnlyFirst, TID16 = 09853, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(24,15,22,16,23,22), Contest = TradeContest_Tough }, // Ponyta (Level 5 Breeding) -> Seel *
|
||||
new(TradeNames, 00, FRLG, 0x00009CAE, 122, 05) { Ability = OnlyFirst, TID16 = 01985, OTGender = 0, Gender = 0, IVs = new(20,15,17,24,23,22), Contest = TradeContest_Clever }, // Abra (Level 5 Breeding) -> Mr. Mime
|
||||
new(TradeNames, 07, FRLG, 0x498A2E1D, 124, 20) { Ability = OnlyFirst, TID16 = 36728, OTGender = 0, Gender = 1, IVs = new(18,17,18,22,25,21), Contest = TradeContest_Beauty }, // Poliwhirl (Level 20) -> Jynx
|
||||
new(TradeNames, 08, FRLG, 0x151943D7, 083, 03) { Ability = OnlyFirst, TID16 = 08810, OTGender = 0, Gender = 0, IVs = new(20,25,21,24,15,20), Contest = TradeContest_Cool }, // Spearow (Level 3 Capture) -> Farfetch'd
|
||||
new(TradeNames, 09, FRLG, 0x06341016, 101, 03) { Ability = OnlySecond, TID16 = 50298, OTGender = 0, Gender = 2, IVs = new(19,16,18,25,25,19), Contest = TradeContest_Cool }, // Raichu (Level 3) -> Electrode
|
||||
new(TradeNames, 10, FRLG, 0x5C77ECFA, 114, 05) { Ability = OnlyFirst, TID16 = 60042, OTGender = 1, Gender = 0, IVs = new(22,17,25,16,23,20), Contest = TradeContest_Cute }, // Venonat (Level 5 Breeding) -> Tangela
|
||||
new(TradeNames, 11, FRLG, 0x482CAC89, 086, 05) { Ability = OnlyFirst, TID16 = 09853, OTGender = 0, Gender = 0, IVs = new(24,15,22,16,23,22), Contest = TradeContest_Tough }, // Ponyta (Level 5 Breeding) -> Seel *
|
||||
// If Pokémon with * is evolved in a Generation IV or V game, its Ability will become its second Ability.
|
||||
};
|
||||
|
||||
private const string tradeFRLG = "tradefrlg";
|
||||
private static readonly string[][] TradeFRLG = Util.GetLanguageStrings7(tradeFRLG);
|
||||
internal static readonly EncounterTrade3[] TradeGift_FR =
|
||||
{
|
||||
new(TradeNames, 01, FR , 0x4C970B89, 029, 05) { Ability = OnlyFirst, TID16 = 63184, OTGender = 1, Gender = 1, IVs = new(22,18,25,19,15,22), Contest = TradeContest_Tough }, // Nidoran♀
|
||||
new(TradeNames, 03, FR , 0x00EECA15, 030, 16) { Ability = OnlyFirst, TID16 = 13637, OTGender = 0, Gender = 1, IVs = new(22,25,18,19,22,15), Contest = TradeContest_Cute }, // Nidorina *
|
||||
new(TradeNames, 05, FR , 0x451308AB, 108, 25) { Ability = OnlyFirst, TID16 = 01239, OTGender = 0, Gender = 0, IVs = new(24,19,21,15,23,21), Contest = TradeContest_Tough }, // Golduck (Level 25) -> Lickitung *
|
||||
// If Pokémon with * is evolved in a Generation IV or V game, its Ability will become its second Ability.
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic3[] StaticFR = GetEncounters(Encounter_FRLG, FR);
|
||||
internal static readonly EncounterStatic3[] StaticLG = GetEncounters(Encounter_FRLG, LG);
|
||||
internal static readonly EncounterTrade3[] TradeGift_LG =
|
||||
{
|
||||
new(TradeNames, 02, LG, 0x4C970B9E, 032, 05) { Ability = OnlyFirst, TID16 = 63184, OTGender = 1, Gender = 0, IVs = new(19,25,18,22,22,15), Contest = TradeContest_Cool }, // Nidoran♂ *
|
||||
new(TradeNames, 04, LG, 0x00EECA19, 033, 16) { Ability = OnlyFirst, TID16 = 13637, OTGender = 0, Gender = 0, IVs = new(19,18,25,22,15,22), Contest = TradeContest_Tough }, // Nidorino *
|
||||
new(TradeNames, 06, LG, 0x451308AB, 108, 25) { Ability = OnlyFirst, TID16 = 01239, OTGender = 0, Gender = 0, IVs = new(24,19,21,15,23,21), Contest = TradeContest_Tough }, // Slowbro (Level 25) -> Lickitung *
|
||||
// If Pokémon with * is evolved in a Generation IV or V game, its Ability will become its second Ability.
|
||||
};
|
||||
}
|
||||
|
|
|
@ -18,55 +18,87 @@ internal static class Encounters3RSE
|
|||
private static EncounterArea3[] GetRegular(string resource, string ident, GameVersion game) => EncounterArea3.GetAreas(Get(resource, ident), game);
|
||||
private static EncounterArea3[] GetSwarm(string resource, string ident, GameVersion game) => EncounterArea3.GetAreasSwarm(Get(resource, ident), game);
|
||||
|
||||
static Encounters3RSE() => MarkEncounterTradeStrings(TradeGift_RSE, TradeRSE);
|
||||
private static readonly string[] TrainersPikachu = { string.Empty, "コロシアム", "COLOS", "COLOSSEUM", "ARENA", "COLOSSEUM", string.Empty, "CLAUDIO" };
|
||||
private static readonly string[] TrainersCelebi = { string.Empty, "アゲト", "AGATE", "SAMARAGD", "SOFO", "EMERITAE", string.Empty, "ÁGATA" };
|
||||
private static readonly string[] TrainersMattle = { string.Empty, "バトルやま", "MATTLE", "MT BATAILL", "MONTE LOTT", "DUELLBERG", string.Empty, "ERNESTO" }; // truncated on ck3->pk3 transfer
|
||||
|
||||
private static readonly EncounterStatic3[] Encounter_RSE_Roam =
|
||||
internal static readonly EncounterGift3Colo[] ColoGiftsR =
|
||||
{
|
||||
new(380, 40, S) { Roaming = true, Location = 016 }, // Latias
|
||||
new(380, 40, E) { Roaming = true, Location = 016 }, // Latias
|
||||
new(381, 40, R) { Roaming = true, Location = 016 }, // Latios
|
||||
new(381, 40, E) { Roaming = true, Location = 016 }, // Latios
|
||||
// In-Game Bonus Disk (Japan only)
|
||||
new(025, 10, TrainersPikachu, R) { Location = 255, TID16 = 31121, OT_Gender = 0 }, // Colosseum Pikachu bonus gift
|
||||
new(251, 10, TrainersCelebi, R) { Location = 255, TID16 = 31121, OT_Gender = 1 }, // Ageto Celebi bonus gift
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic3[] Encounter_RSE_Regular =
|
||||
internal static readonly EncounterGift3Colo[] ColoGiftsS =
|
||||
{
|
||||
// In-Game without Bonus Disk
|
||||
new(250, 70, TrainersMattle, S) { Location = 255, TID16 = 10048, OT_Gender = 0, Moves = new(105, 126, 241, 129) }, // Ho-oh @ Mt. Battle
|
||||
};
|
||||
|
||||
private const string tradeRSE = "traderse";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings7(tradeRSE);
|
||||
|
||||
public static readonly EncounterStatic3[] StaticRSE =
|
||||
{
|
||||
// Starters
|
||||
new(152, 05, E ) { Gift = true, Location = 000 }, // Chikorita @ Littleroot Town
|
||||
new(155, 05, E ) { Gift = true, Location = 000 }, // Cyndaquil
|
||||
new(158, 05, E ) { Gift = true, Location = 000 }, // Totodile
|
||||
new(252, 05, RSE) { Gift = true, Location = 016 }, // Treecko @ Route 101
|
||||
new(255, 05, RSE) { Gift = true, Location = 016 }, // Torchic
|
||||
new(258, 05, RSE) { Gift = true, Location = 016 }, // Mudkip
|
||||
new(252, 05, RSE) { FixedBall = Ball.Poke, Location = 016 }, // Treecko @ Route 101
|
||||
new(255, 05, RSE) { FixedBall = Ball.Poke, Location = 016 }, // Torchic
|
||||
new(258, 05, RSE) { FixedBall = Ball.Poke, Location = 016 }, // Mudkip
|
||||
|
||||
// Fossil @ Rustboro City
|
||||
new(345, 20, RSE) { Gift = true, Location = 010 }, // Lileep
|
||||
new(347, 20, RSE) { Gift = true, Location = 010 }, // Anorith
|
||||
new(345, 20, RSE) { FixedBall = Ball.Poke, Location = 010 }, // Lileep
|
||||
new(347, 20, RSE) { FixedBall = Ball.Poke, Location = 010 }, // Anorith
|
||||
|
||||
// Gift
|
||||
new(351, 25, RSE) { Gift = true, Location = 034 }, // Castform @ Weather Institute
|
||||
new(374, 05, RSE) { Gift = true, Location = 013 }, // Beldum @ Mossdeep City
|
||||
new(360, 05, RSE) { Gift = true, EggLocation = 253 }, // Wynaut Egg
|
||||
new(351, 25, RSE) { FixedBall = Ball.Poke, Location = 034 }, // Castform @ Weather Institute
|
||||
new(374, 05, RSE) { FixedBall = Ball.Poke, Location = 013 }, // Beldum @ Mossdeep City
|
||||
new(360, 05, RSE) { FixedBall = Ball.Poke, Location = 253, EggEncounter = true }, // Wynaut Egg
|
||||
|
||||
// Stationary
|
||||
new(352, 30, RSE) { Location = 034 }, // Kecleon @ Route 119
|
||||
new(352, 30, RSE) { Location = 035 }, // Kecleon @ Route 120
|
||||
new(101, 30, RS ) { Location = 066 }, // Electrode @ Hideout (R:Magma Hideout/S:Aqua Hideout)
|
||||
new(101, 30, E ) { Location = 197 }, // Electrode @ Aqua Hideout
|
||||
new(185, 40, E ) { Location = 058 }, // Sudowoodo @ Battle Frontier
|
||||
|
||||
// Stationary Lengendary
|
||||
new(377, 40, RSE) { Location = 082 }, // Regirock @ Desert Ruins
|
||||
new(378, 40, RSE) { Location = 081 }, // Regice @ Island Cave
|
||||
new(379, 40, RSE) { Location = 083 }, // Registeel @ Ancient Tomb
|
||||
new(380, 50, R ) { Location = 073 }, // Latias @ Southern Island
|
||||
new(380, 50, E) { Location = 073, FatefulEncounter = true }, // Latias @ Southern Island
|
||||
new(381, 50, S ) { Location = 073 }, // Latios @ Southern Island
|
||||
new(381, 50, E) { Location = 073, FatefulEncounter = true }, // Latios @ Southern Island
|
||||
new(382, 45, S ) { Location = 072 }, // Kyogre @ Cave of Origin
|
||||
new(382, 70, E) { Location = 203 }, // Kyogre @ Marine Cave
|
||||
new(383, 45, R ) { Location = 072 }, // Groudon @ Cave of Origin
|
||||
new(383, 70, E) { Location = 205 }, // Groudon @ Terra Cave
|
||||
new(384, 70, RSE) { Location = 085 }, // Rayquaza @ Sky Pillar
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic3[] StaticR =
|
||||
{
|
||||
new(381, 40, R) { Roaming = true, Location = 016 }, // Latios
|
||||
new(380, 50, R) { Location = 073 }, // Latias @ Southern Island
|
||||
new(383, 45, R) { Location = 072 }, // Groudon @ Cave of Origin
|
||||
|
||||
new(101, 30, R) { Location = 066 }, // Electrode @ Hideout (R:Magma Hideout/S:Aqua Hideout)
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic3[] StaticS =
|
||||
{
|
||||
new(380, 40, S) { Roaming = true, Location = 016 }, // Latias
|
||||
new(381, 50, S) { Location = 073 }, // Latios @ Southern Island
|
||||
new(382, 45, S) { Location = 072 }, // Kyogre @ Cave of Origin
|
||||
|
||||
new(101, 30, S) { Location = 066 }, // Electrode @ Hideout (R:Magma Hideout/S:Aqua Hideout)
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic3[] StaticE =
|
||||
{
|
||||
new(380, 40, E) { Roaming = true, Location = 016 }, // Latias
|
||||
new(381, 40, E) { Roaming = true, Location = 016 }, // Latios
|
||||
new(382, 70, E) { Location = 203 }, // Kyogre @ Marine Cave
|
||||
new(383, 70, E) { Location = 205 }, // Groudon @ Terra Cave
|
||||
|
||||
new(101, 30, E) { Location = 197 }, // Electrode @ Aqua Hideout
|
||||
|
||||
// Starters
|
||||
new(152, 05, E) { FixedBall = Ball.Poke, Location = 000 }, // Chikorita @ Littleroot Town
|
||||
new(155, 05, E) { FixedBall = Ball.Poke, Location = 000 }, // Cyndaquil
|
||||
new(158, 05, E) { FixedBall = Ball.Poke, Location = 000 }, // Totodile
|
||||
new(185, 40, E) { Location = 058 }, // Sudowoodo @ Battle Frontier
|
||||
new(380, 50, E) { Location = 073, FatefulEncounter = true }, // Latias @ Southern Island
|
||||
new(381, 50, E) { Location = 073, FatefulEncounter = true }, // Latios @ Southern Island
|
||||
|
||||
// Event
|
||||
new(151, 30, E) { Location = 201, FatefulEncounter = true }, // Mew @ Faraway Island (Unreleased outside of Japan)
|
||||
|
@ -75,30 +107,25 @@ internal static class Encounters3RSE
|
|||
new(386, 30, E) { Location = 200, FatefulEncounter = true, Form = 3 }, // Deoxys @ Birth Island
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic3[] Encounter_RSE = ArrayUtil.ConcatAll(Encounter_RSE_Roam, Encounter_RSE_Regular);
|
||||
|
||||
private static ReadOnlySpan<byte> TradeContest_Cool => new byte[] { 30, 05, 05, 05, 05, 10 };
|
||||
private static ReadOnlySpan<byte> TradeContest_Beauty => new byte[] { 05, 30, 05, 05, 05, 10 };
|
||||
private static ReadOnlySpan<byte> TradeContest_Cute => new byte[] { 05, 05, 30, 05, 05, 10 };
|
||||
private static ReadOnlySpan<byte> TradeContest_Clever => new byte[] { 05, 05, 05, 30, 05, 10 };
|
||||
private static ReadOnlySpan<byte> TradeContest_Tough => new byte[] { 05, 05, 05, 05, 30, 10 };
|
||||
|
||||
internal static readonly EncounterTrade3[] TradeGift_RSE =
|
||||
internal static readonly EncounterTrade3[] TradeGift_RS =
|
||||
{
|
||||
new(RS, 0x00009C40, 296, 05) { Ability = OnlySecond, TID16 = 49562, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(5,5,4,4,4,4), Contest = TradeContest_Tough }, // Slakoth (Level 5 Breeding) -> Makuhita
|
||||
new(RS, 0x498A2E17, 300, 03) { Ability = OnlyFirst, TID16 = 02259, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(5,4,4,5,4,4), Contest = TradeContest_Cute }, // Pikachu (Level 3 Viridian Forest) -> Skitty
|
||||
new(RS, 0x4C970B7F, 222, 21) { Ability = OnlySecond, TID16 = 50183, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(4,4,5,4,4,5), Contest = TradeContest_Beauty }, // Bellossom (Level 21 Oddish -> Gloom -> Bellossom) -> Corsola
|
||||
new(E , 0x00000084, 273, 04) { Ability = OnlySecond, TID16 = 38726, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(5,4,5,4,4,4), Contest = TradeContest_Cool }, // Ralts (Level 4 Route 102) -> Seedot
|
||||
new(E , 0x0000006F, 311, 05) { Ability = OnlyFirst, TID16 = 08460, SID16 = 00001, OTGender = 0, Gender = 1, IVs = new(4,4,4,5,5,4), Contest = TradeContest_Cute }, // Volbeat (Level 5 Breeding) -> Plusle
|
||||
new(E , 0x0000007F, 116, 05) { Ability = OnlyFirst, TID16 = 46285, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(5,4,4,4,5,4), Contest = TradeContest_Tough }, // Bagon (Level 5 Breeding) -> Horsea*
|
||||
new(E , 0x0000008B, 052, 03) { Ability = OnlyFirst, TID16 = 25945, SID16 = 00001, OTGender = 1, Gender = 0, IVs = new(4,5,4,5,4,4), Contest = TradeContest_Clever }, // Skitty (Level 3 Trade)-> Meowth*
|
||||
// If Pokémon with * is evolved in a Generation IV or V game, its Ability will become its second Ability.
|
||||
new(TradeNames, 00, RS, 0x00009C40, 296, 05) { Ability = OnlySecond, TID16 = 49562, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(5,5,4,4,4,4), Contest = TradeContest_Tough }, // Slakoth (Level 5 Breeding) -> Makuhita
|
||||
new(TradeNames, 01, RS, 0x498A2E17, 300, 03) { Ability = OnlyFirst, TID16 = 02259, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(5,4,4,5,4,4), Contest = TradeContest_Cute }, // Pikachu (Level 3 Viridian Forest) -> Skitty
|
||||
new(TradeNames, 02, RS, 0x4C970B7F, 222, 21) { Ability = OnlySecond, TID16 = 50183, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(4,4,5,4,4,5), Contest = TradeContest_Beauty }, // Bellossom (Level 21 Oddish -> Gloom -> Bellossom) -> Corsola
|
||||
};
|
||||
|
||||
private const string tradeRSE = "traderse";
|
||||
private static readonly string[][] TradeRSE = Util.GetLanguageStrings7(tradeRSE);
|
||||
|
||||
internal static readonly EncounterStatic3[] StaticR = GetEncounters(Encounter_RSE, R);
|
||||
internal static readonly EncounterStatic3[] StaticS = GetEncounters(Encounter_RSE, S);
|
||||
internal static readonly EncounterStatic3[] StaticE = GetEncounters(Encounter_RSE, E);
|
||||
internal static readonly EncounterTrade3[] TradeGift_E =
|
||||
{
|
||||
new(TradeNames, 03, E , 0x00000084, 273, 04) { Ability = OnlySecond, TID16 = 38726, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(5,4,5,4,4,4), Contest = TradeContest_Cool }, // Ralts (Level 4 Route 102) -> Seedot
|
||||
new(TradeNames, 04, E , 0x0000006F, 311, 05) { Ability = OnlyFirst, TID16 = 08460, SID16 = 00001, OTGender = 0, Gender = 1, IVs = new(4,4,4,5,5,4), Contest = TradeContest_Cute }, // Volbeat (Level 5 Breeding) -> Plusle
|
||||
new(TradeNames, 05, E , 0x0000007F, 116, 05) { Ability = OnlyFirst, TID16 = 46285, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(5,4,4,4,5,4), Contest = TradeContest_Tough }, // Bagon (Level 5 Breeding) -> Horsea*
|
||||
new(TradeNames, 06, E , 0x0000008B, 052, 03) { Ability = OnlyFirst, TID16 = 25945, SID16 = 00001, OTGender = 1, Gender = 0, IVs = new(4,5,4,5,4,4), Contest = TradeContest_Clever }, // Skitty (Level 3 Trade)-> Meowth*
|
||||
// If Pokémon with * is evolved in a Generation IV or V game, its Ability will become its second Ability.
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,115 +4,124 @@ namespace PKHeX.Core;
|
|||
|
||||
internal static class Encounters3XD
|
||||
{
|
||||
private static readonly EncounterStatic3[] Encounter_XDGift =
|
||||
internal static readonly EncounterStatic3XD[] Gifts =
|
||||
{
|
||||
new(133, 10, GameVersion.XD) { FatefulEncounter = true, Gift = true, Location = 000, Moves = new(044) }, // Eevee (Bite)
|
||||
new(152, 05, GameVersion.XD) { FatefulEncounter = true, Gift = true, Location = 016, Moves = new(246,033,045,338) }, // Chikorita
|
||||
new(155, 05, GameVersion.XD) { FatefulEncounter = true, Gift = true, Location = 016, Moves = new(179,033,043,307) }, // Cyndaquil
|
||||
new(158, 05, GameVersion.XD) { FatefulEncounter = true, Gift = true, Location = 016, Moves = new(242,010,043,308) }, // Totodile
|
||||
new(133, 10) { FixedBall = Ball.Poke, FatefulEncounter = true, Location = 000, Moves = new(033,039,044,028) }, // Eevee (Bite)
|
||||
new(152, 05) { FixedBall = Ball.Poke, FatefulEncounter = true, Location = 016, Moves = new(246,033,045,338) }, // Chikorita
|
||||
new(155, 05) { FixedBall = Ball.Poke, FatefulEncounter = true, Location = 016, Moves = new(179,033,043,307) }, // Cyndaquil
|
||||
new(158, 05) { FixedBall = Ball.Poke, FatefulEncounter = true, Location = 016, Moves = new(242,010,043,308) }, // Totodile
|
||||
};
|
||||
|
||||
private static readonly EncounterStaticShadow[] Encounter_XD =
|
||||
private static readonly string[] Hordel = { string.Empty, "ダニー", "HORDEL", "VOLKER", "ODINO", "HORAZ", string.Empty, "HORDEL" };
|
||||
private static readonly string[] Zaprong = { string.Empty, "コンセント", "ZAPRONG", "ZAPRONG", "ZAPRONG", "ZAPRONG", string.Empty, "ZAPRONG" };
|
||||
private static string[] Duking => Encounters3Colo.TrainerNameDuking;
|
||||
|
||||
internal static readonly EncounterTrade3XD[] Trades =
|
||||
{
|
||||
new(GameVersion.XD, 01, 03000, First) { FatefulEncounter = true, Species = 216, Level = 11, Moves = new(216,287,122,232), Location = 143, Gift = true }, // Teddiursa: Cipher Peon Naps @ Pokémon HQ Lab -- treat as Gift as it can only be captured in a Poké Ball
|
||||
new(GameVersion.XD, 02, 02000, Vulpix) { FatefulEncounter = true, Species = 037, Level = 18, Moves = new(257,204,052,091), Location = 109 }, // Vulpix: Cipher Peon Mesin @ ONBS Building
|
||||
new(GameVersion.XD, 03, 01500, Spheal) { FatefulEncounter = true, Species = 363, Level = 17, Moves = new(062,204,055,189), Location = 011 }, // Spheal: Cipher Peon Blusix @ Cipher Lab
|
||||
new(GameVersion.XD, 03, 01500, Spheal) { FatefulEncounter = true, Species = 363, Level = 17, Moves = new(062,204,055,189), Location = 100 }, // Spheal: Cipher Peon Blusix @ Phenac City
|
||||
new(GameVersion.XD, 04, 01500, First) { FatefulEncounter = true, Species = 343, Level = 17, Moves = new(317,287,189,060), Location = 011 }, // Baltoy: Cipher Peon Browsix @ Cipher Lab
|
||||
new(GameVersion.XD, 04, 01500, First) { FatefulEncounter = true, Species = 343, Level = 17, Moves = new(317,287,189,060), Location = 096 }, // Baltoy: Cipher Peon Browsix @ Phenac City
|
||||
new(GameVersion.XD, 05, 01500, First) { FatefulEncounter = true, Species = 179, Level = 17, Moves = new(034,215,084,086), Location = 011 }, // Mareep: Cipher Peon Yellosix @ Cipher Lab
|
||||
new(GameVersion.XD, 05, 01500, First) { FatefulEncounter = true, Species = 179, Level = 17, Moves = new(034,215,084,086), Location = 096 }, // Mareep: Cipher Peon Yellosix @ Phenac City
|
||||
new(GameVersion.XD, 06, 01500, Gulpin) { FatefulEncounter = true, Species = 316, Level = 17, Moves = new(351,047,124,092), Location = 011 }, // Gulpin: Cipher Peon Purpsix @ Cipher Lab
|
||||
new(GameVersion.XD, 06, 01500, Gulpin) { FatefulEncounter = true, Species = 316, Level = 17, Moves = new(351,047,124,092), Location = 100 }, // Gulpin: Cipher Peon Purpsix @ Phenac City
|
||||
new(GameVersion.XD, 07, 01500, Seedot) { FatefulEncounter = true, Species = 273, Level = 17, Moves = new(202,287,331,290), Location = 011 }, // Seedot: Cipher Peon Greesix @ Cipher Lab
|
||||
new(GameVersion.XD, 07, 01500, Seedot) { FatefulEncounter = true, Species = 273, Level = 17, Moves = new(202,287,331,290), Location = 100 }, // Seedot: Cipher Peon Greesix @ Phenac City
|
||||
new(GameVersion.XD, 08, 01500, Spinarak) { FatefulEncounter = true, Species = 167, Level = 14, Moves = new(091,287,324,101), Location = 010 }, // Spinarak: Cipher Peon Nexir @ Cipher Lab
|
||||
new(GameVersion.XD, 09, 01500, Numel) { FatefulEncounter = true, Species = 322, Level = 14, Moves = new(036,204,091,052), Location = 009 }, // Numel: Cipher Peon Solox @ Cipher Lab
|
||||
new(GameVersion.XD, 10, 01700, First) { FatefulEncounter = true, Species = 318, Level = 15, Moves = new(352,287,184,044), Location = 008 }, // Carvanha: Cipher Peon Cabol @ Cipher Lab
|
||||
new(GameVersion.XD, 11, 03000, Roselia) { FatefulEncounter = true, Species = 315, Level = 22, Moves = new(345,186,320,073), Location = 094 }, // Roselia: Cipher Peon Fasin @ Phenac City
|
||||
new(GameVersion.XD, 12, 02500, Delcatty) { FatefulEncounter = true, Species = 301, Level = 18, Moves = new(290,186,213,351), Location = 008 }, // Delcatty: Cipher Admin Lovrina @ Cipher Lab
|
||||
new(GameVersion.XD, 13, 04000, Nosepass) { FatefulEncounter = true, Species = 299, Level = 26, Moves = new(085,270,086,157), Location = 090 }, // Nosepass: Wanderer Miror B. @ Poké Spots
|
||||
new(GameVersion.XD, 14, 01500, First) { FatefulEncounter = true, Species = 228, Level = 17, Moves = new(185,204,052,046), Location = 100 }, // Houndour: Cipher Peon Resix @ Phenac City
|
||||
new(GameVersion.XD, 14, 01500, First) { FatefulEncounter = true, Species = 228, Level = 17, Moves = new(185,204,052,046), Location = 011 }, // Houndour: Cipher Peon Resix @ Cipher Lab
|
||||
new(GameVersion.XD, 15, 02000, Makuhita) { FatefulEncounter = true, Species = 296, Level = 18, Moves = new(280,287,292,317), Location = 109 }, // Makuhita: Cipher Peon Torkin @ ONBS Building
|
||||
new(GameVersion.XD, 16, 02200, Duskull) { FatefulEncounter = true, Species = 355, Level = 19, Moves = new(247,270,310,109), Location = 110 }, // Duskull: Cipher Peon Lobar @ ONBS Building
|
||||
new(GameVersion.XD, 17, 02200, Ralts) { FatefulEncounter = true, Species = 280, Level = 20, Moves = new(351,047,115,093), Location = 119 }, // Ralts: Cipher Peon Feldas @ ONBS Building
|
||||
new(GameVersion.XD, 18, 02500, Mawile) { FatefulEncounter = true, Species = 303, Level = 22, Moves = new(206,047,011,334), Location = 111 }, // Mawile: Cipher Cmdr Exol @ ONBS Building
|
||||
new(GameVersion.XD, 19, 02500, Snorunt) { FatefulEncounter = true, Species = 361, Level = 20, Moves = new(352,047,044,196), Location = 097 }, // Snorunt: Cipher Peon Exinn @ Phenac City
|
||||
new(GameVersion.XD, 20, 02500, Pineco) { FatefulEncounter = true, Species = 204, Level = 20, Moves = new(042,287,191,068), Location = 096 }, // Pineco: Cipher Peon Gonrap @ Phenac City
|
||||
new(GameVersion.XD, 21, 02500, Swinub) { FatefulEncounter = true, Species = 220, Level = 22, Moves = new(246,204,054,341), Location = 100 }, // Swinub: Cipher Peon Greck @ Phenac City
|
||||
new(GameVersion.XD, 22, 02500, Natu) { FatefulEncounter = true, Species = 177, Level = 22, Moves = new(248,226,101,332), Location = 094 }, // Natu: Cipher Peon Eloin @ Phenac City
|
||||
new(GameVersion.XD, 23, 01800, Shroomish) { FatefulEncounter = true, Species = 285, Level = 15, Moves = new(206,287,072,078), Location = 008 }, // Shroomish: Cipher R&D Klots @ Cipher Lab
|
||||
new(GameVersion.XD, 24, 03500, Meowth) { FatefulEncounter = true, Species = 052, Level = 22, Moves = new(163,047,006,044), Location = 094 }, // Meowth: Cipher Peon Fostin @ Phenac City
|
||||
new(GameVersion.XD, 25, 04500, Spearow) { FatefulEncounter = true, Species = 021, Level = 22, Moves = new(206,226,043,332), Location = 107 }, // Spearow: Cipher Peon Ezin @ Phenac Stadium
|
||||
new(GameVersion.XD, 26, 03000, Grimer) { FatefulEncounter = true, Species = 088, Level = 23, Moves = new(188,270,325,107), Location = 107 }, // Grimer: Cipher Peon Faltly @ Phenac Stadium
|
||||
new(GameVersion.XD, 27, 03500, Seel) { FatefulEncounter = true, Species = 086, Level = 23, Moves = new(057,270,219,058), Location = 107 }, // Seel: Cipher Peon Egrog @ Phenac Stadium
|
||||
new(GameVersion.XD, 28, 05000, Lunatone) { FatefulEncounter = true, Species = 337, Level = 25, Moves = new(094,226,240,317), Location = 107 }, // Lunatone: Cipher Admin Snattle @ Phenac Stadium
|
||||
new(GameVersion.XD, 29, 02500, Voltorb) { FatefulEncounter = true, Species = 100, Level = 19, Moves = new(243,287,209,129), Location = 092 }, // Voltorb: Wanderer Miror B. @ Cave Poké Spot
|
||||
new(GameVersion.XD, 30, 05000, First) { FatefulEncounter = true, Species = 335, Level = 28, Moves = new(280,287,068,306), Location = 071 }, // Zangoose: Thug Zook @ Cipher Key Lair
|
||||
new(GameVersion.XD, 31, 04000, Growlithe) { FatefulEncounter = true, Species = 058, Level = 28, Moves = new(053,204,044,036), Location = 064 }, // Growlithe: Cipher Peon Humah @ Cipher Key Lair
|
||||
new(GameVersion.XD, 32, 04000, Paras) { FatefulEncounter = true, Species = 046, Level = 28, Moves = new(147,287,163,206), Location = 064 }, // Paras: Cipher Peon Humah @ Cipher Key Lair
|
||||
new(GameVersion.XD, 33, 04000, First) { FatefulEncounter = true, Species = 090, Level = 29, Moves = new(036,287,057,062), Location = 065 }, // Shellder: Cipher Peon Gorog @ Cipher Key Lair
|
||||
new(GameVersion.XD, 34, 04500, First) { FatefulEncounter = true, Species = 015, Level = 30, Moves = new(188,226,041,014), Location = 066 }, // Beedrill: Cipher Peon Lok @ Cipher Key Lair
|
||||
new(GameVersion.XD, 35, 04000, Pidgeotto) { FatefulEncounter = true, Species = 017, Level = 30, Moves = new(017,287,211,297), Location = 066 }, // Pidgeotto: Cipher Peon Lok @ Cipher Key Lair
|
||||
new(GameVersion.XD, 36, 04000, Butterfree){ FatefulEncounter = true, Species = 012, Level = 30, Moves = new(094,234,079,332), Location = 067 }, // Butterfree: Cipher Peon Targ @ Cipher Key Lair
|
||||
new(GameVersion.XD, 37, 04000, Tangela) { FatefulEncounter = true, Species = 114, Level = 30, Moves = new(076,234,241,275), Location = 067 }, // Tangela: Cipher Peon Targ @ Cipher Key Lair
|
||||
new(GameVersion.XD, 38, 06000, Raticate) { FatefulEncounter = true, Species = 020, Level = 34, Moves = new(162,287,184,158), Location = 076 }, // Raticate: Chaser Furgy @ Citadark Isle
|
||||
new(GameVersion.XD, 39, 04000, Venomoth) { FatefulEncounter = true, Species = 049, Level = 32, Moves = new(318,287,164,094), Location = 070 }, // Venomoth: Cipher Peon Angic @ Cipher Key Lair
|
||||
new(GameVersion.XD, 40, 04000, Weepinbell){ FatefulEncounter = true, Species = 070, Level = 32, Moves = new(345,234,188,230), Location = 070 }, // Weepinbell: Cipher Peon Angic @ Cipher Key Lair
|
||||
new(GameVersion.XD, 41, 05000, Arbok) { FatefulEncounter = true, Species = 024, Level = 33, Moves = new(188,287,137,044), Location = 070 }, // Arbok: Cipher Peon Smarton @ Cipher Key Lair
|
||||
new(GameVersion.XD, 42, 06000, Primeape) { FatefulEncounter = true, Species = 057, Level = 34, Moves = new(238,270,116,179), Location = 069 }, // Primeape: Cipher Admin Gorigan @ Cipher Key Lair
|
||||
new(GameVersion.XD, 43, 05500, Hypno) { FatefulEncounter = true, Species = 097, Level = 34, Moves = new(094,226,096,247), Location = 069 }, // Hypno: Cipher Admin Gorigan @ Cipher Key Lair
|
||||
new(GameVersion.XD, 44, 06500, Golduck) { FatefulEncounter = true, Species = 055, Level = 33, Moves = new(127,204,244,280), Location = 088 }, // Golduck: Navigator Abson @ Citadark Isle
|
||||
new(GameVersion.XD, 45, 07000, Sableye) { FatefulEncounter = true, Species = 302, Level = 33, Moves = new(247,270,185,105), Location = 088 }, // Sableye: Navigator Abson @ Citadark Isle
|
||||
new(GameVersion.XD, 46, 04500, Magneton) { FatefulEncounter = true, Species = 082, Level = 30, Moves = new(038,287,240,087), Location = 067 }, // Magneton: Cipher Peon Snidle @ Cipher Key Lair
|
||||
new(GameVersion.XD, 47, 08000, Dodrio) { FatefulEncounter = true, Species = 085, Level = 34, Moves = new(065,226,097,161), Location = 076 }, // Dodrio: Chaser Furgy @ Citadark Isle
|
||||
new(GameVersion.XD, 48, 05500, Farfetchd) { FatefulEncounter = true, Species = 083, Level = 36, Moves = new(163,226,014,332), Location = 076 }, // Farfetch'd: Cipher Admin Lovrina @ Citadark Isle
|
||||
new(GameVersion.XD, 49, 06500, Altaria) { FatefulEncounter = true, Species = 334, Level = 36, Moves = new(225,215,076,332), Location = 076 }, // Altaria: Cipher Admin Lovrina @ Citadark Isle
|
||||
new(GameVersion.XD, 50, 06000, Kangaskhan){ FatefulEncounter = true, Species = 115, Level = 35, Moves = new(089,047,039,146), Location = 085 }, // Kangaskhan: Cipher Peon Litnar @ Citadark Isle
|
||||
new(GameVersion.XD, 51, 07000, Banette) { FatefulEncounter = true, Species = 354, Level = 37, Moves = new(185,270,247,174), Location = 085 }, // Banette: Cipher Peon Litnar @ Citadark Isle
|
||||
new(GameVersion.XD, 52, 07000, Magmar) { FatefulEncounter = true, Species = 126, Level = 36, Moves = new(126,266,238,009), Location = 077 }, // Magmar: Cipher Peon Grupel @ Citadark Isle
|
||||
new(GameVersion.XD, 53, 07000, Pinsir) { FatefulEncounter = true, Species = 127, Level = 35, Moves = new(012,270,206,066), Location = 077 }, // Pinsir: Cipher Peon Grupel @ Citadark Isle
|
||||
new(GameVersion.XD, 54, 05500, Magcargo) { FatefulEncounter = true, Species = 219, Level = 38, Moves = new(257,287,089,053), Location = 080 }, // Magcargo: Cipher Peon Kolest @ Citadark Isle
|
||||
new(GameVersion.XD, 55, 06000, Rapidash) { FatefulEncounter = true, Species = 078, Level = 40, Moves = new(076,226,241,053), Location = 080 }, // Rapidash: Cipher Peon Kolest @ Citadark Isle
|
||||
new(GameVersion.XD, 56, 06000, Hitmonchan){ FatefulEncounter = true, Species = 107, Level = 38, Moves = new(005,270,170,327), Location = 081 }, // Hitmonchan: Cipher Peon Karbon @ Citadark Isle
|
||||
new(GameVersion.XD, 57, 07000, Hitmonlee) { FatefulEncounter = true, Species = 106, Level = 38, Moves = new(136,287,170,025), Location = 081 }, // Hitmonlee: Cipher Peon Petro @ Citadark Isle
|
||||
new(GameVersion.XD, 58, 05000, Lickitung) { FatefulEncounter = true, Species = 108, Level = 38, Moves = new(038,270,111,205), Location = 084 }, // Lickitung: Cipher Peon Geftal @ Citadark Isle
|
||||
new(GameVersion.XD, 59, 08000, Scyther) { FatefulEncounter = true, Species = 123, Level = 40, Moves = new(013,234,318,163), Location = 084 }, // Scyther: Cipher Peon Leden @ Citadark Isle
|
||||
new(GameVersion.XD, 60, 04000, Chansey) { FatefulEncounter = true, Species = 113, Level = 39, Moves = new(085,186,135,285), Location = 084 }, // Chansey: Cipher Peon Leden @ Citadark Isle
|
||||
new(GameVersion.XD, 60, 04000, Chansey) { FatefulEncounter = true, Species = 113, Level = 39, Moves = new(085,186,135,285), Location = 087 }, // Chansey: Cipher Peon Leden @ Citadark Isle
|
||||
new(GameVersion.XD, 61, 07500, Solrock) { FatefulEncounter = true, Species = 338, Level = 41, Moves = new(094,226,241,322), Location = 087 }, // Solrock: Cipher Admin Snattle @ Citadark Isle
|
||||
new(GameVersion.XD, 62, 07500, Starmie) { FatefulEncounter = true, Species = 121, Level = 41, Moves = new(127,287,058,105), Location = 087 }, // Starmie: Cipher Admin Snattle @ Citadark Isle
|
||||
new(GameVersion.XD, 63, 07000, Electabuzz){ FatefulEncounter = true, Species = 125, Level = 43, Moves = new(238,266,086,085), Location = 087 }, // Electabuzz: Cipher Admin Ardos @ Citadark Isle
|
||||
new(GameVersion.XD, 64, 07000, First) { FatefulEncounter = true, Species = 277, Level = 43, Moves = new(143,226,097,263), Location = 087 }, // Swellow: Cipher Admin Ardos @ Citadark Isle
|
||||
new(GameVersion.XD, 65, 09000, Snorlax) { FatefulEncounter = true, Species = 143, Level = 43, Moves = new(090,287,174,034), Location = 087 }, // Snorlax: Cipher Admin Ardos @ Citadark Isle
|
||||
new(GameVersion.XD, 66, 07500, Poliwrath) { FatefulEncounter = true, Species = 062, Level = 42, Moves = new(056,270,240,280), Location = 087 }, // Poliwrath: Cipher Admin Gorigan @ Citadark Isle
|
||||
new(GameVersion.XD, 67, 06500, MrMime) { FatefulEncounter = true, Species = 122, Level = 42, Moves = new(094,266,227,009), Location = 087 }, // Mr. Mime: Cipher Admin Gorigan @ Citadark Isle
|
||||
new(GameVersion.XD, 68, 05000, Dugtrio) { FatefulEncounter = true, Species = 051, Level = 40, Moves = new(089,204,201,161), Location = 075 }, // Dugtrio: Cipher Peon Kolax @ Citadark Isle
|
||||
new(GameVersion.XD, 69, 07000, Manectric) { FatefulEncounter = true, Species = 310, Level = 44, Moves = new(087,287,240,044), Location = 073 }, // Manectric: Cipher Admin Eldes @ Citadark Isle
|
||||
new(GameVersion.XD, 70, 09000, Salamence) { FatefulEncounter = true, Species = 373, Level = 50, Moves = new(337,287,349,332), Location = 073 }, // Salamence: Cipher Admin Eldes @ Citadark Isle
|
||||
new(GameVersion.XD, 71, 06500, Marowak) { FatefulEncounter = true, Species = 105, Level = 44, Moves = new(089,047,014,157), Location = 073 }, // Marowak: Cipher Admin Eldes @ Citadark Isle
|
||||
new(GameVersion.XD, 72, 06000, Lapras) { FatefulEncounter = true, Species = 131, Level = 44, Moves = new(056,215,240,059), Location = 073 }, // Lapras: Cipher Admin Eldes @ Citadark Isle
|
||||
new(GameVersion.XD, 73, 12000, First) { FatefulEncounter = true, Species = 249, Level = 50, Moves = new(354,297,089,056), Location = 074 }, // Lugia: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 74, 10000, Zapdos) { FatefulEncounter = true, Species = 145, Level = 50, Moves = new(326,226,319,085), Location = 074 }, // Zapdos: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 75, 10000, Moltres) { FatefulEncounter = true, Species = 146, Level = 50, Moves = new(326,234,261,053), Location = 074 }, // Moltres: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 76, 10000, Articuno) { FatefulEncounter = true, Species = 144, Level = 50, Moves = new(326,215,114,058), Location = 074 }, // Articuno: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 77, 09000, Tauros) { FatefulEncounter = true, Species = 128, Level = 46, Moves = new(089,287,039,034), Location = 074 }, // Tauros: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 78, 07000, First) { FatefulEncounter = true, Species = 112, Level = 46, Moves = new(224,270,184,089), Location = 074 }, // Rhydon: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 79, 09000, Exeggutor) { FatefulEncounter = true, Species = 103, Level = 46, Moves = new(094,287,095,246), Location = 074 }, // Exeggutor: Grand Master Greevil @ Citadark Isle
|
||||
new(GameVersion.XD, 80, 09000, Dragonite) { FatefulEncounter = true, Species = 149, Level = 55, Moves = new(063,215,349,089), Location = 162 }, // Dragonite: Wanderer Miror B. @ Gateon Port
|
||||
new(GameVersion.XD, 81, 04500, First) { FatefulEncounter = true, Species = 175, Level = 25, Moves = new(266,161,246,270), Location = 164, Gift = true }, // Togepi: Pokémon Trainer Hordel @ Outskirt Stand
|
||||
new(GameVersion.XD, 82, 02500, Poochyena) { FatefulEncounter = true, Species = 261, Level = 10, Moves = new(091,215,305,336), Location = 162 }, // Poochyena: Bodybuilder Kilen @ Gateon Port
|
||||
new(GameVersion.XD, 83, 02500, Ledyba) { FatefulEncounter = true, Species = 165, Level = 10, Moves = new(060,287,332,048), Location = 153 }, // Ledyba: Casual Guy Cyle @ Gateon Port
|
||||
new(239, 20, Hordel, Zaprong) { Location = 164, TID16 = 41400, Moves = new(008, 007, 009, 238) }, // Elekid @ Snagem Hideout
|
||||
new(307, 20, Duking) { Location = 116, TID16 = 37149, Moves = new(223, 093, 247, 197) }, // Meditite @ Pyrite Town
|
||||
new(213, 20, Duking) { Location = 116, TID16 = 37149, Moves = new(092, 164, 188, 227) }, // Shuckle @ Pyrite Town
|
||||
new(246, 20, Duking) { Location = 116, TID16 = 37149, Moves = new(201, 349, 044, 200) }, // Larvitar @ Pyrite Town
|
||||
};
|
||||
|
||||
internal static readonly EncounterArea3XD[] SlotsXD =
|
||||
internal static readonly EncounterShadow3XD[] Shadow =
|
||||
{
|
||||
new(01, 03000, First) { Species = 216, Level = 11, Moves = new(216,287,122,232), Location = 143, FixedBall = Ball.Poke }, // Teddiursa: Cipher Peon Naps @ Pokémon HQ Lab -- treat as Gift as it can only be captured in a Poké Ball
|
||||
new(02, 02000, Vulpix) { Species = 037, Level = 18, Moves = new(257,204,052,091), Location = 109 }, // Vulpix: Cipher Peon Mesin @ ONBS Building
|
||||
new(03, 01500, Spheal) { Species = 363, Level = 17, Moves = new(062,204,055,189), Location = 011 }, // Spheal: Cipher Peon Blusix @ Cipher Lab
|
||||
new(03, 01500, Spheal) { Species = 363, Level = 17, Moves = new(062,204,055,189), Location = 100 }, // Spheal: Cipher Peon Blusix @ Phenac City
|
||||
new(04, 01500, First) { Species = 343, Level = 17, Moves = new(317,287,189,060), Location = 011 }, // Baltoy: Cipher Peon Browsix @ Cipher Lab
|
||||
new(04, 01500, First) { Species = 343, Level = 17, Moves = new(317,287,189,060), Location = 096 }, // Baltoy: Cipher Peon Browsix @ Phenac City
|
||||
new(05, 01500, First) { Species = 179, Level = 17, Moves = new(034,215,084,086), Location = 011 }, // Mareep: Cipher Peon Yellosix @ Cipher Lab
|
||||
new(05, 01500, First) { Species = 179, Level = 17, Moves = new(034,215,084,086), Location = 096 }, // Mareep: Cipher Peon Yellosix @ Phenac City
|
||||
new(06, 01500, Gulpin) { Species = 316, Level = 17, Moves = new(351,047,124,092), Location = 011 }, // Gulpin: Cipher Peon Purpsix @ Cipher Lab
|
||||
new(06, 01500, Gulpin) { Species = 316, Level = 17, Moves = new(351,047,124,092), Location = 100 }, // Gulpin: Cipher Peon Purpsix @ Phenac City
|
||||
new(07, 01500, Seedot) { Species = 273, Level = 17, Moves = new(202,287,331,290), Location = 011 }, // Seedot: Cipher Peon Greesix @ Cipher Lab
|
||||
new(07, 01500, Seedot) { Species = 273, Level = 17, Moves = new(202,287,331,290), Location = 100 }, // Seedot: Cipher Peon Greesix @ Phenac City
|
||||
new(08, 01500, Spinarak) { Species = 167, Level = 14, Moves = new(091,287,324,101), Location = 010 }, // Spinarak: Cipher Peon Nexir @ Cipher Lab
|
||||
new(09, 01500, Numel) { Species = 322, Level = 14, Moves = new(036,204,091,052), Location = 009 }, // Numel: Cipher Peon Solox @ Cipher Lab
|
||||
new(10, 01700, First) { Species = 318, Level = 15, Moves = new(352,287,184,044), Location = 008 }, // Carvanha: Cipher Peon Cabol @ Cipher Lab
|
||||
new(11, 03000, Roselia) { Species = 315, Level = 22, Moves = new(345,186,320,073), Location = 094 }, // Roselia: Cipher Peon Fasin @ Phenac City
|
||||
new(12, 02500, Delcatty) { Species = 301, Level = 18, Moves = new(290,186,213,351), Location = 008 }, // Delcatty: Cipher Admin Lovrina @ Cipher Lab
|
||||
new(13, 04000, Nosepass) { Species = 299, Level = 26, Moves = new(085,270,086,157), Location = 090 }, // Nosepass: Wanderer Miror B. @ Poké Spots
|
||||
new(14, 01500, First) { Species = 228, Level = 17, Moves = new(185,204,052,046), Location = 100 }, // Houndour: Cipher Peon Resix @ Phenac City
|
||||
new(14, 01500, First) { Species = 228, Level = 17, Moves = new(185,204,052,046), Location = 011 }, // Houndour: Cipher Peon Resix @ Cipher Lab
|
||||
new(15, 02000, Makuhita) { Species = 296, Level = 18, Moves = new(280,287,292,317), Location = 109 }, // Makuhita: Cipher Peon Torkin @ ONBS Building
|
||||
new(16, 02200, Duskull) { Species = 355, Level = 19, Moves = new(247,270,310,109), Location = 110 }, // Duskull: Cipher Peon Lobar @ ONBS Building
|
||||
new(17, 02200, Ralts) { Species = 280, Level = 20, Moves = new(351,047,115,093), Location = 119 }, // Ralts: Cipher Peon Feldas @ ONBS Building
|
||||
new(18, 02500, Mawile) { Species = 303, Level = 22, Moves = new(206,047,011,334), Location = 111 }, // Mawile: Cipher Cmdr Exol @ ONBS Building
|
||||
new(19, 02500, Snorunt) { Species = 361, Level = 20, Moves = new(352,047,044,196), Location = 097 }, // Snorunt: Cipher Peon Exinn @ Phenac City
|
||||
new(20, 02500, Pineco) { Species = 204, Level = 20, Moves = new(042,287,191,068), Location = 096 }, // Pineco: Cipher Peon Gonrap @ Phenac City
|
||||
new(21, 02500, Swinub) { Species = 220, Level = 22, Moves = new(246,204,054,341), Location = 100 }, // Swinub: Cipher Peon Greck @ Phenac City
|
||||
new(22, 02500, Natu) { Species = 177, Level = 22, Moves = new(248,226,101,332), Location = 094 }, // Natu: Cipher Peon Eloin @ Phenac City
|
||||
new(23, 01800, Shroomish) { Species = 285, Level = 15, Moves = new(206,287,072,078), Location = 008 }, // Shroomish: Cipher R&D Klots @ Cipher Lab
|
||||
new(24, 03500, Meowth) { Species = 052, Level = 22, Moves = new(163,047,006,044), Location = 094 }, // Meowth: Cipher Peon Fostin @ Phenac City
|
||||
new(25, 04500, Spearow) { Species = 021, Level = 22, Moves = new(206,226,043,332), Location = 107 }, // Spearow: Cipher Peon Ezin @ Phenac Stadium
|
||||
new(26, 03000, Grimer) { Species = 088, Level = 23, Moves = new(188,270,325,107), Location = 107 }, // Grimer: Cipher Peon Faltly @ Phenac Stadium
|
||||
new(27, 03500, Seel) { Species = 086, Level = 23, Moves = new(057,270,219,058), Location = 107 }, // Seel: Cipher Peon Egrog @ Phenac Stadium
|
||||
new(28, 05000, Lunatone) { Species = 337, Level = 25, Moves = new(094,226,240,317), Location = 107 }, // Lunatone: Cipher Admin Snattle @ Phenac Stadium
|
||||
new(29, 02500, Voltorb) { Species = 100, Level = 19, Moves = new(243,287,209,129), Location = 092 }, // Voltorb: Wanderer Miror B. @ Cave Poké Spot
|
||||
new(30, 05000, First) { Species = 335, Level = 28, Moves = new(280,287,068,306), Location = 071 }, // Zangoose: Thug Zook @ Cipher Key Lair
|
||||
new(31, 04000, Growlithe) { Species = 058, Level = 28, Moves = new(053,204,044,036), Location = 064 }, // Growlithe: Cipher Peon Humah @ Cipher Key Lair
|
||||
new(32, 04000, Paras) { Species = 046, Level = 28, Moves = new(147,287,163,206), Location = 064 }, // Paras: Cipher Peon Humah @ Cipher Key Lair
|
||||
new(33, 04000, First) { Species = 090, Level = 29, Moves = new(036,287,057,062), Location = 065 }, // Shellder: Cipher Peon Gorog @ Cipher Key Lair
|
||||
new(34, 04500, First) { Species = 015, Level = 30, Moves = new(188,226,041,014), Location = 066 }, // Beedrill: Cipher Peon Lok @ Cipher Key Lair
|
||||
new(35, 04000, Pidgeotto) { Species = 017, Level = 30, Moves = new(017,287,211,297), Location = 066 }, // Pidgeotto: Cipher Peon Lok @ Cipher Key Lair
|
||||
new(36, 04000, Butterfree){ Species = 012, Level = 30, Moves = new(094,234,079,332), Location = 067 }, // Butterfree: Cipher Peon Targ @ Cipher Key Lair
|
||||
new(37, 04000, Tangela) { Species = 114, Level = 30, Moves = new(076,234,241,275), Location = 067 }, // Tangela: Cipher Peon Targ @ Cipher Key Lair
|
||||
new(38, 06000, Raticate) { Species = 020, Level = 34, Moves = new(162,287,184,158), Location = 076 }, // Raticate: Chaser Furgy @ Citadark Isle
|
||||
new(39, 04000, Venomoth) { Species = 049, Level = 32, Moves = new(318,287,164,094), Location = 070 }, // Venomoth: Cipher Peon Angic @ Cipher Key Lair
|
||||
new(40, 04000, Weepinbell){ Species = 070, Level = 32, Moves = new(345,234,188,230), Location = 070 }, // Weepinbell: Cipher Peon Angic @ Cipher Key Lair
|
||||
new(41, 05000, Arbok) { Species = 024, Level = 33, Moves = new(188,287,137,044), Location = 070 }, // Arbok: Cipher Peon Smarton @ Cipher Key Lair
|
||||
new(42, 06000, Primeape) { Species = 057, Level = 34, Moves = new(238,270,116,179), Location = 069 }, // Primeape: Cipher Admin Gorigan @ Cipher Key Lair
|
||||
new(43, 05500, Hypno) { Species = 097, Level = 34, Moves = new(094,226,096,247), Location = 069 }, // Hypno: Cipher Admin Gorigan @ Cipher Key Lair
|
||||
new(44, 06500, Golduck) { Species = 055, Level = 33, Moves = new(127,204,244,280), Location = 088 }, // Golduck: Navigator Abson @ Citadark Isle
|
||||
new(45, 07000, Sableye) { Species = 302, Level = 33, Moves = new(247,270,185,105), Location = 088 }, // Sableye: Navigator Abson @ Citadark Isle
|
||||
new(46, 04500, Magneton) { Species = 082, Level = 30, Moves = new(038,287,240,087), Location = 067 }, // Magneton: Cipher Peon Snidle @ Cipher Key Lair
|
||||
new(47, 08000, Dodrio) { Species = 085, Level = 34, Moves = new(065,226,097,161), Location = 076 }, // Dodrio: Chaser Furgy @ Citadark Isle
|
||||
new(48, 05500, Farfetchd) { Species = 083, Level = 36, Moves = new(163,226,014,332), Location = 076 }, // Farfetch'd: Cipher Admin Lovrina @ Citadark Isle
|
||||
new(49, 06500, Altaria) { Species = 334, Level = 36, Moves = new(225,215,076,332), Location = 076 }, // Altaria: Cipher Admin Lovrina @ Citadark Isle
|
||||
new(50, 06000, Kangaskhan){ Species = 115, Level = 35, Moves = new(089,047,039,146), Location = 085 }, // Kangaskhan: Cipher Peon Litnar @ Citadark Isle
|
||||
new(51, 07000, Banette) { Species = 354, Level = 37, Moves = new(185,270,247,174), Location = 085 }, // Banette: Cipher Peon Litnar @ Citadark Isle
|
||||
new(52, 07000, Magmar) { Species = 126, Level = 36, Moves = new(126,266,238,009), Location = 077 }, // Magmar: Cipher Peon Grupel @ Citadark Isle
|
||||
new(53, 07000, Pinsir) { Species = 127, Level = 35, Moves = new(012,270,206,066), Location = 077 }, // Pinsir: Cipher Peon Grupel @ Citadark Isle
|
||||
new(54, 05500, Magcargo) { Species = 219, Level = 38, Moves = new(257,287,089,053), Location = 080 }, // Magcargo: Cipher Peon Kolest @ Citadark Isle
|
||||
new(55, 06000, Rapidash) { Species = 078, Level = 40, Moves = new(076,226,241,053), Location = 080 }, // Rapidash: Cipher Peon Kolest @ Citadark Isle
|
||||
new(56, 06000, Hitmonchan){ Species = 107, Level = 38, Moves = new(005,270,170,327), Location = 081 }, // Hitmonchan: Cipher Peon Karbon @ Citadark Isle
|
||||
new(57, 07000, Hitmonlee) { Species = 106, Level = 38, Moves = new(136,287,170,025), Location = 081 }, // Hitmonlee: Cipher Peon Petro @ Citadark Isle
|
||||
new(58, 05000, Lickitung) { Species = 108, Level = 38, Moves = new(038,270,111,205), Location = 084 }, // Lickitung: Cipher Peon Geftal @ Citadark Isle
|
||||
new(59, 08000, Scyther) { Species = 123, Level = 40, Moves = new(013,234,318,163), Location = 084 }, // Scyther: Cipher Peon Leden @ Citadark Isle
|
||||
new(60, 04000, Chansey) { Species = 113, Level = 39, Moves = new(085,186,135,285), Location = 084 }, // Chansey: Cipher Peon Leden @ Citadark Isle
|
||||
new(60, 04000, Chansey) { Species = 113, Level = 39, Moves = new(085,186,135,285), Location = 087 }, // Chansey: Cipher Peon Leden @ Citadark Isle
|
||||
new(61, 07500, Solrock) { Species = 338, Level = 41, Moves = new(094,226,241,322), Location = 087 }, // Solrock: Cipher Admin Snattle @ Citadark Isle
|
||||
new(62, 07500, Starmie) { Species = 121, Level = 41, Moves = new(127,287,058,105), Location = 087 }, // Starmie: Cipher Admin Snattle @ Citadark Isle
|
||||
new(63, 07000, Electabuzz){ Species = 125, Level = 43, Moves = new(238,266,086,085), Location = 087 }, // Electabuzz: Cipher Admin Ardos @ Citadark Isle
|
||||
new(64, 07000, First) { Species = 277, Level = 43, Moves = new(143,226,097,263), Location = 087 }, // Swellow: Cipher Admin Ardos @ Citadark Isle
|
||||
new(65, 09000, Snorlax) { Species = 143, Level = 43, Moves = new(090,287,174,034), Location = 087 }, // Snorlax: Cipher Admin Ardos @ Citadark Isle
|
||||
new(66, 07500, Poliwrath) { Species = 062, Level = 42, Moves = new(056,270,240,280), Location = 087 }, // Poliwrath: Cipher Admin Gorigan @ Citadark Isle
|
||||
new(67, 06500, MrMime) { Species = 122, Level = 42, Moves = new(094,266,227,009), Location = 087 }, // Mr. Mime: Cipher Admin Gorigan @ Citadark Isle
|
||||
new(68, 05000, Dugtrio) { Species = 051, Level = 40, Moves = new(089,204,201,161), Location = 075 }, // Dugtrio: Cipher Peon Kolax @ Citadark Isle
|
||||
new(69, 07000, Manectric) { Species = 310, Level = 44, Moves = new(087,287,240,044), Location = 073 }, // Manectric: Cipher Admin Eldes @ Citadark Isle
|
||||
new(70, 09000, Salamence) { Species = 373, Level = 50, Moves = new(337,287,349,332), Location = 073 }, // Salamence: Cipher Admin Eldes @ Citadark Isle
|
||||
new(71, 06500, Marowak) { Species = 105, Level = 44, Moves = new(089,047,014,157), Location = 073 }, // Marowak: Cipher Admin Eldes @ Citadark Isle
|
||||
new(72, 06000, Lapras) { Species = 131, Level = 44, Moves = new(056,215,240,059), Location = 073 }, // Lapras: Cipher Admin Eldes @ Citadark Isle
|
||||
new(73, 12000, First) { Species = 249, Level = 50, Moves = new(354,297,089,056), Location = 074 }, // Lugia: Grand Master Greevil @ Citadark Isle
|
||||
new(74, 10000, Zapdos) { Species = 145, Level = 50, Moves = new(326,226,319,085), Location = 074 }, // Zapdos: Grand Master Greevil @ Citadark Isle
|
||||
new(75, 10000, Moltres) { Species = 146, Level = 50, Moves = new(326,234,261,053), Location = 074 }, // Moltres: Grand Master Greevil @ Citadark Isle
|
||||
new(76, 10000, Articuno) { Species = 144, Level = 50, Moves = new(326,215,114,058), Location = 074 }, // Articuno: Grand Master Greevil @ Citadark Isle
|
||||
new(77, 09000, Tauros) { Species = 128, Level = 46, Moves = new(089,287,039,034), Location = 074 }, // Tauros: Grand Master Greevil @ Citadark Isle
|
||||
new(78, 07000, First) { Species = 112, Level = 46, Moves = new(224,270,184,089), Location = 074 }, // Rhydon: Grand Master Greevil @ Citadark Isle
|
||||
new(79, 09000, Exeggutor) { Species = 103, Level = 46, Moves = new(094,287,095,246), Location = 074 }, // Exeggutor: Grand Master Greevil @ Citadark Isle
|
||||
new(80, 09000, Dragonite) { Species = 149, Level = 55, Moves = new(063,215,349,089), Location = 162 }, // Dragonite: Wanderer Miror B. @ Gateon Port
|
||||
new(81, 04500, First) { Species = 175, Level = 25, Moves = new(266,161,246,270), Location = 164, FixedBall = Ball.Poke }, // Togepi: Pokémon Trainer Hordel @ Outskirt Stand
|
||||
new(82, 02500, Poochyena) { Species = 261, Level = 10, Moves = new(091,215,305,336), Location = 162 }, // Poochyena: Bodybuilder Kilen @ Gateon Port
|
||||
new(83, 02500, Ledyba) { Species = 165, Level = 10, Moves = new(060,287,332,048), Location = 153 }, // Ledyba: Casual Guy Cyle @ Gateon Port
|
||||
};
|
||||
|
||||
internal static readonly EncounterArea3XD[] Slots =
|
||||
{
|
||||
new(90, 027, 23, 207, 20, 328, 20), // Rock (Sandshrew, Gligar, Trapinch)
|
||||
new(91, 187, 20, 231, 20, 283, 20), // Oasis (Hoppip, Phanpy, Surskit)
|
||||
new(92, 041, 21, 304, 21, 194, 21), // Cave (Zubat, Aron, Wooper)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic3[] Encounter_CXDGift = ArrayUtil.ConcatAll(Encounters3Colo.Encounter_ColoGift, Encounter_XDGift);
|
||||
internal static readonly EncounterStaticShadow[] Encounter_CXDShadow = ArrayUtil.ConcatAll(Encounters3Colo.Encounter_Colo, Encounter_XD);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
|
@ -16,60 +14,7 @@ internal static class EncountersWC3
|
|||
new() { Species = 385, Level = 05, ID32 = 20043, OT_Gender = 0, Version = GameVersion.R, Method = PIDType.BACD_R, OT_Name = "WISHMKR", CardTitle = "Wishmaker Jirachi", Language = (int)LanguageID.English },
|
||||
};
|
||||
|
||||
private static WC3[] GetIngameCXDData()
|
||||
{
|
||||
var langs = LanguageCXD;
|
||||
string[] h = {string.Empty, "ダニー", "HORDEL", "VOLKER", "ODINO", "HORAZ", string.Empty, "HORDEL"};
|
||||
string[] d = {string.Empty, "ギンザル", "DUKING", "DOKING", "RODRIGO", "GRAND", string.Empty, "GERMÁN"};
|
||||
string[] z = {string.Empty, "コンセント", "ZAPRONG", "ZAPRONG", "ZAPRONG", "ZAPRONG", string.Empty, "ZAPRONG"};
|
||||
|
||||
const int count = 5;
|
||||
var result = new WC3[count * langs.Length];
|
||||
for (int i = 0, ofs = 0; i < langs.Length; i++)
|
||||
{
|
||||
var id = langs[i];
|
||||
var l = (int)id;
|
||||
|
||||
// Colosseum
|
||||
result[ofs++] = new() { Species = 311, Level = 13, Language = l, Location = 254, ID32 = 37149, OT_Gender = 0, OT_Name = d[l], Version = GameVersion.COLO, CardTitle = $"Special Gift ({id})", Method = PIDType.CXD, Shiny = Shiny.Never, Moves = new(045, 086, 098, 270) }; // Plusle @ Ingame Trade
|
||||
// XD
|
||||
result[ofs++] = new(true) { Species = 239, Level = 20, Language = l, Location = 164, TID16 = 41400, OT_Gender = 0, OT_Name = h[l], Version = GameVersion.XD, CardTitle = $"Trade Togepi ({id})", Method = PIDType.CXD, Moves = new(008, 007, 009, 238), Nickname = z[l] }; // Elekid @ Snagem Hideout
|
||||
result[ofs++] = new(true) { Species = 307, Level = 20, Language = l, Location = 116, TID16 = 37149, OT_Gender = 0, OT_Name = d[l], Version = GameVersion.XD, CardTitle = $"Trade Trapinch ({id})", Method = PIDType.CXD, Moves = new(223, 093, 247, 197) }; // Meditite @ Pyrite Town
|
||||
result[ofs++] = new(true) { Species = 213, Level = 20, Language = l, Location = 116, TID16 = 37149, OT_Gender = 0, OT_Name = d[l], Version = GameVersion.XD, CardTitle = $"Trade Surskit ({id})", Method = PIDType.CXD, Moves = new(092, 164, 188, 227) }; // Shuckle @ Pyrite Town
|
||||
result[ofs++] = new(true) { Species = 246, Level = 20, Language = l, Location = 116, TID16 = 37149, OT_Gender = 0, OT_Name = d[l], Version = GameVersion.XD, CardTitle = $"Trade Wooper ({id})", Method = PIDType.CXD, Moves = new(201, 349, 044, 200) }; // Larvitar @ Pyrite Town
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static ReadOnlySpan<LanguageID> LanguageCXD => new[] { LanguageID.Japanese, LanguageID.English, LanguageID.French, LanguageID.Italian, LanguageID.German, LanguageID.Spanish };
|
||||
|
||||
private static WC3[] GetIngameCXDDataMainline()
|
||||
{
|
||||
var langs = LanguageCXD;
|
||||
string[] p = { string.Empty, "コロシアム", "COLOS", "COLOSSEUM", "ARENA", "COLOSSEUM", string.Empty, "CLAUDIO" };
|
||||
string[] c = { string.Empty, "アゲト", "AGATE", "SAMARAGD", "SOFO", "EMERITAE", string.Empty, "ÁGATA" };
|
||||
string[] m = { string.Empty, "バトルやま", "MATTLE", "MT BATAILL", "MONTE LOTT", "DUELLBERG", string.Empty, "ERNESTO" }; // truncated on ck3->pk3 transfer
|
||||
|
||||
const int count = 3;
|
||||
var result = new WC3[count * langs.Length];
|
||||
for (int i = 0, ofs = 0; i < langs.Length; i++)
|
||||
{
|
||||
var id = langs[i];
|
||||
var l = (int)id;
|
||||
var nd = id != LanguageID.Japanese;
|
||||
|
||||
// Colosseum
|
||||
result[ofs++] = new() { Species = 025, Level = 10, Language = l, Location = 255, ID32 = 31121, OT_Gender = 0, OT_Name = p[l], Version = GameVersion.R, CardTitle = $"Colosseum Pikachu ({id})",Method = PIDType.CXD, Shiny = Shiny.Never, NotDistributed = nd }; // Colosseum Pikachu bonus gift
|
||||
result[ofs++] = new() { Species = 251, Level = 10, Language = l, Location = 255, ID32 = 31121, OT_Gender = 1, OT_Name = c[l], Version = GameVersion.R, CardTitle = $"Agate Celebi ({id})", Method = PIDType.CXD, Shiny = Shiny.Never, NotDistributed = nd }; // Ageto Celebi bonus gift
|
||||
result[ofs++] = new() { Species = 250, Level = 70, Language = l, Location = 255, ID32 = 10048, OT_Gender = 0, OT_Name = m[l], Version = GameVersion.S, CardTitle = $"Mt. Battle Ho-Oh ({id})", Method = PIDType.CXD, Shiny = Shiny.Never, Moves = new(105, 126, 241, 129) }; // Ho-oh @ Mt. Battle
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static readonly WC3[] Encounter_WC3CXD = GetIngameCXDData();
|
||||
internal static readonly WC3[] Encounter_WC3CXDMain = GetIngameCXDDataMainline();
|
||||
|
||||
internal static readonly WC3[] Encounter_Event3 = ArrayUtil.ConcatAll(Encounter_Event3_Special, Encounter_WC3CXD, Encounter_WC3CXDMain);
|
||||
internal static readonly WC3[] Encounter_Event3 = Encounter_Event3_Special;
|
||||
|
||||
internal static readonly WC3[] Encounter_Event3_FRLG =
|
||||
{
|
||||
|
|
148
PKHeX.Core/Legality/Encounters/Data/Gen4/Encounters4DPPt.cs
Normal file
148
PKHeX.Core/Legality/Encounters/Data/Gen4/Encounters4DPPt.cs
Normal file
|
@ -0,0 +1,148 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.GroundTileAllowed;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters4DPPt
|
||||
{
|
||||
internal static readonly EncounterArea4[] SlotsD = EncounterArea4.GetAreas(Get("d", "da"), D);
|
||||
internal static readonly EncounterArea4[] SlotsP = EncounterArea4.GetAreas(Get("p", "pe"), P);
|
||||
internal static readonly EncounterArea4[] SlotsPt = EncounterArea4.GetAreas(Get("pt", "pt"), Pt);
|
||||
|
||||
private const string tradeDPPt = "tradedppt";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeDPPt);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
|
||||
public static readonly EncounterStatic4[] StaticDPPt =
|
||||
{
|
||||
// Gift
|
||||
new(DPPt) { FixedBall = Ball.Poke, Species = 447, Level = 01, Location = 000, EggLocation = 2010 }, // Riolu Egg from Riley
|
||||
new(DPPt) { Species = 442, Level = 25, Location = 24 }, // Spiritomb @ Route 209
|
||||
new(DPPt) { Species = 480, Level = 50, Location = 089, GroundTile = Cave }, // Uxie @ Acuity Cavern
|
||||
new(DPPt) { Species = 482, Level = 50, Location = 088, GroundTile = Cave }, // Azelf @ Valor Cavern
|
||||
|
||||
// Roamers
|
||||
new(DPPt) { Roaming = true, Location = 16, Species = 481, Level = 50, GroundTile = Grass | Water }, // Mesprit
|
||||
new(DPPt) { Roaming = true, Location = 16, Species = 488, Level = 50, GroundTile = Grass | Water }, // Cresselia
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic4[] StaticDP =
|
||||
{
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 133, Level = 05, Location = 010, GroundTile = Max_DP }, // Eevee @ Hearthome City
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 440, Level = 01, Location = 000, EggLocation = 2009 }, // Happiny Egg from Traveling Man
|
||||
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 387, Level = 5, Location = 076, GroundTile = Max_DP }, // Turtwig @ Lake Verity
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 390, Level = 5, Location = 076, GroundTile = Max_DP }, // Chimchar
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 393, Level = 5, Location = 076, GroundTile = Max_DP }, // Piplup
|
||||
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 138, Level = 20, Location = 094, GroundTile = Max_DP }, // Omanyte
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 140, Level = 20, Location = 094, GroundTile = Max_DP }, // Kabuto
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 142, Level = 20, Location = 094, GroundTile = Max_DP }, // Aerodactyl
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 345, Level = 20, Location = 094, GroundTile = Max_DP }, // Lileep
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 347, Level = 20, Location = 094, GroundTile = Max_DP }, // Anorith
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 408, Level = 20, Location = 094, GroundTile = Max_DP }, // Cranidos
|
||||
new(DP) { FixedBall = Ball.Poke, Species = 410, Level = 20, Location = 094, GroundTile = Max_DP }, // Shieldon
|
||||
|
||||
new(DP) { Species = 425, Level = 22, Location = 47 }, // Drifloon @ Valley Windworks
|
||||
new(DP) { Species = 479, Level = 15, Location = 70, GroundTile = Building }, // Rotom @ Old Chateau
|
||||
|
||||
new(DP) { Species = 485, Level = 70, Location = 084, GroundTile = Cave }, // Heatran @ Stark Mountain
|
||||
new(DP) { Species = 486, Level = 70, Location = 064, GroundTile = Cave }, // Regigigas @ Snowpoint Temple
|
||||
new(DP) { Species = 487, Level = 70, Location = 062, GroundTile = Cave, Form = 0 }, // Giratina @ Turnback Cave
|
||||
//new(DP) { Species = 492, Form = 0, Level = 30, Location = 063, Fateful = false }, // Shaymin @ Flower Paradise (Unreleased in Diamond and Pearl)
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic4[] StaticPt =
|
||||
{
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 387, Level = 5, Location = 016, GroundTile = Max_Pt }, // Turtwig @ Route 201
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 390, Level = 5, Location = 016, GroundTile = Max_Pt }, // Chimchar
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 393, Level = 5, Location = 016, GroundTile = Max_Pt }, // Piplup
|
||||
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 138, Level = 20, Location = 094, GroundTile = Max_Pt }, // Omanyte
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 140, Level = 20, Location = 094, GroundTile = Max_Pt }, // Kabuto
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 142, Level = 20, Location = 094, GroundTile = Max_Pt }, // Aerodactyl
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 345, Level = 20, Location = 094, GroundTile = Max_Pt }, // Lileep
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 347, Level = 20, Location = 094, GroundTile = Max_Pt }, // Anorith
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 408, Level = 20, Location = 094, GroundTile = Max_Pt }, // Cranidos
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 410, Level = 20, Location = 094, GroundTile = Max_Pt }, // Shieldon
|
||||
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 133, Level = 20, Location = 010, GroundTile = Max_Pt }, // Eevee @ Hearthome City
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 137, Level = 25, Location = 012, GroundTile = Max_Pt }, // Porygon @ Veilstone City
|
||||
new(Pt) { FixedBall = Ball.Poke, Species = 175, Level = 01, Location = 000, EggLocation = 2011 }, // Togepi Egg from Cynthia
|
||||
|
||||
new(Pt) { Species = 425, Level = 15, Location = 47 }, // Drifloon @ Valley Windworks
|
||||
new(Pt) { Species = 479, Level = 20, Location = 70, GroundTile = Building }, // Rotom @ Old Chateau
|
||||
|
||||
// Stationary Legendary
|
||||
new(Pt) { Species = 377, Level = 30, Location = 125, GroundTile = Cave }, // Regirock @ Rock Peak Ruins
|
||||
new(Pt) { Species = 378, Level = 30, Location = 124, GroundTile = Cave }, // Regice @ Iceberg Ruins
|
||||
new(Pt) { Species = 379, Level = 30, Location = 123, GroundTile = Cave }, // Registeel @ Iron Ruins
|
||||
new(Pt) { Species = 483, Level = 70, Location = 051, GroundTile = Rock }, // Dialga @ Spear Pillar
|
||||
new(Pt) { Species = 484, Level = 70, Location = 051, GroundTile = Rock }, // Palkia @ Spear Pillar
|
||||
new(Pt) { Species = 485, Level = 50, Location = 084, GroundTile = Cave }, // Heatran @ Stark Mountain
|
||||
new(Pt) { Species = 486, Level = 01, Location = 064, GroundTile = Cave }, // Regigigas @ Snowpoint Temple
|
||||
new(Pt) { Species = 487, Level = 47, Location = 062, GroundTile = Cave, Form = 0 }, // Giratina @ Turnback Cave
|
||||
new(Pt) { Species = 487, Level = 47, Location = 117, GroundTile = Distortion, Form = 1, HeldItem = 112 }, // Giratina @ Distortion World
|
||||
|
||||
new(Pt) { Species = 491, Level = 50, Location = 079, GroundTile = Grass }, // Darkrai @ Newmoon Island
|
||||
new(Pt) { Species = 492, Form = 0, Level = 30, Location = 063, FatefulEncounter = true }, // Shaymin @ Flower Paradise
|
||||
new(Pt) { Roaming = true, Location = 16, Species = 144, Level = 60, GroundTile = Grass | Water }, // Articuno
|
||||
new(Pt) { Roaming = true, Location = 16, Species = 145, Level = 60, GroundTile = Grass | Water }, // Zapdos
|
||||
new(Pt) { Roaming = true, Location = 16, Species = 146, Level = 60, GroundTile = Grass | Water }, // Moltres
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic4[] StaticD =
|
||||
{
|
||||
new(D ) { Species = 483, Level = 47, Location = 051, GroundTile = Rock }, // Dialga @ Spear Pillar
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic4[] StaticP =
|
||||
{
|
||||
new( P) { Species = 484, Level = 47, Location = 051, GroundTile = Rock }, // Palkia @ Spear Pillar
|
||||
};
|
||||
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
|
||||
internal static readonly EncounterTrade4RanchGift[] RanchGifts =
|
||||
{
|
||||
new(323975838, 025, 18) { Moves = new(447,085,148,104), TID16 = 1000, SID16 = 19840, OTGender = 1, MetLocation = 0068, Gender = 0, Ability = OnlyFirst, CurrentLevel = 20 }, // Pikachu
|
||||
new(323977664, 037, 16) { Moves = new(412,109,053,219), TID16 = 1000, SID16 = 21150, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = OnlyFirst, CurrentLevel = 30 }, // Vulpix
|
||||
new(323975579, 077, 13) { Moves = new(036,033,039,052), TID16 = 1000, SID16 = 01123, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = OnlySecond, CurrentLevel = 16 }, // Ponyta
|
||||
new(323975564, 108, 34) { Moves = new(076,111,014,205), TID16 = 1000, SID16 = 03050, OTGender = 1, MetLocation = 0077, Gender = 0, Ability = OnlyFirst, CurrentLevel = 40 }, // Lickitung
|
||||
new(323977579, 114, 01) { Moves = new(437,438,079,246), TID16 = 1000, SID16 = 49497, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = OnlySecond }, // Tangela
|
||||
new(323977675, 133, 16) { Moves = new(363,270,098,247), TID16 = 1000, SID16 = 47710, OTGender = 1, MetLocation = 0068, Gender = 0, Ability = OnlySecond, CurrentLevel = 30 }, // Eevee
|
||||
new(323977588, 142, 20) { Moves = new(363,089,444,332), TID16 = 1000, SID16 = 43066, OTGender = 1, MetLocation = 0094, Gender = 0, Ability = OnlyFirst, CurrentLevel = 50 }, // Aerodactyl
|
||||
new(232975554, 193, 22) { Moves = new(318,095,246,138), TID16 = 1000, SID16 = 42301, OTGender = 1, MetLocation = 0052, Gender = 0, Ability = OnlyFirst, CurrentLevel = 45, FixedBall = Ball.Safari }, // Yanma
|
||||
new(323975570, 241, 16) { Moves = new(208,215,360,359), TID16 = 1000, SID16 = 02707, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = OnlyFirst, CurrentLevel = 48 }, // Miltank
|
||||
new(323975563, 285, 22) { Moves = new(402,147,206,078), TID16 = 1000, SID16 = 02788, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = OnlySecond, CurrentLevel = 45, FixedBall = Ball.Safari }, // Shroomish
|
||||
new(323975559, 320, 30) { Moves = new(156,323,133,058), TID16 = 1000, SID16 = 27046, OTGender = 1, MetLocation = 0038, Gender = 0, Ability = OnlySecond, CurrentLevel = 45 }, // Wailmer
|
||||
new(323977657, 360, 01) { Moves = new(204,150,227,000), TID16 = 1000, SID16 = 01788, OTGender = 1, MetLocation = 0004, Gender = 0, Ability = OnlySecond, EggLocation = 2000 }, // Wynaut
|
||||
new(323975563, 397, 02) { Moves = new(355,017,283,018), TID16 = 1000, SID16 = 59298, OTGender = 1, MetLocation = 0016, Gender = 0, Ability = OnlySecond, CurrentLevel = 23 }, // Staravia
|
||||
new(323970584, 415, 05) { Moves = new(230,016,000,000), TID16 = 1000, SID16 = 54140, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = OnlyFirst, CurrentLevel = 20 }, // Combee
|
||||
new(323977539, 417, 09) { Moves = new(447,045,351,098), TID16 = 1000, SID16 = 18830, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = OnlySecond, CurrentLevel = 10 }, // Pachirisu
|
||||
new(323974107, 422, 20) { Moves = new(363,352,426,104), TID16 = 1000, SID16 = 39272, OTGender = 1, MetLocation = 0028, Gender = 0, Ability = OnlySecond, CurrentLevel = 25, Form = 1 }, // Shellos
|
||||
new(323977566, 427, 10) { Moves = new(204,193,409,098), TID16 = 1000, SID16 = 31045, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = OnlyFirst, CurrentLevel = 16 }, // Buneary
|
||||
new(323975579, 453, 22) { Moves = new(310,207,426,389), TID16 = 1000, SID16 = 41342, OTGender = 1, MetLocation = 0052, Gender = 0, Ability = OnlySecond, CurrentLevel = 31, FixedBall = Ball.Safari }, // Croagunk
|
||||
new(323977566, 456, 15) { Moves = new(213,352,219,392), TID16 = 1000, SID16 = 48348, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = OnlyFirst, CurrentLevel = 35 }, // Finneon
|
||||
new(323975582, 459, 32) { Moves = new(452,420,275,059), TID16 = 1000, SID16 = 23360, OTGender = 1, MetLocation = 0031, Gender = 0, Ability = OnlyFirst, CurrentLevel = 41 }, // Snover
|
||||
new(151, 50) { Moves = new(235,216,095,100), TID16 = 1000, SID16 = 59228, OTGender = 1, FixedBall = Ball.Cherish, Gender = 2, Ability = Any12 }, // Mew
|
||||
new(489, 01) { Moves = new(447,240,156,057), TID16 = 1000, SID16 = 09248, OTGender = 1, FixedBall = Ball.Cherish, Gender = 2, Ability = Any12, CurrentLevel = 50, EggLocation = 3000 }, // Phione
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade4PID[] TradeGift_DPPtIngame =
|
||||
{
|
||||
new(TradeNames, 00, DPPt, 0x0000008E, 063, 01) { Ability = OnlyFirst, TID16 = 25643, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(15,15,15,20,25,25) }, // Machop -> Abra
|
||||
new(TradeNames, 01, DPPt, 0x00000867, 441, 01) { Ability = OnlySecond, TID16 = 44142, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,20,15,25,25,15), Contest = 20 }, // Buizel -> Chatot
|
||||
new(TradeNames, 02, DPPt, 0x00000088, 093, 35) { Ability = OnlyFirst, TID16 = 19248, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(20,25,15,25,15,15) }, // Medicham (35 from Route 217) -> Haunter
|
||||
new(TradeNames, 03, DPPt, 0x0000045C, 129, 01) { Ability = OnlyFirst, TID16 = 53277, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,25,15,20,25,15) }, // Finneon -> Magikarp
|
||||
};
|
||||
|
||||
#endregion
|
||||
}
|
147
PKHeX.Core/Legality/Encounters/Data/Gen4/Encounters4HGSS.cs
Normal file
147
PKHeX.Core/Legality/Encounters/Data/Gen4/Encounters4HGSS.cs
Normal file
|
@ -0,0 +1,147 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.GroundTileAllowed;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters4HGSS
|
||||
{
|
||||
internal static readonly EncounterArea4[] SlotsHG = EncounterArea4.GetAreas(Get("hg", "hg"), HG);
|
||||
internal static readonly EncounterArea4[] SlotsSS = EncounterArea4.GetAreas(Get("ss", "ss"), SS);
|
||||
|
||||
internal static readonly EncounterStatic4Pokewalker[] Encounter_PokeWalker = EncounterStatic4Pokewalker.GetAll(Util.GetBinaryResource("encounter_walker4.pkl"));
|
||||
|
||||
private const string tradeHGSS = "tradehgss";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeHGSS);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
|
||||
internal static readonly EncounterStatic4[] Encounter_HGSS =
|
||||
{
|
||||
// Starters
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 001, Level = 05, Location = 138, GroundTile = Max_Pt }, // Bulbasaur @ Pallet Town
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 004, Level = 05, Location = 138, GroundTile = Max_Pt }, // Charmander
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 007, Level = 05, Location = 138, GroundTile = Max_Pt }, // Squirtle
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 152, Level = 05, Location = 126, GroundTile = Max_DP }, // Chikorita @ New Bark Town
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 155, Level = 05, Location = 126, GroundTile = Max_DP }, // Cyndaquil
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 158, Level = 05, Location = 126, GroundTile = Max_DP }, // Totodile
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 252, Level = 05, Location = 148, GroundTile = Max_Pt }, // Treecko @ Saffron City
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 255, Level = 05, Location = 148, GroundTile = Max_Pt }, // Torchic
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 258, Level = 05, Location = 148, GroundTile = Max_Pt }, // Mudkip
|
||||
|
||||
// Fossils @ Pewter City
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 138, Level = 20, Location = 140, GroundTile = Max_Pt }, // Omanyte
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 140, Level = 20, Location = 140, GroundTile = Max_Pt }, // Kabuto
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 142, Level = 20, Location = 140, GroundTile = Max_Pt }, // Aerodactyl
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 345, Level = 20, Location = 140, GroundTile = Max_Pt }, // Lileep
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 347, Level = 20, Location = 140, GroundTile = Max_Pt }, // Anorith
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 408, Level = 20, Location = 140, GroundTile = Max_Pt }, // Cranidos
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 410, Level = 20, Location = 140, GroundTile = Max_Pt }, // Shieldon
|
||||
|
||||
// Gift
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 072, Level = 15, Location = 130, GroundTile = Max_Pt }, // Tentacool @ Cianwood City
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 133, Level = 05, Location = 131, GroundTile = Max_Pt }, // Eevee @ Goldenrod City
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 147, Level = 15, Location = 222, GroundTile = Max_Pt, Moves = new(245) }, // Dratini @ Dragon's Den (ExtremeSpeed)
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 236, Level = 10, Location = 216, GroundTile = Max_Pt }, // Tyrogue @ Mt. Mortar
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 175, Level = 01, Location = 000, EggLocation = 2013, Moves = new((int)Move.Growl, (int)Move.Charm, (int)Move.Extrasensory) }, // Togepi Egg from Mr. Pokemon (Extrasensory as Egg move)
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 179, Level = 01, Location = 000, EggLocation = 2014 }, // Mareep Egg from Primo
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 194, Level = 01, Location = 000, EggLocation = 2014 }, // Wooper Egg from Primo
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 218, Level = 01, Location = 000, EggLocation = 2014 }, // Slugma Egg from Primo
|
||||
|
||||
// Celadon City Game Corner
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 122, Level = 15, Location = 144, GroundTile = Max_Pt }, // Mr. Mime
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 133, Level = 15, Location = 144, GroundTile = Max_Pt }, // Eevee
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 137, Level = 15, Location = 144, GroundTile = Max_Pt }, // Porygon
|
||||
|
||||
// Goldenrod City Game Corner
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 063, Level = 15, Location = 131, GroundTile = Max_Pt }, // Abra
|
||||
new(HGSS) { FixedBall = Ball.Poke, Species = 147, Level = 15, Location = 131, GroundTile = Max_Pt }, // Dratini
|
||||
|
||||
// Team Rocket HQ Trap Floor
|
||||
new(HGSS) { Species = 100, Level = 23, Location = 213, GroundTile = Building }, // Voltorb
|
||||
new(HGSS) { Species = 074, Level = 21, Location = 213, GroundTile = Building }, // Geodude
|
||||
new(HGSS) { Species = 109, Level = 21, Location = 213, GroundTile = Building }, // Koffing
|
||||
|
||||
// Stationary
|
||||
new(HGSS) { Species = 130, Level = 30, Location = 135, GroundTile = Water, Shiny = Shiny.Always }, // Gyarados @ Lake of Rage
|
||||
new(HGSS) { Species = 131, Level = 20, Location = 210, GroundTile = Water }, // Lapras @ Union Cave Friday Only
|
||||
new(HGSS) { Species = 101, Level = 23, Location = 213, GroundTile = Building }, // Electrode @ Team Rocket HQ
|
||||
new(HGSS) { Species = 143, Level = 50, Location = 159 }, // Snorlax @ Route 11
|
||||
new(HGSS) { Species = 143, Level = 50, Location = 160 }, // Snorlax @ Route 12
|
||||
new(HGSS) { Species = 185, Level = 20, Location = 184 }, // Sudowoodo @ Route 36, Encounter does not have type
|
||||
|
||||
new(HGSS) // Spiky-Eared Pichu @ Ilex Forest
|
||||
{
|
||||
Species = 172,
|
||||
Level = 30,
|
||||
Gender = 1,
|
||||
Form = 1,
|
||||
Nature = Nature.Naughty,
|
||||
Location = 214,
|
||||
Moves = new(344, 270, 207, 220),
|
||||
GroundTile = Max_Pt,
|
||||
Shiny = Shiny.Never,
|
||||
},
|
||||
|
||||
// Stationary Legendary
|
||||
new(HGSS) { Species = 144, Level = 50, Location = 203, GroundTile = Cave }, // Articuno @ Seafoam Islands
|
||||
new(HGSS) { Species = 145, Level = 50, Location = 158 }, // Zapdos @ Route 10
|
||||
new(HGSS) { Species = 146, Level = 50, Location = 219, GroundTile = Cave }, // Moltres @ Mt. Silver Cave
|
||||
new(HGSS) { Species = 150, Level = 70, Location = 199, GroundTile = Cave }, // Mewtwo @ Cerulean Cave
|
||||
new(HGSS) { Species = 245, Level = 40, Location = 173 }, // Suicune @ Route 25
|
||||
new(HGSS) { Species = 245, Level = 40, Location = 206, GroundTile = Cave }, // Suicune @ Burned Tower
|
||||
new(HGSS) { Species = 384, Level = 50, Location = 232, GroundTile = Cave }, // Rayquaza @ Embedded Tower
|
||||
new(HGSS) { Species = 483, Level = 01, Location = 231, FixedBall = Ball.Poke, GroundTile = Max_Pt }, // Dialga @ Sinjoh Ruins
|
||||
new(HGSS) { Species = 484, Level = 01, Location = 231, FixedBall = Ball.Poke, GroundTile = Max_Pt }, // Palkia @ Sinjoh Ruins
|
||||
new(HGSS) { Species = 487, Level = 01, Location = 231, FixedBall = Ball.Poke, GroundTile = Max_Pt, Form = 1, HeldItem = 112 }, // Giratina @ Sinjoh Ruins
|
||||
|
||||
// Johto Roamers
|
||||
new(HGSS) { Roaming = true, Species = 243, Location = 177, Level = 40, GroundTile = Grass | Water }, // Raikou
|
||||
new(HGSS) { Roaming = true, Species = 244, Location = 177, Level = 40, GroundTile = Grass | Water }, // Entei
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic4[] StaticHG =
|
||||
{
|
||||
new(HG ) { FixedBall = Ball.Poke, Species = 023, Level = 15, Location = 131, GroundTile = Max_Pt }, // Ekans
|
||||
new(HG ) { Species = 249, Level = 70, Location = 218, GroundTile = Water }, // Lugia @ Whirl Islands
|
||||
new(HG ) { Species = 250, Level = 45, Location = 205, GroundTile = Building }, // Ho-Oh @ Bell Tower
|
||||
new(HG ) { Species = 381, Level = 40, Location = 140, GroundTile = Building }, // Latios @ Pewter City
|
||||
new(HG ) { Species = 382, Level = 50, Location = 232, GroundTile = Cave }, // Kyogre @ Embedded Tower
|
||||
new(HG ) { Roaming = true, Species = 380, Location = 149, Level = 35, GroundTile = Grass | Water }, // Latias
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic4[] StaticSS =
|
||||
{
|
||||
new( SS) { FixedBall = Ball.Poke, Species = 027, Level = 15, Location = 131, GroundTile = Max_Pt }, // Sandshrew
|
||||
new( SS) { Species = 249, Level = 45, Location = 218, GroundTile = Water }, // Lugia @ Whirl Islands
|
||||
new( SS) { Species = 250, Level = 70, Location = 205, GroundTile = Building }, // Ho-Oh @ Bell Tower
|
||||
new( SS) { Species = 380, Level = 40, Location = 140, GroundTile = Building }, // Latias @ Pewter City
|
||||
new( SS) { Species = 383, Level = 50, Location = 232, GroundTile = Cave }, // Groudon @ Embedded Tower
|
||||
new( SS) { Roaming = true, Species = 381, Location = 149, Level = 35, GroundTile = Grass | Water }, // Latios
|
||||
};
|
||||
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
internal static readonly EncounterTrade4PID[] TradeGift_HGSS =
|
||||
{
|
||||
new(TradeNames, 00, HGSS, 0x000025EF, 095, 01) { Ability = OnlySecond, TID16 = 48926, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(25,20,25,15,15,15) }, // Bellsprout -> Onix
|
||||
new(TradeNames, 01, HGSS, 0x00002310, 066, 01) { Ability = OnlyFirst, TID16 = 37460, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,25,20,20,15,15) }, // Drowzee -> Machop
|
||||
new(TradeNames, 02, HGSS, 0x000001DB, 100, 01) { Ability = OnlySecond, TID16 = 29189, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(15,20,15,25,25,15) }, // Krabby -> Voltorb
|
||||
new(TradeNames, 03, HGSS, 0x0001FC0A, 085, 15) { Ability = OnlyFirst, TID16 = 00283, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(20,20,20,15,15,15) }, // Dragonair (15 from DPPt) -> Dodrio
|
||||
new(TradeNames, 04, HGSS, 0x0000D136, 082, 19) { Ability = OnlyFirst, TID16 = 50082, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(15,20,15,20,20,20) }, // Dugtrio (19 from Diglett's Cave) -> Magneton
|
||||
new(TradeNames, 05, HGSS, 0x000034E4, 178, 16) { Ability = OnlyFirst, TID16 = 15616, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(15,20,15,20,20,20) }, // Haunter (16 from Old Chateau) -> Xatu
|
||||
new(TradeNames, 06, HGSS, 0x00485876, 025, 02) { Ability = OnlyFirst, TID16 = 33038, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(20,25,18,31,25,13) }, // Pikachu
|
||||
new(TradeNames, 07, HGSS, 0x0012B6D4, 374, 31) { Ability = OnlyFirst, TID16 = 23478, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(28,29,24,23,24,25) }, // Forretress -> Beldum
|
||||
new(TradeNames, 08, HGSS, 0x0012971C, 111, 01) { Ability = OnlyFirst, TID16 = 06845, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(22,31,13,00,22,09), Moves = new(422) }, // Bonsly -> Rhyhorn w/ Thunder Fang
|
||||
new(TradeNames, 09, HGSS, 0x00101596, 208, 01) { Ability = OnlyFirst, TID16 = 26491, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(08,30,28,06,18,20) }, // Any -> Steelix
|
||||
|
||||
//Gift
|
||||
new(TradeNames, 10, HGSS, 0x00006B5E, 021, 20) { Ability = OnlyFirst, TID16 = 01001, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,20,15,20,20,20), MetLocation = 183, Moves = new(043,031,228,332) },// Webster's Spearow
|
||||
new(TradeNames, 11, HGSS, 0x000214D7, 213, 20) { Ability = OnlySecond, TID16 = 04336, SID16 = 00001, OTGender = 0, Gender = 0, IVs = new(15,20,15,20,20,20), MetLocation = 130, Moves = new(132,117,227,219) },// Kirk's Shuckle
|
||||
};
|
||||
#endregion
|
||||
}
|
|
@ -1,139 +0,0 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.GroundTileAllowed;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters4DPPt
|
||||
{
|
||||
internal static readonly EncounterArea4[] SlotsD = EncounterArea4.GetAreas(Get("d", "da"), D);
|
||||
internal static readonly EncounterArea4[] SlotsP = EncounterArea4.GetAreas(Get("p", "pe"), P);
|
||||
internal static readonly EncounterArea4[] SlotsPt = EncounterArea4.GetAreas(Get("pt", "pt"), Pt);
|
||||
|
||||
static Encounters4DPPt() => MarkEncounterTradeStrings(TradeGift_DPPt, TradeDPPt);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
private static readonly EncounterStatic4[] Encounter_DPPt =
|
||||
{
|
||||
// Starters
|
||||
new(DP) { Gift = true, Species = 387, Level = 5, Location = 076, GroundTile = Max_DP }, // Turtwig @ Lake Verity
|
||||
new(DP) { Gift = true, Species = 390, Level = 5, Location = 076, GroundTile = Max_DP }, // Chimchar
|
||||
new(DP) { Gift = true, Species = 393, Level = 5, Location = 076, GroundTile = Max_DP }, // Piplup
|
||||
new(Pt) { Gift = true, Species = 387, Level = 5, Location = 016, GroundTile = Max_Pt }, // Turtwig @ Route 201
|
||||
new(Pt) { Gift = true, Species = 390, Level = 5, Location = 016, GroundTile = Max_Pt }, // Chimchar
|
||||
new(Pt) { Gift = true, Species = 393, Level = 5, Location = 016, GroundTile = Max_Pt }, // Piplup
|
||||
|
||||
// Fossil @ Mining Museum
|
||||
new(DP) { Gift = true, Species = 138, Level = 20, Location = 094, GroundTile = Max_DP }, // Omanyte
|
||||
new(DP) { Gift = true, Species = 140, Level = 20, Location = 094, GroundTile = Max_DP }, // Kabuto
|
||||
new(DP) { Gift = true, Species = 142, Level = 20, Location = 094, GroundTile = Max_DP }, // Aerodactyl
|
||||
new(DP) { Gift = true, Species = 345, Level = 20, Location = 094, GroundTile = Max_DP }, // Lileep
|
||||
new(DP) { Gift = true, Species = 347, Level = 20, Location = 094, GroundTile = Max_DP }, // Anorith
|
||||
new(DP) { Gift = true, Species = 408, Level = 20, Location = 094, GroundTile = Max_DP }, // Cranidos
|
||||
new(DP) { Gift = true, Species = 410, Level = 20, Location = 094, GroundTile = Max_DP }, // Shieldon
|
||||
new(Pt) { Gift = true, Species = 138, Level = 20, Location = 094, GroundTile = Max_Pt }, // Omanyte
|
||||
new(Pt) { Gift = true, Species = 140, Level = 20, Location = 094, GroundTile = Max_Pt }, // Kabuto
|
||||
new(Pt) { Gift = true, Species = 142, Level = 20, Location = 094, GroundTile = Max_Pt }, // Aerodactyl
|
||||
new(Pt) { Gift = true, Species = 345, Level = 20, Location = 094, GroundTile = Max_Pt }, // Lileep
|
||||
new(Pt) { Gift = true, Species = 347, Level = 20, Location = 094, GroundTile = Max_Pt }, // Anorith
|
||||
new(Pt) { Gift = true, Species = 408, Level = 20, Location = 094, GroundTile = Max_Pt }, // Cranidos
|
||||
new(Pt) { Gift = true, Species = 410, Level = 20, Location = 094, GroundTile = Max_Pt }, // Shieldon
|
||||
|
||||
// Gift
|
||||
new(DP) { Gift = true, Species = 133, Level = 05, Location = 010, GroundTile = Max_DP }, // Eevee @ Hearthome City
|
||||
new(Pt) { Gift = true, Species = 133, Level = 20, Location = 010, GroundTile = Max_Pt }, // Eevee @ Hearthome City
|
||||
new(Pt) { Gift = true, Species = 137, Level = 25, Location = 012, GroundTile = Max_Pt }, // Porygon @ Veilstone City
|
||||
new(Pt) { Gift = true, Species = 175, Level = 01, EggLocation = 2011 }, // Togepi Egg from Cynthia
|
||||
new(DP) { Gift = true, Species = 440, Level = 01, EggLocation = 2009 }, // Happiny Egg from Traveling Man
|
||||
new(DPPt) { Gift = true, Species = 447, Level = 01, EggLocation = 2010 }, // Riolu Egg from Riley
|
||||
|
||||
// Stationary
|
||||
new(DP) { Species = 425, Level = 22, Location = 47 }, // Drifloon @ Valley Windworks
|
||||
new(Pt) { Species = 425, Level = 15, Location = 47 }, // Drifloon @ Valley Windworks
|
||||
new(DP) { Species = 479, Level = 15, Location = 70, GroundTile = Building }, // Rotom @ Old Chateau
|
||||
new(Pt) { Species = 479, Level = 20, Location = 70, GroundTile = Building }, // Rotom @ Old Chateau
|
||||
new(DPPt) { Species = 442, Level = 25, Location = 24 }, // Spiritomb @ Route 209
|
||||
|
||||
// Stationary Legendary
|
||||
new(Pt) { Species = 377, Level = 30, Location = 125, GroundTile = Cave }, // Regirock @ Rock Peak Ruins
|
||||
new(Pt) { Species = 378, Level = 30, Location = 124, GroundTile = Cave }, // Regice @ Iceberg Ruins
|
||||
new(Pt) { Species = 379, Level = 30, Location = 123, GroundTile = Cave }, // Registeel @ Iron Ruins
|
||||
new(DPPt) { Species = 480, Level = 50, Location = 089, GroundTile = Cave }, // Uxie @ Acuity Cavern
|
||||
new(DPPt) { Species = 482, Level = 50, Location = 088, GroundTile = Cave }, // Azelf @ Valor Cavern
|
||||
new(D ) { Species = 483, Level = 47, Location = 051, GroundTile = Rock }, // Dialga @ Spear Pillar
|
||||
new( P) { Species = 484, Level = 47, Location = 051, GroundTile = Rock }, // Palkia @ Spear Pillar
|
||||
new(Pt) { Species = 483, Level = 70, Location = 051, GroundTile = Rock }, // Dialga @ Spear Pillar
|
||||
new(Pt) { Species = 484, Level = 70, Location = 051, GroundTile = Rock }, // Palkia @ Spear Pillar
|
||||
new(DP) { Species = 485, Level = 70, Location = 084, GroundTile = Cave }, // Heatran @ Stark Mountain
|
||||
new(Pt) { Species = 485, Level = 50, Location = 084, GroundTile = Cave }, // Heatran @ Stark Mountain
|
||||
new(DP) { Species = 486, Level = 70, Location = 064, GroundTile = Cave }, // Regigigas @ Snowpoint Temple
|
||||
new(Pt) { Species = 486, Level = 01, Location = 064, GroundTile = Cave }, // Regigigas @ Snowpoint Temple
|
||||
new(DP) { Species = 487, Level = 70, Location = 062, GroundTile = Cave, Form = 0 }, // Giratina @ Turnback Cave
|
||||
new(Pt) { Species = 487, Level = 47, Location = 062, GroundTile = Cave, Form = 0 }, // Giratina @ Turnback Cave
|
||||
new(Pt) { Species = 487, Level = 47, Location = 117, GroundTile = Distortion, Form = 1, HeldItem = 112 }, // Giratina @ Distortion World
|
||||
|
||||
// Event
|
||||
//new(DP) { Species = 491, Level = 40, Location = 079, GroundTile = Grass }, // Darkrai @ Newmoon Island (Unreleased in Diamond and Pearl)
|
||||
new(Pt) { Species = 491, Level = 50, Location = 079, GroundTile = Grass }, // Darkrai @ Newmoon Island
|
||||
new(Pt) { Species = 492, Form = 0, Level = 30, Location = 063, FatefulEncounter = true }, // Shaymin @ Flower Paradise
|
||||
//new(DP) { Species = 492, Form = 0, Level = 30, Location = 063, Fateful = false }, // Shaymin @ Flower Paradise (Unreleased in Diamond and Pearl)
|
||||
//new(DPPt) { Species = 493, Form = 0, Level = 80, Location = 086, GroundTile = Cave }, // Arceus @ Hall of Origin (Unreleased)
|
||||
|
||||
// Roamers
|
||||
new(DPPt) { Roaming = true, Location = 16, Species = 481, Level = 50, GroundTile = Grass | Water }, // Mesprit
|
||||
new(DPPt) { Roaming = true, Location = 16, Species = 488, Level = 50, GroundTile = Grass | Water }, // Cresselia
|
||||
new(Pt) { Roaming = true, Location = 16, Species = 144, Level = 60, GroundTile = Grass | Water }, // Articuno
|
||||
new(Pt) { Roaming = true, Location = 16, Species = 145, Level = 60, GroundTile = Grass | Water }, // Zapdos
|
||||
new(Pt) { Roaming = true, Location = 16, Species = 146, Level = 60, GroundTile = Grass | Water }, // Moltres
|
||||
};
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
|
||||
private static readonly EncounterTrade4[] RanchGifts =
|
||||
{
|
||||
new EncounterTrade4RanchGift(323975838, 025, 18) { Moves = new(447,085,148,104), TID16 = 1000, SID16 = 19840, OTGender = 1, MetLocation = 0068, Gender = 0, Ability = OnlyFirst, CurrentLevel = 20 }, // Pikachu
|
||||
new EncounterTrade4RanchGift(323977664, 037, 16) { Moves = new(412,109,053,219), TID16 = 1000, SID16 = 21150, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = OnlyFirst, CurrentLevel = 30 }, // Vulpix
|
||||
new EncounterTrade4RanchGift(323975579, 077, 13) { Moves = new(036,033,039,052), TID16 = 1000, SID16 = 01123, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = OnlySecond, CurrentLevel = 16 }, // Ponyta
|
||||
new EncounterTrade4RanchGift(323975564, 108, 34) { Moves = new(076,111,014,205), TID16 = 1000, SID16 = 03050, OTGender = 1, MetLocation = 0077, Gender = 0, Ability = OnlyFirst, CurrentLevel = 40 }, // Lickitung
|
||||
new EncounterTrade4RanchGift(323977579, 114, 01) { Moves = new(437,438,079,246), TID16 = 1000, SID16 = 49497, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = OnlySecond }, // Tangela
|
||||
new EncounterTrade4RanchGift(323977675, 133, 16) { Moves = new(363,270,098,247), TID16 = 1000, SID16 = 47710, OTGender = 1, MetLocation = 0068, Gender = 0, Ability = OnlySecond, CurrentLevel = 30 }, // Eevee
|
||||
new EncounterTrade4RanchGift(323977588, 142, 20) { Moves = new(363,089,444,332), TID16 = 1000, SID16 = 43066, OTGender = 1, MetLocation = 0094, Gender = 0, Ability = OnlyFirst, CurrentLevel = 50 }, // Aerodactyl
|
||||
new EncounterTrade4RanchGift(232975554, 193, 22) { Moves = new(318,095,246,138), TID16 = 1000, SID16 = 42301, OTGender = 1, MetLocation = 0052, Gender = 0, Ability = OnlyFirst, CurrentLevel = 45, Ball = 5 }, // Yanma
|
||||
new EncounterTrade4RanchGift(323975570, 241, 16) { Moves = new(208,215,360,359), TID16 = 1000, SID16 = 02707, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = OnlyFirst, CurrentLevel = 48 }, // Miltank
|
||||
new EncounterTrade4RanchGift(323975563, 285, 22) { Moves = new(402,147,206,078), TID16 = 1000, SID16 = 02788, OTGender = 1, MetLocation = 3000, Gender = 0, Ability = OnlySecond, CurrentLevel = 45, Ball = 5 }, // Shroomish
|
||||
new EncounterTrade4RanchGift(323975559, 320, 30) { Moves = new(156,323,133,058), TID16 = 1000, SID16 = 27046, OTGender = 1, MetLocation = 0038, Gender = 0, Ability = OnlySecond, CurrentLevel = 45 }, // Wailmer
|
||||
new EncounterTrade4RanchGift(323977657, 360, 01) { Moves = new(204,150,227,000), TID16 = 1000, SID16 = 01788, OTGender = 1, MetLocation = 0004, Gender = 0, Ability = OnlySecond, EggLocation = 2000 }, // Wynaut
|
||||
new EncounterTrade4RanchGift(323975563, 397, 02) { Moves = new(355,017,283,018), TID16 = 1000, SID16 = 59298, OTGender = 1, MetLocation = 0016, Gender = 0, Ability = OnlySecond, CurrentLevel = 23 }, // Staravia
|
||||
new EncounterTrade4RanchGift(323970584, 415, 05) { Moves = new(230,016,000,000), TID16 = 1000, SID16 = 54140, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = OnlyFirst, CurrentLevel = 20 }, // Combee
|
||||
new EncounterTrade4RanchGift(323977539, 417, 09) { Moves = new(447,045,351,098), TID16 = 1000, SID16 = 18830, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = OnlySecond, CurrentLevel = 10 }, // Pachirisu
|
||||
new EncounterTrade4RanchGift(323974107, 422, 20) { Moves = new(363,352,426,104), TID16 = 1000, SID16 = 39272, OTGender = 1, MetLocation = 0028, Gender = 0, Ability = OnlySecond, CurrentLevel = 25, Form = 1 }, // Shellos
|
||||
new EncounterTrade4RanchGift(323977566, 427, 10) { Moves = new(204,193,409,098), TID16 = 1000, SID16 = 31045, OTGender = 1, MetLocation = 3000, Gender = 1, Ability = OnlyFirst, CurrentLevel = 16 }, // Buneary
|
||||
new EncounterTrade4RanchGift(323975579, 453, 22) { Moves = new(310,207,426,389), TID16 = 1000, SID16 = 41342, OTGender = 1, MetLocation = 0052, Gender = 0, Ability = OnlySecond, CurrentLevel = 31, Ball = 5 }, // Croagunk
|
||||
new EncounterTrade4RanchGift(323977566, 456, 15) { Moves = new(213,352,219,392), TID16 = 1000, SID16 = 48348, OTGender = 1, MetLocation = 0020, Gender = 1, Ability = OnlyFirst, CurrentLevel = 35 }, // Finneon
|
||||
new EncounterTrade4RanchGift(323975582, 459, 32) { Moves = new(452,420,275,059), TID16 = 1000, SID16 = 23360, OTGender = 1, MetLocation = 0031, Gender = 0, Ability = OnlyFirst, CurrentLevel = 41 }, // Snover
|
||||
new EncounterTrade4RanchSpecial(151, 50) { Moves = new(235,216,095,100), TID16 = 1000, SID16 = 59228, OTGender = 1, Ball = 0x10, Gender = 2 }, // Mew
|
||||
new EncounterTrade4RanchSpecial(489, 01) { Moves = new(447,240,156,057), TID16 = 1000, SID16 = 09248, OTGender = 1, Ball = 0x10, Gender = 2, CurrentLevel = 50, EggLocation = 3000 }, // Phione
|
||||
};
|
||||
|
||||
private static readonly EncounterTrade4PID[] TradeGift_DPPtIngame =
|
||||
{
|
||||
new(DPPt, 0x0000008E, 063, 01) { Ability = OnlyFirst, TID16 = 25643, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(15,15,15,20,25,25) }, // Machop -> Abra
|
||||
new(DPPt, 0x00000867, 441, 01) { Ability = OnlySecond, TID16 = 44142, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,20,15,25,25,15), Contest = 20 }, // Buizel -> Chatot
|
||||
new(DPPt, 0x00000088, 093, 35) { Ability = OnlyFirst, TID16 = 19248, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(20,25,15,25,15,15) }, // Medicham (35 from Route 217) -> Haunter
|
||||
new(DPPt, 0x0000045C, 129, 01) { Ability = OnlyFirst, TID16 = 53277, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,25,15,20,25,15) }, // Finneon -> Magikarp
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade4[] TradeGift_DPPt = ArrayUtil.ConcatAll(TradeGift_DPPtIngame, RanchGifts);
|
||||
|
||||
private const string tradeDPPt = "tradedppt";
|
||||
private static readonly string[][] TradeDPPt = Util.GetLanguageStrings8(tradeDPPt);
|
||||
#endregion
|
||||
|
||||
internal static readonly EncounterStatic4[] StaticD = GetEncounters(Encounter_DPPt, D);
|
||||
internal static readonly EncounterStatic4[] StaticP = GetEncounters(Encounter_DPPt, P);
|
||||
internal static readonly EncounterStatic4[] StaticPt = GetEncounters(Encounter_DPPt, Pt);
|
||||
}
|
|
@ -1,144 +0,0 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.GroundTileAllowed;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters4HGSS
|
||||
{
|
||||
internal static readonly EncounterArea4[] SlotsHG = EncounterArea4.GetAreas(Get("hg", "hg"), HG);
|
||||
internal static readonly EncounterArea4[] SlotsSS = EncounterArea4.GetAreas(Get("ss", "ss"), SS);
|
||||
|
||||
private static readonly EncounterStatic4Pokewalker[] Encounter_PokeWalker = EncounterStatic4Pokewalker.GetAll(Util.GetBinaryResource("encounter_walker4.pkl"));
|
||||
|
||||
static Encounters4HGSS() => MarkEncounterTradeStrings(TradeGift_HGSS, TradeHGSS);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
private static readonly EncounterStatic4[] Encounter_HGSS =
|
||||
{
|
||||
// Starters
|
||||
new(HGSS) { Gift = true, Species = 001, Level = 05, Location = 138, GroundTile = Max_Pt }, // Bulbasaur @ Pallet Town
|
||||
new(HGSS) { Gift = true, Species = 004, Level = 05, Location = 138, GroundTile = Max_Pt }, // Charmander
|
||||
new(HGSS) { Gift = true, Species = 007, Level = 05, Location = 138, GroundTile = Max_Pt }, // Squirtle
|
||||
new(HGSS) { Gift = true, Species = 152, Level = 05, Location = 126, GroundTile = Max_DP }, // Chikorita @ New Bark Town
|
||||
new(HGSS) { Gift = true, Species = 155, Level = 05, Location = 126, GroundTile = Max_DP }, // Cyndaquil
|
||||
new(HGSS) { Gift = true, Species = 158, Level = 05, Location = 126, GroundTile = Max_DP }, // Totodile
|
||||
new(HGSS) { Gift = true, Species = 252, Level = 05, Location = 148, GroundTile = Max_Pt }, // Treecko @ Saffron City
|
||||
new(HGSS) { Gift = true, Species = 255, Level = 05, Location = 148, GroundTile = Max_Pt }, // Torchic
|
||||
new(HGSS) { Gift = true, Species = 258, Level = 05, Location = 148, GroundTile = Max_Pt }, // Mudkip
|
||||
|
||||
// Fossils @ Pewter City
|
||||
new(HGSS) { Gift = true, Species = 138, Level = 20, Location = 140, GroundTile = Max_Pt }, // Omanyte
|
||||
new(HGSS) { Gift = true, Species = 140, Level = 20, Location = 140, GroundTile = Max_Pt }, // Kabuto
|
||||
new(HGSS) { Gift = true, Species = 142, Level = 20, Location = 140, GroundTile = Max_Pt }, // Aerodactyl
|
||||
new(HGSS) { Gift = true, Species = 345, Level = 20, Location = 140, GroundTile = Max_Pt }, // Lileep
|
||||
new(HGSS) { Gift = true, Species = 347, Level = 20, Location = 140, GroundTile = Max_Pt }, // Anorith
|
||||
new(HGSS) { Gift = true, Species = 408, Level = 20, Location = 140, GroundTile = Max_Pt }, // Cranidos
|
||||
new(HGSS) { Gift = true, Species = 410, Level = 20, Location = 140, GroundTile = Max_Pt }, // Shieldon
|
||||
|
||||
// Gift
|
||||
new(HGSS) { Gift = true, Species = 072, Level = 15, Location = 130, GroundTile = Max_Pt }, // Tentacool @ Cianwood City
|
||||
new(HGSS) { Gift = true, Species = 133, Level = 05, Location = 131, GroundTile = Max_Pt }, // Eevee @ Goldenrod City
|
||||
new(HGSS) { Gift = true, Species = 147, Level = 15, Location = 222, GroundTile = Max_Pt, Moves = new(245) }, // Dratini @ Dragon's Den (ExtremeSpeed)
|
||||
new(HGSS) { Gift = true, Species = 236, Level = 10, Location = 216, GroundTile = Max_Pt }, // Tyrogue @ Mt. Mortar
|
||||
new(HGSS) { Gift = true, Species = 175, Level = 01, EggLocation = 2013, Moves = new((int)Move.Growl, (int)Move.Charm, (int)Move.Extrasensory) }, // Togepi Egg from Mr. Pokemon (Extrasensory as Egg move)
|
||||
new(HGSS) { Gift = true, Species = 179, Level = 01, EggLocation = 2014 }, // Mareep Egg from Primo
|
||||
new(HGSS) { Gift = true, Species = 194, Level = 01, EggLocation = 2014 }, // Wooper Egg from Primo
|
||||
new(HGSS) { Gift = true, Species = 218, Level = 01, EggLocation = 2014 }, // Slugma Egg from Primo
|
||||
|
||||
// Celadon City Game Corner
|
||||
new(HGSS) { Gift = true, Species = 122, Level = 15, Location = 144, GroundTile = Max_Pt }, // Mr. Mime
|
||||
new(HGSS) { Gift = true, Species = 133, Level = 15, Location = 144, GroundTile = Max_Pt }, // Eevee
|
||||
new(HGSS) { Gift = true, Species = 137, Level = 15, Location = 144, GroundTile = Max_Pt }, // Porygon
|
||||
|
||||
// Goldenrod City Game Corner
|
||||
new(HGSS) { Gift = true, Species = 063, Level = 15, Location = 131, GroundTile = Max_Pt }, // Abra
|
||||
new(HG ) { Gift = true, Species = 023, Level = 15, Location = 131, GroundTile = Max_Pt }, // Ekans
|
||||
new( SS) { Gift = true, Species = 027, Level = 15, Location = 131, GroundTile = Max_Pt }, // Sandshrew
|
||||
new(HGSS) { Gift = true, Species = 147, Level = 15, Location = 131, GroundTile = Max_Pt }, // Dratini
|
||||
|
||||
// Team Rocket HQ Trap Floor
|
||||
new(HGSS) { Species = 100, Level = 23, Location = 213, GroundTile = Building }, // Voltorb
|
||||
new(HGSS) { Species = 074, Level = 21, Location = 213, GroundTile = Building }, // Geodude
|
||||
new(HGSS) { Species = 109, Level = 21, Location = 213, GroundTile = Building }, // Koffing
|
||||
|
||||
// Stationary
|
||||
new(HGSS) { Species = 130, Level = 30, Location = 135, GroundTile = Water, Shiny = Shiny.Always }, // Gyarados @ Lake of Rage
|
||||
new(HGSS) { Species = 131, Level = 20, Location = 210, GroundTile = Water }, // Lapras @ Union Cave Friday Only
|
||||
new(HGSS) { Species = 101, Level = 23, Location = 213, GroundTile = Building }, // Electrode @ Team Rocket HQ
|
||||
new(HGSS) { Species = 143, Level = 50, Location = 159 }, // Snorlax @ Route 11
|
||||
new(HGSS) { Species = 143, Level = 50, Location = 160 }, // Snorlax @ Route 12
|
||||
new(HGSS) { Species = 185, Level = 20, Location = 184 }, // Sudowoodo @ Route 36, Encounter does not have type
|
||||
|
||||
new(HGSS) // Spiky-Eared Pichu @ Ilex Forest
|
||||
{
|
||||
Species = 172,
|
||||
Level = 30,
|
||||
Gender = 1,
|
||||
Form = 1,
|
||||
Nature = Nature.Naughty,
|
||||
Location = 214,
|
||||
Moves = new(344, 270, 207, 220),
|
||||
GroundTile = Max_Pt,
|
||||
Shiny = Shiny.Never,
|
||||
},
|
||||
|
||||
// Stationary Legendary
|
||||
new(HGSS) { Species = 144, Level = 50, Location = 203, GroundTile = Cave }, // Articuno @ Seafoam Islands
|
||||
new(HGSS) { Species = 145, Level = 50, Location = 158 }, // Zapdos @ Route 10
|
||||
new(HGSS) { Species = 146, Level = 50, Location = 219, GroundTile = Cave }, // Moltres @ Mt. Silver Cave
|
||||
new(HGSS) { Species = 150, Level = 70, Location = 199, GroundTile = Cave }, // Mewtwo @ Cerulean Cave
|
||||
new(HGSS) { Species = 245, Level = 40, Location = 173 }, // Suicune @ Route 25
|
||||
new(HGSS) { Species = 245, Level = 40, Location = 206, GroundTile = Cave }, // Suicune @ Burned Tower
|
||||
new( SS) { Species = 249, Level = 45, Location = 218, GroundTile = Water }, // Lugia @ Whirl Islands
|
||||
new(HG ) { Species = 249, Level = 70, Location = 218, GroundTile = Water }, // Lugia @ Whirl Islands
|
||||
new(HG ) { Species = 250, Level = 45, Location = 205, GroundTile = Building }, // Ho-Oh @ Bell Tower
|
||||
new( SS) { Species = 250, Level = 70, Location = 205, GroundTile = Building }, // Ho-Oh @ Bell Tower
|
||||
new( SS) { Species = 380, Level = 40, Location = 140, GroundTile = Building }, // Latias @ Pewter City
|
||||
new(HG ) { Species = 381, Level = 40, Location = 140, GroundTile = Building }, // Latios @ Pewter City
|
||||
new(HG ) { Species = 382, Level = 50, Location = 232, GroundTile = Cave }, // Kyogre @ Embedded Tower
|
||||
new( SS) { Species = 383, Level = 50, Location = 232, GroundTile = Cave }, // Groudon @ Embedded Tower
|
||||
new(HGSS) { Species = 384, Level = 50, Location = 232, GroundTile = Cave }, // Rayquaza @ Embedded Tower
|
||||
new(HGSS) { Species = 483, Level = 01, Location = 231, Gift = true, GroundTile = Max_Pt }, // Dialga @ Sinjoh Ruins
|
||||
new(HGSS) { Species = 484, Level = 01, Location = 231, Gift = true, GroundTile = Max_Pt }, // Palkia @ Sinjoh Ruins
|
||||
new(HGSS) { Species = 487, Level = 01, Location = 231, Gift = true, GroundTile = Max_Pt, Form = 1, HeldItem = 112 }, // Giratina @ Sinjoh Ruins
|
||||
|
||||
// Johto Roamers
|
||||
new(HGSS) { Roaming = true, Species = 243, Location = 177, Level = 40, GroundTile = Grass | Water }, // Raikou
|
||||
new(HGSS) { Roaming = true, Species = 244, Location = 177, Level = 40, GroundTile = Grass | Water }, // Entei
|
||||
|
||||
// Kanto Roamers
|
||||
new(HG ) { Roaming = true, Species = 380, Location = 149, Level = 35, GroundTile = Grass | Water }, // Latias
|
||||
new( SS) { Roaming = true, Species = 381, Location = 149, Level = 35, GroundTile = Grass | Water }, // Latios
|
||||
};
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
internal static readonly EncounterTrade4PID[] TradeGift_HGSS =
|
||||
{
|
||||
new(HGSS, 0x000025EF, 095, 01) { Ability = OnlySecond, TID16 = 48926, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(25,20,25,15,15,15) }, // Bellsprout -> Onix
|
||||
new(HGSS, 0x00002310, 066, 01) { Ability = OnlyFirst, TID16 = 37460, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,25,20,20,15,15) }, // Drowzee -> Machop
|
||||
new(HGSS, 0x000001DB, 100, 01) { Ability = OnlySecond, TID16 = 29189, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(15,20,15,25,25,15) }, // Krabby -> Voltorb
|
||||
new(HGSS, 0x0001FC0A, 085, 15) { Ability = OnlyFirst, TID16 = 00283, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(20,20,20,15,15,15) }, // Dragonair (15 from DPPt) -> Dodrio
|
||||
new(HGSS, 0x0000D136, 082, 19) { Ability = OnlyFirst, TID16 = 50082, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(15,20,15,20,20,20) }, // Dugtrio (19 from Diglett's Cave) -> Magneton
|
||||
new(HGSS, 0x000034E4, 178, 16) { Ability = OnlyFirst, TID16 = 15616, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(15,20,15,20,20,20) }, // Haunter (16 from Old Chateau) -> Xatu
|
||||
new(HGSS, 0x00485876, 025, 02) { Ability = OnlyFirst, TID16 = 33038, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(20,25,18,31,25,13) }, // Pikachu
|
||||
new(HGSS, 0x0012B6D4, 374, 31) { Ability = OnlyFirst, TID16 = 23478, SID16 = 00000, OTGender = 0, Gender = 2, IVs = new(28,29,24,23,24,25) }, // Forretress -> Beldum
|
||||
new(HGSS, 0x0012971C, 111, 01) { Ability = OnlyFirst, TID16 = 06845, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(22,31,13,00,22,09), Moves = new(422) }, // Bonsly -> Rhyhorn
|
||||
new(HGSS, 0x00101596, 208, 01) { Ability = OnlyFirst, TID16 = 26491, SID16 = 00000, OTGender = 1, Gender = 0, IVs = new(08,30,28,06,18,20) }, // Any -> Steelix
|
||||
|
||||
//Gift
|
||||
new(HGSS, 0x00006B5E, 021, 20) { Ability = OnlyFirst, TID16 = 01001, SID16 = 00000, OTGender = 0, Gender = 1, IVs = new(15,20,15,20,20,20), MetLocation = 183, Moves = new(043,031,228,332) },// Webster's Spearow
|
||||
new(HGSS, 0x000214D7, 213, 20) { Ability = OnlySecond, TID16 = 04336, SID16 = 00001, OTGender = 0, Gender = 0, IVs = new(15,20,15,20,20,20), MetLocation = 130, Moves = new(132,117,227,219) },// Kirk's Shuckle
|
||||
};
|
||||
|
||||
private const string tradeHGSS = "tradehgss";
|
||||
private static readonly string[][] TradeHGSS = Util.GetLanguageStrings8(tradeHGSS);
|
||||
#endregion
|
||||
|
||||
internal static readonly EncounterStatic[] StaticHG = GetEncounters(ArrayUtil.ConcatAll<EncounterStatic>(Encounter_HGSS, Encounter_PokeWalker), HG);
|
||||
internal static readonly EncounterStatic[] StaticSS = GetEncounters(ArrayUtil.ConcatAll<EncounterStatic>(Encounter_HGSS, Encounter_PokeWalker), SS);
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
using static PKHeX.Core.Encounters5DR;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
|
@ -13,10 +12,11 @@ public static class Encounters5B2W2
|
|||
internal static readonly EncounterArea5[] SlotsB2 = EncounterArea5.GetAreas(Get("b2", "52"), B2);
|
||||
internal static readonly EncounterArea5[] SlotsW2 = EncounterArea5.GetAreas(Get("w2", "52"), W2);
|
||||
|
||||
static Encounters5B2W2() => MarkEncounterTradeStrings(TradeGift_B2W2_Regular, TradeB2W2);
|
||||
private const string tradeB2W2 = "tradeb2w2";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeB2W2);
|
||||
|
||||
#region DreamWorld Encounter
|
||||
public static readonly EncounterStatic5[] DreamWorld_B2W2 = DreamWorldEntry.GetArray(B2W2, stackalloc DreamWorldEntry[]
|
||||
public static readonly EncounterStatic5Entree[] DreamWorld_B2W2 = DreamWorldEntry.GetArray(B2W2, stackalloc DreamWorldEntry[]
|
||||
{
|
||||
// Pleasant Forest
|
||||
new(535, 10, 496, 414, 352), // Tympole
|
||||
|
@ -81,45 +81,40 @@ public static class Encounters5B2W2
|
|||
});
|
||||
#endregion
|
||||
#region Static Encounter/Gift Tables
|
||||
private static readonly EncounterStatic5[] Encounter_B2W2_Regular =
|
||||
|
||||
public static readonly EncounterStatic5[] Encounter_B2W2_Regular =
|
||||
{
|
||||
// Starters @ Aspertia City
|
||||
new(B2W2) { Gift = true, Species = 495, Level = 05, Location = 117 }, // Snivy
|
||||
new(B2W2) { Gift = true, Species = 498, Level = 05, Location = 117 }, // Tepig
|
||||
new(B2W2) { Gift = true, Species = 501, Level = 05, Location = 117 }, // Oshawott
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 495, Level = 05, Location = 117 }, // Snivy
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 498, Level = 05, Location = 117 }, // Tepig
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 501, Level = 05, Location = 117 }, // Oshawott
|
||||
|
||||
// Fossils @ Nacrene City
|
||||
new(B2W2) { Gift = true, Species = 138, Level = 25, Location = 007 }, // Omanyte
|
||||
new(B2W2) { Gift = true, Species = 140, Level = 25, Location = 007 }, // Kabuto
|
||||
new(B2W2) { Gift = true, Species = 142, Level = 25, Location = 007 }, // Aerodactyl
|
||||
new(B2W2) { Gift = true, Species = 345, Level = 25, Location = 007 }, // Lileep
|
||||
new(B2W2) { Gift = true, Species = 347, Level = 25, Location = 007 }, // Anorith
|
||||
new(B2W2) { Gift = true, Species = 408, Level = 25, Location = 007 }, // Cranidos
|
||||
new(B2W2) { Gift = true, Species = 410, Level = 25, Location = 007 }, // Shieldon
|
||||
new(B2W2) { Gift = true, Species = 564, Level = 25, Location = 007 }, // Tirtouga
|
||||
new(B2W2) { Gift = true, Species = 566, Level = 25, Location = 007 }, // Archen
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 138, Level = 25, Location = 007 }, // Omanyte
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 140, Level = 25, Location = 007 }, // Kabuto
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 142, Level = 25, Location = 007 }, // Aerodactyl
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 345, Level = 25, Location = 007 }, // Lileep
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 347, Level = 25, Location = 007 }, // Anorith
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 408, Level = 25, Location = 007 }, // Cranidos
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 410, Level = 25, Location = 007 }, // Shieldon
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 564, Level = 25, Location = 007 }, // Tirtouga
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 566, Level = 25, Location = 007 }, // Archen
|
||||
|
||||
// Gift
|
||||
new(B2W2) { Gift = true, Species = 133, Level = 10, Location = 008, Ability = OnlyHidden }, // HA Eevee @ Castelia City
|
||||
new(B2W2) { Gift = true, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 0 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { Gift = true, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 1 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { Gift = true, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 2 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { Gift = true, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 3 }, // HA Deerling @ Route 6
|
||||
new(B2 ) { Gift = true, Species = 443, Level = 01, Location = 122, Shiny = Shiny.Always, Gender = 0 }, // Shiny Gible @ Floccesy Town
|
||||
new( W2) { Gift = true, Species = 147, Level = 01, Location = 122, Shiny = Shiny.Always, Gender = 0 }, // Shiny Dratini @ Floccesy Town
|
||||
new(B2W2) { Gift = true, Species = 129, Level = 05, Location = 068 } , // Magikarp @ Marvelous Bridge
|
||||
new(B2W2) { Gift = true, Species = 440, Level = 01, EggLocation = 60003 }, // Happiny Egg from PKMN Breeder
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 133, Level = 10, Location = 008, Ability = OnlyHidden }, // HA Eevee @ Castelia City
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 0 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 1 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 2 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 585, Level = 30, Location = 019, Ability = OnlyHidden, Form = 3 }, // HA Deerling @ Route 6
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 129, Level = 05, Location = 068 } , // Magikarp @ Marvelous Bridge
|
||||
new(B2W2) { FixedBall = Ball.Poke, Species = 440, Level = 01, EggLocation = 60003, Location = 0 }, // Happiny Egg from PKMN Breeder
|
||||
|
||||
// Stationary
|
||||
new(B2W2) { Species = 590, Level = 29, Location = 019 }, // Foongus @ Route 6
|
||||
new(B2W2) { Species = 591, Level = 43, Location = 024 }, // Amoonguss @ Route 11
|
||||
new(B2W2) { Species = 591, Level = 47, Location = 127 }, // Amoonguss @ Route 22
|
||||
new(B2W2) { Species = 591, Level = 56, Location = 128 }, // Amoonguss @ Route 23
|
||||
new(B2 ) { Species = 593, Level = 40, Location = 071, Ability = OnlyHidden, Gender = 0 }, // HA Jellicent @ Undella Bay Mon Only
|
||||
new( W2) { Species = 593, Level = 40, Location = 071, Ability = OnlyHidden, Gender = 1 }, // HA Jellicent @ Undella Bay Thurs Only
|
||||
new(B2W2) { Species = 593, Level = 40, Location = 071 }, // HA Jellicent @ Undella Bay EncounterSlot collision
|
||||
new( W2) { Species = 628, Level = 25, Location = 017, Ability = OnlyHidden, Gender = 0 }, // HA Braviary @ Route 4 Mon Only
|
||||
new(B2 ) { Species = 630, Level = 25, Location = 017, Ability = OnlyHidden, Gender = 1 }, // HA Mandibuzz @ Route 4 Thurs Only
|
||||
new(B2W2) { Species = 637, Level = 35, Location = 035 }, // Volcarona @ Relic Castle
|
||||
new(B2W2) { Species = 637, Level = 65, Location = 035 }, // Volcarona @ Relic Castle
|
||||
new(B2W2) { Species = 558, Level = 42, Location = 141 }, // Crustle @ Seaside Cave
|
||||
|
@ -129,8 +124,6 @@ public static class Encounters5B2W2
|
|||
new(B2W2) { Species = 377, Level = 65, Location = 150 }, // Regirock @ Rock Peak Chamber
|
||||
new(B2W2) { Species = 378, Level = 65, Location = 151 }, // Regice @ Iceberg Chamber
|
||||
new(B2W2) { Species = 379, Level = 65, Location = 152 }, // Registeel @ Iron Chamber
|
||||
new( W2) { Species = 380, Level = 68, Location = 032 }, // Latias @ Dreamyard
|
||||
new(B2 ) { Species = 381, Level = 68, Location = 032 }, // Latios @ Dreamyard
|
||||
new(B2W2) { Species = 480, Level = 65, Location = 007 }, // Uxie @ Nacrene City
|
||||
new(B2W2) { Species = 481, Level = 65, Location = 056 }, // Mesprit @ Celestial Tower
|
||||
new(B2W2) { Species = 482, Level = 65, Location = 128 }, // Azelf @ Route 23
|
||||
|
@ -143,12 +136,28 @@ public static class Encounters5B2W2
|
|||
new(B2W2) { Species = 639, Level = 65, Location = 127 }, // Terrakion @ Route 22
|
||||
new(B2W2) { Species = 640, Level = 45, Location = 024 }, // Virizion @ Route 11
|
||||
new(B2W2) { Species = 640, Level = 65, Location = 024 }, // Virizion @ Route 11
|
||||
new( W2) { Species = 643, Level = 70, Location = 039, Shiny = Shiny.Never }, // Reshiram @ Dragonspiral Tower
|
||||
new(B2 ) { Species = 644, Level = 70, Location = 039, Shiny = Shiny.Never }, // Zekrom @ Dragonspiral Tower
|
||||
new(B2W2) { Species = 646, Level = 70, Location = 061, Form = 0 }, // Kyurem @ Giant Chasm
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic5N[] Encounter_B2W2_N =
|
||||
public static readonly EncounterStatic5[] StaticB2 =
|
||||
{
|
||||
new(B2 ) { Species = 443, Level = 01, Location = 122, Shiny = Shiny.Always, Gender = 0, FixedBall = Ball.Poke }, // Shiny Gible @ Floccesy Town
|
||||
new(B2 ) { Species = 381, Level = 68, Location = 032 }, // Latios @ Dreamyard
|
||||
new(B2 ) { Species = 593, Level = 40, Location = 071, Ability = OnlyHidden, Gender = 0 }, // HA Jellicent @ Undella Bay Mon Only
|
||||
new(B2 ) { Species = 630, Level = 25, Location = 017, Ability = OnlyHidden, Gender = 1 }, // HA Mandibuzz @ Route 4 Thurs Only
|
||||
new(B2 ) { Species = 644, Level = 70, Location = 039, Shiny = Shiny.Never }, // Zekrom @ Dragonspiral Tower
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic5[] StaticW2 =
|
||||
{
|
||||
new( W2) { Species = 147, Level = 01, Location = 122, Shiny = Shiny.Always, Gender = 0, FixedBall = Ball.Poke }, // Shiny Dratini @ Floccesy Town
|
||||
new( W2) { Species = 380, Level = 68, Location = 032 }, // Latias @ Dreamyard
|
||||
new( W2) { Species = 593, Level = 40, Location = 071, Ability = OnlyHidden, Gender = 1 }, // HA Jellicent @ Undella Bay Thurs Only
|
||||
new( W2) { Species = 628, Level = 25, Location = 017, Ability = OnlyHidden, Gender = 0 }, // HA Braviary @ Route 4 Mon Only
|
||||
new( W2) { Species = 643, Level = 70, Location = 039, Shiny = Shiny.Never }, // Reshiram @ Dragonspiral Tower
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic5N[] Encounter_B2W2_N =
|
||||
{
|
||||
// N's Pokemon
|
||||
new(0xFF01007F) { Species = 509, Level = 07, Location = 015, Ability = OnlySecond, Nature = Nature.Timid }, // Purloin @ Route 2
|
||||
|
@ -165,66 +174,64 @@ public static class Encounters5B2W2
|
|||
new(0xFF01007F) { Species = 595, Level = 28, Location = 037, Ability = OnlySecond, Nature = Nature.Docile }, // Joltik @ Chargestone Cave
|
||||
new(0xFF00007F) { Species = 597, Level = 28, Location = 037, Ability = OnlyFirst, Nature = Nature.Bashful }, // Ferroseed @ Chargestone Cave
|
||||
new(0xFF000000) { Species = 599, Level = 28, Location = 037, Ability = OnlyFirst, Nature = Nature.Rash }, // Klink @ Chargestone Cave
|
||||
new(0xFF00001F) { Species = 570, Level = 25, Location = 010, Ability = OnlyFirst, Nature = Nature.Hasty, Gift = true }, // N's Zorua @ Driftveil City
|
||||
new(0xFF00001F) { Species = 570, Level = 25, Location = 010, Ability = OnlyFirst, Nature = Nature.Hasty }, // N's Zorua @ Driftveil City
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic5[] Encounter_B2W2 = ArrayUtil.ConcatAll(Encounter_B2W2_Regular, Encounter_B2W2_N, Encounter_DreamRadar);
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
private static readonly EncounterTrade5[] TradeGift_B2W2_Regular =
|
||||
{
|
||||
new(B2 ) { Species = 548, Level = 20, Ability = OnlySecond, TID16 = 65217, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Timid }, // Petilil
|
||||
new( W2) { Species = 546, Level = 20, Ability = OnlyFirst, TID16 = 05720, SID16 = 00001, OTGender = 0, Gender = 0, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Cottonee
|
||||
new(B2W2) { Species = 526, Level = 35, Ability = OnlyFirst, TID16 = 11195, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant, IsNicknamed = false }, // Gigalith
|
||||
new(B2W2) { Species = 465, Level = 45, Ability = OnlyFirst, TID16 = 27658, SID16 = 00001, OTGender = 0, Gender = 0, IVs = new(31,20,20,20,20,20), Nature = Nature.Hardy }, // Tangrowth
|
||||
new(B2W2) { Species = 479, Level = 60, Ability = OnlyFirst, TID16 = 54673, SID16 = 00000, OTGender = 1, Gender = 2, IVs = new(20,20,20,20,20,31), Nature = Nature.Calm }, // Rotom
|
||||
new(B2W2) { Species = 424, Level = 40, Ability = OnlySecond, TID16 = 17074, SID16 = 00001, OTGender = 1, Gender = 0, IVs = new(20,20,20,31,20,20), Nature = Nature.Jolly }, // Ambipom
|
||||
new(B2W2) { Species = 065, Level = 40, Ability = OnlyFirst, TID16 = 17074, SID16 = 00001, OTGender = 1, Gender = 0, IVs = new(20,20,20,31,20,20), Nature = Nature.Timid }, // Alakazam
|
||||
};
|
||||
|
||||
internal const int YancyTID = 10303;
|
||||
internal const int CurtisTID = 54118;
|
||||
private const ushort YancyTID = 10303;
|
||||
private const ushort CurtisTID = 54118;
|
||||
private static readonly string[] TradeOT_B2W2_F = { string.Empty, "ルリ", "Yancy", "Brenda", "Lilì", "Sabine", string.Empty, "Belinda", "루리" };
|
||||
private static readonly string[] TradeOT_B2W2_M = { string.Empty, "テツ", "Curtis", "Julien", "Dadi", "Markus", string.Empty, "Julián", "철권" };
|
||||
|
||||
private static readonly EncounterTrade5[] TradeGift_B2W2_YancyCurtis =
|
||||
public static readonly EncounterTrade5B2W2[] TradeGift_B2W2 =
|
||||
{
|
||||
new(TradeNames, 00, B2 ) { Species = 548, Level = 20, Ability = OnlySecond, ID32 = 65217, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Timid }, // Petilil
|
||||
new(TradeNames, 01, W2) { Species = 546, Level = 20, Ability = OnlyFirst, ID32 = 71256, OTGender = 0, Gender = 0, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Cottonee
|
||||
new(TradeNames, 02, B2W2) { Species = 526, Level = 35, Ability = OnlyFirst, ID32 = 11195, OTGender = 0, Gender = 0, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant, IsFixedNickname = false }, // Gigalith
|
||||
new(TradeNames, 03, B2W2) { Species = 465, Level = 45, Ability = OnlyFirst, ID32 = 93194, OTGender = 0, Gender = 0, IVs = new(31,20,20,20,20,20), Nature = Nature.Hardy }, // Tangrowth
|
||||
new(TradeNames, 04, B2W2) { Species = 479, Level = 60, Ability = OnlyFirst, ID32 = 54673, OTGender = 1, Gender = 2, IVs = new(20,20,20,20,20,31), Nature = Nature.Calm }, // Rotom
|
||||
new(TradeNames, 05, B2W2) { Species = 424, Level = 40, Ability = OnlySecond, ID32 = 82610, OTGender = 1, Gender = 0, IVs = new(20,20,20,31,20,20), Nature = Nature.Jolly }, // Ambipom
|
||||
new(TradeNames, 06, B2W2) { Species = 065, Level = 40, Ability = OnlyFirst, ID32 = 82610, OTGender = 1, Gender = 0, IVs = new(20,20,20,31,20,20), Nature = Nature.Timid }, // Alakazam
|
||||
|
||||
// Player is Male
|
||||
new(B2W2) { Species = 052, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Meowth
|
||||
new(B2W2) { Species = 202, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Wobbuffet
|
||||
new(B2W2) { Species = 280, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Ralts
|
||||
new(B2W2) { Species = 410, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Shieldon
|
||||
new(B2W2) { Species = 111, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Rhyhorn
|
||||
new(B2W2) { Species = 422, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F, Form = 0 }, // Shellos-West
|
||||
new(B2W2) { Species = 303, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Mawile
|
||||
new(B2W2) { Species = 442, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Spiritomb
|
||||
new(B2W2) { Species = 143, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Snorlax
|
||||
new(B2W2) { Species = 216, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Teddiursa
|
||||
new(B2W2) { Species = 327, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Spinda
|
||||
new(B2W2) { Species = 175, Level = 50, Ability = OnlyHidden, TID16 = 10303, SID16 = 00000, OTGender = 1, TrainerNames = TradeOT_B2W2_F }, // Togepi
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 052, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Meowth
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 202, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Wobbuffet
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 280, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Ralts
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 410, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Shieldon
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 111, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Rhyhorn
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 422, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1, Form = 0 }, // Shellos-West
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 303, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Mawile
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 442, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Spiritomb
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 143, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Snorlax
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 216, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Teddiursa
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 327, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Spinda
|
||||
new(TradeOT_B2W2_F, B2W2) { Species = 175, Level = 50, Ability = OnlyHidden, ID32 = YancyTID, OTGender = 1 }, // Togepi
|
||||
|
||||
// Player is Female
|
||||
new(B2W2) { Species = 056, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Mankey
|
||||
new(B2W2) { Species = 202, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Wobbuffet
|
||||
new(B2W2) { Species = 280, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Ralts
|
||||
new(B2W2) { Species = 408, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Cranidos
|
||||
new(B2W2) { Species = 111, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Rhyhorn
|
||||
new(B2W2) { Species = 422, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M, Form = 1 }, // Shellos-East
|
||||
new(B2W2) { Species = 302, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Sableye
|
||||
new(B2W2) { Species = 442, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Spiritomb
|
||||
new(B2W2) { Species = 143, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Snorlax
|
||||
new(B2W2) { Species = 231, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Phanpy
|
||||
new(B2W2) { Species = 327, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Spinda
|
||||
new(B2W2) { Species = 175, Level = 50, Ability = OnlyHidden, TID16 = 54118, SID16 = 00000, OTGender = 0, TrainerNames = TradeOT_B2W2_M }, // Togepi
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 056, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Mankey
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 202, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Wobbuffet
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 280, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Ralts
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 408, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Cranidos
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 111, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Rhyhorn
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 422, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0, Form = 1 }, // Shellos-East
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 302, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Sableye
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 442, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Spiritomb
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 143, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Snorlax
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 231, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Phanpy
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 327, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Spinda
|
||||
new(TradeOT_B2W2_M, B2W2) { Species = 175, Level = 50, Ability = OnlyHidden, ID32 = CurtisTID, OTGender = 0 }, // Togepi
|
||||
};
|
||||
|
||||
private const string tradeB2W2 = "tradeb2w2";
|
||||
private static readonly string[][] TradeB2W2 = Util.GetLanguageStrings8(tradeB2W2);
|
||||
public static readonly EncounterTrade5B2W2[] TradeGift_W2 =
|
||||
{
|
||||
new(TradeNames, 01, W2) { Species = 546, Level = 20, Ability = OnlyFirst, ID32 = 71256, OTGender = 0, Gender = 0, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Cottonee
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade5[] TradeGift_B2W2 = ArrayUtil.ConcatAll(TradeGift_B2W2_Regular, TradeGift_B2W2_YancyCurtis);
|
||||
public static readonly EncounterTrade5B2W2[] TradeGift_B2 =
|
||||
{
|
||||
new(TradeNames, 00, B2 ) { Species = 548, Level = 20, Ability = OnlySecond, ID32 = 65217, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Timid }, // Petilil
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
internal static readonly EncounterStatic5[] StaticB2 = ArrayUtil.ConcatAll(GetEncounters(Encounter_B2W2, B2), DreamWorld_Common, DreamWorld_B2W2);
|
||||
internal static readonly EncounterStatic5[] StaticW2 = ArrayUtil.ConcatAll(GetEncounters(Encounter_B2W2, W2), DreamWorld_Common, DreamWorld_B2W2);
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
using static PKHeX.Core.Encounters5DR;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
|
@ -13,11 +12,12 @@ public static class Encounters5BW
|
|||
internal static readonly EncounterArea5[] SlotsB = EncounterArea5.GetAreas(Get("b", "51"), B);
|
||||
internal static readonly EncounterArea5[] SlotsW = EncounterArea5.GetAreas(Get("w", "51"), W);
|
||||
|
||||
static Encounters5BW() => MarkEncounterTradeStrings(TradeGift_BW, TradeBW);
|
||||
private const string tradeBW = "tradebw";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeBW);
|
||||
|
||||
#region DreamWorld Encounter
|
||||
|
||||
public static readonly EncounterStatic5[] DreamWorld_BW = DreamWorldEntry.GetArray(BW, stackalloc DreamWorldEntry[]
|
||||
public static readonly EncounterStatic5Entree[] DreamWorld_BW = DreamWorldEntry.GetArray(BW, stackalloc DreamWorldEntry[]
|
||||
{
|
||||
// Pleasant Forest
|
||||
new(029, 10, 010, 389, 162), // Nidoran♀
|
||||
|
@ -120,30 +120,30 @@ public static class Encounters5BW
|
|||
|
||||
#endregion
|
||||
#region Static Encounter/Gift Tables
|
||||
private static readonly EncounterStatic5[] Encounter_BW =
|
||||
public static readonly EncounterStatic5[] Encounter_BW =
|
||||
{
|
||||
// Starters @ Nuvema Town
|
||||
new(BW) { Gift = true, Species = 495, Level = 05, Location = 004 }, // Snivy
|
||||
new(BW) { Gift = true, Species = 498, Level = 05, Location = 004 }, // Tepig
|
||||
new(BW) { Gift = true, Species = 501, Level = 05, Location = 004 }, // Oshawott
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 495, Level = 05, Location = 004 }, // Snivy
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 498, Level = 05, Location = 004 }, // Tepig
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 501, Level = 05, Location = 004 }, // Oshawott
|
||||
|
||||
// Fossils @ Nacrene City
|
||||
new(BW) { Gift = true, Species = 138, Level = 25, Location = 007 }, // Omanyte
|
||||
new(BW) { Gift = true, Species = 140, Level = 25, Location = 007 }, // Kabuto
|
||||
new(BW) { Gift = true, Species = 142, Level = 25, Location = 007 }, // Aerodactyl
|
||||
new(BW) { Gift = true, Species = 345, Level = 25, Location = 007 }, // Lileep
|
||||
new(BW) { Gift = true, Species = 347, Level = 25, Location = 007 }, // Anorith
|
||||
new(BW) { Gift = true, Species = 408, Level = 25, Location = 007 }, // Cranidos
|
||||
new(BW) { Gift = true, Species = 410, Level = 25, Location = 007 }, // Shieldon
|
||||
new(BW) { Gift = true, Species = 564, Level = 25, Location = 007 }, // Tirtouga
|
||||
new(BW) { Gift = true, Species = 566, Level = 25, Location = 007 }, // Archen
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 138, Level = 25, Location = 007 }, // Omanyte
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 140, Level = 25, Location = 007 }, // Kabuto
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 142, Level = 25, Location = 007 }, // Aerodactyl
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 345, Level = 25, Location = 007 }, // Lileep
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 347, Level = 25, Location = 007 }, // Anorith
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 408, Level = 25, Location = 007 }, // Cranidos
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 410, Level = 25, Location = 007 }, // Shieldon
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 564, Level = 25, Location = 007 }, // Tirtouga
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 566, Level = 25, Location = 007 }, // Archen
|
||||
|
||||
// Gift
|
||||
new(BW) { Gift = true, Species = 511, Level = 10, Location = 032 }, // Pansage @ Dreamyard
|
||||
new(BW) { Gift = true, Species = 513, Level = 10, Location = 032 }, // Pansear
|
||||
new(BW) { Gift = true, Species = 515, Level = 10, Location = 032 }, // Panpour
|
||||
new(BW) { Gift = true, Species = 129, Level = 05, Location = 068 }, // Magikarp @ Marvelous Bridge
|
||||
new(BW) { Gift = true, Species = 636, Level = 01, EggLocation = 60003 }, // Larvesta Egg from Treasure Hunter
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 511, Level = 10, Location = 032 }, // Pansage @ Dreamyard
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 513, Level = 10, Location = 032 }, // Pansear
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 515, Level = 10, Location = 032 }, // Panpour
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 129, Level = 05, Location = 068 }, // Magikarp @ Marvelous Bridge
|
||||
new(BW) { FixedBall = Ball.Poke, Species = 636, Level = 01, EggLocation = 60003, Location = 0 }, // Larvesta Egg from Treasure Hunter
|
||||
|
||||
// Stationary
|
||||
new(BW) { Species = 518, Level = 50, Location = 032, Ability = OnlyHidden }, // Musharna @ Dreamyard Friday Only
|
||||
|
@ -157,10 +157,6 @@ public static class Encounters5BW
|
|||
new(BW) { Species = 638, Level = 42, Location = 074 }, // Cobalion @ Guidance Chamber
|
||||
new(BW) { Species = 639, Level = 42, Location = 073 }, // Terrakion @ Trial Chamber
|
||||
new(BW) { Species = 640, Level = 42, Location = 055 }, // Virizion @ Rumination Field
|
||||
new(B ) { Species = 643, Level = 50, Location = 045, Shiny = Shiny.Never }, // Reshiram @ N's Castle
|
||||
new(B ) { Species = 643, Level = 50, Location = 039, Shiny = Shiny.Never }, // Reshiram @ Dragonspiral Tower
|
||||
new( W) { Species = 644, Level = 50, Location = 045, Shiny = Shiny.Never }, // Zekrom @ N's Castle
|
||||
new( W) { Species = 644, Level = 50, Location = 039, Shiny = Shiny.Never }, // Zekrom @ Dragonspiral Tower
|
||||
new(BW) { Species = 645, Level = 70, Location = 070 }, // Landorus @ Abundant Shrine
|
||||
new(BW) { Species = 646, Level = 75, Location = 061 }, // Kyurem @ Giant Chasm
|
||||
|
||||
|
@ -168,29 +164,40 @@ public static class Encounters5BW
|
|||
new(BW) { Species = 494, Level = 15, Location = 062, Shiny = Shiny.Never}, // Victini @ Liberty Garden
|
||||
new(BW) { Species = 570, Level = 10, Location = 008, Shiny = Shiny.Never, Gender = 0 }, // Zorua @ Castelia City
|
||||
new(BW) { Species = 571, Level = 25, Location = 072, Shiny = Shiny.Never, Gender = 1 }, // Zoroark @ Lostlorn Forest
|
||||
};
|
||||
|
||||
// Roamer
|
||||
new(B ) { Roaming = true, Species = 641, Level = 40, Location = 25 }, // Tornadus
|
||||
public static readonly EncounterStatic5[] StaticB =
|
||||
{
|
||||
new(B) { Species = 643, Level = 50, Location = 045, Shiny = Shiny.Never }, // Reshiram @ N's Castle
|
||||
new(B) { Species = 643, Level = 50, Location = 039, Shiny = Shiny.Never }, // Reshiram @ Dragonspiral Tower
|
||||
new(B) { Roaming = true, Species = 641, Level = 40, Location = 25 }, // Tornadus
|
||||
};
|
||||
public static readonly EncounterStatic5[] StaticW =
|
||||
{
|
||||
new( W) { Species = 644, Level = 50, Location = 045, Shiny = Shiny.Never }, // Zekrom @ N's Castle
|
||||
new( W) { Species = 644, Level = 50, Location = 039, Shiny = Shiny.Never }, // Zekrom @ Dragonspiral Tower
|
||||
new( W) { Roaming = true, Species = 642, Level = 40, Location = 25 }, // Thundurus
|
||||
};
|
||||
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
internal static readonly EncounterTrade5PID[] TradeGift_BW =
|
||||
internal static readonly EncounterTrade5BW[] TradeGift_BW =
|
||||
{
|
||||
new(B , 0x64000000) { Species = 548, Level = 15, Ability = OnlyFirst, TID16 = 39922, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Petilil
|
||||
new( W, 0x6400007E) { Species = 546, Level = 15, Ability = OnlyFirst, TID16 = 39922, SID16 = 00000, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Cottonee
|
||||
new(B , 0x9400007F) { Species = 550, Level = 25, Ability = OnlyFirst, TID16 = 27646, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant, Form = 0 }, // Basculin-Red
|
||||
new( W, 0x9400007F) { Species = 550, Level = 25, Ability = OnlyFirst, TID16 = 27646, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant, Form = 1 }, // Basculin-Blue
|
||||
new(BW, 0xD400007F) { Species = 587, Level = 30, Ability = OnlyFirst, TID16 = 11195, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(20,20,31,20,20,20), Nature = Nature.Lax }, // Emolga
|
||||
new(BW, 0x2A000000) { Species = 479, Level = 60, Ability = OnlyFirst, TID16 = 54673, SID16 = 00000, OTGender = 1, Gender = 2, IVs = new(20,20,20,20,20,31), Nature = Nature.Gentle }, // Rotom
|
||||
new(BW, 0x6200001F) { Species = 446, Level = 60, Ability = OnlySecond, TID16 = 40217, SID16 = 00000, OTGender = 0, Gender = 0, IVs = new(31,20,20,20,20,20), Nature = Nature.Serious }, // Munchlax
|
||||
new(TradeNames, 04, BW, 0xD400007F) { Species = 587, Level = 30, Ability = OnlyFirst, ID32 = 11195, OTGender = 0, Gender = 0, IVs = new(20,20,31,20,20,20), Nature = Nature.Lax }, // Emolga
|
||||
new(TradeNames, 05, BW, 0x2A000000) { Species = 479, Level = 60, Ability = OnlyFirst, ID32 = 54673, OTGender = 1, Gender = 2, IVs = new(20,20,20,20,20,31), Nature = Nature.Gentle }, // Rotom
|
||||
new(TradeNames, 06, BW, 0x6200001F) { Species = 446, Level = 60, Ability = OnlySecond, ID32 = 40217, OTGender = 0, Gender = 0, IVs = new(31,20,20,20,20,20), Nature = Nature.Serious }, // Munchlax
|
||||
};
|
||||
|
||||
private const string tradeBW = "tradebw";
|
||||
private static readonly string[][] TradeBW = Util.GetLanguageStrings8(tradeBW);
|
||||
#endregion
|
||||
internal static readonly EncounterTrade5BW[] TradeGift_B =
|
||||
{
|
||||
new(TradeNames, 00, B , 0x64000000) { Species = 548, Level = 15, Ability = OnlyFirst, ID32 = 39922, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Petilil
|
||||
new(TradeNames, 02, B , 0x9400007F) { Species = 550, Level = 25, Ability = OnlyFirst, ID32 = 27646, OTGender = 0, Gender = 0, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant, Form = 0 }, // Basculin-Red
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic5[] StaticB = ArrayUtil.ConcatAll(GetEncounters(Encounter_BW, B), DreamWorld_Common, DreamWorld_BW);
|
||||
internal static readonly EncounterStatic5[] StaticW = ArrayUtil.ConcatAll(GetEncounters(Encounter_BW, W), DreamWorld_Common, DreamWorld_BW);
|
||||
internal static readonly EncounterTrade5BW[] TradeGift_W =
|
||||
{
|
||||
new(TradeNames, 01, W, 0x6400007E) { Species = 546, Level = 15, Ability = OnlyFirst, ID32 = 39922, OTGender = 1, Gender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Cottonee
|
||||
new(TradeNames, 03, W, 0x9400007F) { Species = 550, Level = 25, Ability = OnlyFirst, ID32 = 27646, OTGender = 0, Gender = 0, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant, Form = 1 }, // Basculin-Blue
|
||||
};
|
||||
#endregion
|
||||
}
|
|
@ -10,7 +10,7 @@ public static class Encounters5DR
|
|||
{
|
||||
#region Dream Radar Tables
|
||||
|
||||
internal static readonly EncounterStatic5DR[] Encounter_DreamRadar =
|
||||
internal static readonly EncounterStatic5Radar[] Encounter_DreamRadar =
|
||||
{
|
||||
new(079, 0), // Slowpoke
|
||||
new(120, 0), // Staryu
|
||||
|
@ -43,7 +43,7 @@ public static class Encounters5DR
|
|||
#endregion
|
||||
#region DreamWorld Encounter
|
||||
|
||||
public static readonly EncounterStatic5[] DreamWorld_Common = DreamWorldEntry.GetArray(Gen5, stackalloc DreamWorldEntry[]
|
||||
public static readonly EncounterStatic5Entree[] DreamWorld_Common = DreamWorldEntry.GetArray(Gen5, stackalloc DreamWorldEntry[]
|
||||
{
|
||||
// Pleasant Forest
|
||||
new(019, 10, 098, 382, 231), // Rattata
|
|
@ -12,13 +12,8 @@ internal static class Encounters6AO
|
|||
internal static readonly EncounterArea6AO[] SlotsA = EncounterArea6AO.GetAreas(Get("as", "ao"), AS);
|
||||
internal static readonly EncounterArea6AO[] SlotsO = EncounterArea6AO.GetAreas(Get("or", "ao"), OR);
|
||||
|
||||
static Encounters6AO()
|
||||
{
|
||||
MarkEncounterTradeStrings(TradeGift_AO, TradeAO);
|
||||
}
|
||||
|
||||
private const string tradeAO = "tradeao";
|
||||
private static readonly string[][] TradeAO = Util.GetLanguageStrings8(tradeAO);
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeAO);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
private static readonly EncounterStatic6 BaseCosplay = new(ORAS)
|
||||
|
@ -35,73 +30,61 @@ internal static class Encounters6AO
|
|||
CNT_Cute = 70,
|
||||
CNT_Tough = 70,
|
||||
CNT_Smart = 70,
|
||||
Gift = true,
|
||||
FixedBall = Ball.Poke,
|
||||
Shiny = Shiny.Never,
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic6[] Encounter_AO_Regular =
|
||||
{
|
||||
// Starters @ Route 101
|
||||
new(ORAS) { Gift = true, Species = 252, Level = 5, Location = 204 }, // Treeko
|
||||
new(ORAS) { Gift = true, Species = 255, Level = 5, Location = 204 }, // Torchic
|
||||
new(ORAS) { Gift = true, Species = 258, Level = 5, Location = 204 }, // Mudkip
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 252, Level = 5, Location = 204 }, // Treeko
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 255, Level = 5, Location = 204 }, // Torchic
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 258, Level = 5, Location = 204 }, // Mudkip
|
||||
|
||||
new(ORAS) { Gift = true, Species = 152, Level = 5, Location = 204 }, // Chikorita
|
||||
new(ORAS) { Gift = true, Species = 155, Level = 5, Location = 204 }, // Cyndaquil
|
||||
new(ORAS) { Gift = true, Species = 158, Level = 5, Location = 204 }, // Totodile
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 152, Level = 5, Location = 204 }, // Chikorita
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 155, Level = 5, Location = 204 }, // Cyndaquil
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 158, Level = 5, Location = 204 }, // Totodile
|
||||
|
||||
new(ORAS) { Gift = true, Species = 387, Level = 5, Location = 204 }, // Turtwig
|
||||
new(ORAS) { Gift = true, Species = 390, Level = 5, Location = 204 }, // Chimchar
|
||||
new(ORAS) { Gift = true, Species = 393, Level = 5, Location = 204 }, // Piplup
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 387, Level = 5, Location = 204 }, // Turtwig
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 390, Level = 5, Location = 204 }, // Chimchar
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 393, Level = 5, Location = 204 }, // Piplup
|
||||
|
||||
new(ORAS) { Gift = true, Species = 495, Level = 5, Location = 204 }, // Snivy
|
||||
new(ORAS) { Gift = true, Species = 498, Level = 5, Location = 204 }, // Tepig
|
||||
new(ORAS) { Gift = true, Species = 501, Level = 5, Location = 204 }, // Oshawott
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 495, Level = 5, Location = 204 }, // Snivy
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 498, Level = 5, Location = 204 }, // Tepig
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 501, Level = 5, Location = 204 }, // Oshawott
|
||||
|
||||
// Fossils @ Rustboro City
|
||||
new(ORAS) { Gift = true, Species = 138, Level = 20, Location = 190 }, // Omanyte
|
||||
new(ORAS) { Gift = true, Species = 140, Level = 20, Location = 190 }, // Kabuto
|
||||
new(ORAS) { Gift = true, Species = 142, Level = 20, Location = 190 }, // Aerodactyl
|
||||
new(ORAS) { Gift = true, Species = 345, Level = 20, Location = 190 }, // Lileep
|
||||
new(ORAS) { Gift = true, Species = 347, Level = 20, Location = 190 }, // Anorith
|
||||
new(ORAS) { Gift = true, Species = 408, Level = 20, Location = 190 }, // Cranidos
|
||||
new(ORAS) { Gift = true, Species = 410, Level = 20, Location = 190 }, // Shieldon
|
||||
new(ORAS) { Gift = true, Species = 564, Level = 20, Location = 190 }, // Tirtouga
|
||||
new(ORAS) { Gift = true, Species = 566, Level = 20, Location = 190 }, // Archen
|
||||
new(ORAS) { Gift = true, Species = 696, Level = 20, Location = 190 }, // Tyrunt
|
||||
new(ORAS) { Gift = true, Species = 698, Level = 20, Location = 190 }, // Amaura
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 138, Level = 20, Location = 190 }, // Omanyte
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 140, Level = 20, Location = 190 }, // Kabuto
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 142, Level = 20, Location = 190 }, // Aerodactyl
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 345, Level = 20, Location = 190 }, // Lileep
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 347, Level = 20, Location = 190 }, // Anorith
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 408, Level = 20, Location = 190 }, // Cranidos
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 410, Level = 20, Location = 190 }, // Shieldon
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 564, Level = 20, Location = 190 }, // Tirtouga
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 566, Level = 20, Location = 190 }, // Archen
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 696, Level = 20, Location = 190 }, // Tyrunt
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 698, Level = 20, Location = 190 }, // Amaura
|
||||
|
||||
// Hot Springs Eggs
|
||||
new(ORAS) { Gift = true, Species = 360, Level = 1, EggLocation = 60004, Ability = OnlyFirst, EggCycles = 70 }, // Wynaut
|
||||
new(ORAS) { Gift = true, Species = 175, Level = 1, EggLocation = 60004, Ability = OnlyFirst, EggCycles = 70 }, // Togepi
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 360, Level = 1, Location = 0, EggLocation = 60004, Ability = OnlyFirst, EggCycles = 70 }, // Wynaut
|
||||
new(ORAS) { FixedBall = Ball.Poke, Species = 175, Level = 1, Location = 0, EggLocation = 60004, Ability = OnlyFirst, EggCycles = 70 }, // Togepi
|
||||
|
||||
// Gift
|
||||
new(ORAS) { Species = 374, Level = 01, Location = 196, Ability = OnlyFirst, Gift = true, IVs = new(-1,-1,31,-1,-1,31) }, // Beldum
|
||||
new(ORAS) { Species = 351, Level = 30, Location = 240, Ability = OnlyFirst, Gift = true, IVs = new(-1,-1,-1,-1,31,-1), CNT_Beauty = 100, Gender = 1, Nature = Nature.Lax }, // Castform
|
||||
new(ORAS) { Species = 319, Level = 40, Location = 318, Ability = OnlyFirst, Gift = true, Gender = 1, Nature = Nature.Adamant }, // Sharpedo
|
||||
new(ORAS) { Species = 323, Level = 40, Location = 318, Ability = OnlyFirst, Gift = true, Gender = 1, Nature = Nature.Quiet }, // Camerupt
|
||||
new( AS) { Species = 380, Level = 30, Location = 320, Ability = OnlyFirst, Gift = true, FlawlessIVCount = 3 }, // Latias
|
||||
new(OR ) { Species = 381, Level = 30, Location = 320, Ability = OnlyFirst, Gift = true, FlawlessIVCount = 3 }, // Latios
|
||||
new(ORAS) { Species = 374, Level = 01, Location = 196, Ability = OnlyFirst, FixedBall = Ball.Poke, IVs = new(-1,-1,31,-1,-1,31) }, // Beldum
|
||||
new(ORAS) { Species = 351, Level = 30, Location = 240, Ability = OnlyFirst, FixedBall = Ball.Poke, IVs = new(-1,-1,-1,-1,31,-1), CNT_Beauty = 100, Gender = 1, Nature = Nature.Lax }, // Castform
|
||||
new(ORAS) { Species = 319, Level = 40, Location = 318, Ability = OnlyFirst, FixedBall = Ball.Poke, Gender = 1, Nature = Nature.Adamant }, // Sharpedo
|
||||
new(ORAS) { Species = 323, Level = 40, Location = 318, Ability = OnlyFirst, FixedBall = Ball.Poke, Gender = 1, Nature = Nature.Quiet }, // Camerupt
|
||||
|
||||
// Stationary Legendary
|
||||
new(ORAS) { Species = 377, Level = 40, Location = 278, FlawlessIVCount = 3 }, // Regirock
|
||||
new(ORAS) { Species = 378, Level = 40, Location = 306, FlawlessIVCount = 3 }, // Regice
|
||||
new(ORAS) { Species = 379, Level = 40, Location = 308, FlawlessIVCount = 3 }, // Registeel
|
||||
new(ORAS) { Species = 486, Level = 50, Location = 306, FlawlessIVCount = 3 }, // Regigigas
|
||||
new( AS) { Species = 382, Level = 45, Location = 296, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Kyogre
|
||||
new(OR ) { Species = 383, Level = 45, Location = 296, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Groudon
|
||||
new(ORAS) { Species = 384, Level = 70, Location = 316, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Rayquaza
|
||||
new(ORAS) { Species = 386, Level = 80, Location = 316, Shiny = Shiny.Never, FlawlessIVCount = 3, FatefulEncounter = true }, // Deoxys
|
||||
|
||||
// Hoopa Rings
|
||||
new( AS) { Species = 249, Level = 50, Location = 304, FlawlessIVCount = 3 }, // Lugia
|
||||
new(OR ) { Species = 250, Level = 50, Location = 304, FlawlessIVCount = 3 }, // Ho-Oh
|
||||
new( AS) { Species = 483, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Dialga
|
||||
new(OR ) { Species = 484, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Palkia
|
||||
new( AS) { Species = 644, Level = 50, Location = 340, FlawlessIVCount = 3 }, // Zekrom
|
||||
new(OR ) { Species = 643, Level = 50, Location = 340, FlawlessIVCount = 3 }, // Reshiram
|
||||
new( AS) { Species = 642, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Thundurus
|
||||
new(OR ) { Species = 641, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Tornadus
|
||||
new(ORAS) { Species = 243, Level = 50, Location = 334, FlawlessIVCount = 3 }, // Raikou
|
||||
new(ORAS) { Species = 244, Level = 50, Location = 334, FlawlessIVCount = 3 }, // Entei
|
||||
new(ORAS) { Species = 245, Level = 50, Location = 334, FlawlessIVCount = 3 }, // Suicune
|
||||
|
@ -123,13 +106,6 @@ internal static class Encounters6AO
|
|||
new(ORAS) { Species = 352, Level = 40, Location = 176, Gender = 1 }, // Kecleon @ Lavaridge
|
||||
new(ORAS) { Species = 352, Level = 45, Location = 196, Ability = OnlyHidden }, // Kecleon @ Mossdeep City
|
||||
|
||||
// Eon Ticket Lati@s
|
||||
new( AS) { Species = 381, Level = 30, Location = 320, FlawlessIVCount = 3 }, // Latios
|
||||
new(OR ) { Species = 380, Level = 30, Location = 320, FlawlessIVCount = 3 }, // Latias
|
||||
|
||||
// Stationary
|
||||
new( AS) { Species = 101, Level = 40, Location = 292 }, // Electrode
|
||||
new(OR ) { Species = 101, Level = 40, Location = 314 }, // Electrode
|
||||
new(ORAS) { Species = 100, Level = 20, Location = 302 }, // Voltorb @ Route 119
|
||||
new(ORAS) { Species = 442, Level = 50, Location = 304 }, // Spiritomb @ Route 120
|
||||
|
||||
|
@ -150,18 +126,39 @@ internal static class Encounters6AO
|
|||
BaseCosplay, // Cosplay, same 3 level up moves.
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic6[] Encounter_AO = Encounter_AO_Regular;
|
||||
internal static readonly EncounterStatic6[] StaticA =
|
||||
{
|
||||
new( AS) { Species = 380, Level = 30, Location = 320, Ability = OnlyFirst, FixedBall = Ball.Poke, FlawlessIVCount = 3 }, // Latias
|
||||
new( AS) { Species = 382, Level = 45, Location = 296, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Kyogre
|
||||
new( AS) { Species = 249, Level = 50, Location = 304, FlawlessIVCount = 3 }, // Lugia
|
||||
new( AS) { Species = 483, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Dialga
|
||||
new( AS) { Species = 644, Level = 50, Location = 340, FlawlessIVCount = 3 }, // Zekrom
|
||||
new( AS) { Species = 642, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Thundurus
|
||||
new( AS) { Species = 381, Level = 30, Location = 320, FlawlessIVCount = 3 }, // Latios
|
||||
new( AS) { Species = 101, Level = 40, Location = 292 }, // Electrode
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic6[] StaticO =
|
||||
{
|
||||
new(OR ) { Species = 381, Level = 30, Location = 320, Ability = OnlyFirst, FixedBall = Ball.Poke, FlawlessIVCount = 3 }, // Latios
|
||||
new(OR ) { Species = 383, Level = 45, Location = 296, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Groudon
|
||||
new(OR ) { Species = 250, Level = 50, Location = 304, FlawlessIVCount = 3 }, // Ho-Oh
|
||||
new(OR ) { Species = 484, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Palkia
|
||||
new(OR ) { Species = 643, Level = 50, Location = 340, FlawlessIVCount = 3 }, // Reshiram
|
||||
new(OR ) { Species = 641, Level = 50, Location = 348, FlawlessIVCount = 3 }, // Tornadus
|
||||
new(OR ) { Species = 380, Level = 30, Location = 320, FlawlessIVCount = 3 }, // Latias
|
||||
new(OR ) { Species = 101, Level = 40, Location = 314 }, // Electrode
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic6[] Encounter_AO = Encounter_AO_Regular;
|
||||
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
internal static readonly EncounterTrade6[] TradeGift_AO =
|
||||
{
|
||||
new(ORAS, 01,3,05,040) { Species = 296, Level = 09, Ability = OnlySecond, TID16 = 30724, IVs = new(-1,31,-1,-1,-1,-1), Gender = 0, Nature = Nature.Brave }, // Makuhita
|
||||
new(ORAS, 34,3,13,176) { Species = 300, Level = 30, Ability = OnlyFirst, TID16 = 03239, IVs = new(-1,-1,-1,31,-1,-1), Gender = 1, Nature = Nature.Naughty }, // Skitty
|
||||
new(ORAS, 07,4,10,319) { Species = 222, Level = 50, Ability = OnlyHidden, TID16 = 00325, IVs = new(31,-1,-1,-1,-1,31), Gender = 1, Nature = Nature.Calm }, // Corsola
|
||||
new(TradeNames, 00, ORAS, 01,3,05,040) { Species = 296, Level = 09, Ability = OnlySecond, ID32 = 30724, Gender = 0, OTGender = 0, IVs = new(-1,31,-1,-1,-1,-1), Nature = Nature.Brave }, // Makuhita
|
||||
new(TradeNames, 01, ORAS, 34,3,13,176) { Species = 300, Level = 30, Ability = OnlyFirst, ID32 = 03239, Gender = 1, OTGender = 1, IVs = new(-1,-1,-1,31,-1,-1), Nature = Nature.Naughty }, // Skitty
|
||||
new(TradeNames, 02, ORAS, 07,4,10,319) { Species = 222, Level = 50, Ability = OnlyHidden, ID32 = 00325, Gender = 1, OTGender = 1, IVs = new(31,-1,-1,-1,-1,31), Nature = Nature.Calm }, // Corsola
|
||||
};
|
||||
#endregion
|
||||
|
||||
internal static readonly EncounterStatic6[] StaticA = GetEncounters(Encounter_AO, AS);
|
||||
internal static readonly EncounterStatic6[] StaticO = GetEncounters(Encounter_AO, OR);
|
||||
}
|
106
PKHeX.Core/Legality/Encounters/Data/Gen6/Encounters6XY.cs
Normal file
106
PKHeX.Core/Legality/Encounters/Data/Gen6/Encounters6XY.cs
Normal file
|
@ -0,0 +1,106 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 6 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters6XY
|
||||
{
|
||||
private static readonly EncounterArea6XY FriendSafari = new();
|
||||
internal static readonly EncounterArea6XY[] SlotsX = EncounterArea6XY.GetAreas(Get("x", "xy"), X, FriendSafari);
|
||||
internal static readonly EncounterArea6XY[] SlotsY = EncounterArea6XY.GetAreas(Get("y", "xy"), Y, FriendSafari);
|
||||
|
||||
private const string tradeXY = "tradexy";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings8(tradeXY);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
internal static readonly EncounterStatic6[] Encounter_XY =
|
||||
{
|
||||
// Kalos Starters @ Aquacorde Town
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 650, Level = 5, Location = 10 }, // Chespin
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 653, Level = 5, Location = 10 }, // Fennekin
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 656, Level = 5, Location = 10 }, // Froakie
|
||||
|
||||
// Kanto Starters @ Lumiose City
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 001, Level = 10, Location = 22 }, // Bulbasaur
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 004, Level = 10, Location = 22 }, // Charmander
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 007, Level = 10, Location = 22 }, // Squirtle
|
||||
|
||||
// Fossils @ Ambrette Town
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 138, Level = 20, Location = 44 }, // Omanyte
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 140, Level = 20, Location = 44 }, // Kabuto
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 142, Level = 20, Location = 44 }, // Aerodactyl
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 345, Level = 20, Location = 44 }, // Lileep
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 347, Level = 20, Location = 44 }, // Anorith
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 408, Level = 20, Location = 44 }, // Cranidos
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 410, Level = 20, Location = 44 }, // Shieldon
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 564, Level = 20, Location = 44 }, // Tirtouga
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 566, Level = 20, Location = 44 }, // Archen
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 696, Level = 20, Location = 44 }, // Tyrunt
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 698, Level = 20, Location = 44 }, // Amaura
|
||||
|
||||
// Gift
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 448, Level = 32, Location = 60, Ability = OnlyFirst, IVs = new(06,25,16,31,25,19), Nature = Nature.Hasty, Gender = 0, Shiny = Shiny.Never }, // Lucario
|
||||
new(XY) { FixedBall = Ball.Poke, Species = 131, Level = 30, Location = 62, Ability = OnlyFirst, IVs = new(31,20,20,20,20,20), Nature = Nature.Docile }, // Lapras
|
||||
|
||||
// Stationary
|
||||
new(XY) { Species = 143, Level = 15, Location = 038, Shiny = Shiny.Never }, // Snorlax
|
||||
|
||||
// Shaking Trash Cans @ Lost Hotel
|
||||
new(XY) { Species = 568, Level = 35, Location = 142 }, // Trubbish
|
||||
new(XY) { Species = 569, Level = 36, Location = 142 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 37, Location = 142 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 38, Location = 142 }, // Garbodor
|
||||
new(XY) { Species = 479, Level = 38, Location = 142 }, // Rotom
|
||||
|
||||
// Shaking Trash Cans @ Pokemon Village
|
||||
new(XY) { Species = 569, Level = 46, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 47, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 48, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 49, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 50, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 354, Level = 46, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 47, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 48, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 49, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 50, Location = 98 }, // Banette
|
||||
|
||||
// Stationary Legendary
|
||||
new(XY) { Species = 718, Level = 70, Location = 140, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(XY) { Species = 150, Level = 70, Location = 168, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Mewtwo
|
||||
new(XY) { Species = 144, Level = 70, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Articuno
|
||||
new(XY) { Species = 145, Level = 70, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zapdos
|
||||
new(XY) { Species = 146, Level = 70, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Moltres
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic6[] StaticX =
|
||||
{
|
||||
new(X ) { Species = 716, Level = 50, Location = 138, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Xerneas
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic6[] StaticY =
|
||||
{
|
||||
new( Y) { Species = 717, Level = 50, Location = 138, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Yveltal
|
||||
};
|
||||
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
internal static readonly EncounterTrade6[] TradeGift_XY =
|
||||
{
|
||||
new(TradeNames, 00, XY, 01,3,23,049) { Species = 129, Level = 05, Ability = OnlyFirst, ID32 = 44285, Gender = 0, OTGender = 0, IVs = new(-1,31,-1,-1,31,-1), Nature = Nature.Adamant }, // Magikarp
|
||||
new(TradeNames, 01, XY, 10,3,00,000) { Species = 133, Level = 05, Ability = OnlyFirst, ID32 = 29294, Gender = 1, OTGender = 1, IVs = default, Nature = Nature.Docile }, // Eevee
|
||||
|
||||
new(TradeNames, 02, XY, 15,4,13,017) { Species = 083, Level = 10, Ability = OnlyFirst, ID32 = 00185, Gender = 0, OTGender = 0, IVs = new(-1,-1,-1,31,-1,-1), Nature = Nature.Jolly }, // Farfetch'd
|
||||
new(TradeNames, 03, XY, 17,5,08,025) { Species = 208, Level = 20, Ability = OnlyFirst, ID32 = 19250, Gender = 1, OTGender = 0, IVs = new(-1,-1,31,-1,-1,-1), Nature = Nature.Impish }, // Steelix
|
||||
new(TradeNames, 04, XY, 18,7,20,709) { Species = 625, Level = 50, Ability = OnlyFirst, ID32 = 03447, Gender = 0, OTGender = 1, IVs = new(-1,31,-1,-1,-1,-1), Nature = Nature.Adamant }, // Bisharp
|
||||
|
||||
new(TradeNames, 05, XY, 02,3,11,005) { Species = 656, Level = 05, Ability = OnlyFirst, ID32 = 00037, Gender = 0, OTGender = 1, IVs = new(20,20,20,31,20,20), Nature = Nature.Jolly }, // Froakie
|
||||
new(TradeNames, 06, XY, 02,3,09,005) { Species = 650, Level = 05, Ability = OnlyFirst, ID32 = 00037, Gender = 0, OTGender = 1, IVs = new(20,31,20,20,20,20), Nature = Nature.Adamant }, // Chespin
|
||||
new(TradeNames, 07, XY, 02,3,18,005) { Species = 653, Level = 05, Ability = OnlyFirst, ID32 = 00037, Gender = 0, OTGender = 1, IVs = new(20,20,20,20,31,20), Nature = Nature.Modest }, // Fennekin
|
||||
new(TradeNames, 08, XY, 51,4,04,033) { Species = 280, Level = 05, Ability = OnlyFirst, ID32 = 37110, Gender = 1, OTGender = 1, IVs = new(20,20,20,31,31,20), Nature = Nature.Modest, IsFixedNickname = false }, // Ralts
|
||||
};
|
||||
#endregion
|
||||
}
|
|
@ -1,102 +0,0 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 6 Encounters
|
||||
/// </summary>
|
||||
internal static class Encounters6XY
|
||||
{
|
||||
private static readonly EncounterArea6XY FriendSafari = new();
|
||||
internal static readonly EncounterArea6XY[] SlotsX = EncounterArea6XY.GetAreas(Get("x", "xy"), X, FriendSafari);
|
||||
internal static readonly EncounterArea6XY[] SlotsY = EncounterArea6XY.GetAreas(Get("y", "xy"), Y, FriendSafari);
|
||||
|
||||
static Encounters6XY() => MarkEncounterTradeStrings(TradeGift_XY, TradeXY);
|
||||
|
||||
private const string tradeXY = "tradexy";
|
||||
private static readonly string[][] TradeXY = Util.GetLanguageStrings8(tradeXY);
|
||||
|
||||
#region Static Encounter/Gift Tables
|
||||
private static readonly EncounterStatic6[] Encounter_XY =
|
||||
{
|
||||
// Kalos Starters @ Aquacorde Town
|
||||
new(XY) { Gift = true, Species = 650, Level = 5, Location = 10 }, // Chespin
|
||||
new(XY) { Gift = true, Species = 653, Level = 5, Location = 10 }, // Fennekin
|
||||
new(XY) { Gift = true, Species = 656, Level = 5, Location = 10 }, // Froakie
|
||||
|
||||
// Kanto Starters @ Lumiose City
|
||||
new(XY) { Gift = true, Species = 1, Level = 10, Location = 22 }, // Bulbasaur
|
||||
new(XY) { Gift = true, Species = 4, Level = 10, Location = 22 }, // Charmander
|
||||
new(XY) { Gift = true, Species = 7, Level = 10, Location = 22 }, // Squirtle
|
||||
|
||||
// Fossils @ Ambrette Town
|
||||
new(XY) { Gift = true, Species = 138, Level = 20, Location = 44 }, // Omanyte
|
||||
new(XY) { Gift = true, Species = 140, Level = 20, Location = 44 }, // Kabuto
|
||||
new(XY) { Gift = true, Species = 142, Level = 20, Location = 44 }, // Aerodactyl
|
||||
new(XY) { Gift = true, Species = 345, Level = 20, Location = 44 }, // Lileep
|
||||
new(XY) { Gift = true, Species = 347, Level = 20, Location = 44 }, // Anorith
|
||||
new(XY) { Gift = true, Species = 408, Level = 20, Location = 44 }, // Cranidos
|
||||
new(XY) { Gift = true, Species = 410, Level = 20, Location = 44 }, // Shieldon
|
||||
new(XY) { Gift = true, Species = 564, Level = 20, Location = 44 }, // Tirtouga
|
||||
new(XY) { Gift = true, Species = 566, Level = 20, Location = 44 }, // Archen
|
||||
new(XY) { Gift = true, Species = 696, Level = 20, Location = 44 }, // Tyrunt
|
||||
new(XY) { Gift = true, Species = 698, Level = 20, Location = 44 }, // Amaura
|
||||
|
||||
// Gift
|
||||
new(XY) { Gift = true, Species = 448, Level = 32, Location = 60, Ability = OnlyFirst, IVs = new(06,25,16,31,25,19), Nature = Nature.Hasty, Gender = 0, Shiny = Shiny.Never }, // Lucario
|
||||
new(XY) { Gift = true, Species = 131, Level = 30, Location = 62, Ability = OnlyFirst, IVs = new(31,20,20,20,20,20), Nature = Nature.Docile }, // Lapras
|
||||
|
||||
// Stationary
|
||||
new(XY) { Species = 143, Level = 15, Location = 038, Shiny = Shiny.Never }, // Snorlax
|
||||
|
||||
// Shaking Trash Cans @ Lost Hotel
|
||||
new(XY) { Species = 568, Level = 35, Location = 142 }, // Trubbish
|
||||
new(XY) { Species = 569, Level = 36, Location = 142 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 37, Location = 142 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 38, Location = 142 }, // Garbodor
|
||||
new(XY) { Species = 479, Level = 38, Location = 142 }, // Rotom
|
||||
|
||||
// Shaking Trash Cans @ Pokemon Village
|
||||
new(XY) { Species = 569, Level = 46, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 47, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 48, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 49, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 569, Level = 50, Location = 98 }, // Garbodor
|
||||
new(XY) { Species = 354, Level = 46, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 47, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 48, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 49, Location = 98 }, // Banette
|
||||
new(XY) { Species = 354, Level = 50, Location = 98 }, // Banette
|
||||
|
||||
// Stationary Legendary
|
||||
new(X ) { Species = 716, Level = 50, Location = 138, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Xerneas
|
||||
new( Y) { Species = 717, Level = 50, Location = 138, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Yveltal
|
||||
new(XY) { Species = 718, Level = 70, Location = 140, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(XY) { Species = 150, Level = 70, Location = 168, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Mewtwo
|
||||
new(XY) { Species = 144, Level = 70, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Articuno
|
||||
new(XY) { Species = 145, Level = 70, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zapdos
|
||||
new(XY) { Species = 146, Level = 70, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Moltres
|
||||
};
|
||||
#endregion
|
||||
#region Trade Tables
|
||||
internal static readonly EncounterTrade6[] TradeGift_XY =
|
||||
{
|
||||
new(XY, 01,3,23,049) { Species = 129, Level = 05, Ability = OnlyFirst, TID16 = 44285, IVs = new(-1,31,-1,-1,31,-1), Gender = 0, Nature = Nature.Adamant }, // Magikarp
|
||||
new(XY, 10,3,00,000) { Species = 133, Level = 05, Ability = OnlyFirst, TID16 = 29294, Gender = 1, Nature = Nature.Docile }, // Eevee
|
||||
|
||||
new(XY, 15,4,13,017) { Species = 083, Level = 10, Ability = OnlyFirst, TID16 = 00185, IVs = new(-1,-1,-1,31,-1,-1), Gender = 0, Nature = Nature.Jolly }, // Farfetch'd
|
||||
new(XY, 17,5,08,025) { Species = 208, Level = 20, Ability = OnlyFirst, TID16 = 19250, IVs = new(-1,-1,31,-1,-1,-1), Gender = 1, Nature = Nature.Impish }, // Steelix
|
||||
new(XY, 18,7,20,709) { Species = 625, Level = 50, Ability = OnlyFirst, TID16 = 03447, IVs = new(-1,31,-1,-1,-1,-1), Gender = 0, Nature = Nature.Adamant }, // Bisharp
|
||||
|
||||
new(XY, 02,3,11,005) { Species = 656, Level = 05, Ability = OnlyFirst, TID16 = 00037, IVs = new(20,20,20,31,20,20), Gender = 0, Nature = Nature.Jolly }, // Froakie
|
||||
new(XY, 02,3,09,005) { Species = 650, Level = 05, Ability = OnlyFirst, TID16 = 00037, IVs = new(20,31,20,20,20,20), Gender = 0, Nature = Nature.Adamant }, // Chespin
|
||||
new(XY, 02,3,18,005) { Species = 653, Level = 05, Ability = OnlyFirst, TID16 = 00037, IVs = new(20,20,20,20,31,20), Gender = 0, Nature = Nature.Modest }, // Fennekin
|
||||
new(XY, 51,4,04,033) { Species = 280, Level = 05, Ability = OnlyFirst, TID16 = 37110, IVs = new(20,20,20,31,31,20), Gender = 1, Nature = Nature.Modest, IsNicknamed = false }, // Ralts
|
||||
};
|
||||
#endregion
|
||||
|
||||
internal static readonly EncounterStatic6[] StaticX = GetEncounters(Encounter_XY, X);
|
||||
internal static readonly EncounterStatic6[] StaticY = GetEncounters(Encounter_XY, Y);
|
||||
}
|
|
@ -8,7 +8,7 @@ internal static class Encounters7GG
|
|||
internal static readonly EncounterArea7b[] SlotsGP = EncounterArea7b.GetAreas(Get("gp", "gg"), GP);
|
||||
internal static readonly EncounterArea7b[] SlotsGE = EncounterArea7b.GetAreas(Get("ge", "gg"), GE);
|
||||
|
||||
private static readonly EncounterStatic7b[] Encounter_GG =
|
||||
internal static readonly EncounterStatic7b[] Encounter_GG =
|
||||
{
|
||||
// encounters
|
||||
new(GG) { Species = 144, Level = 50, Location = 44, FlawlessIVCount = 3 }, // Articuno @ Seafoam Islands
|
||||
|
@ -21,24 +21,31 @@ internal static class Encounters7GG
|
|||
// collision new EncounterStatic7b { Species = 101, Level = 42, Location = 42, FlawlessIVCount = 3 }, // Electrode @ Power Plant
|
||||
|
||||
// gifts
|
||||
new(GP) { Species = 025, Level = 05, Location = 28, Gift = true, IVs = new(31,31,31,31,31,31), Shiny = Shiny.Never, Form = 8 }, // Pikachu @ Pallet Town
|
||||
new(GE) { Species = 133, Level = 05, Location = 28, Gift = true, IVs = new(31,31,31,31,31,31), Shiny = Shiny.Never, Form = 1 }, // Eevee @ Pallet Town
|
||||
|
||||
new(GG) { Species = 129, Level = 05, Location = 06, Gift = true, IVs = new(30,31,25,30,25,25) }, // Magikarp @ Route 4
|
||||
new(GG) { Species = 129, Level = 05, Location = 06, FixedBall = Ball.Poke, IVs = new(30,31,25,30,25,25) }, // Magikarp @ Route 4
|
||||
|
||||
// unused new EncounterStatic7b { Species = 133, Level = 30, Location = 34, Gift = true }, // Eevee @ Celadon City
|
||||
new(GG) { Species = 131, Level = 34, Location = 52, Gift = true, IVs = new(31,25,25,25,30,30) }, // Lapras @ Saffron City (Silph Co. Employee, inside)
|
||||
new(GG) { Species = 106, Level = 30, Location = 38, Gift = true, IVs = new(25,30,25,31,25,30) }, // Hitmonlee @ Saffron City (Karate Master)
|
||||
new(GG) { Species = 107, Level = 30, Location = 38, Gift = true, IVs = new(25,31,30,25,25,30) }, // Hitmonchan @ Saffron City (Karate Master)
|
||||
new(GG) { Species = 140, Level = 44, Location = 36, Gift = true, FlawlessIVCount = 3 }, // Kabuto @ Cinnabar Island (Cinnabar Pokémon Lab)
|
||||
new(GG) { Species = 138, Level = 44, Location = 36, Gift = true, FlawlessIVCount = 3 }, // Omanyte @ Cinnabar Island (Cinnabar Pokémon Lab)
|
||||
new(GG) { Species = 142, Level = 44, Location = 36, Gift = true, FlawlessIVCount = 3 }, // Aerodactyl @ Cinnabar Island (Cinnabar Pokémon Lab)
|
||||
new(GG) { Species = 001, Level = 12, Location = 31, Gift = true, IVs = new(31,25,30,25,25,30) }, // Bulbasaur @ Cerulean City
|
||||
new(GG) { Species = 004, Level = 14, Location = 26, Gift = true, IVs = new(25,30,25,31,30,25) }, // Charmander @ Route 24
|
||||
new(GG) { Species = 007, Level = 16, Location = 33, Gift = true, IVs = new(25,25,30,25,31,30) }, // Squirtle @ Vermillion City
|
||||
new(GG) { Species = 137, Level = 34, Location = 38, Gift = true, IVs = new(25,25,30,25,31,30) }, // Porygon @ Saffron City (Silph Co. Employee, outside)
|
||||
new(GP) { Species = 053, Level = 16, Location = 33, Gift = true, IVs = new(30,30,25,31,25,25) }, // Persian @ Vermillion City (Outside Fan Club)
|
||||
new(GE) { Species = 059, Level = 16, Location = 33, Gift = true, IVs = new(25,30,25,31,30,25) }, // Arcanine @ Vermillion City (Outside Fan Club)
|
||||
new(GG) { Species = 131, Level = 34, Location = 52, FixedBall = Ball.Poke, IVs = new(31,25,25,25,30,30) }, // Lapras @ Saffron City (Silph Co. Employee, inside)
|
||||
new(GG) { Species = 106, Level = 30, Location = 38, FixedBall = Ball.Poke, IVs = new(25,30,25,31,25,30) }, // Hitmonlee @ Saffron City (Karate Master)
|
||||
new(GG) { Species = 107, Level = 30, Location = 38, FixedBall = Ball.Poke, IVs = new(25,31,30,25,25,30) }, // Hitmonchan @ Saffron City (Karate Master)
|
||||
new(GG) { Species = 140, Level = 44, Location = 36, FixedBall = Ball.Poke, FlawlessIVCount = 3 }, // Kabuto @ Cinnabar Island (Cinnabar Pokémon Lab)
|
||||
new(GG) { Species = 138, Level = 44, Location = 36, FixedBall = Ball.Poke, FlawlessIVCount = 3 }, // Omanyte @ Cinnabar Island (Cinnabar Pokémon Lab)
|
||||
new(GG) { Species = 142, Level = 44, Location = 36, FixedBall = Ball.Poke, FlawlessIVCount = 3 }, // Aerodactyl @ Cinnabar Island (Cinnabar Pokémon Lab)
|
||||
new(GG) { Species = 001, Level = 12, Location = 31, FixedBall = Ball.Poke, IVs = new(31,25,30,25,25,30) }, // Bulbasaur @ Cerulean City
|
||||
new(GG) { Species = 004, Level = 14, Location = 26, FixedBall = Ball.Poke, IVs = new(25,30,25,31,30,25) }, // Charmander @ Route 24
|
||||
new(GG) { Species = 007, Level = 16, Location = 33, FixedBall = Ball.Poke, IVs = new(25,25,30,25,31,30) }, // Squirtle @ Vermillion City
|
||||
new(GG) { Species = 137, Level = 34, Location = 38, FixedBall = Ball.Poke, IVs = new(25,25,30,25,31,30) }, // Porygon @ Saffron City (Silph Co. Employee, outside)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic7b[] StaticGP =
|
||||
{
|
||||
new(GP) { Species = 025, Level = 05, Location = 28, FixedBall = Ball.Poke, IVs = new(31,31,31,31,31,31), Shiny = Shiny.Never, Form = 8 }, // Pikachu @ Pallet Town
|
||||
new(GP) { Species = 053, Level = 16, Location = 33, FixedBall = Ball.Poke, IVs = new(30,30,25,31,25,25) }, // Persian @ Vermillion City (Outside Fan Club)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic7b[] StaticGE =
|
||||
{
|
||||
new(GE) { Species = 133, Level = 05, Location = 28, FixedBall = Ball.Poke, IVs = new(31,31,31,31,31,31), Shiny = Shiny.Never, Form = 1 }, // Eevee @ Pallet Town
|
||||
new(GE) { Species = 059, Level = 16, Location = 33, FixedBall = Ball.Poke, IVs = new(25,30,25,31,30,25) }, // Arcanine @ Vermillion City (Outside Fan Club)
|
||||
};
|
||||
|
||||
private static readonly string[] T1 = { string.Empty, "ミニコ", "Tatianna", "BarbaRatatta", "Addoloratta", "Barbaratt", string.Empty, "Tatiana", "미니꼬", "小幂妮", "小幂妮" };
|
||||
|
@ -53,18 +60,23 @@ internal static class Encounters7GG
|
|||
internal static readonly EncounterTrade7b[] TradeGift_GG =
|
||||
{
|
||||
// Random candy values! They can be zero so no impact on legality even though statistically rare.
|
||||
new(GG) { Species = 019, Form = 1, Level = 12, TrainerNames = T1, TID7 = 121106, OTGender = 1, IVs = new(31,31,-1,-1,-1,-1) }, // Rattata @ Cerulean City, AV rand [0-5)
|
||||
new(GP) { Species = 027, Form = 1, Level = 27, TrainerNames = T2, TID7 = 703019, OTGender = 0, IVs = new(-1,31,31,-1,-1,-1) }, // Sandshrew @ Celadon City, AV rand [0-5)
|
||||
new(GE) { Species = 037, Form = 1, Level = 27, TrainerNames = T2, TID7 = 703019, OTGender = 0, IVs = new(-1,-1,-1,31,31,-1) }, // Vulpix @ Celadon City, AV rand [0-5)
|
||||
new(GG) { Species = 050, Form = 1, Level = 25, TrainerNames = T3, TID7 = 520159, OTGender = 1, IVs = new(-1,31,-1,31,-1,-1) }, // Diglett @ Lavender Town, AV rand [0-5)
|
||||
new(GE) { Species = 052, Form = 1, Level = 44, TrainerNames = T4, TID7 = 000219, OTGender = 0, IVs = new(31,-1,-1,31,-1,-1) }, // Meowth @ Cinnabar Island, AV rand [0-10)
|
||||
new(GP) { Species = 088, Form = 1, Level = 44, TrainerNames = T4, TID7 = 000219, OTGender = 0, IVs = new(31,31,-1,-1,-1,-1) }, // Grimer @ Cinnabar Island, AV rand [0-10)
|
||||
new(GG) { Species = 026, Form = 1, Level = 30, TrainerNames = T5, TID7 = 940711, OTGender = 1, IVs = new(-1,-1,-1,31,31,-1) }, // Raichu @ Saffron City, AV rand [0-10)
|
||||
new(GG) { Species = 105, Form = 1, Level = 38, TrainerNames = T6, TID7 = 102595, OTGender = 0, IVs = new(-1,31,31,-1,-1,-1) }, // Marowak @ Fuchsia City, AV rand [0-10)
|
||||
new(GG) { Species = 103, Form = 1, Level = 46, TrainerNames = T7, TID7 = 060310, OTGender = 0, IVs = new(-1,31,-1,-1,31,-1) }, // Exeggutor @ Indigo Plateau, AV rand [0-15)
|
||||
new(GG) { Species = 074, Form = 1, Level = 16, TrainerNames = T8, TID7 = 551873, OTGender = 0, IVs = new(31,31,-1,-1,-1,-1) }, // Geodude @ Vermilion City, AV rand [0-5)
|
||||
new(GG) { Species = 019, Form = 1, Level = 12, TrainerNames = T1, ID32 = 121106, OTGender = 1, IVs = new(31,31,-1,-1,-1,-1) }, // Rattata @ Cerulean City, AV rand [0-5)
|
||||
new(GG) { Species = 050, Form = 1, Level = 25, TrainerNames = T3, ID32 = 520159, OTGender = 1, IVs = new(-1,31,-1,31,-1,-1) }, // Diglett @ Lavender Town, AV rand [0-5)
|
||||
new(GG) { Species = 026, Form = 1, Level = 30, TrainerNames = T5, ID32 = 940711, OTGender = 1, IVs = new(-1,-1,-1,31,31,-1) }, // Raichu @ Saffron City, AV rand [0-10)
|
||||
new(GG) { Species = 105, Form = 1, Level = 38, TrainerNames = T6, ID32 = 102595, OTGender = 0, IVs = new(-1,31,31,-1,-1,-1) }, // Marowak @ Fuchsia City, AV rand [0-10)
|
||||
new(GG) { Species = 103, Form = 1, Level = 46, TrainerNames = T7, ID32 = 060310, OTGender = 0, IVs = new(-1,31,-1,-1,31,-1) }, // Exeggutor @ Indigo Plateau, AV rand [0-15)
|
||||
new(GG) { Species = 074, Form = 1, Level = 16, TrainerNames = T8, ID32 = 551873, OTGender = 0, IVs = new(31,31,-1,-1,-1,-1) }, // Geodude @ Vermilion City, AV rand [0-5)
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic7b[] StaticGP = GetEncounters(Encounter_GG, GP);
|
||||
internal static readonly EncounterStatic7b[] StaticGE = GetEncounters(Encounter_GG, GE);
|
||||
internal static readonly EncounterTrade7b[] TradeGift_GP =
|
||||
{
|
||||
new(GP) { Species = 027, Form = 1, Level = 27, TrainerNames = T2, ID32 = 703019, OTGender = 0, IVs = new(-1,31,31,-1,-1,-1) }, // Sandshrew @ Celadon City, AV rand [0-5)
|
||||
new(GP) { Species = 088, Form = 1, Level = 44, TrainerNames = T4, ID32 = 000219, OTGender = 0, IVs = new(31,31,-1,-1,-1,-1) }, // Grimer @ Cinnabar Island, AV rand [0-10)
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade7b[] TradeGift_GE =
|
||||
{
|
||||
new(GE) { Species = 037, Form = 1, Level = 27, TrainerNames = T2, ID32 = 703019, OTGender = 0, IVs = new(-1,-1,-1,31,31,-1) }, // Vulpix @ Celadon City, AV rand [0-5)
|
||||
new(GE) { Species = 052, Form = 1, Level = 44, TrainerNames = T4, ID32 = 000219, OTGender = 0, IVs = new(31,-1,-1,31,-1,-1) }, // Meowth @ Cinnabar Island, AV rand [0-10)
|
||||
};
|
||||
}
|
|
@ -12,55 +12,53 @@ internal static class Encounters7SM
|
|||
internal static readonly EncounterArea7[] SlotsSN = EncounterArea7.GetAreas(Get("sn", "sm"), SN);
|
||||
internal static readonly EncounterArea7[] SlotsMN = EncounterArea7.GetAreas(Get("mn", "sm"), MN);
|
||||
|
||||
static Encounters7SM() => MarkEncounterTradeStrings(TradeGift_SM, TradeSM);
|
||||
private const string tradeSM = "tradesm";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings10(tradeSM);
|
||||
|
||||
private static readonly EncounterStatic7[] Encounter_SM = // @ a\1\5\5
|
||||
public static readonly EncounterStatic7[] StaticSM = // @ a\1\5\5
|
||||
{
|
||||
// Gifts - 0.bin
|
||||
new(SM) { Gift = true, Species = 722, Level = 5, Location = 024 }, // Rowlet
|
||||
new(SM) { Gift = true, Species = 725, Level = 5, Location = 024 }, // Litten
|
||||
new(SM) { Gift = true, Species = 728, Level = 5, Location = 024 }, // Popplio
|
||||
new(SM) { Gift = true, Species = 138, Level = 15, Location = 058 }, // Omanyte
|
||||
new(SM) { Gift = true, Species = 140, Level = 15, Location = 058 }, // Kabuto
|
||||
// new(SM) { Gift = true, Species = 142, Level = 15, Location = 058 }, // Aerodactyl
|
||||
new(SM) { Gift = true, Species = 345, Level = 15, Location = 058 }, // Lileep
|
||||
new(SM) { Gift = true, Species = 347, Level = 15, Location = 058 }, // Anorith
|
||||
new(SM) { Gift = true, Species = 408, Level = 15, Location = 058 }, // Cranidos
|
||||
new(SM) { Gift = true, Species = 410, Level = 15, Location = 058 }, // Shieldon
|
||||
new(SM) { Gift = true, Species = 564, Level = 15, Location = 058 }, // Tirtouga
|
||||
new(SM) { Gift = true, Species = 566, Level = 15, Location = 058 }, // Archen
|
||||
new(SM) { Gift = true, Species = 696, Level = 15, Location = 058 }, // Tyrunt
|
||||
new(SM) { Gift = true, Species = 698, Level = 15, Location = 058 }, // Amaura
|
||||
new(SM) { Gift = true, Species = 137, Level = 30, Location = 116 }, // Porygon @ Route 15
|
||||
new(SM) { Gift = true, Species = 133, Level = 1, EggLocation = 60002 }, // Eevee @ Nursery helpers
|
||||
new(SM) { Gift = true, Species = 772, Level = 40, Location = 188, FlawlessIVCount = 3 }, // Type: Null
|
||||
new(SN) { Gift = true, Species = 789, Level = 5, Location = 142, Shiny = Shiny.Never, Ability = OnlySecond, FlawlessIVCount = 3 }, // Cosmog
|
||||
new(MN) { Gift = true, Species = 789, Level = 5, Location = 144, Shiny = Shiny.Never, Ability = OnlySecond, FlawlessIVCount = 3 }, // Cosmog
|
||||
new(SM) { Gift = true, Species = 142, Level = 40, Location = 172 }, // Aerodactyl @ Seafolk Village
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 722, Level = 5, Location = 024 }, // Rowlet
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 725, Level = 5, Location = 024 }, // Litten
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 728, Level = 5, Location = 024 }, // Popplio
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 138, Level = 15, Location = 058 }, // Omanyte
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 140, Level = 15, Location = 058 }, // Kabuto
|
||||
// new(SM) { FixedBall = Ball.Poke, Species = 142, Level = 15, Location = 058 }, // Aerodactyl
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 345, Level = 15, Location = 058 }, // Lileep
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 347, Level = 15, Location = 058 }, // Anorith
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 408, Level = 15, Location = 058 }, // Cranidos
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 410, Level = 15, Location = 058 }, // Shieldon
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 564, Level = 15, Location = 058 }, // Tirtouga
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 566, Level = 15, Location = 058 }, // Archen
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 696, Level = 15, Location = 058 }, // Tyrunt
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 698, Level = 15, Location = 058 }, // Amaura
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 137, Level = 30, Location = 116 }, // Porygon @ Route 15
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 133, Level = 1, EggLocation = 60002 }, // Eevee @ Nursery helpers
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 772, Level = 40, Location = 188, FlawlessIVCount = 3 }, // Type: Null
|
||||
new(SN) { FixedBall = Ball.Poke, Species = 789, Level = 5, Location = 142, Shiny = Shiny.Never, Ability = OnlySecond, FlawlessIVCount = 3 }, // Cosmog
|
||||
new(MN) { FixedBall = Ball.Poke, Species = 789, Level = 5, Location = 144, Shiny = Shiny.Never, Ability = OnlySecond, FlawlessIVCount = 3 }, // Cosmog
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 142, Level = 40, Location = 172 }, // Aerodactyl @ Seafolk Village
|
||||
|
||||
new(SM) { Gift = true, Species = 718, Form = 0, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { Gift = true, Species = 718, Form = 1, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { Gift = true, Species = 718, Form = 2, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { Gift = true, Species = 718, Form = 3, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 0, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 1, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 2, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 3, Level = 30, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
|
||||
new(SM) { Gift = true, Species = 718, Form = 0, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { Gift = true, Species = 718, Form = 1, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { Gift = true, Species = 718, Form = 2, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { Gift = true, Species = 718, Form = 3, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 0, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 1, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 2, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
new(SM) { FixedBall = Ball.Poke, Species = 718, Form = 3, Level = 50, Location = 118, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde
|
||||
|
||||
new(SM) // Magearna (Bottle Cap) 00 FF
|
||||
{
|
||||
Gift = true, Species = 801, Level = 50, Location = 40001, Shiny = Shiny.Never, FlawlessIVCount = 3, HeldItem = 795, Ability = OnlySecond,
|
||||
FatefulEncounter = true, Relearn = new(705, 430, 381, 270), Ball = 0x10, // Cherish
|
||||
FixedBall = Ball.Cherish, Species = 801, Level = 50, Location = 40001, Shiny = Shiny.Never, FlawlessIVCount = 3, Ability = OnlySecond,
|
||||
FatefulEncounter = true, Relearn = new(705, 430, 381, 270), // Cherish
|
||||
},
|
||||
|
||||
// Static Encounters - 1.bin
|
||||
new(SM) { Species = 746, Level = 17, Location = 086, Shiny = Shiny.Never, Ability = OnlyFirst }, // Wishiwashi
|
||||
new(SM) { Species = 746, Level = 18, Location = 086, Shiny = Shiny.Never, Ability = OnlyFirst }, // Wishiwashi
|
||||
|
||||
new(SN) { Species = 791, Level = 55, Location = 176, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(713, 322, 242, 428) }, // Solgaleo
|
||||
new(MN) { Species = 792, Level = 55, Location = 178, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(714, 322, 539, 247) }, // Lunala
|
||||
|
||||
new(SM) { Species = 785, Level = 60, Location = 030, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Tapu Koko
|
||||
new(SM) { Species = 786, Level = 60, Location = 092, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Tapu Lele
|
||||
new(SM) { Species = 787, Level = 60, Location = 140, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Tapu Bulu
|
||||
|
@ -68,14 +66,8 @@ internal static class Encounters7SM
|
|||
|
||||
new(SM) { Species = 793, Level = 55, Location = 082, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Nihilego @ Wela Volcano Park
|
||||
new(SM) { Species = 793, Level = 55, Location = 100, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Nihilego @ Diglett’s Tunnel
|
||||
new(SN) { Species = 794, Level = 65, Location = 040, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Buzzwole @ Melemele Meadow
|
||||
new(MN) { Species = 795, Level = 60, Location = 046, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Pheromosa @ Verdant Cavern (Trial Site)
|
||||
new(SM) { Species = 796, Level = 65, Location = 090, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Xurkitree @ Lush Jungle
|
||||
new(SM) { Species = 796, Level = 65, Location = 076, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Xurkitree @ Memorial Hill
|
||||
new(SN) { Species = 798, Level = 60, Location = 134, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kartana @ Malie Garden
|
||||
new(SN) { Species = 798, Level = 60, Location = 120, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kartana @ Route 17
|
||||
new(MN) { Species = 797, Level = 65, Location = 124, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Celesteela @ Haina Desert
|
||||
new(MN) { Species = 797, Level = 65, Location = 134, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Celesteela @ Malie Garden
|
||||
new(SM) { Species = 799, Level = 70, Location = 182, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Guzzlord @ Resolution Cave
|
||||
new(SM) { Species = 800, Level = 75, Location = 036, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Necrozma @ Ten Carat Hill (Farthest Hollow)
|
||||
|
||||
|
@ -117,21 +109,31 @@ internal static class Encounters7SM
|
|||
new(SM) { Species = 500, Level = 43, Location = 160, Relearn = new(276, 053, 372, 535) }, // Emboar @ Ancient Poni Path
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic7[] StaticSN =
|
||||
{
|
||||
new(SN) { Species = 791, Level = 55, Location = 176, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(713, 322, 242, 428) }, // Solgaleo
|
||||
new(SN) { Species = 794, Level = 65, Location = 040, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Buzzwole @ Melemele Meadow
|
||||
new(SN) { Species = 798, Level = 60, Location = 134, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kartana @ Malie Garden
|
||||
new(SN) { Species = 798, Level = 60, Location = 120, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kartana @ Route 17
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic7[] StaticMN =
|
||||
{
|
||||
new(MN) { Species = 792, Level = 55, Location = 178, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(714, 322, 539, 247) }, // Lunala
|
||||
new(MN) { Species = 795, Level = 60, Location = 046, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Pheromosa @ Verdant Cavern (Trial Site)
|
||||
new(MN) { Species = 797, Level = 65, Location = 124, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Celesteela @ Haina Desert
|
||||
new(MN) { Species = 797, Level = 65, Location = 134, Shiny = Shiny.Never, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Celesteela @ Malie Garden
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade7[] TradeGift_SM = // @ a\1\5\5
|
||||
{
|
||||
// Trades - 4.bin
|
||||
new(SM) { Species = 066, Form = 0, Level = 09, Ability = OnlySecond, TID16 = 00410, SID16 = 00000, IVs = new(-1,31,-1,-1,-1,-1), OTGender = 1, Gender = 0, Nature = Nature.Brave }, // Machop
|
||||
new(SM) { Species = 761, Form = 0, Level = 16, Ability = OnlyFirst, TID16 = 20683, SID16 = 00009, IVs = new(-1,31,-1,-1,-1,-1), OTGender = 0, Gender = 1, Nature = Nature.Adamant }, // Bounsweet
|
||||
new(SM) { Species = 061, Form = 0, Level = 22, Ability = OnlySecond, TID16 = 01092, SID16 = 00009, IVs = new(31,-1,-1,-1,-1,-1), OTGender = 1, Gender = 1, Nature = Nature.Naughty }, // Poliwhirl
|
||||
new(SM) { Species = 440, Form = 0, Level = 27, Ability = OnlySecond, TID16 = 10913, SID16 = 00000, IVs = new(-1,-1,-1,-1,31,-1), OTGender = 1, Gender = 1, Nature = Nature.Calm }, // Happiny
|
||||
new(SM) { Species = 075, Form = 1, Level = 32, Ability = OnlyFirst, TID16 = 20778, SID16 = 00009, IVs = new(-1,-1,31,-1,-1,-1), OTGender = 0, Gender = 0, Nature = Nature.Impish, EvolveOnTrade = true }, // Graveler-1
|
||||
new(SM) { Species = 762, Form = 0, Level = 43, Ability = OnlyFirst, TID16 = 20679, SID16 = 00009, IVs = new(-1,-1,-1,-1,-1,31), OTGender = 1, Gender = 1, Nature = Nature.Careful }, // Steenee
|
||||
new(SM) { Species = 663, Form = 0, Level = 59, Ability = OnlyHidden, TID16 = 56734, SID16 = 00008, IVs = new(-1,-1,-1,31,-1,-1), OTGender = 0, Gender = 0, Nature = Nature.Jolly }, // Talonflame
|
||||
new(TradeNames, 00, SM) { Species = 066, Form = 0, Level = 09, Ability = OnlySecond, ID32 = 000410, IVs = new(-1,31,-1,-1,-1,-1), OTGender = 1, Gender = 0, Nature = Nature.Brave }, // Machop
|
||||
new(TradeNames, 01, SM) { Species = 761, Form = 0, Level = 16, Ability = OnlyFirst, ID32 = 610507, IVs = new(-1,31,-1,-1,-1,-1), OTGender = 0, Gender = 1, Nature = Nature.Adamant }, // Bounsweet
|
||||
new(TradeNames, 02, SM) { Species = 061, Form = 0, Level = 22, Ability = OnlySecond, ID32 = 590916, IVs = new(31,-1,-1,-1,-1,-1), OTGender = 1, Gender = 1, Nature = Nature.Naughty }, // Poliwhirl
|
||||
new(TradeNames, 03, SM) { Species = 440, Form = 0, Level = 27, Ability = OnlySecond, ID32 = 010913, IVs = new(-1,-1,-1,-1,31,-1), OTGender = 1, Gender = 1, Nature = Nature.Calm }, // Happiny
|
||||
new(TradeNames, 04, SM) { Species = 075, Form = 1, Level = 32, Ability = OnlyFirst, ID32 = 610602, IVs = new(-1,-1,31,-1,-1,-1), OTGender = 0, Gender = 0, Nature = Nature.Impish, EvolveOnTrade = true }, // Graveler-1
|
||||
new(TradeNames, 05, SM) { Species = 762, Form = 0, Level = 43, Ability = OnlyFirst, ID32 = 610503, IVs = new(-1,-1,-1,-1,-1,31), OTGender = 1, Gender = 1, Nature = Nature.Careful }, // Steenee
|
||||
new(TradeNames, 06, SM) { Species = 663, Form = 0, Level = 59, Ability = OnlyHidden, ID32 = 581022, IVs = new(-1,-1,-1,31,-1,-1), OTGender = 0, Gender = 0, Nature = Nature.Jolly }, // Talonflame
|
||||
};
|
||||
|
||||
private const string tradeSM = "tradesm";
|
||||
private static readonly string[][] TradeSM = Util.GetLanguageStrings10(tradeSM);
|
||||
|
||||
internal static readonly EncounterStatic7[] StaticSN = GetEncounters(Encounter_SM, SN);
|
||||
internal static readonly EncounterStatic7[] StaticMN = GetEncounters(Encounter_SM, MN);
|
||||
}
|
|
@ -12,63 +12,47 @@ internal static class Encounters7USUM
|
|||
internal static readonly EncounterArea7[] SlotsUS = EncounterArea7.GetAreas(Get("us", "uu"), US);
|
||||
internal static readonly EncounterArea7[] SlotsUM = EncounterArea7.GetAreas(Get("um", "uu"), UM);
|
||||
|
||||
static Encounters7USUM() => MarkEncounterTradeStrings(TradeGift_USUM, TradeUSUM);
|
||||
private const string tradeUSUM = "tradeusum";
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings10(tradeUSUM);
|
||||
|
||||
private static readonly EncounterStatic7[] Encounter_USUM =
|
||||
public static readonly EncounterStatic7[] StaticUSUM =
|
||||
{
|
||||
new(USUM) { Gift = true, Species = 722, Level = 05, Location = 008 }, // Rowlet
|
||||
new(USUM) { Gift = true, Species = 725, Level = 05, Location = 008 }, // Litten
|
||||
new(USUM) { Gift = true, Species = 728, Level = 05, Location = 008 }, // Popplio
|
||||
new(USUM) { Gift = true, Species = 138, Level = 15, Location = 058 }, // Omanyte
|
||||
new(USUM) { Gift = true, Species = 140, Level = 15, Location = 058 }, // Kabuto
|
||||
// new(USUM) { Gift = true, Species = 142, Level = 15, Location = 058 }, // Aerodactyl
|
||||
new(USUM) { Gift = true, Species = 345, Level = 15, Location = 058 }, // Lileep
|
||||
new(USUM) { Gift = true, Species = 347, Level = 15, Location = 058 }, // Anorith
|
||||
new(USUM) { Gift = true, Species = 408, Level = 15, Location = 058 }, // Cranidos
|
||||
new(USUM) { Gift = true, Species = 410, Level = 15, Location = 058 }, // Shieldon
|
||||
new(USUM) { Gift = true, Species = 564, Level = 15, Location = 058 }, // Tirtouga
|
||||
new(USUM) { Gift = true, Species = 566, Level = 15, Location = 058 }, // Archen
|
||||
new(USUM) { Gift = true, Species = 696, Level = 15, Location = 058 }, // Tyrunt
|
||||
new(USUM) { Gift = true, Species = 698, Level = 15, Location = 058 }, // Amaura
|
||||
new(USUM) { Gift = true, Species = 133, Level = 01, EggLocation = 60002 }, // Eevee @ Nursery helpers
|
||||
new(USUM) { Gift = true, Species = 137, Level = 30, Location = 116 }, // Porygon @ Route 15
|
||||
new(USUM) { Gift = true, Species = 772, Level = 60, Location = 188, FlawlessIVCount = 3 }, // Type: Null @ Aether Paradise
|
||||
new(USUM) { Gift = true, Species = 772, Level = 60, Location = 160, FlawlessIVCount = 3 }, // Type: Null @ Ancient Poni Path
|
||||
new(US ) { Gift = true, Species = 789, Level = 05, Location = 142, FlawlessIVCount = 3, Shiny = Shiny.Never, Ability = OnlySecond }, // Cosmog @ Lake of the Sunne
|
||||
new( UM) { Gift = true, Species = 789, Level = 05, Location = 144, FlawlessIVCount = 3, Shiny = Shiny.Never, Ability = OnlySecond }, // Cosmog @ Lake of the Moone
|
||||
new(USUM) { Gift = true, Species = 142, Level = 40, Location = 172 }, // Aerodactyl @ Seafolk Village
|
||||
new(USUM) { Gift = true, Species = 025, Level = 40, Location = 070, FlawlessIVCount = 3, HeldItem = 796, Relearn = new(57) }, // Pikachu @ Heahea City
|
||||
new(USUM) { Gift = true, Species = 803, Level = 40, Location = 208, FlawlessIVCount = 3 }, // Poipole @ Megalo Tower
|
||||
new(USUM) { Gift = true, Species = 803, Level = 40, Location = 206, FlawlessIVCount = 3 }, // Poipole @ Ultra Megalopolis
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 722, Level = 05, Location = 008 }, // Rowlet
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 725, Level = 05, Location = 008 }, // Litten
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 728, Level = 05, Location = 008 }, // Popplio
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 138, Level = 15, Location = 058 }, // Omanyte
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 140, Level = 15, Location = 058 }, // Kabuto
|
||||
// new(USUM) { FixedBall = Ball.Poke, Species = 142, Level = 15, Location = 058 }, // Aerodactyl
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 345, Level = 15, Location = 058 }, // Lileep
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 347, Level = 15, Location = 058 }, // Anorith
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 408, Level = 15, Location = 058 }, // Cranidos
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 410, Level = 15, Location = 058 }, // Shieldon
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 564, Level = 15, Location = 058 }, // Tirtouga
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 566, Level = 15, Location = 058 }, // Archen
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 696, Level = 15, Location = 058 }, // Tyrunt
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 698, Level = 15, Location = 058 }, // Amaura
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 133, Level = 01, EggLocation = 60002 }, // Eevee @ Nursery helpers
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 137, Level = 30, Location = 116 }, // Porygon @ Route 15
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 772, Level = 60, Location = 188, FlawlessIVCount = 3 }, // Type: Null @ Aether Paradise
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 772, Level = 60, Location = 160, FlawlessIVCount = 3 }, // Type: Null @ Ancient Poni Path
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 142, Level = 40, Location = 172 }, // Aerodactyl @ Seafolk Village
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 025, Level = 40, Location = 070, FlawlessIVCount = 3, Relearn = new(57) }, // Pikachu @ Heahea City
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 803, Level = 40, Location = 208, FlawlessIVCount = 3 }, // Poipole @ Megalo Tower
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 803, Level = 40, Location = 206, FlawlessIVCount = 3 }, // Poipole @ Ultra Megalopolis
|
||||
|
||||
// Totem-Sized Gifts @ Heahea Beach
|
||||
new(US ) { Gift = true, Species = 735, Level = 20, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Gumshoos
|
||||
new( UM) { Gift = true, Species = 020, Level = 20, Ability = OnlyHidden, Location = 202, Form = 2, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Raticate
|
||||
new(US ) { Gift = true, Species = 105, Level = 25, Ability = OnlyHidden, Location = 202, Form = 2, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Marowak
|
||||
new( UM) { Gift = true, Species = 752, Level = 25, Ability = OnlyFirst, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Araquanid
|
||||
new(US ) { Gift = true, Species = 754, Level = 30, Ability = OnlySecond, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Lurantis
|
||||
new( UM) { Gift = true, Species = 758, Level = 30, Ability = OnlyFirst, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Salazzle
|
||||
new(US ) { Gift = true, Species = 738, Level = 35, Ability = OnlyFirst, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Vikavolt
|
||||
new( UM) { Gift = true, Species = 777, Level = 35, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Togedemaru
|
||||
new(USUM) { Gift = true, Species = 778, Level = 40, Ability = OnlyFirst, Location = 202, Form = 2, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Mimikyu
|
||||
new(US ) { Gift = true, Species = 743, Level = 50, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Ribombee
|
||||
new( UM) { Gift = true, Species = 784, Level = 50, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Kommo-o
|
||||
|
||||
new(USUM) { Gift = true, Species = 718, Level = 63, Ability = OnlyFirst, Location = 118, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde (10%) @ Route 16
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 778, Level = 40, Ability = OnlyFirst, Location = 202, Form = 2, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Mimikyu
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 718, Level = 63, Ability = OnlyFirst, Location = 118, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Zygarde (10%) @ Route 16
|
||||
|
||||
new(USUM) // Magearna (Bottle Cap)
|
||||
{
|
||||
Gift = true, Species = 801, Level = 50, Location = 40001, Shiny = Shiny.Never, FlawlessIVCount = 3, HeldItem = 795, Ability = OnlySecond,
|
||||
FatefulEncounter = true, Relearn = new(705, 430, 381, 270), Ball = 0x10, // Cherish
|
||||
FixedBall = Ball.Cherish, Species = 801, Level = 50, Location = 40001, Shiny = Shiny.Never, FlawlessIVCount = 3, Ability = OnlySecond,
|
||||
FatefulEncounter = true, Relearn = new(705, 430, 381, 270), // Cherish
|
||||
},
|
||||
|
||||
new(USUM) { Gift = true, Species = 718, Form = 0, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (50%)
|
||||
new(USUM) { Gift = true, Species = 718, Form = 1, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (10%)
|
||||
new(USUM) { Gift = true, Species = 718, Form = 2, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (10%-C)
|
||||
new(USUM) { Gift = true, Species = 718, Form = 3, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (50%-C)
|
||||
|
||||
new(US ) { Species = 791, Level = 60, Location = 028, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(713,322,242,428) }, // Solgaleo @ Mahalo Trail (Plank Bridge)
|
||||
new( UM) { Species = 792, Level = 60, Location = 028, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(714,322,539,585) }, // Lunala @ Mahalo Trail (Plank Bridge)
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 718, Form = 0, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (50%)
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 718, Form = 1, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (10%)
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 718, Form = 2, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (10%-C)
|
||||
new(USUM) { FixedBall = Ball.Poke, Species = 718, Form = 3, Level = 50, Shiny = Shiny.Never, Location = 118, FlawlessIVCount = 3 }, // Zygarde (50%-C)
|
||||
|
||||
// QR Scan: Su/M/Tu/W/Th/F/Sa
|
||||
// Melemele Island
|
||||
|
@ -116,46 +100,28 @@ internal static class Encounters7USUM
|
|||
|
||||
new(USUM) { Species = 127, Level = 42, Location = 184, Shiny = Shiny.Never }, // Pinsir @ Exeggutor Island
|
||||
new(USUM) { Species = 127, Level = 43, Location = 184, Shiny = Shiny.Never }, // Pinsir @ Exeggutor Island
|
||||
new(USUM) { Species = 800, Level = 65, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(722,334,408,400), HeldItem = 923 }, // Necrozma @ Mount Lanakila
|
||||
new(USUM) { Species = 800, Level = 65, Location = 146, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(722,334,408,400) }, // Necrozma @ Mount Lanakila
|
||||
|
||||
// Legendaries
|
||||
new(USUM) { Species = 144, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(246,573,115,258) }, // Articuno
|
||||
new(USUM) { Species = 145, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(246,435,365,240) }, // Zapdos
|
||||
new(USUM) { Species = 146, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(246,053,403,241) }, // Moltres
|
||||
new(USUM) { Species = 150, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(094,105,129,427) }, // Mewtwo
|
||||
new(US ) { Species = 243, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Raikou
|
||||
new( UM) { Species = 244, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(023,044,207,436) }, // Entei
|
||||
new(USUM) { Species = 245, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(061,062,054,240) }, // Suicune
|
||||
new( UM) { Species = 249, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(285,177,326,246) }, // Lugia
|
||||
new(US ) { Species = 250, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(682,221,326,246), HeldItem = 044 }, // Ho-Oh
|
||||
new(USUM) { Species = 377, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Regirock
|
||||
new(USUM) { Species = 378, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Regice
|
||||
new(USUM) { Species = 379, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Registeel
|
||||
new( UM) { Species = 380, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(296,406,375,273), Gender = 1 }, // Latias
|
||||
new(US ) { Species = 381, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(295,406,375,225), Gender = 0 }, // Latios
|
||||
new( UM) { Species = 382, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(058,618,347,330) }, // Kyogre
|
||||
new(US ) { Species = 383, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(089,619,339,076) }, // Groudon
|
||||
new(USUM) { Species = 384, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Rayquaza
|
||||
new(USUM) { Species = 480, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(326,281,133,129) }, // Uxie
|
||||
new(USUM) { Species = 481, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(326,204,248,129) }, // Mesprit
|
||||
new(USUM) { Species = 482, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(326,417,253,129) }, // Azelf
|
||||
new(US ) { Species = 483, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Dialga
|
||||
new( UM) { Species = 484, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Palkia
|
||||
new(US ) { Species = 485, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Heatran
|
||||
new( UM) { Species = 486, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(428,279,146,109) }, // Regigigas
|
||||
new(USUM) { Species = 487, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(467,396,414,337) }, // Giratina
|
||||
new(USUM) { Species = 488, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Gender = 1 }, // Cresselia
|
||||
new(USUM) { Species = 638, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(533,014,098,442) }, // Cobalion
|
||||
new(USUM) { Species = 639, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(533,014,157,444) }, // Terrakion
|
||||
new(USUM) { Species = 640, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(533,014,202,348) }, // Virizion
|
||||
new(US ) { Species = 641, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Gender = 0 }, // Tornadus
|
||||
new( UM) { Species = 642, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Gender = 0 }, // Thundurus
|
||||
new(US ) { Species = 643, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Reshiram
|
||||
new( UM) { Species = 644, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Zekrom
|
||||
new(USUM) { Species = 645, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Gender = 0 }, // Landorus
|
||||
new(USUM) { Species = 646, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kyurem
|
||||
new(US ) { Species = 716, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(601,532,400,585) }, // Xerneas
|
||||
new( UM) { Species = 717, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(613,399,566,094) }, // Yveltal
|
||||
new(USUM) { Species = 718, Level = 60, Location = 182, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(616,137,219,225) }, // Zygarde @ Resolution Cave
|
||||
|
||||
// Ultra Space Wilds
|
||||
|
@ -182,14 +148,8 @@ internal static class Encounters7USUM
|
|||
|
||||
// Ultra Beasts
|
||||
new(USUM) { Species = 793, Level = 60, Location = 190, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(408,491,446,243) }, // Nihilego @ Ultra Deep Sea
|
||||
new(US ) { Species = 794, Level = 60, Location = 218, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Buzzwole @ Ultra Jungle
|
||||
new( UM) { Species = 795, Level = 60, Location = 214, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Pheromosa @ Ultra Desert
|
||||
new(USUM) { Species = 796, Level = 60, Location = 210, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Xurkitree @ Ultra Plant
|
||||
new( UM) { Species = 797, Level = 60, Location = 212, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Celesteela @ Ultra Crater
|
||||
new(US ) { Species = 798, Level = 60, Location = 216, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kartana @ Ultra Forest
|
||||
new(USUM) { Species = 799, Level = 60, Location = 220, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Guzzlord @ Ultra Ruin
|
||||
new( UM) { Species = 805, Level = 60, Location = 164, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Stakataka @ Poni Grove
|
||||
new(US ) { Species = 806, Level = 60, Location = 164, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Blacephalon @ Poni Grove
|
||||
|
||||
// Ditto Five
|
||||
new(USUM) { Species = 132, Level = 29, Location = 060, IVs = new(-1,-1,31,00,30,-1), Nature = Nature.Bold }, // Ditto @ Route 9
|
||||
|
@ -205,7 +165,6 @@ internal static class Encounters7USUM
|
|||
new(USUM) { Species = 097, Level = 29, Location = 020, Shiny = Shiny.Never, Relearn = new(093,050,001,096) }, // Hypno @ Hau'oli City Police Station
|
||||
new(USUM) { Species = 092, Level = 19, Location = 230, Shiny = Shiny.Never, Relearn = new(174,109,122,101) }, // Gastly @ Route 1 (Trainers’ School)
|
||||
new(USUM) { Species = 425, Level = 19, Location = 230, Shiny = Shiny.Never, Relearn = new(310,132,016,371) }, // Drifloon @ Route 1 (Trainers’ School)
|
||||
new( UM) { Species = 769, Level = 30, Location = 116, Shiny = Shiny.Never, Relearn = new(310,523,072,328) }, // Sandygast @ Route 15
|
||||
new(USUM) { Species = 592, Level = 34, Location = 126, Shiny = Shiny.Never, Gender = 1 }, // Frillish @ Route 14
|
||||
new(USUM) { Species = 101, Level = 60, Location = 224, Ability = OnlyFirst, Shiny = Shiny.Never }, // Electrode @ Team Rocket's Castle
|
||||
|
||||
|
@ -216,21 +175,71 @@ internal static class Encounters7USUM
|
|||
new(USUM) { Species = 739, Level = 32, Location = 120 }, // Route 17
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic7[] StaticUS =
|
||||
{
|
||||
new(US ) { FixedBall = Ball.Poke, Species = 789, Level = 05, Location = 142, FlawlessIVCount = 3, Shiny = Shiny.Never, Ability = OnlySecond }, // Cosmog @ Lake of the Sunne
|
||||
|
||||
// Totem-Sized Gifts @ Heahea Beach
|
||||
new(US ) { FixedBall = Ball.Poke, Species = 735, Level = 20, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Gumshoos
|
||||
new(US ) { FixedBall = Ball.Poke, Species = 105, Level = 25, Ability = OnlyHidden, Location = 202, Form = 2, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Marowak
|
||||
new(US ) { FixedBall = Ball.Poke, Species = 754, Level = 30, Ability = OnlySecond, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Lurantis
|
||||
new(US ) { FixedBall = Ball.Poke, Species = 738, Level = 35, Ability = OnlyFirst, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Vikavolt
|
||||
new(US ) { FixedBall = Ball.Poke, Species = 743, Level = 50, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Ribombee
|
||||
|
||||
new(US ) { Species = 791, Level = 60, Location = 028, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(713,322,242,428) }, // Solgaleo @ Mahalo Trail (Plank Bridge)
|
||||
new(US ) { Species = 243, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Raikou
|
||||
new(US ) { Species = 250, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(682,221,326,246) }, // Ho-Oh
|
||||
new(US ) { Species = 381, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(295,406,375,225), Gender = 0 }, // Latios
|
||||
new(US ) { Species = 383, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(089,619,339,076) }, // Groudon
|
||||
new(US ) { Species = 483, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Dialga
|
||||
new(US ) { Species = 485, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Heatran
|
||||
new(US ) { Species = 641, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Gender = 0 }, // Tornadus
|
||||
new(US ) { Species = 643, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Reshiram
|
||||
new(US ) { Species = 716, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(601,532,400,585) }, // Xerneas
|
||||
|
||||
new(US ) { Species = 794, Level = 60, Location = 218, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Buzzwole @ Ultra Jungle
|
||||
new(US ) { Species = 798, Level = 60, Location = 216, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Kartana @ Ultra Forest
|
||||
new(US ) { Species = 806, Level = 60, Location = 164, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Blacephalon @ Poni Grove
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic7[] StaticUM =
|
||||
{
|
||||
new( UM) { FixedBall = Ball.Poke, Species = 789, Level = 05, Location = 144, FlawlessIVCount = 3, Shiny = Shiny.Never, Ability = OnlySecond }, // Cosmog @ Lake of the Moone
|
||||
|
||||
// Totem-Sized Gifts @ Heahea Beach
|
||||
new( UM) { FixedBall = Ball.Poke, Species = 020, Level = 20, Ability = OnlyHidden, Location = 202, Form = 2, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Raticate
|
||||
new( UM) { FixedBall = Ball.Poke, Species = 752, Level = 25, Ability = OnlyFirst, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Araquanid
|
||||
new( UM) { FixedBall = Ball.Poke, Species = 758, Level = 30, Ability = OnlyFirst, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Salazzle
|
||||
new( UM) { FixedBall = Ball.Poke, Species = 777, Level = 35, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Togedemaru
|
||||
new( UM) { FixedBall = Ball.Poke, Species = 784, Level = 50, Ability = OnlyHidden, Location = 202, Form = 1, Shiny = Shiny.Never, FlawlessIVCount = 3 }, // Kommo-o
|
||||
|
||||
new( UM) { Species = 792, Level = 60, Location = 028, Ability = OnlyFirst, Shiny = Shiny.Never, FlawlessIVCount = 3, Relearn = new(714,322,539,585) }, // Lunala @ Mahalo Trail (Plank Bridge)
|
||||
new( UM) { Species = 244, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(023,044,207,436) }, // Entei
|
||||
new( UM) { Species = 249, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(285,177,326,246) }, // Lugia
|
||||
new( UM) { Species = 380, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(296,406,375,273), Gender = 1 }, // Latias
|
||||
new( UM) { Species = 382, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(058,618,347,330) }, // Kyogre
|
||||
new( UM) { Species = 484, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Palkia
|
||||
new( UM) { Species = 486, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(428,279,146,109) }, // Regigigas
|
||||
new( UM) { Species = 642, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Gender = 0 }, // Thundurus
|
||||
new( UM) { Species = 644, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Zekrom
|
||||
new( UM) { Species = 717, Level = 60, Location = 222, Ability = OnlyFirst, FlawlessIVCount = 3, Relearn = new(613,399,566,094) }, // Yveltal
|
||||
|
||||
new( UM) { Species = 795, Level = 60, Location = 214, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Pheromosa @ Ultra Desert
|
||||
new( UM) { Species = 797, Level = 60, Location = 212, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Celesteela @ Ultra Crater
|
||||
new( UM) { Species = 805, Level = 60, Location = 164, Ability = OnlyFirst, FlawlessIVCount = 3 }, // Stakataka @ Poni Grove
|
||||
|
||||
new( UM) { Species = 769, Level = 30, Location = 116, Shiny = Shiny.Never, Relearn = new(310,523,072,328) }, // Sandygast @ Route 15
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade7[] TradeGift_USUM =
|
||||
{
|
||||
// Trades - 4.bin
|
||||
new(USUM) { Species = 701, Form = 0, Level = 08, Ability = OnlySecond, TID16 = 00410, SID16 = 00000, IVs = new(-1,31,-1,-1,-1,-1), OTGender = 1, Gender = 0, Nature = Nature.Brave }, // Hawlucha
|
||||
new(USUM) { Species = 714, Form = 0, Level = 19, Ability = OnlyFirst, TID16 = 20683, SID16 = 00009, IVs = new(-1,-1,-1,-1,31,-1), OTGender = 0, Gender = 0, Nature = Nature.Modest }, // Noibat
|
||||
new(USUM) { Species = 339, Form = 0, Level = 21, Ability = OnlySecond, TID16 = 01092, SID16 = 00009, IVs = new(31,-1,-1,-1,-1,-1), OTGender = 0, Gender = 1, Nature = Nature.Naughty }, // Barboach
|
||||
new(USUM) { Species = 024, Form = 0, Level = 22, Ability = OnlyFirst, TID16 = 10913, SID16 = 00000, IVs = new(-1,-1,31,-1,-1,-1), OTGender = 1, Gender = 1, Nature = Nature.Impish }, // Arbok
|
||||
new(USUM) { Species = 708, Form = 0, Level = 33, Ability = OnlyFirst, TID16 = 20778, SID16 = 00009, IVs = new(-1,-1,-1,-1,-1,31), OTGender = 0, Gender = 0, Nature = Nature.Calm, EvolveOnTrade = true }, // Phantump
|
||||
new(USUM) { Species = 422, Form = 0, Level = 44, Ability = OnlySecond, TID16 = 20679, SID16 = 00009, IVs = new(-1,-1,31,-1,-1,-1), OTGender = 1, Gender = 1, Nature = Nature.Quiet }, // Shellos
|
||||
new(USUM) { Species = 128, Form = 0, Level = 59, Ability = OnlyFirst, TID16 = 56734, SID16 = 00008, IVs = new(-1,-1,-1,31,-1,-1), OTGender = 0, Gender = 0, Nature = Nature.Jolly }, // Tauros
|
||||
new(TradeNames, 00, USUM) { Species = 701, Form = 0, Level = 08, Ability = OnlySecond, ID32 = 000410, IVs = new(-1,31,-1,-1,-1,-1), OTGender = 1, Gender = 0, Nature = Nature.Brave }, // Hawlucha
|
||||
new(TradeNames, 01, USUM) { Species = 714, Form = 0, Level = 19, Ability = OnlyFirst, ID32 = 610507, IVs = new(-1,-1,-1,-1,31,-1), OTGender = 0, Gender = 0, Nature = Nature.Modest }, // Noibat
|
||||
new(TradeNames, 02, USUM) { Species = 339, Form = 0, Level = 21, Ability = OnlySecond, ID32 = 590916, IVs = new(31,-1,-1,-1,-1,-1), OTGender = 0, Gender = 1, Nature = Nature.Naughty }, // Barboach
|
||||
new(TradeNames, 03, USUM) { Species = 024, Form = 0, Level = 22, Ability = OnlyFirst, ID32 = 010913, IVs = new(-1,-1,31,-1,-1,-1), OTGender = 1, Gender = 1, Nature = Nature.Impish }, // Arbok
|
||||
new(TradeNames, 04, USUM) { Species = 708, Form = 0, Level = 33, Ability = OnlyFirst, ID32 = 610602, IVs = new(-1,-1,-1,-1,-1,31), OTGender = 0, Gender = 0, Nature = Nature.Calm, EvolveOnTrade = true }, // Phantump
|
||||
new(TradeNames, 05, USUM) { Species = 422, Form = 0, Level = 44, Ability = OnlySecond, ID32 = 610503, IVs = new(-1,-1,31,-1,-1,-1), OTGender = 1, Gender = 1, Nature = Nature.Quiet }, // Shellos
|
||||
new(TradeNames, 06, USUM) { Species = 128, Form = 0, Level = 59, Ability = OnlyFirst, ID32 = 581022, IVs = new(-1,-1,-1,31,-1,-1), OTGender = 0, Gender = 0, Nature = Nature.Jolly }, // Tauros
|
||||
};
|
||||
|
||||
private const string tradeUSUM = "tradeusum";
|
||||
private static readonly string[][] TradeUSUM = Util.GetLanguageStrings10(tradeUSUM);
|
||||
|
||||
internal static readonly EncounterStatic7[] StaticUS = GetEncounters(Encounter_USUM, US);
|
||||
internal static readonly EncounterStatic7[] StaticUM = GetEncounters(Encounter_USUM, UM);
|
||||
}
|
|
@ -4,8 +4,6 @@ using static PKHeX.Core.GameVersion;
|
|||
using static PKHeX.Core.AreaWeather8;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
using static PKHeX.Core.Encounters8Nest;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
|
@ -13,61 +11,50 @@ namespace PKHeX.Core;
|
|||
/// </summary>
|
||||
internal static class Encounters8
|
||||
{
|
||||
private static readonly EncounterArea8[] SlotsSW_Symbol = EncounterArea8.GetAreas(Get("sw_symbol", "sw"), SW, true);
|
||||
private static readonly EncounterArea8[] SlotsSH_Symbol = EncounterArea8.GetAreas(Get("sh_symbol", "sh"), SH, true);
|
||||
private static readonly EncounterArea8[] SlotsSW_Hidden = EncounterArea8.GetAreas(Get("sw_hidden", "sw"), SW);
|
||||
private static readonly EncounterArea8[] SlotsSH_Hidden = EncounterArea8.GetAreas(Get("sh_hidden", "sh"), SH);
|
||||
public static readonly EncounterArea8[] SlotsSW_Symbol = EncounterArea8.GetAreas(Get("sw_symbol", "sw"), SW, true);
|
||||
public static readonly EncounterArea8[] SlotsSH_Symbol = EncounterArea8.GetAreas(Get("sh_symbol", "sh"), SH, true);
|
||||
public static readonly EncounterArea8[] SlotsSW_Hidden = EncounterArea8.GetAreas(Get("sw_hidden", "sw"), SW);
|
||||
public static readonly EncounterArea8[] SlotsSH_Hidden = EncounterArea8.GetAreas(Get("sh_hidden", "sh"), SH);
|
||||
|
||||
internal static readonly EncounterArea8[] SlotsSW = ArrayUtil.ConcatAll(SlotsSW_Symbol, SlotsSW_Hidden);
|
||||
internal static readonly EncounterArea8[] SlotsSH = ArrayUtil.ConcatAll(SlotsSH_Symbol, SlotsSH_Hidden);
|
||||
|
||||
static Encounters8()
|
||||
{
|
||||
foreach (var t in TradeGift_R1)
|
||||
t.TrainerNames = TradeOT_R1;
|
||||
|
||||
MarkEncounterTradeStrings(TradeGift_SWSH, TradeSWSH);
|
||||
}
|
||||
|
||||
private static readonly EncounterStatic8[] Encounter_SWSH_0 =
|
||||
public static readonly EncounterStatic8[] StaticSWSH =
|
||||
{
|
||||
// gifts
|
||||
new() { Gift = true, Species = 810, Shiny = Never, Level = 05, Location = 006 }, // Grookey
|
||||
new() { Gift = true, Species = 813, Shiny = Never, Level = 05, Location = 006 }, // Scorbunny
|
||||
new() { Gift = true, Species = 816, Shiny = Never, Level = 05, Location = 006 }, // Sobble
|
||||
new() { FixedBall = Ball.Poke, Species = 810, Shiny = Never, Level = 05, Location = 006 }, // Grookey
|
||||
new() { FixedBall = Ball.Poke, Species = 813, Shiny = Never, Level = 05, Location = 006 }, // Scorbunny
|
||||
new() { FixedBall = Ball.Poke, Species = 816, Shiny = Never, Level = 05, Location = 006 }, // Sobble
|
||||
|
||||
new() { Gift = true, Species = 772, Shiny = Never, Level = 50, Location = 158, FlawlessIVCount = 3 }, // Type: Null
|
||||
new() { Gift = true, Species = 848, Shiny = Never, Level = 01, Location = 040, IVs = new(-1,31,-1,-1,31,-1), Ball = 11 }, // Toxel, Attack flawless
|
||||
new() { FixedBall = Ball.Poke, Species = 772, Shiny = Never, Level = 50, Location = 158, FlawlessIVCount = 3 }, // Type: Null
|
||||
new() { FixedBall = Ball.Luxury, Species = 848, Shiny = Never, Level = 01, Location = 040, IVs = new(-1,31,-1,-1,31,-1) }, // Toxel, Attack flawless
|
||||
|
||||
new() { Gift = true, Species = 880, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Dracozolt @ Route 6
|
||||
new() { Gift = true, Species = 881, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Arctozolt @ Route 6
|
||||
new() { Gift = true, Species = 882, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Dracovish @ Route 6
|
||||
new() { Gift = true, Species = 883, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Arctovish @ Route 6
|
||||
new() { FixedBall = Ball.Poke, Species = 880, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Dracozolt @ Route 6
|
||||
new() { FixedBall = Ball.Poke, Species = 881, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Arctozolt @ Route 6
|
||||
new() { FixedBall = Ball.Poke, Species = 882, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Dracovish @ Route 6
|
||||
new() { FixedBall = Ball.Poke, Species = 883, FlawlessIVCount = 3, Level = 10, Location = 068 }, // Arctovish @ Route 6
|
||||
|
||||
new() { Gift = true, Species = 004, Shiny = Never, Level = 05, Location = 006, FlawlessIVCount = 3, CanGigantamax = true, Ability = OnlyFirst }, // Charmander
|
||||
new() { Gift = true, Species = 025, Shiny = Never, Level = 10, Location = 156, FlawlessIVCount = 6, CanGigantamax = true }, // Pikachu
|
||||
new() { Gift = true, Species = 133, Shiny = Never, Level = 10, Location = 156, FlawlessIVCount = 6, CanGigantamax = true }, // Eevee
|
||||
new() { FixedBall = Ball.Poke, Species = 004, Shiny = Never, Level = 05, Location = 006, FlawlessIVCount = 3, CanGigantamax = true, Ability = OnlyFirst }, // Charmander
|
||||
new() { FixedBall = Ball.Poke, Species = 025, Shiny = Never, Level = 10, Location = 156, FlawlessIVCount = 6, CanGigantamax = true }, // Pikachu
|
||||
new() { FixedBall = Ball.Poke, Species = 133, Shiny = Never, Level = 10, Location = 156, FlawlessIVCount = 6, CanGigantamax = true }, // Eevee
|
||||
|
||||
// DLC gifts
|
||||
new() { Gift = true, Species = 001, Level = 05, Location = 196, Shiny = Never, Ability = OnlyFirst, FlawlessIVCount = 3, CanGigantamax = true }, // Bulbasaur
|
||||
new() { Gift = true, Species = 007, Level = 05, Location = 196, Shiny = Never, Ability = OnlyFirst, FlawlessIVCount = 3, CanGigantamax = true }, // Squirtle
|
||||
new() { Gift = true, Species = 137, Level = 25, Location = 196, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Porygon
|
||||
new() { Gift = true, Species = 891, Level = 10, Location = 196, Shiny = Never, FlawlessIVCount = 3 }, // Kubfu
|
||||
new() { FixedBall = Ball.Poke, Species = 001, Level = 05, Location = 196, Shiny = Never, Ability = OnlyFirst, FlawlessIVCount = 3, CanGigantamax = true }, // Bulbasaur
|
||||
new() { FixedBall = Ball.Poke, Species = 007, Level = 05, Location = 196, Shiny = Never, Ability = OnlyFirst, FlawlessIVCount = 3, CanGigantamax = true }, // Squirtle
|
||||
new() { FixedBall = Ball.Poke, Species = 137, Level = 25, Location = 196, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Porygon
|
||||
new() { FixedBall = Ball.Poke, Species = 891, Level = 10, Location = 196, Shiny = Never, FlawlessIVCount = 3 }, // Kubfu
|
||||
|
||||
new() { Gift = true, Species = 079, Level = 10, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Slowpoke
|
||||
new() { Gift = true, Species = 722, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Rowlet
|
||||
new() { Gift = true, Species = 725, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Litten
|
||||
new() { Gift = true, Species = 728, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Popplio
|
||||
new() { Gift = true, Species = 026, Level = 30, Location = 164, Shiny = Never, Ability = OnlyFirst, FlawlessIVCount = 3, Form = 01 }, // Raichu-1
|
||||
new() { Gift = true, Species = 027, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Sandshrew-1
|
||||
new() { Gift = true, Species = 037, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Vulpix-1
|
||||
new() { Gift = true, Species = 052, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Meowth-1
|
||||
new() { Gift = true, Species = 103, Level = 30, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Exeggutor-1
|
||||
new() { Gift = true, Species = 105, Level = 30, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Marowak-1
|
||||
new() { Gift = true, Species = 050, Level = 20, Location = 164, Shiny = Never, Ability = OnlyHidden, Gender = 0, Nature = Nature.Jolly, FlawlessIVCount = 6, Form = 01 }, // Diglett-1
|
||||
new() { FixedBall = Ball.Poke, Species = 079, Level = 10, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Slowpoke
|
||||
new() { FixedBall = Ball.Poke, Species = 722, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Rowlet
|
||||
new() { FixedBall = Ball.Poke, Species = 725, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Litten
|
||||
new() { FixedBall = Ball.Poke, Species = 728, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3 }, // Popplio
|
||||
new() { FixedBall = Ball.Poke, Species = 026, Level = 30, Location = 164, Shiny = Never, Ability = OnlyFirst, FlawlessIVCount = 3, Form = 01 }, // Raichu-1
|
||||
new() { FixedBall = Ball.Poke, Species = 027, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Sandshrew-1
|
||||
new() { FixedBall = Ball.Poke, Species = 037, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Vulpix-1
|
||||
new() { FixedBall = Ball.Poke, Species = 052, Level = 05, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Meowth-1
|
||||
new() { FixedBall = Ball.Poke, Species = 103, Level = 30, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Exeggutor-1
|
||||
new() { FixedBall = Ball.Poke, Species = 105, Level = 30, Location = 164, Shiny = Never, Ability = OnlyHidden, FlawlessIVCount = 3, Form = 01 }, // Marowak-1
|
||||
new() { FixedBall = Ball.Poke, Species = 050, Level = 20, Location = 164, Shiny = Never, Ability = OnlyHidden, Gender = 0, Nature = Nature.Jolly, FlawlessIVCount = 6, Form = 01 }, // Diglett-1
|
||||
|
||||
new() { Gift = true, Species = 789, Level = 05, Location = 206, FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst }, // Cosmog
|
||||
new() { Gift = true, Species = 803, Level = 20, Location = 244, FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst, Ball = 26 }, // Poipole
|
||||
new() { FixedBall = Ball.Poke, Species = 789, Level = 05, Location = 206, FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst }, // Cosmog
|
||||
new() { FixedBall = Ball.Beast,Species = 803, Level = 20, Location = 244, FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst }, // Poipole
|
||||
|
||||
// Technically a gift, but copies ball from Calyrex.
|
||||
new() { Species = 896, Level = 75, Location = 220, ScriptedNoMarks = true, FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst, Relearn = new(556) }, // Glastrier
|
||||
|
@ -110,10 +97,9 @@ internal static class Encounters8
|
|||
new() { Species = 460, Level = 55, Location = 106, Moves = new(008,059,452,275), Weather = Snowstorm }, // Abomasnow on Route 10
|
||||
new() { Species = 342, Level = 50, Location = 034, Moves = new(242,014,534,400), FlawlessIVCount = 3 }, // Crawdaunt in the town of Turffield
|
||||
#endregion
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic8[] Encounter_SWSH_Strong0 =
|
||||
{
|
||||
// Strong-0
|
||||
|
||||
// Some of these may be crossover cases. For now, just log the locations they can show up in and re-categorize later.
|
||||
new() { Species = 095, Level = 26, Location = 122, Weather = All }, // Onix in the Rolling Fields
|
||||
new() { Species = 291, Level = 15, Location = 122, Weather = All }, // Ninjask in the Rolling Fields
|
||||
|
@ -137,8 +123,6 @@ internal static class Encounters8
|
|||
new() { Species = 760, Level = 34, Location = 124, Weather = All }, // Bewear in the Dappled Grove
|
||||
new() { Species = 826, Level = 65, Location = 124, Weather = All }, // Orbeetle in the Dappled Grove
|
||||
new() { Species = 045, Level = 36, Location = 124, Weather = Normal | Overcast | Heavy_Fog }, // Vileplume in the Dappled Grove
|
||||
new(SW ) { Species = 275, Level = 34, Location = 124, Weather = Normal | Overcast | Stormy | Heavy_Fog }, // Shiftry in the Dappled Grove
|
||||
new( SH) { Species = 272, Level = 34, Location = 124, Weather = Normal | Overcast | Stormy | Heavy_Fog }, // Ludicolo in the Dappled Grove
|
||||
new() { Species = 675, Level = 32, Location = 124, Weather = Intense_Sun | Icy | Sandstorm }, // Pangoro in the Dappled Grove
|
||||
new() { Species = 537, Level = 36, Location = 124, Weather = Stormy }, // Seismitoad in the Dappled Grove
|
||||
new() { Species = 583, Level = 36, Location = 124, Weather = Icy }, // Vanillish in the Dappled Grove
|
||||
|
@ -272,8 +256,6 @@ internal static class Encounters8
|
|||
new() { Species = 750, Level = 41, Location = 146, Weather = Normal | Intense_Sun | Sandstorm }, // Mudsdale in Dusty Bowl
|
||||
new() { Species = 185, Level = 41, Location = 146, Weather = Normal | Overcast | Intense_Sun | Icy | Sandstorm | Heavy_Fog }, // Sudowoodo in Dusty Bowl
|
||||
new() { Species = 437, Level = 41, Location = 146, Weather = Normal | Stormy | Icy | Heavy_Fog }, // Bronzong in Dusty Bowl
|
||||
new(SW ) { Species = 784, Level = 60, Location = 146, Ability = OnlyFirst, Weather = Normal | Intense_Sun | Icy | Sandstorm | Heavy_Fog }, // Kommo-o in Dusty Bowl
|
||||
new( SH) { Species = 248, Level = 60, Location = 146, Weather = Normal | Intense_Sun | Icy | Sandstorm | Heavy_Fog }, // Tyranitar in Dusty Bowl
|
||||
new() { Species = 213, Level = 34, Location = 146, Weather = All }, // Shuckle in Dusty Bowl
|
||||
new() { Species = 330, Level = 51, Location = 146, Weather = Normal | Sandstorm }, // Flygon in Dusty Bowl
|
||||
new() { Species = 526, Level = 51, Location = 146, Weather = Normal | Intense_Sun }, // Gigalith in Dusty Bowl
|
||||
|
@ -335,10 +317,9 @@ internal static class Encounters8
|
|||
new() { Species = 136, Level = 56, Location = 154, Weather = Intense_Sun }, // Flareon at the Lake of Outrage
|
||||
new() { Species = 197, Level = 56, Location = 154, Weather = Sandstorm }, // Umbreon at the Lake of Outrage
|
||||
new() { Species = 700, Level = 56, Location = 154, Weather = Heavy_Fog }, // Sylveon at the Lake of Outrage
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic8[] Encounter_SWSH_Strong1 =
|
||||
{
|
||||
// Strong 1
|
||||
|
||||
new() { Species = 079, Level = 12, Location = 016, ScriptedNoMarks = true, Form = 01, Shiny = Never }, // Slowpoke-1 at Wedgehurst Station
|
||||
new() { Species = 321, Level = 80, Location = 186, Weather = All_IoA }, // Wailord in the Workout Sea
|
||||
|
||||
|
@ -370,8 +351,6 @@ internal static class Encounters8
|
|||
new() { Species = 186, Level = 32, Location = 166, Weather = Stormy }, // Politoed in the Soothing Wetlands
|
||||
new() { Species = 061, Level = 20, Location = 166, Weather = Stormy | Heavy_Fog }, // Poliwhirl in the Soothing Wetlands
|
||||
new() { Species = 549, Level = 22, Location = 166, Weather = Intense_Sun }, // Lilligant in the Soothing Wetlands
|
||||
new(SW ) { Species = 559, Level = 20, Location = 166, Weather = Overcast }, // Scraggy in the Soothing Wetlands
|
||||
new( SH) { Species = 453, Level = 20, Location = 166, Weather = Overcast }, // Croagunk in the Soothing Wetlands
|
||||
new() { Species = 663, Level = 32, Location = 166, Weather = Intense_Sun }, // Talonflame in the Soothing Wetlands
|
||||
new() { Species = 026, Level = 26, Location = 166, Crossover = new(168), Weather = Thunderstorm }, // Raichu in the Soothing Wetlands, in the Forest of Focus
|
||||
new() { Species = 184, Level = 21, Location = 166, Crossover = new(168), Weather = Heavy_Fog }, // Azumarill in the Soothing Wetlands, in the Forest of Focus
|
||||
|
@ -380,20 +359,14 @@ internal static class Encounters8
|
|||
//new() { Species = 834, Level = 21, Location = -1 }, // Drednaw
|
||||
//new() { Species = 768, Level = 26, Location = -1 }, // Golisopod
|
||||
new() { Species = 025, Level = 22, Location = 168, Weather = Normal | Overcast | Stormy }, // Pikachu in the Forest of Focus
|
||||
new(SW ) { Species = 766, Level = 26, Location = 168 }, // Passimian in the Forest of Focus
|
||||
new( SH) { Species = 765, Level = 26, Location = 168 }, // Oranguru in the Forest of Focus
|
||||
new() { Species = 342, Level = 26, Location = 168, Weather = Overcast | Stormy }, // Crawdaunt in the Forest of Focus
|
||||
new() { Species = 040, Level = 26, Location = 168, Weather = Heavy_Fog }, // Wigglytuff in the Forest of Focus
|
||||
new() { Species = 028, Level = 26, Location = 168, Weather = Sandstorm }, // Sandslash in the Forest of Focus
|
||||
new() { Species = 589, Level = 32, Location = 168, Weather = Sandstorm }, // Escavalier in the Forest of Focus
|
||||
new() { Species = 104, Level = 20, Location = 168, Weather = Sandstorm }, // Cubone in the Forest of Focus
|
||||
new() { Species = 545, Level = 32, Location = 168, Weather = Overcast }, // Scolipede in the Forest of Focus
|
||||
new(SW ) { Species = 127, Level = 26, Location = 168, Weather = Intense_Sun }, // Pinsir in the Forest of Focus
|
||||
new( SH) { Species = 214, Level = 26, Location = 168, Weather = Intense_Sun }, // Heracross in the Forest of Focus
|
||||
new() { Species = 636, Level = 15, Location = 168, Weather = Intense_Sun }, // Larvesta in the Forest of Focus
|
||||
new() { Species = 465, Level = 36, Location = 168, Weather = Intense_Sun }, // Tangrowth in the Forest of Focus
|
||||
new(SW ) { Species = 616, Level = 20, Location = 168, Weather = Stormy }, // Shelmet in the Forest of Focus
|
||||
new( SH) { Species = 704, Level = 20, Location = 168, Weather = Stormy }, // Goomy in the Forest of Focus
|
||||
new() { Species = 172, Level = 20, Location = 168, Weather = Thunderstorm }, // Pichu in the Forest of Focus
|
||||
new() { Species = 845, Level = 20, Location = 168, Weather = Normal | Raining | Intense_Sun | Heavy_Fog }, // Cramorant in the Forest of Focus
|
||||
new() { Species = 617, Level = 32, Location = 168, Weather = Raining }, // Accelgor in the Forest of Focus
|
||||
|
@ -452,10 +425,6 @@ internal static class Encounters8
|
|||
new() { Species = 621, Level = 36, Location = 172 }, // Druddigon in Brawlers’ Cave
|
||||
new() { Species = 055, Level = 26, Location = 172 }, // Golduck in Brawlers’ Cave
|
||||
new() { Species = 526, Level = 42, Location = 172 }, // Gigalith in Brawlers’ Cave
|
||||
new(SW ) { Species = 744, Level = 22, Location = 172, Crossover = new(174), Weather = Normal | Overcast }, // Rockruff on Challenge Road, Brawlers' Cave (c)
|
||||
new( SH) { Species = 744, Level = 22, Location = 172, Crossover = new(174), Weather = Normal | Overcast | Intense_Sun | Heavy_Fog }, // Rockruff on Challenge Road, Brawlers' Cave (c)
|
||||
new(SW ) { Species = 560, Level = 26, Location = 172, Crossover = new(174, 180), Weather = Stormy }, // Scrafty on Challenge Road, Brawlers’ Cave (c), Training Lowlands
|
||||
new( SH) { Species = 454, Level = 26, Location = 172, Crossover = new(174, 180), Weather = Stormy }, // Toxicroak on Challenge Road, Brawlers’ Cave (c), Training Lowlands
|
||||
new() { Species = 558, Level = 26, Location = 172, Crossover = new(174, 180), Weather = Sandstorm }, // Crustle on Challenge Road, Brawlers’ Cave (c), Training Lowlands
|
||||
new() { Species = 340, Level = 42, Location = 172, Crossover = new(176) }, // Whiscash in Courageous Cavern, Brawlers' Cave
|
||||
new() { Species = 620, Level = 28, Location = 174 }, // Mienshao on Challenge Road
|
||||
|
@ -465,13 +434,7 @@ internal static class Encounters8
|
|||
new() { Species = 745, Level = 32, Location = 174 }, // Lycanroc on Challenge Road
|
||||
new() { Species = 745, Level = 32, Location = 174, Form = 01, Weather = Overcast }, // Lycanroc-1 on Challenge Road
|
||||
new() { Species = 212, Level = 40, Location = 174, Weather = Sandstorm }, // Scizor on Challenge Road
|
||||
new(SW ) { Species = 127, Level = 26, Location = 174, Weather = Intense_Sun }, // Pinsir on Challenge Road
|
||||
new( SH) { Species = 214, Level = 26, Location = 174, Weather = Intense_Sun }, // Heracross on Challenge Road
|
||||
new(SW ) { Species = 782, Level = 22, Location = 174, Weather = Intense_Sun | Sandstorm | Heavy_Fog }, // Jangmo-o on Challenge Road
|
||||
new() { Species = 227, Level = 26, Location = 174, Weather = Normal | Raining | Intense_Sun | Sandstorm }, // Skarmory on Challenge Road
|
||||
new() { Species = 426, Level = 26, Location = 174, Weather = Heavy_Fog }, // Drifblim on Challenge Road
|
||||
new(SW ) { Species = 628, Level = 26, Location = 174, Weather = Overcast }, // Braviary on Challenge Road
|
||||
new( SH) { Species = 630, Level = 26, Location = 174, Weather = Overcast }, // Mandibuzz on Challenge Road
|
||||
new() { Species = 082, Level = 26, Location = 174, Weather = Thunderstorm }, // Magneton on Challenge Road
|
||||
new() { Species = 507, Level = 28, Location = 174, Crossover = new(180), Weather = Normal | Heavy_Fog }, // Herdier on Challenge Road, Training Lowlands
|
||||
new() { Species = 558, Level = 28, Location = 176 }, // Crustle in Courageous Cavern
|
||||
|
@ -514,14 +477,12 @@ internal static class Encounters8
|
|||
new() { Species = 764, Level = 28, Location = 180, Weather = Heavy_Fog }, // Comfey in the Training Lowlands
|
||||
new() { Species = 452, Level = 28, Location = 180, Weather = Overcast | Intense_Sun }, // Drapion in the Training Lowlands
|
||||
new() { Species = 279, Level = 28, Location = 180, Weather = Raining }, // Pelipper in the Training Lowlands
|
||||
new(SW ) { Species = 127, Level = 28, Location = 180, Weather = Normal | Intense_Sun }, // Pinsir in the Training Lowlands
|
||||
new( SH) { Species = 214, Level = 28, Location = 180, Weather = Normal | Intense_Sun }, // Heracross in the Training Lowlands
|
||||
new() { Species = 227, Level = 26, Location = 174, Weather = Normal | Raining | Intense_Sun | Sandstorm }, // Skarmory on Challenge Road
|
||||
new() { Species = 528, Level = 28, Location = 180, Weather = Overcast }, // Swoobat in the Training Lowlands
|
||||
new() { Species = 241, Level = 28, Location = 180, Weather = Normal | Overcast | Intense_Sun }, // Miltank in the Training Lowlands
|
||||
new() { Species = 082, Level = 28, Location = 180, Weather = Thunderstorm }, // Magneton in the Training Lowlands
|
||||
new() { Species = 662, Level = 28, Location = 180, Weather = Intense_Sun }, // Fletchinder in the Training Lowlands
|
||||
new() { Species = 227, Level = 26, Location = 180, Weather = Sandstorm }, // Skarmory in the Training Lowlands
|
||||
new(SW ) { Species = 782, Level = 22, Location = 180, Weather = Sandstorm }, // Jangmo-o in Training Lowlands
|
||||
new() { Species = 128, Level = 28, Location = 180, Weather = All_IoA }, // Tauros in the Training Lowlands
|
||||
new() { Species = 687, Level = 28, Location = 180, Weather = Overcast | Raining }, // Malamar in the Training Lowlands
|
||||
new() { Species = 549, Level = 28, Location = 180, Weather = Intense_Sun }, // Lilligant in the Training Lowlands
|
||||
|
@ -543,8 +504,6 @@ internal static class Encounters8
|
|||
new() { Species = 844, Level = 42, Location = 184, Weather = Normal | Intense_Sun | Heavy_Fog }, // Sandaconda in the Potbottom Desert
|
||||
new() { Species = 637, Level = 50, Location = 184, Weather = Intense_Sun }, // Volcarona in the Potbottom Desert
|
||||
new() { Species = 028, Level = 42, Location = 184, Weather = Sandstorm }, // Sandslash in the Potbottom Desert
|
||||
new(SW ) { Species = 628, Level = 42, Location = 184, Weather = Normal | Overcast | Raining | Sandstorm | Intense_Sun | Heavy_Fog }, // Braviary in the Potbottom Desert
|
||||
new( SH) { Species = 630, Level = 42, Location = 184, Weather = Normal | Overcast | Raining | Sandstorm | Intense_Sun | Heavy_Fog }, // Mandibuzz in the Potbottom Desert
|
||||
new() { Species = 479, Level = 50, Location = 186, FlawlessIVCount = 3, Weather = Normal | Stormy | Intense_Sun | Heavy_Fog }, // Rotom in the Workout Sea
|
||||
new() { Species = 479, Level = 50, Location = 186, Form = 01, Weather = Normal | Stormy | Intense_Sun | Heavy_Fog }, // Rotom-1 in the Workout Sea
|
||||
new() { Species = 479, Level = 50, Location = 186, Form = 02, Weather = Normal | Stormy | Intense_Sun | Heavy_Fog }, // Rotom-2 in the Workout Sea
|
||||
|
@ -564,10 +523,9 @@ internal static class Encounters8
|
|||
new() { Species = 117, Level = 45, Location = 192, Weather = Normal | Overcast | Stormy | Intense_Sun | Heavy_Fog }, // Seadra in the Honeycalm Sea
|
||||
new() { Species = 549, Level = 45, Location = 194, Weather = Normal | Intense_Sun }, // Lilligant on Honeycalm Island
|
||||
new() { Species = 415, Level = 40, Location = 194, Weather = Overcast | Stormy }, // Combee on Honeycalm Island
|
||||
};
|
||||
|
||||
private static readonly EncounterStatic8[] Encounter_SWSH_Strong2 =
|
||||
{
|
||||
// Strong 2
|
||||
|
||||
new() { Species = 144, Level = 70, Location = 208, Crossover = new(210, 212, 214), Moves = new(821,542,427, 375), FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst, Form = 01, Weather = All_CT }, // Articuno-1 in the Crown Tundra
|
||||
new() { Species = 145, Level = 70, Location = 122, Crossover = new(124, 126, 128, 130), Moves = new(823,065,179,116), FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst, Form = 01, Weather = All }, // Zapdos-1 in a Wild Area
|
||||
new() { Species = 146, Level = 70, Location = 164, Crossover = new(166, 170, 178, 186, 188, 190, 192), Moves = new(822,542,389,417), FlawlessIVCount = 3, Shiny = Never, Ability = OnlyFirst, Form = 01, Weather = All_IoA }, // Moltres-1 on the Isle of Armor
|
||||
|
@ -603,8 +561,6 @@ internal static class Encounters8
|
|||
new() { Species = 143, Level = 65, Location = 204, Weather = Normal | Intense_Sun }, // Snorlax on Slippery Slope
|
||||
new() { Species = 872, Level = 60, Location = 204, Weather = Normal | Heavy_Fog }, // Snom on Slippery Slope
|
||||
new() { Species = 832, Level = 63, Location = 204, Crossover = new(208), Weather = Normal | Intense_Sun }, // Dubwool on Slippery Slope, Frostpoint Field
|
||||
new(SW ) { Species = 576, Level = 65, Location = 204, Crossover = new(208), Weather = Heavy_Fog }, // Gothitelle on Slippery Slope, Frostpoint Field
|
||||
new( SH) { Species = 579, Level = 65, Location = 204, Crossover = new(208), Weather = Heavy_Fog }, // Reuniclus on Slippery Slope, Frostpoint Field
|
||||
new() { Species = 461, Level = 63, Location = 204, Crossover = new(208), Weather = Overcast }, // Weavile on Slippery Slope, Frostpoint Field
|
||||
new() { Species = 531, Level = 62, Location = 204, Crossover = new(208), Weather = Normal | Overcast | Intense_Sun | Icy | Heavy_Fog }, // Audino on Slippery Slope, Frostpoint Field
|
||||
new() { Species = 615, Level = 62, Location = 204, Crossover = new(208, 210), Weather = Icy }, // Cryogonal on Slippery Slope, Frostpoint Field, Giant’s Bed
|
||||
|
@ -628,8 +584,6 @@ internal static class Encounters8
|
|||
new() { Species = 437, Level = 65, Location = 208, Crossover = new(222), Weather = Normal | Overcast }, // Bronzong in Frostpoint Field (c), Giant’s Foot
|
||||
new() { Species = 029, Level = 60, Location = 210, Weather = Normal | Stormy | Intense_Sun }, // Nidoran♀ in the Giant’s Bed
|
||||
new() { Species = 832, Level = 63, Location = 210 }, // Dubwool in the Giant’s Bed
|
||||
new(SW ) { Species = 874, Level = 63, Location = 210, Weather = All_CT }, // Stonjourner in the Giant’s Bed
|
||||
new( SH) { Species = 143, Level = 65, Location = 210, Weather = All_CT }, // Snorlax in the Giant’s Bed
|
||||
new() { Species = 142, Level = 65, Location = 210, Weather = All_CT }, // Aerodactyl in the Giant’s Bed
|
||||
new() { Species = 133, Level = 60, Location = 210 }, // Eevee in the Giant’s Bed
|
||||
new() { Species = 470, Level = 63, Location = 210 }, // Leafeon in the Giant’s Bed
|
||||
|
@ -666,7 +620,6 @@ internal static class Encounters8
|
|||
new() { Species = 531, Level = 62, Location = 210, Crossover = new(222, 230), Weather = All_CT }, // Audino in the Giant’s Bed, Giant’s Foot
|
||||
new() { Species = 130, Level = 67, Location = 210, Crossover = new(230), Weather = Normal | Overcast | Stormy | Intense_Sun | Icy }, // Gyarados in the Giant’s Bed, Ballimere Lake
|
||||
new() { Species = 350, Level = 67, Location = 210, Crossover = new(230), Weather = Heavy_Fog }, // Milotic in the Giant’s Bed, Ballimere Lake
|
||||
new( SH) { Species = 078, Level = 67, Location = 212, Form = 01, Weather = Heavy_Fog }, // Rapidash-1 in the Old Cemetery
|
||||
new() { Species = 872, Level = 62, Location = 214, Weather = Normal | Overcast }, // Snom on Snowslide Slope
|
||||
new() { Species = 698, Level = 62, Location = 214, Weather = Normal | Overcast | Stormy | Heavy_Fog }, // Amaura on Snowslide Slope
|
||||
new() { Species = 621, Level = 65, Location = 214, Weather = Normal | Intense_Sun }, // Druddigon on Snowslide Slope
|
||||
|
@ -690,33 +643,21 @@ internal static class Encounters8
|
|||
new() { Species = 036, Level = 65, Location = 216, Weather = Overcast }, // Clefable in the Tunnel to the Top
|
||||
new() { Species = 621, Level = 65, Location = 216, Weather = Overcast }, // Druddigon in the Tunnel to the Top
|
||||
new() { Species = 478, Level = 65, Location = 216, Weather = Overcast }, // Froslass in the Tunnel to the Top
|
||||
new(SW ) { Species = 371, Level = 65, Location = 216, Weather = Overcast }, // Bagon in the Tunnel to the Top
|
||||
new( SH) { Species = 443, Level = 65, Location = 216, Weather = Overcast }, // Gible in the Tunnel to the Top
|
||||
new(SW ) { Species = 373, Level = 68, Location = 216, Weather = Overcast }, // Salamence in the Tunnel to the Top
|
||||
new( SH) { Species = 445, Level = 68, Location = 216, Weather = Overcast }, // Garchomp in the Tunnel to the Top
|
||||
new() { Species = 703, Level = 65, Location = 216, Weather = Overcast }, // Carbink in the Tunnel to the Top
|
||||
new() { Species = 041, Level = 63, Location = 216, Crossover = new(224), Weather = Overcast }, // Zubat in the Tunnel to the Top, Roaring-Sea Caves
|
||||
new() { Species = 042, Level = 65, Location = 216, Weather = Normal | Overcast | Intense_Sun | Icy | Heavy_Fog }, // Golbat in the Tunnel to the Top
|
||||
new() { Species = 873, Level = 65, Location = 218, Weather = Normal | Overcast | Intense_Sun | Icy | Heavy_Fog }, // Frosmoth on the Path to the Peak
|
||||
new(SW ) { Species = 373, Level = 68, Location = 218, Weather = Intense_Sun }, // Salamence on the Path to the Peak
|
||||
new( SH) { Species = 445, Level = 68, Location = 218, Weather = Intense_Sun }, // Garchomp on the Path to the Peak
|
||||
new() { Species = 621, Level = 65, Location = 218 }, // Druddigon on the Path to the Peak
|
||||
new() { Species = 851, Level = 67, Location = 222, Weather = Normal | Intense_Sun }, // Centiskorch at the Giant’s Foot
|
||||
new() { Species = 879, Level = 67, Location = 222, Weather = Overcast | Stormy | Icy | Heavy_Fog }, // Copperajah at the Giant’s Foot
|
||||
new() { Species = 534, Level = 67, Location = 222 }, // Conkeldurr at the Giant’s Foot
|
||||
new(SW ) { Species = 138, Level = 63, Location = 222, Weather = All_CT }, // Omanyte at the Giant’s Foot
|
||||
new( SH) { Species = 140, Level = 63, Location = 222, Weather = All_CT }, // Kabuto at the Giant’s Foot
|
||||
new() { Species = 566, Level = 63, Location = 222, Weather = All_CT }, // Archen at the Giant’s Foot
|
||||
new() { Species = 126, Level = 65, Location = 222, Weather = Intense_Sun }, // Magmar at the Giant’s Foot
|
||||
new() { Species = 752, Level = 67, Location = 222, Crossover = new(230), Weather = Raining }, // Araquanid at Ballimere Lake, Giant’s Foot
|
||||
new() { Species = 125, Level = 65, Location = 222, Crossover = new(230), Weather = Thunderstorm }, // Electabuzz at the Giant’s Foot, Ballimere Lake
|
||||
//new() { Species = 567, Level = 67, Location = -1 }, // Archeops
|
||||
new(SW ) { Species = 635, Level = 68, Location = 224, Weather = No_Sun_Sand }, // Hydreigon in Roaring-Sea Caves, weather from Frigid Sea
|
||||
new( SH) { Species = 248, Level = 68, Location = 224, Weather = No_Sun_Sand }, // Tyranitar in Roaring-Sea Caves, weather from Frigid Sea
|
||||
new() { Species = 448, Level = 67, Location = 224, Weather = Overcast }, // Lucario in Roaring-Sea Caves
|
||||
new() { Species = 042, Level = 65, Location = 224, Weather = Overcast }, // Golbat in the Roaring-Sea Caves
|
||||
new( SH) { Species = 141, Level = 68, Location = 224, Weather = Overcast }, // Kabutops in Roaring-Sea Caves
|
||||
new(SW ) { Species = 139, Level = 68, Location = 224, Weather = Overcast }, // Omastar in Roaring-Sea Caves
|
||||
new() { Species = 363, Level = 63, Location = 226, Weather = No_Sun_Sand }, // Spheal at the Frigid Sea
|
||||
new() { Species = 364, Level = 65, Location = 226, Weather = No_Sun_Sand }, // Sealeo at the Frigid Sea
|
||||
new() { Species = 564, Level = 63, Location = 226, Weather = Normal | Overcast | Stormy | Heavy_Fog }, // Tirtouga at the Frigid Sea
|
||||
|
@ -724,7 +665,6 @@ internal static class Encounters8
|
|||
new() { Species = 365, Level = 68, Location = 226, Weather = Normal | Overcast | Icy | Heavy_Fog }, // Walrein at the Frigid Sea
|
||||
new() { Species = 565, Level = 67, Location = 226, Weather = Normal | Stormy | Intense_Sun }, // Carracosta at the Frigid Sea
|
||||
new() { Species = 871, Level = 65, Location = 226, Weather = Thunderstorm }, // Pincurchin at the Frigid Sea
|
||||
new( SH) { Species = 875, Level = 65, Location = 226, Weather = No_Sun_Sand }, // Eiscue at the Frigid Sea
|
||||
new() { Species = 623, Level = 65, Location = 226, Crossover = new(228), Weather = All_CT }, // Golurk at the Frigid Sea (c), Three-Point Pass
|
||||
new() { Species = 467, Level = 68, Location = 226, Crossover = new(230), Weather = Intense_Sun }, // Magmortar at Frigid Sea (c), Ballimere Lake
|
||||
new() { Species = 466, Level = 68, Location = 226, Crossover = new(228, 230), Weather = Thunderstorm }, // Electivire at the Frigid Sea, Three-Point Pass, Ballimere Lake
|
||||
|
@ -738,8 +678,6 @@ internal static class Encounters8
|
|||
new() { Species = 547, Level = 65, Location = 230, Weather = Normal | Raining }, // Whimsicott at Ballimere Lake
|
||||
new() { Species = 836, Level = 67, Location = 230, Weather = Normal | Stormy | Snowing | Heavy_Fog }, // Boltund at Ballimere Lake
|
||||
new() { Species = 830, Level = 65, Location = 230, Weather = Raining | Intense_Sun }, // Eldegoss at Ballimere Lake
|
||||
new(SW ) { Species = 876, Level = 65, Location = 230, Weather = Normal | Heavy_Fog }, // Indeedee at Ballimere Lake
|
||||
new( SH) { Species = 876, Level = 65, Location = 230, Form = 01, Weather = Normal | Heavy_Fog }, // Indeedee-1 at Ballimere Lake
|
||||
new() { Species = 696, Level = 63, Location = 230, Weather = All_CT }, // Tyrunt at Ballimere Lake
|
||||
new() { Species = 213, Level = 65, Location = 230, Weather = Normal | Intense_Sun }, // Shuckle at Ballimere Lake
|
||||
new() { Species = 820, Level = 68, Location = 230, Weather = All_Ballimere }, // Greedent at Ballimere Lake
|
||||
|
@ -764,46 +702,97 @@ internal static class Encounters8
|
|||
new() { Species = 820, Level = 68, Location = 234, Weather = All_Ballimere }, // Greedent at Dyna Tree Hill
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic8[] StaticSW =
|
||||
{
|
||||
new(SW ) { Species = 275, Level = 34, Location = 124, Weather = Normal | Overcast | Stormy | Heavy_Fog }, // Shiftry in the Dappled Grove
|
||||
new(SW ) { Species = 784, Level = 60, Location = 146, Ability = OnlyFirst, Weather = Normal | Intense_Sun | Icy | Sandstorm | Heavy_Fog }, // Kommo-o in Dusty Bowl
|
||||
new(SW ) { Species = 559, Level = 20, Location = 166, Weather = Overcast }, // Scraggy in the Soothing Wetlands
|
||||
new(SW ) { Species = 766, Level = 26, Location = 168 }, // Passimian in the Forest of Focus
|
||||
new(SW ) { Species = 127, Level = 26, Location = 168, Weather = Intense_Sun }, // Pinsir in the Forest of Focus
|
||||
new(SW ) { Species = 616, Level = 20, Location = 168, Weather = Stormy }, // Shelmet in the Forest of Focus
|
||||
new(SW ) { Species = 744, Level = 22, Location = 172, Crossover = new(174), Weather = Normal | Overcast }, // Rockruff on Challenge Road, Brawlers' Cave (c)
|
||||
new(SW ) { Species = 560, Level = 26, Location = 172, Crossover = new(174, 180), Weather = Stormy }, // Scrafty on Challenge Road, Brawlers’ Cave (c), Training Lowlands
|
||||
new(SW ) { Species = 127, Level = 26, Location = 174, Weather = Intense_Sun }, // Pinsir on Challenge Road
|
||||
new(SW ) { Species = 782, Level = 22, Location = 174, Weather = Intense_Sun | Sandstorm | Heavy_Fog }, // Jangmo-o on Challenge Road
|
||||
new(SW ) { Species = 628, Level = 26, Location = 174, Weather = Overcast }, // Braviary on Challenge Road
|
||||
new(SW ) { Species = 127, Level = 28, Location = 180, Weather = Normal | Intense_Sun }, // Pinsir in the Training Lowlands
|
||||
new(SW ) { Species = 782, Level = 22, Location = 180, Weather = Sandstorm }, // Jangmo-o in Training Lowlands
|
||||
new(SW ) { Species = 628, Level = 42, Location = 184, Weather = Normal | Overcast | Raining | Sandstorm | Intense_Sun | Heavy_Fog }, // Braviary in the Potbottom Desert
|
||||
new(SW ) { Species = 576, Level = 65, Location = 204, Crossover = new(208), Weather = Heavy_Fog }, // Gothitelle on Slippery Slope, Frostpoint Field
|
||||
new(SW ) { Species = 874, Level = 63, Location = 210, Weather = All_CT }, // Stonjourner in the Giant’s Bed
|
||||
new(SW ) { Species = 371, Level = 65, Location = 216, Weather = Overcast }, // Bagon in the Tunnel to the Top
|
||||
new(SW ) { Species = 373, Level = 68, Location = 216, Weather = Overcast }, // Salamence in the Tunnel to the Top
|
||||
new(SW ) { Species = 373, Level = 68, Location = 218, Weather = Intense_Sun }, // Salamence on the Path to the Peak
|
||||
new(SW ) { Species = 138, Level = 63, Location = 222, Weather = All_CT }, // Omanyte at the Giant’s Foot
|
||||
new(SW ) { Species = 635, Level = 68, Location = 224, Weather = No_Sun_Sand }, // Hydreigon in Roaring-Sea Caves, weather from Frigid Sea
|
||||
new(SW ) { Species = 139, Level = 68, Location = 224, Weather = Overcast }, // Omastar in Roaring-Sea Caves
|
||||
new(SW ) { Species = 876, Level = 65, Location = 230, Weather = Normal | Heavy_Fog }, // Indeedee at Ballimere Lake
|
||||
};
|
||||
|
||||
public static readonly EncounterStatic8[] StaticSH =
|
||||
{
|
||||
new( SH) { Species = 272, Level = 34, Location = 124, Weather = Normal | Overcast | Stormy | Heavy_Fog }, // Ludicolo in the Dappled Grove
|
||||
new( SH) { Species = 248, Level = 60, Location = 146, Weather = Normal | Intense_Sun | Icy | Sandstorm | Heavy_Fog }, // Tyranitar in Dusty Bowl
|
||||
new( SH) { Species = 453, Level = 20, Location = 166, Weather = Overcast }, // Croagunk in the Soothing Wetlands
|
||||
new( SH) { Species = 765, Level = 26, Location = 168 }, // Oranguru in the Forest of Focus
|
||||
new( SH) { Species = 214, Level = 26, Location = 168, Weather = Intense_Sun }, // Heracross in the Forest of Focus
|
||||
new( SH) { Species = 704, Level = 20, Location = 168, Weather = Stormy }, // Goomy in the Forest of Focus
|
||||
new( SH) { Species = 744, Level = 22, Location = 172, Crossover = new(174), Weather = Normal | Overcast | Intense_Sun | Heavy_Fog }, // Rockruff on Challenge Road, Brawlers' Cave (c)
|
||||
new( SH) { Species = 454, Level = 26, Location = 172, Crossover = new(174, 180), Weather = Stormy }, // Toxicroak on Challenge Road, Brawlers’ Cave (c), Training Lowlands
|
||||
new( SH) { Species = 214, Level = 26, Location = 174, Weather = Intense_Sun }, // Heracross on Challenge Road
|
||||
new( SH) { Species = 630, Level = 26, Location = 174, Weather = Overcast }, // Mandibuzz on Challenge Road
|
||||
new( SH) { Species = 214, Level = 28, Location = 180, Weather = Normal | Intense_Sun }, // Heracross in the Training Lowlands
|
||||
new( SH) { Species = 630, Level = 42, Location = 184, Weather = Normal | Overcast | Raining | Sandstorm | Intense_Sun | Heavy_Fog }, // Mandibuzz in the Potbottom Desert
|
||||
new( SH) { Species = 579, Level = 65, Location = 204, Crossover = new(208), Weather = Heavy_Fog }, // Reuniclus on Slippery Slope, Frostpoint Field
|
||||
new( SH) { Species = 143, Level = 65, Location = 210, Weather = All_CT }, // Snorlax in the Giant’s Bed
|
||||
new( SH) { Species = 078, Level = 67, Location = 212, Form = 01, Weather = Heavy_Fog }, // Rapidash-1 in the Old Cemetery
|
||||
new( SH) { Species = 443, Level = 65, Location = 216, Weather = Overcast }, // Gible in the Tunnel to the Top
|
||||
new( SH) { Species = 445, Level = 68, Location = 216, Weather = Overcast }, // Garchomp in the Tunnel to the Top
|
||||
new( SH) { Species = 445, Level = 68, Location = 218, Weather = Intense_Sun }, // Garchomp on the Path to the Peak
|
||||
new( SH) { Species = 140, Level = 63, Location = 222, Weather = All_CT }, // Kabuto at the Giant’s Foot
|
||||
new( SH) { Species = 248, Level = 68, Location = 224, Weather = No_Sun_Sand }, // Tyranitar in Roaring-Sea Caves, weather from Frigid Sea
|
||||
new( SH) { Species = 141, Level = 68, Location = 224, Weather = Overcast }, // Kabutops in Roaring-Sea Caves
|
||||
new( SH) { Species = 875, Level = 65, Location = 226, Weather = No_Sun_Sand }, // Eiscue at the Frigid Sea
|
||||
new( SH) { Species = 876, Level = 65, Location = 230, Form = 01, Weather = Normal | Heavy_Fog }, // Indeedee-1 at Ballimere Lake
|
||||
};
|
||||
|
||||
private const string tradeSWSH = "tradeswsh";
|
||||
private static readonly string[][] TradeSWSH = Util.GetLanguageStrings10(tradeSWSH, "zh2");
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings10(tradeSWSH, "zh2");
|
||||
private static readonly string[] TradeOT_R1 = { string.Empty, "チホコ", "Regina", "Régiona", "Regionalia", "Regine", string.Empty, "Tatiana", "지민", "易蒂", "易蒂" };
|
||||
private static readonly IndividualValueSet TradeIVs = new(15, 15, 15, 15, 15, 15);
|
||||
|
||||
private static readonly EncounterTrade8[] TradeGift_Regular =
|
||||
public static readonly EncounterTrade8[] TradeSWSH =
|
||||
{
|
||||
new(SWSH, 052,18,08,000,04,5) { Ability = OnlySecond, TID7 = 263455, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 0, Nature = Nature.Timid, Relearn = new(387) }, // Meowth
|
||||
new(SWSH, 819,10,01,044,01,2) { Ability = OnlyFirst, TID7 = 648753, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Gender = 0, Nature = Nature.Mild }, // Skwovet
|
||||
new(SWSH, 546,23,11,000,09,5) { Ability = OnlyFirst, TID7 = 101154, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Gender = 1, Nature = Nature.Modest }, // Cottonee
|
||||
new(SWSH, 175,25,02,010,10,6) { Ability = OnlySecond, TID7 = 109591, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Gender = 0, Nature = Nature.Timid, Relearn = new(791) }, // Togepi
|
||||
new(SW , 856,30,09,859,08,3) { Ability = OnlySecond, TID7 = 101101, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 1, Nature = Nature.Quiet }, // Hatenna
|
||||
new( SH, 859,30,43,000,07,6) { Ability = OnlyFirst, TID7 = 256081, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 0, Nature = Nature.Brave, Relearn = new(252) }, // Impidimp
|
||||
new(SWSH, 562,35,16,310,15,5) { Ability = OnlyFirst, TID7 = 102534, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 1, Gender = 0, Nature = Nature.Bold, Relearn = new(261) }, // Yamask
|
||||
new(SW , 538,37,17,129,20,7) { Ability = OnlySecond, TID7 = 768945, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Gender = 0, Nature = Nature.Adamant }, // Throh
|
||||
new( SH, 539,37,17,129,14,6) { Ability = OnlyFirst, TID7 = 881426, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Gender = 0, Nature = Nature.Adamant }, // Sawk
|
||||
new(SWSH, 122,40,56,000,12,4) { Ability = OnlyFirst, TID7 = 891846, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 0, Nature = Nature.Calm }, // Mr. Mime
|
||||
new(SWSH, 884,50,15,038,06,2) { Ability = OnlySecond, TID7 = 101141, IVs = TradeIVs, DynamaxLevel = 3, OTGender = 0, Gender = 0, Nature = Nature.Adamant, Relearn = new(400) }, // Duraludon
|
||||
new(TradeNames, 00, SWSH, 052,18,08,000,04,5) { Ability = OnlySecond, ID32 = 263455, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 0, Nature = Nature.Timid, Relearn = new(387) }, // Meowth
|
||||
new(TradeNames, 01, SWSH, 819,10,01,044,01,2) { Ability = OnlyFirst, ID32 = 648753, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Gender = 0, Nature = Nature.Mild }, // Skwovet
|
||||
new(TradeNames, 02, SWSH, 546,23,11,000,09,5) { Ability = OnlyFirst, ID32 = 101154, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Gender = 1, Nature = Nature.Modest }, // Cottonee
|
||||
new(TradeNames, 03, SWSH, 175,25,02,010,10,6) { Ability = OnlySecond, ID32 = 109591, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Gender = 0, Nature = Nature.Timid, Relearn = new(791) }, // Togepi
|
||||
new(TradeNames, 06, SWSH, 562,35,16,310,15,5) { Ability = OnlyFirst, ID32 = 102534, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 1, Gender = 0, Nature = Nature.Bold, Relearn = new(261) }, // Yamask
|
||||
new(TradeNames, 09, SWSH, 122,40,56,000,12,4) { Ability = OnlyFirst, ID32 = 891846, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 0, Nature = Nature.Calm }, // Mr. Mime
|
||||
new(TradeNames, 10, SWSH, 884,50,15,038,06,2) { Ability = OnlySecond, ID32 = 101141, IVs = TradeIVs, DynamaxLevel = 3, OTGender = 0, Gender = 0, Nature = Nature.Adamant, Relearn = new(400) }, // Duraludon
|
||||
|
||||
new(TradeOT_R1, SWSH, 052,15,01,033,04,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(387) }, // Meowth
|
||||
new(TradeOT_R1, SWSH, 122,15,01,005,04,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(252) }, // Mr. Mime
|
||||
new(TradeOT_R1, SWSH, 263,15,01,045,04,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(245) }, // Zigzagoon
|
||||
new(TradeOT_R1, SWSH, 618,15,01,050,05,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(281) }, // Stunfisk
|
||||
new(TradeOT_R1, SWSH, 110,15,01,040,12,2) { Ability = Any12H, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(220) }, // Weezing
|
||||
new(TradeOT_R1, SWSH, 103,15,01,038,06,2) { Ability = Any12, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(246), Form = 1 }, // Exeggutor-1
|
||||
new(TradeOT_R1, SWSH, 105,15,01,038,06,2) { Ability = Any12, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(174), Form = 1 }, // Marowak-1
|
||||
};
|
||||
|
||||
private static readonly EncounterTrade8[] TradeGift_R1 =
|
||||
internal static readonly EncounterTrade8[] TradeSW =
|
||||
{
|
||||
new(SWSH, 052,15,01,033,04,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(387) }, // Meowth
|
||||
new(SW , 083,15,01,013,10,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(098) }, // Farfetch’d
|
||||
new( SH, 222,15,01,069,12,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(457) }, // Corsola
|
||||
new( SH, 077,15,01,047,06,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(234) }, // Ponyta
|
||||
new(SWSH, 122,15,01,005,04,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(252) }, // Mr. Mime
|
||||
new(SW , 554,15,01,040,12,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(326) }, // Darumaka
|
||||
new(SWSH, 263,15,01,045,04,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(245) }, // Zigzagoon
|
||||
new(SWSH, 618,15,01,050,05,2, Random) { Ability = OnlyHidden, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(281) }, // Stunfisk
|
||||
new(SWSH, 110,15,01,040,12,2, Random) { Ability = Any12H, TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(220) }, // Weezing
|
||||
new(SWSH, 103,15,01,038,06,2, Random) { TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(246), Form = 1 }, // Exeggutor-1
|
||||
new(SWSH, 105,15,01,038,06,2, Random) { TID7 = 101141, FlawlessIVCount = 3, DynamaxLevel = 5, OTGender = 1, IsNicknamed = false, Relearn = new(174), Form = 1 }, // Marowak-1
|
||||
new(TradeNames, 04, SW , 856,30,09,859,08,3) { Ability = OnlySecond, ID32 = 101101, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 1, Nature = Nature.Quiet }, // Hatenna
|
||||
new(TradeNames, 07, SW , 538,37,17,129,20,7) { Ability = OnlySecond, ID32 = 768945, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Gender = 0, Nature = Nature.Adamant }, // Throh
|
||||
new(TradeOT_R1, SW , 083,15,01,013,10,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(098) }, // Farfetch’d
|
||||
new(TradeOT_R1, SW , 554,15,01,040,12,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(326) }, // Darumaka
|
||||
};
|
||||
|
||||
internal static readonly EncounterTrade8[] TradeGift_SWSH = ArrayUtil.ConcatAll(TradeGift_Regular, TradeGift_R1);
|
||||
|
||||
internal static readonly EncounterStatic[] StaticSW = ArrayUtil.ConcatAll(Nest_SW, Nest_SH, Dist_SW, Dist_SH, DynAdv_SWSH, Crystal_SWSH,
|
||||
GetEncounters(new EncounterStatic[][] { Encounter_SWSH_0, Encounter_SWSH_Strong0, Encounter_SWSH_Strong1, Encounter_SWSH_Strong2 }, SH));
|
||||
|
||||
internal static readonly EncounterStatic[] StaticSH = ArrayUtil.ConcatAll(Nest_SW, Nest_SH, Dist_SW, Dist_SH, DynAdv_SWSH, Crystal_SWSH,
|
||||
GetEncounters(new EncounterStatic[][] { Encounter_SWSH_0, Encounter_SWSH_Strong0, Encounter_SWSH_Strong1, Encounter_SWSH_Strong2 }, SW));
|
||||
internal static readonly EncounterTrade8[] TradeSH =
|
||||
{
|
||||
new(TradeNames, 05, SH, 859,30,43,000,07,6) { Ability = OnlyFirst, ID32 = 256081, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Gender = 0, Nature = Nature.Brave, Relearn = new(252) }, // Impidimp
|
||||
new(TradeNames, 08, SH, 539,37,17,129,14,6) { Ability = OnlyFirst, ID32 = 881426, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Gender = 0, Nature = Nature.Adamant }, // Sawk
|
||||
new(TradeOT_R1, SH, 222,15,01,069,12,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(457) }, // Corsola
|
||||
new(TradeOT_R1, SH, 077,15,01,047,06,2) { Ability = OnlyHidden, ID32 = 101141, FlawlessIVCount = 3, IVs = default, DynamaxLevel = 5, OTGender = 1, Relearn = new(234) }, // Ponyta
|
||||
};
|
||||
}
|
||||
|
|
|
@ -269,19 +269,19 @@ internal static class Encounters8Nest
|
|||
|
||||
internal static readonly EncounterStatic8NC[] Crystal_SWSH =
|
||||
{
|
||||
new(SWSH) { Species = 782, Level = 16, Ability = A3, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 2, Moves = new(033,029,525,043) }, // ★And458 Jangmo-o
|
||||
new(SWSH) { Species = 246, Level = 16, Ability = A3, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 2, Moves = new(033,157,371,044) }, // ★And15 Larvitar
|
||||
new(SWSH) { Species = 823, Level = 50, Ability = A2, Location = 126, IVs = new(31,31,31,-1,-1,31), DynamaxLevel = 5, Moves = new(065,442,034,796), CanGigantamax = true }, // ★And337 Gigantamax Corviknight
|
||||
new(SWSH) { Species = 875, Level = 15, Ability = A3, Location = 126, IVs = new(31,31,-1,31,-1,-1), DynamaxLevel = 2, Moves = new(181,311,054,556) }, // ★And603 Eiscue
|
||||
new(SWSH) { Species = 874, Level = 15, Ability = A3, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 2, Moves = new(397,317,335,157) }, // ★And390 Stonjourner
|
||||
new(SWSH) { Species = 879, Level = 35, Ability = A3, Location = 126, IVs = new(31,31,-1, 0,31,-1), DynamaxLevel = 4, Moves = new(484,174,776,583), CanGigantamax = true }, // ★Sgr6879 Gigantamax Copperajah
|
||||
new(SWSH) { Species = 851, Level = 35, Ability = A2, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(680,679,489,438), CanGigantamax = true }, // ★Sgr6859 Gigantamax Centiskorch
|
||||
new(SW ) { Species = 842, Level = 40, Ability = A0, Location = 126, IVs = new(31,-1,31,-1,31,-1), DynamaxLevel = 5, Moves = new(787,412,406,076), CanGigantamax = true }, // ★Sgr6913 Gigantamax Appletun
|
||||
new( SH) { Species = 841, Level = 40, Ability = A0, Location = 126, IVs = new(31,31,-1,31,-1,-1), DynamaxLevel = 5, Moves = new(788,491,412,406), CanGigantamax = true }, // ★Sgr6913 Gigantamax Flapple
|
||||
new(SWSH) { Species = 844, Level = 40, Ability = A0, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(523,776,489,157), CanGigantamax = true }, // ★Sgr7348 Gigantamax Sandaconda
|
||||
new(SWSH) { Species = 884, Level = 40, Ability = A2, Location = 126, IVs = new(31,-1,-1,31,31,-1), DynamaxLevel = 5, Moves = new(796,063,784,319), CanGigantamax = true }, // ★Sgr7121 Gigantamax Duraludon
|
||||
new(SWSH) { Species = 025, Level = 25, Ability = A2, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(606,273,104,085), CanGigantamax = true }, // ★Sgr6746 Gigantamax Pikachu
|
||||
new(SWSH) { Species = 133, Level = 25, Ability = A2, Location = 126, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(606,273,038,129), CanGigantamax = true }, // ★Sgr7194 Gigantamax Eevee
|
||||
new(SWSH) { Species = 782, Level = 16, Ability = A3, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 2, Moves = new(033,029,525,043) }, // ★And458 Jangmo-o
|
||||
new(SWSH) { Species = 246, Level = 16, Ability = A3, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 2, Moves = new(033,157,371,044) }, // ★And15 Larvitar
|
||||
new(SWSH) { Species = 823, Level = 50, Ability = A2, IVs = new(31,31,31,-1,-1,31), DynamaxLevel = 5, Moves = new(065,442,034,796), CanGigantamax = true }, // ★And337 Gigantamax Corviknight
|
||||
new(SWSH) { Species = 875, Level = 15, Ability = A3, IVs = new(31,31,-1,31,-1,-1), DynamaxLevel = 2, Moves = new(181,311,054,556) }, // ★And603 Eiscue
|
||||
new(SWSH) { Species = 874, Level = 15, Ability = A3, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 2, Moves = new(397,317,335,157) }, // ★And390 Stonjourner
|
||||
new(SWSH) { Species = 879, Level = 35, Ability = A3, IVs = new(31,31,-1, 0,31,-1), DynamaxLevel = 4, Moves = new(484,174,776,583), CanGigantamax = true }, // ★Sgr6879 Gigantamax Copperajah
|
||||
new(SWSH) { Species = 851, Level = 35, Ability = A2, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(680,679,489,438), CanGigantamax = true }, // ★Sgr6859 Gigantamax Centiskorch
|
||||
new(SW ) { Species = 842, Level = 40, Ability = A0, IVs = new(31,-1,31,-1,31,-1), DynamaxLevel = 5, Moves = new(787,412,406,076), CanGigantamax = true }, // ★Sgr6913 Gigantamax Appletun
|
||||
new( SH) { Species = 841, Level = 40, Ability = A0, IVs = new(31,31,-1,31,-1,-1), DynamaxLevel = 5, Moves = new(788,491,412,406), CanGigantamax = true }, // ★Sgr6913 Gigantamax Flapple
|
||||
new(SWSH) { Species = 844, Level = 40, Ability = A0, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(523,776,489,157), CanGigantamax = true }, // ★Sgr7348 Gigantamax Sandaconda
|
||||
new(SWSH) { Species = 884, Level = 40, Ability = A2, IVs = new(31,-1,-1,31,31,-1), DynamaxLevel = 5, Moves = new(796,063,784,319), CanGigantamax = true }, // ★Sgr7121 Gigantamax Duraludon
|
||||
new(SWSH) { Species = 025, Level = 25, Ability = A2, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(606,273,104,085), CanGigantamax = true }, // ★Sgr6746 Gigantamax Pikachu
|
||||
new(SWSH) { Species = 133, Level = 25, Ability = A2, IVs = new(31,31,31,-1,-1,-1), DynamaxLevel = 5, Moves = new(606,273,038,129), CanGigantamax = true }, // ★Sgr7194 Gigantamax Eevee
|
||||
};
|
||||
|
||||
private static EncounterStatic8N[] GetBase(string name, GameVersion game)
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
using static PKHeX.Core.EncounterUtil;
|
||||
using static PKHeX.Core.Shiny;
|
||||
using static PKHeX.Core.GameVersion;
|
||||
using static PKHeX.Core.EncounterStatic8aCorrelation;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
internal static class Encounters8a
|
||||
{
|
||||
internal static readonly EncounterArea8a[] SlotsLA = EncounterArea8a.GetAreas(Get("la", "la"), PLA);
|
||||
internal static readonly EncounterArea8a[] SlotsLA = EncounterArea8a.GetAreas(Get("la", "la"));
|
||||
|
||||
private const byte M = 127; // Middle Height/Weight
|
||||
private const byte A = 255; // Max Height/Weight for Alphas
|
||||
|
@ -16,13 +15,13 @@ internal static class Encounters8a
|
|||
internal static readonly EncounterStatic8a[] StaticLA =
|
||||
{
|
||||
// Gifts
|
||||
new(722,000,05,M,M) { Location = 006, Gift = true, Method = Fixed, Ball = (int)Ball.LAPoke }, // Rowlet
|
||||
new(155,000,05,M,M) { Location = 006, Gift = true, Method = Fixed, Ball = (int)Ball.LAPoke }, // Cyndaquil
|
||||
new(501,000,05,M,M) { Location = 006, Gift = true, Method = Fixed, Ball = (int)Ball.LAPoke }, // Oshawott
|
||||
new(037,001,40,M,M) { Location = 088, Gift = true, Method = Fixed, Ball = (int)Ball.LAPoke }, // Vulpix-1
|
||||
new(483,000,65,M,M) { Location = 109, FlawlessIVCount = 3, Gift = true, Method = Fixed, Ball = (int)Ball.LAOrigin }, // Dialga
|
||||
new(484,000,65,M,M) { Location = 109, FlawlessIVCount = 3, Gift = true, Method = Fixed, Ball = (int)Ball.LAOrigin }, // Palkia
|
||||
new(493,000,75,M,M) { Location = 109, FlawlessIVCount = 3, Gift = true, Method = Fixed, Ball = (int)Ball.LAPoke, FatefulEncounter = true }, // Arceus
|
||||
new(722,000,05,M,M) { Location = 006, FixedBall = Ball.LAPoke, Method = Fixed, }, // Rowlet
|
||||
new(155,000,05,M,M) { Location = 006, FixedBall = Ball.LAPoke, Method = Fixed, }, // Cyndaquil
|
||||
new(501,000,05,M,M) { Location = 006, FixedBall = Ball.LAPoke, Method = Fixed, }, // Oshawott
|
||||
new(037,001,40,M,M) { Location = 088, FixedBall = Ball.LAPoke, Method = Fixed, }, // Vulpix-1
|
||||
new(483,000,65,M,M) { Location = 109, FlawlessIVCount = 3, FixedBall = Ball.LAOrigin, Method = Fixed, }, // Dialga
|
||||
new(484,000,65,M,M) { Location = 109, FlawlessIVCount = 3, FixedBall = Ball.LAOrigin, Method = Fixed, }, // Palkia
|
||||
new(493,000,75,M,M) { Location = 109, FlawlessIVCount = 3, FixedBall = Ball.LAPoke, Method = Fixed, FatefulEncounter = true }, // Arceus
|
||||
|
||||
// Static Encounters - Scripted Table Slots
|
||||
new(480,000,70,M,M) { Location = 111, FlawlessIVCount = 3, Moves = new(129,326,832,095) }, // Uxie
|
||||
|
@ -38,14 +37,9 @@ internal static class Encounters8a
|
|||
|
||||
new(077,000,15 ) { Location = 014, Shiny = Always}, // Ponyta*
|
||||
new(442,000,60,M,M) { Location = 043, FlawlessIVCount = 3 }, // Spiritomb
|
||||
new(570,001,27 ) { Location = 027 }, // Zorua
|
||||
new(570,001,28 ) { Location = 027 }, // Zorua
|
||||
new(570,001,29 ) { Location = 027 }, // Zorua
|
||||
new(570,001,27 ) { Location = 027, LevelMax = 29 }, // Zorua
|
||||
|
||||
new(489,000,33 ) { Location = 064, FatefulEncounter = true, Moves = new(145,352,151,428) }, // Phione
|
||||
new(489,000,34 ) { Location = 064, FatefulEncounter = true, Moves = new(145,352,151,428) }, // Phione
|
||||
new(489,000,35 ) { Location = 064, FatefulEncounter = true, Moves = new(145,352,151,428) }, // Phione
|
||||
new(489,000,36 ) { Location = 064, FatefulEncounter = true, Moves = new(145,352,151,428) }, // Phione
|
||||
new(489,000,33 ) { Location = 064, FatefulEncounter = true, LevelMax = 36, Moves = new(145,352,151,428) }, // Phione
|
||||
new(490,000,50,M,M) { Location = 064, FlawlessIVCount = 3, FatefulEncounter = true, Moves = new(352,428,585,145) }, // Manaphy
|
||||
new(491,000,70,M,M) { Location = 010, FlawlessIVCount = 3, FatefulEncounter = true, Moves = new(506,399,094,464) }, // Darkrai
|
||||
new(492,000,70,M,M) { Location = 026, FlawlessIVCount = 3, FatefulEncounter = true, Moves = new(403,412,414,465) }, // Shaymin
|
||||
|
|
|
@ -15,30 +15,28 @@ internal static class Encounters8b
|
|||
internal static readonly EncounterArea8b[] SlotsBD = ArrayUtil.ConcatAll(SlotsBD_OW, SlotsBD_UG);
|
||||
internal static readonly EncounterArea8b[] SlotsSP = ArrayUtil.ConcatAll(SlotsSP_OW, SlotsSP_UG);
|
||||
|
||||
static Encounters8b() => MarkEncounterTradeStrings(TradeGift_BDSP, TradeBDSP);
|
||||
|
||||
private static readonly EncounterStatic8b[] Encounter_BDSP =
|
||||
internal static readonly EncounterStatic8b[] Encounter_BDSP =
|
||||
{
|
||||
// Gifts
|
||||
new(BDSP) { Gift = true, Species = 387, Level = 05, Location = 323 }, // Turtwig
|
||||
new(BDSP) { Gift = true, Species = 390, Level = 05, Location = 323 }, // Chimchar
|
||||
new(BDSP) { Gift = true, Species = 393, Level = 05, Location = 323 }, // Piplup
|
||||
new(BDSP) { Gift = true, Species = 133, Level = 05, Location = 104 }, // Eevee
|
||||
new(BDSP) { Gift = true, Species = 440, Level = 01, EggLocation = 60007, EggCycles = 40 }, // Happiny Egg from Traveling Man
|
||||
new(BDSP) { Gift = true, Species = 447, Level = 01, EggLocation = 60005, EggCycles = 25 }, // Riolu Egg from Riley
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 387, Level = 05, Location = 323 }, // Turtwig
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 390, Level = 05, Location = 323 }, // Chimchar
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 393, Level = 05, Location = 323 }, // Piplup
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 133, Level = 05, Location = 104 }, // Eevee
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 440, Level = 01, EggLocation = 60007, Location = Locations.Default8bNone }, // Happiny Egg from Traveling Man
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 447, Level = 01, EggLocation = 60005, Location = Locations.Default8bNone }, // Riolu Egg from Riley
|
||||
|
||||
// Fossils
|
||||
new(BDSP) { Gift = true, Species = 138, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Omanyte
|
||||
new(BDSP) { Gift = true, Species = 140, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Kabuto
|
||||
new(BDSP) { Gift = true, Species = 142, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Aerodactyl
|
||||
new(BDSP) { Gift = true, Species = 345, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Lileep
|
||||
new(BDSP) { Gift = true, Species = 347, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Anorith
|
||||
new(BDSP) { Gift = true, Species = 408, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Cranidos
|
||||
new(BDSP) { Gift = true, Species = 410, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Shieldon
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 138, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Omanyte
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 140, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Kabuto
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 142, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Aerodactyl
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 345, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Lileep
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 347, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Anorith
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 408, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Cranidos
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 410, Level = 01, Location = 049, FlawlessIVCount = 3 }, // Shieldon
|
||||
|
||||
// Game-specific gifts
|
||||
new(BDSP) { Gift = true, Species = 151, Level = 01, Ability = OnlySecond, Location = 438, Shiny = Never, FlawlessIVCount = 3, FatefulEncounter = true }, // Mew
|
||||
new(BDSP) { Gift = true, Species = 385, Level = 05, Ability = OnlySecond, Location = 438, Shiny = Never, FlawlessIVCount = 3, FatefulEncounter = true }, // Jirachi
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 151, Level = 01, Ability = OnlySecond, Location = 438, Shiny = Never, FlawlessIVCount = 3, FatefulEncounter = true }, // Mew
|
||||
new(BDSP) { FixedBall = Ball.Poke, Species = 385, Level = 05, Ability = OnlySecond, Location = 438, Shiny = Never, FlawlessIVCount = 3, FatefulEncounter = true }, // Jirachi
|
||||
|
||||
// Stationary
|
||||
new(BDSP) { Species = 425, Level = 22, Location = 197, FlawlessIVCount = 3 }, // Drifloon
|
||||
|
@ -46,14 +44,12 @@ internal static class Encounters8b
|
|||
new(BDSP) { Species = 479, Level = 15, Location = 311 }, // Rotom
|
||||
|
||||
// Roamers
|
||||
new(BDSP) { Species = 481, Level = 50, FlawlessIVCount = 3, Roaming = true }, // Mesprit
|
||||
new(BDSP) { Species = 488, Level = 50, FlawlessIVCount = 3, Roaming = true }, // Cresselia
|
||||
new(BDSP) { Species = 481, Level = 50, Location = 197, FlawlessIVCount = 3, Roaming = true }, // Mesprit
|
||||
new(BDSP) { Species = 488, Level = 50, Location = 197, FlawlessIVCount = 3, Roaming = true }, // Cresselia
|
||||
|
||||
// Legendary
|
||||
new(BDSP) { Species = 480, Level = 50, Location = 331, FlawlessIVCount = 3 }, // Uxie
|
||||
new(BDSP) { Species = 482, Level = 50, Location = 328, FlawlessIVCount = 3 }, // Azelf
|
||||
new(BD ) { Species = 483, Level = 47, Location = 216, FlawlessIVCount = 3 }, // Dialga
|
||||
new( SP) { Species = 484, Level = 47, Location = 217, FlawlessIVCount = 3 }, // Palkia
|
||||
new(BDSP) { Species = 485, Level = 70, Location = 262, FlawlessIVCount = 3 }, // Heatran
|
||||
new(BDSP) { Species = 486, Level = 70, Location = 291, FlawlessIVCount = 3 }, // Regigigas
|
||||
new(BDSP) { Species = 487, Level = 70, Location = 266, FlawlessIVCount = 3 }, // Giratina
|
||||
|
@ -61,16 +57,8 @@ internal static class Encounters8b
|
|||
// Mythical
|
||||
new(BDSP) { Species = 491, Level = 50, Location = 333, FlawlessIVCount = 3, FatefulEncounter = true }, // Darkrai
|
||||
new(BDSP) { Species = 492, Level = 30, Location = 285, FlawlessIVCount = 3, FatefulEncounter = true }, // Shaymin
|
||||
new(BD ) { Species = 493, Level = 80, Location = 218, FlawlessIVCount = 3, FatefulEncounter = true }, // Arceus (Brilliant Diamond)
|
||||
new( SP) { Species = 493, Level = 80, Location = 618, FlawlessIVCount = 3, FatefulEncounter = true }, // Arceus (Shining Pearl)
|
||||
|
||||
// Ramanas Park (Pure Space)
|
||||
new( SP) { Species = 144, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Articuno
|
||||
new( SP) { Species = 145, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Zapdos
|
||||
new( SP) { Species = 146, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Moltres
|
||||
new(BD ) { Species = 243, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Raikou
|
||||
new(BD ) { Species = 244, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Entei
|
||||
new(BD ) { Species = 245, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Suicune
|
||||
new(BDSP) { Species = 377, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Regirock
|
||||
new(BDSP) { Species = 378, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Regice
|
||||
new(BDSP) { Species = 379, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Registeel
|
||||
|
@ -79,24 +67,39 @@ internal static class Encounters8b
|
|||
|
||||
// Ramanas Park (Strange Space)
|
||||
new(BDSP) { Species = 150, Level = 70, Location = 507, FlawlessIVCount = 3, Ability = OnlyHidden }, // Mewtwo
|
||||
new( SP) { Species = 249, Level = 70, Location = 507, FlawlessIVCount = 3, Ability = OnlyHidden }, // Lugia
|
||||
new(BD ) { Species = 250, Level = 70, Location = 507, FlawlessIVCount = 3, Ability = OnlyHidden }, // Ho-Oh
|
||||
new(BDSP) { Species = 382, Level = 70, Location = 507, FlawlessIVCount = 3 }, // Kyogre
|
||||
new(BDSP) { Species = 383, Level = 70, Location = 507, FlawlessIVCount = 3 }, // Groudon
|
||||
new(BDSP) { Species = 384, Level = 70, Location = 507, FlawlessIVCount = 3 }, // Rayquaza
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic8b[] StaticBD = GetEncounters(Encounter_BDSP, BD);
|
||||
internal static readonly EncounterStatic8b[] StaticSP = GetEncounters(Encounter_BDSP, SP);
|
||||
internal static readonly EncounterStatic8b[] StaticBD =
|
||||
{
|
||||
new(BD ) { Species = 483, Level = 47, Location = 216, FlawlessIVCount = 3 }, // Dialga
|
||||
new(BD ) { Species = 493, Level = 80, Location = 218, FlawlessIVCount = 3, FatefulEncounter = true }, // Arceus (Brilliant Diamond)
|
||||
new(BD ) { Species = 243, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Raikou
|
||||
new(BD ) { Species = 244, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Entei
|
||||
new(BD ) { Species = 245, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Suicune
|
||||
new(BD ) { Species = 250, Level = 70, Location = 507, FlawlessIVCount = 3, Ability = OnlyHidden }, // Ho-Oh
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic8b[] StaticSP =
|
||||
{
|
||||
new( SP) { Species = 484, Level = 47, Location = 217, FlawlessIVCount = 3 }, // Palkia
|
||||
new( SP) { Species = 493, Level = 80, Location = 618, FlawlessIVCount = 3, FatefulEncounter = true }, // Arceus (Shining Pearl)
|
||||
new( SP) { Species = 144, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Articuno
|
||||
new( SP) { Species = 145, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Zapdos
|
||||
new( SP) { Species = 146, Level = 70, Location = 506, FlawlessIVCount = 3, Ability = OnlyHidden }, // Moltres
|
||||
new( SP) { Species = 249, Level = 70, Location = 507, FlawlessIVCount = 3, Ability = OnlyHidden }, // Lugia
|
||||
};
|
||||
|
||||
private const string tradeBDSP = "tradebdsp";
|
||||
private static readonly string[][] TradeBDSP = Util.GetLanguageStrings10(tradeBDSP, "zh2");
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings10(tradeBDSP, "zh2");
|
||||
|
||||
internal static readonly EncounterTrade8b[] TradeGift_BDSP =
|
||||
{
|
||||
new(BDSP) { Species = 063, EncryptionConstant = 0x0000008E, PID = 0xFF50A8F5, Level = 09, Ability = OnlyFirst, Gender = 0, OTGender = 0, TID16 = 25643, IVs = new(28,10,09,31,11,03), Moves = new(100,000,000,000), HeightScalar = 029, WeightScalar = 202, Nature = Nature.Quiet }, // Abra
|
||||
new(BDSP) { Species = 441, EncryptionConstant = 0x00000867, PID = 0x17DAAB19, Level = 15, Ability = OnlySecond, Gender = 1, OTGender = 0, TID16 = 44142, IVs = new(17,08,29,25,17,23), Moves = new(448,047,064,045), HeightScalar = 088, WeightScalar = 091, Nature = Nature.Lonely }, // Chatot
|
||||
new(BDSP) { Species = 093, EncryptionConstant = 0x00000088, PID = 0xF60AB5BB, Level = 33, Ability = OnlyFirst, Gender = 0, OTGender = 0, TID16 = 19248, IVs = new(18,24,28,02,22,30), Moves = new(247,371,389,109), HeightScalar = 096, WeightScalar = 208, Nature = Nature.Hasty }, // Haunter
|
||||
new(BDSP) { Species = 129, EncryptionConstant = 0x0000045C, PID = 0xFCE82F88, Level = 45, Ability = OnlyFirst, Gender = 1, OTGender = 0, TID16 = 53277, IVs = new(03,03,31,02,11,03), Moves = new(150,000,000,000), HeightScalar = 169, WeightScalar = 068, Nature = Nature.Mild }, // Magikarp
|
||||
new(TradeNames, 00, BDSP) { Species = 063, EncryptionConstant = 0x0000008E, PID = 0xFF50A8F5, Level = 09, Ability = OnlyFirst, Gender = 0, OTGender = 0, ID32 = 25643, IVs = new(28,10,09,31,11,03), Moves = new(100,000,000,000), HeightScalar = 029, WeightScalar = 202, Nature = Nature.Quiet }, // Abra
|
||||
new(TradeNames, 01, BDSP) { Species = 441, EncryptionConstant = 0x00000867, PID = 0x17DAAB19, Level = 15, Ability = OnlySecond, Gender = 1, OTGender = 0, ID32 = 44142, IVs = new(17,08,29,25,17,23), Moves = new(448,047,064,045), HeightScalar = 088, WeightScalar = 091, Nature = Nature.Lonely }, // Chatot
|
||||
new(TradeNames, 02, BDSP) { Species = 093, EncryptionConstant = 0x00000088, PID = 0xF60AB5BB, Level = 33, Ability = OnlyFirst, Gender = 0, OTGender = 0, ID32 = 19248, IVs = new(18,24,28,02,22,30), Moves = new(247,371,389,109), HeightScalar = 096, WeightScalar = 208, Nature = Nature.Hasty }, // Haunter
|
||||
new(TradeNames, 03, BDSP) { Species = 129, EncryptionConstant = 0x0000045C, PID = 0xFCE82F88, Level = 45, Ability = OnlyFirst, Gender = 1, OTGender = 0, ID32 = 53277, IVs = new(03,03,31,02,11,03), Moves = new(150,000,000,000), HeightScalar = 169, WeightScalar = 068, Nature = Nature.Mild }, // Magikarp
|
||||
};
|
||||
}
|
||||
|
|
|
@ -12,32 +12,15 @@ internal static class Encounters9
|
|||
{
|
||||
internal static readonly EncounterArea9[] Slots = EncounterArea9.GetAreas(Get("wild_paldea", "sv"), SV);
|
||||
|
||||
static Encounters9()
|
||||
{
|
||||
MarkEncounterTradeStrings(TradeGift_SV, TradeSV);
|
||||
}
|
||||
|
||||
private static readonly EncounterStatic9[] Encounter_SV =
|
||||
internal static readonly EncounterStatic9[] Encounter_SV =
|
||||
{
|
||||
// Starters
|
||||
new(SV) { Gift = true, Species = 906, Shiny = Never, Level = 05, Location = 080, Ability = OnlyFirst, Size = 128 }, // Sprigatito
|
||||
new(SV) { Gift = true, Species = 909, Shiny = Never, Level = 05, Location = 080, Ability = OnlyFirst, Size = 128 }, // Fuecoco
|
||||
new(SV) { Gift = true, Species = 912, Shiny = Never, Level = 05, Location = 080, Ability = OnlyFirst, Size = 128 }, // Quaxly
|
||||
|
||||
// Galarian Meowth from Salvatore (Specific Met Location depending on game, inside Academy's Staff Quarters)
|
||||
new(SL) { Gift = true, Species = 052, Shiny = Never, Level = 05, Location = 130, Form = 2, FlawlessIVCount = 3 }, // Meowth-2
|
||||
new(VL) { Gift = true, Species = 052, Shiny = Never, Level = 05, Location = 131, Form = 2, FlawlessIVCount = 3 }, // Meowth-2
|
||||
new(SV) { FixedBall = Ball.Poke, Species = 906, Shiny = Never, Level = 05, Location = 080, Ability = OnlyFirst, Size = 128 }, // Sprigatito
|
||||
new(SV) { FixedBall = Ball.Poke, Species = 909, Shiny = Never, Level = 05, Location = 080, Ability = OnlyFirst, Size = 128 }, // Fuecoco
|
||||
new(SV) { FixedBall = Ball.Poke, Species = 912, Shiny = Never, Level = 05, Location = 080, Ability = OnlyFirst, Size = 128 }, // Quaxly
|
||||
|
||||
// Scripted
|
||||
new (SV) { Gift = true, Species = 734, Level = 02, Location = 064 }, // Yungoos level 2, no Marks in Inlet Grotto. Only Poké Ball available in early game.
|
||||
|
||||
// Box Legendary (Battle Form)
|
||||
new(SL) { Species = 1007, Shiny = Never, Level = 72, Location = 124, Size = 128, Ability = OnlyFirst, Nature = Nature.Adamant, TeraType = GemType.Fighting, IVs = new(25,31,25,31,31,25), Moves = new(416,339,878,053) }, // Koraidon
|
||||
new(VL) { Species = 1008, Shiny = Never, Level = 72, Location = 124, Size = 128, Ability = OnlyFirst, Nature = Nature.Modest, TeraType = GemType.Electric, IVs = new(25,31,25,31,31,25), Moves = new(063,268,879,408) }, // Miraidon
|
||||
|
||||
// Box Legendary (Ride Form)
|
||||
new(SL) { Gift = true, Species = 1007, Shiny = Never, Level = 68, Location = 070, Ability = OnlyFirst, Size = 128, Nature = Nature.Quirky, TeraType = GemType.Dragon, IVs = new(31,31,28,31,31,28), Moves = new(053,878,203,851) }, // Koraidon
|
||||
new(VL) { Gift = true, Species = 1008, Shiny = Never, Level = 68, Location = 070, Ability = OnlyFirst, Size = 128, Nature = Nature.Quirky, TeraType = GemType.Dragon, IVs = new(31,31,28,31,31,28), Moves = new(408,879,203,851) }, // Miraidon
|
||||
new (SV) { FixedBall = Ball.Poke, Species = 734, Level = 02, Location = 064 }, // Yungoos level 2, no Marks in Inlet Grotto. Only Poké Ball available in early game.
|
||||
|
||||
// Treasures of Ruin
|
||||
new(SV) { Species = 1001, Shiny = Never, Level = 60, Location = 006, Size = 128, FlawlessIVCount = 3 }, // Wo-Chien
|
||||
|
@ -80,20 +63,56 @@ internal static class Encounters9
|
|||
#endregion
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic9[] StaticSL =
|
||||
{
|
||||
// Galarian Meowth from Salvatore (Specific Met Location depending on game, inside Academy's Staff Quarters)
|
||||
new(SL) { FixedBall = Ball.Poke, Species = 052, Shiny = Never, Level = 05, Location = 130, Form = 2, FlawlessIVCount = 3 }, // Meowth-2
|
||||
new(VL) { FixedBall = Ball.Poke, Species = 052, Shiny = Never, Level = 05, Location = 131, Form = 2, FlawlessIVCount = 3 }, // Meowth-2
|
||||
|
||||
// Box Legendary (Battle Form)
|
||||
new(SL) { Species = 1007, Shiny = Never, Level = 72, Location = 124, Size = 128, Ability = OnlyFirst, Nature = Nature.Adamant, TeraType = GemType.Fighting, IVs = new(25,31,25,31,31,25), Moves = new(416,339,878,053) }, // Koraidon
|
||||
new(VL) { Species = 1008, Shiny = Never, Level = 72, Location = 124, Size = 128, Ability = OnlyFirst, Nature = Nature.Modest, TeraType = GemType.Electric, IVs = new(25,31,25,31,31,25), Moves = new(063,268,879,408) }, // Miraidon
|
||||
|
||||
// Box Legendary (Ride Form)
|
||||
new(SL) { FixedBall = Ball.Poke, Species = 1007, Shiny = Never, Level = 68, Location = 070, Ability = OnlyFirst, Size = 128, Nature = Nature.Quirky, TeraType = GemType.Dragon, IVs = new(31,31,28,31,31,28), Moves = new(053,878,203,851) }, // Koraidon
|
||||
new(VL) { FixedBall = Ball.Poke, Species = 1008, Shiny = Never, Level = 68, Location = 070, Ability = OnlyFirst, Size = 128, Nature = Nature.Quirky, TeraType = GemType.Dragon, IVs = new(31,31,28,31,31,28), Moves = new(408,879,203,851) }, // Miraidon
|
||||
|
||||
// Former Titans
|
||||
new(SV) { Species = 950, Shiny = Never, Level = 16, Location = 020, Size = 255, Ability = OnlyFirst, Gender = 1, Nature = Nature.Gentle, IVs = new(30,30,30,30,30,30), Moves = new(011,249,335,317), IsTitan = true }, // Klawf
|
||||
new(SV) { Species = 962, Shiny = Never, Level = 20, Location = 022, Size = 255, Ability = OnlyHidden, Gender = 1, Nature = Nature.Jolly, IVs = new(30,30,30,30,30,30), Moves = new(088,017,365,259), IsTitan = true }, // Bombirdier
|
||||
new(SV) { Species = 968, Shiny = Never, Level = 29, Location = 032, Size = 255, Ability = OnlyFirst, Gender = 0, Nature = Nature.Quirky, IVs = new(30,30,30,30,30,30), Moves = new(231,029,035,201), IsTitan = true }, // Orthworm
|
||||
new(SL) { Species = 984, Shiny = Never, Level = 45, Location = 024, Size = 255, Ability = OnlyFirst, Nature = Nature.Naughty, IVs = new(30,30,30,30,30,30), Moves = new(229,280,282,707), IsTitan = true }, // Great Tusk
|
||||
new(VL) { Species = 990, Shiny = Never, Level = 45, Location = 024, Size = 255, Ability = OnlyFirst, Nature = Nature.Naughty, IVs = new(30,30,30,30,30,30), Moves = new(229,442,282,707), IsTitan = true }, // Iron Treads
|
||||
new(SV) { Species = 978, Shiny = Never, Level = 57, Location = 040, Size = 255, Ability = OnlyFirst, Gender = 0, Nature = Nature.Quiet, IVs = new(30,30,30,30,30,30), Moves = new(330,196,269,406), IsTitan = true }, // Tatsugiri
|
||||
};
|
||||
|
||||
internal static readonly EncounterStatic9[] StaticVL =
|
||||
{
|
||||
// Galarian Meowth from Salvatore (Specific Met Location depending on game, inside Academy's Staff Quarters)
|
||||
new(VL) { FixedBall = Ball.Poke, Species = 052, Shiny = Never, Level = 05, Location = 131, Form = 2, FlawlessIVCount = 3 }, // Meowth-2
|
||||
|
||||
// Box Legendary (Battle Form)
|
||||
new(VL) { Species = 1008, Shiny = Never, Level = 72, Location = 124, Size = 128, Ability = OnlyFirst, Nature = Nature.Modest, TeraType = GemType.Electric, IVs = new(25,31,25,31,31,25), Moves = new(063,268,879,408) }, // Miraidon
|
||||
|
||||
// Box Legendary (Ride Form)
|
||||
new(VL) { FixedBall = Ball.Poke, Species = 1008, Shiny = Never, Level = 68, Location = 070, Ability = OnlyFirst, Size = 128, Nature = Nature.Quirky, TeraType = GemType.Dragon, IVs = new(31,31,28,31,31,28), Moves = new(408,879,203,851) }, // Miraidon
|
||||
|
||||
// Former Titans
|
||||
new(VL) { Species = 990, Shiny = Never, Level = 45, Location = 024, Size = 255, Ability = OnlyFirst, Nature = Nature.Naughty, IVs = new(30,30,30,30,30,30), Moves = new(229,442,282,707), IsTitan = true }, // Iron Treads
|
||||
};
|
||||
|
||||
private const string tradeSV = "tradesv";
|
||||
private static readonly string[][] TradeSV = Util.GetLanguageStrings10(tradeSV, "zh2");
|
||||
private static readonly string[][] TradeNames = Util.GetLanguageStrings10(tradeSV, "zh2");
|
||||
|
||||
internal static readonly EncounterTrade9[] TradeGift_SV =
|
||||
{
|
||||
new(SV, 872,10) { TID7 = 050724, IVs = new(31,18,13,20,28,26), OTGender = 0, Gender = 1, Nature = Nature.Bashful }, // Snom
|
||||
new(SV, 194,18) { Ability = OnlySecond, TID7 = 033081, IVs = new(27,18,25,13,16,31), OTGender = 1, Gender = 0, Nature = Nature.Relaxed }, // Wooper
|
||||
new(SV, 093,25) { Ability = OnlyFirst, TID7 = 016519, IVs = new(14,20,25,31,28,16), OTGender = 1, Gender = 1, Nature = Nature.Lonely, EvolveOnTrade = true }, // Haunter
|
||||
new(TradeNames, 00, SV, 872,10) { Ability = Any12, ID32 = 050724, IVs = new(31,18,13,20,28,26), OTGender = 0, Gender = 1, Nature = Nature.Bashful }, // Snom
|
||||
new(TradeNames, 01, SV, 194,18) { Ability = OnlySecond, ID32 = 033081, IVs = new(27,18,25,13,16,31), OTGender = 1, Gender = 0, Nature = Nature.Relaxed }, // Wooper
|
||||
new(TradeNames, 02, SV, 093,25) { Ability = OnlyFirst, ID32 = 016519, IVs = new(14,20,25,31,28,16), OTGender = 1, Gender = 1, Nature = Nature.Lonely, EvolveOnTrade = true }, // Haunter
|
||||
};
|
||||
|
||||
private static readonly EncounterTera9[] Tera = EncounterTera9.GetArray(Get("gem_paldea"));
|
||||
private static readonly EncounterDist9[] Dist = EncounterDist9.GetArray(Get("dist_paldea"));
|
||||
private static readonly EncounterMight9[] Might = EncounterMight9.GetArray(Get("might_paldea"));
|
||||
private static readonly EncounterFixed9[] Fixed = EncounterFixed9.GetArray(Get("fixed_paldea"));
|
||||
internal static readonly EncounterStatic[] StaticSL = ArrayUtil.ConcatAll<EncounterStatic>(GetEncounters(Encounter_SV, SL), Tera, Dist, Might, Fixed);
|
||||
internal static readonly EncounterStatic[] StaticVL = ArrayUtil.ConcatAll<EncounterStatic>(GetEncounters(Encounter_SV, VL), Tera, Dist, Might, Fixed);
|
||||
internal static readonly EncounterTera9[] Tera = EncounterTera9.GetArray(Get("gem_paldea"));
|
||||
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"));
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Enumerates encounter match quality.
|
||||
/// </summary>
|
||||
public enum EncounterMatchRating
|
||||
{
|
||||
/// <summary> Matches all data, no other matches will be better. </summary>
|
||||
Match,
|
||||
|
||||
/// <summary> Matches most data, might have a better match later. </summary>
|
||||
Deferred,
|
||||
|
||||
/// <summary> Matches most data, might have a better match later. Less preferred than <see cref="Deferred"/> due to small errors in secondary data. </summary>
|
||||
DeferredErrors,
|
||||
|
||||
/// <summary> Matches some data, but will likely have a better match later. </summary>
|
||||
PartialMatch,
|
||||
|
||||
/// <summary> Unused -- only used as an initial "max" value that anything else will be more suitable of a match. </summary>
|
||||
MaxNotMatch,
|
||||
}
|
|
@ -1,247 +0,0 @@
|
|||
using System;
|
||||
using static PKHeX.Core.Species;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Wild Encounter Slot data
|
||||
/// </summary>
|
||||
/// <remarks>Wild encounter slots are found as random encounters in-game.</remarks>
|
||||
public abstract record EncounterSlot(EncounterArea Area, ushort Species, byte Form, byte LevelMin, byte LevelMax) : IEncounterable, IEncounterMatch, IEncounterFormRandom
|
||||
{
|
||||
public abstract int Generation { get; }
|
||||
public abstract EntityContext Context { get; }
|
||||
public bool EggEncounter => false;
|
||||
public virtual bool IsShiny => false;
|
||||
|
||||
protected readonly EncounterArea Area = Area;
|
||||
public GameVersion Version => Area.Version;
|
||||
public int Location => Area.Location;
|
||||
public int EggLocation => 0;
|
||||
public virtual Ball FixedBall => Ball.None;
|
||||
public virtual Shiny Shiny => Shiny.Random;
|
||||
|
||||
public bool IsFixedLevel => LevelMin == LevelMax;
|
||||
public bool IsRandomLevel => LevelMin != LevelMax;
|
||||
|
||||
private protected const string wild = "Wild Encounter";
|
||||
public string Name => wild;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the specified level inputs are within range of the <see cref="LevelMin"/> and <see cref="LevelMax"/>
|
||||
/// </summary>
|
||||
/// <param name="lvl">Single level</param>
|
||||
/// <returns>True if within slot's range, false if impossible.</returns>
|
||||
public bool IsLevelWithinRange(int lvl) => LevelMin <= lvl && lvl <= LevelMax;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the specified level inputs are within range of the <see cref="LevelMin"/> and <see cref="LevelMax"/>
|
||||
/// </summary>
|
||||
/// <param name="min">Highest value the low end of levels can be</param>
|
||||
/// <param name="max">Lowest value the high end of levels can be</param>
|
||||
/// <returns>True if within slot's range, false if impossible.</returns>
|
||||
public bool IsLevelWithinRange(byte min, byte max) => LevelMin <= max && min <= LevelMax;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the specified level inputs are within range of the <see cref="LevelMin"/> and <see cref="LevelMax"/>
|
||||
/// </summary>
|
||||
/// <param name="lvl">Single level</param>
|
||||
/// <param name="minDecrease">Highest value the low end of levels can be</param>
|
||||
/// <param name="maxIncrease">Lowest value the high end of levels can be</param>
|
||||
/// <returns>True if within slot's range, false if impossible.</returns>
|
||||
public bool IsLevelWithinRange(int lvl, int minDecrease, int maxIncrease) => LevelMin - minDecrease <= lvl && lvl <= LevelMax + maxIncrease;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the specified level inputs are within range of the <see cref="LevelMin"/> and <see cref="LevelMax"/>
|
||||
/// </summary>
|
||||
/// <param name="min">Lowest level allowed</param>
|
||||
/// <param name="max">Highest level allowed</param>
|
||||
/// <param name="minDecrease">Highest value the low end of levels can be</param>
|
||||
/// <param name="maxIncrease">Lowest value the high end of levels can be</param>
|
||||
/// <returns>True if within slot's range, false if impossible.</returns>
|
||||
public bool IsLevelWithinRange(byte min, byte max, int minDecrease, int maxIncrease) => LevelMin - minDecrease <= max && min <= LevelMax + maxIncrease;
|
||||
|
||||
public virtual string LongName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Area.Type == SlotType.Any)
|
||||
return wild;
|
||||
return $"{wild} {Area.Type.ToString().Replace('_', ' ')}";
|
||||
}
|
||||
}
|
||||
|
||||
public PKM ConvertToPKM(ITrainerInfo tr) => ConvertToPKM(tr, EncounterCriteria.Unrestricted);
|
||||
|
||||
public PKM ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
|
||||
{
|
||||
var pk = GetBlank();
|
||||
tr.ApplyTo(pk);
|
||||
ApplyDetails(tr, criteria, pk);
|
||||
return pk;
|
||||
}
|
||||
|
||||
protected virtual PKM GetBlank() => EntityBlank.GetBlank(Generation, Version);
|
||||
|
||||
protected virtual void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
var version = this.GetCompatibleVersion((GameVersion) sav.Game);
|
||||
int lang = (int)Language.GetSafeLanguage(Generation, (LanguageID) sav.Language, version);
|
||||
int level = LevelMin;
|
||||
pk.Species = Species;
|
||||
pk.Form = GetWildForm(pk, Form, sav);
|
||||
pk.Language = lang;
|
||||
pk.CurrentLevel = level;
|
||||
pk.Version = (int)version;
|
||||
pk.Nickname = SpeciesName.GetSpeciesNameGeneration(Species, lang, Generation);
|
||||
|
||||
ApplyDetailsBall(pk);
|
||||
pk.Language = lang;
|
||||
pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;
|
||||
|
||||
SetMetData(pk, level, Location);
|
||||
SetPINGA(pk, criteria);
|
||||
SetEncounterMoves(pk, version, pk.CurrentLevel);
|
||||
|
||||
SetFormatSpecificData(pk);
|
||||
|
||||
if (pk.Format < 6)
|
||||
return;
|
||||
|
||||
sav.ApplyHandlingTrainerInfo(pk);
|
||||
if (pk is IScaledSize { HeightScalar: 0, WeightScalar: 0 } s)
|
||||
{
|
||||
s.HeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
s.WeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void ApplyDetailsBall(PKM pk)
|
||||
{
|
||||
var ball = FixedBall;
|
||||
pk.Ball = (int)(ball == Ball.None ? Ball.Poke : ball);
|
||||
}
|
||||
|
||||
protected virtual void SetEncounterMoves(PKM pk, GameVersion version, int level)
|
||||
{
|
||||
Span<ushort> moves = stackalloc ushort[4];
|
||||
var source = GameData.GetLearnSource(version);
|
||||
source.SetEncounterMoves(Species, Form, level, moves);
|
||||
pk.SetMoves(moves);
|
||||
pk.SetMaximumPPCurrent(moves);
|
||||
}
|
||||
|
||||
protected virtual void SetFormatSpecificData(PKM pk) { }
|
||||
|
||||
protected virtual void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(-1, pi);
|
||||
int nature = (int)criteria.GetNature(Nature.Random);
|
||||
var ability = criteria.GetAbilityFromNumber(Ability);
|
||||
|
||||
if (Generation == 3 && Species == (int)Unown)
|
||||
{
|
||||
do
|
||||
{
|
||||
PIDGenerator.SetRandomWildPID(pk, pk.Format, nature, ability, gender);
|
||||
ability ^= 1; // some nature-forms cannot have a certain PID-ability set, so just flip it as Unown doesn't have dual abilities.
|
||||
} while (pk.Form != Form);
|
||||
}
|
||||
else
|
||||
{
|
||||
PIDGenerator.SetRandomWildPID(pk, pk.Format, nature, ability, gender);
|
||||
}
|
||||
|
||||
pk.Gender = gender;
|
||||
pk.StatNature = nature;
|
||||
}
|
||||
|
||||
private void SetMetData(PKM pk, int level, int location)
|
||||
{
|
||||
if (pk.Format <= 2 && Version != GameVersion.C)
|
||||
return;
|
||||
|
||||
pk.Met_Location = location;
|
||||
pk.Met_Level = level;
|
||||
|
||||
if (pk.Format >= 4)
|
||||
pk.MetDate = DateOnly.FromDateTime(DateTime.Today);
|
||||
}
|
||||
|
||||
public bool IsRandomUnspecificForm => Form >= FormDynamic;
|
||||
private const int FormDynamic = FormVivillon;
|
||||
protected internal const byte FormVivillon = 30;
|
||||
protected internal const byte FormRandom = 31;
|
||||
|
||||
private static byte GetWildForm(PKM pk, byte form, ITrainerInfo sav)
|
||||
{
|
||||
if (form < FormDynamic) // specified form
|
||||
return form;
|
||||
|
||||
if (form == FormRandom) // flagged as totally random
|
||||
{
|
||||
if (pk.Species == (int)Minior)
|
||||
return (byte)Util.Rand.Next(7, 14);
|
||||
return (byte)Util.Rand.Next(pk.PersonalInfo.FormCount);
|
||||
}
|
||||
|
||||
ushort species = pk.Species;
|
||||
if (species is >= (int)Scatterbug and <= (int)Vivillon)
|
||||
{
|
||||
if (sav is IRegionOrigin o)
|
||||
return Vivillon3DS.GetPattern(o.Country, o.Region);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public virtual string GetConditionString(out bool valid)
|
||||
{
|
||||
valid = true;
|
||||
return LegalityCheckStrings.LEncCondition;
|
||||
}
|
||||
|
||||
public bool IsMatchExact(PKM pk, EvoCriteria evo) => true; // Matched by Area
|
||||
|
||||
public virtual EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
if (IsDeferredWurmple(pk))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
|
||||
if (pk.Format >= 5)
|
||||
{
|
||||
bool isHidden = pk.AbilityNumber == 4;
|
||||
if (isHidden && this.IsPartialMatchHidden(pk.Species, Species))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
if (IsDeferredHiddenAbility(isHidden))
|
||||
return EncounterMatchRating.Deferred;
|
||||
}
|
||||
|
||||
return EncounterMatchRating.Match;
|
||||
}
|
||||
|
||||
protected virtual HiddenAbilityPermission IsHiddenAbilitySlot() => HiddenAbilityPermission.Never;
|
||||
|
||||
public AbilityPermission Ability => IsHiddenAbilitySlot() switch
|
||||
{
|
||||
HiddenAbilityPermission.Never => AbilityPermission.Any12,
|
||||
HiddenAbilityPermission.Always => AbilityPermission.OnlyHidden,
|
||||
_ => AbilityPermission.Any12H,
|
||||
};
|
||||
|
||||
private bool IsDeferredWurmple(PKM pk) => Species == (int)Wurmple && pk.Species != (int)Wurmple && !WurmpleUtil.IsWurmpleEvoValid(pk);
|
||||
|
||||
private bool IsDeferredHiddenAbility(bool IsHidden) => IsHiddenAbilitySlot() switch
|
||||
{
|
||||
HiddenAbilityPermission.Never => IsHidden,
|
||||
HiddenAbilityPermission.Always => !IsHidden,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
protected enum HiddenAbilityPermission
|
||||
{
|
||||
Always,
|
||||
Never,
|
||||
Possible,
|
||||
}
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen1"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot1 : EncounterSlot, INumberedSlot
|
||||
{
|
||||
public override int Generation => 1;
|
||||
public override EntityContext Context => EntityContext.Gen1;
|
||||
public byte SlotNumber { get; }
|
||||
public override Ball FixedBall => Ball.Poke;
|
||||
|
||||
public EncounterSlot1(EncounterArea1 area, byte species, byte min, byte max, byte slot) : base(area, species, 0, min, max)
|
||||
{
|
||||
SlotNumber = slot;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
|
||||
var pk1 = (PK1)pk;
|
||||
if (Version == GameVersion.YW)
|
||||
{
|
||||
// Since we don't keep track of Yellow's Personal Data, just handle any differences here.
|
||||
pk1.Catch_Rate = Species switch
|
||||
{
|
||||
(int) Core.Species.Kadabra => 96,
|
||||
(int) Core.Species.Dragonair => 27,
|
||||
_ => (byte)PersonalTable.RB[Species].CatchRate,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
pk1.Catch_Rate = (byte)PersonalTable.RB[Species].CatchRate; // RB
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen2"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Referenced Area object contains Time data which is used for <see cref="GameVersion.C"/> origin data.
|
||||
/// </remarks>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot2 : EncounterSlot, INumberedSlot
|
||||
{
|
||||
public override int Generation => 2;
|
||||
public override EntityContext Context => EntityContext.Gen2;
|
||||
public byte SlotNumber { get; }
|
||||
public override Ball FixedBall => Ball.Poke;
|
||||
public bool IsHeadbutt => SlotType == SlotType.Headbutt;
|
||||
|
||||
public EncounterSlot2(EncounterArea2 area, byte species, byte min, byte max, byte slot) : base(area, species, species == 201 ? FormRandom : (byte)0, min, max)
|
||||
{
|
||||
SlotNumber = slot;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
|
||||
var pk2 = (PK2)pk;
|
||||
|
||||
if (IsHeadbutt)
|
||||
{
|
||||
var id = pk2.TID16;
|
||||
if (!IsTreeAvailable(id))
|
||||
{
|
||||
// Get a random TID that satisfies this slot.
|
||||
do { id = (ushort)Util.Rand.Next(); }
|
||||
while (!IsTreeAvailable(id));
|
||||
pk2.TID16 = id;
|
||||
}
|
||||
}
|
||||
|
||||
if (Version == GameVersion.C)
|
||||
pk2.Met_TimeOfDay = ((EncounterArea2)Area).Time.RandomValidTime();
|
||||
}
|
||||
|
||||
private static ReadOnlySpan<byte> TreeIndexes => new byte[]
|
||||
{
|
||||
02, 04, 05, 08, 11, 12, 14, 15, 18, 20, 21, 25, 26, 34, 37, 38, 39, 91, 92,
|
||||
};
|
||||
|
||||
private static ReadOnlySpan<int> Trees => new[]
|
||||
{
|
||||
0x3FF_3FF, // Route 29
|
||||
0x0FF_3FF, // Route 30
|
||||
0x3FE_3FF, // Route 31
|
||||
0x3EE_3FF, // Route 32
|
||||
0x240_3FF, // Route 33
|
||||
0x37F_3FF, // Azalea Town
|
||||
0x3FF_3FF, // Ilex Forest
|
||||
0x001_3FE, // Route 34
|
||||
0x261_3FF, // Route 35
|
||||
0x3FF_3FF, // Route 36
|
||||
0x2B9_3FF, // Route 37
|
||||
0x3FF_3FF, // Route 38
|
||||
0x184_3FF, // Route 39
|
||||
0x3FF_3FF, // Route 42
|
||||
0x3FF_3FF, // Route 43
|
||||
0x3FF_3FF, // Lake of Rage
|
||||
0x2FF_3FF, // Route 44
|
||||
0x200_1FF, // Route 26
|
||||
0x2BB_3FF, // Route 27
|
||||
};
|
||||
|
||||
public bool IsTreeAvailable(ushort trainerID)
|
||||
{
|
||||
var treeIndex = TreeIndexes.BinarySearch((byte)Location);
|
||||
if (treeIndex < 0)
|
||||
return false;
|
||||
var permissions = Trees[treeIndex];
|
||||
|
||||
var pivot = trainerID % 10;
|
||||
var type = Area.Type;
|
||||
return type switch
|
||||
{
|
||||
SlotType.Headbutt => (permissions & (1 << pivot)) != 0,
|
||||
/*special*/ _ => (permissions & (1 << (pivot + 12))) != 0,
|
||||
};
|
||||
}
|
||||
|
||||
// we have "Special" bitflag. Strip it out.
|
||||
public SlotType SlotType => Area.Type & (SlotType)0xF;
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen3"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public record EncounterSlot3 : EncounterSlot, IMagnetStatic, INumberedSlot, ISlotRNGType
|
||||
{
|
||||
public sealed override int Generation => 3;
|
||||
public override EntityContext Context => EntityContext.Gen3;
|
||||
|
||||
public byte StaticIndex { get; }
|
||||
public byte MagnetPullIndex { get; }
|
||||
public byte StaticCount { get; }
|
||||
public byte MagnetPullCount { get; }
|
||||
public SlotType Type => Area.Type;
|
||||
|
||||
public byte SlotNumber { get; }
|
||||
public override Ball FixedBall => Locations.IsSafariZoneLocation3(Location) ? Ball.Safari : Ball.None;
|
||||
|
||||
public EncounterSlot3(EncounterArea3 area, ushort species, byte form, byte min, byte max, byte slot, byte mpi, byte mpc, byte sti, byte stc) : base(area, species, form, min, max)
|
||||
{
|
||||
SlotNumber = slot;
|
||||
|
||||
MagnetPullIndex = mpi;
|
||||
MagnetPullCount = mpc;
|
||||
|
||||
StaticIndex = sti;
|
||||
StaticCount = stc;
|
||||
}
|
||||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
if (IsDeferredSafari3(pk.Ball == (int)Ball.Safari))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
return base.GetMatchRating(pk);
|
||||
}
|
||||
|
||||
private bool IsDeferredSafari3(bool IsSafariBall) => IsSafariBall != Locations.IsSafariZoneLocation3(Location);
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.XD"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot3PokeSpot : EncounterSlot, INumberedSlot, IFatefulEncounterReadOnly
|
||||
{
|
||||
public override int Generation => 3;
|
||||
public override EntityContext Context => EntityContext.Gen3;
|
||||
public bool FatefulEncounter => true;
|
||||
|
||||
public byte SlotNumber { get; }
|
||||
|
||||
public EncounterSlot3PokeSpot(EncounterArea3XD area, ushort species, byte min, byte max, byte slot) : base(area, species, 0, min, max)
|
||||
{
|
||||
SlotNumber = slot;
|
||||
}
|
||||
|
||||
// PokeSpot encounters always have Fateful Encounter set.
|
||||
protected override void SetFormatSpecificData(PKM pk) => pk.FatefulEncounter = true;
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(-1, pi);
|
||||
int nature = (int)criteria.GetNature(Nature.Random);
|
||||
int ability = criteria.GetAbilityFromNumber(0);
|
||||
PIDGenerator.SetRandomPokeSpotPID(pk, nature, gender, ability, SlotNumber);
|
||||
pk.Gender = gender;
|
||||
pk.StatNature = nature;
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.RSE"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Handled differently as these slots have fixed moves that are different from their normal level-up moves.
|
||||
/// </remarks>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
internal sealed record EncounterSlot3Swarm : EncounterSlot3, IMoveset
|
||||
{
|
||||
public Moveset Moves { get; }
|
||||
|
||||
public EncounterSlot3Swarm(EncounterArea3 area, ushort species, byte min, byte max, byte slot,
|
||||
Moveset moves) : base(area, species, 0, min, max, slot, 0, 0, 0, 0) => Moves = moves;
|
||||
|
||||
protected override void SetEncounterMoves(PKM pk, GameVersion version, int level)
|
||||
{
|
||||
pk.SetMoves(Moves);
|
||||
pk.SetMaximumPPCurrent(Moves);
|
||||
}
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen4"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot4 : EncounterSlot, IMagnetStatic, INumberedSlot, IGroundTypeTile, ISlotRNGType
|
||||
{
|
||||
public override int Generation => 4;
|
||||
public override EntityContext Context => EntityContext.Gen4;
|
||||
public GroundTileAllowed GroundTile => ((EncounterArea4)Area).GroundTile;
|
||||
|
||||
public byte StaticIndex { get; }
|
||||
public byte MagnetPullIndex { get; }
|
||||
public byte StaticCount { get; }
|
||||
public byte MagnetPullCount { get; }
|
||||
public SlotType Type => Area.Type;
|
||||
|
||||
public byte SlotNumber { get; }
|
||||
public override Ball FixedBall => GetRequiredBallValue();
|
||||
public bool CanUseRadar => !GameVersion.HGSS.Contains(Version) && GroundTile.HasFlag(GroundTileAllowed.Grass);
|
||||
|
||||
public EncounterSlot4(EncounterArea4 area, ushort species, byte form, byte min, byte max, byte slot, byte mpi, byte mpc, byte sti, byte stc) : base(area, species, form, min, max)
|
||||
{
|
||||
SlotNumber = slot;
|
||||
|
||||
MagnetPullIndex = mpi;
|
||||
MagnetPullCount = mpc;
|
||||
|
||||
StaticIndex = sti;
|
||||
StaticCount = stc;
|
||||
}
|
||||
|
||||
protected override void SetFormatSpecificData(PKM pk) => ((PK4)pk).GroundTile = GroundTile.GetIndex();
|
||||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
if ((pk.Ball == (int)Ball.Safari) != Locations.IsSafariZoneLocation4(Location))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
if ((pk.Ball == (int)Ball.Sport) != (Type == SlotType.BugContest))
|
||||
{
|
||||
// Nincada => Shedinja can wipe the ball back to Poke
|
||||
if (pk.Species != (int)Core.Species.Shedinja || pk.Ball != (int)Ball.Poke)
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
}
|
||||
return base.GetMatchRating(pk);
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
int ctr = 0;
|
||||
do
|
||||
{
|
||||
base.SetPINGA(pk, criteria);
|
||||
var pidiv = MethodFinder.Analyze(pk);
|
||||
var frames = FrameFinder.GetFrames(pidiv, pk);
|
||||
foreach (var frame in frames)
|
||||
{
|
||||
if (frame.IsSlotCompatibile(this, pk))
|
||||
return;
|
||||
}
|
||||
} while (ctr++ < 10_000);
|
||||
}
|
||||
|
||||
private Ball GetRequiredBallValue()
|
||||
{
|
||||
if (Type is SlotType.BugContest)
|
||||
return Ball.Sport;
|
||||
return Locations.IsSafariZoneLocation4(Location) ? Ball.Safari : Ball.None;
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen5"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot5 : EncounterSlot
|
||||
{
|
||||
public override int Generation => 5;
|
||||
public override EntityContext Context => EntityContext.Gen5;
|
||||
|
||||
public EncounterSlot5(EncounterArea5 area, ushort species, byte form, byte min, byte max) : base(area, species, form, min, max)
|
||||
{
|
||||
}
|
||||
|
||||
public bool IsHiddenGrotto => Area.Type == SlotType.HiddenGrotto;
|
||||
|
||||
protected override HiddenAbilityPermission IsHiddenAbilitySlot() => Area.Type == SlotType.HiddenGrotto ? HiddenAbilityPermission.Always : HiddenAbilityPermission.Never;
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.ORAS"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot6AO : EncounterSlot
|
||||
{
|
||||
public override int Generation => 6;
|
||||
public override EntityContext Context => EntityContext.Gen6;
|
||||
public bool CanDexNav => Area.Type != SlotType.Rock_Smash;
|
||||
public bool IsHorde => Area.Type == SlotType.Horde;
|
||||
|
||||
public bool Pressure { get; init; }
|
||||
public bool DexNav { get; init; }
|
||||
public bool WhiteFlute { get; init; }
|
||||
public bool BlackFlute { get; init; }
|
||||
|
||||
public EncounterSlot6AO(EncounterArea6AO area, ushort species, byte form, byte min, byte max) : base(area, species, form, min, max)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void SetFormatSpecificData(PKM pk)
|
||||
{
|
||||
var pk6 = (PK6)pk;
|
||||
if (CanDexNav)
|
||||
{
|
||||
var eggMoves = GetDexNavMoves();
|
||||
if (eggMoves.Length > 0)
|
||||
pk6.RelearnMove1 = eggMoves[Util.Rand.Next(eggMoves.Length)];
|
||||
}
|
||||
pk6.SetRandomMemory6();
|
||||
pk6.SetRandomEC();
|
||||
}
|
||||
|
||||
public override string GetConditionString(out bool valid)
|
||||
{
|
||||
valid = true;
|
||||
if (WhiteFlute) // Decreased Level Encounters
|
||||
return Pressure ? LegalityCheckStrings.LEncConditionWhiteLead : LegalityCheckStrings.LEncConditionWhite;
|
||||
if (BlackFlute) // Increased Level Encounters
|
||||
return Pressure ? LegalityCheckStrings.LEncConditionBlackLead : LegalityCheckStrings.LEncConditionBlack;
|
||||
if (DexNav)
|
||||
return LegalityCheckStrings.LEncConditionDexNav;
|
||||
|
||||
return Pressure ? LegalityCheckStrings.LEncConditionLead : LegalityCheckStrings.LEncCondition;
|
||||
}
|
||||
|
||||
protected override HiddenAbilityPermission IsHiddenAbilitySlot() => CanDexNav || IsHorde ? HiddenAbilityPermission.Possible : HiddenAbilityPermission.Never;
|
||||
|
||||
private ReadOnlySpan<ushort> GetDexNavMoves()
|
||||
{
|
||||
var et = EvolutionTree.Evolves6;
|
||||
var baby = et.GetBaseSpeciesForm(Species, Form);
|
||||
return LearnSource6AO.Instance.GetEggMoves(baby.Species, baby.Form);
|
||||
}
|
||||
|
||||
public bool CanBeDexNavMove(ushort move)
|
||||
{
|
||||
var baseEgg = GetDexNavMoves();
|
||||
return baseEgg.Contains(move);
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.XY"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot6XY : EncounterSlot
|
||||
{
|
||||
public override int Generation => 6;
|
||||
public override EntityContext Context => EntityContext.Gen6;
|
||||
public bool Pressure { get; init; }
|
||||
public bool IsFriendSafari => Area.Type == SlotType.FriendSafari;
|
||||
public bool IsHorde => Area.Type == SlotType.Horde;
|
||||
|
||||
public EncounterSlot6XY(EncounterArea6XY area, ushort species, byte form, byte min, byte max) : base(area, species, form, min, max)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void SetFormatSpecificData(PKM pk)
|
||||
{
|
||||
var pk6 = (PK6)pk;
|
||||
pk6.SetRandomMemory6();
|
||||
pk6.SetRandomEC();
|
||||
}
|
||||
|
||||
public override string GetConditionString(out bool valid)
|
||||
{
|
||||
valid = true;
|
||||
return Pressure ? LegalityCheckStrings.LEncConditionLead : LegalityCheckStrings.LEncCondition;
|
||||
}
|
||||
|
||||
public EncounterSlot6XY CreatePressureFormCopy(byte form) => this with {Form = form, Pressure = true};
|
||||
|
||||
protected override HiddenAbilityPermission IsHiddenAbilitySlot() => IsHorde || IsFriendSafari ? HiddenAbilityPermission.Possible : HiddenAbilityPermission.Never;
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen7"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot7 : EncounterSlot
|
||||
{
|
||||
public override int Generation => 7;
|
||||
public override EntityContext Context => EntityContext.Gen7;
|
||||
public bool IsSOS => Area.Type == SlotType.SOS;
|
||||
|
||||
public EncounterSlot7(EncounterArea7 area, ushort species, byte form, byte min, byte max) : base(area, species, form, min, max)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
pk.PID = Util.Rand32();
|
||||
pk.Nature = (int)criteria.GetNature(Nature.Random);
|
||||
pk.Gender = criteria.GetGender(-1, pi);
|
||||
criteria.SetRandomIVs(pk);
|
||||
|
||||
var num = Ability;
|
||||
if (IsSOS && pk.FlawlessIVCount < 2)
|
||||
num = 0; // let's fake it as an insufficient chain, no HA possible.
|
||||
var ability = criteria.GetAbilityFromNumber(num);
|
||||
pk.RefreshAbility(ability);
|
||||
pk.SetRandomEC();
|
||||
}
|
||||
|
||||
protected override HiddenAbilityPermission IsHiddenAbilitySlot() => IsSOS ? HiddenAbilityPermission.Possible : HiddenAbilityPermission.Never;
|
||||
|
||||
public override Ball FixedBall => Location == Locations.Pelago7 ? Ball.Poke : Ball.None;
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.GG"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot7b : EncounterSlot
|
||||
{
|
||||
public override int Generation => 7;
|
||||
public override EntityContext Context => EntityContext.Gen7b;
|
||||
|
||||
public EncounterSlot7b(EncounterArea7b area, ushort species, byte min, byte max) : base(area, species, 0, min, max)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
pk.SetRandomEC();
|
||||
var pb = (PB7)pk;
|
||||
pb.ResetHeight();
|
||||
pb.ResetWeight();
|
||||
pb.ResetCP();
|
||||
}
|
||||
}
|
|
@ -1,138 +0,0 @@
|
|||
using static PKHeX.Core.OverworldCorrelation8Requirement;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.SWSH"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot8 : EncounterSlot, IOverworldCorrelation8
|
||||
{
|
||||
public readonly AreaWeather8 Weather;
|
||||
public readonly AreaSlotType8 SlotType;
|
||||
public override string LongName => $"{wild} [{SlotType}] - {Weather.ToString().Replace("_", string.Empty)}";
|
||||
public override int Generation => 8;
|
||||
public override EntityContext Context => EntityContext.Gen8;
|
||||
|
||||
// Fishing are only from the hidden table (not symbol).
|
||||
public bool CanEncounterViaFishing => SlotType.CanEncounterViaFishing(Weather);
|
||||
public bool CanEncounterViaCurry
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!SlotType.CanEncounterViaCurry())
|
||||
return false;
|
||||
|
||||
if ((Weather & AreaWeather8.All) == 0)
|
||||
return false;
|
||||
|
||||
if (EncounterArea8.IsWildArea(Location))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public EncounterSlot8(EncounterArea8 area, ushort species, byte form, byte min, byte max, AreaWeather8 weather, AreaSlotType8 slotType) : base(area, species, form, min, max)
|
||||
{
|
||||
Weather = weather;
|
||||
SlotType = slotType;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
bool symbol = ((EncounterArea8)Area).PermitCrossover;
|
||||
var c = symbol ? EncounterCriteria.Unrestricted : criteria;
|
||||
if (!symbol && Location is 30 or 54 && (Weather & AreaWeather8.Fishing) == 0)
|
||||
((PK8)pk).RibbonMarkCurry = true;
|
||||
|
||||
base.ApplyDetails(sav, c, pk);
|
||||
if (Weather is AreaWeather8.Heavy_Fog && EncounterArea8.IsBoostedArea60Fog(Location))
|
||||
pk.CurrentLevel = pk.Met_Level = EncounterArea8.BoostLevel;
|
||||
|
||||
var req = GetRequirement(pk);
|
||||
if (req != MustHave)
|
||||
{
|
||||
pk.SetRandomEC();
|
||||
return;
|
||||
}
|
||||
// Don't bother honoring shiny state.
|
||||
Overworld8RNG.ApplyDetails(pk, c, Shiny.Random);
|
||||
}
|
||||
|
||||
public OverworldCorrelation8Requirement GetRequirement(PKM pk)
|
||||
{
|
||||
if (((EncounterArea8)Area).PermitCrossover)
|
||||
return MustHave; // symbol walking overworld
|
||||
|
||||
bool curry = pk is IRibbonSetMark8 {RibbonMarkCurry: true} || (pk.Species == (int)Core.Species.Shedinja && pk is IRibbonSetAffixed { AffixedRibbon:(int)RibbonIndex.MarkCurry});
|
||||
if (curry)
|
||||
return MustNotHave;
|
||||
|
||||
// Tree encounters are generated via the global seed, not the u32
|
||||
if ((Weather & AreaWeather8.Shaking_Trees) != 0)
|
||||
{
|
||||
// Some tree encounters are present in the regular encounters.
|
||||
return Weather == AreaWeather8.Shaking_Trees
|
||||
? MustNotHave
|
||||
: CanBeEither;
|
||||
}
|
||||
|
||||
return MustHave;
|
||||
}
|
||||
|
||||
public bool IsOverworldCorrelationCorrect(PKM pk)
|
||||
{
|
||||
var flawless = GetFlawlessIVCount(pk.Met_Level);
|
||||
return Overworld8RNG.ValidateOverworldEncounter(pk, flawless: flawless);
|
||||
}
|
||||
|
||||
private int GetFlawlessIVCount(int met)
|
||||
{
|
||||
const int none = 0;
|
||||
const int any023 = -1;
|
||||
|
||||
// Brilliant encounters are boosted to max level for the slot.
|
||||
if (met < LevelMax)
|
||||
return none;
|
||||
|
||||
var area = (EncounterArea8) Area;
|
||||
if (area.PermitCrossover)
|
||||
return any023; // Symbol
|
||||
if ((Weather & AreaWeather8.Fishing) != 0)
|
||||
return any023; // Fishing
|
||||
return none; // Hidden
|
||||
}
|
||||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
bool isHidden = pk.AbilityNumber == 4;
|
||||
if (isHidden && this.IsPartialMatchHidden(pk.Species, Species))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
|
||||
if (pk is IRibbonSetMark8 m)
|
||||
{
|
||||
if (m.RibbonMarkCurry && (Weather & AreaWeather8.All) == 0)
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
if (m.RibbonMarkFishing && (Weather & AreaWeather8.Fishing) == 0)
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
// Check if it has a mark and the weather does not permit the mark.
|
||||
// Tree/Fishing slots should be deferred here and are checked later.
|
||||
if (!Weather.IsMarkCompatible(m))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
// Galar Mine hidden encounters can only be found via Curry or Fishing.
|
||||
if (Location is (30 or 54) && SlotType is AreaSlotType8.HiddenMain && !m.RibbonMarkCurry && !SlotType.CanEncounterViaFishing(Weather))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
}
|
||||
|
||||
var req = GetRequirement(pk);
|
||||
return req switch
|
||||
{
|
||||
MustHave when !IsOverworldCorrelationCorrect(pk) => EncounterMatchRating.DeferredErrors,
|
||||
MustNotHave when IsOverworldCorrelationCorrect(pk) => EncounterMatchRating.DeferredErrors,
|
||||
_ => EncounterMatchRating.Match,
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.BDSP"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot8b : EncounterSlot
|
||||
{
|
||||
public override int Generation => 8;
|
||||
public override EntityContext Context => EntityContext.Gen8b;
|
||||
public bool IsUnderground => Area.Location is (>= 508 and <= 617);
|
||||
public bool IsMarsh => Area.Location is (>= 219 and <= 224);
|
||||
public override Ball FixedBall => IsMarsh ? Ball.Safari : Ball.None;
|
||||
|
||||
public EncounterSlot8b(EncounterArea8b area, ushort species, byte form, byte min, byte max) : base(area, species, form, min, max)
|
||||
{
|
||||
}
|
||||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
bool isHidden = pk.AbilityNumber == 4;
|
||||
if (isHidden && this.IsPartialMatchHidden(pk.Species, Species))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
return base.GetMatchRating(pk);
|
||||
}
|
||||
|
||||
protected override void SetFormatSpecificData(PKM pk)
|
||||
{
|
||||
if (IsUnderground)
|
||||
{
|
||||
if (GetBaseEggMove(out var move1))
|
||||
pk.RelearnMove1 = move1;
|
||||
}
|
||||
pk.SetRandomEC();
|
||||
}
|
||||
|
||||
public bool CanBeUndergroundMove(ushort move)
|
||||
{
|
||||
var et = PersonalTable.BDSP;
|
||||
var sf = et.GetFormEntry(Species, Form);
|
||||
var species = sf.HatchSpecies;
|
||||
var baseEgg = LearnSource8BDSP.Instance.GetEggMoves(species, 0);
|
||||
if (baseEgg.Length == 0)
|
||||
return move == 0;
|
||||
return baseEgg.Contains(move);
|
||||
}
|
||||
|
||||
public bool GetBaseEggMove(out ushort move)
|
||||
{
|
||||
var et = PersonalTable.BDSP;
|
||||
var sf = et.GetFormEntry(Species, Form);
|
||||
var species = sf.HatchSpecies;
|
||||
var baseEgg = LearnSource8BDSP.Instance.GetEggMoves(species, 0);
|
||||
if (baseEgg.Length == 0)
|
||||
{
|
||||
move = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Official method creates a new List<ushort>() with all the egg moves, removes all ignored, then picks a random index.
|
||||
// However, the "excluded egg moves" list was unreferenced in v1.0, so all egg moves are allowed.
|
||||
// We can't know which patch the encounter originated from, because they never added any new content.
|
||||
var rnd = Util.Rand;
|
||||
{
|
||||
var index = rnd.Next(baseEgg.Length);
|
||||
move = baseEgg[index];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanUseRadar => Area.Type is SlotType.Grass && !IsUnderground && !IsMarsh && Location switch
|
||||
{
|
||||
195 or 196 => false, // Oreburgh Mine
|
||||
203 or 204 or 205 or 208 or 209 or 210 or 211 or 212 or 213 or 214 or 215 => false, // Mount Coronet, 206/207 exterior
|
||||
>= 225 and <= 243 => false, // Solaceon Ruins
|
||||
244 or 245 or 246 or 247 or 248 or 249 => false, // Victory Road
|
||||
252 => false, // Ravaged Path
|
||||
255 or 256 => false, // Oreburgh Gate
|
||||
260 or 261 or 262 => false, // Stark Mountain, 259 exterior
|
||||
>= 264 and <= 284 => false, // Turnback Cave
|
||||
286 or 287 or 288 or 289 or 290 or 291 => false, // Snowpoint Temple
|
||||
292 or 293 => false, // Wayward Cave
|
||||
294 or 295 => false, // Ruin Maniac Cave
|
||||
296 => false, // Maniac Tunnel
|
||||
299 or 300 or 301 or 302 or 303 or 304 or 305 => false, // Iron Island, 298 exterior
|
||||
306 or 307 or 308 or 309 or 310 or 311 or 312 or 313 or 314 => false, // Old Chateau
|
||||
368 or 369 or 370 or 371 or 372 => false, // Route 209 (Lost Tower)
|
||||
_ => true,
|
||||
};
|
||||
|
||||
protected override HiddenAbilityPermission IsHiddenAbilitySlot() => CanUseRadar ? HiddenAbilityPermission.Possible : HiddenAbilityPermission.Never;
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
using static PKHeX.Core.AreaWeather9;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.SV"/>.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterSlot"/>
|
||||
public sealed record EncounterSlot9 : EncounterSlot
|
||||
{
|
||||
public override int Generation => 9;
|
||||
public override EntityContext Context => EntityContext.Gen9;
|
||||
public sbyte Gender { get; }
|
||||
public byte Time { get; } // disallow at time bit flag
|
||||
|
||||
public EncounterSlot9(EncounterArea9 area, ushort species, byte form, byte min, byte max, sbyte gender, byte time) : base(area, species, form, min, max)
|
||||
{
|
||||
Gender = gender;
|
||||
Time = time;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
|
||||
var pk9 = (PK9)pk;
|
||||
pk9.Obedience_Level = (byte)pk.Met_Level;
|
||||
var rand = new Xoroshiro128Plus(Util.Rand.Rand64());
|
||||
var type = Tera9RNG.GetTeraTypeFromPersonal(Species, Form, rand.Next());
|
||||
pk9.TeraTypeOriginal = (MoveType)type;
|
||||
if (criteria.TeraType != -1 && type != criteria.TeraType)
|
||||
pk9.SetTeraType(type); // sets the override type
|
||||
if (Gender != -1)
|
||||
pk.Gender = (byte)Gender;
|
||||
pk9.Scale = PokeSizeUtil.GetRandomScalar();
|
||||
if (Species == (int)Core.Species.Toxtricity)
|
||||
pk.Nature = ToxtricityUtil.GetRandomNature(ref rand, Form);
|
||||
pk9.EncryptionConstant = Util.Rand32();
|
||||
}
|
||||
|
||||
private static int GetTime(RibbonIndex mark) => mark switch
|
||||
{
|
||||
RibbonIndex.MarkLunchtime => 0,
|
||||
RibbonIndex.MarkSleepyTime => 1,
|
||||
RibbonIndex.MarkDusk => 2,
|
||||
RibbonIndex.MarkDawn => 3,
|
||||
_ => 4,
|
||||
};
|
||||
|
||||
public bool CanSpawnAtTime(RibbonIndex mark) => (Time & (1 << GetTime(mark))) == 0;
|
||||
|
||||
public bool CanSpawnInWeather(RibbonIndex mark)
|
||||
{
|
||||
if (AreaWeather.TryGetValue((byte)Area.Location, out var areaWeather))
|
||||
return areaWeather.IsMarkCompatible(mark);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Location IDs matched with possible weather types.
|
||||
/// </summary>
|
||||
internal static readonly Dictionary<byte, AreaWeather9> AreaWeather = new()
|
||||
{
|
||||
{ 6, Standard }, // South Province (Area One)
|
||||
{ 10, Standard }, // Pokémon League
|
||||
{ 12, Standard }, // South Province (Area Two)
|
||||
{ 14, Standard }, // South Province (Area Four)
|
||||
{ 16, Standard }, // South Province (Area Six)
|
||||
{ 18, Standard }, // South Province (Area Five)
|
||||
{ 20, Standard }, // South Province (Area Three)
|
||||
{ 22, Standard }, // West Province (Area One)
|
||||
{ 24, Sand }, // Asado Desert
|
||||
{ 26, Standard }, // West Province (Area Two)
|
||||
{ 28, Standard }, // West Province (Area Three)
|
||||
{ 30, Standard }, // Tagtree Thicket
|
||||
{ 32, Standard }, // East Province (Area Three)
|
||||
{ 34, Standard }, // East Province (Area One)
|
||||
{ 36, Standard }, // East Province (Area Two)
|
||||
{ 38, Snow }, // Glaseado Mountain (1)
|
||||
{ 40, Standard }, // Casseroya Lake
|
||||
{ 44, Standard }, // North Province (Area Three)
|
||||
{ 46, Standard }, // North Province (Area One)
|
||||
{ 48, Standard }, // North Province (Area Two)
|
||||
{ 50, Standard }, // Great Crater of Paldea
|
||||
{ 56, Standard }, // South Paldean Sea
|
||||
{ 58, Standard }, // West Paldean Sea
|
||||
{ 60, Standard }, // East Paldean Sea
|
||||
{ 62, Standard }, // North Paldean Sea
|
||||
{ 64, Inside }, // Inlet Grotto
|
||||
{ 67, Inside }, // Alfornada Cavern
|
||||
{ 69, Standard | Inside | Snow | Snow },// Dalizapa Passage (Near Medali, Tunnels, Near Pokémon Center, Near Zapico)
|
||||
{ 70, Standard }, // Poco Path
|
||||
{ 80, Standard }, // Cabo Poco
|
||||
{ 109, Standard }, // Socarrat Trail
|
||||
{ 124, Inside }, // Area Zero (5)
|
||||
};
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Encounter Slot found in <see cref="GameVersion.Gen7"/> (GO Park, <seealso cref="GameVersion.GG"/>).
|
||||
/// <inheritdoc cref="EncounterSlotGO" />
|
||||
/// </summary>
|
||||
public sealed record EncounterSlot7GO : EncounterSlotGO
|
||||
{
|
||||
public override int Generation => 7;
|
||||
public override EntityContext Context => EntityContext.Gen7b;
|
||||
public override Ball FixedBall => Ball.None; // GO Park can override the ball; obey capture rules for LGP/E
|
||||
|
||||
public EncounterSlot7GO(EncounterArea7g area, ushort species, byte form, int start, int end, Shiny shiny, Gender gender, PogoType type)
|
||||
: base(area, species, form, start, end, shiny, gender, type)
|
||||
{
|
||||
}
|
||||
|
||||
protected override PB7 GetBlank() => new();
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
var pb = (PB7) pk;
|
||||
pb.AwakeningSetAllTo(2);
|
||||
pk.SetRandomEC();
|
||||
pb.HeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
pb.WeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
pb.ResetHeight();
|
||||
pb.ResetWeight();
|
||||
pb.ResetCP();
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(-1, pi);
|
||||
int nature = (int)criteria.GetNature(Nature.Random);
|
||||
var ability = criteria.GetAbilityFromNumber(Ability);
|
||||
|
||||
pk.PID = Util.Rand32();
|
||||
pk.Nature = pk.StatNature = nature;
|
||||
pk.Gender = gender;
|
||||
pk.RefreshAbility(ability);
|
||||
pk.SetRandomIVsGO();
|
||||
base.SetPINGA(pk, criteria);
|
||||
}
|
||||
|
||||
protected override void SetEncounterMoves(PKM pk, GameVersion version, int level)
|
||||
{
|
||||
Span<ushort> moves = stackalloc ushort[4];
|
||||
ILearnSource source = LearnSource7GG.Instance;
|
||||
source.SetEncounterMoves(Species, Form, level, moves);
|
||||
pk.SetMoves(moves);
|
||||
pk.SetMaximumPPCurrent(moves);
|
||||
}
|
||||
}
|
|
@ -1,151 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Contains details about an encounter that can be found in <see cref="GameVersion.GO"/>.
|
||||
/// </summary>
|
||||
public abstract record EncounterSlotGO : EncounterSlot, IPogoSlot
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public int StartDate { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public int EndDate { get; }
|
||||
|
||||
public override Shiny Shiny { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public PogoType Type { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Gender Gender { get; }
|
||||
|
||||
public override bool IsShiny => Shiny.IsShiny();
|
||||
|
||||
public override Ball FixedBall => Type.GetValidBall();
|
||||
|
||||
protected EncounterSlotGO(EncounterArea area, ushort species, byte form, int start, int end, Shiny shiny, Gender gender, PogoType type) : base(area, species, form, type.GetMinLevel(), EncountersGO.MAX_LEVEL)
|
||||
{
|
||||
StartDate = start;
|
||||
EndDate = end;
|
||||
|
||||
Shiny = shiny;
|
||||
Gender = gender;
|
||||
Type = type;
|
||||
}
|
||||
|
||||
public sealed override string LongName
|
||||
{
|
||||
get
|
||||
{
|
||||
var init = $"{Name} ({Type})";
|
||||
if (StartDate == 0 && EndDate == 0)
|
||||
return init;
|
||||
return $"{init}: {GetDateString(StartDate)}-{GetDateString(EndDate)}";
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetDateString(int time) => time == 0 ? "X" : $"{GetDate(time):yyyy.MM.dd}";
|
||||
|
||||
private static DateOnly GetDate(int time)
|
||||
{
|
||||
var d = time & 0xFF;
|
||||
var m = (time >> 8) & 0xFF;
|
||||
var y = time >> 16;
|
||||
return new DateOnly(y, m, d);
|
||||
}
|
||||
|
||||
public bool IsWithinStartEnd(int stamp)
|
||||
{
|
||||
if (EndDate == 0)
|
||||
return StartDate <= stamp && GetDate(stamp) <= GetMaxDate();
|
||||
if (StartDate == 0)
|
||||
return stamp <= EndDate;
|
||||
return StartDate <= stamp && stamp <= EndDate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a split timestamp into a single integer.
|
||||
/// </summary>
|
||||
public static int GetTimeStamp(int year, int month, int day) => (year << 16) | (month << 8) | day;
|
||||
|
||||
private static DateOnly GetMaxDate() => DateOnly.FromDateTime(DateTime.UtcNow.AddHours(12)); // UTC+12 for Kiribati, no daylight savings
|
||||
|
||||
/// <summary>
|
||||
/// Gets a random date within the availability range.
|
||||
/// </summary>
|
||||
public DateOnly GetRandomValidDate()
|
||||
{
|
||||
if (StartDate == 0)
|
||||
return EndDate == 0 ? GetMaxDate() : GetDate(EndDate);
|
||||
|
||||
var start = GetDate(StartDate);
|
||||
if (EndDate == 0)
|
||||
return start;
|
||||
var end = GetDate(EndDate);
|
||||
return DateUtil.GetRandomDateWithin(start, end);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
if (StartDate != 0 || EndDate != 0)
|
||||
pk.MetDate = GetRandomValidDate();
|
||||
if (Gender != Gender.Random)
|
||||
pk.Gender = (int)Gender;
|
||||
pk.SetRandomIVsGO(Type.GetMinIV());
|
||||
}
|
||||
|
||||
public bool GetIVsAboveMinimum(PKM pk)
|
||||
{
|
||||
int min = Type.GetMinIV();
|
||||
if (min == 0)
|
||||
return true;
|
||||
return GetIVsAboveMinimum(pk, min);
|
||||
}
|
||||
|
||||
private static bool GetIVsAboveMinimum(PKM pk, int min)
|
||||
{
|
||||
if (pk.IV_ATK >> 1 < min) // ATK
|
||||
return false;
|
||||
if (pk.IV_DEF >> 1 < min) // DEF
|
||||
return false;
|
||||
return pk.IV_HP >> 1 >= min; // HP
|
||||
}
|
||||
|
||||
public bool GetIVsValid(PKM pk)
|
||||
{
|
||||
if (!GetIVsAboveMinimum(pk))
|
||||
return false;
|
||||
|
||||
// HP * 2 | 1 -> HP
|
||||
// ATK * 2 | 1 -> ATK&SPA
|
||||
// DEF * 2 | 1 -> DEF&SPD
|
||||
// Speed is random.
|
||||
|
||||
// All IVs must be odd (except speed) and equal to their counterpart.
|
||||
if ((pk.GetIV(1) & 1) != 1 || pk.GetIV(1) != pk.GetIV(4)) // ATK=SPA
|
||||
return false;
|
||||
if ((pk.GetIV(2) & 1) != 1 || pk.GetIV(2) != pk.GetIV(5)) // DEF=SPD
|
||||
return false;
|
||||
return (pk.GetIV(0) & 1) == 1; // HP
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
switch (Shiny)
|
||||
{
|
||||
case Shiny.Random when !pk.IsShiny && criteria.Shiny.IsShiny():
|
||||
case Shiny.Always when !pk.IsShiny: // Force Square
|
||||
var low = pk.PID & 0xFFFF;
|
||||
pk.PID = ((low ^ pk.TID16 ^ pk.SID16 ^ 0) << 16) | low;
|
||||
break;
|
||||
|
||||
case Shiny.Random when pk.IsShiny && !criteria.Shiny.IsShiny():
|
||||
case Shiny.Never when pk.IsShiny: // Force Not Shiny
|
||||
pk.PID ^= 0x1000_0000;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Stores details about <see cref="GameVersion.GO"/> encounters relevant for legality.
|
||||
/// </summary>
|
||||
public interface IPogoSlot
|
||||
{
|
||||
/// <summary> Start date the encounter became available. If zero, no date specified (unbounded start). </summary>
|
||||
int StartDate { get; }
|
||||
|
||||
/// <summary> Last day the encounter was available. If zero, no date specified (unbounded finish). </summary>
|
||||
/// <remarks> If there is no end date (yet), we'll try to clamp to a date in the near-future to prevent it from being open-ended. </remarks>
|
||||
int EndDate { get; }
|
||||
|
||||
/// <summary> Possibility of shiny for the encounter. </summary>
|
||||
Shiny Shiny { get; }
|
||||
|
||||
/// <summary> Method the Pokémon may be encountered with. </summary>
|
||||
PogoType Type { get; }
|
||||
|
||||
/// <summary> Gender the Pokémon may be encountered with. </summary>
|
||||
Gender Gender { get; }
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// <seealso cref="EncounterSlot"/> that contains information about what Index it is within the <seealso cref="EncounterArea"/>'s type-group of slots.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Useful for checking legality (if the RNG can yield this slot).
|
||||
/// </remarks>
|
||||
public interface INumberedSlot
|
||||
{
|
||||
/// <summary>
|
||||
/// Number Index of the <seealso cref="EncounterSlot"/>.
|
||||
/// </summary>
|
||||
byte SlotNumber { get; }
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Intermediary Representation of Dream World Data
|
||||
/// </summary>
|
||||
public readonly record struct DreamWorldEntry(ushort Species, byte Level, ushort Move1 = 0, ushort Move2 = 0, ushort Move3 = 0, byte Form = 0, sbyte Gender = -1)
|
||||
{
|
||||
private int EntryCount => Move1 == 0 ? 1 : Move2 == 0 ? 1 : Move3 == 0 ? 2 : 3;
|
||||
|
||||
private void AddTo(GameVersion game, EncounterStatic5[] result, ref int ctr)
|
||||
{
|
||||
var p = PersonalTable.B2W2[Species];
|
||||
var a = p.HasHiddenAbility ? AbilityPermission.OnlyHidden : AbilityPermission.OnlyFirst;
|
||||
if (Move1 == 0)
|
||||
{
|
||||
result[ctr++] = new EncounterStatic5(game)
|
||||
{
|
||||
Species = Species,
|
||||
Form = Form,
|
||||
Gender = Gender,
|
||||
Level = Level,
|
||||
Ability = a,
|
||||
Location = 075,
|
||||
Shiny = Shiny.Never,
|
||||
};
|
||||
return;
|
||||
}
|
||||
result[ctr++] = Create(game, a, Move1);
|
||||
if (Move2 == 0)
|
||||
return;
|
||||
result[ctr++] = Create(game, a, Move2);
|
||||
if (Move3 == 0)
|
||||
return;
|
||||
result[ctr++] = Create(game, a, Move3);
|
||||
}
|
||||
|
||||
private EncounterStatic5 Create(GameVersion game, AbilityPermission ability, ushort move) => new(game)
|
||||
{
|
||||
Species = Species,
|
||||
Form = Form,
|
||||
Gender = Gender,
|
||||
Level = Level,
|
||||
Ability = ability,
|
||||
Location = 075,
|
||||
Shiny = Shiny.Never,
|
||||
Moves = new(move),
|
||||
};
|
||||
|
||||
public static EncounterStatic5[] GetArray(GameVersion game, ReadOnlySpan<DreamWorldEntry> t)
|
||||
{
|
||||
// Split encounters with multiple permitted special moves -- a pk can only be obtained with 1 of the special moves!
|
||||
int count = 0;
|
||||
foreach (var e in t)
|
||||
count += e.EntryCount;
|
||||
var result = new EncounterStatic5[count];
|
||||
|
||||
int ctr = 0;
|
||||
foreach (var s in t)
|
||||
s.AddTo(game, result, ref ctr);
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -1,123 +0,0 @@
|
|||
using System;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 9 Fixed Spawn Encounter
|
||||
/// </summary>
|
||||
public sealed record EncounterFixed9 : EncounterStatic, IGemType
|
||||
{
|
||||
public override int Generation => 9;
|
||||
public override int Location => Location0;
|
||||
public override EntityContext Context => EntityContext.Gen9;
|
||||
public GemType TeraType { get; private init; }
|
||||
private byte Location0 { get; init; }
|
||||
private byte Location1 { get; init; }
|
||||
private byte Location2 { get; init; }
|
||||
private byte Location3 { get; init; }
|
||||
|
||||
private const int MinScaleStrongTera = 200; // [200,255]
|
||||
|
||||
public static EncounterFixed9[] GetArray(ReadOnlySpan<byte> data)
|
||||
{
|
||||
const int size = 0x14;
|
||||
var count = data.Length / size;
|
||||
var result = new EncounterFixed9[count];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
result[i] = ReadEncounter(data.Slice(i * size, size));
|
||||
return result;
|
||||
}
|
||||
|
||||
private EncounterFixed9() : base(GameVersion.SV) { }
|
||||
|
||||
private static EncounterFixed9 ReadEncounter(ReadOnlySpan<byte> data) => new()
|
||||
{
|
||||
Species = ReadUInt16LittleEndian(data),
|
||||
Form = data[0x02],
|
||||
Level = data[0x03],
|
||||
FlawlessIVCount = data[0x04],
|
||||
TeraType = (GemType)data[0x05],
|
||||
Gender = (sbyte)data[0x06],
|
||||
// 1 byte reserved
|
||||
Moves = new Moveset(
|
||||
ReadUInt16LittleEndian(data[0x08..]),
|
||||
ReadUInt16LittleEndian(data[0x0A..]),
|
||||
ReadUInt16LittleEndian(data[0x0C..]),
|
||||
ReadUInt16LittleEndian(data[0x0E..])),
|
||||
Location0 = data[0x10],
|
||||
Location1 = data[0x11],
|
||||
Location2 = data[0x12],
|
||||
Location3 = data[0x13],
|
||||
};
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
var metState = LocationsHOME.GetRemapState(Context, pk.Context);
|
||||
if (metState == LocationRemapState.Original)
|
||||
return IsMatchLocationExact(pk);
|
||||
if (metState == LocationRemapState.Remapped)
|
||||
return IsMatchLocationRemapped(pk);
|
||||
return IsMatchLocationExact(pk) || IsMatchLocationRemapped(pk);
|
||||
}
|
||||
|
||||
private bool IsMatchLocationRemapped(PKM pk)
|
||||
{
|
||||
var met = (ushort)pk.Met_Location;
|
||||
var version = pk.Version;
|
||||
if (pk.Context == EntityContext.Gen8)
|
||||
return LocationsHOME.IsValidMetSV(met, version);
|
||||
return LocationsHOME.GetMetSWSH((ushort)Location, version) == met;
|
||||
}
|
||||
|
||||
private bool IsMatchLocationExact(PKM pk)
|
||||
{
|
||||
var loc = pk.Met_Location;
|
||||
return loc == Location0 || loc == Location1 || loc == Location2 || loc == Location3;
|
||||
}
|
||||
|
||||
protected override bool IsMatchForm(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (Species is (int)Core.Species.Deerling or (int)Core.Species.Sawsbuck)
|
||||
return pk.Form <= 3;
|
||||
return base.IsMatchForm(pk, evo);
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (TeraType != GemType.Random && pk is ITeraType t && !Tera9RNG.IsMatchTeraType(TeraType, Species, Form, (byte)t.TeraTypeOriginal))
|
||||
return false;
|
||||
if (TeraType != 0)
|
||||
{
|
||||
if (pk is IScaledSize3 size3)
|
||||
{
|
||||
if (size3.Scale < MinScaleStrongTera)
|
||||
return false;
|
||||
}
|
||||
else if (pk is IScaledSize s2)
|
||||
{
|
||||
if (s2.HeightScalar < MinScaleStrongTera)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (FlawlessIVCount != 0 && pk.FlawlessIVCount < FlawlessIVCount)
|
||||
return false;
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
var pk9 = (PK9)pk;
|
||||
pk9.Obedience_Level = (byte)pk9.Met_Level;
|
||||
var type = Tera9RNG.GetTeraType(Util.Rand.Rand64(), TeraType, Species, Form);
|
||||
pk9.TeraTypeOriginal = (MoveType)type;
|
||||
if (criteria.TeraType != -1 && type != criteria.TeraType)
|
||||
pk9.SetTeraType(type); // sets the override type
|
||||
|
||||
pk9.HeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
pk9.WeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
pk9.Scale = TeraType != 0 ? (byte)(MinScaleStrongTera + Util.Rand.Next(byte.MaxValue - MinScaleStrongTera + 1)) : PokeSizeUtil.GetRandomScalar();
|
||||
}
|
||||
}
|
|
@ -1,328 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Static Encounter Data
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Static Encounters are fixed position encounters with properties that are not subject to Wild Encounter conditions.
|
||||
/// </remarks>
|
||||
public abstract record EncounterStatic(GameVersion Version) : IEncounterable, IMoveset, IEncounterMatch, IFatefulEncounterReadOnly
|
||||
{
|
||||
public ushort Species { get; init; }
|
||||
public byte Form { get; init; }
|
||||
public virtual byte Level { get; init; }
|
||||
public virtual byte LevelMin => Level;
|
||||
public virtual byte LevelMax => Level;
|
||||
public abstract int Generation { get; }
|
||||
public abstract EntityContext Context { get; }
|
||||
|
||||
public virtual int Location { get; init; }
|
||||
public AbilityPermission Ability { get; init; }
|
||||
public Shiny Shiny { get; init; }
|
||||
public Nature Nature { get; init; } = Nature.Random;
|
||||
public sbyte Gender { get; init; } = -1;
|
||||
|
||||
public ushort HeldItem { get; init; }
|
||||
public bool Gift { get; init; }
|
||||
public bool FatefulEncounter { get; init; }
|
||||
|
||||
public byte EggCycles { get; init; }
|
||||
public byte FlawlessIVCount { get; init; }
|
||||
public byte Ball { get; init; } = 4; // Only checked when is Gift
|
||||
|
||||
public int EggLocation { get; init; }
|
||||
|
||||
public Ball FixedBall => Gift ? (Ball)Ball : Core.Ball.None;
|
||||
|
||||
public Moveset Moves { get; init; }
|
||||
public IndividualValueSet IVs { get; init; }
|
||||
|
||||
public virtual bool EggEncounter => EggLocation != 0;
|
||||
|
||||
private const string _name = "Static Encounter";
|
||||
public string Name => _name;
|
||||
public string LongName => $"{_name} ({Version})";
|
||||
public bool IsShiny => Shiny.IsShiny();
|
||||
|
||||
protected virtual PKM GetBlank(ITrainerInfo tr) => EntityBlank.GetBlank(Generation, Version);
|
||||
|
||||
public PKM ConvertToPKM(ITrainerInfo tr) => ConvertToPKM(tr, EncounterCriteria.Unrestricted);
|
||||
|
||||
public PKM ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
|
||||
{
|
||||
var pk = GetBlank(tr);
|
||||
tr.ApplyTo(pk);
|
||||
|
||||
ApplyDetails(tr, criteria, pk);
|
||||
return pk;
|
||||
}
|
||||
|
||||
protected virtual void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
pk.EncryptionConstant = Util.Rand32();
|
||||
pk.Species = Species;
|
||||
pk.Form = Form;
|
||||
|
||||
var version = this.GetCompatibleVersion((GameVersion)tr.Game);
|
||||
int lang = (int)Language.GetSafeLanguage(Generation, (LanguageID)tr.Language, version);
|
||||
int level = GetMinimalLevel();
|
||||
|
||||
pk.Version = (int)version;
|
||||
pk.Language = lang = GetEdgeCaseLanguage(pk, lang);
|
||||
pk.Nickname = SpeciesName.GetSpeciesNameGeneration(Species, lang, Generation);
|
||||
|
||||
pk.CurrentLevel = level;
|
||||
ApplyDetailsBall(pk);
|
||||
pk.HeldItem = HeldItem;
|
||||
pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;
|
||||
|
||||
var today = DateTime.Today;
|
||||
SetMetData(pk, level, today);
|
||||
if (EggEncounter)
|
||||
SetEggMetData(pk, tr, today);
|
||||
|
||||
SetPINGA(pk, criteria);
|
||||
SetEncounterMoves(pk, version, level);
|
||||
|
||||
if (FatefulEncounter)
|
||||
pk.FatefulEncounter = true;
|
||||
|
||||
if (pk.Format < 6)
|
||||
return;
|
||||
|
||||
if (this is IRelearn relearn)
|
||||
pk.SetRelearnMoves(relearn.Relearn);
|
||||
|
||||
tr.ApplyHandlingTrainerInfo(pk);
|
||||
|
||||
if (pk is IScaledSize { HeightScalar: 0, WeightScalar: 0 } s)
|
||||
{
|
||||
s.HeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
s.WeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
}
|
||||
if (this is IGigantamaxReadOnly g && pk is PK8 pg)
|
||||
pg.CanGigantamax = g.CanGigantamax;
|
||||
if (this is IDynamaxLevelReadOnly d && pk is PK8 pd)
|
||||
pd.DynamaxLevel = d.DynamaxLevel;
|
||||
}
|
||||
|
||||
protected virtual void ApplyDetailsBall(PKM pk) => pk.Ball = Ball;
|
||||
|
||||
protected virtual int GetMinimalLevel() => LevelMin;
|
||||
|
||||
protected virtual void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(Gender, pi);
|
||||
int nature = (int)criteria.GetNature(Nature);
|
||||
int ability = criteria.GetAbilityFromNumber(Ability);
|
||||
|
||||
var pidtype = GetPIDType();
|
||||
PIDGenerator.SetRandomWildPID(pk, pk.Format, nature, ability, gender, pidtype);
|
||||
SetIVs(pk);
|
||||
pk.StatNature = pk.Nature;
|
||||
}
|
||||
|
||||
private void SetEggMetData(PKM pk, ITrainerInfo tr, DateTime today)
|
||||
{
|
||||
pk.Met_Location = Math.Max(0, EncounterSuggestion.GetSuggestedEggMetLocation(pk));
|
||||
pk.Met_Level = EncounterSuggestion.GetSuggestedEncounterEggMetLevel(pk);
|
||||
|
||||
if (Generation >= 4)
|
||||
{
|
||||
bool traded = (int)Version == tr.Game;
|
||||
pk.Egg_Location = EncounterSuggestion.GetSuggestedEncounterEggLocationEgg(Generation, Version, traded);
|
||||
pk.EggMetDate = DateOnly.FromDateTime(today);
|
||||
}
|
||||
pk.Egg_Location = EggLocation;
|
||||
pk.EggMetDate = DateOnly.FromDateTime(today);
|
||||
}
|
||||
|
||||
protected virtual void SetMetData(PKM pk, int level, DateTime today)
|
||||
{
|
||||
if (pk.Format <= 2)
|
||||
return;
|
||||
|
||||
pk.Met_Location = Location;
|
||||
pk.Met_Level = level;
|
||||
if (pk.Format >= 4)
|
||||
pk.MetDate = DateOnly.FromDateTime(today);
|
||||
}
|
||||
|
||||
protected virtual void SetEncounterMoves(PKM pk, GameVersion version, int level)
|
||||
{
|
||||
if (Moves.HasMoves)
|
||||
{
|
||||
pk.SetMoves(Moves);
|
||||
pk.SetMaximumPPCurrent(Moves);
|
||||
}
|
||||
else
|
||||
{
|
||||
Span<ushort> moves = stackalloc ushort[4];
|
||||
var source = GameData.GetLearnSource(version);
|
||||
source.SetEncounterMoves(Species, Form, level, moves);
|
||||
pk.SetMoves(moves);
|
||||
pk.SetMaximumPPCurrent(moves);
|
||||
}
|
||||
}
|
||||
|
||||
protected void SetIVs(PKM pk)
|
||||
{
|
||||
if (IVs.IsSpecified)
|
||||
pk.SetRandomIVsTemplate(IVs, FlawlessIVCount);
|
||||
else if (FlawlessIVCount > 0)
|
||||
pk.SetRandomIVs(minFlawless: FlawlessIVCount);
|
||||
}
|
||||
|
||||
private int GetEdgeCaseLanguage(PKM pk, int lang)
|
||||
{
|
||||
switch (this)
|
||||
{
|
||||
// Cannot trade between languages
|
||||
case IFixedGBLanguage { Language: EncounterGBLanguage.Japanese } when lang != 1:
|
||||
pk.OT_Name = "ゲーフリ";
|
||||
return (int)LanguageID.Japanese;
|
||||
case IFixedGBLanguage { Language: not EncounterGBLanguage.Japanese } when lang == 1:
|
||||
pk.OT_Name = "GF";
|
||||
return (int)LanguageID.English;
|
||||
|
||||
// E-Reader was only available to Japanese games.
|
||||
case EncounterStaticShadow { EReader: true } when lang != 1:
|
||||
// Old Sea Map was only distributed to Japanese games.
|
||||
case EncounterStatic3 { Species: (int)Core.Species.Mew } when lang != 1:
|
||||
pk.OT_Name = "ゲーフリ";
|
||||
return (int)LanguageID.Japanese;
|
||||
|
||||
// Deoxys for Emerald was not available for Japanese games.
|
||||
case EncounterStatic3 { Species: (ushort)Core.Species.Deoxys, Version: GameVersion.E } when lang == 1:
|
||||
pk.OT_Name = "GF";
|
||||
return (int)LanguageID.English;
|
||||
|
||||
default:
|
||||
return lang;
|
||||
}
|
||||
}
|
||||
|
||||
private PIDType GetPIDType()
|
||||
{
|
||||
switch (Generation)
|
||||
{
|
||||
case 3 when this is EncounterStatic3 {Roaming: true, Version: not GameVersion.E}: // Roamer IV glitch was fixed in Emerald
|
||||
return PIDType.Method_1_Roamer;
|
||||
case 4 when Shiny == Shiny.Always: // Lake of Rage Gyarados
|
||||
return PIDType.ChainShiny;
|
||||
case 4 when Species == (int)Core.Species.Pichu: // Spiky Eared Pichu
|
||||
case 4 when Location == Locations.PokeWalker4: // Pokéwalker
|
||||
return PIDType.Pokewalker;
|
||||
case 5 when Shiny == Shiny.Always:
|
||||
return PIDType.G5MGShiny;
|
||||
|
||||
default: return PIDType.None;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (Nature != Nature.Random && pk.Nature != (int) Nature)
|
||||
return false;
|
||||
|
||||
if (!IsMatchEggLocation(pk))
|
||||
return false;
|
||||
if (!IsMatchLocation(pk))
|
||||
return false;
|
||||
if (!IsMatchLevel(pk, evo))
|
||||
return false;
|
||||
if (!IsMatchGender(pk))
|
||||
return false;
|
||||
if (!IsMatchForm(pk, evo))
|
||||
return false;
|
||||
if (!IsMatchIVs(pk))
|
||||
return false;
|
||||
|
||||
if (this is IContestStatsReadOnly es && pk is IContestStatsReadOnly s && s.IsContestBelow(es))
|
||||
return false;
|
||||
|
||||
// Defer to EC/PID check
|
||||
// if (e.Shiny != null && e.Shiny != pk.IsShiny)
|
||||
// continue;
|
||||
|
||||
// Defer ball check to later
|
||||
// if (e.Gift && pk.Ball != 4) // PokéBall
|
||||
// continue;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsMatchIVs(PKM pk)
|
||||
{
|
||||
if (!IVs.IsSpecified)
|
||||
return true; // nothing to check, IVs are random
|
||||
if (Generation <= 2 && pk.Format > 2)
|
||||
return true; // IVs are regenerated on VC transfer upward
|
||||
|
||||
return Legal.GetIsFixedIVSequenceValidSkipRand(IVs, pk);
|
||||
}
|
||||
|
||||
protected virtual bool IsMatchForm(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
return Form == evo.Form || FormInfo.IsFormChangeable(Species, Form, pk.Form, Context, pk.Context);
|
||||
}
|
||||
|
||||
// override me if the encounter type has any eggs
|
||||
protected virtual bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
var expect = pk is PB8 ? Locations.Default8bNone : 0;
|
||||
return pk.Egg_Location == expect;
|
||||
}
|
||||
|
||||
private bool IsMatchGender(PKM pk)
|
||||
{
|
||||
if (Gender == -1 || Gender == pk.Gender)
|
||||
return true;
|
||||
|
||||
if (Species == (int) Core.Species.Azurill && Generation == 4 && Location == 233 && pk.Gender == 0)
|
||||
return EntityGender.GetFromPIDAndRatio(pk.PID, 0xBF) == 1;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected virtual bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (EggEncounter)
|
||||
return true;
|
||||
if (Location == 0)
|
||||
return true;
|
||||
if (!pk.HasOriginalMetLocation)
|
||||
return true;
|
||||
return Location == pk.Met_Location;
|
||||
}
|
||||
|
||||
protected virtual bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
return pk.Met_Level == Level;
|
||||
}
|
||||
|
||||
public virtual EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
if (IsMatchPartial(pk))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
return IsMatchDeferred(pk);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the provided <see cref="pk"/> might not be the best match, or even a bad match due to minor reasons.
|
||||
/// </summary>
|
||||
protected virtual EncounterMatchRating IsMatchDeferred(PKM pk) => EncounterMatchRating.Match;
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the provided <see cref="pk"/> is not an exact match due to minor reasons.
|
||||
/// </summary>
|
||||
protected virtual bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (pk is { Format: >= 5, AbilityNumber: 4 } && this.IsPartialMatchHidden(pk.Species, Species))
|
||||
return true;
|
||||
return pk.FatefulEncounter != FatefulEncounter;
|
||||
}
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 1 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public record EncounterStatic1 : EncounterStatic
|
||||
{
|
||||
public override int Generation => 1;
|
||||
public override EntityContext Context => EntityContext.Gen1;
|
||||
public sealed override byte Level { get; init; }
|
||||
|
||||
private const int LightBallPikachuCatchRate = 0xA3; // 163
|
||||
|
||||
public EncounterStatic1(byte species, byte level, GameVersion game) : base(game)
|
||||
{
|
||||
Species = species;
|
||||
Level = level;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
|
||||
var pk1 = (PK1) pk;
|
||||
if (Species == (int) Core.Species.Pikachu && Version == GameVersion.YW && Level == 5 && !Moves.HasMoves)
|
||||
{
|
||||
pk1.Catch_Rate = LightBallPikachuCatchRate; // Light Ball
|
||||
return;
|
||||
}
|
||||
|
||||
// Encounters can have different Catch Rates (RBG vs Y)
|
||||
var table = Version == GameVersion.YW ? PersonalTable.Y : PersonalTable.RB;
|
||||
pk1.Catch_Rate = (byte)table[Species].CatchRate;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
// Met Level is not stored in the PK1 format.
|
||||
// Check if it is at or above the encounter level.
|
||||
return Level <= evo.LevelMax;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
// Met Location is not stored in the PK1 format.
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!base.IsMatchExact(pk, evo))
|
||||
return false;
|
||||
|
||||
// Encounters with this version have to originate from the Japanese Blue game.
|
||||
if (!pk.Japanese && Version == GameVersion.BU)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (pk is not PK1 pk1)
|
||||
return false;
|
||||
if (ParseSettings.AllowGen1Tradeback && PK1.IsCatchRateHeldItem(pk1.Catch_Rate))
|
||||
return false;
|
||||
if (IsCatchRateValid(pk1))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsCatchRateValid(PK1 pk1)
|
||||
{
|
||||
var catch_rate = pk1.Catch_Rate;
|
||||
|
||||
// Light Ball (Yellow) starter
|
||||
if (Version == GameVersion.YW && Species == (int)Core.Species.Pikachu && Level == 5)
|
||||
{
|
||||
return catch_rate == LightBallPikachuCatchRate;
|
||||
}
|
||||
if (Version == GameVersion.Stadium)
|
||||
{
|
||||
// Amnesia Psyduck has different catch rates depending on language
|
||||
if (Species == (int)Core.Species.Psyduck)
|
||||
return catch_rate == (pk1.Japanese ? 167 : 168);
|
||||
return catch_rate is 167 or 168;
|
||||
}
|
||||
|
||||
// Encounters can have different Catch Rates (RBG vs Y)
|
||||
return GBRestrictions.RateMatchesEncounter(Species, Version, catch_rate);
|
||||
}
|
||||
}
|
|
@ -1,120 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Event data for Generation 1
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic1"/>
|
||||
public sealed record EncounterStatic1E : EncounterStatic1, IFixedGBLanguage
|
||||
{
|
||||
public EncounterGBLanguage Language { get; init; } = EncounterGBLanguage.Japanese;
|
||||
|
||||
/// <summary> Trainer name for the event. </summary>
|
||||
public string OT_Name { get; init; } = string.Empty;
|
||||
|
||||
public IReadOnlyList<string> OT_Names { get; init; } = Array.Empty<string>();
|
||||
|
||||
/// <summary> Trainer ID for the event. </summary>
|
||||
public ushort TID16 { get; init; } = UnspecifiedID;
|
||||
|
||||
public const ushort UnspecifiedID = 0;
|
||||
|
||||
public EncounterStatic1E(byte species, byte level, GameVersion game) : base(species, level, game)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!base.IsMatchExact(pk, evo))
|
||||
return false;
|
||||
|
||||
if (Language != EncounterGBLanguage.Any && pk.Japanese != (Language == EncounterGBLanguage.Japanese))
|
||||
return false;
|
||||
|
||||
// EC/PID check doesn't exist for these, so check Shiny state here.
|
||||
if (!IsShinyValid(pk))
|
||||
return false;
|
||||
|
||||
if (TID16 != UnspecifiedID && pk.TID16 != TID16)
|
||||
return false;
|
||||
|
||||
if (OT_Name.Length != 0)
|
||||
{
|
||||
if (pk.OT_Name != OT_Name)
|
||||
return false;
|
||||
}
|
||||
else if (OT_Names.Count != 0)
|
||||
{
|
||||
if (!OT_Names.Contains(pk.OT_Name))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsShinyValid(PKM pk) => Shiny switch
|
||||
{
|
||||
Shiny.Never => !pk.IsShiny,
|
||||
Shiny.Always => pk.IsShiny,
|
||||
_ => true,
|
||||
};
|
||||
|
||||
protected override PK1 GetBlank(ITrainerInfo tr) => Language switch
|
||||
{
|
||||
EncounterGBLanguage.Japanese => new(true),
|
||||
EncounterGBLanguage.International => new(),
|
||||
_ => new(tr.Language == 1),
|
||||
};
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
|
||||
if (Version == GameVersion.Stadium)
|
||||
{
|
||||
var pk1 = (PK1)pk;
|
||||
// Amnesia Psyduck has different catch rates depending on language
|
||||
if (Species == (int)Core.Species.Psyduck)
|
||||
pk1.Catch_Rate = pk1.Japanese ? (byte)167 : (byte)168;
|
||||
else
|
||||
pk1.Catch_Rate = Util.Rand.Next(2) == 0 ? (byte)167 : (byte)168;
|
||||
}
|
||||
|
||||
if (TID16 != UnspecifiedID)
|
||||
pk.TID16 = TID16;
|
||||
|
||||
if (OT_Name.Length != 0)
|
||||
pk.OT_Name = OT_Name;
|
||||
else if (OT_Names.Count != 0)
|
||||
pk.OT_Name = OT_Names[Util.Rand.Next(OT_Names.Count)];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Exposes info on language restriction for Gen1/2.
|
||||
/// </summary>
|
||||
public interface IFixedGBLanguage
|
||||
{
|
||||
/// <summary>
|
||||
/// Language restriction for the encounter template.
|
||||
/// </summary>
|
||||
EncounterGBLanguage Language { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generations 1 & 2 cannot communicate between Japanese & International versions.
|
||||
/// </summary>
|
||||
public enum EncounterGBLanguage
|
||||
{
|
||||
/// <summary> Can only be obtained in Japanese games. </summary>
|
||||
Japanese,
|
||||
|
||||
/// <summary> Can only be obtained in International (not Japanese) games. </summary>
|
||||
International,
|
||||
|
||||
/// <summary> Can be obtained in any localization. </summary>
|
||||
Any,
|
||||
}
|
|
@ -1,144 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 2 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public record EncounterStatic2 : EncounterStatic
|
||||
{
|
||||
public sealed override int Generation => 2;
|
||||
public override EntityContext Context => EntityContext.Gen2;
|
||||
public sealed override byte Level { get; init; }
|
||||
|
||||
public EncounterStatic2(byte species, byte level, GameVersion game) : base(game)
|
||||
{
|
||||
Species = species;
|
||||
Level = level;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (Shiny == Shiny.Always && !pk.IsShiny)
|
||||
return false;
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
if (pk.Format > 2)
|
||||
return true;
|
||||
|
||||
if (pk.IsEgg)
|
||||
{
|
||||
if (!EggEncounter)
|
||||
return false;
|
||||
if (pk.Met_Location != 0 && pk.Met_Level != 0)
|
||||
return false;
|
||||
if (pk.OT_Friendship > EggCycles) // Dizzy Punch eggs start with below-normal hatch counters.
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (pk.Met_Level)
|
||||
{
|
||||
case 0 when pk.Met_Location != 0:
|
||||
return false;
|
||||
case 1: // 0 = second floor of every Pokémon Center, valid
|
||||
return true;
|
||||
default:
|
||||
if (pk.Met_Location == 0 && pk.Met_Level != 0)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk is ICaughtData2 {CaughtData: not 0})
|
||||
return pk.Met_Level == (EggEncounter ? 1 : Level);
|
||||
|
||||
return Level <= evo.LevelMax;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (EggEncounter)
|
||||
return true;
|
||||
if (Location == 0)
|
||||
return true;
|
||||
if (pk is ICaughtData2 c2)
|
||||
{
|
||||
if (c2.CaughtData is not 0)
|
||||
return Location == pk.Met_Location;
|
||||
if (pk.Species == (int)Core.Species.Celebi)
|
||||
return false; // Cannot reset the Met data
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk) => false;
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
var pk2 = (PK2)pk;
|
||||
if (Shiny == Shiny.Always)
|
||||
pk2.SetShiny();
|
||||
}
|
||||
|
||||
protected override void SetMetData(PKM pk, int level, DateTime today)
|
||||
{
|
||||
if (Version != GameVersion.C && pk.OT_Gender != 1)
|
||||
return;
|
||||
var pk2 = (PK2)pk;
|
||||
pk2.Met_Location = Location;
|
||||
pk2.Met_Level = level;
|
||||
pk2.Met_TimeOfDay = EncounterTime.Any.RandomValidTime();
|
||||
}
|
||||
}
|
||||
|
||||
public sealed record EncounterStatic2Odd : EncounterStatic2
|
||||
{
|
||||
public EncounterStatic2Odd(byte species) : base(species, 5, GameVersion.C)
|
||||
{
|
||||
EggLocation = 256;
|
||||
EggCycles = 20;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
// Let it get picked up as regular EncounterEgg under other conditions.
|
||||
if (pk.Format > 2)
|
||||
return false;
|
||||
if (!pk.HasMove((int)Move.DizzyPunch))
|
||||
return false;
|
||||
if (pk.IsEgg && pk.EXP != 125)
|
||||
return false;
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed record EncounterStatic2Roam : EncounterStatic2
|
||||
{
|
||||
// Routes 29-46, except 40 & 41; total 16.
|
||||
// 02, 04, 05, 08, 11, 15, 18, 20,
|
||||
// 21, 25, 26, 34, 37, 39, 43, 45,
|
||||
private const ulong RoamLocations = 0b10_1000_1010_0100_0000_0110_0011_0100_1000_1001_0011_0100;
|
||||
public override int Location => 2;
|
||||
|
||||
public EncounterStatic2Roam(byte species, byte level, GameVersion ver) : base(species, level, ver) { }
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (!pk.HasOriginalMetLocation)
|
||||
return true;
|
||||
// Gen2 met location is always u8
|
||||
var loc = pk.Met_Location;
|
||||
return loc <= 45 && ((RoamLocations & (1UL << loc)) != 0);
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Event data for Generation 2
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic2"/>
|
||||
public sealed record EncounterStatic2E : EncounterStatic2, IFixedGBLanguage
|
||||
{
|
||||
public EncounterGBLanguage Language { get; init; } = EncounterGBLanguage.Japanese;
|
||||
|
||||
/// <summary> Trainer name for the event. </summary>
|
||||
public string OT_Name { get; init; } = string.Empty;
|
||||
|
||||
public IReadOnlyList<string> OT_Names { get; init; } = Array.Empty<string>();
|
||||
|
||||
private const ushort UnspecifiedID = 0;
|
||||
|
||||
/// <summary> Trainer ID for the event. </summary>
|
||||
public ushort TID16 { get; init; } = UnspecifiedID;
|
||||
|
||||
public bool IsGift => TID16 != UnspecifiedID;
|
||||
|
||||
public int CurrentLevel { get; init; } = -1;
|
||||
|
||||
public EncounterStatic2E(byte species, byte level, GameVersion ver) : base(species, level, ver)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!base.IsMatchExact(pk, evo))
|
||||
return false;
|
||||
|
||||
if (Language != EncounterGBLanguage.Any && pk.Japanese != (Language == EncounterGBLanguage.Japanese))
|
||||
return false;
|
||||
|
||||
if (CurrentLevel != -1 && CurrentLevel > pk.CurrentLevel)
|
||||
return false;
|
||||
|
||||
// EC/PID check doesn't exist for these, so check Shiny state here.
|
||||
if (!IsShinyValid(pk))
|
||||
return false;
|
||||
|
||||
if (EggEncounter && !pk.IsEgg)
|
||||
return true;
|
||||
|
||||
// Check OT Details
|
||||
if (TID16 != UnspecifiedID && pk.TID16 != TID16)
|
||||
return false;
|
||||
|
||||
if (OT_Name.Length != 0)
|
||||
{
|
||||
if (pk.OT_Name != OT_Name)
|
||||
return false;
|
||||
}
|
||||
else if (OT_Names.Count != 0)
|
||||
{
|
||||
if (!OT_Names.Contains(pk.OT_Name))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsShinyValid(PKM pk) => Shiny switch
|
||||
{
|
||||
Shiny.Never => !pk.IsShiny,
|
||||
Shiny.Always => pk.IsShiny,
|
||||
_ => true,
|
||||
};
|
||||
|
||||
protected override int GetMinimalLevel() => CurrentLevel == -1 ? base.GetMinimalLevel() : CurrentLevel;
|
||||
|
||||
protected override PK2 GetBlank(ITrainerInfo tr) => Language switch
|
||||
{
|
||||
EncounterGBLanguage.Japanese => new(true),
|
||||
EncounterGBLanguage.International => new(),
|
||||
_ => new(tr.Language == 1),
|
||||
};
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
if (CurrentLevel != -1) // Restore met level
|
||||
pk.Met_Level = LevelMin;
|
||||
|
||||
if (TID16 != UnspecifiedID)
|
||||
pk.TID16 = TID16;
|
||||
if (IsGift)
|
||||
pk.OT_Gender = 0;
|
||||
|
||||
if (OT_Name.Length != 0)
|
||||
pk.OT_Name = OT_Name;
|
||||
else if (OT_Names.Count != 0)
|
||||
pk.OT_Name = OT_Names[Util.Rand.Next(OT_Names.Count)];
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 3 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic3 : EncounterStatic
|
||||
{
|
||||
public override int Generation => 3;
|
||||
public override EntityContext Context => EntityContext.Gen3;
|
||||
public bool Roaming { get; init; }
|
||||
|
||||
public EncounterStatic3(ushort species, byte level, GameVersion game) : base(game)
|
||||
{
|
||||
Species = species;
|
||||
Level = level;
|
||||
}
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
if (pk.Format == 3)
|
||||
return !pk.IsEgg || EggLocation == 0 || EggLocation == pk.Met_Location;
|
||||
return base.IsMatchEggLocation(pk);
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk.Format != 3) // Met Level lost on PK3=>PK4
|
||||
return Level <= evo.LevelMax;
|
||||
|
||||
if (EggEncounter)
|
||||
return pk is { Met_Level: 0, CurrentLevel: >= 5 }; // met level 0, origin level 5
|
||||
|
||||
return pk.Met_Level == Level;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (EggEncounter)
|
||||
return true;
|
||||
if (pk.Format != 3)
|
||||
return true; // transfer location verified later
|
||||
|
||||
var met = pk.Met_Location;
|
||||
if (!Roaming)
|
||||
return Location == met;
|
||||
|
||||
// Route 101-138
|
||||
if (Version <= GameVersion.E)
|
||||
return met is >= 16 and <= 49;
|
||||
// Route 1-25 encounter is possible either in grass or on water
|
||||
return met is >= 101 and <= 125;
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (Gift && pk.Ball != Ball)
|
||||
return true;
|
||||
return base.IsMatchPartial(pk);
|
||||
}
|
||||
|
||||
protected override void SetMetData(PKM pk, int level, DateTime today)
|
||||
{
|
||||
pk.Met_Level = level;
|
||||
pk.Met_Location = !Roaming ? Location : (Version <= GameVersion.E ? 16 : 101);
|
||||
}
|
||||
}
|
|
@ -1,150 +0,0 @@
|
|||
using System;
|
||||
using static PKHeX.Core.GroundTileAllowed;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic4(GameVersion Version) : EncounterStatic(Version), IGroundTypeTile
|
||||
{
|
||||
public override int Generation => 4;
|
||||
public override EntityContext Context => EntityContext.Gen4;
|
||||
|
||||
/// <summary> Indicates if the encounter is a Roamer (variable met location) </summary>
|
||||
public bool Roaming { get; init; }
|
||||
|
||||
/// <summary> <see cref="PK4.GroundTile"/> values permitted for the encounter. </summary>
|
||||
public GroundTileAllowed GroundTile { get; init; } = None;
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (!Roaming)
|
||||
return base.IsMatchLocation(pk);
|
||||
|
||||
// Met location is lost on transfer
|
||||
if (pk is not G4PKM pk4)
|
||||
return true;
|
||||
|
||||
return pk4.GroundTile switch
|
||||
{
|
||||
GroundTileType.Grass => IsMatchLocationGrass(Location, pk4.Met_Location),
|
||||
GroundTileType.Water => IsMatchLocationWater(Location, pk4.Met_Location),
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
private static bool IsMatchLocationGrass(int location, int met) => location switch
|
||||
{
|
||||
FirstS => IsMatchRoamerLocation(PermitGrassS, met, FirstS),
|
||||
FirstJ => IsMatchRoamerLocation(PermitGrassJ, met, FirstJ),
|
||||
FirstH => IsMatchRoamerLocation(PermitGrassH, met, FirstH),
|
||||
_ => false,
|
||||
};
|
||||
|
||||
private static bool IsMatchLocationWater(int location, int met) => location switch
|
||||
{
|
||||
FirstS => IsMatchRoamerLocation(PermitWaterS, met, FirstS),
|
||||
FirstJ => IsMatchRoamerLocation(PermitWaterJ, met, FirstJ),
|
||||
FirstH => IsMatchRoamerLocation(PermitWaterH, met, FirstH),
|
||||
_ => false,
|
||||
};
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
if (!EggEncounter)
|
||||
return base.IsMatchEggLocation(pk);
|
||||
|
||||
var eggloc = pk.Egg_Location;
|
||||
// Transferring 4->5 clears Pt/HG/SS location value and keeps Faraway Place
|
||||
if (pk is not G4PKM pk4)
|
||||
{
|
||||
if (eggloc == Locations.LinkTrade4)
|
||||
return true;
|
||||
var cmp = Locations.IsPtHGSSLocationEgg(EggLocation) ? Locations.Faraway4 : EggLocation;
|
||||
return eggloc == cmp;
|
||||
}
|
||||
|
||||
if (!pk4.IsEgg) // hatched
|
||||
return eggloc == EggLocation || eggloc == Locations.LinkTrade4;
|
||||
|
||||
// Unhatched:
|
||||
if (eggloc != EggLocation)
|
||||
return false;
|
||||
if (pk4.Met_Location is not (0 or Locations.LinkTrade4))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
SanityCheckVersion(pk);
|
||||
}
|
||||
|
||||
private void SanityCheckVersion(PKM pk)
|
||||
{
|
||||
// Unavailable encounters in DP, morph them to Pt so they're legal.
|
||||
switch (Species)
|
||||
{
|
||||
case (int)Core.Species.Darkrai when Location == 079: // DP Darkrai
|
||||
case (int)Core.Species.Shaymin when Location == 063: // DP Shaymin
|
||||
pk.Version = (int)GameVersion.Pt;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk.Format != 4) // Met Level lost on PK4=>PK5
|
||||
return Level <= evo.LevelMax;
|
||||
|
||||
return pk.Met_Level == (EggEncounter ? 0 : Level);
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (Gift && pk.Ball != Ball)
|
||||
return true;
|
||||
return base.IsMatchPartial(pk);
|
||||
}
|
||||
|
||||
protected override void SetMetData(PKM pk, int level, DateTime today)
|
||||
{
|
||||
var pk4 = (PK4)pk;
|
||||
pk4.GroundTile = Roaming ? GroundTileType.Grass : GroundTile.GetIndex();
|
||||
pk.Met_Location = Location;
|
||||
pk.Met_Level = level;
|
||||
pk.MetDate = DateOnly.FromDateTime(today);
|
||||
}
|
||||
|
||||
public static bool IsMatchRoamerLocation(ulong permit, int location, int first)
|
||||
{
|
||||
var value = location - first;
|
||||
if ((uint)value >= 64)
|
||||
return false;
|
||||
return (permit & (1ul << value)) != 0;
|
||||
}
|
||||
|
||||
public static bool IsMatchRoamerLocation(uint permit, int location, int first)
|
||||
{
|
||||
var value = location - first;
|
||||
if ((uint)value >= 32)
|
||||
return false;
|
||||
return (permit & (1u << value)) != 0;
|
||||
}
|
||||
|
||||
// Merged all locations into a bitmask for quick computation.
|
||||
private const int FirstS = 16;
|
||||
private const ulong PermitGrassS = 0x2_8033FFFF; // 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 47, 49,
|
||||
private const ulong PermitWaterS = 0x2_803E3B9E; // 18, 19, 20, 23, 24, 25, 27, 28, 29, 33, 34, 35, 36, 37, 47, 49,
|
||||
|
||||
private const int FirstJ = 177;
|
||||
private const uint PermitGrassJ = 0x0003E7FF; // 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 190, 191, 192, 193, 194,
|
||||
private const uint PermitWaterJ = 0x0001E06E; // 178, 179, 180, 182, 183, 190, 191, 192, 193,
|
||||
|
||||
private const int FirstH = 149;
|
||||
private const uint PermitGrassH = 0x0AB3FFFF; // 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 169, 170, 172, 174, 176,
|
||||
private const uint PermitWaterH = 0x0ABC1B28; // 152, 154, 157, 158, 160, 161, 167, 168, 169, 170, 172, 174, 176,
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
using System;
|
||||
using static System.Buffers.Binary.BinaryPrimitives;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Pokéwalker Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic4Pokewalker : EncounterStatic
|
||||
{
|
||||
public override int Generation => 4;
|
||||
public override EntityContext Context => EntityContext.Gen4;
|
||||
public PokewalkerCourse4 Course { get; }
|
||||
|
||||
public EncounterStatic4Pokewalker(ReadOnlySpan<byte> data, PokewalkerCourse4 course) : base(GameVersion.HGSS)
|
||||
{
|
||||
Species = ReadUInt16LittleEndian(data);
|
||||
Level = data[2];
|
||||
Gender = (sbyte)data[3];
|
||||
Course = course;
|
||||
var move1 = ReadUInt16LittleEndian(data[0x4..]);
|
||||
var move2 = ReadUInt16LittleEndian(data[0x6..]);
|
||||
var move3 = ReadUInt16LittleEndian(data[0x8..]);
|
||||
var move4 = ReadUInt16LittleEndian(data[0xA..]);
|
||||
Moves = new(move1, move2, move3, move4);
|
||||
|
||||
// All obtained entities are in Poke Ball and have a met location of "PokeWalker"
|
||||
Gift = true;
|
||||
Location = Locations.PokeWalker4;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (pk.Format == 4)
|
||||
return Location == pk.Met_Location;
|
||||
return true; // transfer location verified later
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk.Format != 4) // Met Level lost on PK4=>PK5
|
||||
return Level <= evo.LevelMax;
|
||||
|
||||
return pk.Met_Level == Level;
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (pk.Ball != 4)
|
||||
return true;
|
||||
return base.IsMatchPartial(pk);
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(Gender, pi);
|
||||
int nature = (int)criteria.GetNature(Nature.Random);
|
||||
|
||||
// Cannot force an ability; nature-gender-trainerID only yield fixed PIDs.
|
||||
// int ability = criteria.GetAbilityFromNumber(Ability, pi);
|
||||
|
||||
PIDGenerator.SetRandomPIDPokewalker(pk, nature, gender);
|
||||
criteria.SetRandomIVs(pk);
|
||||
}
|
||||
|
||||
public static EncounterStatic4Pokewalker[] GetAll(ReadOnlySpan<byte> data)
|
||||
{
|
||||
const int size = 0xC;
|
||||
var count = data.Length / size;
|
||||
System.Diagnostics.Debug.Assert(count == 6 * (int)PokewalkerCourse4.MAX_COUNT);
|
||||
var result = new EncounterStatic4Pokewalker[count];
|
||||
for (int i = 0; i < result.Length; i++)
|
||||
{
|
||||
var offset = i * size;
|
||||
var slice = data[offset..];
|
||||
var course = (PokewalkerCourse4)(i / 6);
|
||||
result[i] = new(slice, course);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public enum PokewalkerCourse4 : byte
|
||||
{
|
||||
RefreshingField = 0,
|
||||
NoisyForest = 1,
|
||||
RuggedRoad = 2,
|
||||
BeautifulBeach = 3,
|
||||
SuburbanArea = 4,
|
||||
DimCave = 5,
|
||||
BlueLake = 6,
|
||||
TownOutskirts = 7,
|
||||
HoennField = 8,
|
||||
WarmBeach = 9,
|
||||
VolcanoPath = 10,
|
||||
Treehouse = 11,
|
||||
ScaryCave = 12,
|
||||
SinnohField = 13,
|
||||
IcyMountainRoad = 14,
|
||||
BigForest = 15,
|
||||
WhiteLake = 16,
|
||||
StormyBeach = 17,
|
||||
Resort = 18,
|
||||
QuietCave = 19,
|
||||
BeyondTheSea = 20,
|
||||
NightSkysEdge = 21,
|
||||
YellowForest = 22,
|
||||
Rally = 23, // JPN Exclusive
|
||||
Sightseeing = 24, // JPN/KOR Exclusive
|
||||
WinnersPath = 25,
|
||||
AmityMeadow = 26, // JPN Exclusive
|
||||
MAX_COUNT = 27,
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 5 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public record EncounterStatic5(GameVersion Version) : EncounterStatic(Version)
|
||||
{
|
||||
public sealed override int Generation => 5;
|
||||
public override EntityContext Context => EntityContext.Gen5;
|
||||
public bool Roaming { get; init; }
|
||||
public bool IsWildCorrelationPID => !Roaming && Shiny == Shiny.Random && Species != (int)Core.Species.Crustle;
|
||||
|
||||
public bool EntreeForestDreamWorld => Location == 75;
|
||||
|
||||
protected sealed override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
// BW/2 Jellicent collision with wild surf slot, resolved by duplicating the encounter with any abil
|
||||
if (Ability == AbilityPermission.OnlyHidden && pk.AbilityNumber != 4 && pk.Format <= 7)
|
||||
return true;
|
||||
return base.IsMatchPartial(pk);
|
||||
}
|
||||
|
||||
protected sealed override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (!Roaming)
|
||||
return base.IsMatchLocation(pk);
|
||||
return IsRoamerMet(pk.Met_Location);
|
||||
}
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
if (!EggEncounter)
|
||||
return base.IsMatchEggLocation(pk);
|
||||
|
||||
var eggloc = pk.Egg_Location;
|
||||
if (!pk.IsEgg) // hatched
|
||||
return eggloc == EggLocation || eggloc == Locations.LinkTrade5;
|
||||
|
||||
// Unhatched:
|
||||
if (eggloc != EggLocation)
|
||||
return false;
|
||||
if (pk.Met_Location is not (0 or Locations.LinkTrade5))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 25,26,27,28, // Route 12, 13, 14, 15 Night latter half
|
||||
// 15,16,31, // Route 2, 3, 18 Morning
|
||||
// 17,18,29, // Route 4, 5, 16 Daytime
|
||||
// 19,20,21, // Route 6, 7, 8 Evening
|
||||
// 22,23,24, // Route 9, 10, 11 Night former half
|
||||
private static bool IsRoamerMet(int location)
|
||||
{
|
||||
if ((uint)location >= 32)
|
||||
return false;
|
||||
return (0b10111111111111111000000000000000 & (1 << location)) != 0;
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 5 Dream Radar gift encounters
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic5DR : EncounterStatic5
|
||||
{
|
||||
public EncounterStatic5DR(ushort species, byte form, AbilityPermission ability = AbilityPermission.OnlyHidden) : base(GameVersion.B2W2)
|
||||
{
|
||||
Species = species;
|
||||
Form = form;
|
||||
Ability = ability;
|
||||
Location = 30015;
|
||||
Gift = true;
|
||||
Ball = 25;
|
||||
Level = 5; // to 40
|
||||
Shiny = Shiny.Never;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
// Level from 5->40 depends on the number of badges
|
||||
var met = pk.Met_Level;
|
||||
if (met % 5 != 0)
|
||||
return false;
|
||||
return (uint) (met - 5) <= 35; // 5 <= x <= 40
|
||||
}
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 5 Static Encounter from N
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
internal sealed record EncounterStatic5N : EncounterStatic5
|
||||
{
|
||||
public readonly uint PID;
|
||||
public const bool NSparkle = true;
|
||||
|
||||
internal EncounterStatic5N(uint pid) : base(GameVersion.B2W2)
|
||||
{
|
||||
Shiny = Shiny.FixedValue;
|
||||
PID = pid;
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
int gender = criteria.GetGender(EntityGender.GetFromPID(Species, PID), pk.PersonalInfo);
|
||||
int nature = (int)Nature;
|
||||
int ability = Ability.IsSingleValue(out var index) ? index : 0;
|
||||
|
||||
pk.PID = PID;
|
||||
pk.Gender = gender;
|
||||
SetIVs(pk);
|
||||
|
||||
pk.Nature = nature;
|
||||
pk.RefreshAbility(ability);
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (PID != pk.PID)
|
||||
return false;
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
SetNPokemonData((PK5)pk, pk.Language);
|
||||
}
|
||||
|
||||
private static void SetNPokemonData(PK5 pk5, int lang)
|
||||
{
|
||||
pk5.IV_HP = pk5.IV_ATK = pk5.IV_DEF = pk5.IV_SPA = pk5.IV_SPD = pk5.IV_SPE = 30;
|
||||
pk5.NSparkle = NSparkle;
|
||||
pk5.OT_Name = GetOT(lang);
|
||||
pk5.ID32 = 00002;
|
||||
}
|
||||
|
||||
public static string GetOT(int lang) => lang == (int)LanguageID.Japanese ? "N" : "N";
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 6 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic6(GameVersion Version) : EncounterStatic(Version), IContestStatsReadOnly
|
||||
{
|
||||
public override int Generation => 6;
|
||||
public override EntityContext Context => EntityContext.Gen6;
|
||||
|
||||
public byte CNT_Cool { get; init; }
|
||||
public byte CNT_Beauty { get; init; }
|
||||
public byte CNT_Cute { get; init; }
|
||||
public byte CNT_Smart { get; init; }
|
||||
public byte CNT_Tough { get; init; }
|
||||
public byte CNT_Sheen { get; init; }
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (base.IsMatchLocation(pk))
|
||||
return true;
|
||||
|
||||
if (Species != (int) Core.Species.Pikachu)
|
||||
return false;
|
||||
|
||||
// Cosplay Pikachu is given from multiple locations
|
||||
var loc = pk.Met_Location;
|
||||
return loc is 180 or 186 or 194;
|
||||
}
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
if (!EggEncounter)
|
||||
return base.IsMatchEggLocation(pk);
|
||||
|
||||
var eggloc = pk.Egg_Location;
|
||||
if (!pk.IsEgg) // hatched
|
||||
return eggloc == EggLocation || eggloc == Locations.LinkTrade6;
|
||||
|
||||
// Unhatched:
|
||||
if (eggloc != EggLocation)
|
||||
return false;
|
||||
if (pk.Met_Location is not (0 or Locations.LinkTrade6))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
var pk6 = (PK6)pk;
|
||||
this.CopyContestStatsTo(pk6);
|
||||
pk6.SetRandomMemory6();
|
||||
pk6.SetRandomEC();
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 7 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic7(GameVersion Version) : EncounterStatic(Version), IRelearn, IEncounterFormRandom
|
||||
{
|
||||
public override int Generation => 7;
|
||||
public override EntityContext Context => EntityContext.Gen7;
|
||||
public Moveset Relearn { get; init; }
|
||||
|
||||
public bool IsTotem => FormInfo.IsTotemForm(Species, Form);
|
||||
public bool IsTotemNoTransfer => Species is (int)Core.Species.Marowak or (int)Core.Species.Araquanid or (int)Core.Species.Togedemaru or (int)Core.Species.Ribombee;
|
||||
public int GetTotemBaseForm() => FormInfo.GetTotemBaseForm(Species, Form);
|
||||
|
||||
public bool IsRandomUnspecificForm => Form >= FormDynamic;
|
||||
private const int FormDynamic = FormVivillon;
|
||||
internal const int FormVivillon = 30;
|
||||
//protected const int FormRandom = 31;
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (EggLocation == Locations.Daycare5 && !Relearn.HasMoves && pk.RelearnMove1 != 0) // Gift Eevee edge case
|
||||
return false;
|
||||
return base.IsMatchLocation(pk);
|
||||
}
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
if (!EggEncounter)
|
||||
return base.IsMatchEggLocation(pk);
|
||||
|
||||
var eggloc = pk.Egg_Location;
|
||||
if (!pk.IsEgg) // hatched
|
||||
return eggloc == EggLocation || eggloc == Locations.LinkTrade6;
|
||||
|
||||
// Unhatched:
|
||||
if (eggloc != EggLocation)
|
||||
return false;
|
||||
if (pk.Met_Location is not (0 or Locations.LinkTrade6))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool IsMatchForm(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (IsRandomUnspecificForm)
|
||||
return true;
|
||||
|
||||
if (IsTotem)
|
||||
{
|
||||
var expectForm = pk.Format == 7 ? Form : FormInfo.GetTotemBaseForm(Species, Form);
|
||||
return expectForm == evo.Form;
|
||||
}
|
||||
return base.IsMatchForm(pk, evo);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
if (Species == (int)Core.Species.Magearna && pk is IRibbonSetEvent4 e4)
|
||||
e4.RibbonWishing = true;
|
||||
if (Form == FormVivillon && pk is PK7 pk7)
|
||||
pk.Form = Vivillon3DS.GetPattern(pk7.Country, pk7.Region);
|
||||
pk.SetRandomEC();
|
||||
}
|
||||
|
||||
internal static EncounterStatic7 GetVC1(ushort species, byte metLevel)
|
||||
{
|
||||
bool mew = species == (int)Core.Species.Mew;
|
||||
return new EncounterStatic7(GameVersion.RBY)
|
||||
{
|
||||
Species = species,
|
||||
Gift = true, // Forces Poké Ball
|
||||
Ability = TransporterLogic.IsHiddenDisallowedVC1(species) ? AbilityPermission.OnlyFirst : AbilityPermission.OnlyHidden, // Hidden by default, else first
|
||||
Shiny = mew ? Shiny.Never : Shiny.Random,
|
||||
FatefulEncounter = mew,
|
||||
Location = Locations.Transfer1,
|
||||
Level = metLevel,
|
||||
FlawlessIVCount = mew ? (byte)5 : (byte)3,
|
||||
};
|
||||
}
|
||||
|
||||
internal static EncounterStatic7 GetVC2(ushort species, byte metLevel)
|
||||
{
|
||||
bool mew = species == (int)Core.Species.Mew;
|
||||
bool fateful = mew || species == (int)Core.Species.Celebi;
|
||||
return new EncounterStatic7(GameVersion.GSC)
|
||||
{
|
||||
Species = species,
|
||||
Gift = true, // Forces Poké Ball
|
||||
Ability = TransporterLogic.IsHiddenDisallowedVC2(species) ? AbilityPermission.OnlyFirst : AbilityPermission.OnlyHidden, // Hidden by default, else first
|
||||
Shiny = mew ? Shiny.Never : Shiny.Random,
|
||||
FatefulEncounter = fateful,
|
||||
Location = Locations.Transfer2,
|
||||
Level = metLevel,
|
||||
FlawlessIVCount = fateful ? (byte)5 : (byte)3,
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 7 Static Encounter (<see cref="GameVersion.GG"/>
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic7b(GameVersion Version) : EncounterStatic(Version)
|
||||
{
|
||||
public override int Generation => 7;
|
||||
public override EntityContext Context => EntityContext.Gen7b;
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
pk.SetRandomEC();
|
||||
var pb = (PB7)pk;
|
||||
pb.ResetHeight();
|
||||
pb.ResetWeight();
|
||||
pb.ResetCP();
|
||||
}
|
||||
}
|
|
@ -1,136 +0,0 @@
|
|||
using static PKHeX.Core.OverworldCorrelation8Requirement;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 8 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic8(GameVersion Version = GameVersion.SWSH) : EncounterStatic(Version), IDynamaxLevelReadOnly, IGigantamaxReadOnly, IRelearn, IOverworldCorrelation8
|
||||
{
|
||||
public override int Generation => 8;
|
||||
public override EntityContext Context => EntityContext.Gen8;
|
||||
public bool ScriptedNoMarks { get; init; }
|
||||
public bool CanGigantamax { get; init; }
|
||||
public byte DynamaxLevel { get; init; }
|
||||
public Moveset Relearn { get; init; }
|
||||
public Crossover8 Crossover { get; init; }
|
||||
|
||||
public AreaWeather8 Weather { get; init; } = AreaWeather8.Normal;
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
var met = pk.Met_Location;
|
||||
if (met == Location)
|
||||
return true;
|
||||
if ((uint)met > byte.MaxValue)
|
||||
return false;
|
||||
return Crossover.IsMatchLocation((byte)met);
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
var met = pk.Met_Level;
|
||||
var lvl = Level;
|
||||
if (met == lvl)
|
||||
return true;
|
||||
if (lvl < EncounterArea8.BoostLevel && EncounterArea8.IsBoostedArea60(Location))
|
||||
return met == EncounterArea8.BoostLevel;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk is PK8 d && d.DynamaxLevel < DynamaxLevel)
|
||||
return false;
|
||||
if (pk.Met_Level < EncounterArea8.BoostLevel && Weather is AreaWeather8.Heavy_Fog && EncounterArea8.IsBoostedArea60Fog(Location))
|
||||
return false;
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
if (Weather is AreaWeather8.Heavy_Fog && EncounterArea8.IsBoostedArea60Fog(Location))
|
||||
pk.CurrentLevel = pk.Met_Level = EncounterArea8.BoostLevel;
|
||||
|
||||
var req = GetRequirement(pk);
|
||||
if (req != MustHave)
|
||||
{
|
||||
pk.SetRandomEC();
|
||||
return;
|
||||
}
|
||||
var shiny = Shiny == Shiny.Random ? Shiny.FixedValue : Shiny;
|
||||
Overworld8RNG.ApplyDetails(pk, criteria, shiny, FlawlessIVCount);
|
||||
}
|
||||
|
||||
public bool IsOverworldCorrelation
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Gift)
|
||||
return false; // gifts can have any 128bit seed from overworld
|
||||
if (ScriptedNoMarks)
|
||||
return false; // scripted encounters don't act as saved spawned overworld encounters
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public OverworldCorrelation8Requirement GetRequirement(PKM pk) => IsOverworldCorrelation
|
||||
? MustHave
|
||||
: MustNotHave;
|
||||
|
||||
public bool IsOverworldCorrelationCorrect(PKM pk)
|
||||
{
|
||||
return Overworld8RNG.ValidateOverworldEncounter(pk, Shiny == Shiny.Random ? Shiny.FixedValue : Shiny, FlawlessIVCount);
|
||||
}
|
||||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
var rating = base.GetMatchRating(pk);
|
||||
if (rating != EncounterMatchRating.Match)
|
||||
return rating;
|
||||
|
||||
var req = GetRequirement(pk);
|
||||
bool correlation = IsOverworldCorrelationCorrect(pk);
|
||||
if ((req == MustHave) != correlation)
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
// Only encounter slots can have these marks; defer for collisions.
|
||||
if (pk.Species == (int) Core.Species.Shedinja)
|
||||
{
|
||||
// Loses Mark on evolution to Shedinja, but not affixed ribbon value.
|
||||
return pk switch
|
||||
{
|
||||
IRibbonSetMark8 {RibbonMarkCurry: true} => EncounterMatchRating.DeferredErrors,
|
||||
PK8 {AffixedRibbon: (int) RibbonIndex.MarkCurry} => EncounterMatchRating.Deferred,
|
||||
_ => EncounterMatchRating.Match,
|
||||
};
|
||||
}
|
||||
|
||||
if (pk is IRibbonSetMark8 m && (m.RibbonMarkCurry || m.RibbonMarkFishing || m.HasWeatherMark()))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
return EncounterMatchRating.Match;
|
||||
}
|
||||
}
|
||||
|
||||
public interface IOverworldCorrelation8
|
||||
{
|
||||
OverworldCorrelation8Requirement GetRequirement(PKM pk);
|
||||
bool IsOverworldCorrelationCorrect(PKM pk);
|
||||
}
|
||||
|
||||
public enum OverworldCorrelation8Requirement
|
||||
{
|
||||
CanBeEither,
|
||||
MustHave,
|
||||
MustNotHave,
|
||||
}
|
||||
|
||||
public readonly record struct Crossover8(byte L1 = 0, byte L2 = 0, byte L3 = 0, byte L4 = 0, byte L5 = 0, byte L6 = 0, byte L7 = 0)
|
||||
{
|
||||
public bool IsMatchLocation(byte location) => location != 0 && L1 != 0 && (
|
||||
location == L1 || location == L2 || location == L3 ||
|
||||
location == L4 || location == L5 || location == L6 || location == L7);
|
||||
}
|
|
@ -1,120 +0,0 @@
|
|||
using System;
|
||||
using static PKHeX.Core.Encounters8Nest;
|
||||
using static PKHeX.Core.AbilityPermission;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 8 Nest Encounter (Raid)
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public abstract record EncounterStatic8Nest<T>(GameVersion Version) : EncounterStatic(Version), IGigantamaxReadOnly, IDynamaxLevelReadOnly where T : EncounterStatic8Nest<T>
|
||||
{
|
||||
public sealed override int Generation => 8;
|
||||
public override EntityContext Context => EntityContext.Gen8;
|
||||
public static Func<PKM, T, bool>? VerifyCorrelation { private get; set; }
|
||||
public static Action<PKM, T, EncounterCriteria>? GenerateData { private get; set; }
|
||||
|
||||
public bool CanGigantamax { get; init; }
|
||||
public byte DynamaxLevel { get; init; }
|
||||
public override int Location { get => SharedNest; init { } }
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk is PK8 d && d.DynamaxLevel < DynamaxLevel)
|
||||
return false;
|
||||
|
||||
// Required Ability
|
||||
if (Ability == OnlyHidden && pk.AbilityNumber != 4)
|
||||
return false; // H
|
||||
|
||||
if (Version != GameVersion.SWSH && pk.Version != (int)Version && pk.Met_Location != SharedNest)
|
||||
return false;
|
||||
|
||||
if (VerifyCorrelation != null && !VerifyCorrelation(pk, (T)this))
|
||||
return false;
|
||||
|
||||
if (pk is IRibbonSetMark8 { HasMarkEncounter8: true })
|
||||
return false;
|
||||
if (pk.Species == (int)Core.Species.Shedinja && pk is IRibbonSetAffixed { AffixedRibbon: >= (int)RibbonIndex.MarkLunchtime })
|
||||
return false;
|
||||
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
|
||||
protected sealed override EncounterMatchRating IsMatchDeferred(PKM pk)
|
||||
{
|
||||
if (Ability != Any12H)
|
||||
{
|
||||
// HA-Only is a strict match. Ability Capsule and Patch can potentially change these.
|
||||
var num = pk.AbilityNumber;
|
||||
if (num == 4)
|
||||
{
|
||||
if (Ability is not OnlyHidden && !AbilityVerifier.CanAbilityPatch(8, PersonalTable.SWSH.GetFormEntry(Species, Form), pk.Species))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
}
|
||||
else if (Ability.IsSingleValue(out int index) && 1 << index != num) // Fixed regular ability
|
||||
{
|
||||
if (Ability is OnlyFirst or OnlySecond && !AbilityVerifier.CanAbilityCapsule(8, PersonalTable.SWSH.GetFormEntry(Species, Form)))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
}
|
||||
}
|
||||
|
||||
return base.IsMatchDeferred(pk);
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (pk is PK8 and IGigantamax g && g.CanGigantamax != CanGigantamax && !g.CanToggleGigantamax(pk.Species, pk.Form, Species, Form))
|
||||
return true;
|
||||
if (Species == (int)Core.Species.Alcremie && pk is IFormArgument { FormArgument: not 0 })
|
||||
return true;
|
||||
if (Species == (int)Core.Species.Runerigus && pk is IFormArgument { FormArgument: not 0 })
|
||||
return true;
|
||||
|
||||
switch (Shiny)
|
||||
{
|
||||
case Shiny.Never when pk.IsShiny:
|
||||
case Shiny.Always when !pk.IsShiny:
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.IsMatchPartial(pk);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
if (GenerateData == null)
|
||||
pk.SetRandomEC();
|
||||
}
|
||||
|
||||
protected sealed override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
if (GenerateData != null)
|
||||
{
|
||||
GenerateData(pk, (T)this, criteria);
|
||||
return;
|
||||
}
|
||||
|
||||
base.SetPINGA(pk, criteria);
|
||||
if (Species == (int) Core.Species.Toxtricity)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var result = EvolutionMethod.GetAmpLowKeyResult(pk.Nature);
|
||||
if (result == pk.Form)
|
||||
break;
|
||||
pk.Nature = Util.Rand.Next(25);
|
||||
}
|
||||
|
||||
// Might be originally generated with a Neutral nature, then above logic changes to another.
|
||||
// Realign the stat nature to Serious mint.
|
||||
if (pk.Nature != pk.StatNature && ((Nature)pk.StatNature).IsNeutral())
|
||||
pk.StatNature = (int)Nature.Serious;
|
||||
}
|
||||
var pid = pk.PID;
|
||||
RaidRNG.ForceShinyState(pk, Shiny == Shiny.Always, ref pid);
|
||||
pk.PID = pid;
|
||||
}
|
||||
}
|
|
@ -1,244 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 8 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic8a(GameVersion Version) : EncounterStatic(Version), IAlphaReadOnly, IMasteryInitialMoveShop8, IScaledSizeReadOnly
|
||||
{
|
||||
public override int Generation => 8;
|
||||
public override EntityContext Context => EntityContext.Gen8a;
|
||||
|
||||
public byte HeightScalar { get; }
|
||||
public byte WeightScalar { get; }
|
||||
public bool IsAlpha { get; init; }
|
||||
public EncounterStatic8aCorrelation Method { get; init; }
|
||||
|
||||
public bool HasFixedHeight => HeightScalar != NoScalar;
|
||||
public bool HasFixedWeight => WeightScalar != NoScalar;
|
||||
private const byte NoScalar = 0;
|
||||
|
||||
public EncounterStatic8a(ushort species, byte form, byte level, byte h = NoScalar, byte w = NoScalar) : this(GameVersion.PLA)
|
||||
{
|
||||
Species = species;
|
||||
Form = form;
|
||||
Level = level;
|
||||
HeightScalar = h;
|
||||
WeightScalar = w;
|
||||
Shiny = Shiny.Never;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
|
||||
var pa = (PA8)pk;
|
||||
|
||||
if (IsAlpha)
|
||||
pa.IsAlpha = true;
|
||||
|
||||
if (HasFixedHeight)
|
||||
pa.HeightScalar = HeightScalar;
|
||||
if (HasFixedWeight)
|
||||
pa.WeightScalar = WeightScalar;
|
||||
pa.Scale = pa.HeightScalar;
|
||||
|
||||
pa.ResetHeight();
|
||||
pa.ResetWeight();
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var para = GetParams();
|
||||
var (_, slotSeed) = Overworld8aRNG.ApplyDetails(pk, criteria, para, IsAlpha);
|
||||
// We don't override LevelMin, so just handle the two species cases.
|
||||
if (Species == (int)Core.Species.Zorua)
|
||||
pk.CurrentLevel = pk.Met_Level = Overworld8aRNG.GetRandomLevel(slotSeed, 27, 29);
|
||||
else if (Species == (int)Core.Species.Phione)
|
||||
pk.CurrentLevel = pk.Met_Level = Overworld8aRNG.GetRandomLevel(slotSeed, 33, 36);
|
||||
|
||||
if (Method == EncounterStatic8aCorrelation.Fixed)
|
||||
pk.EncryptionConstant = Util.Rand32();
|
||||
}
|
||||
|
||||
protected override void ApplyDetailsBall(PKM pk) => pk.Ball = Gift ? Ball : (int)Core.Ball.LAPoke;
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!base.IsMatchExact(pk, evo))
|
||||
return false;
|
||||
|
||||
if (pk is IScaledSize s)
|
||||
{
|
||||
// 3 of the Alpha statics were mistakenly set as 127 scale. If they enter HOME on 3.0.1, they'll get bumped to 255.
|
||||
if (IsAlpha && this is { HeightScalar: 127, WeightScalar: 127 }) // Average Size Alphas
|
||||
{
|
||||
// HOME >=3.0.1 ensures 255 scales for the 127's
|
||||
// PLA and S/V could have safe-harbored them via <=3.0.0
|
||||
if (pk.Context is EntityContext.Gen8a or EntityContext.Gen9)
|
||||
{
|
||||
if (s is not { HeightScalar: 127, WeightScalar: 127 }) // Original?
|
||||
{
|
||||
// Must match the HOME updated values AND must have the Alpha ribbon (visited HOME).
|
||||
if (s is not { HeightScalar: 255, WeightScalar: 255 })
|
||||
return false;
|
||||
if (pk is IRibbonSetMark9 { RibbonMarkAlpha: false })
|
||||
return false;
|
||||
if (pk.IsUntraded)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Must match the HOME updated values
|
||||
if (s is not { HeightScalar: 255, WeightScalar: 255 })
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (HasFixedHeight && s.HeightScalar != HeightScalar)
|
||||
return false;
|
||||
if (HasFixedWeight && s.WeightScalar != WeightScalar)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (pk is IAlpha a && a.IsAlpha != IsAlpha)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
var metState = LocationsHOME.GetRemapState(Context, pk.Context);
|
||||
if (metState == LocationRemapState.Original)
|
||||
return base.IsMatchLocation(pk);
|
||||
if (metState == LocationRemapState.Remapped)
|
||||
return IsMetRemappedSWSH(pk);
|
||||
return base.IsMatchLocation(pk) || IsMetRemappedSWSH(pk);
|
||||
}
|
||||
|
||||
private static bool IsMetRemappedSWSH(PKM pk) => pk.Met_Location == LocationsHOME.SWLA;
|
||||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
var result = GetMatchRatingInternal(pk);
|
||||
var orig = base.GetMatchRating(pk);
|
||||
return result > orig ? result : orig;
|
||||
}
|
||||
|
||||
private EncounterMatchRating GetMatchRatingInternal(PKM pk)
|
||||
{
|
||||
if (Shiny != Shiny.Random && !Shiny.IsValid(pk))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
if (Gift && pk.Ball != Ball)
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
var orig = base.GetMatchRating(pk);
|
||||
if (orig is not EncounterMatchRating.Match)
|
||||
return orig;
|
||||
|
||||
if (!IsForcedMasteryCorrect(pk))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
if (!MarkRules.IsMarkValidAlpha(pk, IsAlpha))
|
||||
return EncounterMatchRating.DeferredErrors;
|
||||
|
||||
if (IsAlpha && pk is PA8 { AlphaMove: 0 })
|
||||
return EncounterMatchRating.Deferred;
|
||||
|
||||
return EncounterMatchRating.Match;
|
||||
}
|
||||
|
||||
public bool IsForcedMasteryCorrect(PKM pk)
|
||||
{
|
||||
ushort alpha = 0;
|
||||
if (IsAlpha && Moves.HasMoves)
|
||||
{
|
||||
if (pk is PA8 pa && (alpha = pa.AlphaMove) != Moves.Move1)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pk is not IMoveShop8Mastery p)
|
||||
return true;
|
||||
|
||||
const bool allowAlphaPurchaseBug = true; // Everything else Alpha is pre-1.1
|
||||
var level = pk.Met_Level;
|
||||
var (learn, mastery) = GetLevelUpInfo();
|
||||
if (!p.IsValidPurchasedEncounter(learn, level, alpha, allowAlphaPurchaseBug))
|
||||
return false;
|
||||
|
||||
Span<ushort> moves = stackalloc ushort[4];
|
||||
if (Moves.HasMoves)
|
||||
Moves.CopyTo(moves);
|
||||
else
|
||||
learn.SetEncounterMoves(level, moves);
|
||||
|
||||
return p.IsValidMasteredEncounter(moves, learn, mastery, level, alpha, allowAlphaPurchaseBug);
|
||||
}
|
||||
|
||||
protected override void SetEncounterMoves(PKM pk, GameVersion version, int level)
|
||||
{
|
||||
var pa8 = (PA8)pk;
|
||||
Span<ushort> moves = stackalloc ushort[4];
|
||||
var (learn, mastery) = GetLevelUpInfo();
|
||||
LoadInitialMoveset(pa8, moves, learn, level);
|
||||
pk.SetMoves(moves);
|
||||
pk.SetMaximumPPCurrent(moves);
|
||||
pa8.SetEncounterMasteryFlags(moves, mastery, level);
|
||||
if (pa8.AlphaMove != 0)
|
||||
pa8.SetMasteryFlagMove(pa8.AlphaMove);
|
||||
}
|
||||
|
||||
public (Learnset Learn, Learnset Mastery) GetLevelUpInfo()
|
||||
{
|
||||
return LearnSource8LA.GetLearnsetAndMastery(Species, Form);
|
||||
}
|
||||
|
||||
public void LoadInitialMoveset(PA8 pa8, Span<ushort> moves, Learnset learn, int level)
|
||||
{
|
||||
if (Moves.HasMoves)
|
||||
Moves.CopyTo(moves);
|
||||
else
|
||||
learn.SetEncounterMoves(level, moves);
|
||||
if (IsAlpha)
|
||||
pa8.AlphaMove = moves[0];
|
||||
}
|
||||
|
||||
private OverworldParam8a GetParams()
|
||||
{
|
||||
var gender = GetGenderRatio();
|
||||
return new OverworldParam8a
|
||||
{
|
||||
IsAlpha = IsAlpha,
|
||||
FlawlessIVs = FlawlessIVCount,
|
||||
Shiny = Shiny,
|
||||
RollCount = 1, // Everything is shiny locked anyways
|
||||
GenderRatio = gender,
|
||||
};
|
||||
}
|
||||
|
||||
private byte GetGenderRatio() => Gender switch
|
||||
{
|
||||
0 => PersonalInfo.RatioMagicMale,
|
||||
1 => PersonalInfo.RatioMagicFemale,
|
||||
_ => GetGenderRatioPersonal(),
|
||||
};
|
||||
|
||||
private byte GetGenderRatioPersonal()
|
||||
{
|
||||
var pt = PersonalTable.LA;
|
||||
var entry = pt.GetFormEntry(Species, Form);
|
||||
return entry.Gender;
|
||||
}
|
||||
}
|
||||
|
||||
public enum EncounterStatic8aCorrelation : byte
|
||||
{
|
||||
WildGroup,
|
||||
Fixed,
|
||||
}
|
|
@ -1,145 +0,0 @@
|
|||
using System;
|
||||
using static PKHeX.Core.StaticCorrelation8bRequirement;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 8 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic8b : EncounterStatic, IStaticCorrelation8b
|
||||
{
|
||||
public override int Generation => 8;
|
||||
public override EntityContext Context => EntityContext.Gen8b;
|
||||
|
||||
public bool Roaming { get; init; }
|
||||
public override bool EggEncounter => EggLocation != Locations.Default8bNone;
|
||||
|
||||
public EncounterStatic8b(GameVersion game) : base(game) => EggLocation = Locations.Default8bNone;
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
var metState = LocationsHOME.GetRemapState(Context, pk.Context);
|
||||
if (metState == LocationRemapState.Original)
|
||||
return IsMatchLocationExact(pk);
|
||||
if (metState == LocationRemapState.Remapped)
|
||||
return IsMatchLocationRemapped(pk);
|
||||
return IsMatchLocationExact(pk) || IsMatchLocationRemapped(pk);
|
||||
}
|
||||
|
||||
private bool IsMatchLocationRemapped(PKM pk)
|
||||
{
|
||||
var met = (ushort)pk.Met_Location;
|
||||
var version = pk.Version;
|
||||
if (pk.Context == EntityContext.Gen8)
|
||||
return LocationsHOME.IsValidMetBDSP(met, version);
|
||||
return LocationsHOME.GetMetSWSH((ushort)Location, version) == met;
|
||||
}
|
||||
|
||||
private bool IsMatchLocationExact(PKM pk)
|
||||
{
|
||||
if (!Roaming)
|
||||
return base.IsMatchLocation(pk);
|
||||
return IsRoamingLocation(pk);
|
||||
}
|
||||
|
||||
private static bool IsRoamingLocation(PKM pk)
|
||||
{
|
||||
var location = pk.Met_Location;
|
||||
foreach (var value in Roaming_MetLocation_BDSP)
|
||||
{
|
||||
if (value == location)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public StaticCorrelation8bRequirement GetRequirement(PKM pk) => Roaming
|
||||
? MustHave
|
||||
: MustNotHave;
|
||||
|
||||
public bool IsStaticCorrelationCorrect(PKM pk)
|
||||
{
|
||||
return Roaming8bRNG.ValidateRoamingEncounter(pk, Shiny == Shiny.Random ? Shiny.FixedValue : Shiny, FlawlessIVCount);
|
||||
}
|
||||
|
||||
protected override bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
var metState = LocationsHOME.GetRemapState(Context, pk.Context);
|
||||
if (metState == LocationRemapState.Original)
|
||||
return IsMatchEggLocationExact(pk);
|
||||
if (metState == LocationRemapState.Remapped)
|
||||
return IsMatchEggLocationRemapped(pk);
|
||||
// Either
|
||||
return IsMatchEggLocationExact(pk) || IsMatchEggLocationRemapped(pk);
|
||||
}
|
||||
|
||||
private bool IsMatchEggLocationRemapped(PKM pk)
|
||||
{
|
||||
if (!EggEncounter)
|
||||
return pk.Egg_Location == 0;
|
||||
return LocationsHOME.IsLocationSWSHEgg(pk.Version, pk.Met_Location, pk.Egg_Location, (ushort)EggLocation);
|
||||
}
|
||||
|
||||
private bool IsMatchEggLocationExact(PKM pk)
|
||||
{
|
||||
var eggloc = pk.Egg_Location;
|
||||
if (!EggEncounter)
|
||||
return eggloc == EggLocation;
|
||||
|
||||
if (!pk.IsEgg) // hatched
|
||||
return eggloc == EggLocation || eggloc == Locations.LinkTrade6NPC;
|
||||
|
||||
// Unhatched:
|
||||
if (eggloc != EggLocation)
|
||||
return false;
|
||||
if (pk.Met_Location is not (Locations.Default8bNone or Locations.LinkTrade6NPC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
pk.Met_Location = pk.Egg_Location = Locations.Default8bNone;
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
var req = GetRequirement(pk);
|
||||
if (req == MustHave) // Roamers
|
||||
{
|
||||
var shiny = Shiny == Shiny.Random ? Shiny.FixedValue : Shiny;
|
||||
Roaming8bRNG.ApplyDetails(pk, criteria, shiny, FlawlessIVCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
var shiny = Shiny == Shiny.Never ? Shiny.Never : Shiny.Random;
|
||||
Wild8bRNG.ApplyDetails(pk, criteria, shiny, FlawlessIVCount, Ability);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void SetMetData(PKM pk, int level, DateTime today)
|
||||
{
|
||||
pk.Met_Level = level;
|
||||
pk.Met_Location = !Roaming ? Location : Roaming_MetLocation_BDSP[0];
|
||||
pk.MetDate = DateOnly.FromDateTime(today);
|
||||
}
|
||||
|
||||
// defined by mvpoke in encounter data
|
||||
private static ReadOnlySpan<ushort> Roaming_MetLocation_BDSP => new ushort[]
|
||||
{
|
||||
197, 201, 354, 355, 356, 357, 358, 359, 361, 362, 364, 365, 367, 373, 375, 377,
|
||||
378, 379, 383, 385, 392, 394, 395, 397, 400, 403, 404, 407,
|
||||
485,
|
||||
};
|
||||
}
|
||||
|
||||
public interface IStaticCorrelation8b
|
||||
{
|
||||
StaticCorrelation8bRequirement GetRequirement(PKM pk);
|
||||
bool IsStaticCorrelationCorrect(PKM pk);
|
||||
}
|
||||
|
||||
public enum StaticCorrelation8bRequirement
|
||||
{
|
||||
CanBeEither,
|
||||
MustHave,
|
||||
MustNotHave,
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 9 Static Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
public sealed record EncounterStatic9(GameVersion Version) : EncounterStatic(Version), IGemType
|
||||
{
|
||||
public override int Generation => 9;
|
||||
public override EntityContext Context => EntityContext.Gen9;
|
||||
public byte Size { get; init; }
|
||||
public GemType TeraType { get; init; }
|
||||
public bool IsTitan { get; init; }
|
||||
|
||||
private bool NoScalarsDefined => Size == 0;
|
||||
public bool GiftWithLanguage => Gift && !ScriptedYungoos; // Nice error by GameFreak -- all gifts (including eggs) set the HT_Language memory value in addition to OT_Language.
|
||||
public bool StarterBoxLegend => Gift && Species is (int)Core.Species.Koraidon or (int)Core.Species.Miraidon;
|
||||
public bool ScriptedYungoos => Species == (int)Core.Species.Yungoos && Level == 2;
|
||||
|
||||
public SizeType9 ScaleType => NoScalarsDefined ? SizeType9.RANDOM : SizeType9.VALUE;
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
var metState = LocationsHOME.GetRemapState(Context, pk.Context);
|
||||
if (metState == LocationRemapState.Original)
|
||||
return IsMatchLocationExact(pk);
|
||||
if (metState == LocationRemapState.Remapped)
|
||||
return IsMatchLocationRemapped(pk);
|
||||
return IsMatchLocationExact(pk) || IsMatchLocationRemapped(pk);
|
||||
}
|
||||
|
||||
private bool IsMatchLocationExact(PKM pk) => pk.Met_Location == Location;
|
||||
|
||||
private bool IsMatchLocationRemapped(PKM pk)
|
||||
{
|
||||
var met = (ushort)pk.Met_Location;
|
||||
var version = pk.Version;
|
||||
if (pk.Context == EntityContext.Gen8)
|
||||
return LocationsHOME.IsValidMetSV(met, version);
|
||||
return LocationsHOME.GetMetSWSH((ushort)Location, version) == met;
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (pk is IScaledSize v && !NoScalarsDefined)
|
||||
{
|
||||
if (Gift)
|
||||
{
|
||||
if (v.HeightScalar != Size)
|
||||
return true;
|
||||
if (v.WeightScalar != Size)
|
||||
return true;
|
||||
}
|
||||
var current = pk is IScaledSize3 size3 ? size3.Scale : v.HeightScalar;
|
||||
if (current != Size)
|
||||
return false;
|
||||
}
|
||||
return base.IsMatchPartial(pk);
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (TeraType != GemType.Random && pk is ITeraType t && !Tera9RNG.IsMatchTeraType(TeraType, Species, Form, (byte)t.TeraTypeOriginal))
|
||||
return false;
|
||||
return base.IsMatchExact(pk, evo);
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
var pk9 = (PK9)pk;
|
||||
if (Gift && !ScriptedYungoos)
|
||||
pk9.HT_Language = (byte)pk.Language;
|
||||
if (StarterBoxLegend)
|
||||
pk9.FormArgument = 1; // Not Ride Form.
|
||||
if (IsTitan)
|
||||
pk9.RibbonMarkTitan = true;
|
||||
pk9.Obedience_Level = (byte)pk9.Met_Level;
|
||||
|
||||
const byte undefinedSize = 0;
|
||||
byte height, weight, scale;
|
||||
if (NoScalarsDefined)
|
||||
{
|
||||
height = weight = scale = undefinedSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Gifts have a defined H/W/S, while capture-able only have scale.
|
||||
height = weight = Gift ? Size : undefinedSize;
|
||||
scale = Size;
|
||||
}
|
||||
|
||||
const byte rollCount = 1;
|
||||
var pi = PersonalTable.SV.GetFormEntry(Species, Form);
|
||||
var param = new GenerateParam9(Species, pi.Gender, FlawlessIVCount, rollCount, height, weight, ScaleType, scale, Ability, Shiny);
|
||||
|
||||
ulong init = Util.Rand.Rand64();
|
||||
var success = this.TryApply64(pk9, init, param, criteria, IVs.IsSpecified);
|
||||
if (!success)
|
||||
this.TryApply64(pk9, init, param, EncounterCriteria.Unrestricted, IVs.IsSpecified);
|
||||
if (IVs.IsSpecified)
|
||||
{
|
||||
pk.IV_HP = IVs.HP;
|
||||
pk.IV_ATK = IVs.ATK;
|
||||
pk.IV_DEF = IVs.DEF;
|
||||
pk.IV_SPA = IVs.SPA;
|
||||
pk.IV_SPD = IVs.SPD;
|
||||
pk.IV_SPE = IVs.SPE;
|
||||
}
|
||||
if (Nature != Nature.Random)
|
||||
pk.Nature = pk.StatNature = (int)Nature;
|
||||
if (Gender != -1)
|
||||
pk.Gender = (byte)Gender;
|
||||
}
|
||||
}
|
|
@ -1,117 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Shadow Pokémon Encounter found in <see cref="GameVersion.CXD"/>
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterStatic"/>
|
||||
/// <param name="ID">Initial Shadow Gauge value.</param>
|
||||
/// <param name="Gauge">Initial Shadow Gauge value.</param>
|
||||
/// <param name="Locks">Team Specification with required <see cref="Species"/>, <see cref="Nature"/> and Gender.</param>
|
||||
// ReSharper disable NotAccessedPositionalProperty.Global
|
||||
public sealed record EncounterStaticShadow(GameVersion Version, byte ID, short Gauge, TeamLock[] Locks) : EncounterStatic(Version)
|
||||
{
|
||||
// ReSharper restore NotAccessedPositionalProperty.Global
|
||||
public override int Generation => 3;
|
||||
public override EntityContext Context => EntityContext.Gen3;
|
||||
|
||||
/// <summary>
|
||||
/// Originates from the EReader scans (Japanese Only)
|
||||
/// </summary>
|
||||
public bool EReader => Location == 128; // @ Card e Room (Japanese games only)
|
||||
|
||||
protected override bool IsMatchLocation(PKM pk)
|
||||
{
|
||||
if (pk.Format != 3)
|
||||
return true; // transfer location verified later
|
||||
|
||||
var met = pk.Met_Location;
|
||||
if (met == Location)
|
||||
return true;
|
||||
|
||||
// XD can re-battle with Miror B
|
||||
// Realgam Tower, Rock, Oasis, Cave, Pyrite Town
|
||||
return Version == GameVersion.XD && met is (59 or 90 or 91 or 92 or 113);
|
||||
}
|
||||
|
||||
protected override bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (pk.Format != 3) // Met Level lost on PK3=>PK4
|
||||
return Level <= evo.LevelMax;
|
||||
|
||||
return pk.Met_Level == Level;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo tr, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(tr, criteria, pk);
|
||||
((IRibbonSetEvent3)pk).RibbonNational = true;
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
if (!EReader)
|
||||
SetPINGA_Regular(pk, criteria);
|
||||
else
|
||||
SetPINGA_EReader(pk);
|
||||
}
|
||||
|
||||
private void SetPINGA_Regular(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(-1, pi);
|
||||
int nature = (int)criteria.GetNature(Nature.Random);
|
||||
int ability = criteria.GetAbilityFromNumber(0);
|
||||
|
||||
// Ensure that any generated specimen has valid Shadow Locks
|
||||
// This can be kinda slow, depending on how many locks / how strict they are.
|
||||
// Cancel this operation if too many attempts are made to prevent infinite loops.
|
||||
int ctr = 0;
|
||||
const int max = 100_000;
|
||||
do
|
||||
{
|
||||
PIDGenerator.SetRandomWildPID(pk, 3, nature, ability, gender, PIDType.CXD);
|
||||
var pidiv = MethodFinder.Analyze(pk);
|
||||
var result = LockFinder.IsAllShadowLockValid(this, pidiv, pk);
|
||||
if (result)
|
||||
break;
|
||||
}
|
||||
while (++ctr <= max);
|
||||
|
||||
#if DEBUG
|
||||
System.Diagnostics.Debug.Assert(ctr < 100_000);
|
||||
#endif
|
||||
}
|
||||
|
||||
private void SetPINGA_EReader(PKM pk)
|
||||
{
|
||||
// E-Reader have all IVs == 0
|
||||
for (int i = 0; i < 6; i++)
|
||||
pk.SetIV(i, 0);
|
||||
|
||||
// All E-Reader shadows are actually nature/gender locked.
|
||||
var locked = Locks[0].Locks[^1];
|
||||
var (nature, gender) = locked.GetLock;
|
||||
|
||||
// Ensure that any generated specimen has valid Shadow Locks
|
||||
// This can be kinda slow, depending on how many locks / how strict they are.
|
||||
// Cancel this operation if too many attempts are made to prevent infinite loops.
|
||||
int ctr = 0;
|
||||
const int max = 100_000;
|
||||
do
|
||||
{
|
||||
var seed = Util.Rand32();
|
||||
PIDGenerator.SetValuesFromSeedXDRNG_EReader(pk, seed);
|
||||
if (pk.Nature != nature || pk.Gender != gender)
|
||||
continue;
|
||||
var pidiv = new PIDIV(PIDType.CXD, seed);
|
||||
var result = LockFinder.IsAllShadowLockValid(this, pidiv, pk);
|
||||
if (result)
|
||||
break;
|
||||
}
|
||||
while (++ctr <= max);
|
||||
|
||||
#if DEBUG
|
||||
System.Diagnostics.Debug.Assert(ctr < 100_000);
|
||||
#endif
|
||||
}
|
||||
}
|
|
@ -1,277 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Trade Encounter data
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Trade data is fixed level in all cases except for the first few generations of games.
|
||||
/// </remarks>
|
||||
public abstract record EncounterTrade(GameVersion Version) : IEncounterable, IMoveset, IEncounterMatch
|
||||
{
|
||||
public ushort Species { get; init; }
|
||||
public byte Form { get; init; }
|
||||
public byte Level { get; init; }
|
||||
public virtual byte LevelMin => Level;
|
||||
public byte LevelMax => 100;
|
||||
public abstract int Generation { get; }
|
||||
public abstract EntityContext Context { get; }
|
||||
|
||||
public int CurrentLevel { get; init; } = -1;
|
||||
public abstract int Location { get; }
|
||||
|
||||
public AbilityPermission Ability { get; init; }
|
||||
public Nature Nature { get; init; } = Nature.Random;
|
||||
public virtual Shiny Shiny => Shiny.Never;
|
||||
public sbyte Gender { get; init; } = -1;
|
||||
|
||||
public sbyte OTGender { get; init; } = -1;
|
||||
public bool IsNicknamed { get; init; } = true;
|
||||
public bool EvolveOnTrade { get; init; }
|
||||
public byte Ball { get; init; } = 4;
|
||||
|
||||
public int EggLocation { get; init; }
|
||||
|
||||
public ushort TID16 { get; init; }
|
||||
public ushort SID16 { get; init; }
|
||||
|
||||
public Moveset Moves { get; init; }
|
||||
public IndividualValueSet IVs { get; init; }
|
||||
|
||||
public Ball FixedBall => (Ball)Ball;
|
||||
public bool EggEncounter => false;
|
||||
|
||||
public int TID7
|
||||
{
|
||||
init
|
||||
{
|
||||
TID16 = (ushort) value;
|
||||
SID16 = (ushort)(value >> 16);
|
||||
}
|
||||
}
|
||||
|
||||
private const string _name = "In-game Trade";
|
||||
public string Name => _name;
|
||||
public string LongName => _name;
|
||||
public bool IsShiny => Shiny.IsShiny();
|
||||
|
||||
public IReadOnlyList<string> Nicknames { get; internal set; } = Array.Empty<string>();
|
||||
public IReadOnlyList<string> TrainerNames { get; internal set; } = Array.Empty<string>();
|
||||
public string GetNickname(int language) => (uint)language < Nicknames.Count ? Nicknames[language] : string.Empty;
|
||||
public string GetOT(int language) => (uint)language < TrainerNames.Count ? TrainerNames[language] : string.Empty;
|
||||
public bool HasNickname => Nicknames.Count != 0 && IsNicknamed;
|
||||
public bool HasTrainerName => TrainerNames.Count != 0;
|
||||
|
||||
public PKM ConvertToPKM(ITrainerInfo tr) => ConvertToPKM(tr, EncounterCriteria.Unrestricted);
|
||||
|
||||
public PKM ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
|
||||
{
|
||||
var pk = EntityBlank.GetBlank(Generation, Version);
|
||||
tr.ApplyTo(pk);
|
||||
|
||||
ApplyDetails(tr, criteria, pk);
|
||||
return pk;
|
||||
}
|
||||
|
||||
protected virtual void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
var version = this.GetCompatibleVersion((GameVersion)sav.Game);
|
||||
int lang = (int)Language.GetSafeLanguage(Generation, (LanguageID)sav.Language, version);
|
||||
int level = CurrentLevel > 0 ? CurrentLevel : LevelMin;
|
||||
if (level == 0)
|
||||
level = Math.Max((byte)1, LevelMin);
|
||||
|
||||
ushort species = Species;
|
||||
if (EvolveOnTrade)
|
||||
species++;
|
||||
|
||||
pk.EncryptionConstant = Util.Rand32();
|
||||
pk.Species = species;
|
||||
pk.Form = Form;
|
||||
pk.Language = lang;
|
||||
pk.OT_Name = pk.Format == 1 ? StringConverter12.G1TradeOTStr : HasTrainerName ? GetOT(lang) : sav.OT;
|
||||
pk.OT_Gender = HasTrainerName ? Math.Max(0, (int)OTGender) : sav.Gender;
|
||||
pk.SetNickname(HasNickname ? GetNickname(lang) : string.Empty);
|
||||
|
||||
pk.CurrentLevel = level;
|
||||
pk.Version = (int) version;
|
||||
pk.TID16 = TID16;
|
||||
pk.SID16 = SID16;
|
||||
pk.Ball = Ball;
|
||||
pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;
|
||||
|
||||
SetPINGA(pk, criteria);
|
||||
SetMoves(pk, version, level);
|
||||
|
||||
var time = DateTime.Now;
|
||||
if (pk.Format != 2 || version == GameVersion.C)
|
||||
{
|
||||
SetMetData(pk, level, Location, time);
|
||||
}
|
||||
else
|
||||
{
|
||||
pk.OT_Gender = 0;
|
||||
}
|
||||
|
||||
if (EggLocation != 0)
|
||||
SetEggMetData(pk, time);
|
||||
|
||||
if (pk.Format < 6)
|
||||
return;
|
||||
|
||||
sav.ApplyHandlingTrainerInfo(pk, force: true);
|
||||
pk.SetRandomEC();
|
||||
|
||||
if (pk is IScaledSize s)
|
||||
{
|
||||
s.HeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
s.WeightScalar = PokeSizeUtil.GetRandomScalar();
|
||||
}
|
||||
if (pk is PK6 pk6)
|
||||
pk6.SetRandomMemory6();
|
||||
}
|
||||
|
||||
protected virtual void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(Gender, pi);
|
||||
int nature = (int)criteria.GetNature(Nature);
|
||||
int ability = criteria.GetAbilityFromNumber(Ability);
|
||||
|
||||
PIDGenerator.SetRandomWildPID(pk, Generation, nature, ability, gender);
|
||||
pk.Nature = pk.StatNature = nature;
|
||||
pk.Gender = gender;
|
||||
pk.RefreshAbility(ability);
|
||||
|
||||
SetIVs(pk);
|
||||
}
|
||||
|
||||
protected void SetIVs(PKM pk)
|
||||
{
|
||||
if (IVs.IsSpecified)
|
||||
pk.SetRandomIVsTemplate(IVs, 0);
|
||||
else
|
||||
pk.SetRandomIVs(minFlawless: 3);
|
||||
}
|
||||
|
||||
private void SetMoves(PKM pk, GameVersion version, int level)
|
||||
{
|
||||
if (Moves.HasMoves)
|
||||
{
|
||||
pk.SetMoves(Moves);
|
||||
pk.SetMaximumPPCurrent(Moves);
|
||||
}
|
||||
else
|
||||
{
|
||||
Span<ushort> moves = stackalloc ushort[4];
|
||||
var source = GameData.GetLearnSource(version);
|
||||
source.SetEncounterMoves(Species, Form, level, moves);
|
||||
pk.SetMoves(moves);
|
||||
pk.SetMaximumPPCurrent(moves);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetEggMetData(PKM pk, DateTime time)
|
||||
{
|
||||
pk.Egg_Location = EggLocation;
|
||||
pk.EggMetDate = DateOnly.FromDateTime(time);
|
||||
}
|
||||
|
||||
private static void SetMetData(PKM pk, int level, int location, DateTime time)
|
||||
{
|
||||
pk.Met_Level = level;
|
||||
pk.Met_Location = location;
|
||||
pk.MetDate = DateOnly.FromDateTime(time);
|
||||
}
|
||||
|
||||
public virtual bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (IVs.IsSpecified)
|
||||
{
|
||||
if (!Legal.GetIsFixedIVSequenceValidSkipRand(IVs, pk))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsMatchNatureGenderShiny(pk))
|
||||
return false;
|
||||
if (TID16 != pk.TID16)
|
||||
return false;
|
||||
if (SID16 != pk.SID16)
|
||||
return false;
|
||||
|
||||
if (!IsMatchLevel(pk, evo))
|
||||
return false;
|
||||
|
||||
if (CurrentLevel != -1 && CurrentLevel > pk.CurrentLevel)
|
||||
return false;
|
||||
|
||||
if (Form != evo.Form && !FormInfo.IsFormChangeable(Species, Form, pk.Form, Context, pk.Context))
|
||||
return false;
|
||||
if (OTGender != -1 && OTGender != pk.OT_Gender)
|
||||
return false;
|
||||
if (!IsMatchEggLocation(pk))
|
||||
return false;
|
||||
// if (z.Ability == 4 ^ pk.AbilityNumber == 4) // defer to Ability
|
||||
// continue;
|
||||
|
||||
int version = pk.Version;
|
||||
if (Generation >= 8 && Context != EntityContext.Gen8 && pk is PK8)
|
||||
version = LocationsHOME.GetVersionSWSHOriginal((ushort)pk.Met_Location);
|
||||
if (!Version.Contains((GameVersion)version))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected virtual bool IsMatchEggLocation(PKM pk)
|
||||
{
|
||||
var expect = EggLocation;
|
||||
if (pk is PB8 && expect is 0)
|
||||
expect = Locations.Default8bNone;
|
||||
return pk.Egg_Location == expect;
|
||||
}
|
||||
|
||||
private bool IsMatchLevel(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!pk.HasOriginalMetLocation)
|
||||
return evo.LevelMax >= Level;
|
||||
|
||||
if (Location != pk.Met_Location)
|
||||
{
|
||||
if (!LocationsHOME.IsMatchLocation(Context, pk.Context, pk.Met_Location, Location, LocationsHOME.GetVersionSWSHOriginal((ushort)pk.Met_Location)))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pk.Format < 5)
|
||||
return evo.LevelMax >= Level;
|
||||
|
||||
return pk.Met_Level == Level;
|
||||
}
|
||||
|
||||
protected virtual bool IsMatchNatureGenderShiny(PKM pk)
|
||||
{
|
||||
if (!Shiny.IsValid(pk))
|
||||
return false;
|
||||
if (Gender != -1 && Gender != pk.Gender)
|
||||
return false;
|
||||
|
||||
if (Nature != Nature.Random && pk.Nature != (int)Nature)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public EncounterMatchRating GetMatchRating(PKM pk)
|
||||
{
|
||||
if (IsMatchPartial(pk))
|
||||
return EncounterMatchRating.PartialMatch;
|
||||
if (IsMatchDeferred(pk))
|
||||
return EncounterMatchRating.Deferred;
|
||||
return EncounterMatchRating.Match;
|
||||
}
|
||||
|
||||
protected virtual bool IsMatchDeferred(PKM pk) => false;
|
||||
protected virtual bool IsMatchPartial(PKM pk) => false;
|
||||
}
|
|
@ -1,138 +0,0 @@
|
|||
using System.Linq;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Trade Encounter data with a fixed Catch Rate
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Generation 1 specific value used in detecting unmodified/un-traded Generation 1 Trade Encounter data.
|
||||
/// Species & Minimum level (legal) possible to acquire at.
|
||||
/// </remarks>
|
||||
public sealed record EncounterTrade1 : EncounterTradeGB
|
||||
{
|
||||
public override int Generation => 1;
|
||||
public override EntityContext Context => EntityContext.Gen1;
|
||||
public override byte LevelMin => CanObtainMinGSC() ? LevelMinGSC : LevelMinRBY;
|
||||
|
||||
private readonly byte LevelMinRBY;
|
||||
private readonly byte LevelMinGSC;
|
||||
public override int Location => 0;
|
||||
public override Shiny Shiny => Shiny.Random;
|
||||
|
||||
public EncounterTrade1(ushort species, GameVersion game, byte rby, byte gsc) : base(species, gsc, game)
|
||||
{
|
||||
TrainerNames = StringConverter12.G1TradeOTName;
|
||||
|
||||
LevelMinRBY = rby;
|
||||
LevelMinGSC = gsc;
|
||||
}
|
||||
|
||||
public EncounterTrade1(ushort species, GameVersion game, byte rby) : this(species, game, rby, rby) { }
|
||||
|
||||
public byte GetInitialCatchRate()
|
||||
{
|
||||
var pt = Version == GameVersion.YW ? PersonalTable.Y : PersonalTable.RB;
|
||||
return (byte)pt[Species].CatchRate;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
var pk1 = (PK1)pk;
|
||||
pk1.Catch_Rate = GetInitialCatchRate();
|
||||
}
|
||||
|
||||
internal bool IsNicknameValid(PKM pk)
|
||||
{
|
||||
var nick = pk.Nickname;
|
||||
if (pk.Format <= 2)
|
||||
return Nicknames.Contains(nick);
|
||||
|
||||
// Converted string 1/2->7 to language specific value
|
||||
// Nicknames can be from any of the languages it can trade between.
|
||||
int lang = pk.Language;
|
||||
if (lang == 1)
|
||||
{
|
||||
// Special consideration for Hiragana strings that are transferred
|
||||
if (Version == GameVersion.YW && Species == (int)Core.Species.Dugtrio)
|
||||
return nick == "ぐりお";
|
||||
return nick == Nicknames[1];
|
||||
}
|
||||
|
||||
return GetNicknameIndex(nick) >= 2;
|
||||
}
|
||||
|
||||
internal bool IsTrainerNameValid(PKM pk)
|
||||
{
|
||||
string ot = pk.OT_Name;
|
||||
if (pk.Format <= 2)
|
||||
return ot == StringConverter12.G1TradeOTStr;
|
||||
|
||||
// Converted string 1/2->7 to language specific value
|
||||
int lang = pk.Language;
|
||||
var tr = GetOT(lang);
|
||||
return ot == tr;
|
||||
}
|
||||
|
||||
private int GetNicknameIndex(string nickname)
|
||||
{
|
||||
var nn = Nicknames;
|
||||
for (int i = 0; i < nn.Count; i++)
|
||||
{
|
||||
if (nn[i] == nickname)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
private bool CanObtainMinGSC()
|
||||
{
|
||||
if (!ParseSettings.AllowGen1Tradeback)
|
||||
return false;
|
||||
if (Version == GameVersion.BU && EvolveOnTrade)
|
||||
return ParseSettings.AllowGBCartEra;
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsMatchLevel(PKM pk, int lvl)
|
||||
{
|
||||
if (pk is not PK1)
|
||||
return lvl >= LevelMinGSC;
|
||||
return lvl >= LevelMin;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!IsMatchLevel(pk, pk.CurrentLevel)) // minimum required level
|
||||
return false;
|
||||
|
||||
if (Version == GameVersion.BU)
|
||||
{
|
||||
// Encounters with this version have to originate from the Japanese Blue game.
|
||||
if (!pk.Japanese)
|
||||
return false;
|
||||
// Stadium 2 can transfer from GSC->RBY without a "Trade", thus allowing un-evolved outsiders
|
||||
if (EvolveOnTrade && !ParseSettings.AllowGBCartEra && pk.CurrentLevel < LevelMinRBY)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool IsMatchPartial(PKM pk)
|
||||
{
|
||||
if (!IsTrainerNameValid(pk))
|
||||
return true;
|
||||
if (!IsNicknameValid(pk))
|
||||
return true;
|
||||
|
||||
if (ParseSettings.AllowGen1Tradeback)
|
||||
return false;
|
||||
if (pk is not PK1 pk1)
|
||||
return false;
|
||||
|
||||
var req = GetInitialCatchRate();
|
||||
return req != pk1.Catch_Rate;
|
||||
}
|
||||
}
|
|
@ -1,99 +0,0 @@
|
|||
using static PKHeX.Core.Species;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 2 Trade Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTradeGB"/>
|
||||
public sealed record EncounterTrade2 : EncounterTradeGB
|
||||
{
|
||||
public override int Generation => 2;
|
||||
public override EntityContext Context => EntityContext.Gen2;
|
||||
public override int Location => Locations.LinkTrade2NPC;
|
||||
|
||||
public EncounterTrade2(ushort species, byte level, ushort tid) : base(species, level, GameVersion.GSC)
|
||||
{
|
||||
TID16 = tid;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (Level > pk.CurrentLevel) // minimum required level
|
||||
return false;
|
||||
if (TID16 != pk.TID16)
|
||||
return false;
|
||||
|
||||
if (pk.Format <= 2)
|
||||
{
|
||||
if (Gender >= 0 && Gender != pk.Gender)
|
||||
return false;
|
||||
if (IVs.IsSpecified && !Legal.GetIsFixedIVSequenceValidNoRand(IVs, pk))
|
||||
return false;
|
||||
if (pk is { Format: 2, Met_Location: not (0 or 126) })
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsValidTradeOTGender(pk))
|
||||
return false;
|
||||
return IsValidTradeOTName(pk);
|
||||
}
|
||||
|
||||
private bool IsValidTradeOTGender(PKM pk)
|
||||
{
|
||||
if (OTGender == 1)
|
||||
{
|
||||
// Female, can be cleared if traded to RBY (clears met location)
|
||||
if (pk.Format <= 2)
|
||||
return pk.OT_Gender == (pk.Met_Location != 0 ? 1 : 0);
|
||||
return pk.OT_Gender == 0 || !pk.VC1; // require male except if transferred from GSC
|
||||
}
|
||||
return pk.OT_Gender == 0;
|
||||
}
|
||||
|
||||
private bool IsValidTradeOTName(PKM pk)
|
||||
{
|
||||
var OT = pk.OT_Name;
|
||||
if (pk.Japanese)
|
||||
return GetOT((int)LanguageID.Japanese) == OT;
|
||||
if (pk.Korean)
|
||||
return GetOT((int)LanguageID.Korean) == OT;
|
||||
|
||||
var lang = GetInternationalLanguageID(OT);
|
||||
if (pk.Format < 7)
|
||||
return lang != -1;
|
||||
|
||||
switch (Species)
|
||||
{
|
||||
case (int)Voltorb when pk.Language == (int)LanguageID.French:
|
||||
if (lang == (int)LanguageID.Spanish)
|
||||
return false;
|
||||
if (lang != -1)
|
||||
return true;
|
||||
return OT == "FALCçN"; // FALCÁN
|
||||
|
||||
case (int)Shuckle when pk.Language == (int)LanguageID.French:
|
||||
if (lang == (int)LanguageID.Spanish)
|
||||
return false;
|
||||
if (lang != -1)
|
||||
return true;
|
||||
return OT == "MANôA"; // MANÍA
|
||||
|
||||
default: return lang != -1;
|
||||
}
|
||||
}
|
||||
|
||||
private int GetInternationalLanguageID(string OT)
|
||||
{
|
||||
const int start = (int)LanguageID.English;
|
||||
const int end = (int)LanguageID.Spanish;
|
||||
|
||||
var tr = TrainerNames;
|
||||
for (int i = start; i <= end; i++)
|
||||
{
|
||||
if (tr[i] == OT)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 3 Trade Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTrade"/>
|
||||
public sealed record EncounterTrade3 : EncounterTrade, IContestStatsReadOnly
|
||||
{
|
||||
public override int Generation => 3;
|
||||
public override EntityContext Context => EntityContext.Gen3;
|
||||
public override int Location => Locations.LinkTrade3NPC;
|
||||
|
||||
/// <summary>
|
||||
/// Fixed <see cref="PKM.PID"/> value the encounter must have.
|
||||
/// </summary>
|
||||
public readonly uint PID;
|
||||
|
||||
public override Shiny Shiny => Shiny.FixedValue;
|
||||
|
||||
public byte CNT_Cool { get; private init; }
|
||||
public byte CNT_Beauty { get; private init; }
|
||||
public byte CNT_Cute { get; private init; }
|
||||
public byte CNT_Smart { get; private init; }
|
||||
public byte CNT_Tough { get; private init; }
|
||||
public byte CNT_Sheen { get; private init; }
|
||||
|
||||
public ReadOnlySpan<byte> Contest
|
||||
{
|
||||
init
|
||||
{
|
||||
CNT_Cool = value[0];
|
||||
CNT_Beauty = value[1];
|
||||
CNT_Cute = value[2];
|
||||
CNT_Smart = value[3];
|
||||
CNT_Tough = value[4];
|
||||
CNT_Sheen = value[5];
|
||||
}
|
||||
}
|
||||
|
||||
public EncounterTrade3(GameVersion game, uint pid, ushort species, byte level) : base(game)
|
||||
{
|
||||
PID = pid;
|
||||
Species = species;
|
||||
Level = level;
|
||||
}
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!base.IsMatchExact(pk, evo))
|
||||
return false;
|
||||
|
||||
if (pk is IContestStatsReadOnly s && s.IsContestBelow(this))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
var pk3 = (PK3) pk;
|
||||
|
||||
// Italian LG Jynx untranslated from English name
|
||||
if (Species == (int)Core.Species.Jynx && pk3 is { Version: (int)GameVersion.LG, Language: (int)LanguageID.Italian })
|
||||
{
|
||||
pk3.OT_Name = GetOT((int)LanguageID.English);
|
||||
pk3.SetNickname(GetNickname((int)LanguageID.English));
|
||||
}
|
||||
|
||||
this.CopyContestStatsTo((PK3)pk);
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(EntityGender.GetFromPID(Species, PID), pi);
|
||||
int nature = (int)criteria.GetNature(Nature);
|
||||
int ability = criteria.GetAbilityFromNumber(Ability);
|
||||
|
||||
pk.PID = PID;
|
||||
pk.Nature = nature;
|
||||
pk.Gender = gender;
|
||||
pk.RefreshAbility(ability);
|
||||
|
||||
SetIVs(pk);
|
||||
}
|
||||
|
||||
protected override bool IsMatchNatureGenderShiny(PKM pk)
|
||||
{
|
||||
return PID == pk.EncryptionConstant;
|
||||
}
|
||||
}
|
|
@ -1,169 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Trade Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTradeGB"/>
|
||||
public abstract record EncounterTrade4(GameVersion Version) : EncounterTrade(Version)
|
||||
{
|
||||
public sealed override int Generation => 4;
|
||||
public override EntityContext Context => EntityContext.Gen4;
|
||||
|
||||
protected static readonly string[] RanchOTNames = { string.Empty, "ユカリ", "Hayley", "EULALIE", "GIULIA", "EUKALIA", string.Empty, "Eulalia" };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Trade Encounter with a fixed PID value.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTrade4"/>
|
||||
public sealed record EncounterTrade4PID : EncounterTrade4, IContestStatsReadOnly
|
||||
{
|
||||
/// <summary>
|
||||
/// Fixed <see cref="PKM.PID"/> value the encounter must have.
|
||||
/// </summary>
|
||||
public readonly uint PID;
|
||||
|
||||
public override Shiny Shiny => Shiny.FixedValue;
|
||||
|
||||
public EncounterTrade4PID(GameVersion game, uint pid, ushort species, byte level) : base(game)
|
||||
{
|
||||
PID = pid;
|
||||
Species = species;
|
||||
Level = level;
|
||||
}
|
||||
|
||||
public byte CNT_Cool { get; init; }
|
||||
public byte CNT_Beauty { get; init; }
|
||||
public byte CNT_Cute { get; init; }
|
||||
public byte CNT_Smart { get; init; }
|
||||
public byte CNT_Tough { get; init; }
|
||||
public byte CNT_Sheen { get; init; }
|
||||
|
||||
public byte Contest
|
||||
{
|
||||
init
|
||||
{
|
||||
CNT_Cool = value;
|
||||
CNT_Beauty = value;
|
||||
CNT_Cute = value;
|
||||
CNT_Smart = value;
|
||||
CNT_Tough = value;
|
||||
//CNT_Sheen = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int MetLocation { get; init; }
|
||||
public override int Location => MetLocation == default ? Locations.LinkTrade4NPC : MetLocation;
|
||||
|
||||
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
|
||||
{
|
||||
if (!base.IsMatchExact(pk, evo))
|
||||
return false;
|
||||
|
||||
if (pk is IContestStatsReadOnly s && s.IsContestBelow(this))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
var pk4 = (PK4) pk;
|
||||
|
||||
if (Version == GameVersion.DPPt)
|
||||
{
|
||||
// Has German Language ID for all except German origin, which is English
|
||||
if (Species == (int)Core.Species.Magikarp)
|
||||
pk4.Language = (int)(pk4.Language == (int)LanguageID.German ? LanguageID.English : LanguageID.German);
|
||||
// All other trades received (DP only): English games have a Japanese language ID instead of English.
|
||||
else if (pk4.Version is not (int)GameVersion.Pt && pk4.Language == (int)LanguageID.English)
|
||||
pk4.Language = (int)LanguageID.Japanese;
|
||||
}
|
||||
else // HGSS
|
||||
{
|
||||
// Has English Language ID for all except English origin, which is French
|
||||
if (Species == (int)Core.Species.Pikachu)
|
||||
pk4.Language = (int)(pk4.Language == (int)LanguageID.English ? LanguageID.French : LanguageID.English);
|
||||
}
|
||||
|
||||
this.CopyContestStatsTo(pk4);
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
pk.PID = PID;
|
||||
pk.Nature = (int)(PID % 25);
|
||||
pk.Gender = Gender;
|
||||
pk.RefreshAbility(Ability.GetSingleValue());
|
||||
SetIVs(pk);
|
||||
}
|
||||
|
||||
protected override bool IsMatchNatureGenderShiny(PKM pk)
|
||||
{
|
||||
return PID == pk.EncryptionConstant;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Trade Encounter with a fixed PID value, met location, and version.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTradeGB"/>
|
||||
public sealed record EncounterTrade4RanchGift : EncounterTrade4
|
||||
{
|
||||
/// <summary>
|
||||
/// Fixed <see cref="PKM.PID"/> value the encounter must have.
|
||||
/// </summary>
|
||||
public readonly uint PID;
|
||||
|
||||
public int MetLocation { private get; init; }
|
||||
public override int Location => MetLocation;
|
||||
public override Shiny Shiny => Shiny.FixedValue;
|
||||
|
||||
public EncounterTrade4RanchGift(uint pid, ushort species, byte level) : base(GameVersion.D)
|
||||
{
|
||||
PID = pid;
|
||||
Species = species;
|
||||
Level = level;
|
||||
TrainerNames = RanchOTNames;
|
||||
}
|
||||
|
||||
protected override bool IsMatchNatureGenderShiny(PKM pk)
|
||||
{
|
||||
return PID == pk.EncryptionConstant;
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
pk.PID = PID;
|
||||
pk.Nature = (int)(PID % 25);
|
||||
pk.Gender = Gender;
|
||||
pk.RefreshAbility(Ability.GetSingleValue());
|
||||
SetIVs(pk);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generation 4 Trade Encounter with a fixed location and version, as well as special details.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTrade4"/>
|
||||
public sealed record EncounterTrade4RanchSpecial : EncounterTrade4, IFatefulEncounterReadOnly
|
||||
{
|
||||
public override int Location => 3000;
|
||||
public bool FatefulEncounter => true;
|
||||
|
||||
public EncounterTrade4RanchSpecial(ushort species, byte level) : base(GameVersion.D)
|
||||
{
|
||||
Species = species;
|
||||
Level = level;
|
||||
Ball = 0x10;
|
||||
OTGender = 1;
|
||||
TrainerNames = RanchOTNames;
|
||||
}
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
pk.FatefulEncounter = true;
|
||||
}
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Generation 5 Trade Encounter
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="EncounterTrade"/>
|
||||
public sealed record EncounterTrade5(GameVersion Version) : EncounterTrade(Version)
|
||||
{
|
||||
public override int Generation => 5;
|
||||
public override EntityContext Context => EntityContext.Gen5;
|
||||
public override int Location => Locations.LinkTrade5NPC;
|
||||
}
|
||||
|
||||
/// <summary>Generation 5 Trade with Fixed PID</summary>
|
||||
/// <param name="PID"> Fixed <see cref="PKM.PID"/> value the encounter must have.</param>
|
||||
public sealed record EncounterTrade5PID(GameVersion Version, uint PID) : EncounterTrade(Version)
|
||||
{
|
||||
public override int Generation => 5;
|
||||
public override EntityContext Context => EntityContext.Gen5;
|
||||
public override int Location => Locations.LinkTrade5NPC;
|
||||
|
||||
public override Shiny Shiny => Shiny.FixedValue;
|
||||
|
||||
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
|
||||
{
|
||||
base.ApplyDetails(sav, criteria, pk);
|
||||
|
||||
// Trades for JPN games have language ID of 0, not 1.
|
||||
if (pk.Language == (int) LanguageID.Japanese)
|
||||
pk.Language = 0;
|
||||
}
|
||||
|
||||
protected override void SetPINGA(PKM pk, EncounterCriteria criteria)
|
||||
{
|
||||
var pi = pk.PersonalInfo;
|
||||
int gender = criteria.GetGender(EntityGender.GetFromPID(Species, PID), pi);
|
||||
int nature = (int)criteria.GetNature(Nature);
|
||||
int ability = criteria.GetAbilityFromNumber(Ability);
|
||||
|
||||
pk.PID = PID;
|
||||
pk.Nature = nature;
|
||||
pk.Gender = gender;
|
||||
pk.RefreshAbility(ability);
|
||||
|
||||
SetIVs(pk);
|
||||
}
|
||||
|
||||
protected override bool IsMatchNatureGenderShiny(PKM pk)
|
||||
{
|
||||
if (PID != pk.EncryptionConstant)
|
||||
return false;
|
||||
if (Nature != Nature.Random && (int)Nature != pk.Nature) // gen5 BW only
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool IsValidMissingLanguage(PKM pk)
|
||||
{
|
||||
// Generation 5 trades from B/W forgot to set the Language ID, so it remains as 0.
|
||||
// This value is fixed when it is transferred from PK5->PK6
|
||||
// B2/W2 is unaffected by this game data bug.
|
||||
return pk is { Context: EntityContext.Gen5, BW: true };
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue