mirror of
https://github.com/kwsch/PKHeX
synced 2024-09-20 22:32:00 +00:00
Update gen5 shiny PID generating
Closes #1460 https://pastebin.com/GgcMjmwd
This commit is contained in:
parent
84cc366803
commit
ad69420ad9
4 changed files with 25 additions and 10 deletions
|
@ -266,8 +266,9 @@ namespace PKHeX.Core
|
|||
// generation 5 shiny PIDs
|
||||
if (low <= 0xFF)
|
||||
{
|
||||
var high = pid >> 16;
|
||||
if (((pk.TID ^ pk.SID ^ low) - high & 0xFFFE) == 0)
|
||||
var av = (pid >> 16) & 1;
|
||||
var genPID = PIDGenerator.GetMG5ShinyPID(low, av, pk.TID, pk.SID);
|
||||
if (genPID == pid)
|
||||
{
|
||||
pidiv = new PIDIV {NoSeed = true, Type = PIDType.G5MGShiny};
|
||||
return true;
|
||||
|
|
|
@ -142,5 +142,13 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static uint GetMG5ShinyPID(uint gval, uint av, int TID, int SID)
|
||||
{
|
||||
uint PID = (uint)((TID ^ SID ^ gval) << 16 | gval);
|
||||
if ((PID & 0x10000) != av << 16)
|
||||
PID ^= 0x10000;
|
||||
return PID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -269,13 +269,11 @@ namespace PKHeX.Core
|
|||
if (PIDType == 2) // Force Shiny
|
||||
{
|
||||
uint gb = pk.PID & 0xFF;
|
||||
pk.PID = (uint)((gb ^ pk.TID ^ pk.SID) << 16) | gb;
|
||||
// double check forced ability
|
||||
if (av == 1) pk.PID |= 0x10001; else pk.PID &= 0xFFFEFFFE;
|
||||
pk.PID = PIDGenerator.GetMG5ShinyPID(gb, (uint)av, pk.TID, pk.SID);
|
||||
}
|
||||
else if (PIDType != 1) // Force Not Shiny
|
||||
{
|
||||
if (((pk.PID >> 16) ^ (pk.PID & 0xffff) ^ pk.SID ^ pk.TID) < 8)
|
||||
if (pk.IsShiny)
|
||||
pk.PID ^= 0x10000000;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -333,13 +333,21 @@ namespace PKHeX.Core
|
|||
public int MarkHeart { get => Markings[3]; set { var marks = Markings; marks[3] = value; Markings = marks; } }
|
||||
public int MarkStar { get => Markings[4]; set { var marks = Markings; marks[4] = value; Markings = marks; } }
|
||||
public int MarkDiamond { get => Markings[5]; set { var marks = Markings; marks[5] = value; Markings = marks; } }
|
||||
protected int SwapBits(int n, int p1, int p2)
|
||||
/// <summary>
|
||||
/// Swaps bits at a given position
|
||||
/// </summary>
|
||||
/// <param name="value">Value to swap bits for</param>
|
||||
/// <param name="p1">Position of first bit to be swapped</param>
|
||||
/// <param name="p2">Position of second bit to be swapped</param>
|
||||
/// <remarks>Generation 3 marking values are swapped (Square-Triangle, instead of Triangle-Square).</remarks>
|
||||
/// <returns>Swapped bits value</returns>
|
||||
protected static int SwapBits(int value, int p1, int p2)
|
||||
{
|
||||
int bit1 = (n >> p1) & 1;
|
||||
int bit2 = (n >> p2) & 1;
|
||||
int bit1 = (value >> p1) & 1;
|
||||
int bit2 = (value >> p2) & 1;
|
||||
int x = bit1 ^ bit2;
|
||||
x = (x << p1) | (x << p2);
|
||||
return n ^ x;
|
||||
return value ^ x;
|
||||
}
|
||||
public string ShowdownText => ShowdownSet.GetShowdownText(this);
|
||||
public string[] QRText => this.GetQRLines();
|
||||
|
|
Loading…
Reference in a new issue