From c61c572f3555e29cb7c51d0731b7b1705b7c44c2 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 15 Jul 2017 19:59:38 -0700 Subject: [PATCH] update channel generation Thanks @admiral-fish ! --- PKHeX.Core/Legality/RNG/MethodFinder.cs | 5 ++++- PKHeX.Core/Legality/RNG/PIDGenerator.cs | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/PKHeX.Core/Legality/RNG/MethodFinder.cs b/PKHeX.Core/Legality/RNG/MethodFinder.cs index a8edce6c5..cff19145f 100644 --- a/PKHeX.Core/Legality/RNG/MethodFinder.cs +++ b/PKHeX.Core/Legality/RNG/MethodFinder.cs @@ -209,7 +209,10 @@ namespace PKHeX.Core return false; } - var channel = GetSeedsFromPID(RNG.XDRNG, bot, top ^ 0x8000); + var undo = top ^ 0x8000; + if ((undo > 7 ? 0 : 1) != (bot ^ pk.SID ^ 40122)) + top = undo; + var channel = GetSeedsFromPID(RNG.XDRNG, bot, top); foreach (var seed in channel) { var C = RNG.XDRNG.Advance(seed, 3); // held item diff --git a/PKHeX.Core/Legality/RNG/PIDGenerator.cs b/PKHeX.Core/Legality/RNG/PIDGenerator.cs index c5afe0a72..a67723e43 100644 --- a/PKHeX.Core/Legality/RNG/PIDGenerator.cs +++ b/PKHeX.Core/Legality/RNG/PIDGenerator.cs @@ -71,8 +71,16 @@ var D = rng.Next(C); // Version var E = rng.Next(D); // OT Gender - pk.SID = (int)(O >> 16); - pk.PID = (A & 0xFFFF0000 | B >> 16) ^ 0x80000000; + var TID = 40122; + var SID = (int)(O >> 16); + var pid1 = A >> 16; + var pid2 = B >> 16; + pk.TID = TID; + pk.SID = SID; + var pid = pid1 << 16 | pid2; + if ((pid2 > 7 ? 0 : 1) != (pid1 ^ SID ^ TID)) + pid ^= 0x80000000; + pk.PID = pid; pk.HeldItem = (int)(C >> 31) + 169; // 0-Ganlon, 1-Salac pk.Version = (int)(D >> 31) + 1; // 0-Sapphire, 1-Ruby pk.OT_Gender = (int)(E >> 31);