Merged master into b/inconsistent-resource-type

This commit is contained in:
evandixon 2016-08-08 14:08:39 -05:00
commit 33e3019812
32 changed files with 2020 additions and 498 deletions

View file

@ -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}.

View file

@ -444,6 +444,7 @@ namespace PKHeX
486, // Regigigas
487, // Giratina
488, // Cresselia
490, // Manaphy
491, // Darkrai
492, // Shaymin
493, // Arceus

View file

@ -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 =

View file

@ -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;
}
}

View file

@ -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
}
}

View file

@ -1306,6 +1306,9 @@
<metadata name="B_LinkInfo.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="B_CGearSkin.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dragout.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View file

@ -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")

View file

@ -173,6 +173,13 @@
</Compile>
<Compile Include="Saves\SaveObjects.cs" />
<Compile Include="Saves\SaveUtil.cs" />
<Compile Include="Subforms\Save Editors\Gen5\CGearBackground.cs" />
<Compile Include="Subforms\Save Editors\Gen5\SAV_CGearSkin.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Subforms\Save Editors\Gen5\SAV_CGearSkin.Designer.cs">
<DependentUpon>SAV_CGearSkin.cs</DependentUpon>
</Compile>
<Compile Include="Subforms\Save Editors\Gen6\SAV_Link6.cs">
<SubType>Form</SubType>
</Compile>
@ -324,6 +331,9 @@
<EmbeddedResource Include="Subforms\PKM Editors\MemoryAmie.resx">
<DependentUpon>MemoryAmie.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Subforms\Save Editors\Gen5\SAV_CGearSkin.resx">
<DependentUpon>SAV_CGearSkin.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Subforms\Save Editors\Gen6\SAV_Link6.resx">
<DependentUpon>SAV_Link6.cs</DependentUpon>
</EmbeddedResource>
@ -708,6 +718,7 @@
<None Include="Resources\img\box\xy\box_wp03xy.png" />
<None Include="Resources\img\box\xy\box_wp02xy.png" />
<None Include="Resources\img\box\xy\box_wp01xy.png" />
<None Include="Resources\img\item\item_tm.png" />
<None Include="Resources\text\de\text_Pokeblock_de.txt" />
<None Include="Resources\text\de\text_tradeao_de.txt" />
<None Include="Resources\text\de\text_tradexy_de.txt" />

View file

@ -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;

View file

@ -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++)

View file

@ -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;

View file

@ -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;

View file

@ -15132,6 +15132,16 @@ namespace PKHeX.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap item_tm {
get {
object obj = ResourceManager.GetObject("item_tm", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 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&apos;s executable.
@ -15181,11 +15191,11 @@ namespace PKHeX.Properties {
/// <summary>
/// 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&apos;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 &apos; = &apos; between Control name and new Text!
///!
///! -----------------------------------------------------
///- DO NOT CHANGE THI [rest of string was truncated]&quot;;.
///- DO NOT CHANGE THIS [rest of string was truncated]&quot;;.
/// </summary>
internal static string lang_es {
get {
@ -20500,18 +20510,18 @@ namespace PKHeX.Properties {
/// <summary>
/// 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).
/// </summary>
internal static string text_encountertype_es {
get {
@ -20697,7 +20707,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_de {
get {
@ -20960,7 +20968,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_en {
get {
@ -21223,7 +21229,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// /// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_es {
get {
@ -21486,7 +21489,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// /// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_fr {
get {
@ -21748,7 +21748,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// /// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_it {
get {
@ -22011,7 +22008,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_ja {
get {
@ -22273,7 +22268,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// [rest of string was truncated]&quot;;.
/// </summary>
internal static string text_forms_ko {
get {
@ -22536,7 +22529,7 @@ namespace PKHeX.Properties {
}
/// <summary>
/// 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]&quot;;.
/// /// [rest of string was truncated]&quot;;.
/// </summary>
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.
/// </summary>
internal static string text_games_es {
get {

View file

@ -6382,4 +6382,7 @@
<data name="slotView1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\box\slotView.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="item_tm" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\img\item\item_tm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

View file

@ -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.
- 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 \!

View file

@ -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

View file

@ -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)
Mundo Distorsion (Pt)
Inicial/Fosil/Regalo (Pt/DP Trio)

View file

@ -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
Zafiro Alfa
Rubí Omega

View file

@ -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;

View file

@ -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

View file

@ -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
/// <returns>Version Identifier or Invalid if type cannot be determined.</returns>
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
}
}
/// <summary>
/// Detects a save file.
/// </summary>
/// <returns>Full path of a save file. Returns null if unable to find any.</returns>
public static string detectSaveFile()
{
string path;
string path3DS = Path.GetPathRoot(Util.get3DSLocation());
List<string> possiblePaths = new List<string>();
// 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);
}
/// <summary>
/// Retrieves the full path of the most recent file based on LastWriteTime.
/// </summary>
/// <param name="folderPath">Folder to look within</param>
/// <param name="deep">Search all subfolders</param>
/// <returns>Full path of all save files that match criteria.</returns>
public static IEnumerable<string> 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));
}
/// <summary>
/// Determines whether the save data size is valid for 6th generation saves.
/// </summary>
/// <param name="size">Size in bytes of the save data</param>
/// <returns>A boolean indicating whether or not the save data size is valid.</returns>
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

View file

@ -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);

View file

@ -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<PKM>();
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<PKM>(RawDB.Where(pk => pk.ChecksumValid && pk.Species != 0 && pk.Sanity == 0));
RawDB = new List<PKM>(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<DatabaseList> Database = new List<DatabaseList>();
private List<PKM> Results;
private List<PKM> RawDB;
private int slotSelected = -1; // = null;
@ -323,80 +314,6 @@ namespace PKHeX
}
// IO Usage
private class DatabaseList
{
public readonly List<PKM> Slot = new List<PKM>();
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<PKM>();
foreach (var db in Database)
RawDB.AddRange(db.Slot);
RawDB = new List<PKM>(RawDB.Where(pk => pk.ChecksumValid && pk.Species != 0 && pk.Sanity == 0));
RawDB = new List<PKM>(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)

View file

@ -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<Tile> tilelist = new List<Tile> {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 };
}
}

View file

@ -0,0 +1,156 @@
namespace PKHeX
{
partial class SAV_CGearSkin
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View file

@ -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();
}
}
}

View file

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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//////
</value>
</data>
</root>

View file

@ -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";

View file

@ -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));