namespace PKHeX.Core { /// /// Generation 4 Pokéwalker Encounter /// /// public sealed record EncounterStatic4Pokewalker : EncounterStatic { public override int Generation => 4; public EncounterStatic4Pokewalker(ushort species, sbyte gender, byte level) : base(GameVersion.HGSS) { Species = species; Gender = gender; Level = level; Gift = true; Location = Locations.PokeWalker4; } protected override bool IsMatchLocation(PKM pkm) { if (pkm.Format == 4) return Location == pkm.Met_Location; return true; // transfer location verified later } protected override bool IsMatchLevel(PKM pkm, DexLevel evo) { if (pkm.Format != 4) // Met Level lost on PK4=>PK5 return Level <= evo.Level; return pkm.Met_Level == Level; } protected override bool IsMatchPartial(PKM pkm) { if (Gift && pkm.Ball != Ball) return true; return base.IsMatchPartial(pkm); } 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); } } }