2014-06-28 21:22:05 +00:00
|
|
|
|
using System;
|
2015-03-11 04:18:35 +00:00
|
|
|
|
using System.Drawing;
|
2015-03-11 01:44:51 +00:00
|
|
|
|
using System.IO;
|
2015-03-11 04:18:35 +00:00
|
|
|
|
using System.Linq;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace PKHeX
|
|
|
|
|
{
|
|
|
|
|
public partial class SAV_Wondercard : Form
|
|
|
|
|
{
|
2015-09-21 03:34:09 +00:00
|
|
|
|
public SAV_Wondercard(byte[] wcdata = null)
|
2014-06-28 21:22:05 +00:00
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2015-09-21 03:34:09 +00:00
|
|
|
|
Util.TranslateInterface(this, Main.curlanguage);
|
2015-10-24 03:13:32 +00:00
|
|
|
|
sav = (byte[])Main.SAV.Data.Clone();
|
2015-12-18 05:15:40 +00:00
|
|
|
|
pba = new[]
|
|
|
|
|
{
|
|
|
|
|
PB_Card01, PB_Card02, PB_Card03, PB_Card04, PB_Card05, PB_Card06,
|
|
|
|
|
PB_Card07, PB_Card08, PB_Card09, PB_Card10, PB_Card11, PB_Card12,
|
|
|
|
|
PB_Card13, PB_Card14, PB_Card15, PB_Card16, PB_Card17, PB_Card18,
|
|
|
|
|
PB_Card19, PB_Card20, PB_Card21, PB_Card22, PB_Card23, PB_Card24,
|
|
|
|
|
};
|
|
|
|
|
|
2014-06-28 21:22:05 +00:00
|
|
|
|
populateWClist();
|
|
|
|
|
populateReceived();
|
|
|
|
|
|
|
|
|
|
LB_WCs.SelectedIndex = 0;
|
|
|
|
|
|
|
|
|
|
if (LB_Received.Items.Count > 0)
|
2014-12-10 23:24:34 +00:00
|
|
|
|
LB_Received.SelectedIndex = 0;
|
|
|
|
|
|
2015-03-11 01:44:51 +00:00
|
|
|
|
DragEnter += tabMain_DragEnter;
|
|
|
|
|
DragDrop += tabMain_DragDrop;
|
2015-04-01 00:58:23 +00:00
|
|
|
|
|
|
|
|
|
if (wcdata == null || wcdata.Length != 0x108) return; // No data to load
|
|
|
|
|
Array.Copy(wcdata, wondercard_data, wcdata.Length);
|
|
|
|
|
loadwcdata();
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
2015-09-21 03:34:09 +00:00
|
|
|
|
public byte[] sav;
|
2014-12-12 05:45:01 +00:00
|
|
|
|
public byte[] wondercard_data = new byte[0x108];
|
2015-09-21 03:34:09 +00:00
|
|
|
|
private const uint EonTicketConst = 0x225D73C2;
|
2015-12-18 05:15:40 +00:00
|
|
|
|
private PictureBox[] pba;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
|
|
|
|
|
// Repopulation Functions
|
|
|
|
|
private void populateWClist()
|
|
|
|
|
{
|
|
|
|
|
LB_WCs.Items.Clear();
|
|
|
|
|
for (int i = 0; i < 24; i++)
|
|
|
|
|
{
|
2015-10-24 03:13:32 +00:00
|
|
|
|
int offset = Main.SAV.WondercardData + i * 0x108;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
int cardID = BitConverter.ToUInt16(sav, offset);
|
|
|
|
|
if (cardID == 0)
|
2015-12-18 05:15:40 +00:00
|
|
|
|
{
|
2014-06-28 21:22:05 +00:00
|
|
|
|
LB_WCs.Items.Add((i + 1).ToString("00") + " - Empty");
|
2015-12-18 05:15:40 +00:00
|
|
|
|
pba[i].Image = null;
|
|
|
|
|
}
|
2014-06-28 21:22:05 +00:00
|
|
|
|
else
|
2015-12-18 05:15:40 +00:00
|
|
|
|
{
|
2014-06-28 21:22:05 +00:00
|
|
|
|
LB_WCs.Items.Add((i + 1).ToString("00") + " - " + cardID.ToString("0000"));
|
2015-12-18 05:15:40 +00:00
|
|
|
|
pba[i].Image = getWCPreviewImage(sav.Skip(Main.SAV.WondercardData + WC6.Size * i).Take(WC6.Size).ToArray());
|
|
|
|
|
}
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void loadwcdata()
|
|
|
|
|
{
|
2014-12-11 06:50:40 +00:00
|
|
|
|
try
|
2014-06-28 21:22:05 +00:00
|
|
|
|
{
|
2015-09-13 04:32:30 +00:00
|
|
|
|
if ((wondercard_data[0x52] & 2) != 0) // is used
|
|
|
|
|
{
|
|
|
|
|
if (DialogResult.Yes !=
|
|
|
|
|
Util.Prompt(MessageBoxButtons.YesNo,
|
2015-12-18 05:15:40 +00:00
|
|
|
|
"Wonder Card is marked as USED and will not be able to be picked up in-game.",
|
2015-09-13 04:32:30 +00:00
|
|
|
|
"Do you want to remove the USED flag so that it is UNUSED?"))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
wondercard_data[0x52] &= 0xFD; // keep all bits but bit1 (11111101)
|
|
|
|
|
}
|
2015-03-11 04:18:35 +00:00
|
|
|
|
RTB.Text = getWCDescriptionString(wondercard_data);
|
|
|
|
|
PB_Preview.Image = getWCPreviewImage(wondercard_data);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
2015-01-11 07:31:51 +00:00
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
2015-12-18 05:15:40 +00:00
|
|
|
|
Util.Error("Loading of data failed... is this really a Wonder Card?", e.ToString());
|
2015-01-11 07:31:51 +00:00
|
|
|
|
Array.Copy(new byte[0x108], wondercard_data, 0x108);
|
|
|
|
|
RTB.Clear();
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void populateReceived()
|
|
|
|
|
{
|
|
|
|
|
LB_Received.Items.Clear();
|
|
|
|
|
for (int i = 1; i < 2048; i++)
|
2015-10-24 03:13:32 +00:00
|
|
|
|
if ((((sav[Main.SAV.WondercardFlags + i / 8]) >> (i % 8)) & 0x1) == 1)
|
2014-06-28 21:22:05 +00:00
|
|
|
|
LB_Received.Items.Add(i.ToString("0000"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Wondercard IO (.wc6<->window)
|
|
|
|
|
private void B_Import_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2015-12-18 05:15:40 +00:00
|
|
|
|
OpenFileDialog importwc6 = new OpenFileDialog {Filter = "Wonder Card|*.wc6"};
|
2015-03-12 04:44:12 +00:00
|
|
|
|
if (importwc6.ShowDialog() != DialogResult.OK) return;
|
|
|
|
|
|
|
|
|
|
string path = importwc6.FileName;
|
2015-04-01 00:58:23 +00:00
|
|
|
|
if (new FileInfo(path).Length != 0x108)
|
2014-06-28 21:22:05 +00:00
|
|
|
|
{
|
2015-12-18 05:15:40 +00:00
|
|
|
|
Util.Error("File is not a Wonder Card:", path);
|
2015-03-12 04:44:12 +00:00
|
|
|
|
return;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
2015-03-12 04:44:12 +00:00
|
|
|
|
byte[] newwc6 = File.ReadAllBytes(path);
|
|
|
|
|
Array.Copy(newwc6, wondercard_data, newwc6.Length);
|
|
|
|
|
loadwcdata();
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
|
|
|
|
private void B_Output_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SaveFileDialog outputwc6 = new SaveFileDialog();
|
|
|
|
|
int cardID = BitConverter.ToUInt16(wondercard_data, 0);
|
|
|
|
|
string cardname = Encoding.Unicode.GetString(wondercard_data, 0x2, 0x48);
|
|
|
|
|
outputwc6.FileName = cardID + " - " + cardname + ".wc6";
|
2015-12-18 05:15:40 +00:00
|
|
|
|
outputwc6.Filter = "Wonder Card|*.wc6";
|
2015-03-12 04:44:12 +00:00
|
|
|
|
if (outputwc6.ShowDialog() != DialogResult.OK) return;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
|
2015-03-12 04:44:12 +00:00
|
|
|
|
string path = outputwc6.FileName;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
|
2015-03-12 04:44:12 +00:00
|
|
|
|
if (File.Exists(path))
|
|
|
|
|
{
|
|
|
|
|
// File already exists, save a .bak
|
|
|
|
|
byte[] backupfile = File.ReadAllBytes(path);
|
|
|
|
|
File.WriteAllBytes(path + ".bak", backupfile);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
2015-03-12 04:44:12 +00:00
|
|
|
|
|
|
|
|
|
File.WriteAllBytes(path, wondercard_data);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Wondercard RW (window<->sav)
|
|
|
|
|
private void B_SAV2WC(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
// Load Wondercard from Save File
|
|
|
|
|
int index = LB_WCs.SelectedIndex;
|
2015-10-24 03:13:32 +00:00
|
|
|
|
int offset = Main.SAV.WondercardData + index * 0x108;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
Array.Copy(sav, offset, wondercard_data, 0, 0x108);
|
|
|
|
|
loadwcdata();
|
|
|
|
|
}
|
|
|
|
|
private void B_WC2SAV(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
// Write Wondercard to Save File
|
|
|
|
|
int index = LB_WCs.SelectedIndex;
|
2015-10-24 03:13:32 +00:00
|
|
|
|
int offset = Main.SAV.WondercardData + index * 0x108;
|
|
|
|
|
if (Main.SAV.ORAS) // ORAS Only
|
2014-11-29 04:43:00 +00:00
|
|
|
|
if (BitConverter.ToUInt16(wondercard_data, 0) == 0x800) // Eon Ticket #
|
|
|
|
|
if (BitConverter.ToUInt16(wondercard_data, 0x68) == 0x2D6) // Eon Ticket
|
2015-10-24 03:13:32 +00:00
|
|
|
|
Array.Copy(BitConverter.GetBytes(EonTicketConst), 0, sav, Main.SAV.EonTicket, 4);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
Array.Copy(wondercard_data, 0, sav, offset, 0x108);
|
|
|
|
|
populateWClist();
|
|
|
|
|
int cardID = BitConverter.ToUInt16(wondercard_data, 0);
|
2014-11-21 23:34:10 +00:00
|
|
|
|
|
2015-03-12 04:44:12 +00:00
|
|
|
|
if (cardID <= 0 || cardID >= 0x100*8) return;
|
|
|
|
|
|
|
|
|
|
if (!LB_Received.Items.Contains(cardID.ToString("0000")))
|
|
|
|
|
LB_Received.Items.Add(cardID.ToString("0000"));
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
|
|
|
|
private void B_DeleteWC_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
int index = LB_WCs.SelectedIndex;
|
2015-10-24 03:13:32 +00:00
|
|
|
|
int offset = Main.SAV.WondercardData + index * 0x108;
|
2014-12-12 05:45:01 +00:00
|
|
|
|
byte[] zeros = new byte[0x108];
|
2014-06-28 21:22:05 +00:00
|
|
|
|
Array.Copy(zeros, 0, sav, offset, 0x108);
|
|
|
|
|
populateWClist();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Close Window
|
|
|
|
|
private void B_Cancel_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
private void B_Save_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2015-10-24 03:13:32 +00:00
|
|
|
|
int offset = Main.SAV.WondercardFlags;
|
2015-01-11 07:31:51 +00:00
|
|
|
|
|
2014-06-28 21:22:05 +00:00
|
|
|
|
// Make sure all of the Received Flags are flipped!
|
2015-01-11 07:31:51 +00:00
|
|
|
|
byte[] wcflags = new byte[0x100];
|
2015-03-11 04:18:35 +00:00
|
|
|
|
foreach (uint cardnum in from object card in LB_Received.Items
|
|
|
|
|
select card.ToString() into cardID
|
|
|
|
|
select Util.ToUInt32(cardID))
|
2015-01-11 07:31:51 +00:00
|
|
|
|
wcflags[(cardnum / 8) & 0xFF] |= (byte)(1 << ((byte)(cardnum & 0x7)));
|
2015-03-11 04:18:35 +00:00
|
|
|
|
|
2015-01-11 07:31:51 +00:00
|
|
|
|
Array.Copy(wcflags, 0, sav, offset, 0x100);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
|
2015-01-11 07:31:51 +00:00
|
|
|
|
offset += 0x100;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
// Make sure there's no space between wondercards
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 24; i++)
|
2015-01-11 07:31:51 +00:00
|
|
|
|
if (BitConverter.ToUInt16(sav, offset + i * 0x108) == 0)
|
|
|
|
|
for (int j = i + 1; j < 24 - i; j++) // Shift everything down
|
|
|
|
|
Array.Copy(sav, offset + j * 0x108, sav, offset + (j - 1) * 0x108, 0x108);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-10-24 03:13:32 +00:00
|
|
|
|
Array.Copy(sav, Main.SAV.Data, sav.Length);
|
2015-10-24 23:33:44 +00:00
|
|
|
|
Main.SAV.Edited = true;
|
2014-06-28 21:22:05 +00:00
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-11 06:50:40 +00:00
|
|
|
|
// Delete WC Flag
|
2014-06-28 21:22:05 +00:00
|
|
|
|
private void B_DeleteReceived_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2015-03-12 04:44:12 +00:00
|
|
|
|
if (LB_Received.SelectedIndex <= -1) return;
|
|
|
|
|
|
|
|
|
|
if (LB_Received.Items.Count > 0)
|
|
|
|
|
LB_Received.Items.Remove(LB_Received.Items[LB_Received.SelectedIndex]);
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
2014-12-10 23:24:34 +00:00
|
|
|
|
|
2014-12-11 06:50:40 +00:00
|
|
|
|
// Drag & Drop Wondercards
|
2014-12-10 23:24:34 +00:00
|
|
|
|
private void tabMain_DragEnter(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
|
|
|
|
|
}
|
|
|
|
|
private void tabMain_DragDrop(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
2015-01-11 07:31:51 +00:00
|
|
|
|
|
2015-01-31 23:59:23 +00:00
|
|
|
|
// Check for multiple wondercards
|
|
|
|
|
if (LB_WCs.SelectedIndex < 0) LB_WCs.SelectedIndex = 0;
|
|
|
|
|
int ctr = LB_WCs.SelectedIndex;
|
|
|
|
|
|
|
|
|
|
if (files.Length == 1)
|
2014-12-10 23:24:34 +00:00
|
|
|
|
{
|
2015-01-31 23:59:23 +00:00
|
|
|
|
string path = files[0]; // open first D&D
|
2015-04-01 00:58:23 +00:00
|
|
|
|
if (new FileInfo(path).Length != 0x108)
|
2015-01-31 23:59:23 +00:00
|
|
|
|
{
|
|
|
|
|
Util.Error("File is not a Wondercard:", path);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
byte[] newwc6 = File.ReadAllBytes(path);
|
|
|
|
|
Array.Copy(newwc6, wondercard_data, newwc6.Length);
|
|
|
|
|
loadwcdata();
|
|
|
|
|
}
|
|
|
|
|
else if (DialogResult.Yes == Util.Prompt(MessageBoxButtons.YesNo, String.Format("Try to load {0} Wondercards starting at Card {1}?", files.Length, ctr + 1)))
|
|
|
|
|
{
|
|
|
|
|
int i = 0;
|
|
|
|
|
while (i < files.Length && ctr < 24)
|
|
|
|
|
{
|
|
|
|
|
string path = files[i++]; // open first D&D
|
|
|
|
|
if (new FileInfo(path).Length != 0x108)
|
|
|
|
|
{ Util.Error("File is not a Wondercard:", path); continue; }
|
|
|
|
|
|
|
|
|
|
ctr++; // Load in WC
|
|
|
|
|
byte[] newwc6 = File.ReadAllBytes(path);
|
|
|
|
|
Array.Copy(newwc6, wondercard_data, newwc6.Length);
|
|
|
|
|
loadwcdata();
|
|
|
|
|
|
|
|
|
|
// Set in WC
|
|
|
|
|
B_DisplaytoWCSlot.PerformClick();
|
|
|
|
|
|
|
|
|
|
// Advance to next WC
|
|
|
|
|
if (ctr != 24) LB_WCs.SelectedIndex = ctr;
|
|
|
|
|
}
|
2014-12-10 23:24:34 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2015-03-11 04:18:35 +00:00
|
|
|
|
|
|
|
|
|
// String Creation
|
|
|
|
|
private string getWCDescriptionString(byte[] data)
|
|
|
|
|
{
|
|
|
|
|
// Load up the data according to the wiki!
|
|
|
|
|
int cardID = BitConverter.ToUInt16(data, 0);
|
|
|
|
|
if (cardID == 0) return "Empty Slot. No data!";
|
|
|
|
|
|
|
|
|
|
string cardname = Util.TrimFromZero(Encoding.Unicode.GetString(data, 0x2, 0x48));
|
|
|
|
|
int cardtype = data[0x51];
|
|
|
|
|
string s = "";
|
|
|
|
|
s += "Card #: " + cardID.ToString("0000") + " - " + cardname + Environment.NewLine;
|
|
|
|
|
|
|
|
|
|
if (cardtype == 1) // Item
|
|
|
|
|
{
|
|
|
|
|
int item = BitConverter.ToUInt16(data, 0x68);
|
|
|
|
|
int qty = BitConverter.ToUInt16(data, 0x70);
|
|
|
|
|
|
2015-09-21 03:34:09 +00:00
|
|
|
|
s += "Item: " + Main.itemlist[item] + Environment.NewLine + "Quantity: " + qty;
|
2015-03-11 04:18:35 +00:00
|
|
|
|
}
|
|
|
|
|
else if (cardtype == 0) // PKM
|
|
|
|
|
{
|
2015-12-18 05:15:40 +00:00
|
|
|
|
WC6 card = new WC6(data);
|
2015-03-11 04:18:35 +00:00
|
|
|
|
s += String.Format(
|
|
|
|
|
"{1} @ {2} --- {7} - {8}/{9}{0}" +
|
|
|
|
|
"{3} / {4} / {5} / {6}{0}",
|
|
|
|
|
Environment.NewLine,
|
2015-12-18 05:15:40 +00:00
|
|
|
|
Main.specieslist[card.Species],
|
|
|
|
|
Main.itemlist[card.HeldItem],
|
|
|
|
|
Main.movelist[card.Move1],
|
|
|
|
|
Main.movelist[card.Move2],
|
|
|
|
|
Main.movelist[card.Move3],
|
|
|
|
|
Main.movelist[card.Move4],
|
|
|
|
|
card.OT, card.TID.ToString("00000"), card.SID.ToString("00000"));
|
2015-03-11 04:18:35 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
s += "Unknown Wondercard Type!";
|
|
|
|
|
|
|
|
|
|
return s;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Image getWCPreviewImage(byte[] data)
|
|
|
|
|
{
|
|
|
|
|
Image img;
|
2015-04-30 07:01:17 +00:00
|
|
|
|
switch (data[0x51]) // Gift Type
|
2015-03-11 04:18:35 +00:00
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
ushort species = BitConverter.ToUInt16(data, 0x82);
|
2015-04-30 07:01:17 +00:00
|
|
|
|
byte form = data[0x84];
|
2015-03-11 04:18:35 +00:00
|
|
|
|
byte gender = data[0xA1];
|
|
|
|
|
ushort item = BitConverter.ToUInt16(data, 0x78);
|
2015-04-30 07:01:17 +00:00
|
|
|
|
bool isEgg = data[0xD1] == 1;
|
|
|
|
|
bool isShiny = data[0xA3] == 2;
|
|
|
|
|
img = PKX.getSprite(species, form, gender, item, isEgg, isShiny);
|
2015-03-11 04:18:35 +00:00
|
|
|
|
break;
|
|
|
|
|
case 1:
|
2015-04-05 17:48:18 +00:00
|
|
|
|
img = (Image)(Properties.Resources.ResourceManager.GetObject("item_" + BitConverter.ToUInt16(data, 0x68)) ?? Properties.Resources.unknown);
|
2015-03-11 04:18:35 +00:00
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
img = Properties.Resources.unknown;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return img;
|
|
|
|
|
}
|
|
|
|
|
private void L_QR_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (ModifierKeys == Keys.Alt)
|
|
|
|
|
{
|
2015-03-14 02:59:51 +00:00
|
|
|
|
byte[] wc = Util.getQRData();
|
|
|
|
|
|
|
|
|
|
if (wc.Length != 0x108) { Util.Alert("Decoded data not 0x108 bytes.", String.Format("QR Data Size: 0x{0}", wc.Length.ToString("X"))); }
|
|
|
|
|
else try
|
2015-03-11 04:18:35 +00:00
|
|
|
|
{
|
|
|
|
|
Array.Copy(wc, wondercard_data, wc.Length);
|
2015-03-14 02:59:51 +00:00
|
|
|
|
loadwcdata();
|
2015-03-11 04:18:35 +00:00
|
|
|
|
}
|
|
|
|
|
catch { Util.Alert("Error loading wondercard data."); }
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (wondercard_data.SequenceEqual((new byte[wondercard_data.Length])))
|
2015-09-21 03:34:09 +00:00
|
|
|
|
{ Util.Alert("No wondercard data found in loaded slot!"); return; }
|
2015-04-05 17:48:18 +00:00
|
|
|
|
if (BitConverter.ToUInt16(wondercard_data, 0x68) == 726 && wondercard_data[0x51] == 1)
|
|
|
|
|
{ Util.Alert("Eon Ticket Wondercards will not function properly", "Inject to the save file instead."); return; }
|
2015-03-11 04:18:35 +00:00
|
|
|
|
// Prep data
|
|
|
|
|
byte[] wcdata = wondercard_data;
|
|
|
|
|
// Ensure size
|
|
|
|
|
Array.Resize(ref wcdata, 0x108);
|
|
|
|
|
// Setup QR
|
|
|
|
|
const string server = "http://lunarcookies.github.io/wc.html#";
|
2015-03-14 02:59:51 +00:00
|
|
|
|
Image qr = Util.getQRImage(wcdata, server);
|
|
|
|
|
if (qr == null) return;
|
2015-03-11 04:18:35 +00:00
|
|
|
|
|
|
|
|
|
string desc = getWCDescriptionString(wondercard_data);
|
|
|
|
|
|
2015-03-14 02:59:51 +00:00
|
|
|
|
new QR(qr, PB_Preview.Image, desc, "", "", "PKHeX Wondercard @ ProjectPokemon.org").ShowDialog();
|
2015-03-11 04:18:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2015-12-18 05:15:40 +00:00
|
|
|
|
|
|
|
|
|
private void pbBoxSlot_MouseDown(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
switch (ModifierKeys)
|
|
|
|
|
{
|
|
|
|
|
case Keys.Control: clickView(sender, e); break;
|
|
|
|
|
case Keys.Shift: clickSet(sender, e); break;
|
|
|
|
|
case Keys.Alt: clickDelete(sender, e); break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void clickView(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string name = (sender is ToolStripItem)
|
|
|
|
|
? ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl.Name
|
|
|
|
|
: (sender as PictureBox).Name;
|
|
|
|
|
LB_WCs.SelectedIndex = Array.FindIndex(pba, p => p.Name == name);
|
|
|
|
|
B_WCSlottoDisplay.PerformClick();
|
|
|
|
|
}
|
|
|
|
|
private void clickSet(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string name = (sender is ToolStripItem)
|
|
|
|
|
? ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl.Name
|
|
|
|
|
: (sender as PictureBox).Name;
|
|
|
|
|
LB_WCs.SelectedIndex = Array.FindIndex(pba, p => p.Name == name);
|
|
|
|
|
B_DisplaytoWCSlot.PerformClick();
|
|
|
|
|
}
|
|
|
|
|
private void clickDelete(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string name = (sender is ToolStripItem)
|
|
|
|
|
? ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl.Name
|
|
|
|
|
: (sender as PictureBox).Name;
|
|
|
|
|
LB_WCs.SelectedIndex = Array.FindIndex(pba, p => p.Name == name);
|
|
|
|
|
B_DeleteWC.PerformClick();
|
|
|
|
|
}
|
2014-06-28 21:22:05 +00:00
|
|
|
|
}
|
2014-12-15 00:50:15 +00:00
|
|
|
|
}
|