diff --git a/PKHeX.csproj b/PKHeX.csproj
index 3f8f84849..9d12e9e0c 100644
--- a/PKHeX.csproj
+++ b/PKHeX.csproj
@@ -95,6 +95,12 @@
f3-MemoryAmie.cs
+
+ Form
+
+
+ frmReport.cs
+
@@ -175,6 +181,9 @@
f3-MemoryAmie.cs
+
+ frmReport.cs
+
ResXFileCodeGenerator
Designer
diff --git a/f1-Main.Designer.cs b/f1-Main.Designer.cs
index 31c6f6086..4a73ceae6 100644
--- a/f1-Main.Designer.cs
+++ b/f1-Main.Designer.cs
@@ -214,6 +214,8 @@ public void InitializeComponent()
this.Menu_OpenBoxUI = new System.Windows.Forms.ToolStripMenuItem();
this.Menu_ImportGen5 = new System.Windows.Forms.ToolStripMenuItem();
this.Menu_BoxIO = new System.Windows.Forms.ToolStripMenuItem();
+ this.codeGeneratorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.reportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.Menu_Options = new System.Windows.Forms.ToolStripMenuItem();
this.Menu_Language = new System.Windows.Forms.ToolStripMenuItem();
this.CB_MainLanguage = new System.Windows.Forms.ToolStripComboBox();
@@ -320,7 +322,6 @@ public void InitializeComponent()
this.B_OpenPokedex = new System.Windows.Forms.Button();
this.GB_SAVtools = new System.Windows.Forms.GroupBox();
this.L_SAVINDEX = new System.Windows.Forms.Label();
- this.codeGeneratorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tabMain.SuspendLayout();
this.Tab_Main.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.Label_IsShiny)).BeginInit();
@@ -2044,7 +2045,7 @@ public void InitializeComponent()
this.CHK_Star.AutoSize = true;
this.CHK_Star.Location = new System.Drawing.Point(182, 213);
this.CHK_Star.Name = "CHK_Star";
- this.CHK_Star.Size = new System.Drawing.Size(38, 17);
+ this.CHK_Star.Size = new System.Drawing.Size(35, 17);
this.CHK_Star.TabIndex = 13;
this.CHK_Star.Text = "★";
this.CHK_Star.UseVisualStyleBackColor = true;
@@ -2066,7 +2067,7 @@ public void InitializeComponent()
this.CHK_Square.AutoSize = true;
this.CHK_Square.Location = new System.Drawing.Point(6, 227);
this.CHK_Square.Name = "CHK_Square";
- this.CHK_Square.Size = new System.Drawing.Size(38, 17);
+ this.CHK_Square.Size = new System.Drawing.Size(35, 17);
this.CHK_Square.TabIndex = 11;
this.CHK_Square.Text = "■";
this.CHK_Square.UseVisualStyleBackColor = true;
@@ -2133,7 +2134,7 @@ public void InitializeComponent()
this.CHK_Triangle.AutoSize = true;
this.CHK_Triangle.Location = new System.Drawing.Point(6, 213);
this.CHK_Triangle.Name = "CHK_Triangle";
- this.CHK_Triangle.Size = new System.Drawing.Size(38, 17);
+ this.CHK_Triangle.Size = new System.Drawing.Size(35, 17);
this.CHK_Triangle.TabIndex = 10;
this.CHK_Triangle.Text = "▲";
this.CHK_Triangle.UseVisualStyleBackColor = true;
@@ -2541,7 +2542,8 @@ public void InitializeComponent()
this.Menu_OpenBoxUI,
this.Menu_ImportGen5,
this.Menu_BoxIO,
- this.codeGeneratorToolStripMenuItem});
+ this.codeGeneratorToolStripMenuItem,
+ this.reportToolStripMenuItem});
this.Menu_Tools.Name = "Menu_Tools";
this.Menu_Tools.Size = new System.Drawing.Size(48, 20);
this.Menu_Tools.Text = "Tools";
@@ -2569,6 +2571,21 @@ public void InitializeComponent()
this.Menu_BoxIO.Text = "Load/Dump Boxes";
this.Menu_BoxIO.Click += new System.EventHandler(this.Menu_DumpLoadBoxes_Click);
//
+ // codeGeneratorToolStripMenuItem
+ //
+ this.codeGeneratorToolStripMenuItem.Name = "codeGeneratorToolStripMenuItem";
+ this.codeGeneratorToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+ this.codeGeneratorToolStripMenuItem.Text = "Code Generator";
+ this.codeGeneratorToolStripMenuItem.Click += new System.EventHandler(this.codeGeneratorToolStripMenuItem_Click);
+ //
+ // reportToolStripMenuItem
+ //
+ this.reportToolStripMenuItem.Enabled = false;
+ this.reportToolStripMenuItem.Name = "reportToolStripMenuItem";
+ this.reportToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+ this.reportToolStripMenuItem.Text = "Report";
+ this.reportToolStripMenuItem.Click += new System.EventHandler(this.reportToolStripMenuItem_Click);
+ //
// Menu_Options
//
this.Menu_Options.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -3783,13 +3800,6 @@ public void InitializeComponent()
this.L_SAVINDEX.TabIndex = 16;
this.L_SAVINDEX.Text = "0";
//
- // codeGeneratorToolStripMenuItem
- //
- this.codeGeneratorToolStripMenuItem.Name = "codeGeneratorToolStripMenuItem";
- this.codeGeneratorToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
- this.codeGeneratorToolStripMenuItem.Text = "Code Generator";
- this.codeGeneratorToolStripMenuItem.Click += new System.EventHandler(this.codeGeneratorToolStripMenuItem_Click);
- //
// Form1
//
this.AllowDrop = true;
@@ -4208,6 +4218,7 @@ public void InitializeComponent()
private System.Windows.Forms.TextBox TB_PP2;
private System.Windows.Forms.TextBox TB_PP1;
private System.Windows.Forms.ToolStripMenuItem codeGeneratorToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem reportToolStripMenuItem;
}
}
diff --git a/f1-Main.cs b/f1-Main.cs
index 9b272d017..b6c79eded 100644
--- a/f1-Main.cs
+++ b/f1-Main.cs
@@ -6046,6 +6046,7 @@ private void openfile(byte[] input, string path, string ext)
{
B_ExportSAV.Enabled = false;
B_SwitchSAV.Enabled = false;
+ reportToolStripMenuItem.Enabled = false;
B_OUTPasserby.Enabled = B_OUTHallofFame.Enabled = B_JPEG.Enabled = false;
if ((BitConverter.ToUInt32(input, 0x100) != 0x41534944) && (BitConverter.ToUInt32(input, 0x5234) != 0x6E69616D))
{
@@ -6092,6 +6093,7 @@ private void openfile(byte[] input, string path, string ext)
{
B_ExportSAV.Enabled = true;
B_SwitchSAV.Enabled = true;
+ reportToolStripMenuItem.Enabled = true;
savindex = detectSAVIndex(input);
opensave(input, path, ext);
}
@@ -8061,6 +8063,7 @@ private void getBox(object sender, EventArgs e)
{
getPKXBoxes();
}
+
private void getTSV(object sender, EventArgs e)
{
uint TID = ToUInt32(TB_TID.Text);
@@ -8528,6 +8531,13 @@ private void codeGeneratorToolStripMenuItem_Click(object sender, EventArgs e)
CodeGenerator CodeGen = new PKHeX.CodeGenerator(this);
CodeGen.Show();
}
+
+ private void reportToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ frmReport ReportForm = new frmReport();
+ ReportForm.PopulateData(savefile);
+ ReportForm.ShowDialog();
+ }
}
#region Structs & Classes
public class cbItem
diff --git a/frmReport.Designer.cs b/frmReport.Designer.cs
new file mode 100644
index 000000000..afb1cd948
--- /dev/null
+++ b/frmReport.Designer.cs
@@ -0,0 +1,67 @@
+namespace PKHeX
+{
+ partial class frmReport
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ this.dgData = new System.Windows.Forms.DataGridView();
+ ((System.ComponentModel.ISupportInitialize)(this.dgData)).BeginInit();
+ this.SuspendLayout();
+ //
+ // dgData
+ //
+ this.dgData.AllowUserToAddRows = false;
+ this.dgData.AllowUserToDeleteRows = false;
+ dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
+ this.dgData.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
+ this.dgData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ this.dgData.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.dgData.Location = new System.Drawing.Point(0, 0);
+ this.dgData.Name = "dgData";
+ this.dgData.RowHeadersVisible = false;
+ this.dgData.Size = new System.Drawing.Size(559, 568);
+ this.dgData.TabIndex = 0;
+ //
+ // frmReport
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(559, 568);
+ this.Controls.Add(this.dgData);
+ this.Name = "frmReport";
+ this.Text = "Report";
+ ((System.ComponentModel.ISupportInitialize)(this.dgData)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.DataGridView dgData;
+ }
+}
\ No newline at end of file
diff --git a/frmReport.cs b/frmReport.cs
new file mode 100644
index 000000000..a799c6aea
--- /dev/null
+++ b/frmReport.cs
@@ -0,0 +1,403 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Security.Cryptography;
+namespace PKHeX
+{
+ public partial class frmReport : Form
+ {
+ private byte[] SaveData;
+ private const int PIDOFFSET = 0x18;
+ private const int TIDOFFSET = 0x0C;
+ private const int SIDOFFSET = 0x0E;
+ public frmReport()
+ {
+ InitializeComponent();
+ }
+ private static uint LCRNG(uint seed)
+ {
+ uint a = 0x41C64E6D;
+ uint c = 0x00006073;
+
+ seed = (seed * a + c) & 0xFFFFFFFF;
+ return seed;
+ }
+ public byte[] shuffleArray(byte[] pkx, uint sv)
+ {
+ byte[] ekx = new Byte[260];
+ Array.Copy(pkx, ekx, 8);
+
+ // Now to shuffle the blocks
+
+ // Define Shuffle Order Structure
+ var aloc = new byte[] { 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 2, 3, 1, 1, 2, 3, 2, 3, 1, 1, 2, 3, 2, 3 };
+ var bloc = new byte[] { 1, 1, 2, 3, 2, 3, 0, 0, 0, 0, 0, 0, 2, 3, 1, 1, 3, 2, 2, 3, 1, 1, 3, 2 };
+ var cloc = new byte[] { 2, 3, 1, 1, 3, 2, 2, 3, 1, 1, 3, 2, 0, 0, 0, 0, 0, 0, 3, 2, 3, 2, 1, 1 };
+ var dloc = new byte[] { 3, 2, 3, 2, 1, 1, 3, 2, 3, 2, 1, 1, 3, 2, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0 };
+
+ // Get Shuffle Order
+ var shlog = new byte[] { aloc[sv], bloc[sv], cloc[sv], dloc[sv] };
+
+ // UnShuffle Away!
+ for (int b = 0; b < 4; b++)
+ {
+ Array.Copy(pkx, 8 + 56 * shlog[b], ekx, 8 + 56 * b, 56);
+ }
+
+ // Fill the Battle Stats back
+ if (pkx.Length > 232)
+ {
+ Array.Copy(pkx, 232, ekx, 232, 28);
+ }
+ return ekx;
+ }
+ public byte[] decryptArray(byte[] ekx)
+ {
+ byte[] pkx = ekx;
+ uint pv = BitConverter.ToUInt32(pkx, 0);
+ uint sv = (((pv & 0x3E000) >> 0xD) % 24);
+
+ uint seed = pv;
+
+ // Decrypt Blocks with RNG Seed
+ for (int i = 8; i < 232; i += 2)
+ {
+ int pre = pkx[i] + ((pkx[i + 1]) << 8);
+ seed = LCRNG(seed);
+ int seedxor = (int)((seed) >> 16);
+ int post = (pre ^ seedxor);
+ pkx[i] = (byte)((post) & 0xFF);
+ pkx[i + 1] = (byte)(((post) >> 8) & 0xFF);
+ }
+
+ // Deshuffle
+ pkx = shuffleArray(pkx, sv);
+
+ // Decrypt the Party Stats
+ seed = pv;
+ for (int i = 232; i < 260; i += 2)
+ {
+ int pre = pkx[i] + ((pkx[i + 1]) << 8);
+ seed = LCRNG(seed);
+ int seedxor = (int)((seed) >> 16);
+ int post = (pre ^ seedxor);
+ pkx[i] = (byte)((post) & 0xFF);
+ pkx[i + 1] = (byte)(((post) >> 8) & 0xFF);
+ }
+ return pkx;
+ }
+ private UInt16 getTSV(UInt32 PID, UInt16 TID, UInt16 SID)
+ {
+ UInt16 tsv = Convert.ToUInt16((TID ^ SID) >> 4);
+ return Convert.ToUInt16(((PID >> 16) ^ (PID & 0xFFFF)) >> 4);
+ }
+ private int detectSAVIndex(byte[] data)
+ {
+ int savindex = 0;
+ SHA256 mySHA256 = SHA256Managed.Create();
+ {
+ byte[] difihash1 = new Byte[0x12C];
+ byte[] difihash2 = new Byte[0x12C];
+ Array.Copy(data, 0x330, difihash1, 0, 0x12C);
+ Array.Copy(data, 0x200, difihash2, 0, 0x12C);
+ byte[] hashValue1 = mySHA256.ComputeHash(difihash1);
+ byte[] hashValue2 = mySHA256.ComputeHash(difihash2);
+ byte[] actualhash = new Byte[0x20];
+ Array.Copy(data, 0x16C, actualhash, 0, 0x20);
+ if (hashValue1.SequenceEqual(actualhash))
+ {
+ savindex = 0;
+ }
+ else if (hashValue2.SequenceEqual(actualhash))
+ {
+ savindex = 1;
+ }
+ else
+ {
+ savindex = 2;
+ }
+ }
+ if ((data[0x168] ^ 1) != savindex && savindex != 2)
+ {
+ savindex = 2;
+ }
+ return savindex;
+ }
+ public void PopulateData(byte[] InputData)
+ {
+ //IList PL = new List();
+ SaveData = new byte[InputData.Length];
+ Array.Copy(InputData, SaveData, InputData.Length);
+ PokemonList PL = new PokemonList();
+ SaveGames.SaveStruct SaveGame = new SaveGames.SaveStruct("XY");
+ int savindex = detectSAVIndex(SaveData);
+ for (int BoxNum = 0; BoxNum < 31; BoxNum++)
+ {
+ int boxoffset = 0x27A00 + 0x7F000 * savindex + BoxNum * (0xE8 * 30);
+ for (int SlotNum = 0; SlotNum < 30; SlotNum++)
+ {
+ int offset = boxoffset + 0xE8 * SlotNum;
+ byte[] slotdata = new Byte[0xE8];
+ Array.Copy(SaveData, offset, slotdata, 0, 0xE8);
+ byte[] dslotdata = decryptArray(slotdata);
+ PKX pkm = new PKX(dslotdata);
+ PL.Add(pkm);
+ }
+ }
+ dgData.DataSource = PL;
+ dgData.AutoGenerateColumns = true;
+ }
+ public static string TrimFromZero(string input)
+ {
+ int index = input.IndexOf('\0');
+ if (index < 0)
+ return input;
+
+ return input.Substring(0, index);
+ }
+ public class PKX
+ {
+ private uint mEC, mPID, mIV32,
+
+ mexp,
+ mHP_EV, mATK_EV, mDEF_EV, mSPA_EV, mSPD_EV, mSPE_EV,
+ mHP_IV, mATK_IV, mDEF_IV, mSPE_IV, mSPA_IV, mSPD_IV,
+ mcnt_cool, mcnt_beauty, mcnt_cute, mcnt_smart, mcnt_tough, mcnt_sheen,
+ mmarkings, mhptype;
+
+ private string
+ mnicknamestr, mnotOT, mot, mgenderstring;
+
+ private int
+ mability, mabilitynum, mnature, mfeflag, mgenderflag, maltforms, mPKRS_Strain, mPKRS_Duration,
+ mmetlevel, motgender;
+
+ private bool
+ misegg, misnick, misshiny;
+
+ private ushort
+ mspecies, mhelditem, mTID, mSID, mTSV, mESV,
+ mmove1, mmove2, mmove3, mmove4,
+ mmove1_pp, mmove2_pp, mmove3_pp, mmove4_pp,
+ mmove1_ppu, mmove2_ppu, mmove3_ppu, mmove4_ppu,
+ meggmove1, meggmove2, meggmove3, meggmove4,
+ mchk,
+
+ mOTfriendship, mOTaffection,
+ megg_year, megg_month, megg_day,
+ mmet_year, mmet_month, mmet_day,
+ meggloc, mmetloc,
+ mball, mencountertype,
+ mgamevers, mcountryID, mregionID, mdsregID, motlang;
+
+ public uint EC { get { return mEC; } }
+ public uint PID { get { return mPID; } }
+ public uint IVs { get { return mIV32; } }
+ public uint EXP { get { return mexp; } }
+ public uint HP_EV { get { return mHP_EV; } }
+ public uint ATK_EV { get { return mATK_EV; } }
+ public uint DEF_EV { get { return mDEF_EV; } }
+ public uint SPA_EV { get { return mSPA_EV; } }
+ public uint SPD_EV { get { return mSPD_EV; } }
+ public uint SPE_EV { get { return mSPE_EV; } }
+ public uint HP_IV { get { return mHP_IV; } }
+ public uint ATK_IV { get { return mATK_IV; } }
+ public uint DEF_IV { get { return mDEF_IV; } }
+ public uint SPA_IV { get { return mSPA_IV; } }
+ public uint SPD_IV { get { return mSPD_IV; } }
+ public uint SPE_IV { get { return mSPE_IV; } }
+ public uint Cool { get { return mcnt_cool; } }
+ public uint Beauty { get { return mcnt_beauty; } }
+ public uint Cute { get { return mcnt_cute; } }
+ public uint Smart { get { return mcnt_smart; } }
+ public uint Tough { get { return mcnt_tough; } }
+ public uint Sheen { get { return mcnt_sheen; } }
+ public uint Markings { get { return mmarkings; } }
+ public uint HP_Type { get { return mhptype; } }
+
+ public string Nickname { get { return mnicknamestr; } }
+ public string NotOT { get { return mnotOT; } }
+ public string OT { get { return mot; } }
+ public string Gender { get { return mgenderstring; } }
+
+ public int Ability { get { return mability; } }
+ public int AbilityNum { get { return mabilitynum; } }
+ public int Nature { get { return mnature; } }
+ public int FatefulFlag { get { return mfeflag; } }
+ public int GenderFlag { get { return mgenderflag; } }
+ public int AltForms { get { return maltforms; } }
+ public int PKRS_Strain { get { return mPKRS_Strain; } }
+ public int PKRS_Days { get { return mPKRS_Duration; } }
+ public int MetLevel { get { return mmetlevel; } }
+ public int OT_Gender { get { return motgender; } }
+
+ public bool IsEgg { get { return misegg; } }
+ public bool IsNicknamed { get { return misnick; } }
+ public bool IsShiny { get { return misshiny; } }
+
+ public ushort Species { get { return mspecies; } }
+ public ushort HeldItem { get { return mhelditem; } }
+ public ushort TID { get { return mTID; } }
+ public ushort SID { get { return mSID; } }
+ public ushort TSV { get { return mTSV; } }
+ public ushort ESV { get { return mESV; } }
+ public ushort Move1 { get { return mmove1; } }
+ public ushort Move2 { get { return mmove2; } }
+ public ushort Move3 { get { return mmove3; } }
+ public ushort Move4 { get { return mmove4; } }
+ public ushort Move1_PP { get { return mmove1_pp; } }
+ public ushort Move2_PP { get { return mmove2_pp; } }
+ public ushort Move3_PP { get { return mmove3_pp; } }
+ public ushort Move4_PP { get { return mmove4_pp; } }
+ public ushort Move1_PPUp { get { return mmove1_ppu; } }
+ public ushort Move2_PPUp { get { return mmove2_ppu; } }
+ public ushort Move3_PPUp { get { return mmove3_ppu; } }
+ public ushort Move4_PPUp { get { return mmove4_ppu; } }
+ public ushort EggMove1 { get { return meggmove1; } }
+ public ushort EggMove2 { get { return meggmove2; } }
+ public ushort EggMove3 { get { return meggmove3; } }
+ public ushort EggMove4 { get { return meggmove4; } }
+ public ushort Checksum { get { return mchk; } }
+ public ushort Friendship { get { return mOTfriendship; } }
+ public ushort OT_Affection { get { return mOTaffection; } }
+ public ushort Egg_Year { get { return megg_year; } }
+ public ushort Egg_Day { get { return megg_month; } }
+ public ushort Egg_Month { get { return megg_day; } }
+ public ushort Met_Year { get { return mmet_year; } }
+ public ushort Met_Day { get { return mmet_month; } }
+ public ushort Met_Month { get { return mmet_day; } }
+ public ushort Egg_Location { get { return meggloc; } }
+ public ushort Met_Location { get { return mmetloc; } }
+ public ushort Ball { get { return mball; } }
+ public ushort Encounter { get { return mencountertype; } }
+ public ushort GameVersion { get { return mgamevers; } }
+ public ushort CountryID { get { return mcountryID; } }
+ public ushort RegionID { get { return mregionID; } }
+ public ushort DSRegionID { get { return mdsregID; } }
+ public ushort OTLang { get { return motlang; } }
+
+ public PKX(byte[] pkx)
+ {
+ mnicknamestr = "";
+ mnotOT = "";
+ mot = "";
+ mEC = BitConverter.ToUInt32(pkx, 0);
+ mchk = BitConverter.ToUInt16(pkx, 6);
+ mspecies = BitConverter.ToUInt16(pkx, 0x08);
+ mhelditem = BitConverter.ToUInt16(pkx, 0x0A);
+ mTID = BitConverter.ToUInt16(pkx, 0x0C);
+ mSID = BitConverter.ToUInt16(pkx, 0x0E);
+ mexp = BitConverter.ToUInt32(pkx, 0x10);
+ mability = pkx[0x14];
+ mabilitynum = pkx[0x15];
+ // 0x16, 0x17 - unknown
+ mPID = BitConverter.ToUInt32(pkx, 0x18);
+ mnature = pkx[0x1C];
+ mfeflag = pkx[0x1D] % 2;
+ mgenderflag = (pkx[0x1D] >> 1) & 0x3;
+ maltforms = (pkx[0x1D] >> 3);
+ mHP_EV = pkx[0x1E];
+ mATK_EV = pkx[0x1F];
+ mDEF_EV = pkx[0x20];
+ mSPA_EV = pkx[0x22];
+ mSPD_EV = pkx[0x23];
+ mSPE_EV = pkx[0x21];
+ mcnt_cool = pkx[0x24];
+ mcnt_beauty = pkx[0x25];
+ mcnt_cute = pkx[0x26];
+ mcnt_smart = pkx[0x27];
+ mcnt_tough = pkx[0x28];
+ mcnt_sheen = pkx[0x29];
+ mmarkings = pkx[0x2A];
+ mPKRS_Strain = pkx[0x2B] >> 4;
+ mPKRS_Duration = pkx[0x2B] % 0x10;
+
+ // Block B
+ mnicknamestr = TrimFromZero(Encoding.Unicode.GetString(pkx, 0x40, 24));
+ // 0x58, 0x59 - unused
+ mmove1 = BitConverter.ToUInt16(pkx, 0x5A);
+ mmove2 = BitConverter.ToUInt16(pkx, 0x5C);
+ mmove3 = BitConverter.ToUInt16(pkx, 0x5E);
+ mmove4 = BitConverter.ToUInt16(pkx, 0x60);
+ mmove1_pp = pkx[0x62];
+ mmove2_pp = pkx[0x63];
+ mmove3_pp = pkx[0x64];
+ mmove4_pp = pkx[0x65];
+ mmove1_ppu = pkx[0x66];
+ mmove2_ppu = pkx[0x67];
+ mmove3_ppu = pkx[0x68];
+ mmove4_ppu = pkx[0x69];
+ meggmove1 = BitConverter.ToUInt16(pkx, 0x6A);
+ meggmove2 = BitConverter.ToUInt16(pkx, 0x6C);
+ meggmove3 = BitConverter.ToUInt16(pkx, 0x6E);
+ meggmove4 = BitConverter.ToUInt16(pkx, 0x70);
+
+ // 0x72 - Super Training Flag - Passed with pkx to new form
+
+ // 0x73 - unused/unknown
+ mIV32 = BitConverter.ToUInt32(pkx, 0x74);
+ mHP_IV = mIV32 & 0x1F;
+ mATK_IV = (mIV32 >> 5) & 0x1F;
+ mDEF_IV = (mIV32 >> 10) & 0x1F;
+ mSPE_IV = (mIV32 >> 15) & 0x1F;
+ mSPA_IV = (mIV32 >> 20) & 0x1F;
+ mSPD_IV = (mIV32 >> 25) & 0x1F;
+ misegg = Convert.ToBoolean((mIV32 >> 30) & 1);
+ misnick = Convert.ToBoolean((mIV32 >> 31));
+
+ // Block C
+ mnotOT = TrimFromZero(Encoding.Unicode.GetString(pkx, 0x78, 24));
+ bool notOTG = Convert.ToBoolean(pkx[0x92]);
+ // Memory Editor edits everything else with pkx in a new form
+
+ // Block D
+ mot = TrimFromZero(Encoding.Unicode.GetString(pkx, 0xB0, 24));
+ // 0xC8, 0xC9 - unused
+ mOTfriendship = pkx[0xCA];
+ mOTaffection = pkx[0xCB]; // Handled by Memory Editor
+ // 0xCC, 0xCD, 0xCE, 0xCF, 0xD0
+ megg_year = pkx[0xD1];
+ megg_month = pkx[0xD2];
+ megg_day = pkx[0xD3];
+ mmet_year = pkx[0xD4];
+ mmet_month = pkx[0xD5];
+ mmet_day = pkx[0xD6];
+ // 0xD7 - unused
+ meggloc = BitConverter.ToUInt16(pkx, 0xD8);
+ mmetloc = BitConverter.ToUInt16(pkx, 0xDA);
+ mball = pkx[0xDC];
+ mmetlevel = pkx[0xDD] & 0x7F;
+ motgender = (pkx[0xDD]) >> 7;
+ mencountertype = pkx[0xDE];
+ mgamevers = pkx[0xDF];
+ mcountryID = pkx[0xE0];
+ mregionID = pkx[0xE1];
+ mdsregID = pkx[0xE2];
+ motlang = pkx[0xE3];
+
+ if (mgenderflag == 0)
+ {
+ mgenderstring = "♂";
+ }
+ else if (mgenderflag == 1)
+ {
+ mgenderstring = "♀";
+ }
+ else mgenderstring = "-";
+
+ mhptype = (15 * ((mHP_IV & 1) + 2 * (mATK_IV & 1) + 4 * (mDEF_IV & 1) + 8 * (mSPE_IV & 1) + 16 * (mSPA_IV & 1) + 32 * (mSPD_IV & 1))) / 63 + 1;
+
+ mTSV = (ushort)((mTID ^ mSID) >> 4);
+ mESV = (ushort)(((mPID >> 16) ^ (mPID & 0xFFFF)) >> 4);
+
+ misshiny = (mTSV == mESV);
+ }
+ }
+ public class PokemonList : System.Collections.ObjectModel.ObservableCollection { }
+ }
+}
diff --git a/frmReport.resx b/frmReport.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/frmReport.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file