From 73b61e5bf037c316bcd8764c3f86306f7cafaaa8 Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 15 May 2019 17:14:48 -0700 Subject: [PATCH] Add gender changed azurill evo pokewalker edge case Closes #2311 , thanks @SpiredMoth ! --- .../Legality/Encounters/EncounterStatic.cs | 12 ++++++++- PKHeX.Core/Legality/RNG/MethodFinder.cs | 25 ++++++++++++++++-- ...ILL - 70F46DFFFF94 static genderchange.pk4 | Bin 0 -> 136 bytes 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 Tests/PKHeX.Core.Tests/Legality/Legal/Generation 4/184 - AZUMARILL - 70F46DFFFF94 static genderchange.pk4 diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic.cs index 9640aeafd..fe398b974 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic.cs @@ -337,7 +337,17 @@ public bool IsMatch(PKM pkm, int lvl) } if (Gender != -1 && Gender != pkm.Gender) - return false; + { + if (Species == (int)Core.Species.Azurill && Generation == 4 && Location == 233 && pkm.Gender == 0) + { + if (PKX.GetGenderFromPIDAndRatio(pkm.PID, 0xBF) != 1) + return false; + } + else + { + return false; + } + } if (Form != pkm.AltForm && !SkipFormCheck && !Legal.IsFormChangeable(pkm, Species)) return false; if (EggLocation == Locations.Daycare5 && Relearn.Length == 0 && pkm.RelearnMoves.Any(z => z != 0)) // gen7 eevee edge case diff --git a/PKHeX.Core/Legality/RNG/MethodFinder.cs b/PKHeX.Core/Legality/RNG/MethodFinder.cs index 51def1309..526984405 100644 --- a/PKHeX.Core/Legality/RNG/MethodFinder.cs +++ b/PKHeX.Core/Legality/RNG/MethodFinder.cs @@ -460,14 +460,35 @@ private static bool GetPokewalkerMatch(PKM pk, uint oldpid, out PIDIV pidiv) if (nature == 24) // impossible nature return GetNonMatch(out pidiv); - uint pid = PIDGenerator.GetPokeWalkerPID(pk.TID, pk.SID, nature, pk.Gender, pk.PersonalInfo.Gender); + var gender = pk.Gender; + uint pid = PIDGenerator.GetPokeWalkerPID(pk.TID, pk.SID, nature, gender, pk.PersonalInfo.Gender); if (pid != oldpid) - return GetNonMatch(out pidiv); + { + if (!(gender == 0 && IsAzurillEdgeCaseM(pk, nature, oldpid))) + return GetNonMatch(out pidiv); + } pidiv = new PIDIV {NoSeed = true, RNG = RNG.LCRNG, Type = PIDType.Pokewalker}; return true; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static bool IsAzurillEdgeCaseM(PKM pk, uint nature, uint oldpid) + { + // check for Azurill evolution edge case... 75% F-M is now 50% F-M; was this a F->M bend? + int spec = pk.Species; + if (spec != (int)Species.Marill && spec != (int)Species.Azumarill) + return false; + + const int AzurillGenderRatio = 0xBF; + var gender = PKX.GetGenderFromPIDAndRatio(pk.PID, AzurillGenderRatio); + if (gender != 1) + return false; + + var pid = PIDGenerator.GetPokeWalkerPID(pk.TID, pk.SID, nature, 1, AzurillGenderRatio); + return pid == oldpid; + } + private static bool GetColoStarterMatch(PKM pk, uint top, uint bot, uint[] IVs, out PIDIV pidiv) { if (pk.Version != 15 || (pk.Species != 196 && pk.Species != 197)) diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 4/184 - AZUMARILL - 70F46DFFFF94 static genderchange.pk4 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 4/184 - AZUMARILL - 70F46DFFFF94 static genderchange.pk4 new file mode 100644 index 0000000000000000000000000000000000000000..1976de1d4486f59446e304e52ced4b0755442f6d GIT binary patch literal 136 zcmbR8|9>t6!