Adding Special Characters text entry

This commit is contained in:
Kurt 2014-12-11 21:44:05 -08:00
parent 8350141e43
commit ff97a7a973
6 changed files with 778 additions and 54 deletions

View file

@ -548,6 +548,7 @@
this.CHK_Nicknamed.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.CHK_Nicknamed.UseVisualStyleBackColor = true;
this.CHK_Nicknamed.CheckedChanged += new System.EventHandler(this.updateNickname);
this.CHK_Nicknamed.MouseDown += new System.Windows.Forms.MouseEventHandler(this.updateNicknameClick);
//
// Label_Gender
//
@ -870,7 +871,9 @@
//
this.TB_Nickname.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.TB_Nickname.Location = new System.Drawing.Point(105, 49);
this.TB_Nickname.MaximumSize = new System.Drawing.Size(122, 20);
this.TB_Nickname.MaxLength = 12;
this.TB_Nickname.MinimumSize = new System.Drawing.Size(122, 20);
this.TB_Nickname.Name = "TB_Nickname";
this.TB_Nickname.Size = new System.Drawing.Size(122, 20);
this.TB_Nickname.TabIndex = 5;

View file

@ -180,8 +180,9 @@ namespace PKHeX
else if (File.Exists(Util.NormalizePath(Path.Combine(Util.GetTempFolder(), "root" + Path.DirectorySeparatorChar + "main"))))
openQuick(Util.NormalizePath(Path.Combine(Util.GetTempFolder() , "root" + Path.DirectorySeparatorChar + "main")));
TB_Nickname.Font = PKX.getPKXFont(11F);
// Close splash screen.
init = true;
init = true;
SplashSCR.Join();
this.BringToFront();
this.WindowState = FormWindowState.Minimized;
@ -193,9 +194,9 @@ namespace PKHeX
}
#region Global Variables: Always Visible!
public byte[] buff = new Byte[260];
public byte[] savefile = new Byte[0x100000];
public byte[] cyberSAV = new Byte[0x65600];
public byte[] buff = new byte[260];
public byte[] savefile = new byte[0x100000];
public byte[] cyberSAV = new byte[0x65600];
public bool savegame_oras = false;
public bool cybergadget = false;
public bool savLoaded = false;
@ -2233,6 +2234,12 @@ namespace PKHeX
}
}
}
private void updateNicknameClick(object sender, MouseEventArgs e)
{
// Special Character Form
if (e.Button == MouseButtons.Right)
(new f2_Text(TB_Nickname)).Show();
}
private void updateNotOT(object sender, EventArgs e)
{
if (TB_OTt2.Text == "")
@ -2558,7 +2565,7 @@ namespace PKHeX
try { populateFields(buff); }
catch
{
Array.Copy(new Byte[232], buff, 232);
Array.Copy(new byte[232], buff, 232);
populateFields(buff);
Util.Error("Imported code did not decrypt properly", "Please verify that what you imported was correct.");
}
@ -2593,7 +2600,7 @@ namespace PKHeX
{
try
{
byte[] blank = PKX.encryptArray(new Byte[260]);
byte[] blank = PKX.encryptArray(new byte[260]);
for (int i = 0; i < 232; i++)
blank[i] = (byte)(blank[i] ^ input[i]);
@ -2617,14 +2624,14 @@ namespace PKHeX
if (input.Length == 363 && BitConverter.ToUInt16(input, 0x6B) == 0)
{
// EAD Packet of 363 length
byte[] c = new Byte[260];
byte[] c = new byte[260];
Array.Copy(input, 0x67, c, 0, 260);
input = c;
}
else if (input.Length == 407 && BitConverter.ToUInt16(input,0x98) == 0)
{
// EAD Packet of 407 length
byte[] c = new Byte[260];
byte[] c = new byte[260];
Array.Copy(input, 0x93, c, 0, 260);
input = c;
}
@ -2637,6 +2644,9 @@ namespace PKHeX
// Verify the Data Input Size is Proper
else if (input.Length == 0x100000)
{
if (BitConverter.ToUInt64(input,0x10) != 0) // encrypted save
{ Util.Error("PKHeX only edits decrypted save files.", "This save file is not decrypted."); return; }
B_ExportSAV.Enabled = false;
B_SwitchSAV.Enabled = false;
B_JPEG.Enabled = false;
@ -2727,7 +2737,7 @@ namespace PKHeX
}
catch
{
Array.Copy(new Byte[232], buff, 232);
Array.Copy(new byte[232], buff, 232);
populateFields(buff);
Util.Error("Attempted to load previous generation PKM.", "Conversion failed.");
}
@ -2743,7 +2753,7 @@ namespace PKHeX
// Load CyberGadget
this.savindex = 0;
this.savefile = new Byte[0x100000];
this.savefile = new byte[0x100000];
this.cyberSAV = input;
cybergadget = true;
B_ExportSAV.Enabled = true;
@ -2765,14 +2775,14 @@ namespace PKHeX
SHA256 mySHA256 = SHA256Managed.Create();
// Check both IVFC Hashes
byte[] zeroarray = new Byte[0x200];
byte[] zeroarray = new byte[0x200];
Array.Copy(savefile, 0x2000 + 0 * 0x7F000, zeroarray, 0, 0x20);
byte[] hashValue1 = mySHA256.ComputeHash(zeroarray);
Array.Copy(savefile, 0x2000 + 1 * 0x7F000, zeroarray, 0, 0x20);
byte[] hashValue2 = mySHA256.ComputeHash(zeroarray);
byte[] realHash1 = new Byte[0x20];
byte[] realHash2 = new Byte[0x20];
byte[] realHash1 = new byte[0x20];
byte[] realHash2 = new byte[0x20];
Array.Copy(savefile, 0x43C - 0 * 0x130, realHash1, 0, 0x20);
Array.Copy(savefile, 0x43C - 1 * 0x130, realHash2, 0, 0x20);
@ -3096,7 +3106,7 @@ namespace PKHeX
if (BitConverter.ToUInt16(pkx, 0x5A + 2 * i) == 0)
{
Array.Copy(pkx, 0x5C + 2 * i, pkx, 0x5A + 2 * i, 2); // Shift moves down
Array.Copy(new Byte[2], 0, pkx, 0x5C + 2 * i, 2); // Clear next move (error shifted down)
Array.Copy(new byte[2], 0, pkx, 0x5C + 2 * i, 2); // Clear next move (error shifted down)
// Move PP and PP Ups down one byte.
pkx[0x62 + i] = pkx[0x63 + i]; pkx[0x63 + i] = 0; // PP
@ -3110,7 +3120,7 @@ namespace PKHeX
if (BitConverter.ToUInt16(pkx, 0x6A + 2 * i) == 0)
{
Array.Copy(pkx, 0x6C + 2 * i, pkx, 0x6A + 2 * i, 2); // Shift moves down
Array.Copy(new Byte[2], 0, pkx, 0x6C + 2 * i, 2); // Clear next move (error shifted down)
Array.Copy(new byte[2], 0, pkx, 0x6C + 2 * i, 2); // Clear next move (error shifted down)
}
}
@ -3255,7 +3265,7 @@ namespace PKHeX
for (int i = 0; i < length.Length; i++)
{
byte[] data = new Byte[length[i]];
byte[] data = new byte[length[i]];
Array.Copy(savefile, start[i], data, 0, length[i]);
ushort checksum = PKX.ccitt16(data);
ushort actualsum = BitConverter.ToUInt16(savefile, csoff + i * 0x8);
@ -3278,7 +3288,7 @@ namespace PKHeX
int invalid2 = 0;
for (int i = 0; i < length.Length; i++)
{
byte[] data = new Byte[length[i]];
byte[] data = new byte[length[i]];
Array.Copy(savefile, start[i], data, 0, length[i]);
ushort checksum = PKX.ccitt16(data);
ushort actualsum = BitConverter.ToUInt16(savefile,csoff + i * 0x8);
@ -3421,10 +3431,10 @@ namespace PKHeX
uint offset = hashtabledata[2 + 4 * i];
uint blocksize = hashtabledata[3 + 4 * i];
byte[] zeroarray = new Byte[blocksize];
byte[] zeroarray = new byte[blocksize];
Array.Copy(savefile, start, zeroarray, 0, length + 1);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
byte[] actualhash = new Byte[0x20];
byte[] actualhash = new byte[0x20];
Array.Copy(savefile, offset, actualhash, 0, 0x20);
if (!hashValue.SequenceEqual(actualhash))
@ -3457,10 +3467,10 @@ namespace PKHeX
uint offset = hashtabledata[2 + 4 * i];
uint blocksize = hashtabledata[3 + 4 * i];
byte[] zeroarray = new Byte[blocksize];
byte[] zeroarray = new byte[blocksize];
Array.Copy(savefile, start, zeroarray, 0, length + 1);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
byte[] actualhash = new Byte[0x20];
byte[] actualhash = new byte[0x20];
Array.Copy(savefile, offset, actualhash, 0, 0x20);
if (!hashValue.SequenceEqual(actualhash))
@ -3476,10 +3486,10 @@ namespace PKHeX
// Check the Upper Level IVFC Hashes
{
byte[] zeroarray = new Byte[0x200];
byte[] zeroarray = new byte[0x200];
Array.Copy(savefile, 0x2000, zeroarray, 0, 0x20);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
byte[] actualhash = new Byte[0x20];
byte[] actualhash = new byte[0x20];
Array.Copy(savefile, 0x43C, actualhash, 0, 0x20);
if (!hashValue.SequenceEqual(actualhash))
{
@ -3487,10 +3497,10 @@ namespace PKHeX
}
}
{
byte[] zeroarray = new Byte[0x200];
byte[] zeroarray = new byte[0x200];
Array.Copy(savefile, 0x81000, zeroarray, 0, 0x20);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
byte[] actualhash = new Byte[0x20];
byte[] actualhash = new byte[0x20];
Array.Copy(savefile, 0x30C, actualhash, 0, 0x20);
if (!hashValue.SequenceEqual(actualhash))
{
@ -3498,13 +3508,13 @@ namespace PKHeX
}
}
{
byte[] difihash1 = new Byte[0x12C];
byte[] difihash2 = new Byte[0x12C];
byte[] difihash1 = new byte[0x12C];
byte[] difihash2 = new byte[0x12C];
Array.Copy(savefile, 0x330, difihash1, 0, 0x12C);
Array.Copy(savefile, 0x200, difihash2, 0, 0x12C);
byte[] hashValue1 = mySHA256.ComputeHash(difihash1);
byte[] hashValue2 = mySHA256.ComputeHash(difihash2);
byte[] actualhash = new Byte[0x20];
byte[] actualhash = new byte[0x20];
Array.Copy(savefile, 0x16C, actualhash, 0, 0x20);
if (hashValue1.SequenceEqual(actualhash))
{
@ -3523,7 +3533,7 @@ namespace PKHeX
private void exportSAV(object sender, EventArgs e)
{
// Create another version of the save file.
byte[] editedsav = new Byte[0x100000];
byte[] editedsav = new byte[0x100000];
Array.Copy(savefile, editedsav, savefile.Length);
// Since we only edited one of the save files, we only have to fix half of the chk/hashes!
@ -3549,7 +3559,7 @@ namespace PKHeX
for (int i = 0; i < length.Length; i++)
{
byte[] data = new Byte[length[i]];
byte[] data = new byte[length[i]];
Array.Copy(editedsav, start[i], data, 0, length[i]);
ushort checksum = PKX.ccitt16(data);
Array.Copy(BitConverter.GetBytes(checksum), 0, editedsav, csoff + i * 8, 2);
@ -3697,7 +3707,7 @@ namespace PKHeX
uint offset = hashtabledata[2 + 4 * i];
uint blocksize = hashtabledata[3 + 4 * i];
byte[] zeroarray = new Byte[blocksize];
byte[] zeroarray = new byte[blocksize];
Array.Copy(editedsav, start, zeroarray, 0, length + 1);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
Array.Copy(hashValue, 0, editedsav, offset, 0x20);
@ -3709,7 +3719,7 @@ namespace PKHeX
uint offset = hashtabledata[2 + 4 * 1];
uint blocksize = hashtabledata[3 + 4 * 1];
byte[] zeroarray = new Byte[blocksize];
byte[] zeroarray = new byte[blocksize];
Array.Copy(editedsav, start, zeroarray, 0, length + 1);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
@ -3722,7 +3732,7 @@ namespace PKHeX
uint offset = hashtabledata[2 + 4 * 0];
uint blocksize = hashtabledata[3 + 4 * 0];
byte[] zeroarray = new Byte[blocksize];
byte[] zeroarray = new byte[blocksize];
Array.Copy(editedsav, start, zeroarray, 0, length + 1);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
@ -3730,7 +3740,7 @@ namespace PKHeX
}
// Fix IVFC Hash
{
byte[] zeroarray = new Byte[0x200];
byte[] zeroarray = new byte[0x200];
Array.Copy(editedsav, 0x2000 + savindex * 0x7F000, zeroarray, 0, 0x20);
byte[] hashValue = mySHA256.ComputeHash(zeroarray);
@ -3738,7 +3748,7 @@ namespace PKHeX
}
// Fix DISA Hash
{
byte[] difihash = new Byte[0x12C];
byte[] difihash = new byte[0x12C];
Array.Copy(editedsav, 0x330 - savindex * 0x130, difihash, 0, 0x12C);
byte[] hashValue = mySHA256.ComputeHash(difihash);
@ -3753,12 +3763,12 @@ namespace PKHeX
// If CyberGadget
if (cybergadget)
{
byte[] cybersav = new Byte[0x65600];
if (savegame_oras) cybersav = new Byte[0x76000];
byte[] cybersav = new byte[0x65600];
if (savegame_oras) cybersav = new byte[0x76000];
Array.Copy(editedsav, 0x5400, cybersav, 0, cybersav.Length);
// Chunk Error Checking
byte[] FFFF = new Byte[0x200];
byte[] section = new Byte[0x200];
byte[] FFFF = new byte[0x200];
byte[] section = new byte[0x200];
for (int i = 0; i < 0x200; i++)
FFFF[i] = 0xFF;
@ -3875,7 +3885,7 @@ namespace PKHeX
// Load the PKX file
if (BitConverter.ToUInt64(savefile, offset + 8) != 0)
{
byte[] ekxdata = new Byte[0xE8];
byte[] ekxdata = new byte[0xE8];
Array.Copy(savefile, offset, ekxdata, 0, 0xE8);
byte[] pkxdata = PKX.decryptArray(ekxdata);
int species = BitConverter.ToInt16(pkxdata, 0x08); // Get Species
@ -3893,7 +3903,7 @@ namespace PKHeX
{
try
{
byte[] blank = PKX.encryptArray(new Byte[0xE8]);
byte[] blank = PKX.encryptArray(new byte[0xE8]);
for (int i = 0; i < 0xE8; i++)
blank[i] = (byte)(buff[i] ^ blank[i]);
@ -3962,7 +3972,7 @@ namespace PKHeX
if (slot == 30 && partycount == 1 && !DEV_Ability.Enabled) { Util.Alert("Can't delete first slot."); return; }
int offset = getPKXOffset(slot);
byte[] pkxdata = new Byte[0x104];
byte[] pkxdata = new byte[0x104];
byte[] ekxdata = PKX.encryptArray(pkxdata);
if (slot >= 30 && slot < 36) // Party
@ -4033,7 +4043,7 @@ namespace PKHeX
for (int i = 0; i < 6; i++)
{
// Gather all the species
byte[] data = new Byte[0x104];
byte[] data = new byte[0x104];
Array.Copy(savefile, offset + i * 0x104, data, 0, 0x104);
byte[] decdata = PKX.decryptArray(data);
int species = BitConverter.ToInt16(decdata,8);
@ -4049,7 +4059,7 @@ namespace PKHeX
// Zero out the party slots that are empty.
for (int i = 0; i < 6; i++)
if (i >= partymembers)
Array.Copy(PKX.encryptArray(new Byte[0x104]), 0, savefile, offset + (i * 0x104), 0x104);
Array.Copy(PKX.encryptArray(new byte[0x104]), 0, savefile, offset + (i * 0x104), 0x104);
// Repeat for Battle Box.
byte battlemem = 0;
@ -4057,7 +4067,7 @@ namespace PKHeX
for (int i = 0; i < 6; i++)
{
// Gather all the species
byte[] data = new Byte[0x104];
byte[] data = new byte[0x104];
Array.Copy(savefile, offset2 + i * 0xE8, data, 0, 0xE8);
byte[] decdata = PKX.decryptArray(data);
int species = BitConverter.ToInt16(decdata, 8);
@ -4071,7 +4081,7 @@ namespace PKHeX
// Zero out the party slots that are empty.
for (int i = 0; i < 6; i++)
if (i >= battlemem)
Array.Copy(PKX.encryptArray(new Byte[0x104]), 0, savefile, offset2 + (i * 0xE8), 0xE8);
Array.Copy(PKX.encryptArray(new byte[0x104]), 0, savefile, offset2 + (i * 0xE8), 0xE8);
if (battlemem == 0)
savefile[offset2 + 6 * 0xE8 + savindex * 0x7F000] = 0;
@ -4273,7 +4283,7 @@ namespace PKHeX
}
private void getSlotFiller(int offset, PictureBox pb)
{
byte[] slotdata = new Byte[0xE8];
byte[] slotdata = new byte[0xE8];
Array.Copy(savefile, offset, slotdata, 0, 0xE8); // Fill Our EKX Slot
byte[] dslotdata = PKX.decryptArray(slotdata);
@ -4281,7 +4291,7 @@ namespace PKHeX
for (int i = 8; i < 232; i += 2) // Loop through the entire PKX
chk += BitConverter.ToUInt16(dslotdata, i);
if (chk != BitConverter.ToUInt16(dslotdata, 6) && (!savLoaded && !slotdata.SequenceEqual(new Byte[0xE8]))) // Bad Egg
if (chk != BitConverter.ToUInt16(dslotdata, 6) && (!savLoaded && !slotdata.SequenceEqual(new byte[0xE8]))) // Bad Egg
{
pb.Image = null;
pb.BackColor = Color.Red;
@ -4449,7 +4459,7 @@ namespace PKHeX
}
for (int i = 0; i < 31 * 30 * size; i += size)
{
byte[] ekxdata = new Byte[size];
byte[] ekxdata = new byte[size];
Array.Copy(savefile, offset + i, ekxdata, 0, size);
byte[] pkxdata = PKX.decryptArray(ekxdata);
@ -4504,7 +4514,7 @@ namespace PKHeX
// Array.Clear(savefile, offset, size * 30 * 31);
if (Util.Prompt(MessageBoxButtons.YesNo, "Clear subsequent boxes when importing data?", "If you only want to overwrite for new data, press no.") == DialogResult.Yes)
{
byte[] ezeros = PKX.encryptArray(new Byte[232]);
byte[] ezeros = PKX.encryptArray(new byte[232]);
for (int i = ctr; i < 30 * 31; i++)
Array.Copy(ezeros, 0, savefile, offset + i * 232, 232);
}
@ -4521,7 +4531,7 @@ namespace PKHeX
&& len != 100 && len != 80) // 4th Gen
continue;
string name = filepaths[i];
byte[] data = new Byte[232];
byte[] data = new byte[232];
string ext = Path.GetExtension(filepaths[i]);
if (ext == ".pkm" || ext == ".3gpkm" || ext == ".pk3" || ext == ".pk4" || ext == ".pk5")
{
@ -4824,7 +4834,7 @@ namespace PKHeX
}
int length = 0xE004;
byte[] jpeg = new Byte[length];
byte[] jpeg = new byte[length];
Array.Copy(savefile, offset, jpeg, 0, length);
SaveFileDialog savejpeg = new SaveFileDialog();
savejpeg.FileName = filename;
@ -5051,7 +5061,7 @@ namespace PKHeX
else
{
if (ModifierKeys == Keys.Alt)
Array.Copy(PKX.encryptArray(new Byte[0xE8]), 0, savefile, pkm_from_offset, 0xE8);
Array.Copy(PKX.encryptArray(new byte[0xE8]), 0, savefile, pkm_from_offset, 0xE8);
else if (ModifierKeys != Keys.Control)
Array.Copy(savefile, offset, savefile, pkm_from_offset, 0xE8); // Copy from new slot to old slot.
Array.Copy(pkm_from, 0, savefile, offset, 0xE8); // Copy from temp slot to new.
@ -5064,7 +5074,7 @@ namespace PKHeX
if (e.Data != null)
e.Effect = DragDropEffects.Move;
}
private byte[] pkm_from = PKX.encryptArray(new Byte[0xE8]);
private byte[] pkm_from = PKX.encryptArray(new byte[0xE8]);
private int pkm_from_offset = 0;
private void L_Save_Click(object sender, EventArgs e)
{
@ -5099,6 +5109,10 @@ namespace PKHeX
BTN_Shinytize.Text = "☆";
}
}
}
#region Structs & Classes
public class cbItem

438
PKX/f2-Text.Designer.cs generated Normal file
View file

@ -0,0 +1,438 @@
namespace PKHeX
{
partial class f2_Text
{
/// <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(f2_Text));
this.L04 = new System.Windows.Forms.Label();
this.L0C = new System.Windows.Forms.Label();
this.L0D = new System.Windows.Forms.Label();
this.L05 = new System.Windows.Forms.Label();
this.L0E = new System.Windows.Forms.Label();
this.L06 = new System.Windows.Forms.Label();
this.L0F = new System.Windows.Forms.Label();
this.L07 = new System.Windows.Forms.Label();
this.L1E = new System.Windows.Forms.Label();
this.L16 = new System.Windows.Forms.Label();
this.L1F = new System.Windows.Forms.Label();
this.L17 = new System.Windows.Forms.Label();
this.L18 = new System.Windows.Forms.Label();
this.L10 = new System.Windows.Forms.Label();
this.L19 = new System.Windows.Forms.Label();
this.L11 = new System.Windows.Forms.Label();
this.L0B = new System.Windows.Forms.Label();
this.L03 = new System.Windows.Forms.Label();
this.L0A = new System.Windows.Forms.Label();
this.L02 = new System.Windows.Forms.Label();
this.L09 = new System.Windows.Forms.Label();
this.L01 = new System.Windows.Forms.Label();
this.L08 = new System.Windows.Forms.Label();
this.L00 = new System.Windows.Forms.Label();
this.L1B = new System.Windows.Forms.Label();
this.L13 = new System.Windows.Forms.Label();
this.L1A = new System.Windows.Forms.Label();
this.L12 = new System.Windows.Forms.Label();
this.L1D = new System.Windows.Forms.Label();
this.L15 = new System.Windows.Forms.Label();
this.L1C = new System.Windows.Forms.Label();
this.L14 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// L04
//
this.L04.AutoSize = true;
this.L04.Location = new System.Drawing.Point(92, 12);
this.L04.Name = "L04";
this.L04.Size = new System.Drawing.Size(14, 13);
this.L04.TabIndex = 3;
this.L04.Text = "X";
//
// L0C
//
this.L0C.AutoSize = true;
this.L0C.Location = new System.Drawing.Point(92, 34);
this.L0C.Name = "L0C";
this.L0C.Size = new System.Drawing.Size(14, 13);
this.L0C.TabIndex = 4;
this.L0C.Text = "X";
//
// L0D
//
this.L0D.AutoSize = true;
this.L0D.Location = new System.Drawing.Point(112, 34);
this.L0D.Name = "L0D";
this.L0D.Size = new System.Drawing.Size(14, 13);
this.L0D.TabIndex = 6;
this.L0D.Text = "X";
//
// L05
//
this.L05.AutoSize = true;
this.L05.Location = new System.Drawing.Point(112, 12);
this.L05.Name = "L05";
this.L05.Size = new System.Drawing.Size(14, 13);
this.L05.TabIndex = 5;
this.L05.Text = "X";
//
// L0E
//
this.L0E.AutoSize = true;
this.L0E.Location = new System.Drawing.Point(132, 34);
this.L0E.Name = "L0E";
this.L0E.Size = new System.Drawing.Size(14, 13);
this.L0E.TabIndex = 8;
this.L0E.Text = "X";
//
// L06
//
this.L06.AutoSize = true;
this.L06.Location = new System.Drawing.Point(132, 12);
this.L06.Name = "L06";
this.L06.Size = new System.Drawing.Size(14, 13);
this.L06.TabIndex = 7;
this.L06.Text = "X";
//
// L0F
//
this.L0F.AutoSize = true;
this.L0F.Location = new System.Drawing.Point(152, 34);
this.L0F.Name = "L0F";
this.L0F.Size = new System.Drawing.Size(14, 13);
this.L0F.TabIndex = 10;
this.L0F.Text = "X";
//
// L07
//
this.L07.AutoSize = true;
this.L07.Location = new System.Drawing.Point(152, 12);
this.L07.Name = "L07";
this.L07.Size = new System.Drawing.Size(14, 13);
this.L07.TabIndex = 9;
this.L07.Text = "X";
//
// L1E
//
this.L1E.AutoSize = true;
this.L1E.Location = new System.Drawing.Point(132, 81);
this.L1E.Name = "L1E";
this.L1E.Size = new System.Drawing.Size(14, 13);
this.L1E.TabIndex = 12;
this.L1E.Text = "X";
//
// L16
//
this.L16.AutoSize = true;
this.L16.Location = new System.Drawing.Point(132, 59);
this.L16.Name = "L16";
this.L16.Size = new System.Drawing.Size(14, 13);
this.L16.TabIndex = 11;
this.L16.Text = "X";
//
// L1F
//
this.L1F.AutoSize = true;
this.L1F.Location = new System.Drawing.Point(152, 81);
this.L1F.Name = "L1F";
this.L1F.Size = new System.Drawing.Size(14, 13);
this.L1F.TabIndex = 14;
this.L1F.Text = "X";
//
// L17
//
this.L17.AutoSize = true;
this.L17.Location = new System.Drawing.Point(152, 59);
this.L17.Name = "L17";
this.L17.Size = new System.Drawing.Size(14, 13);
this.L17.TabIndex = 13;
this.L17.Text = "X";
//
// L18
//
this.L18.AutoSize = true;
this.L18.Location = new System.Drawing.Point(12, 81);
this.L18.Name = "L18";
this.L18.Size = new System.Drawing.Size(14, 13);
this.L18.TabIndex = 16;
this.L18.Text = "X";
//
// L10
//
this.L10.AutoSize = true;
this.L10.Location = new System.Drawing.Point(12, 59);
this.L10.Name = "L10";
this.L10.Size = new System.Drawing.Size(14, 13);
this.L10.TabIndex = 15;
this.L10.Text = "X";
//
// L19
//
this.L19.AutoSize = true;
this.L19.Location = new System.Drawing.Point(32, 81);
this.L19.Name = "L19";
this.L19.Size = new System.Drawing.Size(14, 13);
this.L19.TabIndex = 18;
this.L19.Text = "X";
//
// L11
//
this.L11.AutoSize = true;
this.L11.Location = new System.Drawing.Point(32, 59);
this.L11.Name = "L11";
this.L11.Size = new System.Drawing.Size(14, 13);
this.L11.TabIndex = 17;
this.L11.Text = "X";
//
// L0B
//
this.L0B.AutoSize = true;
this.L0B.Location = new System.Drawing.Point(72, 34);
this.L0B.Name = "L0B";
this.L0B.Size = new System.Drawing.Size(14, 13);
this.L0B.TabIndex = 26;
this.L0B.Text = "X";
//
// L03
//
this.L03.AutoSize = true;
this.L03.Location = new System.Drawing.Point(72, 12);
this.L03.Name = "L03";
this.L03.Size = new System.Drawing.Size(14, 13);
this.L03.TabIndex = 25;
this.L03.Text = "X";
//
// L0A
//
this.L0A.AutoSize = true;
this.L0A.Location = new System.Drawing.Point(52, 34);
this.L0A.Name = "L0A";
this.L0A.Size = new System.Drawing.Size(14, 13);
this.L0A.TabIndex = 24;
this.L0A.Text = "X";
//
// L02
//
this.L02.AutoSize = true;
this.L02.Location = new System.Drawing.Point(52, 12);
this.L02.Name = "L02";
this.L02.Size = new System.Drawing.Size(14, 13);
this.L02.TabIndex = 23;
this.L02.Text = "X";
//
// L09
//
this.L09.AutoSize = true;
this.L09.Location = new System.Drawing.Point(32, 34);
this.L09.Name = "L09";
this.L09.Size = new System.Drawing.Size(14, 13);
this.L09.TabIndex = 22;
this.L09.Text = "X";
//
// L01
//
this.L01.AutoSize = true;
this.L01.Location = new System.Drawing.Point(32, 12);
this.L01.Name = "L01";
this.L01.Size = new System.Drawing.Size(14, 13);
this.L01.TabIndex = 21;
this.L01.Text = "X";
//
// L08
//
this.L08.AutoSize = true;
this.L08.Location = new System.Drawing.Point(12, 34);
this.L08.Name = "L08";
this.L08.Size = new System.Drawing.Size(14, 13);
this.L08.TabIndex = 20;
this.L08.Text = "X";
//
// L00
//
this.L00.AutoSize = true;
this.L00.Location = new System.Drawing.Point(12, 12);
this.L00.Name = "L00";
this.L00.Size = new System.Drawing.Size(14, 13);
this.L00.TabIndex = 19;
this.L00.Text = "X";
//
// L1B
//
this.L1B.AutoSize = true;
this.L1B.Location = new System.Drawing.Point(72, 81);
this.L1B.Name = "L1B";
this.L1B.Size = new System.Drawing.Size(14, 13);
this.L1B.TabIndex = 30;
this.L1B.Text = "X";
//
// L13
//
this.L13.AutoSize = true;
this.L13.Location = new System.Drawing.Point(72, 59);
this.L13.Name = "L13";
this.L13.Size = new System.Drawing.Size(14, 13);
this.L13.TabIndex = 29;
this.L13.Text = "X";
//
// L1A
//
this.L1A.AutoSize = true;
this.L1A.Location = new System.Drawing.Point(52, 81);
this.L1A.Name = "L1A";
this.L1A.Size = new System.Drawing.Size(14, 13);
this.L1A.TabIndex = 28;
this.L1A.Text = "X";
//
// L12
//
this.L12.AutoSize = true;
this.L12.Location = new System.Drawing.Point(52, 59);
this.L12.Name = "L12";
this.L12.Size = new System.Drawing.Size(14, 13);
this.L12.TabIndex = 27;
this.L12.Text = "X";
//
// L1D
//
this.L1D.AutoSize = true;
this.L1D.Location = new System.Drawing.Point(112, 81);
this.L1D.Name = "L1D";
this.L1D.Size = new System.Drawing.Size(14, 13);
this.L1D.TabIndex = 34;
this.L1D.Text = "X";
//
// L15
//
this.L15.AutoSize = true;
this.L15.Location = new System.Drawing.Point(112, 59);
this.L15.Name = "L15";
this.L15.Size = new System.Drawing.Size(14, 13);
this.L15.TabIndex = 33;
this.L15.Text = "X";
//
// L1C
//
this.L1C.AutoSize = true;
this.L1C.Location = new System.Drawing.Point(92, 81);
this.L1C.Name = "L1C";
this.L1C.Size = new System.Drawing.Size(14, 13);
this.L1C.TabIndex = 32;
this.L1C.Text = "X";
//
// L14
//
this.L14.AutoSize = true;
this.L14.Location = new System.Drawing.Point(92, 59);
this.L14.Name = "L14";
this.L14.Size = new System.Drawing.Size(14, 13);
this.L14.TabIndex = 31;
this.L14.Text = "X";
//
// f2_Text
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(179, 107);
this.Controls.Add(this.L1D);
this.Controls.Add(this.L15);
this.Controls.Add(this.L1C);
this.Controls.Add(this.L14);
this.Controls.Add(this.L1B);
this.Controls.Add(this.L13);
this.Controls.Add(this.L1A);
this.Controls.Add(this.L12);
this.Controls.Add(this.L0B);
this.Controls.Add(this.L03);
this.Controls.Add(this.L0A);
this.Controls.Add(this.L02);
this.Controls.Add(this.L09);
this.Controls.Add(this.L01);
this.Controls.Add(this.L08);
this.Controls.Add(this.L00);
this.Controls.Add(this.L19);
this.Controls.Add(this.L11);
this.Controls.Add(this.L18);
this.Controls.Add(this.L10);
this.Controls.Add(this.L1F);
this.Controls.Add(this.L17);
this.Controls.Add(this.L1E);
this.Controls.Add(this.L16);
this.Controls.Add(this.L0F);
this.Controls.Add(this.L07);
this.Controls.Add(this.L0E);
this.Controls.Add(this.L06);
this.Controls.Add(this.L0D);
this.Controls.Add(this.L05);
this.Controls.Add(this.L0C);
this.Controls.Add(this.L04);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "f2_Text";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Special Characters";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label L04;
private System.Windows.Forms.Label L0C;
private System.Windows.Forms.Label L0D;
private System.Windows.Forms.Label L05;
private System.Windows.Forms.Label L0E;
private System.Windows.Forms.Label L06;
private System.Windows.Forms.Label L0F;
private System.Windows.Forms.Label L07;
private System.Windows.Forms.Label L1E;
private System.Windows.Forms.Label L16;
private System.Windows.Forms.Label L1F;
private System.Windows.Forms.Label L17;
private System.Windows.Forms.Label L18;
private System.Windows.Forms.Label L10;
private System.Windows.Forms.Label L19;
private System.Windows.Forms.Label L11;
private System.Windows.Forms.Label L0B;
private System.Windows.Forms.Label L03;
private System.Windows.Forms.Label L0A;
private System.Windows.Forms.Label L02;
private System.Windows.Forms.Label L09;
private System.Windows.Forms.Label L01;
private System.Windows.Forms.Label L08;
private System.Windows.Forms.Label L00;
private System.Windows.Forms.Label L1B;
private System.Windows.Forms.Label L13;
private System.Windows.Forms.Label L1A;
private System.Windows.Forms.Label L12;
private System.Windows.Forms.Label L1D;
private System.Windows.Forms.Label L15;
private System.Windows.Forms.Label L1C;
private System.Windows.Forms.Label L14;
}
}

51
PKX/f2-Text.cs Normal file
View file

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace PKHeX
{
public partial class f2_Text : Form
{
public f2_Text(TextBox TB_NN)
{
this.Hide();
InitializeComponent();
TB_Nickname = TB_NN;
Font pkxFont = PKX.getPKXFont(12F);
Label[] lbla = new Label[]
{
L00, L01, L02, L03, L04, L05, L06, L07,
L08, L09, L0A, L0B, L0C, L0D, L0E, L0F,
L10, L11, L12, L13, L14, L15, L16, L17,
L18, L19, L1A, L1B, L1C, L1D, L1E, L1F,
};
ushort[] chars = new ushort[]
{
0xE081, 0xE082, 0xE083, 0xE084, 0xE085, 0xE086, 0xE087, 0xE08D,
0xE08E, 0xE08F, 0xE090, 0xE091, 0xE092, 0xE093, 0xE094, 0xE095,
0xE096, 0xE097, 0xE098, 0xE099, 0xE09A, 0xE09B, 0xE09C, 0xE09D,
0xE09E, 0xE09F, 0xE0A0, 0xE0A1, 0xE0A2, 0xE0A3, 0xE0A4, 0xE0A5,
};
for (int i = 0; i < 32; i++)
{
lbla[i].Font = pkxFont;
lbla[i].Text = Convert.ToChar(chars[i]).ToString();
lbla[i].Click += new EventHandler(OnClick);
}
this.CenterToParent();
this.Show();
}
TextBox TB_Nickname;
private void OnClick(object sender, EventArgs e)
{
string nickname = TB_Nickname.Text;
if (nickname.Length < TB_Nickname.MaxLength)
TB_Nickname.Text += (sender as Label).Text;
}
}
}

216
PKX/f2-Text.resx Normal file
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

@ -3,6 +3,8 @@
// Main Window
Right Click on Nickname/Nickname box to bring up the ingame-special characters.
Control + Click on...
Randomize IVs: Set all IVs to max.
Randomize EVs: Set all EVs to 0.