Swap markings in gen3

Closes #1463
This commit is contained in:
Kurt 2017-09-17 13:07:12 -07:00
parent c07a36c333
commit 84cc366803
4 changed files with 11 additions and 3 deletions

View File

@ -178,7 +178,7 @@ public CK3(byte[] decryptedData = null, string ident = null)
public override int AbilityNumber { get => 1 << Data[0xCC]; set => Data[0xCC] = (byte)((value >> 1) & 1); }
public override bool Valid { get => Data[0xCD] == 0; set { if (value) Data[0xCD] = 0; } }
// 0xCE unknown
public override int MarkValue { get => Data[0xCF]; protected set => Data[0xCF] = (byte)value; }
public override int MarkValue { get => SwapBits(Data[0xCF], 1, 2); protected set => Data[0xCF] = (byte)SwapBits(value, 1, 2); }
public override int PKRS_Days { get => Math.Max((sbyte)Data[0xD0], (sbyte)0); set => Data[0xD0] = (byte)(value == 0 ? 0xFF : value & 0xF); }
public int ShadowID { get => BigEndian.ToUInt16(Data, 0xD8); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0xD8); }
public int Purification { get => BigEndian.ToInt32(Data, 0xDC); set => BigEndian.GetBytes(value).CopyTo(Data, 0xDC); }

View File

@ -51,7 +51,7 @@ public PK3(byte[] decryptedData = null, string ident = null)
public override string Nickname { get => GetString(0x08, 10); set => SetString(IsEgg ? "タマゴ" : value, 10).CopyTo(Data, 0x08); }
public override int Language { get => BitConverter.ToUInt16(Data, 0x12) & 0xFF; set => BitConverter.GetBytes((ushort)(IsEgg ? 0x601 : value | 0x200)).CopyTo(Data, 0x12); }
public override string OT_Name { get => GetString(0x14, 7); set => SetString(value, 7).CopyTo(Data, 0x14); }
public override int MarkValue { get => Data[0x1B]; protected set => Data[0x1B] = (byte)value; }
public override int MarkValue { get => SwapBits(Data[0x1B], 1, 2); protected set => Data[0x1B] = (byte)SwapBits(value, 1, 2); }
public override ushort Checksum { get => BitConverter.ToUInt16(Data, 0x1C); set => BitConverter.GetBytes(value).CopyTo(Data, 0x1C); }
public override ushort Sanity { get => BitConverter.ToUInt16(Data, 0x1E); set => BitConverter.GetBytes(value).CopyTo(Data, 0x1E); }

View File

@ -333,6 +333,14 @@ public int GenNumber
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)
{
int bit1 = (n >> p1) & 1;
int bit2 = (n >> p2) & 1;
int x = bit1 ^ bit2;
x = (x << p1) | (x << p2);
return n ^ x;
}
public string ShowdownText => ShowdownSet.GetShowdownText(this);
public string[] QRText => this.GetQRLines();

View File

@ -64,7 +64,7 @@ public XK3(byte[] decryptedData = null, string ident = null)
public override int Stat_Level { get => Data[0x11]; set => Data[0x11] = (byte)value; }
public override int CNT_Sheen { get => Data[0x12]; set => Data[0x12] = (byte)value; }
public override int PKRS_Strain { get => Data[0x13] & 0xF; set => Data[0x13] = (byte)(value & 0xF); }
public override int MarkValue { get => Data[0x14]; protected set => Data[0x14] = (byte)value; }
public override int MarkValue { get => SwapBits(Data[0x14], 1, 2); protected set => Data[0x14] = (byte)SwapBits(value, 1, 2); }
public override int PKRS_Days { get => Math.Max((sbyte)Data[0x15], (sbyte)0); set => Data[0x15] = (byte)(value == 0 ? 0xFF : value & 0xF); }
// 0x16-0x1C Battle Related
private int XDPKMFLAGS { get => Data[0x1D]; set => Data[0x1D] = (byte)value; }