From f731dd924843bae2adba079040bc6cb05e4e6718 Mon Sep 17 00:00:00 2001 From: chenzw95 Date: Mon, 7 Mar 2016 11:24:34 +0800 Subject: [PATCH] For Gen III & IV Pokemon, generate PIDs to ensure legal nature --- Misc/PKX.cs | 45 +++++++++++++++++++++++++++++++++------------ PKX/f1-Main.cs | 2 +- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/Misc/PKX.cs b/Misc/PKX.cs index bfefcd024..445c87daa 100644 --- a/Misc/PKX.cs +++ b/Misc/PKX.cs @@ -520,21 +520,42 @@ internal static uint getTSV(uint TID, uint SID) { return (TID ^ SID) >> 4; } - internal static uint getRandomPID(int species, int cg) + internal static uint getRandomPID(int species, int cg, int origin, int nature) { int gt = Personal[species].Gender; - if (gt == 255 || gt == 254 || gt == 0) // Set Gender(less) - return Util.rnd32(); // PID can be anything - - do + if (origin <= 15) // Gen III/IV { - uint pid = Util.rnd32(); - uint gv = pid & 0xFF; - if (cg == 1 && gv <= gt) // Female - return pid; // PID Passes - if (cg == 0 && gv > gt) // Male - return pid; // PID Passes - } while (true); // Loop until we find a suitable PID + do + { + uint pid = Util.rnd32(); + uint gv = pid & 0xFF; + if (pid % 25 == nature) + { + if (gt == 255 || gt == 254 || gt == 0) // Set Gender(less) + return pid; // PID can be anything + else + if (cg == 1 && gv <= gt) // Female + return pid; // PID Passes + if (cg == 0 && gv > gt) // Male + return pid; // PID Passes + } + } while (true); // Loop until we find a suitable PID + } + else + { + if (gt == 255 || gt == 254 || gt == 0) // Set Gender(less) + return Util.rnd32(); // PID can be anything + + do + { + uint pid = Util.rnd32(); + uint gv = pid & 0xFF; + if (cg == 1 && gv <= gt) // Female + return pid; // PID Passes + if (cg == 0 && gv > gt) // Male + return pid; // PID Passes + } while (true); // Loop until we find a suitable PID + } } // SAV Manipulation diff --git a/PKX/f1-Main.cs b/PKX/f1-Main.cs index e2faf3120..12f2a3dc3 100644 --- a/PKX/f1-Main.cs +++ b/PKX/f1-Main.cs @@ -1603,7 +1603,7 @@ private void updateRandomEVs(object sender, EventArgs e) } private void updateRandomPID(object sender, EventArgs e) { - TB_PID.Text = PKX.getRandomPID(Util.getIndex(CB_Species), PKX.getGender(Label_Gender.Text)).ToString("X8"); + TB_PID.Text = PKX.getRandomPID(Util.getIndex(CB_Species), PKX.getGender(Label_Gender.Text), Util.getIndex(CB_GameOrigin), Util.getIndex(CB_Nature)).ToString("X8"); getQuickFiller(dragout); } private void updateRandomEC(object sender, EventArgs e)