diff --git a/Legality/Checks.cs b/Legality/Checks.cs
index 5c33a70c4..69d08b97a 100644
--- a/Legality/Checks.cs
+++ b/Legality/Checks.cs
@@ -710,7 +710,7 @@ namespace PKHeX
switch (pk6.OT_Memory)
{
case 2: // {0} hatched from an Egg and saw {1} for the first time at... {2}. {4} that {3}.
- if (!pk6.WasEgg)
+ if (!pk6.WasEgg && pk6.Egg_Location != 60004)
return new LegalityCheck(Severity.Invalid, "OT Memory: OT did not hatch this.");
return new LegalityCheck(Severity.Valid, "OT Memory is valid.");
case 4: // {0} became {1}’s friend when it arrived via Link Trade at... {2}. {4} that {3}.
diff --git a/Legality/Tables.cs b/Legality/Tables.cs
index 4ab3f3d22..8bb92c9bb 100644
--- a/Legality/Tables.cs
+++ b/Legality/Tables.cs
@@ -444,6 +444,7 @@ namespace PKHeX
486, // Regigigas
487, // Giratina
488, // Cresselia
+ 490, // Manaphy
491, // Darkrai
492, // Shaymin
493, // Arceus
diff --git a/Legality/Tables4.cs b/Legality/Tables4.cs
index 5ac132dc5..f3fe5724b 100644
--- a/Legality/Tables4.cs
+++ b/Legality/Tables4.cs
@@ -30,7 +30,7 @@ namespace PKHeX
internal static readonly ushort[] Pouch_Battle_DP = {
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67
};
- internal static readonly ushort[] HeldItems_DP = new ushort[1].Concat(Pouch_Items_DP).Concat(Pouch_Mail_DP).Concat(Pouch_Medicine_DP).Concat(Pouch_Berries_DP).Concat(Pouch_Ball_DP).ToArray();
+ internal static readonly ushort[] HeldItems_DP = new ushort[1].Concat(Pouch_Items_DP).Concat(Pouch_Mail_DP).Concat(Pouch_Medicine_DP).Concat(Pouch_Berries_DP).Concat(Pouch_Ball_DP).Concat(Pouch_TMHM_DP.Take(Pouch_TMHM_DP.Length - 8)).ToArray();
#endregion
#region Pt
@@ -47,7 +47,7 @@ namespace PKHeX
internal static readonly ushort[] Pouch_Ball_Pt = Pouch_Ball_DP;
internal static readonly ushort[] Pouch_Battle_Pt = Pouch_Battle_DP;
- internal static readonly ushort[] HeldItems_Pt = new ushort[1].Concat(Pouch_Items_Pt).Concat(Pouch_Mail_Pt).Concat(Pouch_Medicine_Pt).Concat(Pouch_Berries_Pt).Concat(Pouch_Ball_Pt).ToArray();
+ internal static readonly ushort[] HeldItems_Pt = new ushort[1].Concat(Pouch_Items_Pt).Concat(Pouch_Mail_Pt).Concat(Pouch_Medicine_Pt).Concat(Pouch_Berries_Pt).Concat(Pouch_Ball_Pt).Concat(Pouch_TMHM_Pt.Take(Pouch_TMHM_Pt.Length - 8)).ToArray();
#endregion
#region HGSS
@@ -64,7 +64,7 @@ namespace PKHeX
};
internal static readonly ushort[] Pouch_Battle_HGSS = Pouch_Battle_DP;
- internal static readonly ushort[] HeldItems_HGSS = new ushort[1].Concat(Pouch_Items_HGSS).Concat(Pouch_Mail_HGSS).Concat(Pouch_Medicine_HGSS).Concat(Pouch_Berries_HGSS).Concat(Pouch_Ball_Pt).ToArray();
+ internal static readonly ushort[] HeldItems_HGSS = new ushort[1].Concat(Pouch_Items_HGSS).Concat(Pouch_Mail_HGSS).Concat(Pouch_Medicine_HGSS).Concat(Pouch_Berries_HGSS).Concat(Pouch_Ball_Pt).Concat(Pouch_TMHM_HGSS.Take(Pouch_TMHM_HGSS.Length - 8)).ToArray();
#endregion
internal static readonly int[] MovePP_DP =
diff --git a/MainWindow/Main.Designer.cs b/MainWindow/Main.Designer.cs
index d07b01920..4c8015464 100644
--- a/MainWindow/Main.Designer.cs
+++ b/MainWindow/Main.Designer.cs
@@ -356,6 +356,7 @@
this.B_OpenSecretBase = new System.Windows.Forms.Button();
this.B_Pokeblocks = new System.Windows.Forms.Button();
this.B_LinkInfo = new System.Windows.Forms.Button();
+ this.B_CGearSkin = new System.Windows.Forms.Button();
this.dragout = new System.Windows.Forms.PictureBox();
this.mnuL = new System.Windows.Forms.ContextMenuStrip(this.components);
this.mnuLLegality = new System.Windows.Forms.ToolStripMenuItem();
@@ -851,7 +852,7 @@
// CHK_IsEgg
//
this.CHK_IsEgg.AutoSize = true;
- this.CHK_IsEgg.Location = new System.Drawing.Point(43, 196);
+ this.CHK_IsEgg.Location = new System.Drawing.Point(35, 196);
this.CHK_IsEgg.Name = "CHK_IsEgg";
this.CHK_IsEgg.Size = new System.Drawing.Size(56, 17);
this.CHK_IsEgg.TabIndex = 16;
@@ -872,7 +873,7 @@
// Label_Form
//
this.Label_Form.AutoSize = true;
- this.Label_Form.Location = new System.Drawing.Point(128, 136);
+ this.Label_Form.Location = new System.Drawing.Point(125, 136);
this.Label_Form.Name = "Label_Form";
this.Label_Form.Size = new System.Drawing.Size(33, 13);
this.Label_Form.TabIndex = 11;
@@ -2644,9 +2645,9 @@
//
// Label_EncryptionConstant
//
- this.Label_EncryptionConstant.Location = new System.Drawing.Point(29, 279);
+ this.Label_EncryptionConstant.Location = new System.Drawing.Point(20, 279);
this.Label_EncryptionConstant.Name = "Label_EncryptionConstant";
- this.Label_EncryptionConstant.Size = new System.Drawing.Size(105, 13);
+ this.Label_EncryptionConstant.Size = new System.Drawing.Size(120, 13);
this.Label_EncryptionConstant.TabIndex = 1;
this.Label_EncryptionConstant.Text = "Encryption Constant:";
this.Label_EncryptionConstant.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -3072,7 +3073,11 @@
this.bpkx30.TabStop = false;
this.bpkx30.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx30.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx30.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx30.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx30.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx30.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx30.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// mnuVSD
//
@@ -3116,7 +3121,11 @@
this.bpkx29.TabStop = false;
this.bpkx29.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx29.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx29.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx29.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx29.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx29.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx29.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx28
//
@@ -3130,7 +3139,11 @@
this.bpkx28.TabStop = false;
this.bpkx28.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx28.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx28.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx28.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx28.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx28.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx28.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx27
//
@@ -3144,7 +3157,11 @@
this.bpkx27.TabStop = false;
this.bpkx27.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx27.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx27.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx27.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx27.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx27.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx27.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx26
//
@@ -3158,7 +3175,11 @@
this.bpkx26.TabStop = false;
this.bpkx26.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx26.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx26.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx26.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx26.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx26.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx26.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx25
//
@@ -3172,7 +3193,11 @@
this.bpkx25.TabStop = false;
this.bpkx25.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx25.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx25.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx25.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx25.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx25.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx25.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx24
//
@@ -3186,7 +3211,11 @@
this.bpkx24.TabStop = false;
this.bpkx24.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx24.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx24.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx24.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx24.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx24.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx24.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx23
//
@@ -3200,7 +3229,11 @@
this.bpkx23.TabStop = false;
this.bpkx23.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx23.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx23.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx23.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx23.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx23.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx23.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx22
//
@@ -3214,7 +3247,11 @@
this.bpkx22.TabStop = false;
this.bpkx22.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx22.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx22.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx22.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx22.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx22.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx22.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx21
//
@@ -3228,7 +3265,11 @@
this.bpkx21.TabStop = false;
this.bpkx21.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx21.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx21.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx21.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx21.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx21.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx21.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx20
//
@@ -3242,7 +3283,11 @@
this.bpkx20.TabStop = false;
this.bpkx20.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx20.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx20.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx20.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx20.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx20.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx20.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx19
//
@@ -3256,7 +3301,11 @@
this.bpkx19.TabStop = false;
this.bpkx19.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx19.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx19.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx19.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx19.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx19.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx19.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx18
//
@@ -3270,7 +3319,11 @@
this.bpkx18.TabStop = false;
this.bpkx18.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx18.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx18.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx18.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx18.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx18.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx18.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx17
//
@@ -3284,7 +3337,11 @@
this.bpkx17.TabStop = false;
this.bpkx17.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx17.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx17.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx17.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx17.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx17.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx17.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx16
//
@@ -3298,7 +3355,11 @@
this.bpkx16.TabStop = false;
this.bpkx16.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx16.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx16.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx16.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx16.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx16.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx16.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx15
//
@@ -3312,7 +3373,11 @@
this.bpkx15.TabStop = false;
this.bpkx15.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx15.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx15.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx15.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx15.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx15.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx15.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx14
//
@@ -3326,7 +3391,11 @@
this.bpkx14.TabStop = false;
this.bpkx14.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx14.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx14.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx14.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx14.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx14.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx14.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx13
//
@@ -3340,7 +3409,11 @@
this.bpkx13.TabStop = false;
this.bpkx13.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx13.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx13.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx13.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx13.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx13.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx13.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx12
//
@@ -3354,7 +3427,11 @@
this.bpkx12.TabStop = false;
this.bpkx12.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx12.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx12.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx12.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx12.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx12.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx12.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx11
//
@@ -3368,7 +3445,11 @@
this.bpkx11.TabStop = false;
this.bpkx11.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx11.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx11.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx11.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx11.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx11.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx11.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx10
//
@@ -3382,7 +3463,11 @@
this.bpkx10.TabStop = false;
this.bpkx10.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx10.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx10.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx10.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx10.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx10.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx10.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx9
//
@@ -3396,7 +3481,11 @@
this.bpkx9.TabStop = false;
this.bpkx9.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx9.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx9.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx9.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx9.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx9.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx9.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx8
//
@@ -3410,7 +3499,11 @@
this.bpkx8.TabStop = false;
this.bpkx8.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx8.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx8.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx8.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx8.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx8.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx8.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx7
//
@@ -3424,7 +3517,11 @@
this.bpkx7.TabStop = false;
this.bpkx7.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx7.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx7.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx7.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx7.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx7.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx7.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx6
//
@@ -3438,7 +3535,11 @@
this.bpkx6.TabStop = false;
this.bpkx6.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx6.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx6.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx6.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx6.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx6.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx6.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx5
//
@@ -3452,7 +3553,11 @@
this.bpkx5.TabStop = false;
this.bpkx5.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx5.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx5.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx5.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx5.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx5.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx4
//
@@ -3466,7 +3571,11 @@
this.bpkx4.TabStop = false;
this.bpkx4.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx4.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx4.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx4.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx4.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx4.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx3
//
@@ -3480,7 +3589,11 @@
this.bpkx3.TabStop = false;
this.bpkx3.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx3.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx3.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx3.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx3.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx2
//
@@ -3494,7 +3607,11 @@
this.bpkx2.TabStop = false;
this.bpkx2.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx2.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx2.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bpkx1
//
@@ -3508,7 +3625,11 @@
this.bpkx1.TabStop = false;
this.bpkx1.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragDrop);
this.bpkx1.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbBoxSlot_DragEnter);
+ this.bpkx1.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bpkx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bpkx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bpkx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bpkx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// B_BoxRight
//
@@ -3624,7 +3745,11 @@
this.bbpkx1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.bbpkx1.TabIndex = 8;
this.bbpkx1.TabStop = false;
+ this.bbpkx1.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bbpkx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bbpkx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bbpkx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bbpkx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// mnuV
//
@@ -3649,7 +3774,11 @@
this.bbpkx2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.bbpkx2.TabIndex = 9;
this.bbpkx2.TabStop = false;
+ this.bbpkx2.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bbpkx2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bbpkx2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bbpkx2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bbpkx2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bbpkx3
//
@@ -3660,7 +3789,11 @@
this.bbpkx3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.bbpkx3.TabIndex = 10;
this.bbpkx3.TabStop = false;
+ this.bbpkx3.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bbpkx3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bbpkx3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bbpkx3.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bbpkx3.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bbpkx4
//
@@ -3671,7 +3804,11 @@
this.bbpkx4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.bbpkx4.TabIndex = 11;
this.bbpkx4.TabStop = false;
+ this.bbpkx4.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bbpkx4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bbpkx4.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bbpkx4.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bbpkx4.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bbpkx5
//
@@ -3682,7 +3819,11 @@
this.bbpkx5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.bbpkx5.TabIndex = 12;
this.bbpkx5.TabStop = false;
+ this.bbpkx5.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bbpkx5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bbpkx5.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bbpkx5.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bbpkx5.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// bbpkx6
//
@@ -3693,7 +3834,11 @@
this.bbpkx6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.bbpkx6.TabIndex = 13;
this.bbpkx6.TabStop = false;
+ this.bbpkx6.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.bbpkx6.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.bbpkx6.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.bbpkx6.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.bbpkx6.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// L_ReadOnlyPBB
//
@@ -3749,7 +3894,11 @@
this.ppkx1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.ppkx1.TabIndex = 2;
this.ppkx1.TabStop = false;
+ this.ppkx1.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.ppkx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.ppkx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.ppkx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.ppkx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// ppkx2
//
@@ -3760,7 +3909,11 @@
this.ppkx2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.ppkx2.TabIndex = 3;
this.ppkx2.TabStop = false;
+ this.ppkx2.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.ppkx2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.ppkx2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.ppkx2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.ppkx2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// ppkx3
//
@@ -3771,7 +3924,11 @@
this.ppkx3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.ppkx3.TabIndex = 4;
this.ppkx3.TabStop = false;
+ this.ppkx3.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.ppkx3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.ppkx3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.ppkx3.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.ppkx3.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// ppkx4
//
@@ -3782,7 +3939,11 @@
this.ppkx4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.ppkx4.TabIndex = 5;
this.ppkx4.TabStop = false;
+ this.ppkx4.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.ppkx4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.ppkx4.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.ppkx4.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.ppkx4.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// ppkx5
//
@@ -3793,7 +3954,11 @@
this.ppkx5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.ppkx5.TabIndex = 6;
this.ppkx5.TabStop = false;
+ this.ppkx5.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.ppkx5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.ppkx5.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.ppkx5.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.ppkx5.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// ppkx6
//
@@ -3804,7 +3969,11 @@
this.ppkx6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.ppkx6.TabIndex = 7;
this.ppkx6.TabStop = false;
+ this.ppkx6.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.ppkx6.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.ppkx6.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.ppkx6.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.ppkx6.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// Tab_Other
//
@@ -3922,7 +4091,11 @@
this.dcpkx2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.dcpkx2.TabIndex = 11;
this.dcpkx2.TabStop = false;
+ this.dcpkx2.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.dcpkx2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.dcpkx2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.dcpkx2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.dcpkx2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// dcpkx1
//
@@ -3934,7 +4107,11 @@
this.dcpkx1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.dcpkx1.TabIndex = 10;
this.dcpkx1.TabStop = false;
+ this.dcpkx1.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.dcpkx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.dcpkx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.dcpkx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.dcpkx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// DayCare_HasEgg
//
@@ -3967,7 +4144,11 @@
this.gtspkx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.gtspkx.TabIndex = 23;
this.gtspkx.TabStop = false;
+ this.gtspkx.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.gtspkx.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.gtspkx.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.gtspkx.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.gtspkx.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// GB_Fused
//
@@ -3989,7 +4170,11 @@
this.fusedpkx.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.fusedpkx.TabIndex = 24;
this.fusedpkx.TabStop = false;
+ this.fusedpkx.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.fusedpkx.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.fusedpkx.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.fusedpkx.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.fusedpkx.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// L_ReadOnlyOther
//
@@ -4023,7 +4208,11 @@
this.subepkx1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.subepkx1.TabIndex = 18;
this.subepkx1.TabStop = false;
+ this.subepkx1.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.pbBoxSlot_QueryContinueDrag);
+ this.subepkx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseClick);
this.subepkx1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseDown);
+ this.subepkx1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseMove);
+ this.subepkx1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbBoxSlot_MouseUp);
//
// subepkx2
//
@@ -4189,6 +4378,7 @@
this.FLP_SAVtools.Controls.Add(this.B_OpenSecretBase);
this.FLP_SAVtools.Controls.Add(this.B_Pokeblocks);
this.FLP_SAVtools.Controls.Add(this.B_LinkInfo);
+ this.FLP_SAVtools.Controls.Add(this.B_CGearSkin);
this.FLP_SAVtools.Location = new System.Drawing.Point(6, 10);
this.FLP_SAVtools.Name = "FLP_SAVtools";
this.FLP_SAVtools.Size = new System.Drawing.Size(297, 87);
@@ -4347,6 +4537,16 @@
this.B_LinkInfo.UseVisualStyleBackColor = true;
this.B_LinkInfo.Click += new System.EventHandler(this.B_LinkInfo_Click);
//
+ // B_CGearSkin
+ //
+ this.B_CGearSkin.Location = new System.Drawing.Point(3, 148);
+ this.B_CGearSkin.Name = "B_CGearSkin";
+ this.B_CGearSkin.Size = new System.Drawing.Size(87, 23);
+ this.B_CGearSkin.TabIndex = 24;
+ this.B_CGearSkin.Text = "C-Gear Skin";
+ this.B_CGearSkin.UseVisualStyleBackColor = true;
+ this.B_CGearSkin.Click += new System.EventHandler(this.B_CGearSkin_Click);
+ //
// dragout
//
this.dragout.BackColor = System.Drawing.Color.Transparent;
@@ -4883,6 +5083,7 @@
private System.Windows.Forms.Button BTN_Medals;
private System.Windows.Forms.FlowLayoutPanel FLP_PKMEditors;
private System.Windows.Forms.Button B_LinkInfo;
+ private System.Windows.Forms.Button B_CGearSkin;
}
}
diff --git a/MainWindow/Main.cs b/MainWindow/Main.cs
index 4a7849b87..ad0aaac30 100644
--- a/MainWindow/Main.cs
+++ b/MainWindow/Main.cs
@@ -18,7 +18,7 @@ namespace PKHeX
{
#region Initialize Form
new Thread(() => new SplashScreen().ShowDialog()).Start();
- pkm_from = SAV.BlankPKM.EncryptedPartyData;
+ slotPkmSource = SAV.BlankPKM.EncryptedPartyData;
InitializeComponent();
CB_ExtraBytes.SelectedIndex = 0;
SaveFile.SetUpdateDex = Menu_ModifyDex.Checked;
@@ -115,8 +115,8 @@ namespace PKHeX
}
if (!SAV.Exportable) // No SAV loaded from exe args
{
- string path = detectSaveFile();
- if (path != null)
+ string path = SaveUtil.detectSaveFile();
+ if (path != null && File.Exists(path))
openQuick(path, force: true);
else
GB_SAVtools.Visible = false;
@@ -177,54 +177,33 @@ namespace PKHeX
#region Path Variables
- public static string WorkingDirectory {
- get
- {
- if (ApplicationDeployment.IsNetworkDeployed)
- {
- return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PKHeX");
- }
- else
- {
- return Environment.CurrentDirectory;
- }
- }
- }
+ public static string WorkingDirectory => ApplicationDeployment.IsNetworkDeployed ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PKHeX") : Environment.CurrentDirectory;
+ public static string DatabasePath => Path.Combine(WorkingDirectory, "db");
+ private static string WC6DatabasePath => Path.Combine(WorkingDirectory, "wc6");
+ private static string BackupPath => Path.Combine(WorkingDirectory, "bak");
- public static string DatabasePath
- {
- get
- {
- return Path.Combine(WorkingDirectory, "db");
- }
- }
-
- private static string WC6DatabasePath
- {
- get
- {
- return Path.Combine(WorkingDirectory, "wc6");
- }
- }
-
- private static string BackupPath
- {
- get
- {
- return Path.Combine(WorkingDirectory, "bak");
- }
- }
#endregion
#region //// MAIN MENU FUNCTIONS ////
// Main Menu Strip UI Functions
private void mainMenuOpen(object sender, EventArgs e)
{
+ string pkx = pkm.Extension;
+ string ekx = 'e' + pkx.Substring(1, pkx.Length-1);
+
+ string supported = "*.pkm;";
+ for (int i = 3; i <= SAV.Generation; i++)
+ {
+ supported += $"*.pk{i}";
+ if (i != pkm.Format)
+ supported += ";";
+ }
+
OpenFileDialog ofd = new OpenFileDialog
{
- Filter = "PKX File|*.pk6;*.pkx" +
- "|EKX File|*.ek6;*.ekx" +
- "|BIN File|*.bin" +
+ Filter = $"Decrypted PKM File|{supported}" +
+ $"|Encrypted PKM File|*.{ekx}" +
+ "|Binary File|*.bin" +
"|All Files|*.*",
RestoreDirectory = true,
FilterIndex = 4,
@@ -236,7 +215,7 @@ namespace PKHeX
ofd.InitialDirectory = WorkingDirectory;
// Detect main
- string path = detectSaveFile();
+ string path = SaveUtil.detectSaveFile();
if (path != null)
{ ofd.InitialDirectory = Path.GetDirectoryName(path); }
else if (File.Exists(Path.Combine(ofd.InitialDirectory, "main")))
@@ -251,32 +230,32 @@ namespace PKHeX
{
if (!verifiedPKM()) return;
PKM pk = preparePKM();
+ string pkx = pk.Extension;
+ string ekx = 'e' + pkx.Substring(1, pkx.Length - 1);
SaveFileDialog sfd = new SaveFileDialog
{
- Filter = "PKX File|*.pk6;*.pkx" +
- "|EKX File|*.ek6;*.ekx" +
- "|BIN File|*.bin" +
+ Filter = $"Decrypted PKM File|*.{pkx}" +
+ $"|Encrypted PKM File|*.{ekx}" +
+ "|Binary File|*.bin" +
"|All Files|*.*",
- DefaultExt = "pk6",
+ DefaultExt = pkx,
FileName = Util.CleanFileName(pk.FileName)
};
if (sfd.ShowDialog() != DialogResult.OK) return;
string path = sfd.FileName;
- // Injection Dummy Override
- if (path.Contains("pokemon.ekx")) path = Path.Combine(Path.GetDirectoryName(path), "pokemon.ekx");
string ext = Path.GetExtension(path);
- if (File.Exists(path) && !path.Contains("pokemon.ekx"))
+ if (File.Exists(path))
{
// File already exists, save a .bak
byte[] backupfile = File.ReadAllBytes(path);
File.WriteAllBytes(path + ".bak", backupfile);
}
- if (new[] {".ekx", ".ek6", ".bin"}.Contains(ext))
+ if (new[] {".ekx", "."+ekx, ".bin"}.Contains(ext))
File.WriteAllBytes(path, pk.EncryptedPartyData);
- else if (new[] { ".pkx", ".pk6" }.Contains(ext))
- File.WriteAllBytes(path, pk.Data);
+ else if (new[] { "."+pkx }.Contains(ext))
+ File.WriteAllBytes(path, pk.DecryptedBoxData);
else
{
Util.Error($"Foreign File Extension: {ext}", "Exporting as encrypted.");
@@ -520,17 +499,17 @@ namespace PKHeX
}
private void clickOpenSDFFolder(object sender, EventArgs e)
{
- string path;
- if (Util.get3DSLocation() != null && Directory.Exists(path = Util.GetSDFLocation()))
+ string path = Path.GetPathRoot(Util.get3DSLocation());
+ if (path != null && Directory.Exists(path = Path.Combine(path, "filer", "UserSaveData")))
Process.Start("explorer.exe", path);
else
Util.Alert("Can't find the SaveDataFiler folder.");
}
private void clickOpenSDBFolder(object sender, EventArgs e)
{
- string path3DS = Util.get3DSLocation();
+ string path3DS = Path.GetPathRoot(Util.get3DSLocation());
string path;
- if (path3DS != null && Directory.Exists(path = Path.Combine(Path.GetPathRoot(path3DS), "SaveDataBackup")))
+ if (path3DS != null && Directory.Exists(path = Path.Combine(path3DS, "SaveDataBackup")))
Process.Start("explorer.exe", path);
else
Util.Alert("Can't find the SaveDataBackup folder.");
@@ -741,11 +720,11 @@ namespace PKHeX
"Cancel: FireRed / LeafGreen");
if (drGame == DialogResult.Yes)
- sav = new SAV3(sav.Data, GameVersion.RS);
+ sav = new SAV3(sav.BAK, GameVersion.RS);
else if (drGame == DialogResult.No)
- sav = new SAV3(sav.Data, GameVersion.E);
+ sav = new SAV3(sav.BAK, GameVersion.E);
else
- sav = new SAV3(sav.Data, GameVersion.FRLG);
+ sav = new SAV3(sav.BAK, GameVersion.FRLG);
}
var drJP = Util.Prompt(MessageBoxButtons.YesNoCancel, $"Generation 3 ({sav.Version}) Save File detected. Select Origins:", "Yes: International" + Environment.NewLine + "No: Japanese");
if (drJP == DialogResult.Cancel)
@@ -807,6 +786,7 @@ namespace PKHeX
B_JPEG.Visible = SAV.HasJPEG;
B_OpenEventFlags.Visible = SAV.HasEvents;
B_LinkInfo.Visible = SAV.HasLink;
+ B_CGearSkin.Visible = SAV.Generation == 5;
// Generational Interface
byte[] extraBytes = new byte[1];
@@ -2423,7 +2403,7 @@ namespace PKHeX
// Drag & Drop Events
private void tabMain_DragEnter(object sender, DragEventArgs e)
{
- if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
+ if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Move;
}
private void tabMain_DragDrop(object sender, DragEventArgs e)
{
@@ -2819,7 +2799,7 @@ namespace PKHeX
for (int i = 0; i < battle.Length; i++)
getQuickFiller(SlotPictureBoxes[i + 36], battle[i]);
for (int i = battle.Length; i < 6; i++)
- SlotPictureBoxes[i + 30].Image = null;
+ SlotPictureBoxes[i + 36].Image = null;
}
}
private int getPKXOffset(int slot)
@@ -3256,6 +3236,10 @@ namespace PKHeX
{
new SAV_Link6().ShowDialog();
}
+ private void B_CGearSkin_Click(object sender, EventArgs e)
+ {
+ new SAV_CGearSkin().ShowDialog();
+ }
private void B_JPEG_Click(object sender, EventArgs e)
{
byte[] jpeg = SAV.JPEGData;
@@ -3269,100 +3253,108 @@ namespace PKHeX
// Save Folder Related
private void clickSaveFileName(object sender, EventArgs e)
{
- string path = detectSaveFile();
+ string path = SaveUtil.detectSaveFile();
if (path == null || !File.Exists(path)) return;
if (Util.Prompt(MessageBoxButtons.YesNo, "Open save file from the following location?", path) == DialogResult.Yes)
openQuick(path); // load save
}
- private static string detectSaveFile()
+
+ // Drag and drop related functions
+ private void pbBoxSlot_MouseClick(object sender, MouseEventArgs e)
{
- string pathSDF = Util.GetSDFLocation();
- string path3DS = Util.get3DSLocation();
- string pathCache = Util.GetCacheFolder();
+ if (slotDragDropInProgress)
+ return;
- if (path3DS != null && Directory.Exists(Path.Combine(path3DS, "SaveDataBackup")) && ModifierKeys != Keys.Control)
- return Path.Combine(Path.GetPathRoot(path3DS), "SaveDataBackup", "main");
- if (pathSDF != null && ModifierKeys != Keys.Shift) // if we have a result
- return Path.Combine(pathSDF, "main");
- if (path3DS != null && Directory.Exists(Path.Combine(Path.GetPathRoot(path3DS), "JKSV", "Saves")))
- return Directory.GetFiles(Path.Combine(Path.GetPathRoot(path3DS), "JKSV", "Saves"), "main", SearchOption.AllDirectories)
- .Where(f => SaveUtil.SizeValidSAV6((int)new FileInfo(f).Length)) // filter
- .OrderByDescending(f => new FileInfo(f).LastWriteTime).FirstOrDefault();
- if (Directory.Exists(pathCache))
- return Directory.GetFiles(pathCache).Where(f => SaveUtil.SizeValidSAV6((int)new FileInfo(f).Length)) // filter
- .OrderByDescending(f => new FileInfo(f).LastWriteTime).FirstOrDefault();
- try
- {
- if (File.Exists(Util.NormalizePath(Path.Combine(Util.GetTempFolder(), "root", "main")))) // if cgse exists
- return Util.NormalizePath(Path.Combine(Util.GetTempFolder(), "root", "main"));
- } catch { }
-
- return null;
+ clickSlot(sender, e);
+ }
+ private void pbBoxSlot_MouseUp(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ slotLeftMouseIsDown = false;
+ if (e.Button == MouseButtons.Right)
+ slotRightMouseIsDown = false;
}
-
- // Drag & Drop within Box
private void pbBoxSlot_MouseDown(object sender, MouseEventArgs e)
{
- if (e.Button != MouseButtons.Left || e.Clicks != 1) return;
- if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Alt || ModifierKeys == Keys.Shift || ModifierKeys == (Keys.Control | Keys.Alt))
- { clickSlot(sender, e); return; }
- PictureBox pb = (PictureBox)sender;
- if (pb.Image == null)
+ if (e.Button == MouseButtons.Left)
+ slotLeftMouseIsDown = true;
+ if (e.Button == MouseButtons.Right)
+ slotRightMouseIsDown = true;
+ }
+ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (slotDragDropInProgress)
return;
- pkm_from_slot = getSlot(sender);
- int offset = getPKXOffset(pkm_from_slot);
- // Create Temp File to Drag
- Cursor.Current = Cursors.Hand;
-
- // Prepare Data
- pkm_from = SAV.getData(offset, SAV.SIZE_STORED);
- pkm_from_offset = offset;
-
- // Make a new file name based off the PID
- byte[] dragdata = SAV.decryptPKM(pkm_from);
- Array.Resize(ref dragdata, SAV.SIZE_STORED);
- PKM pkx = SAV.getPKM(dragdata);
- string filename = pkx.FileName;
-
- // Make File
- string newfile = Path.Combine(Path.GetTempPath(), Util.CleanFileName(filename));
- try
+ if (slotLeftMouseIsDown)
{
- File.WriteAllBytes(newfile, dragdata);
- DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move);
+ // The goal is to create a temporary PKX file for the underlying Pokemon
+ // and use that file to perform a drag drop operation.
+
+ // Abort if there is no Pokemon in the given slot.
+ if (((PictureBox)sender).Image == null)
+ return;
+
+ // Set flag to prevent re-entering.
+ slotDragDropInProgress = true;
+
+ slotSourceSlotNumber = getSlot(sender);
+ int offset = getPKXOffset(slotSourceSlotNumber);
+
+ // Prepare Data
+ slotPkmSource = SAV.getData(offset, SAV.SIZE_STORED);
+ slotSourceOffset = offset;
+
+ // Make a new file name based off the PID
+ byte[] dragdata = SAV.decryptPKM(slotPkmSource);
+ Array.Resize(ref dragdata, SAV.SIZE_STORED);
+ PKM pkx = SAV.getPKM(dragdata);
+ string filename = pkx.FileName;
+
+ // Make File
+ string newfile = Path.Combine(Path.GetTempPath(), Util.CleanFileName(filename));
+ try
+ {
+ File.WriteAllBytes(newfile, dragdata);
+ // Thread Blocks on DoDragDrop
+ ((PictureBox)sender).DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move);
+ }
+ catch (Exception x)
+ {
+ Util.Error("Drag & Drop Error:", x.ToString());
+ }
+ slotSourceOffset = 0;
+
+ // Browser apps need time to load data since the file isn't moved to a location on the user's local storage.
+ // Tested 10ms -> too quick, 100ms was fine. 500ms should be safe?
+ new Thread(() =>
+ {
+ Thread.Sleep(500);
+ if (File.Exists(newfile))
+ File.Delete(newfile);
+ }).Start();
}
- catch (ArgumentException x)
- { Util.Error("Drag & Drop Error:", x.ToString()); }
- pkm_from_offset = 0;
-
- // Browser apps need time to load data since the file isn't moved to a location on the user's local storage.
- // Tested 10ms -> too quick, 100ms was fine. 500ms should be safe?
- new Thread(() =>
- {
- Thread.Sleep(500);
- if (File.Exists(newfile))
- File.Delete(newfile);
- }).Start();
}
private void pbBoxSlot_DragDrop(object sender, DragEventArgs e)
{
- int slot = getSlot(sender);
- int offset = getPKXOffset(slot);
+ int slotDestinationSlotNumber = getSlot(sender);
+ int slotDestinationOffset = getPKXOffset(slotDestinationSlotNumber);
// Check for In-Dropped files (PKX,SAV,ETC)
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (Directory.Exists(files[0])) { loadBoxesFromDB(files[0]); return; }
- if (pkm_from_offset == 0)
+ if (slotSourceOffset == 0)
{
if (files.Length <= 0)
return;
string file = files[0];
- if (!PKX.getIsPKM(new FileInfo(file).Length))
+ FileInfo fi = new FileInfo(file);
+ if (!PKX.getIsPKM(fi.Length) && !MysteryGift.getIsMysteryGift(fi.Length))
{ openQuick(file); return; }
byte[] data = File.ReadAllBytes(file);
- PKM temp = PKMConverter.getPKMfromBytes(data);
+ MysteryGift mg = MysteryGift.getMysteryGift(data, fi.Extension);
+ PKM temp = mg != null ? mg.convertToPKM(SAV) : PKMConverter.getPKMfromBytes(data);
string c;
PKM pk = PKMConverter.convertToFormat(temp, SAV.Generation, out c);
@@ -3377,36 +3369,45 @@ namespace PKHeX
{ Console.WriteLine(c); Console.WriteLine(concat); return; }
}
- SAV.setStoredSlot(pk, offset);
- getQuickFiller(SlotPictureBoxes[slot], pk);
- getSlotColor(slot, Properties.Resources.slotSet);
+ SAV.setStoredSlot(pk, slotDestinationOffset);
+ getQuickFiller(SlotPictureBoxes[slotDestinationSlotNumber], pk);
+ getSlotColor(slotDestinationSlotNumber, Properties.Resources.slotSet);
Console.WriteLine(c);
}
else
{
- PKM pkz = SAV.getStoredSlot(pkm_from_offset);
- if (ModifierKeys == Keys.Alt && slot > -1) // overwrite delete old slot
+ PKM pkz = SAV.getStoredSlot(slotSourceOffset);
+ if (ModifierKeys == Keys.Alt && slotDestinationSlotNumber > -1) // overwrite delete old slot
{
// Clear from slot
- getQuickFiller(SlotPictureBoxes[pkm_from_slot], SAV.BlankPKM); // picturebox
- SAV.setStoredSlot(SAV.BlankPKM, pkm_from_offset); // savefile
+ getQuickFiller(SlotPictureBoxes[slotSourceSlotNumber], SAV.BlankPKM); // picturebox
+ SAV.setStoredSlot(SAV.BlankPKM, slotSourceOffset); // savefile
}
- else if (ModifierKeys != Keys.Control && slot > -1)
+ else if (ModifierKeys != Keys.Control && slotDestinationSlotNumber > -1)
{
- // Load data from destination
- PKM pk = SAV.getStoredSlot(offset);
+ if (((PictureBox)sender).Image != null)
+ {
+ // Load data from destination
+ PKM pk = SAV.getStoredSlot(slotDestinationOffset);
- // Swap slot picture
- getQuickFiller(SlotPictureBoxes[pkm_from_slot], pk);
+ // Set destination pokemon image to source picture box
+ getQuickFiller(SlotPictureBoxes[slotSourceSlotNumber], pk);
- // Swap slot data to source
- SAV.setStoredSlot(pk, pkm_from_offset);
+ // Set destination pokemon data to source slot
+ SAV.setStoredSlot(pk, slotSourceOffset);
+ }
+ else
+ {
+ // Set blank to source slot
+ SAV.setStoredSlot(SAV.BlankPKM, slotSourceOffset);
+ SlotPictureBoxes[slotSourceSlotNumber].Image = null;
+ }
}
- // Copy from temp slot to new.
- SAV.setStoredSlot(pkz, offset);
- getQuickFiller(SlotPictureBoxes[slot], pkz);
+ // Copy from temp to destination slot.
+ SAV.setStoredSlot(pkz, slotDestinationOffset);
+ getQuickFiller(SlotPictureBoxes[slotDestinationSlotNumber], pkz);
- pkm_from_offset = 0; // Clear offset value
+ slotSourceOffset = 0; // Clear offset value
}
}
private void pbBoxSlot_DragEnter(object sender, DragEventArgs e)
@@ -3416,10 +3417,22 @@ namespace PKHeX
else if (e.Data != null) // within
e.Effect = DragDropEffects.Move;
}
+ private void pbBoxSlot_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
+ {
+ if (e.Action == DragAction.Cancel || e.Action == DragAction.Drop)
+ {
+ slotLeftMouseIsDown = false;
+ slotRightMouseIsDown = false;
+ slotDragDropInProgress = false;
+ }
+ }
- private byte[] pkm_from;
- private int pkm_from_offset;
- private int pkm_from_slot = -1;
+ private static bool slotLeftMouseIsDown = false;
+ private static bool slotRightMouseIsDown = false;
+ private static bool slotDragDropInProgress = false;
+ private byte[] slotPkmSource;
+ private int slotSourceOffset;
+ private int slotSourceSlotNumber = -1;
#endregion
}
}
diff --git a/MainWindow/Main.resx b/MainWindow/Main.resx
index 4332f0e62..4916aa9d4 100644
--- a/MainWindow/Main.resx
+++ b/MainWindow/Main.resx
@@ -1306,6 +1306,9 @@
True
+
+ True
+
True
diff --git a/MysteryGifts/MysteryGift.cs b/MysteryGifts/MysteryGift.cs
index cff746126..e7a82211d 100644
--- a/MysteryGifts/MysteryGift.cs
+++ b/MysteryGifts/MysteryGift.cs
@@ -5,6 +5,10 @@ namespace PKHeX
{
public abstract class MysteryGift
{
+ internal static bool getIsMysteryGift(long len)
+ {
+ return new[] { WC6.SizeFull, WC6.Size, PGF.Size, PGT.Size, PCD.Size }.Contains((int)len);
+ }
internal static MysteryGift getMysteryGift(byte[] data, string ext)
{
if (data.Length == WC6.SizeFull && ext == ".wc6full")
diff --git a/PKHeX.csproj b/PKHeX.csproj
index 5582f62c3..14445871e 100644
--- a/PKHeX.csproj
+++ b/PKHeX.csproj
@@ -173,6 +173,13 @@
+
+
+ Form
+
+
+ SAV_CGearSkin.cs
+
Form
@@ -324,6 +331,9 @@
MemoryAmie.cs
+
+ SAV_CGearSkin.cs
+
SAV_Link6.cs
@@ -708,6 +718,7 @@
+
diff --git a/PKM/PK3.cs b/PKM/PK3.cs
index 46d11ded7..a6f20bc4c 100644
--- a/PKM/PK3.cs
+++ b/PKM/PK3.cs
@@ -105,7 +105,7 @@ namespace PKHeX
public override int Met_Location { get { return Data[0x45]; } set { Data[0x45] = (byte)value; } }
// Origins
private ushort Origins { get { return BitConverter.ToUInt16(Data, 0x46); } set { BitConverter.GetBytes(value).CopyTo(Data, 0x46); } }
- public override int Met_Level { get { return Origins & 0x3F; } set { Origins = (ushort)((Origins & ~0x3F) | value); } }
+ public override int Met_Level { get { return Origins & 0x7F; } set { Origins = (ushort)((Origins & ~0x7F) | value); } }
public override int Version { get { return (Origins >> 7) & 0xF; } set { Origins = (ushort)((Origins & ~0x780) | ((value & 0xF) << 7));} }
public override int Ball { get { return (Origins >> 11) & 0xF; } set { Origins = (ushort)((Origins & ~0x7800) | ((value & 0xF) << 11)); } }
public override int OT_Gender { get { return (Origins >> 15) & 1; } set { Origins = (ushort)(Origins & ~(1 << 15) | ((value & 1) << 15)); } }
@@ -196,7 +196,7 @@ namespace PKHeX
SID = SID,
EXP = IsEgg ? PKX.getEXP(5, Species) : EXP,
IsEgg = false,
- OT_Friendship = 40,
+ OT_Friendship = 70,
MarkCircle = MarkCircle,
MarkSquare = MarkSquare,
MarkTriangle = MarkTriangle,
@@ -296,6 +296,10 @@ namespace PKHeX
// Unown Form
pk4.AltForm = AltForm;
+ int item = HeldItem;
+ if (HeldItem > 0)
+ pk4.HeldItem = item;
+
// Remove HM moves
int[] banned = { 15, 19, 57, 70, 148, 249, 127, 291 };
int[] newMoves = pk4.Moves;
diff --git a/PKM/PK4.cs b/PKM/PK4.cs
index f7e450e31..f5a73b823 100644
--- a/PKM/PK4.cs
+++ b/PKM/PK4.cs
@@ -261,10 +261,21 @@ namespace PKHeX
}
set
{
- if (PtHGSS)
+ if (value == 0)
+ {
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x44);
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x7E);
+ }
+ else if (PtHGSS)
{
BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x44);
- BitConverter.GetBytes(0x7D0).CopyTo(Data, 0x7E);
+ BitConverter.GetBytes(0xBBA).CopyTo(Data, 0x7E); // Faraway Place (for DP display)
+ }
+ else if ((value < 2000 && value > 111) || (value < 3000 && value > 2010))
+ {
+ // Met location not in DP, set to Mystery Zone (0, illegal) as opposed to Faraway Place
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x44);
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x7E);
}
else
{
@@ -284,10 +295,21 @@ namespace PKHeX
}
set
{
- if (PtHGSS)
+ if (value == 0)
+ {
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x46);
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x80);
+ }
+ else if (PtHGSS)
{
BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x46);
- BitConverter.GetBytes(0x7D0).CopyTo(Data, 0x80);
+ BitConverter.GetBytes(0xBBA).CopyTo(Data, 0x80); // Faraway Place (for DP display)
+ }
+ else if ((value < 2000 && value > 111) || (value < 3000 && value > 2010))
+ {
+ // Met location not in DP, set to Mystery Zone (0, illegal) as opposed to Faraway Place
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x46);
+ BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x80);
}
else
{
@@ -299,11 +321,26 @@ namespace PKHeX
private byte PKRS { get { return Data[0x82]; } set { Data[0x82] = value; } }
public override int PKRS_Days { get { return PKRS & 0xF; } set { PKRS = (byte)(PKRS & ~0xF | value); } }
public override int PKRS_Strain { get { return PKRS >> 4; } set { PKRS = (byte)(PKRS & 0xF | (value << 4)); } }
- public override int Ball { get { return Data[0x83]; } set { Data[0x83] = (byte)value; } }
+ public override int Ball
+ {
+ get { return Data[HGSS ? 0x86 : 0x83]; }
+ set
+ {
+ if (HGSS)
+ {
+ Data[0x83] = (byte)(value <= 0x10 ? value : 4); // Ball to display in DP (cap at Cherish)
+ Data[0x86] = (byte)(value <= 0x18 ? value : 4); // Cap at Comp Ball
+ }
+ else
+ {
+ Data[0x83] = (byte)(value <= 0x10 ? value : 4); // Cap at Cherish Ball
+ Data[0x86] = 0; // Unused
+ }
+ }
+ }
public override int Met_Level { get { return Data[0x84] & ~0x80; } set { Data[0x84] = (byte)((Data[0x84] & 0x80) | value); } }
public override int OT_Gender { get { return Data[0x84] >> 7; } set { Data[0x84] = (byte)((Data[0x84] & ~0x80) | value << 7); } }
public override int EncounterType { get { return Data[0x85]; } set { Data[0x85] = (byte)value; } }
- public int HGSSBall { get { return Data[0x86]; } set { Data[0x86] = (byte)value; } }
// Unused 0x87
#endregion
@@ -392,14 +429,13 @@ namespace PKHeX
BitConverter.GetBytes((uint)0).CopyTo(pk5.Data, 0x44);
// Met / Crown Data Detection
- pk5.Met_Location = pk5.FatefulEncounter && Array.IndexOf(new[] {251, 243, 244, 245}, pk5.Species) >= 0
+ pk5.Met_Location = pk5.Gen4 && pk5.FatefulEncounter && Array.IndexOf(new[] {251, 243, 244, 245}, pk5.Species) >= 0
? (pk5.Species == 251 ? 30010 : 30012) // Celebi : Beast
: 30001; // Pokétransfer (not Crown)
// Delete HGSS Data
BitConverter.GetBytes((ushort)0).CopyTo(pk5.Data, 0x86);
- if (HGSSBall > 0 && HGSSBall != 4)
- pk5.Ball = HGSSBall;
+ pk5.Ball = Ball;
// Transfer Nickname and OT Name
pk5.Nickname = Nickname;
@@ -409,9 +445,9 @@ namespace PKHeX
pk5.Met_Level = PKX.getLevel(pk5.Species, pk5.EXP);
// Remove HM moves; Defog should be kept if both are learned.
- int[] banned = Moves.Contains(250) /*Whirlpool*/ && !Moves.Contains(432) /*Defog*/
- ? new[] {15, 19, 57, 70, 432, 249, 127, 431} // No Defog
- : new[] {15, 19, 57, 70, 250, 249, 127, 431};// No Whirlpool
+ int[] banned = Moves.Contains(250) && Moves.Contains(432) // Whirlpool & Defog
+ ? new[] {15, 19, 57, 70, 250, 249, 127, 431} // No Whirlpool
+ : new[] {15, 19, 57, 70, 249, 127, 431};// Transfer via advantageous game
int[] newMoves = pk5.Moves;
for (int i = 0; i < 4; i++)
diff --git a/PKM/PKM.cs b/PKM/PKM.cs
index d5b946a8e..2b5f121bf 100644
--- a/PKM/PKM.cs
+++ b/PKM/PKM.cs
@@ -147,7 +147,8 @@ namespace PKHeX
public bool XY => Version == (int)GameVersion.X || Version == (int)GameVersion.Y;
public bool AO => Version == (int)GameVersion.AS || Version == (int)GameVersion.OR;
public bool SM => Version == (int)GameVersion.SN || Version == (int)GameVersion.MN;
- public bool PtHGSS => new[] {GameVersion.Pt, GameVersion.HG, GameVersion.SS}.Contains((GameVersion)Version);
+ protected bool PtHGSS => GameVersion.Pt == (GameVersion)Version || HGSS;
+ public bool HGSS => new[] {GameVersion.HG, GameVersion.SS}.Contains((GameVersion)Version);
public bool Gen5 => Version >= 20 && Version <= 23;
public bool Gen4 => Version >= 10 && Version < 12 || Version >= 7 && Version <= 8;
public bool Gen3 => Version >= 1 && Version <= 5 || Version == 15;
diff --git a/PKM/PKX.cs b/PKM/PKX.cs
index 05d988355..7ba8fffa6 100644
--- a/PKM/PKX.cs
+++ b/PKM/PKX.cs
@@ -457,7 +457,7 @@ namespace PKHeX
}
// Data Requests
- internal static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny)
+ internal static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1)
{
if (species == 0)
return (Image)Resources.ResourceManager.GetObject("_0");
@@ -499,6 +499,9 @@ namespace PKHeX
if (item > 0)
{
Image itemimg = (Image)Resources.ResourceManager.GetObject("item_" + item) ?? Resources.helditem;
+ if ((generation == 3 || generation == 4) && 328 <= item && item <= 419) // gen3/4 TM
+ itemimg = Resources.item_tm;
+
// Redraw
baseImage = Util.LayerImage(baseImage, itemimg, 22 + (15 - itemimg.Width) / 2, 15 + (15 - itemimg.Height), 1);
}
@@ -506,7 +509,7 @@ namespace PKHeX
}
internal static Image getSprite(PKM pkm)
{
- return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.HeldItem, pkm.IsEgg, pkm.IsShiny);
+ return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.HeldItem, pkm.IsEgg, pkm.IsShiny, pkm.Format);
}
// Font Related
@@ -1043,7 +1046,8 @@ namespace PKHeX
{ Array.Resize(ref strdata, i); break; }
strdata[i] = val;
}
- strdata[str.Length] = 0xFF;
+ if (strdata.Length > 0)
+ strdata[strdata.Length - 1] = 0xFF;
return strdata;
}
@@ -1469,44 +1473,42 @@ namespace PKHeX
internal static readonly ushort[] G34_4E =
{
- 478, 351, 352, 353, 358, 359, 360, 361, 362, 363, 020, 365, 366, 369, 370,
- 371, 415, 376, 377, 378, 368, 382, 383, 384, 046, 358, 359, 392, 393, 394,
- 395, 396, 397, 398, 401, 402, 403, 416, 408, 409, 410, 400, 420, 419, 479,
- 450, 445, 003, 004, 006, 008, 010, 068, 449, 072, 013, 015, 017, 019, 021,
- 023, 025, 027, 029, 031, 033, 035, 038, 040, 042, 049, 052, 055, 058, 061,
- 050, 053, 056, 059, 062, 036, 426, 425, 480, 481, 091, 092, 094, 096, 098,
- 364, 100, 102, 106, 108, 110, 112, 114, 117, 119, 121, 123, 124, 125, 385,
- 127, 128, 131, 134, 137, 140, 396, 144, 145, 146, 147, 149, 151, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 082, 084, 086, 088, 090, 148, 150, 152,
- 093, 095, 097, 099, 101, 103, 105, 107, 109, 111, 113, 115, 118, 120, 122,
- 129, 132, 135, 138, 141, 130, 133, 136, 139, 142, 116, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 427, 428, 430, 241, 230, 431, 436, 437, 434,
- 435, 443, 444, 424, 429, 242, 433, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
- 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 289,
- 452, 355, 373, 379, 387, 405, 411
+ 478, 351, 352, 353, 358, 359, 360, 361, 362, 363, 020, 365, 366, 369, 370, 371, // 0
+ 415, 376, 377, 378, 368, 382, 383, 384, 046, 358, 359, 392, 393, 394, 395, 396, // 1
+ 397, 398, 401, 402, 403, 416, 408, 409, 410, 400, 420, 419, 479, 450, 445, 003, // 2
+ 004, 006, 008, 010, 068, 449, 072, 013, 015, 017, 019, 021, 023, 025, 027, 029, // 3
+ 031, 033, 035, 038, 040, 042, 049, 052, 055, 058, 061, 050, 053, 056, 059, 062, // 4
+ 036, 426, 425, 480, 481, 091, 092, 094, 096, 098, 364, 100, 102, 106, 108, 110, // 5
+ 112, 114, 117, 119, 121, 123, 124, 125, 385, 127, 128, 131, 134, 137, 140, 396, // 6
+ 144, 145, 146, 147, 149, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 082, // 7
+ 084, 086, 088, 090, 148, 150, 152, 093, 095, 097, 099, 101, 103, 105, 107, 109, // 8
+ 111, 113, 115, 118, 120, 122, 129, 132, 135, 138, 141, 130, 133, 136, 139, 142, // 9
+ 116, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 427, 428, 430, 446, 230, // A
+ 431, 436, 437, 434, 435, 443, 444, 424, 429, 242, 433, 299, 300, 301, 302, 303, // B
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, // C
+ 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, // D
+ 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 289, // E
+ 452, 355, 373, 379, 387, 405, 411 // F
};
internal static readonly ushort[] G34_4J =
{
- 001, 003, 005, 007, 009, 011, 012, 014, 016, 018, 020, 022, 024, 026, 028,
- 030, 032, 034, 037, 039, 041, 043, 044, 045, 046, 047, 048, 051, 054, 057,
- 060, 063, 064, 065, 066, 067, 069, 071, 073, 074, 075, 076, 077, 078, 079,
- 080, 081, 002, 004, 006, 008, 010, 068, 070, 072, 013, 015, 017, 019, 021,
- 023, 025, 027, 029, 031, 033, 035, 038, 040, 042, 049, 052, 055, 058, 061,
- 050, 053, 056, 059, 062, 036, 083, 085, 087, 089, 091, 092, 094, 096, 098,
- 100, 102, 104, 106, 108, 110, 112, 114, 117, 119, 121, 123, 124, 125, 126,
- 127, 128, 131, 134, 137, 140, 143, 144, 145, 146, 147, 149, 151, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 082, 084, 086, 088, 090, 148, 150, 152,
- 093, 095, 097, 099, 101, 103, 105, 107, 109, 111, 113, 115, 118, 120, 122,
- 129, 132, 135, 138, 141, 130, 133, 136, 139, 142, 116, 162, 163, 164, 165,
- 166, 167, 168, 169, 170, 171, 225, 226, 228, 241, 230, 229, 234, 235, 232,
- 233, 443, 444, 424, 430, 242, 433, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
- 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 289,
- 452, 355, 373, 379, 387, 405, 411
+ 001, 003, 005, 007, 009, 011, 012, 014, 016, 018, 020, 022, 024, 026, 028, 030, // 0
+ 032, 034, 037, 039, 041, 043, 044, 045, 046, 047, 048, 051, 054, 057, 060, 063, // 1
+ 064, 065, 066, 067, 069, 071, 073, 074, 075, 076, 077, 078, 079, 080, 081, 002, // 2
+ 004, 006, 008, 010, 068, 070, 072, 013, 015, 017, 019, 021, 023, 025, 027, 029, // 3
+ 031, 033, 035, 038, 040, 042, 049, 052, 055, 058, 061, 050, 053, 056, 059, 062, // 4
+ 036, 083, 085, 087, 089, 091, 092, 094, 096, 098, 100, 102, 104, 106, 108, 110, // 5
+ 112, 114, 117, 119, 121, 123, 124, 125, 126, 127, 128, 131, 134, 137, 140, 143, // 6
+ 144, 145, 146, 147, 149, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 082, // 7
+ 084, 086, 088, 090, 148, 150, 152, 093, 095, 097, 099, 101, 103, 105, 107, 109, // 8
+ 111, 113, 115, 118, 120, 122, 129, 132, 135, 138, 141, 130, 133, 136, 139, 142, // 9
+ 116, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 225, 226, 228, 446, 230, // A
+ 229, 234, 235, 232, 233, 443, 444, 424, 430, 242, 433, 172, 173, 174, 175, 176, // B
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, // C
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, // D
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 289, // E
+ 452, 355, 373, 379, 387, 405, 411 // F
};
#endregion
@@ -1577,7 +1579,7 @@ namespace PKHeX
66,67,68,69,43,44,70,71,72,73,
74,75,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
0xFFFF,0xFFFF,0xFFFF,45,46,47,48,49,50,51,
- 52,53,0xFFFF,55,56,57,58,59,60,0xFFFF,
+ 52,53,0xFFFF,55,56,57,58,59,60,61,
63,64,0xFFFF,76,77,78,79,0xFFFF,0xFFFF,0xFFFF,
0xFFFF,0xFFFF,0xFFFF,80,81,82,83,84,85,0xFFFF,
0xFFFF,0xFFFF,0xFFFF,86,87,0xFFFF,88,89,90,91,
@@ -1596,6 +1598,15 @@ namespace PKHeX
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
0xFFFF,0xFFFF,0xFFFF,0xFFFF,260,261,262,263,264,
+
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 328,329,330,331,332,333,334,335,336,337,
+ 338,339,340,341,342,343,344,345,346,347,
+ 348,349,350,351,352,353,354,355,356,357,
+ 358,359,360,361,362,363,364,365,366,367,
+ 368,369,370,371,372,373,374,375,376,377,
};
if (g3val > arr.Length)
return 0xFFFF;
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index 131bc6ca5..3e10c76ee 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -15132,6 +15132,16 @@ namespace PKHeX.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap item_tm {
+ get {
+ object obj = ResourceManager.GetObject("item_tm", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized string similar to ! PKHeX Interface Customization File
///! Languages: Save this file accordingly and put it in the same folder as PKHeX's executable.
@@ -15181,11 +15191,11 @@ namespace PKHeX.Properties {
///
/// Looks up a localized string similar to ! PKHeX Interface Customization File
///! Languages: Save this file accordingly and put it in the same folder as PKHeX's executable.
- ///! lang_en.txt = English
- ///! lang_jp.txt = Japanese
+ ///! lang_en.txt = Inglés
+ ///! lang_jp.txt = Japonés
///! lang_fr.txt = French
- ///! lang_de.txt = German
- ///! lang_es.txt = Spanish
+ ///! lang_de.txt = Alemán
+ ///! lang_es.txt = Español
///! lang_it.txt = Italian
///! lang_ko.txt = Korean
///! lang_zh.txt = Chinese
@@ -15193,7 +15203,7 @@ namespace PKHeX.Properties {
///! Make sure that each edit has a ' = ' between Control name and new Text!
///!
///! -----------------------------------------------------
- ///- DO NOT CHANGE THI [rest of string was truncated]";.
+ ///- DO NOT CHANGE THIS [rest of string was truncated]";.
///
internal static string lang_es {
get {
@@ -20500,18 +20510,18 @@ namespace PKHeX.Properties {
///
/// Looks up a localized string similar to None
- ///Rock Smash (HGSS)
- ///Tall Grass
+ ///Golpe roca (HGSS)
+ ///Hierba Alta
///
///Dialga/Palkia
- ///Cave/Hall of Origin
+ ///Cueva/Sala del Origen
///
- ///Surfing/Fishing
+ ///Surfeando/Pescando
///
- ///Building/Enigma Stone
- ///Marsh/Safari
+ ///Edificio/Misticristal
+ ///Pantano/Safari
///
- ///Starter/Fossil/Gift (DP)
+ ///Inicial/Fosil/Regalo (DP)
///
///
///
@@ -20522,8 +20532,8 @@ namespace PKHeX.Properties {
///
///
///
- ///Distortion World (Pt)
- ///Starter/Fossil/Gift (Pt/DP Trio).
+ ///Mundo Distorsion (Pt)
+ ///Inicial/Fosil/Regalo (Pt/DP Trio).
///
internal static string text_encountertype_es {
get {
@@ -20697,7 +20707,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -20949,9 +20959,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
/// [rest of string was truncated]";.
+ /// [rest of string was truncated]";.
///
internal static string text_forms_de {
get {
@@ -20960,7 +20968,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -21212,9 +21220,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
/// [rest of string was truncated]";.
+ /// [rest of string was truncated]";.
///
internal static string text_forms_en {
get {
@@ -21223,7 +21229,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -21474,10 +21480,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
- /// [rest of string was truncated]";.
+ ///
/// [rest of string was truncated]";.
///
internal static string text_forms_es {
get {
@@ -21486,7 +21489,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -21736,10 +21739,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
- /// [rest of string was truncated]";.
+ ///
/// [rest of string was truncated]";.
///
internal static string text_forms_fr {
get {
@@ -21748,7 +21748,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -21999,10 +21999,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
- /// [rest of string was truncated]";.
+ ///
/// [rest of string was truncated]";.
///
internal static string text_forms_it {
get {
@@ -22011,7 +22008,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -22262,9 +22259,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
/// [rest of string was truncated]";.
+ /// [rest of string was truncated]";.
///
internal static string text_forms_ja {
get {
@@ -22273,7 +22268,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -22525,9 +22520,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
/// [rest of string was truncated]";.
+ /// [rest of string was truncated]";.
///
internal static string text_forms_ko {
get {
@@ -22536,7 +22529,7 @@ namespace PKHeX.Properties {
}
///
- /// Looks up a localized string similar to
+ /// Looks up a localized string similar to Spiky
///
///
///
@@ -22787,10 +22780,7 @@ namespace PKHeX.Properties {
///
///
///
- ///
- ///
- ///
- /// [rest of string was truncated]";.
+ ///
/// [rest of string was truncated]";.
///
internal static string text_forms_zh {
get {
@@ -22878,8 +22868,8 @@ namespace PKHeX.Properties {
///RojoFuego
///VerdeHoja
///
- ///HeartGold
- ///SoulSilver
+ ///Oro HeartGold
+ ///Plata SoulSilver
///
///Diamante
///Perla
@@ -22897,8 +22887,8 @@ namespace PKHeX.Properties {
///Negra2
///X
///Y
- ///AS
- ///OR.
+ ///Zafiro Alfa
+ ///Rubí Omega.
///
internal static string text_games_es {
get {
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index da26da620..10d5e449e 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -6382,4 +6382,7 @@
..\Resources\img\box\slotView.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\img\item\item_tm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/Resources/byte/wc6.pkl b/Resources/byte/wc6.pkl
index 741fee4e6..e29dc62e2 100644
Binary files a/Resources/byte/wc6.pkl and b/Resources/byte/wc6.pkl differ
diff --git a/Resources/byte/wc6full.pkl b/Resources/byte/wc6full.pkl
index d3d842dc8..1d4806955 100644
Binary files a/Resources/byte/wc6full.pkl and b/Resources/byte/wc6full.pkl differ
diff --git a/Resources/img/item/item_tm.png b/Resources/img/item/item_tm.png
new file mode 100644
index 000000000..1d170e8b7
Binary files /dev/null and b/Resources/img/item/item_tm.png differ
diff --git a/Resources/text/changelog.txt b/Resources/text/changelog.txt
index 9c84e5254..5858adbec 100644
--- a/Resources/text/changelog.txt
+++ b/Resources/text/changelog.txt
@@ -752,7 +752,7 @@ http://projectpokemon.org/forums/showthread.php?36986
- Changed: Database can now search pk3/pk4/pk5/pk6 files.
- - An advance search option has been added, uses the same filter style as the Batch Editor.
-07/30/16 - New Update:
+07/31/16 - New Update: (21700)
- Added: Batch editor "Shinify" command to make a Pokemon shiny ($shiny). Thanks exegg!
- Changed: Ribbon editor is now wider (5 ribbons per row). Thanks \!
- Fixed: Gen 3/4 save issues. Thanks BeyondTheHorizon, poutros!
@@ -762,4 +762,16 @@ http://projectpokemon.org/forums/showthread.php?36986
- Fixed: Misc Pokémon Link legality cases fixed. Thanks poutros!
- Fixed: Misc linux issues with latest refactoring. Thanks Zekario!
- Fixed: Trainer Editor window ~ Unicode character display. Thanks \!
- - Fixed: Minor main window editing bugs for EXP/Nature/Gender.
\ No newline at end of file
+ - Fixed: Minor main window editing bugs for EXP/Nature/Gender.
+
+08/07/16 - New Update:
+ - Added: TWLSaveTool folder auto-detection for past generation save files.
+ - Changed: Save file auto-detection now detects the last saved file instead of a predefined order. Saving a NDS game after 3DS game will return the NDS save.
+ - Fixed: Multiple gen3/4 save/pkm/transfer bugs. Thanks BeyondTheHorizon, JHorbach, Destinyy, MichiS97, ashrobb, IamAVeryNicePereson & javier_himura!
+ - Fixed: Manaphy egg (non event) now correctly flagged as illegal. Thanks RustInPeace!
+ - Changed: Updated Spanish Translation. Thanks ajtudela!
+ - Fixed: Drag&Drop between box slots tweaked and improved. Thanks Warsen!
+ - Fixed: Mystery Gift files can now be dragged into Box slots directly.
+ - Fixed: Gen6 Trainer Info editor can now edit Vivillon forms again. Thanks Majickhat55!
+ - Added: Cleaner 'delete' command to batch editor (set species to 0 to clear data).
+ - Added: Specifying output folder when modifying a folder in the Batch Editor. Thanks \!
\ No newline at end of file
diff --git a/Resources/text/es/lang_es.txt b/Resources/text/es/lang_es.txt
index da2424e42..348239b9f 100644
--- a/Resources/text/es/lang_es.txt
+++ b/Resources/text/es/lang_es.txt
@@ -1,10 +1,10 @@
! PKHeX Interface Customization File
! Languages: Save this file accordingly and put it in the same folder as PKHeX's executable.
-! lang_en.txt = English
-! lang_jp.txt = Japanese
+! lang_en.txt = Inglés
+! lang_jp.txt = Japonés
! lang_fr.txt = French
-! lang_de.txt = German
-! lang_es.txt = Spanish
+! lang_de.txt = Alemán
+! lang_es.txt = Español
! lang_it.txt = Italian
! lang_ko.txt = Korean
! lang_zh.txt = Chinese
@@ -26,18 +26,18 @@ Menu_Exit = Salir
--
Menu_Tools = Útiles
Menu_Showdown = Showdown
-Menu_ShowdownImportPKM = Import Set from Clipboard
-Menu_ShowdownExportPKM = Export Set to Clipboard
-Menu_ShowdownExportParty = Export Party to Clipboard
-Menu_ShowdownExportBattleBox = Export Battle Box to Clipboard
+Menu_ShowdownImportPKM = Importar set desde el portapapeles
+Menu_ShowdownExportPKM = Exportar set desde el portapapeles
+Menu_ShowdownExportParty = Exportar equipo desde el portapapeles
+Menu_ShowdownExportBattleBox = Exportar caja de combate desde el portapapeles
Menu_CyberGadget = CyberGadget
Menu_OpenTemp = Abrir carpeta Temp
Menu_OpenCache = Abrir carpeta Cache
Menu_Data = Data
Menu_LoadBoxes = Cargar Cajas
Menu_DumpBoxes = Exportar Cajas
-Menu_Report = Reporte de la caja
-Menu_Database = PKM Database
+Menu_Report = Informe de la caja
+Menu_Database = Base de datos de PKM
Menu_Other = Otro
Menu_OpenSDF = Abrir carpeta SaveDataFiler
Menu_OpenSDB = Abrir carpeta SaveDataBackup
@@ -46,7 +46,7 @@ Menu_Options = Opciones
Menu_Language = Idioma
Menu_Modify = Ajuste a SAV
Menu_ModifyDex = Modificar Pokédex
-Menu_ModifyPKM = Modificar PKM Info
+Menu_ModifyPKM = Modificar info PKM
Menu_Unicode = Unicode
Menu_About = Sobre PKHeX
--------------------Context Menus----------------------
@@ -68,14 +68,14 @@ Label_Friendship = Felicidad:
Label_Form = Forma:
Label_Ability = Habilidad:
Label_Language = Idioma:
-CHK_IsEgg = Es Huevo
+CHK_IsEgg = Huevo
CHK_Infected = Infectado
CHK_Cured = Curado
Label_PKRS = PkRs:
Label_PKRSdays = d:
Label_Country = País:
-Label_SubRegion = Sub Region:
-Label_3DSRegion = 3DS Region:
+Label_SubRegion = Subregión:
+Label_3DSRegion = Región 3DS:
---------------------Met Tab Data-----------------------
Tab_Met = Conocido
Label_OriginGame = Juego Original:
@@ -94,7 +94,7 @@ Label_EggDate = Fecha:
Tab_Stats = Estadísticas
Label_IVs = IVs
Label_EVs = EVs
-Label_Stats = Estadísticas
+Label_Stats = Estad.
Label_HP = PS:
Label_ATK = Atq:
Label_DEF = Def:
@@ -102,10 +102,10 @@ Label_SPA = Atq E:
Label_SPD = Def E:
Label_SPE = Velo:
Label_Total = Total:
-Label_HiddenPowerPrefix = Poder Oculto Tipo:
+Label_HiddenPowerPrefix = Tipo del Poder Oculto:
Label_CharacteristicPrefix = Características:
-BTN_RandomIVs = Randomizar IVs
-BTN_RandomEVs = Randomizar EVs
+BTN_RandomIVs = Aleatorizar IVs
+BTN_RandomEVs = Aleatorizar EVs
Label_ContestStats = Estadísticas de concurso
Label_Cool = Carisma
Label_Beauty = Belleza
@@ -121,18 +121,18 @@ Label_PPups = Más PP
GB_RelearnMoves = Recordar Movimientos
-------------------OT/Misc Tab Data---------------------
Tab_OTMisc = EO/Misc
-GB_OT = Trainer Information
+GB_OT = Info del Entrenador
Label_TID = ID:
Label_SID = IDS:
Label_OT = EO:
-GB_nOT = Ultimo dueño (no OT)
-Label_PrevOT = OT:
+GB_nOT = Ultimo dueño (no EO)
+Label_PrevOT = EO:
GB_ExtraBytes = Bytes Extras
GB_Markings = Marcas
-BTN_Ribbons = Listones
-BTN_Medals = Medales
+BTN_Ribbons = Cintas
+BTN_Medals = Medallas
BTN_History = Memorias
-Label_EncryptionConstant = Constante de Encryption:
+Label_EncryptionConstant = Cte. de Encriptación:
BTN_RerollEC = Generar
-----------------Save Data Interface--------------------
Tab_Box = Caja
@@ -140,17 +140,17 @@ Tab_PartyBattle = Caja de combate
Tab_Other = Otro
Tab_SAV = SAV
B_OpenPokePuffs = Pokélito
-B_OpenItemPouch = Objeto
-B_OpenTrainerInfo = Info del Entrenador
-B_OpenBoxLayout = Box Layout
+B_OpenItemPouch = Inventario
+B_OpenTrainerInfo = Entrenador
+B_OpenBoxLayout = Fondos Cajas
B_OpenWondercards = Tarjetas Misteriosas
-B_OpenBerryField = Cultivo de Bayas
+B_OpenBerryField = C. de Bayas
B_OpenOPowers = Poder O
-B_OpenEventFlags = Event Flags
+B_OpenEventFlags = Eventos
B_OpenPokedex = Pokédex
-B_OpenSuperTraining = Super Train
+B_OpenSuperTraining = Superentren.
--
-B_OpenSecretBase = Secret Base
+B_OpenSecretBase = Base Secreta
--------------------Tab Internals-----------------------
L_Party = Equipo:
L_BattleBox = Caja de Combate:
@@ -173,13 +173,13 @@ L_Secure2 = Secure Value 2:
! End
! -----------------------------------------------------
- DO NOT CHANGE THIS SECTION.
-! RibbonEditor = Ribbon Editor
+! RibbonEditor = Editor de Cintas
- Change stuff below this line, not above.
----------------------Buttons--------------------------
-BTN_All = Dar todos
-BTN_None = Quitar todos
-BTN_Cancel = Cancelar
-BTN_Save = Guardar
+B_All = Dar todos
+B_None = Quitar todos
+B_Cancel = Cancelar
+B_Save = Guardar
----------------------Ribbons--------------------------
L_RibbonChampionKalos = Campeón de Kalos
L_RibbonChampionG3Hoenn = Campeón de Hoenn (RSE)
@@ -220,13 +220,13 @@ L_RibbonChampionNational = Campeón Nacional
L_RibbonChampionWorld = Campeón Mundial
L_RibbonCountMemoryContest = Cintas de concursos anteriores
L_RibbonCountMemoryBattle = Cintas de batallas anteriores
-L_RibbonChampionG6Hoenn = Hoenn Champion (ORAS)
-L_RibbonContestStar = Contest Star
-L_RibbonMasterCoolness = Coolness Master
-L_RibbonMasterBeauty = Beauty Master
-L_RibbonMasterCuteness = Cuteness Master
-L_RibbonMasterCleverness = Cleverness Master
-L_RibbonMasterToughness = Toughness Master
+L_RibbonChampionG6Hoenn = Campeón de Hoenn (ORAS)
+L_RibbonContestStar = Cinta estelar de los concursos
+L_RibbonMasterCoolness = Cinta estrella del carisma
+L_RibbonMasterBeauty = Cinta estrella de la belleza
+L_RibbonMasterCuteness = Cinta estrella de la dulzura
+L_RibbonMasterCleverness = Cinta estrella del ingenio
+L_RibbonMasterToughness = Cinta estrella de la dureza
----------------Contest/Battle (PAST)-------------------
L_RibbonG3Cool = Cool (G3)
L_RibbonG3CoolSuper = Cool Super
@@ -283,13 +283,13 @@ L_RibbonCountG3Smart = Smart
L_RibbonCountG3Tough = Tough
! -----------------------------------------------------
- DO NOT CHANGE THIS SECTION.
-! SuperTrainingEditor = Medal Editor
+! SuperTrainingEditor = Editor de Medallas
- Change stuff below this line, not above.
----------------------Buttons--------------------------
-B_All = Give All
-B_None = Remove All
-B_Cancel = Cancel
-B_Save = Save
+B_All = Dar todos
+B_None = Quitar todos
+B_Cancel = Cancelar
+B_Save = Guardar
------------------Super Training-----------------------
L_SuperTraining = Superentrenamiento Normal
L_SuperTrain1_HP = Nv. 1: PS
@@ -324,12 +324,12 @@ L_SuperTrain7_2 = Nv. 7: Bombardeo
L_SuperTrain7_3 = Nv. 7: Hydreigon
L_SuperTrain8_1 = Nv. 8: X/Y
---
-L_Bag = Last Used Bag:
-L_Hits = Hits Remaining:
+L_Bag = Último saco usado:
+L_Hits = Golpes restantes:
! End
! -----------------------------------------------------
-- DO NOT CHANGE THIS SECTION. Memories / Amie UI Below
-! MemoryAmie
+- DO NOT CHANGE THIS SECTION.
+! MemoryAmie = Editor de Memorias / Amigos
- Change stuff below this line, not above.
---------------------Bottom UI-------------------------
BTN_Cancel = Cancelar
@@ -339,11 +339,463 @@ L_Handler = Manejador Actual:
Tab_OTMemory = Memorias con: EO
L_OT_Friendship = Amistad:
L_OT_Affection = Cariño:
-Tab_CTMemory = Memorias con: notEO
+Tab_CTMemory = Memorias con: noEO
L_CT_Friendship = Amistad:
L_cT_Affection = Cariño:
Tab_Residence = Residencia
--
+L_Country = País
+L_Region = Región
+L_Geo0 = Último:
+L_Geo1 = Anterior 1:
+L_Geo2 = Anterior 2:
+L_Geo3 = Anterior 3:
+L_Geo4 = Anterior 4:
--
L_Arguments = Disabled ; Never left ; OT ; Past Gen ; Memories with ; Pokémon ; Area ; Item(s) ; Move ; Location ;
! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! f2_Text = Special Characters
+- Change stuff below this line, not above.
+-------------------------------------------------------
+-- No Elements to rename here.
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_BerryField = Visor de Campos de Bayas
+- Change stuff below this line, not above.
+-------------------------------------------------------
+L_Berry = Baya:
+L_Field = Campo:
+L_Unfinished = Unfinished: Needs More Research
+L_u1 = 1
+L_u2 = 2
+L_u3 = 3
+L_u4 = 4
+L_u5 = 5
+L_u6 = 6
+L_u7 = 7
+B_Cancel = Cancelar
+B_Save = Guardar
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION. Memories / Amie UI Below
+! SAV_BoxLayout = Box Layout Editor
+- Change stuff below this line, not above.
+-------------------------------------------------------
+L_Unlocked = Unlocked:
+B_Cancel = Cancel
+B_Save = Save
+L_Flags = Unlocked BG Flags:
+L_BG = BG:
+L_BoxName = Box Name:
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_EventFlagsORAS = Editor de Eventos (ORAS)
+- Change stuff below this line, not above.
+------------------------------------------------------
+L_Ash = Asho volcánico:
+GB_Misc = Misc
+flag_0288 = Multi Statuette
+flag_0287 = Rotation Statuette
+flag_0286 = Triples Statuette
+flag_0293 = Super Multi Unlocked
+flag_0292 = Super Rotation Unlocked
+flag_0291 = Super Triples Unlocked
+flag_0290 = Super Doubles Unlocked
+flag_0289 = Super Singles Unlocked
+flag_0285 = Doubles Statuette
+flag_0284 = Singles Statuette
+GB_Rebattle = Rebattle
+flag_2835 = (AS) Latios Capturado
+flag_0420 = (AS) Latios Derrotado
+L_SkyTower = *Sky Tower
+flag_2834 = (OR) Latias Capturado
+flag_0419 = (OR) Latias Derrotado
+flag_2828 = (OR) Tornadus Capturado
+flag_2830 = (OR) Reshiram Capturado
+flag_0182 = (OR) Reshiram Derrotado
+flag_2820 = (OR) Palkia Capturado
+flag_2839 = (OR) Groudon Capturado
+flag_0648 = (OR) Groudon Derrotado
+flag_2815 = (OR) Ho-Oh Capturado
+flag_0208 = (OR) Ho-Oh Derrotado
+flag_2824 = Cresselia Capturado
+flag_0172 = Cresselia Derrotado
+flag_2821 = Heatran Capturado
+flag_0260 = Heatran Derrotado
+flag_2842 = Deoxys Capturado
+flag_0945 = Deoxys Derrotado
+flag_2838 = Registeel Capturado
+flag_0958 = Registeel Derrotado
+flag_2836 = Regirock Capturado
+flag_0956 = Regirock Derrotado
+flag_2837 = Regice Capturado
+flag_0957 = Regice Derrotado
+flag_2813 = Suicune Capturado
+flag_0175 = Suicune Derrotado
+flag_2811 = Raikou Capturado
+flag_0173 = Raikou Derrotado
+flag_2812 = Entei Capturado
+flag_0174 = Entei Derrotado
+flag_2832 = Landorus Capturado
+flag_2829 = (AS) Thundurus Capturado
+flag_2822 = Regigigas Capturado
+flag_0252 = Regigigas Derrotado
+flag_2827 = Virizion Capturado
+flag_0178 = Virizion Derrotado
+flag_2826 = Terrakion Capturado
+flag_0177 = Terrakion Derrotado
+flag_2823 = Giratina Capturado
+flag_2819 = (AS) Dialga Capturado
+flag_2833 = Kyurem Capturado
+flag_0184 = Kyurem Derrotado
+flag_2816 = Uxie Capturado
+flag_0179 = Uxie Derrotado
+flag_2817 = Mesprit Capturado
+flag_0180 = Mesprit Derrotado
+flag_2825 = Cobalion Capturado
+flag_0176 = Cobalion Derrotado
+flag_2814 = (AS) Lugia Capturado
+flag_0209 = (AS) Lugia Derrotado
+flag_2818 = Azelf Capturado
+flag_0181 = Azelf Derrotado
+flag_2831 = (AS) Zekrom Capturado
+flag_0183 = (AS) Zekrom Derrotado
+flag_2840 = (AS) Kyogre Capturado
+flag_0647 = (AS) Kyogre Derrotado
+GB_Researcher = FlagDiff Researcher
+L_UnSet = UnSet
+L_IsSet = IsSet
+B_LoadNew = Carg. Nuevo
+B_LoadOld = Carg. Antiguo
+GB_FlagStatus = Check Flag Status
+L_Flag = Flag:
+CHK_CustomFlag = Estado:
+B_Save = Guardar
+B_Cancel = Cancelar
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_EventFlagsXY = Editor de Eventos (XY)
+- Change stuff below this line, not above.
+-------------------------------------------------------
+flag_2546 = Pokédex Obtained
+GB_Misc = Misc
+flag_0289 = Multi Statuette
+flag_0288 = Rotation Statuette
+flag_0287 = Triples Statuette
+flag_0294 = Super Multi Unlocked
+flag_0293 = Super Rotation Unlocked
+flag_0292 = Super Triples Unlocked
+flag_0291 = Super Doubles Unlocked
+flag_0290 = Super Singles Unlocked
+flag_0675 = 50: Beat Chatelaine
+flag_0286 = Doubles Statuette
+flag_0285 = Singles Statuette
+GB_Rebattle = Rebattle
+flag_0114 = Zygarde Capturado
+flag_0790 = Zygarde Derrotado
+flag_0115 = Mewtwo Capturado
+flag_0963 = Mewtwo Derrotado
+GB_Researcher = FlagDiff Researcher
+L_UnSet = UnSet
+L_IsSet = IsSet
+B_LoadNew = Carg. Nuevo
+B_LoadOld = Carg. Antiguo
+flag_2239 = 2239
+flag_2238 = 2238
+flag_2237 = 2237
+B_Save = Guardar
+flag_0005 = Flag5
+flag_0004 = Flag4
+flag_0003 = Flag3
+flag_0002 = Flag2
+flag_0001 = Flag1
+GB_FlagStatus = Check Flag Status
+L_Flag = Flag:
+CHK_CustomFlag = Estado:
+B_Cancel = Cancelar
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_PokedexORAS = Editor de Pokédex (ORAS)
+- Change stuff below this line, not above.
+------------------------------------------------------
+L_goto = goto:
+GB_Owned = Obtenido
+CHK_P1 = Obtenido
+CHK_P2 = Macho
+CHK_P3 = Hembra
+CHK_P4 = Macho brillante
+CHK_P5 = Hembra brillante
+GB_Encountered = Encontrado
+CHK_P6 = Macho
+CHK_P7 = Hembra
+CHK_P8 = Macho brillante
+CHK_P9 = Hembra brillante
+L_DexNav = Nvl. DexNav:
+GB_Language = Idiomas
+CHK_L1 = Japonés
+CHK_L2 = Inglés
+CHK_L3 = Francés
+CHK_L4 = Italiano
+CHK_L5 = Alemán
+CHK_L6 = Español
+CHK_L7 = Coreano
+B_Modify = Modificar...
+B_GiveAll = Marcar todos
+L_Spinda = Spinda:
+B_Save = Guardar
+B_Cancel = Cancelar
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_PokedexXY = Editor de Pokédex (XY)
+- Change stuff below this line, not above.
+-------------------------------------------------------
+L_goto = goto:
+GB_Owned = Obtenido
+CHK_F1 = Extranjero (Pre)
+CHK_P1 = Nativo (Kalos)
+GB_Encountered = Encontrado
+CHK_P2 = Macho
+CHK_P3 = Hembra
+CHK_P4 = Macho brillante
+CHK_P5 = Hembra brillante
+GB_Displayed = Mostrado
+CHK_P6 = Macho
+CHK_P7 = Hembra
+CHK_P8 = Macho brillante
+CHK_P9 = Hembra brillante
+GB_Language = Idiomas
+CHK_L1 = Japonés
+CHK_L2 = Inglés
+CHK_L3 = Francés
+CHK_L4 = Italiano
+CHK_L5 = Alemán
+CHK_L6 = Español
+CHK_L7 = Coreano
+B_Modify = Modificar...
+B_GiveAll = Marcar todos
+L_Spinda = Spinda:
+B_Save = Guardar
+B_Cancel = Cancelar
+! End
+-------------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_HallOfFame = Editor de Hall de la Fama
+- Change stuff below this line, not above.
+-------------------------------------------------------
+B_CopyText = Copiar txt
+L_Level = Nivel:
+L_Shiny = Brillante:
+Label_Form = Forma:
+B_Cancel = Canceler
+Label_MetDate = Fecha:
+L_Victory = Núm. Victorias:
+GB_OT = Info del Entrenador
+Label_OT = OT:
+Label_SID = SID:
+Label_TID = TID:
+Label_HeldItem = Objeto:
+GB_CurrentMoves = Mov. actuales
+Label_EncryptionConstant = Cte. de Encriptación:
+CHK_Nicknamed = Apodo:
+Label_Species = Especie:
+L_PartyNum = N. equipo:
+B_Close = Guardar
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_Inventory = Editor de Inventario
+- Change stuff below this line, not above.
+-------------------------------------------------------
+GB_Pouch = Pokélitos
+B_DisplayBerries = Bayas
+B_DisplayMedicine = Medicinas
+B_DisplayTMHM = MT/MO
+B_DisplayKeyItems = Objetos clave
+B_DisplayItems = Objetos
+B_Save = Guardar
+B_Cancel = Cancelar
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_OPower = Editor de Poder O
+- Change stuff below this line, not above.
+-------------------------------------------------------
+GB_Regular = Regular
+B_MaxP = Give All
+L_1 = Hatching:
+L_2 = Bargain:
+L_3 = ?Prize:
+L_4 = EXP:
+L_5 = Capture:
+L_6 = ?Encounter
+L_7 = ?Stealth:
+L_8 = HP Restore:
+L_9 = ?PP:
+L_10 = ?Befriend:
+L_11 = ?Attack:
+L_12 = ?Defense:
+L_13 = ?Sp. Atk:
+L_14 = ?Sp. Def:
+L_15 = ?Speed:
+L_16 = ?Critical Hit:
+L_17 = ?Accuracy:
+GB_Event = Event
+CHK_1 = ?Bargain MAX
+CHK_2 = ?EXP MAX
+CHK_3 = ?Prize MAX
+CHK_4 = ?Hatch MAX
+CHK_5 = ?Capture MAX
+CHK_6 = ?Restore MAX
+CHK_7 = ?Befriend MAX
+CHK_8 = ?Unused
+B_AllMax = Give All
+B_Save = Save
+B_Cancel = Cancel
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_Pokepuff = Poké Puffs Editor
+- Change stuff below this line, not above.
+-------------------------------------------------------
+L_Count = CNT:
+B_None = None
+B_Sort = Sort
+B_All = All
+B_Cancel = Cancel
+B_Save = Save
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_SecretBase = Secret Base Editor
+- Change stuff below this line, not above.
+-------------------------------------------------------
+L_FlagsCaptured = Flags Captured:
+B_FSave = <
+B_GiveDecor = Give All Decorations
+B_Cancel = Cancel
+B_Save = Save
+B_FDisplay = >
+L_Favorite = Favorites:
+--
+f_MAIN = Main
+L_TrName = Trainer Name:
+L_BaseLocation = Secret Base Location:
+L_Happy = Happy:
+L_Encourage = Encourage:
+L_Blackboard = Blackboard:
+L_Confetti = Confetti:
+L_TeamName = Team Name:
+L_TeamSlogan = Team Slogan:
+--
+GB_Object = Object Layout
+L_Index = Index:
+L_Decoration = Decoration:
+L_Rotation = Rotation Val:
+L_X = X Coordinate:
+L_Y = Y Coordinate:
+--
+f_PKM = Trainer Pokémon
+GB_PKM = PKM
+L_Participant = Participant:
+L_EncryptionConstant = ENC:
+L_IVs = IVs
+L_EVs = EVs
+L_HP = HP
+L_ATK = ATK
+L_DEF = DEF
+L_SpA = SpA
+L_SpD = SpD
+L_SPE = SPE
+L_PKFriendship = Friendship:
+L_PPUps = PPUps
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_Trainer = Trainer Data Editor
+- Change stuff below this line, not above.
+-------------------------------------------------------
+Tab_Multiplayer = Multiplayer
+L_MultiplayerSprite = Multiplayer Sprite:
+L_Style = Style:
+Tab_BadgeMap = Badges/Map
+GB_Map = Map Position
+L_CurrentMap = Current Map:
+L_X = X Coordinate:
+L_Z = Z Coordinate:
+L_Y = Y Coordinate:
+L_Offset = (offset)
+Tab_Appearance = Current Appearance (X/Y)
+L_Outfit = Outfit Vals
+B_GiveAccessories = Give All Accessories
+L_Dress = Dress:
+L_Accessory = Accessory:
+L_Bag = Bag:
+L_Socks = Socks:
+L_Pants = Pants:
+L_Shirt = Shirt:
+L_Hat = Hat:
+L_FacialHair = Facial Hair:
+L_Hairstyle = Hairstyle:
+L_HairColor = Hair Color:
+L_SkinColor = Skin Color:
+GB_MaisonCurrent = Maison Streaks (Current)
+L_SuperC = Super
+L_NormalC = Normal
+L_MultiC = Multi:
+L_RotationC = Rotation:
+L_TriplesC = Triples:
+L_DoublesC = Doubles:
+L_SinglesC = Singles:
+GB_MaisonBest = Maison Streaks (Best)
+L_SuperB = Super
+L_NormalB = Normal
+L_MultiB = Multi:
+L_RotationB = Rotation:
+L_TriplesB = Triples:
+L_DoublesB = Doubles:
+L_SinglesB = Singles:
+B_Save = Save
+L_Stats = Stats
+B_Cancel = Cancel
+Tab_Overview = Overview
+L_Seconds = Sec:
+L_Minutes = Min:
+L_Hours = Hrs:
+L_Language = Language:
+L_PM = PokéMiles:
+L_Region = Region:
+L_BP = BP:
+L_Country = Country:
+B_MaxCash = +
+L_3DSReg = 3DS Region:
+L_Money = $:
+L_SID = SID:
+L_TID = TID:
+L_TrainerName = Trainer Name:
+L_Value = Value
+GB_Sayings = Saved Sayings
+L_Saying1 = 1:
+L_Saying2 = 2:
+L_Saying3 = 3:
+L_Saying4 = 4:
+L_Saying5 = 5:
+! End
+! -----------------------------------------------------
+- DO NOT CHANGE THIS SECTION.
+! SAV_Wondercard = Wonder Card I/O
+- Change stuff below this line, not above.
+-------------------------------------------------------
+L_Details = Details:
+L_Received = Received List:
+B_Import = Import
+B_Output = Export
+B_Cancel = Cancel
+B_Save = Save
+! End
\ No newline at end of file
diff --git a/Resources/text/es/text_EncounterType_es.txt b/Resources/text/es/text_EncounterType_es.txt
index 99492d953..c0c7536c4 100644
--- a/Resources/text/es/text_EncounterType_es.txt
+++ b/Resources/text/es/text_EncounterType_es.txt
@@ -1,16 +1,16 @@
None
-Rock Smash (HGSS)
-Tall Grass
+Golpe roca (HGSS)
+Hierba Alta
Dialga/Palkia
-Cave/Hall of Origin
+Cueva/Sala del Origen
-Surfing/Fishing
+Surfeando/Pescando
-Building/Enigma Stone
-Marsh/Safari
+Edificio/Misticristal
+Pantano/Safari
-Starter/Fossil/Gift (DP)
+Inicial/Fosil/Regalo (DP)
@@ -21,5 +21,5 @@ Starter/Fossil/Gift (DP)
-Distortion World (Pt)
-Starter/Fossil/Gift (Pt/DP Trio)
\ No newline at end of file
+Mundo Distorsion (Pt)
+Inicial/Fosil/Regalo (Pt/DP Trio)
\ No newline at end of file
diff --git a/Resources/text/es/text_Games_es.txt b/Resources/text/es/text_Games_es.txt
index 2edc80d22..d25560725 100644
--- a/Resources/text/es/text_Games_es.txt
+++ b/Resources/text/es/text_Games_es.txt
@@ -5,8 +5,8 @@ Esmeralda
RojoFuego
VerdeHoja
-HeartGold
-SoulSilver
+Oro HeartGold
+Plata SoulSilver
Diamante
Perla
@@ -24,5 +24,5 @@ Blanca2
Negra2
X
Y
-AS
-OR
\ No newline at end of file
+Zafiro Alfa
+Rubí Omega
\ No newline at end of file
diff --git a/Saves/SAV5.cs b/Saves/SAV5.cs
index d4dc3b12b..9d2b68d0d 100644
--- a/Saves/SAV5.cs
+++ b/Saves/SAV5.cs
@@ -42,6 +42,8 @@ namespace PKHeX
Daycare = 0x20E00;
PokeDex = 0x21600;
PokeDexLanguageFlags = PokeDex + 0x320;
+ CGearInfoOffset = 0x1C000;
+ CGearDataOffset = 0x52000;
// Inventory offsets are the same for each game.
OFS_PouchHeldItem = 0x18400; // 0x188D7
@@ -65,6 +67,8 @@ namespace PKHeX
Daycare = 0x20D00;
PokeDex = 0x21400;
PokeDexLanguageFlags = PokeDex + 0x328; // forme flags size is + 8 from bw with new formes (therians)
+ CGearInfoOffset = 0x1C000;
+ CGearDataOffset = 0x52800;
// Inventory offsets are the same for each game.
OFS_PouchHeldItem = 0x18400; // 0x188D7
@@ -152,7 +156,7 @@ namespace PKHeX
new BlockInfo(0x19600, 0x1338, 0x1A93A, 0x23F3A), // ???
new BlockInfo(0x1AA00, 0x07C4, 0x1B1C6, 0x23F3C), // ???
new BlockInfo(0x1B200, 0x0D54, 0x1BF56, 0x23F3E), // ???
- new BlockInfo(0x1C000, 0x002C, 0x1C02E, 0x23F40), // ???
+ new BlockInfo(0x1C000, 0x002C, 0x1C02E, 0x23F40), // Skin Info
new BlockInfo(0x1C100, 0x0658, 0x1C75A, 0x23F42), // ??? Gym badge data
new BlockInfo(0x1C800, 0x0A94, 0x1D296, 0x23F44), // ???
new BlockInfo(0x1D300, 0x01AC, 0x1D4AE, 0x23F46), // ???
@@ -229,7 +233,7 @@ namespace PKHeX
new BlockInfo(0x19600, 0x1338, 0x1A93A, 0x25F3A), // Unity Tower and survey stuff
new BlockInfo(0x1AA00, 0x07c4, 0x1B1C6, 0x25F3C), // Pal Pad Player Data (30d)
new BlockInfo(0x1B200, 0x0d54, 0x1BF56, 0x25F3E), // Pal Pad Friend Data
- new BlockInfo(0x1C000, 0x0094, 0x1C096, 0x25F40), // C-Gear
+ new BlockInfo(0x1C000, 0x0094, 0x1C096, 0x25F40), // Skin Info
new BlockInfo(0x1C100, 0x0658, 0x1C75A, 0x25F42), // Card Signature Block & ????
new BlockInfo(0x1C800, 0x0a94, 0x1D296, 0x25F44), // Mystery Gift
new BlockInfo(0x1D300, 0x01ac, 0x1D4AE, 0x25F46), // Dream World Stuff (Catalog)
@@ -353,6 +357,7 @@ namespace PKHeX
private const int wcSeed = 0x1D290;
+ public readonly int CGearInfoOffset, CGearDataOffset;
private readonly int Trainer2, AdventureInfo, PokeDexLanguageFlags;
public override bool HasBoxWallpapers => false;
public override bool HasPokeDex => false;
diff --git a/Saves/SaveFile.cs b/Saves/SaveFile.cs
index bd6c70f09..6775c7716 100644
--- a/Saves/SaveFile.cs
+++ b/Saves/SaveFile.cs
@@ -235,7 +235,7 @@ namespace PKHeX
ushort[] Constants = new ushort[EventConstMax];
for (int i = 0; i < Constants.Length; i++)
- Constants[i] = BitConverter.ToUInt16(Data, EventConst + i);
+ Constants[i] = BitConverter.ToUInt16(Data, EventConst + i * 2);
return Constants;
}
set
diff --git a/Saves/SaveUtil.cs b/Saves/SaveUtil.cs
index 0413eab07..0a2b8aad4 100644
--- a/Saves/SaveUtil.cs
+++ b/Saves/SaveUtil.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
@@ -138,7 +140,7 @@ namespace PKHeX
/// Version Identifier or Invalid if type cannot be determined.
public static GameVersion getIsG6SAV(byte[] data)
{
- if (!SizeValidSAV6(data.Length))
+ if (!new []{SIZE_G6XY, SIZE_G6ORAS, SIZE_G6ORASDEMO}.Contains(data.Length))
return GameVersion.Invalid;
if (BitConverter.ToUInt32(data, data.Length - 0x1F0) != BEEF)
@@ -176,21 +178,74 @@ namespace PKHeX
}
}
+ ///
+ /// Detects a save file.
+ ///
+ /// Full path of a save file. Returns null if unable to find any.
+ public static string detectSaveFile()
+ {
+ string path;
+ string path3DS = Path.GetPathRoot(Util.get3DSLocation());
+ List possiblePaths = new List();
+
+ // save_manager
+ if (path3DS != null && Directory.Exists(path = Path.Combine(path3DS, "saveDataBackup")))
+ possiblePaths.AddRange(getSavesFromFolder(path, false));
+
+ // SaveDataFiler
+ if (path3DS != null && Directory.Exists(path = Path.Combine(path3DS, "filer", "UserSaveData")))
+ possiblePaths.AddRange(getSavesFromFolder(path, true));
+
+ // JKSV
+ if (path3DS != null && Directory.Exists(path = Path.Combine(path3DS, "JKSV", "Saves")))
+ possiblePaths.AddRange(getSavesFromFolder(path, true));
+
+ // TWL Save Tool
+ if (path3DS != null && Directory.Exists(path = Path.Combine(path3DS, "TWLSaveTool")))
+ possiblePaths.AddRange(getSavesFromFolder(path, false));
+
+ // CyberGadget (Cache)
+ string pathCache = Util.GetCacheFolder();
+ if (Directory.Exists(pathCache))
+ possiblePaths.AddRange(getSavesFromFolder(Path.Combine(pathCache), false));
+
+ // return newest save file path that is valid (oh man)
+ return possiblePaths.OrderByDescending(f => new FileInfo(f).LastWriteTime).FirstOrDefault(p => getVariantSAV(File.ReadAllBytes(p)).ChecksumsValid);
+ }
+ ///
+ /// Retrieves the full path of the most recent file based on LastWriteTime.
+ ///
+ /// Folder to look within
+ /// Search all subfolders
+ /// Full path of all save files that match criteria.
+ public static IEnumerable getSavesFromFolder(string folderPath, bool deep)
+ {
+ if (!Directory.Exists(folderPath))
+ return null;
+ return Directory.GetFiles(folderPath, "*", deep ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)
+ .Where(f => SizeValidSAV((int)new FileInfo(f).Length));
+ }
+
///
/// Determines whether the save data size is valid for 6th generation saves.
///
/// Size in bytes of the save data
/// A boolean indicating whether or not the save data size is valid.
- public static bool SizeValidSAV6(int size)
+ public static bool SizeValidSAV(int size)
{
switch (size)
{
case SIZE_G6XY:
case SIZE_G6ORASDEMO:
case SIZE_G6ORAS:
+ case SIZE_G5B2W2:
+ case SIZE_G4RAW:
+ case SIZE_G3RAW:
+ case SIZE_G3RAWHALF:
return true;
+ default:
+ return false;
}
- return false;
}
// SAV Manipulation
diff --git a/Subforms/PKM Editors/BatchEditor.cs b/Subforms/PKM Editors/BatchEditor.cs
index c3a4ed7ea..67613c4d5 100644
--- a/Subforms/PKM Editors/BatchEditor.cs
+++ b/Subforms/PKM Editors/BatchEditor.cs
@@ -194,8 +194,11 @@ namespace PKHeX
err++;
if (r == ModifyResult.Modified)
{
- ctr++;
- File.WriteAllBytes(Path.Combine(destPath, Path.GetFileName(file)), pkm.DecryptedBoxData);
+ if (pkm.Species > 0)
+ {
+ ctr++;
+ File.WriteAllBytes(Path.Combine(destPath, Path.GetFileName(file)), pkm.DecryptedBoxData);
+ }
}
b.ReportProgress(i);
diff --git a/Subforms/SAV_Database.cs b/Subforms/SAV_Database.cs
index f9c0f5b2d..abcc6bef1 100644
--- a/Subforms/SAV_Database.cs
+++ b/Subforms/SAV_Database.cs
@@ -4,7 +4,6 @@ using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
-using System.Text;
using System.Windows.Forms;
namespace PKHeX
@@ -80,41 +79,33 @@ namespace PKHeX
foreach (PictureBox p in PKXBOXES)
p.ContextMenuStrip = mnu;
- // Load initial database
- Database.Add(new DatabaseList
- {
- Version = 0,
- Title = "Misc",
- Description = "Individual pkm files present in the db/sav.",
- });
-
- // Load databases
+ // Load Data
+ RawDB = new List();
foreach (string file in Directory.GetFiles(DatabasePath, "*", SearchOption.AllDirectories))
{
FileInfo fi = new FileInfo(file);
if (fi.Extension.Contains(".pk") && PKX.getIsPKM(fi.Length))
- Database[0].Slot.Add(PKMConverter.getPKMfromBytes(File.ReadAllBytes(file), file));
- else
- loadDatabase(File.ReadAllBytes(file));
+ RawDB.Add(PKMConverter.getPKMfromBytes(File.ReadAllBytes(file), file));
}
// Fetch from save file
foreach (var pkm in Main.SAV.BoxData.Where(pk => pk.Species != 0))
- Database[0].Slot.Add(pkm);
+ RawDB.Add(pkm);
// Prepare Database
- prepareDBForSearch();
+ RawDB = new List(RawDB.Where(pk => pk.ChecksumValid && pk.Species != 0 && pk.Sanity == 0));
+ RawDB = new List(RawDB.Distinct());
+ setResults(RawDB);
+
Menu_SearchSettings.DropDown.Closing += (sender, e) =>
{
if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
e.Cancel = true;
};
- B_Search.PerformClick();
CenterToParent();
}
private readonly Main m_parent;
private readonly PictureBox[] PKXBOXES;
private readonly string DatabasePath = Main.DatabasePath;
- private readonly List Database = new List();
private List Results;
private List RawDB;
private int slotSelected = -1; // = null;
@@ -323,80 +314,6 @@ namespace PKHeX
}
// IO Usage
- private class DatabaseList
- {
- public readonly List Slot = new List();
- public int Version;
- private readonly bool Unicode;
- private readonly byte[] Unused;
- public string Title;
- public string Description;
-
- public DatabaseList() { }
- public DatabaseList(byte[] data)
- {
- if ((data.Length < 0x100 + 0xE8) || (data.Length - 0x100)%0xE8 != 0)
- return;
-
- Version = BitConverter.ToInt32(data, 0);
- Unicode = data[0x5] == 1;
- Unused = data.Skip(4).Take(0xB).ToArray();
-
- if (Unicode)
- {
- Title = Encoding.Unicode.GetString(data, 0x10, 0x30).Trim();
- Description = Encoding.Unicode.GetString(data, 0x40, 0x60).Trim();
- }
- else
- {
- Title = Encoding.ASCII.GetString(data, 0x10, 0x30).Trim();
- Description = Encoding.ASCII.GetString(data, 0x40, 0x60).Trim();
- }
-
- int count = (data.Length - 0x100)/0xE8;
- for (int i = 0; i < count; i++)
- Slot.Add(new PK6(data.Skip(0x100 + i * 0xE8).Take(0xE8).ToArray()));
- }
- public byte[] Write()
- {
- using (MemoryStream ms = new MemoryStream())
- using (BinaryWriter bw = new BinaryWriter(ms))
- {
- bw.Write(Version);
- bw.Write(Unused);
-
- byte[] title = Unicode ? Encoding.Unicode.GetBytes(Title) : Encoding.ASCII.GetBytes(Title);
- Array.Resize(ref title, 0x30);
- bw.Write(title);
-
- byte[] desc = Unicode ? Encoding.Unicode.GetBytes(Description) : Encoding.ASCII.GetBytes(Description);
- Array.Resize(ref title, 0x60);
- bw.Write(desc);
-
- foreach (var pk6 in Slot)
- bw.Write(pk6.Data.Take(0xE8).ToArray());
-
- return ms.ToArray();
- }
- }
- }
- private void loadDatabase(byte[] data)
- {
- var db = new DatabaseList(data);
- if (db.Slot.Count > 0)
- Database.Add(db);
- }
- private void prepareDBForSearch()
- {
- RawDB = new List();
-
- foreach (var db in Database)
- RawDB.AddRange(db.Slot);
-
- RawDB = new List(RawDB.Where(pk => pk.ChecksumValid && pk.Species != 0 && pk.Sanity == 0));
- RawDB = new List(RawDB.Distinct());
- setResults(RawDB);
- }
private void openDB(object sender, EventArgs e)
{
if (Directory.Exists(DatabasePath))
@@ -419,8 +336,7 @@ namespace PKHeX
Directory.CreateDirectory(path);
foreach (PKM pkm in Results)
- File.WriteAllBytes(Path.Combine(path, Util.CleanFileName(pkm.FileName)),
- pkm.Data.Take(0xE8).ToArray());
+ File.WriteAllBytes(Path.Combine(path, Util.CleanFileName(pkm.FileName)), pkm.DecryptedBoxData);
}
// View Updates
@@ -644,32 +560,6 @@ namespace PKHeX
CB_GameOrigin.SelectedIndex = 0;
}
- // Debug
- private void testQuery()
- {
- var query = from db in Database
- select db.Slot.Where(p => p.Move1 == 1).ToArray();
-
- var result = query.ToArray();
- if (!result[0].Any())
- return;
-
- var any = result[0][0];
- m_parent.populateFields(any);
- }
- private void testUnique()
- {
- var query = from db in Database
- select db.Slot.GroupBy(p => p.Checksum + p.EncryptionConstant + p.Species) // Unique criteria
- .Select(grp => grp.First()).ToArray();
-
- var result = query.ToArray();
- if (!result[0].Any())
- return;
-
- var any = result[0][0];
- m_parent.populateFields(any);
- }
private void Menu_SearchAdvanced_Click(object sender, EventArgs e)
{
if (!Menu_SearchAdvanced.Checked)
diff --git a/Subforms/Save Editors/Gen5/CGearBackground.cs b/Subforms/Save Editors/Gen5/CGearBackground.cs
new file mode 100644
index 000000000..33f5a816d
--- /dev/null
+++ b/Subforms/Save Editors/Gen5/CGearBackground.cs
@@ -0,0 +1,359 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+
+namespace PKHeX
+{
+ public class CGearBackground
+ {
+ public const string Extension = "cgb";
+ public const string Filter = "C-Gear Background|*.cgb";
+ public const int Width = 256; // px
+ public const int Height = 192; // px
+ public const int SIZE_CGB = 0x2600;
+
+ /* CGearBackground Documentation
+ * CGearBackgrounds (.cgb) are tiled images.
+ * Tiles are 8x8, and serve as a tileset for building the image.
+ * The first 0x2000 bytes are the tile building region.
+ * A tile to have two pixels defined in one byte of space.
+ * A tile takes up 64 pixels, 32 bytes, 0x20 chunks.
+ * The last tile is actually the colors used in the image (16bit).
+ * Only 16 colors can be used for the entire image.
+ * 255 tiles may be chosen from, as (0x2000-(0x20))/0x20 = 0xFF
+ * The last 0x600 bytes are the tiles used.
+ * 256/8 = 32, 192/8 = 24
+ * 32 * 24 = 0x300
+ * The tiles are chosen based on the 16bit index of the tile.
+ * 0x300 * 2 = 0x600!
+ *
+ * CGearBackgrounds tilemap (when stored) employs odd obfuscation.
+ * BW obfuscates by adding 0xA0A0, B2W2 adds 0xA000
+ * The obfuscated number is then tweaked by adding 15*(i/17)
+ * To reverse, use a similar reverse calculation
+ * PSK files are basically raw game rips (obfuscated)
+ * CGB files are un-obfuscated.
+ * Due to BW and B2W2 using different obfuscation adds, PSK files are incompatible between the versions.
+ */
+
+ public CGearBackground(byte[] data)
+ {
+ if (data.Length != SIZE_CGB)
+ return;
+
+ byte[] Region1 = data.Take(0x1FE0).ToArray();
+ byte[] ColorData = data.Skip(0x1FE0).Take(0x20).ToArray();
+ byte[] Region2 = data.Skip(0x2000).Take(0x600).ToArray();
+
+ ColorPalette = new Color[0x10];
+ for (int i = 0; i < 0x10; i++)
+ ColorPalette[i] = getRGB555_16(BitConverter.ToUInt16(ColorData, i * 2));
+
+ Tiles = new Tile[0xFF];
+ for (int i = 0; i < 0xFF; i++)
+ {
+ Tiles[i] = new Tile(Region1.Skip(i * Tile.SIZE_TILE).Take(Tile.SIZE_TILE).ToArray());
+ Tiles[i].setTile(ColorPalette);
+ }
+
+ Map = new TileMap(Region2);
+ }
+
+ public byte[] Write()
+ {
+ byte[] data = new byte[SIZE_CGB];
+ for (int i = 0; i < Tiles.Length; i++)
+ Array.Copy(Tiles[i].Write(), 0, data, i*Tile.SIZE_TILE, Tile.SIZE_TILE);
+
+ for (int i = 0; i < ColorPalette.Length; i++)
+ BitConverter.GetBytes(getRGB555(ColorPalette[i])).CopyTo(data, 0x1FE0 + i*2);
+
+ Array.Copy(Map.Write(), 0, data, 0x2000, 0x600);
+
+ return data;
+ }
+
+ public static bool getIsCGB(byte[] data)
+ {
+ return data[0x2001] == 0;
+ }
+ public static byte[] CGBtoPSK(byte[] cgb, bool B2W2)
+ {
+ byte[] psk = (byte[])cgb.Clone();
+ int shiftVal = B2W2 ? 0xA000 : 0xA0A0;
+ for (int i = 0x2000; i < 0x2600; i += 2)
+ {
+ int index = BitConverter.ToUInt16(cgb, i);
+ int val = IndexToVal(index, shiftVal);
+ BitConverter.GetBytes((ushort)val).CopyTo(psk, i);
+ }
+ return psk;
+ }
+ public static byte[] PSKtoCGB(byte[] psk, bool B2W2)
+ {
+ byte[] cgb = (byte[])psk.Clone();
+ int shiftVal = B2W2 ? 0xA000 : 0xA0A0;
+ for (int i = 0x2000; i < 0x2600; i += 2)
+ {
+ int val = BitConverter.ToUInt16(psk, i);
+ int index = ValToIndex(val, shiftVal);
+ BitConverter.GetBytes((ushort)index).CopyTo(cgb, i);
+ }
+ return cgb;
+ }
+
+ private Color[] ColorPalette;
+ private Tile[] Tiles;
+ private TileMap Map;
+
+ public Bitmap GetImage()
+ {
+ Bitmap img = new Bitmap(Width, Height, PixelFormat.Format32bppArgb);
+
+ // Fill Data
+ using (Graphics g = Graphics.FromImage(img))
+ for (int i = 0; i < Map.TileChoices.Length; i++)
+ {
+ int x = (i*8)%Width;
+ int y = 8*((i*8)/Width);
+
+ Bitmap b = Tiles[Map.TileChoices[i] % Tiles.Length].Rotate(Map.Rotations[i]);
+ g.DrawImage(b, new Point(x, y));
+ }
+ return img;
+ }
+ public void SetImage(Bitmap img)
+ {
+ if (img.Width != Width)
+ throw new ArgumentException($"Invalid image width. Expected {Width} pixels wide.");
+ if (img.Height != Height)
+ throw new ArgumentException($"Invalid image height. Expected {Height} pixels high.");
+
+ // get raw bytes of image
+ BitmapData bData = img.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
+ byte[] data = new byte[bData.Stride * bData.Height];
+ Marshal.Copy(bData.Scan0, data, 0, data.Length);
+
+ int bpp = bData.Stride/Width;
+ img.UnlockBits(bData);
+ // get colors
+ Color[] colors = new Color[Width*Height];
+ for (int i = 0; i < data.Length; i += bpp)
+ {
+ uint val = BitConverter.ToUInt32(data, i);
+ colors[i/bpp] = getRGB555_32(val);
+ }
+
+ Color[] Palette = colors.Distinct().ToArray();
+ if (Palette.Length > 0x10)
+ throw new ArgumentException($"Too many unique colors. Expected <= 16, got {Palette.Length}");
+
+ // Build Tiles
+ Tile[] tiles = new Tile[0x300];
+ for (int i = 0; i < tiles.Length; i++)
+ {
+ int x = (i*8)%Width;
+ int y = 8*((i*8)/Width);
+
+ Tile t = new Tile();
+ for (uint ix = 0; ix < 8; ix++)
+ for (uint iy = 0; iy < 8; iy++)
+ {
+ int index = (int)(y + iy)*Width + (int)(x + ix);
+ Color c = colors[index];
+
+ t.ColorChoices[ix%8 + iy*8] = Array.IndexOf(Palette, c);
+ }
+ t.setTile(Palette);
+ tiles[i] = t;
+ }
+
+ List tilelist = new List {tiles[0]};
+ TileMap tm = new TileMap(new byte[2*Width*Height/64]);
+ for (int i = 1; i < tm.TileChoices.Length; i++)
+ {
+ for (int j = 0; j < tilelist.Count; j++)
+ {
+ int rotVal = tiles[i].getRotationValue(tilelist[j].ColorChoices);
+ if (rotVal <= -1) continue;
+ tm.TileChoices[i] = j;
+ tm.Rotations[i] = rotVal;
+ goto next;
+ }
+ if (tilelist.Count == 0xFF)
+ throw new ArgumentException($"Too many unique tiles. Expected < 256, ran out of tiles at {i + 1} of {tm.TileChoices.Length}");
+ tilelist.Add(tiles[i]);
+ tm.TileChoices[i] = tilelist.Count - 1;
+
+ next:;
+ }
+
+ // Finished!
+ Map = tm;
+ ColorPalette = Palette;
+ Tiles = tilelist.ToArray();
+ }
+
+ private class Tile
+ {
+ public const int SIZE_TILE = 0x20;
+ private const int TileWidth = 8;
+ private const int TileHeight = 8;
+ public readonly int[] ColorChoices;
+ private Bitmap img;
+
+ public Tile(byte[] data = null)
+ {
+ if (data == null)
+ data = new byte[SIZE_TILE];
+ if (data.Length != SIZE_TILE)
+ return;
+
+ ColorChoices = new int[TileWidth*TileHeight];
+ for (int i = 0; i < data.Length; i++)
+ {
+ ColorChoices[i*2+0] = data[i] & 0xF;
+ ColorChoices[i*2+1] = data[i] >> 4;
+ }
+ }
+ public void setTile(Color[] Palette)
+ {
+ img = new Bitmap(8, 8);
+ for (int x = 0; x < 8; x++)
+ for (int y = 0; y < 8; y++)
+ {
+ var index = ColorChoices[x%8 + y*8];
+ var choice = Palette[index];
+ img.SetPixel(x, y, choice);
+ }
+ }
+ public byte[] Write()
+ {
+ byte[] data = new byte[SIZE_TILE];
+ for (int i = 0; i < data.Length; i++)
+ {
+ data[i] |= (byte)(ColorChoices[i*2+0] & 0xF);
+ data[i] |= (byte)((ColorChoices[i*2+1] & 0xF) << 4);
+ }
+ return data;
+ }
+
+ public Bitmap Rotate(int rotFlip)
+ {
+ if (rotFlip == 0)
+ return img;
+ Bitmap tile = (Bitmap)img.Clone();
+ if ((rotFlip & 4) > 0)
+ tile.RotateFlip(RotateFlipType.RotateNoneFlipX);
+ if ((rotFlip & 8) > 0)
+ tile.RotateFlip(RotateFlipType.RotateNoneFlipY);
+ return tile;
+ }
+
+ public int getRotationValue(int[] tileColors)
+ {
+ // Check all rotation types
+ if (ColorChoices.SequenceEqual(tileColors))
+ return 0;
+
+ // flip x
+ for (int i = 0; i < 64; i++)
+ if (ColorChoices[(7 - (i & 7)) + 8 * (i / 8)] != tileColors[i])
+ goto check8;
+ return 4;
+
+ // flip y
+ check8:
+ for (int i = 0; i < 64; i++)
+ if (ColorChoices[64 - 8 * (1 + (i / 8)) + (i & 7)] != tileColors[i])
+ goto check12;
+ return 8;
+
+ // flip xy
+ check12:
+ for (int i = 0; i < 64; i++)
+ if (ColorChoices[63 - i] != tileColors[i])
+ return -1;
+ return 12;
+ }
+ }
+ private class TileMap
+ {
+ public readonly int[] TileChoices;
+ public readonly int[] Rotations;
+
+ public TileMap(byte[] data)
+ {
+ TileChoices = new int[data.Length/2];
+ Rotations = new int[data.Length/2];
+ for (int i = 0; i < data.Length; i += 2)
+ {
+ TileChoices[i/2] = data[i];
+ Rotations[i/2] = data[i+1];
+ }
+ }
+ public byte[] Write()
+ {
+ using (MemoryStream ms = new MemoryStream())
+ using (BinaryWriter bw = new BinaryWriter(ms))
+ {
+ for (int i = 0; i < TileChoices.Length; i++)
+ {
+ bw.Write((byte)TileChoices[i]);
+ bw.Write((byte)Rotations[i]);
+ }
+ return ms.ToArray();
+ }
+ }
+ }
+
+ private static int IndexToVal(int index, int shiftVal)
+ {
+ int val = index + shiftVal;
+ return val + 15*(index/17);
+ }
+ private static int ValToIndex(int val, int shiftVal)
+ {
+ int index = val - shiftVal;
+ return index - 15*(index/32);
+ }
+
+ private static byte convert8to5(int colorval)
+ {
+ byte i = 0;
+ while (colorval > Convert5To8[i]) i++;
+ return i;
+ }
+ private static Color getRGB555_32(uint val)
+ {
+ int R = (int)(val >> 0 >> 3) & 0x1F;
+ int G = (int)(val >> 8 >> 3) & 0x1F;
+ int B = (int)(val >> 16 >> 3) & 0x1F;
+ return Color.FromArgb(0xFF, Convert5To8[R], Convert5To8[G], Convert5To8[B]);
+ }
+ private static Color getRGB555_16(ushort val)
+ {
+ int R = (val >> 0) & 0x1F;
+ int G = (val >> 5) & 0x1F;
+ int B = (val >> 10) & 0x1F;
+ return Color.FromArgb(0xFF, Convert5To8[R], Convert5To8[G], Convert5To8[B]);
+ }
+ private static ushort getRGB555(Color c)
+ {
+ int val = 0;
+ // val += c.A >> 8; // unused
+ val |= convert8to5(c.R) << 0;
+ val |= convert8to5(c.G) << 5;
+ val |= convert8to5(c.B) << 10;
+ return (ushort)val;
+ }
+ private static readonly int[] Convert5To8 = { 0x00,0x08,0x10,0x18,0x20,0x29,0x31,0x39,
+ 0x41,0x4A,0x52,0x5A,0x62,0x6A,0x73,0x7B,
+ 0x83,0x8B,0x94,0x9C,0xA4,0xAC,0xB4,0xBD,
+ 0xC5,0xCD,0xD5,0xDE,0xE6,0xEE,0xF6,0xFF };
+ }
+}
diff --git a/Subforms/Save Editors/Gen5/SAV_CGearSkin.Designer.cs b/Subforms/Save Editors/Gen5/SAV_CGearSkin.Designer.cs
new file mode 100644
index 000000000..9707291cf
--- /dev/null
+++ b/Subforms/Save Editors/Gen5/SAV_CGearSkin.Designer.cs
@@ -0,0 +1,156 @@
+namespace PKHeX
+{
+ partial class SAV_CGearSkin
+ {
+ ///
+ /// 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SAV_CGearSkin));
+ this.PB_Background = new System.Windows.Forms.PictureBox();
+ this.B_Cancel = new System.Windows.Forms.Button();
+ this.B_Save = new System.Windows.Forms.Button();
+ this.B_ImportPNG = new System.Windows.Forms.Button();
+ this.B_ExportPNG = new System.Windows.Forms.Button();
+ this.B_ExportCGB = new System.Windows.Forms.Button();
+ this.B_ImportCGB = new System.Windows.Forms.Button();
+ ((System.ComponentModel.ISupportInitialize)(this.PB_Background)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PB_Background
+ //
+ this.PB_Background.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.PB_Background.Location = new System.Drawing.Point(12, 12);
+ this.PB_Background.Name = "PB_Background";
+ this.PB_Background.Size = new System.Drawing.Size(258, 194);
+ this.PB_Background.TabIndex = 0;
+ this.PB_Background.TabStop = false;
+ //
+ // B_Cancel
+ //
+ this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Cancel.Location = new System.Drawing.Point(276, 183);
+ this.B_Cancel.Name = "B_Cancel";
+ this.B_Cancel.Size = new System.Drawing.Size(103, 23);
+ this.B_Cancel.TabIndex = 1;
+ this.B_Cancel.Text = "Cancel";
+ this.B_Cancel.UseVisualStyleBackColor = true;
+ this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ //
+ // B_Save
+ //
+ this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Save.Location = new System.Drawing.Point(276, 154);
+ this.B_Save.Name = "B_Save";
+ this.B_Save.Size = new System.Drawing.Size(103, 23);
+ this.B_Save.TabIndex = 2;
+ this.B_Save.Text = "Save";
+ this.B_Save.UseVisualStyleBackColor = true;
+ this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ //
+ // B_ImportPNG
+ //
+ this.B_ImportPNG.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_ImportPNG.Location = new System.Drawing.Point(276, 12);
+ this.B_ImportPNG.Name = "B_ImportPNG";
+ this.B_ImportPNG.Size = new System.Drawing.Size(103, 23);
+ this.B_ImportPNG.TabIndex = 3;
+ this.B_ImportPNG.Text = "Import .png";
+ this.B_ImportPNG.UseVisualStyleBackColor = true;
+ this.B_ImportPNG.Click += new System.EventHandler(this.B_ImportPNG_Click);
+ //
+ // B_ExportPNG
+ //
+ this.B_ExportPNG.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_ExportPNG.Location = new System.Drawing.Point(276, 41);
+ this.B_ExportPNG.Name = "B_ExportPNG";
+ this.B_ExportPNG.Size = new System.Drawing.Size(103, 23);
+ this.B_ExportPNG.TabIndex = 4;
+ this.B_ExportPNG.Text = "Export .png";
+ this.B_ExportPNG.UseVisualStyleBackColor = true;
+ this.B_ExportPNG.Click += new System.EventHandler(this.B_ExportPNG_Click);
+ //
+ // B_ExportCGB
+ //
+ this.B_ExportCGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_ExportCGB.Location = new System.Drawing.Point(276, 112);
+ this.B_ExportCGB.Name = "B_ExportCGB";
+ this.B_ExportCGB.Size = new System.Drawing.Size(103, 23);
+ this.B_ExportCGB.TabIndex = 6;
+ this.B_ExportCGB.Text = "Export .cgb";
+ this.B_ExportCGB.UseVisualStyleBackColor = true;
+ this.B_ExportCGB.Click += new System.EventHandler(this.B_ExportCGB_Click);
+ //
+ // B_ImportCGB
+ //
+ this.B_ImportCGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_ImportCGB.Location = new System.Drawing.Point(276, 83);
+ this.B_ImportCGB.Name = "B_ImportCGB";
+ this.B_ImportCGB.Size = new System.Drawing.Size(103, 23);
+ this.B_ImportCGB.TabIndex = 5;
+ this.B_ImportCGB.Text = "Import .cgb/.psk";
+ this.B_ImportCGB.UseVisualStyleBackColor = true;
+ this.B_ImportCGB.Click += new System.EventHandler(this.B_ImportCGB_Click);
+ //
+ // SAV_CGearSkin
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(391, 216);
+ this.Controls.Add(this.B_ExportCGB);
+ this.Controls.Add(this.B_ImportCGB);
+ this.Controls.Add(this.B_ExportPNG);
+ this.Controls.Add(this.B_ImportPNG);
+ this.Controls.Add(this.B_Save);
+ this.Controls.Add(this.B_Cancel);
+ this.Controls.Add(this.PB_Background);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "SAV_CGearSkin";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "C-Gear Skin";
+ ((System.ComponentModel.ISupportInitialize)(this.PB_Background)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox PB_Background;
+ private System.Windows.Forms.Button B_Cancel;
+ private System.Windows.Forms.Button B_Save;
+ private System.Windows.Forms.Button B_ImportPNG;
+ private System.Windows.Forms.Button B_ExportPNG;
+ private System.Windows.Forms.Button B_ExportCGB;
+ private System.Windows.Forms.Button B_ImportCGB;
+ }
+}
\ No newline at end of file
diff --git a/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs b/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs
new file mode 100644
index 000000000..3d0b6ea42
--- /dev/null
+++ b/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs
@@ -0,0 +1,134 @@
+using System;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace PKHeX
+{
+ public partial class SAV_CGearSkin : Form
+ {
+ public SAV_CGearSkin()
+ {
+ InitializeComponent();
+
+ SAV = (SAV5)Main.SAV.Clone();
+
+ bool cgearPresent = SAV.Data[SAV.CGearInfoOffset + 0x26] == 1;
+ bg = new CGearBackground(cgearPresent ?
+ CGearBackground.PSKtoCGB(SAV.Data.Skip(SAV.CGearDataOffset).Take(CGearBackground.SIZE_CGB).ToArray(), SAV.B2W2)
+ : new byte[CGearBackground.SIZE_CGB]);
+
+ PB_Background.Image = bg.GetImage();
+ }
+
+ private readonly SAV5 SAV;
+ private CGearBackground bg;
+
+ private void B_ImportPNG_Click(object sender, EventArgs e)
+ {
+ OpenFileDialog ofd = new OpenFileDialog
+ {
+ Filter = "PNG File|*.png",
+ FileName = "Background.png",
+ };
+
+ if (ofd.ShowDialog() != DialogResult.OK)
+ return;
+
+ Bitmap img = (Bitmap)Image.FromFile(ofd.FileName);
+
+ try
+ {
+ bg.SetImage(img);
+ PB_Background.Image = bg.GetImage();
+ }
+ catch (Exception ex)
+ {
+ Util.Error(ex.Message);
+ }
+ }
+ private void B_ExportPNG_Click(object sender, EventArgs e)
+ {
+ Image png = PB_Background.Image;
+ SaveFileDialog sfd = new SaveFileDialog
+ {
+ Filter = "PNG File|*.png",
+ FileName = "Background.png",
+ };
+
+ if (sfd.ShowDialog() != DialogResult.OK)
+ return;
+
+ png.Save(sfd.FileName, ImageFormat.Png);
+ }
+ private void B_ImportCGB_Click(object sender, EventArgs e)
+ {
+ OpenFileDialog ofd = new OpenFileDialog
+ {
+ Filter = CGearBackground.Filter + "|PokeStock C-Gear Skin|*.psk"
+ };
+
+ if (ofd.ShowDialog() != DialogResult.OK)
+ return;
+
+ var len = new FileInfo(ofd.FileName).Length;
+ if (len != CGearBackground.SIZE_CGB)
+ {
+ Util.Error($"Incorrect size, got {len} bytes, expected {CGearBackground.SIZE_CGB} bytes.");
+ return;
+ }
+
+ byte[] data = File.ReadAllBytes(ofd.FileName);
+ if (!CGearBackground.getIsCGB(data))
+ {
+ bool B2W2 = data[0x2000] != 0x00;
+ data = CGearBackground.PSKtoCGB(data, B2W2);
+ }
+
+ bg = new CGearBackground(data);
+ PB_Background.Image = bg.GetImage();
+ }
+ private void B_ExportCGB_Click(object sender, EventArgs e)
+ {
+ SaveFileDialog sfd = new SaveFileDialog
+ {
+ Filter = CGearBackground.Filter,
+ };
+
+ if (sfd.ShowDialog() != DialogResult.OK)
+ return;
+
+ byte[] data = bg.Write();
+ File.WriteAllBytes(sfd.FileName, data);
+ }
+ private void B_Save_Click(object sender, EventArgs e)
+ {
+ byte[] bgdata = bg.Write();
+ if (bgdata.SequenceEqual(new byte[CGearBackground.SIZE_CGB]))
+ return;
+
+ bgdata = CGearBackground.CGBtoPSK(bgdata, SAV.B2W2);
+
+ Array.Copy(bgdata, 0, Main.SAV.Data, SAV.CGearDataOffset, bgdata.Length);
+ ushort chk = SaveUtil.ccitt16(bgdata);
+ BitConverter.GetBytes(chk).CopyTo(Main.SAV.Data, SAV.CGearDataOffset + bgdata.Length + 2);
+ BitConverter.GetBytes(chk).CopyTo(Main.SAV.Data, SAV.CGearDataOffset + bgdata.Length + 0x100);
+
+ byte[] skinchkdata = Main.SAV.Data.Skip(SAV.CGearDataOffset + bgdata.Length + 0x100).Take(4).ToArray();
+ ushort skinchkval = SaveUtil.ccitt16(skinchkdata);
+ BitConverter.GetBytes(skinchkval).CopyTo(Main.SAV.Data, SAV.CGearDataOffset + bgdata.Length + 0x112);
+
+ Main.SAV.Data[SAV.CGearInfoOffset + 0x26] = 1; // data present
+ BitConverter.GetBytes(chk).CopyTo(Main.SAV.Data, SAV.CGearInfoOffset + 0x24);
+
+ Main.SAV.Edited = true;
+ Close();
+ }
+ private void B_Cancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+ }
+}
diff --git a/Subforms/Save Editors/Gen5/SAV_CGearSkin.resx b/Subforms/Save Editors/Gen5/SAV_CGearSkin.resx
new file mode 100644
index 000000000..603f660be
--- /dev/null
+++ b/Subforms/Save Editors/Gen5/SAV_CGearSkin.resx
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAE
+ AAAAAAAAAAAAAAAAAAAAAAAAIyMjAQAAAAALCwsPJiYmJysrKycqKionKSkpJykpKScpKSknKioqJyoq
+ KicrKysnJycnJw0ODQ8AAAAAJiYmAQAAAABpaWlHq6ur17+/v+6+vr7svr6+7b6+vu2+vr7tvr6+7b6+
+ vu2+vr7tvr6+7L+/v+6rq6vXampqSAAAAAAoKSgXvr++3eLi4v/g4OD94eHh/+Hh4f/i4uL/4uLi/+Li
+ 4v/i4uL/4eHh/+Dh4P/g4OD94uLi/7+/v90sLCwXfn5+PNna2frg4OD/39/f/uHh4f7h4eH+39/f/uDg
+ 4P7g4OD+39/f/uHh4f7h4OH+39/f/t/g3//a2tr6g4ODPoOCgz7X19f64+Pj/+Li4v7k5OT/4+Tj//Ly
+ 8v/19fX/9PT0//T09P/k5OT/5OTk/+Pj4/7j4+P/19jX+4qLikCDhIM+2tra++Xl5f/k5eT+5OTk//Lz
+ 8v+urq7/RUVF/z4+Pv+Zmpn/8fHx/+Xm5f/k5eT+5eXl/9ra2vyLi4tAhYWFPuXm5vvx8vP/7+/w/v//
+ //+sra3/AgIC/15eXv9tbG3/BQUF/4yMjP//////7+/w/vHy8//l5ub8jY2NQC4uLD5LS0f7UFBL/09P
+ Sv5YWVP/FBUS/29wcP///////////5SUlP8PDw//U1NO/1BQS/5PT0r/S0tH/DIyMEAAAAs+AAAM+wAA
+ Dv8AAA/+AwMS/wAAAP+UlJX///////////+3t7n/AAAA/wAAD/8BAQ/+AAAO/wAADPwCAg5ABARSPgoK
+ k/sNDab/DQ2o/hAQvP8CAmj/IiIW/7Kzrv/Cw8D/NDQm/wAATf8QELz/DQ2q/gwMp/8LC5T8Dg5bQAUF
+ Xj4KCpz7DQ2u/w0NsP4NDbX/Dw+//wUFYf8CAhL/AwMP/wMDTf8ODrj/Dg64/w0NsP4MDK7/Cwud/A8P
+ aEEGBmU9DAyl+w4Otf8ODrf+Dw+6/xAQvv8TE8v/EhK+/xAQvP8TE8v/EBDA/w8Puf8PD7f+Dg61/w0N
+ pvsREW9ACAhtQA8PsfsTE77/ExO//xQUwP8UFML/FBTD/xUVyP8WFsn/FRXE/xQUw/8UFMH/ExO//xMT
+ vv8QELL7ERF3QxkZdCgXF771ExPH/xUVyPwVFcn9FhbL/RcXzP0XF8z9FxfM/RcXy/0XF8v9FhbJ/RUV
+ yPwTE8f/Fxe+9RkZdykAAAAAIyOtghsbx/8ZGcj+GRnJ/xoayf8aGsn/GhrK/xoayv8aGsn/GhrJ/xkZ
+ yf8ZGcj+GxvH/yMjrYQAAAAAAADHAQAAAAAzM51FLCyscCoqrGwqKqxtKSmsbSoqrG0qKqxtKSmsbSoq
+ rG0qKqxsLCyscDMznUUAAAAAAAAAAP//AADAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
+ AACAAQAAgAEAAIABAACAAQAAgAEAAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCR0dHSMWFhY3GBgYORgYGDkYGBg5GBgYORgY
+ GDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5FxcXNx4e
+ HiQuLi4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEhIARYWFis7OzuVkJCQ2ampqeqqqqrsqqqq7Kqq
+ quyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqq
+ quypqanqkZGR2j09PZcXFxcsUFBQAQAAAAAAAAAAAAAAAAAAAAASEhIuhISEytvb2/7W1tb/19fX/9jY
+ 2P/Y2Nj/2NjY/9jY2P/Y2Nj/2NjY/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Y2Nj/2NjY/9jY
+ 2P/Y2Nj/2NjY/9fX1//W1tb/29vb/oeHh8sTExMvAAAAAAAAAAAAAAAAPDw8DGtra6zZ2dn/2dnZ/9ra
+ 2v/b29v/29vb/9vb2//c3Nz/3Nzc/9zc3P/c3Nz/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3Nzc/9zc
+ 3P/c3Nz/3Nzc/9vb2//b29v/29vb/9ra2v/Z2dn/2dnZ/21tba5DQ0MNAAAAAAAAAAAiIiIx1NXU9tna
+ 2f/c3Nz/3d3d/93e3f/e3t7/3t7e/9/f3//f39//39/f/9/g3//g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg
+ 4P/g4OD/39/f/9/f3//f39//3t/e/97e3v/d3t3/3d3d/9zc3P/Z2tn/1dXV9icnJzMAAAAAAAAAAFhZ
+ WFzf4N//3Nzc/97e3v/f39//39/f/9/g3//g4OD/4ODg/+Hh4f/h4eH/4eHh/+Li4v/i4uL/4uLi/+Li
+ 4v/i4uL/4uLi/+Hi4f/h4eH/4eHh/+Dg4P/g4OD/3+Df/9/f3//f39//3t7e/9zc3P/f39//XV1dXQAA
+ AAAAAAAAZmZmZdvc2//e3t7/3+Df/+Dg4P/g4eD/4eHh/+Hi4f/i4uL/4uPi/+Pj4//j4+P/5OTk/+Tk
+ 5P/k5OT/5OTk/+Tk5P/k5OT/4+Pj/+Pj4//j4+P/4uLi/+Li4v/h4eH/4eHh/+Dg4P/f4N//3t7e/9vb
+ 2/9wcHBoAAAAAAAAAABoaGhl3d3d/9/f3//h4eH/4eLh/+Li4v/j4+P/4+Pj/+Tk5P/k5OT/5eXl/+Xl
+ 5f/l5uX/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Pj4//i4uL/4uLi/+Hh
+ 4f/f39//3N3c/3Nzc2kAAAAAAAAAAGhoaGXe3t7/4ODg/+Li4v/j4+P/4+Pj/+Tk5P/l5eX/5eXl/+bm
+ 5v/m5+b/5+fn/+fn5//n6Of/6Ojo/+jo6P/o6Oj/5+fn/+fn5//n5+f/5ubm/+Xl5f/l5eX/5OTk/+Pk
+ 4//j4+P/4uLi/+Dg4P/e3t7/c3NzaQAAAAAAAAAAaGhoZd/g3//i4uL/5OTk/+Tl5P/l5eX/5ebl/+bn
+ 5v/n5+f/5+jn/+jp6P/p6en/7Ozs/8LCwv+Tk5P/ioqK/66urv/o6ej/6enp/+jp6P/o6Oj/5+jn/+bn
+ 5v/m5ub/5ebl/+Tl5P/k5OT/4uLi/9/g3/9zdHNpAAAAAAAAAABoaWhl4eLh/+Pk4//m5ub/5ubm/+fn
+ 5//n6Of/6Ojo/+np6f/p6un/6urq/8bGxv8yMjL/AAAA/wAAAP8AAAD/AAAA/xMTE/+ZmZn/7Ozs/+rq
+ 6v/p6en/6Ojo/+jo6P/n5+f/5ubm/+bm5v/k5OT/4eHh/3R0dGkAAAAAAAAAAGhpaGXj4+P/5eXl/+fn
+ 5//n6Of/6Ojo/+np6f/q6ur/6urq/+vr6//Dw8P/DAwM/wAAAP8AAAD/Gxsb/ygoKP8BAQH/AAAA/wAA
+ AP+FhYX/7O3s/+rr6v/q6ur/6enp/+jo6P/o6Oj/5+fn/+Xl5f/i4+L/dHR0aQAAAAAAAAAAYWFhZeTl
+ 5P/m5+b/6Ono/+np6f/p6un/6uvq/+vr6//s7Oz/7e7t/ycnJ/8AAAD/Ghoa/7S0tP/m5ub/5OTk/9HR
+ 0f9GRkb/AAAA/wICAv/IyMj/7Ozs/+vs6//q6+r/6urq/+nq6f/o6ej/5+fn/+Tk5P9sbGxpAAAAAAAA
+ AAA9Pj1lj4+P/5OTk/+VlZX/lpaW/5eXl/+YmJj/mZmZ/5qamv92dnb/AAAA/wEBAf+/wL//3Nzc/+Tk
+ 5P/l5eX/3d3d/+Li4v8mJib/AAAA/0ZGRv+ampr/mZmZ/5iYmP+Xl5f/lpaW/5WVlf+Tk5P/j4+P/0ZG
+ RmoAAAAAAAAAAAwMDGUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+fn
+ 5//q6ur/7O3s/+zt7P/v7+//39/f/4WFhf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/EBAQagAAAAAAAAAAAwMHZQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP9NTU3/5ufm//Lz8v/z9PP/8/Tz//X19f/l5eX/nZ2d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8GBgpqAAAAAAAAAAAAABZlAQEk/wEBJ/8CAin/AgIq/wICKv8CAiv/AgIs/wIC
+ LP8BAR3/AAAA/xwcHP/w8PD/6+zr//r6+v/6+vr/9PT0/+vr6/9lZWX/AAAA/wAAD/8CAi3/AgIs/wIC
+ K/8CAir/AgIq/wICKf8BASf/AQEl/wUFG2oAAAAAAAAAAAICQGUGBpL/Bwec/wgIo/8JCaf/CQmq/wkJ
+ rf8JCa//Cgqz/wkJqP8AAAL/AAAA/4CAgP/y8/L/6+zr/+3t7f/u7u7/xMTE/wcHB/8AAAD/BgZz/woK
+ s/8JCbD/CQmt/wkJqv8JCaj/CAik/wcHnf8HB5P/Dg5MagAAAAAAAAAAAwNHZQgIk/8JCZ3/Cgqj/wsL
+ p/8LC6n/Cwus/wsLr/8MDLL/DAy2/wYGW/8AAAD/AAAA/1JSUv+sraz/tra2/3h4eP8KCgr/AAAA/wIC
+ Iv8MDLb/DAyy/wsLsP8LC63/Cwuq/wsLp/8KCqT/CQmd/wgIk/8PD1VrAAAAAAAAAAAEBE1lCQmY/woK
+ ov8LC6j/DAyr/wwMrf8MDLD/DAyy/w0Ntf8NDbf/Dg67/wUFSv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8CAiH/DQ2q/w0NuP8NDbX/DQ2z/wwMsP8MDK7/DAyr/wsLqP8KCqL/CQmZ/xAQWmsAAAAAAAAAAAQE
+ UGUKCp7/Cwum/wwMrP8NDa//DQ2w/w0Ns/8ODrX/Dg63/w4Ouf8ODrv/Dw/A/wwMiv8FBTj/AAAG/wAA
+ AP8DAyb/CQls/w8Pu/8PD7z/Dg66/w4OuP8ODrX/DQ2z/w0Nsf8NDa//DAys/wsLp/8KCp7/ERFeawAA
+ AAAAAAAABQVTZQsLpP8MDKv/DQ2w/w4Os/8ODrT/Dg62/w8PuP8PD7r/Dw+8/w8Pvf8QEL//EBDA/xER
+ w/8SEsn/ERHJ/xERxf8QEMD/EBC//w8Pvv8PD7z/Dw+6/w8PuP8ODrf/Dg61/w4Os/8NDbH/DAyr/wsL
+ pP8SEmFrAAAAAAAAAAAGBlZlDAyq/w4OsP8PD7X/Dw+3/w8PuP8QELr/EBC7/xAQvf8REb7/ERHA/xER
+ wf8REcL/EhLC/xISw/8SEsP/EhLC/xERwv8REcH/ERHA/xERvv8QEL3/EBC7/xAQuv8QELj/Dw+3/w8P
+ tf8ODrD/DAyq/xMTZWsAAAAAAAAAAAcHWmUODrD/EBC2/xERuv8REbz/ERG9/xISvv8SEr//EhLA/xMT
+ wf8TE8P/ExPD/xMTxP8TE8X/FBTF/xQUxf8UFMX/ExPE/xMTxP8TE8P/ExPC/xISwf8SEr//EhK+/xER
+ vf8REbz/ERG6/xAQtv8ODrD/FBRpawAAAAAAAAAACAhcYxAQtf8SErv/ExO+/xQUwP8UFMD/FBTB/xUV
+ wv8VFcP/FRXE/xUVxf8WFsb/FhbG/xYWx/8WFsf/FhbH/xYWx/8WFsf/FhbG/xYWxf8VFcT/FRXD/xUV
+ wv8UFMH/FBTB/xQUwP8TE77/EhK7/xAQtf8TE2hoAAAAAAAAAAAQEFNUFRXC/xMTv/8UFMP/FRXE/xUV
+ xP8VFcX/FRXG/xYWx/8WFsf/FhbI/xYWyf8XF8n/FxfK/xcXyv8XF8r/FxfK/xcXyf8XF8n/FhbI/xYW
+ yP8WFsf/FhbG/xUVxf8VFcT/FRXE/xQUw/8TE7//FRXB/xAQV1UAAAAAAAAAAA0NPxkjI8byFBTD/xUV
+ x/8WFsj/FxfJ/xcXyf8XF8r/FxfK/xcXy/8YGMz/GBjM/xgYzP8YGM3/GBjN/xgYzf8YGM3/GBjM/xgY
+ zP8YGMz/GBjL/xcXy/8XF8r/FxfJ/xcXyf8WFsj/FRXH/xQUw/8jI8f0Dg5GGwAAAAAAAAAAFhZxAiUl
+ eIUZGcr/FBTI/xUVyv8WFsv/FhbM/xYWzP8WFsz/FhbN/xcXzf8XF83/FxfN/xcXzv8XF87/FxfO/xcX
+ zv8XF87/FxfN/xcXzf8WFs3/FhbM/xYWzP8WFsz/FhbL/xUVyv8UFMj/GBjJ/yYmeogWFnYCAAAAAAAA
+ AAAAAAAAGBh1BzMzk50kJNP+FxfK/xgYzP8YGMz/GBjN/xgYzf8YGM3/GBjN/xgYzf8ZGc7/GRnO/xkZ
+ zv8ZGc7/GRnO/xkZzv8YGM3/GBjN/xgYzf8YGM3/GBjN/xgYzP8YGMz/FxfK/yMj0v4zM5WfFBRkBwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAHBx7Ay0tdkg3N5emMTGpxSwsp8gsLKfILCynyCwsp8gsLKfILCynyCws
+ p8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyDExqcU2NpenLi54Shsb
+ ewMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////8AAAD+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AA
+ AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
+ AAPAAAADwAAAA8AAAAPAAAAD4AAAB/gAAB//////
+
+
+
\ No newline at end of file
diff --git a/Subforms/Save Editors/Gen6/SAV_Trainer.Designer.cs b/Subforms/Save Editors/Gen6/SAV_Trainer.Designer.cs
index 736bf6990..401b769f7 100644
--- a/Subforms/Save Editors/Gen6/SAV_Trainer.Designer.cs
+++ b/Subforms/Save Editors/Gen6/SAV_Trainer.Designer.cs
@@ -1669,7 +1669,6 @@ namespace PKHeX
// CB_Vivillon
//
this.CB_Vivillon.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.CB_Vivillon.Enabled = false;
this.CB_Vivillon.FormattingEnabled = true;
this.CB_Vivillon.Location = new System.Drawing.Point(287, 73);
this.CB_Vivillon.Name = "CB_Vivillon";
diff --git a/Util/PathUtil.cs b/Util/PathUtil.cs
index 741f16d21..6159fc92b 100644
--- a/Util/PathUtil.cs
+++ b/Util/PathUtil.cs
@@ -6,11 +6,6 @@ namespace PKHeX
{
public partial class Util
{
- internal static string NormalizePath(string path)
- {
- return Path.GetFullPath(new Uri(path).LocalPath)
- .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
- }
internal static string GetTempFolder()
{
return Path.Combine(Path.GetTempPath(), "3DSSE");
@@ -62,38 +57,6 @@ namespace PKHeX
catch { }
return null;
}
- internal static string GetSDFLocation()
- {
- try
- {
- // Start by checking if the 3DS file path exists or not.
- string path_SDF = null;
- string[] DriveList = Environment.GetLogicalDrives();
- for (int i = 1; i < DriveList.Length; i++) // Skip first drive (some users still have floppy drives and would chew up time!)
- {
- string potentialPath_SDF = NormalizePath(Path.Combine(DriveList[i], "filer", "UserSaveData"));
- if (!Directory.Exists(potentialPath_SDF)) continue;
-
- path_SDF = potentialPath_SDF; break;
- }
- if (path_SDF == null)
- return null;
- // 3DS data found in SD card reader. Let's get the title folder location!
- string[] folders = Directory.GetDirectories(path_SDF, "*", SearchOption.TopDirectoryOnly);
- Array.Sort(folders); // Don't need Modified Date, sort by path names just in case.
-
- // Loop through all the folders in the Nintendo 3DS folder to see if any of them contain 'title'.
- for (int i = folders.Length - 1; i >= 0; i--)
- {
- if (File.Exists(Path.Combine(folders[i], "000011c4", "main"))) return Path.Combine(folders[i], "000011c4"); // OR
- if (File.Exists(Path.Combine(folders[i], "000011c5", "main"))) return Path.Combine(folders[i], "000011c5"); // AS
- if (File.Exists(Path.Combine(folders[i], "0000055d", "main"))) return Path.Combine(folders[i], "0000055d"); // X
- if (File.Exists(Path.Combine(folders[i], "0000055e", "main"))) return Path.Combine(folders[i], "0000055e"); // Y
- }
- return null; // Fallthrough
- }
- catch { return null; }
- }
internal static string CleanFileName(string fileName)
{
return Path.GetInvalidFileNameChars().Aggregate(fileName, (current, c) => current.Replace(c.ToString(), string.Empty));