From 3ef12c3ebe414ad030dfe030959b252e27f9c3a1 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 10 Dec 2022 19:53:59 -0800 Subject: [PATCH] Encounter Crossover/Wander tolerance (30f) (#3683) * Update encounter_wild_paldea.pkl * Add weather/time mark checks * Set tolerance to 30f, swap crabrawler evos --- PKHeX.Core/Legality/Areas/EncounterArea9.cs | 12 +++- .../Encounters/EncounterSlot/AreaWeather9.cs | 42 ++++++++++++ .../EncounterSlot/EncounterSlot9.cs | 64 +++++++++++++++++- .../EncounterStatic/EncounterFixed9.cs | 10 ++- .../ByGeneration/EncounterGenerator9.cs | 26 ++++--- PKHeX.Core/Legality/Verifiers/MarkVerifier.cs | 4 +- .../Legality/Verifiers/Ribbons/MarkRules.cs | 63 ++++++++--------- PKHeX.Core/Resources/byte/evolve/evos_sv.pkl | Bin 7940 -> 7940 bytes .../wild/Gen9/encounter_fixed_paldea.pkl | Bin 8600 -> 8960 bytes .../wild/Gen9/encounter_wild_paldea.pkl | Bin 15704 -> 101096 bytes PKHeX.Core/Ribbons/RibbonIndex.cs | 27 ++++++-- .../PKHeX.Core.Tests/Legality/LegalityData.cs | 17 +++++ 12 files changed, 206 insertions(+), 59 deletions(-) create mode 100644 PKHeX.Core/Legality/Encounters/EncounterSlot/AreaWeather9.cs diff --git a/PKHeX.Core/Legality/Areas/EncounterArea9.cs b/PKHeX.Core/Legality/Areas/EncounterArea9.cs index ef74ba996..bb1afded3 100644 --- a/PKHeX.Core/Legality/Areas/EncounterArea9.cs +++ b/PKHeX.Core/Legality/Areas/EncounterArea9.cs @@ -12,6 +12,8 @@ public sealed record EncounterArea9 : EncounterArea { public readonly EncounterSlot9[] Slots; + public ushort CrossFrom { get; init; } + protected override IReadOnlyList Raw => Slots; public static EncounterArea9[] GetAreas(BinLinkerAccessor input, GameVersion game) @@ -25,12 +27,13 @@ public static EncounterArea9[] GetAreas(BinLinkerAccessor input, GameVersion gam private EncounterArea9(ReadOnlySpan areaData, GameVersion game) : base(game) { Location = areaData[0]; - Slots = ReadSlots(areaData[2..]); + CrossFrom = areaData[2]; + Slots = ReadSlots(areaData[4..]); } private EncounterSlot9[] ReadSlots(ReadOnlySpan areaData) { - const int size = 6; + const int size = 8; var result = new EncounterSlot9[areaData.Length / size]; for (int i = 0; i < result.Length; i++) { @@ -38,9 +41,12 @@ private EncounterSlot9[] ReadSlots(ReadOnlySpan areaData) var species = ReadUInt16LittleEndian(slot); var form = slot[2]; var gender = (sbyte)slot[3]; + var min = slot[4]; var max = slot[5]; - result[i] = new EncounterSlot9(this, species, form, min, max, gender); + var time = slot[6]; + + result[i] = new EncounterSlot9(this, species, form, min, max, gender, time); } return result; } diff --git a/PKHeX.Core/Legality/Encounters/EncounterSlot/AreaWeather9.cs b/PKHeX.Core/Legality/Encounters/EncounterSlot/AreaWeather9.cs new file mode 100644 index 000000000..20061634c --- /dev/null +++ b/PKHeX.Core/Legality/Encounters/EncounterSlot/AreaWeather9.cs @@ -0,0 +1,42 @@ +using System; +using static PKHeX.Core.RibbonIndex; +using static PKHeX.Core.AreaWeather9; + +namespace PKHeX.Core; + +/// +/// Encounter Conditions for +/// +[Flags] +public enum AreaWeather9 : ushort +{ + None, + Normal = 1, + Overcast = 1 << 1, + Raining = 1 << 2, + Thunderstorm = 1 << 3, + Intense_Sun = 1 << 4, + Snowing = 1 << 5, + Snowstorm = 1 << 6, + Sandstorm = 1 << 7, + Heavy_Fog = 1 << 8, + + Standard = Normal | Overcast | Raining | Thunderstorm, + Sand = Normal | Overcast | Raining | Sandstorm, + Snow = Normal | Overcast | Snowing | Snowstorm, + Inside = Normal | Overcast, +} + +public static class AreaWeather9Extensions +{ + public static bool IsMarkCompatible(this AreaWeather9 weather, RibbonIndex m) => m switch + { + MarkCloudy => (weather & Overcast) != 0, + MarkRainy => (weather & Raining) != 0, + MarkStormy => (weather & Thunderstorm) != 0, + MarkSnowy => (weather & Snowing) != 0, + MarkBlizzard => (weather & Snowstorm) != 0, + MarkSandstorm => (weather & Sandstorm) != 0, + _ => true, + }; +} diff --git a/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot9.cs b/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot9.cs index 86ad852d2..4e0daff4c 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot9.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot9.cs @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using static PKHeX.Core.AreaWeather9; + namespace PKHeX.Core; /// @@ -9,10 +12,12 @@ 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) : base(area, species, form, min, max) + 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) @@ -33,4 +38,61 @@ protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteri 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; + } + + /// + /// Location IDs matched with possible weather types. + /// + internal static readonly Dictionary 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) + }; } diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterFixed9.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterFixed9.cs index 2ea97eb4e..cf4549f67 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterFixed9.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterFixed9.cs @@ -37,7 +37,8 @@ private static EncounterFixed9 ReadEncounter(ReadOnlySpan data) => new() Level = data[0x03], FlawlessIVCount = data[0x04], TeraType = (GemType)data[0x05], - // 2 bytes reserved + Gender = (sbyte)data[0x06], + // 1 byte reserved Moves = new Moveset( BinaryPrimitives.ReadUInt16LittleEndian(data[0x08..]), BinaryPrimitives.ReadUInt16LittleEndian(data[0x0A..]), @@ -57,6 +58,13 @@ protected override bool IsMatchLocation(PKM pk) return loc == Location0 || loc == Location1 || loc == Location2; } + 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)) diff --git a/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator9.cs b/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator9.cs index 621cd2394..eeed05fcc 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator9.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator9.cs @@ -62,22 +62,26 @@ private static IEnumerable GetEncounters(PKM pk, EvoCriteria[] c yield break; } - // Static Encounters can collide with wild encounters (close match); don't break if a Static Encounter is yielded. - var encs = GetValidStaticEncounter(pk, chain, game); - foreach (var z in encs) + if (pk is not IRibbonIndex r || !r.HasEncounterMark()) { - var match = z.GetMatchRating(pk); - if (match == Match) + var encs = GetValidStaticEncounter(pk, chain, game); + foreach (var z in encs) { - yield return z; - } - else if (match < rating) - { - cache = z; - rating = match; + var match = z.GetMatchRating(pk); + if (match == Match) + { + yield return z; + } + else if (match < rating) + { + cache = z; + rating = match; + } } } + // Wild encounters are more permissive than static encounters. + // Can have encounter marks, can have varied scales/shiny states. foreach (var z in GetValidWildEncounters(pk, chain, game)) { var match = z.GetMatchRating(pk); diff --git a/PKHeX.Core/Legality/Verifiers/MarkVerifier.cs b/PKHeX.Core/Legality/Verifiers/MarkVerifier.cs index 9eeaff51b..cb9294b6d 100644 --- a/PKHeX.Core/Legality/Verifiers/MarkVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/MarkVerifier.cs @@ -48,7 +48,7 @@ private void VerifyMarksPresent(LegalityAnalysis data, IRibbonIndex m) return; } - bool result = MarkRules.IsMarkValid8(mark, data.Entity, data.EncounterMatch); + bool result = MarkRules.IsEncounterMarkValid(mark, data.Entity, data.EncounterMatch); if (!result) { data.AddLine(GetInvalid(string.Format(LRibbonMarkingFInvalid_0, GetRibbonNameSafe(mark)))); @@ -103,7 +103,7 @@ private void VerifyShedinjaAffixed(LegalityAnalysis data, RibbonIndex affix, PKM var enc = data.EncounterOriginal; if (affix.IsEncounterMark()) { - if (!MarkRules.IsMarkValid8(affix, pk, enc)) + if (!MarkRules.IsEncounterMarkValid(affix, pk, enc)) data.AddLine(GetInvalid(string.Format(LRibbonMarkingAffixedF_0, GetRibbonNameSafe(affix)))); return; } diff --git a/PKHeX.Core/Legality/Verifiers/Ribbons/MarkRules.cs b/PKHeX.Core/Legality/Verifiers/Ribbons/MarkRules.cs index e39a0625a..58c37922c 100644 --- a/PKHeX.Core/Legality/Verifiers/Ribbons/MarkRules.cs +++ b/PKHeX.Core/Legality/Verifiers/Ribbons/MarkRules.cs @@ -8,11 +8,6 @@ namespace PKHeX.Core; /// public static class MarkRules { - /// - /// Checks if the ribbon index is one of the specific SW/SH encounter-only marks. These marks are granted when the encounter spawns in the wild. - /// - public static bool IsEncounterMark(this RibbonIndex m) => (byte)m is >= (int)MarkLunchtime and <= (int)MarkSlump; - /// /// Checks if an encounter-only mark is possible to obtain for the encounter, if not lost via data manipulation. /// @@ -35,39 +30,50 @@ public static bool IsEncounterMarkLost(LegalityAnalysis data) /// /// Checks if a SW/SH mark is valid. /// - public static bool IsMarkValid8(RibbonIndex mark, PKM pk, IEncounterTemplate enc) + public static bool IsEncounterMarkValid(RibbonIndex mark, PKM pk, IEncounterTemplate enc) => enc switch { - return IsEncounterMarkAllowedAny(enc) && IsMarkAllowedSpecific(mark, pk, enc); - } + EncounterSlot8 or EncounterStatic8 { Gift: false, ScriptedNoMarks: false } => IsMarkAllowedSpecific8(mark, pk, enc), + EncounterSlot9 s => IsMarkAllowedSpecific9(mark, s), + _ => false, + }; /// /// Checks if a specific encounter mark is disallowed. /// /// False if mark is disallowed based on specific conditions. - public static bool IsMarkAllowedSpecific(RibbonIndex mark, PKM pk, IEncounterTemplate x) => mark switch + public static bool IsMarkAllowedSpecific8(RibbonIndex mark, PKM pk, IEncounterTemplate x) => mark switch { MarkCurry when !IsMarkAllowedCurry(pk, x) => false, MarkFishing when !IsMarkAllowedFishing(x) => false, MarkMisty when x.Generation == 8 && pk.Met_Level < EncounterArea8.BoostLevel && EncounterArea8.IsBoostedArea60Fog(pk.Met_Location) => false, MarkDestiny => x is EncounterSlot9, // Capture on Birthday - >= MarkCloudy and <= MarkMisty => IsWeatherPermitted(mark, x), + >= MarkCloudy and <= MarkMisty => IsWeatherPermitted8(mark, x), _ => true, }; - private static bool IsWeatherPermitted(RibbonIndex mark, IEncounterTemplate enc) + /// + /// Checks if a specific encounter mark is disallowed. + /// + /// False if mark is disallowed based on specific conditions. + public static bool IsMarkAllowedSpecific9(RibbonIndex mark, EncounterSlot9 x) => mark switch { - var permit = mark.GetWeather8(); + MarkCurry => false, + MarkFishing => false, + MarkDestiny => true, // Capture on Birthday + >= MarkLunchtime and <= MarkDawn => x.CanSpawnAtTime(mark), + >= MarkCloudy and <= MarkMisty => x.CanSpawnInWeather(mark), + _ => true, + }; - // Encounter slots check location weather, while static encounters check weather per encounter. - return enc switch - { - EncounterSlot8 w => IsSlotWeatherPermitted(permit, w), - EncounterStatic8 s => s.Weather.HasFlag(permit), - _ => false, - }; - } + // Encounter slots check location weather, while static encounters check weather per encounter. + private static bool IsWeatherPermitted8(RibbonIndex mark, IEncounterTemplate enc) => enc switch + { + EncounterSlot8 w => IsSlotWeatherPermittedSWSH(mark.GetWeather8(), w), + EncounterStatic8 s => s.Weather.HasFlag(mark.GetWeather8()), + _ => false, + }; - private static bool IsSlotWeatherPermitted(AreaWeather8 permit, EncounterSlot8 s) + private static bool IsSlotWeatherPermittedSWSH(AreaWeather8 permit, EncounterSlot8 s) { var location = s.Location; // If it's not in the main table, it can only have Normal weather. @@ -85,18 +91,7 @@ private static bool IsSlotWeatherPermitted(AreaWeather8 permit, EncounterSlot8 s } /// - /// Checks if any encounter-only mark is available for the . - /// - public static bool IsEncounterMarkAllowedAny(IEncounterTemplate enc) => enc.Generation >= 8 && enc switch - { - // Gen 8 - EncounterSlot8 or EncounterStatic8 { Gift: false, ScriptedNoMarks: false } => true, - EncounterSlot9 => true, - _ => false, - }; - - /// - /// Checks if a mark is valid. + /// Checks if a mark is valid. /// public static bool IsMarkAllowedCurry(PKM pk, IEncounterTemplate enc) { @@ -109,7 +104,7 @@ public static bool IsMarkAllowedCurry(PKM pk, IEncounterTemplate enc) } /// - /// Checks if a mark is valid. + /// Checks if a mark is valid. /// public static bool IsMarkAllowedFishing(IEncounterTemplate enc) { diff --git a/PKHeX.Core/Resources/byte/evolve/evos_sv.pkl b/PKHeX.Core/Resources/byte/evolve/evos_sv.pkl index f860da697de1673db5240fd7aa9743f0ae38be04..1d3605788d9b735b028c137d234f9aa3eedbeff0 100644 GIT binary patch delta 25 gcmZp%Yq8r9BE`eO5Xk(5iGe|#k%3`zg47Zg094=w?f?J) delta 25 gcmZp%Yq8r9BE_T5$iVP~iGhKGA&_}B(?f?J) diff --git a/PKHeX.Core/Resources/legality/wild/Gen9/encounter_fixed_paldea.pkl b/PKHeX.Core/Resources/legality/wild/Gen9/encounter_fixed_paldea.pkl index 08b50fcbc87ac1749eb2737f95b4d4359d203a7f..6fec4c9f40dbf73e4ad3eed804cdb709f12c7676 100644 GIT binary patch literal 8960 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 HD9HU6cvRhd literal 8600 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 literal 15704 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 x.GetRibbon((int)r); public static void SetRibbonIndex(this IRibbonIndex x, RibbonIndex r, bool value = true) => x.SetRibbon((int)r, value); - public static bool IsMark(this RibbonIndex r) => r is >= MarkLunchtime and <= MarkSlump; + public static bool IsEncounterMark(this RibbonIndex r) => r is >= MarkLunchtime and <= MarkSlump; + + /// + /// Checks if the ribbon index is one of the specific wild encounter-only marks. These marks are granted when the encounter spawns in the wild. + /// + public static bool HasEncounterMark(this IRibbonIndex m) + { + for (int i = (int)MarkLunchtime; i <= (int)MarkSlump; i++) + { + if (m.GetRibbon(i)) + return true; + } + return false; + } public static AreaWeather8 GetWeather8(this RibbonIndex x) => x switch { @@ -147,7 +160,7 @@ public static class RibbonIndexExtensions private enum RibbonIndexGroup : byte { None, - Mark, + EncounterMark, CountMemory, Common3, Common4, @@ -161,8 +174,8 @@ private enum RibbonIndexGroup : byte private static RibbonIndexGroup GetGroup(this RibbonIndex r) { - if (r.IsMark()) - return RibbonIndexGroup.Mark; + if (r.IsEncounterMark()) + return RibbonIndexGroup.EncounterMark; return r switch { ChampionG3 => RibbonIndexGroup.Common3, @@ -249,8 +262,8 @@ public static void Fix(this RibbonIndex r, RibbonVerifierArguments args, bool st var group = r.GetGroup(); switch (group) { - case RibbonIndexGroup.Mark: - r.FixMark(pk, state); + case RibbonIndexGroup.EncounterMark: + r.FixEncounterMark(pk, state); return; case RibbonIndexGroup.CountMemory: if (pk is not IRibbonSetMemory6 m6) @@ -365,7 +378,7 @@ public static void Fix(this RibbonIndex r, RibbonVerifierArguments args, bool st } } - private static void FixMark(this RibbonIndex r, PKM pk, bool state) + private static void FixEncounterMark(this RibbonIndex r, PKM pk, bool state) { if (pk is not IRibbonSetMark8 m) return; diff --git a/Tests/PKHeX.Core.Tests/Legality/LegalityData.cs b/Tests/PKHeX.Core.Tests/Legality/LegalityData.cs index 53f9409ac..c05ea341d 100644 --- a/Tests/PKHeX.Core.Tests/Legality/LegalityData.cs +++ b/Tests/PKHeX.Core.Tests/Legality/LegalityData.cs @@ -36,4 +36,21 @@ public class LegalityData t2.IsLevelUpRequired().Should().BeTrue(); } } + + [Fact] + public void EvolutionsOrderedSV() + { + // SV Crabrawler added a second, UseItem evolution method. Need to be sure it's before the more restrictive level-up method. + var tree = EvolutionTree.Evolves9; + var fEntries = typeof(EvolutionTree).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).First(z => z.Name == "Entries"); + if (fEntries.GetValue(tree) is not IReadOnlyList entries) + throw new ArgumentException(nameof(entries)); + var crab = entries[(int)Species.Crabrawler]; + + var t1 = crab[0].Method; + var t2 = crab[1].Method; + + t1.IsLevelUpRequired().Should().BeFalse(); + t2.IsLevelUpRequired().Should().BeTrue(); + } }