PKHeX/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic5N.cs
Kurt ef3cb34387
Refactor EvoCriteria to be a struct, reduce allocation (#3483)
* Make EvolutionCriteria struct

8 bytes per object instead of 26
Unify LevelMin/LevelMax to match EncounterTemplate
bubble up precise array type for better iteration

* Inline queue operations, less allocation

* Inline some logic

* Update EvolutionChain.cs

* Improve clarity on duplicate move check

* Search reverse

For a dual stage chain, finds it first iteration rather than second.
2022-04-23 21:33:17 -07:00

56 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(PKX.GetGenderFromPID(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 pkm, IDexLevel evo)
{
if (PID != pkm.PID)
return false;
return base.IsMatchExact(pkm, evo);
}
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
{
base.ApplyDetails(sav, 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.NPokémon = NSparkle;
pk5.OT_Name = GetOT(lang);
pk5.TID = 00002;
pk5.SID = 00000;
}
public static string GetOT(int lang) => lang == (int)LanguageID.Japanese ? "" : "N";
}
}