PKHeX/PKX/f3-MemoryAmie.cs
Kurt 076a8b369d Memory Editor uses pk6 object & bugfixes
Eggs cannot have memories, and have all edits disabled.
When a pk6 is saved, memories will be cleared if they should not be
present.

Fixed empty regions showing up with data
Fixed not being able to edit the first georegion for an untraded Pokemon

All lock-outs for editing should be correct now.
2015-09-28 21:11:03 -07:00

475 lines
No EOL
24 KiB
C#

using System;
using System.Windows.Forms;
namespace PKHeX
{
public partial class MemoryAmie : Form
{
private string disabled;
private string notleft;
private string ot;
private string past;
private string withOT; // these get replaced when the form is translated.
private string[] vartypes = new string[5];
public MemoryAmie() // Keeping the form reference as a lot of control elements are required to operate.
{
InitializeComponent();
CB_Country0.DisplayMember = CB_Country1.DisplayMember = CB_Country2.DisplayMember = CB_Country3.DisplayMember = CB_Country4.DisplayMember = "Text";
CB_Country0.ValueMember = CB_Country1.ValueMember = CB_Country2.ValueMember = CB_Country3.ValueMember = CB_Country4.ValueMember = "Value";
CB_Region0.DisplayMember = CB_Region1.DisplayMember = CB_Region2.DisplayMember = CB_Region3.DisplayMember = CB_Region4.DisplayMember = "Text";
CB_Region0.ValueMember = CB_Region1.ValueMember = CB_Region2.ValueMember = CB_Region3.ValueMember = CB_Region4.ValueMember = "Value";
Util.TranslateInterface(this, Main.curlanguage);
string[] arguments = L_Arguments.Text.Split(new[] {" ; "}, StringSplitOptions.None);
for (int i = 5; i < Math.Min(arguments.Length, vartypes.Length + 5); i++)
{
if (arguments[i] == null) continue;
vartypes[i - 5] = arguments[i] + ":";
}
try
{
disabled = arguments[0];
notleft = arguments[1];
ot = arguments[2];
past = arguments[3];
withOT = arguments[4];
}
catch
{
disabled = "Disabled";
notleft = "Never left";
ot = "OT";
past = "Past Gen";
withOT = "Memories with";
}
getCountries();
getLangStrings();
loadFields();
}
public string[] feeling;
public string[] quality;
bool init;
// Load/Save Actions
private void loadFields()
{
// Load the region/country values.
CB_Country0.SelectedValue = Main.pk6.Geo1_Country;
CB_Country1.SelectedValue = Main.pk6.Geo2_Country;
CB_Country2.SelectedValue = Main.pk6.Geo3_Country;
CB_Country3.SelectedValue = Main.pk6.Geo4_Country;
CB_Country4.SelectedValue = Main.pk6.Geo5_Country;
CB_Region0.SelectedValue = Main.pk6.Geo1_Region;
CB_Region1.SelectedValue = Main.pk6.Geo2_Region;
CB_Region2.SelectedValue = Main.pk6.Geo3_Region;
CB_Region3.SelectedValue = Main.pk6.Geo4_Region;
CB_Region4.SelectedValue = Main.pk6.Geo5_Region;
// Load the Fullness, and Enjoyment
M_Fullness.Text = Main.pk6.Fullness.ToString();
M_Enjoyment.Text = Main.pk6.Enjoyment.ToString();
// Load the CT Memories
M_CT_Friendship.Text = Main.pk6.HT_Friendship.ToString();
M_CT_Affection.Text = Main.pk6.HT_Affection.ToString();
CB_CTQual.SelectedIndex = Math.Max(0, Main.pk6.HT_Intensity - 1);
CB_CTMemory.SelectedValue = Main.pk6.HT_Memory;
CB_CTVar.SelectedValue = Main.pk6.HT_TextVar;
CB_CTFeel.SelectedIndex = Main.pk6.HT_Feeling;
// Load the OT Memories
M_OT_Friendship.Text = Main.pk6.OT_Friendship.ToString();
M_OT_Affection.Text = Main.pk6.OT_Affection.ToString();
CB_OTQual.SelectedIndex = Math.Max(0, Main.pk6.OT_Intensity - 1);
CB_OTMemory.SelectedValue = Main.pk6.OT_Memory;
CB_OTVar.SelectedValue = Main.pk6.OT_TextVar;
CB_OTFeel.SelectedIndex = Main.pk6.OT_Feeling;
CB_Handler.Items.Clear();
CB_Handler.Items.AddRange(new object[] { Main.pk6.OT_Name + " (" + ot + ")" });
if (Util.TrimFromZero(Main.pk6.HT_Name) != "")
CB_Handler.Items.AddRange(new object[] { Main.pk6.HT_Name });
else
Main.pk6.CurrentHandler = 0;
tabControl1.SelectedIndex = CB_Handler.SelectedIndex = Main.pk6.CurrentHandler;
GB_M_OT.Enabled = GB_M_CT.Enabled = GB_Residence.Enabled =
BTN_Save.Enabled = M_Fullness.Enabled = M_Enjoyment.Enabled =
L_Fullness.Enabled = L_Enjoyment.Enabled = (!Main.pk6.IsEgg);
GB_M_OT.Text = (Main.pk6.IsEgg) ? "N/A: " + Main.eggname : String.Format(withOT + " (" + ot + ")", Main.pk6.OT_Name);
GB_M_CT.Text = (Main.pk6.IsEgg) ? "N/A: " + Main.eggname : GB_M_CT.Text = String.Format(withOT, Main.pk6.HT_Name);
if ((!Main.pk6.IsEgg))
{
bool enable;
int game = Main.pk6.Version;
if ((game < 24) && (game != 0))
{
// Banked Mon
GB_M_CT.Text = withOT + " " + Main.pk6.HT_Name;
GB_M_OT.Text = past + " " + ot + ": " + Main.pk6.OT_Name;
enable = false;
}
else
{
enable = true;
GB_M_OT.Text = withOT + " " + Main.pk6.OT_Name + " (" + ot + ")";
GB_M_CT.Text = withOT + Main.pk6.HT_Name;
if ((Main.pk6.HT_Name == ""))
{
CB_Country1.Enabled = CB_Country2.Enabled = CB_Country3.Enabled = CB_Country4.Enabled =
CB_Region1.Enabled = CB_Region2.Enabled = CB_Region3.Enabled = CB_Region4.Enabled =
GB_M_CT.Enabled = false;
GB_M_CT.Text = notleft + " " + ot + " - " + disabled;
}
else
GB_M_CT.Text = withOT + " " + Main.pk6.HT_Name;
}
RTB_OT.Visible = CB_OTQual.Enabled = CB_OTMemory.Enabled = CB_OTFeel.Enabled = CB_OTVar.Enabled = M_OT_Affection.Enabled = enable;
}
init = true;
// Manually load the Memory Parse
RTB_CT.Text = getMemoryString(CB_CTMemory, CB_CTVar, CB_CTQual, CB_CTFeel, Main.pk6.HT_Name);
RTB_OT.Text = getMemoryString(CB_OTMemory, CB_OTVar, CB_OTQual, CB_OTFeel, Main.pk6.OT_Name);
}
private void saveFields()
{
// Save Region & Country Data
Main.pk6.Geo1_Region = Util.getIndex(CB_Region0);
Main.pk6.Geo2_Region = Util.getIndex(CB_Region1);
Main.pk6.Geo3_Region = Util.getIndex(CB_Region2);
Main.pk6.Geo4_Region = Util.getIndex(CB_Region3);
Main.pk6.Geo5_Region = Util.getIndex(CB_Region4);
Main.pk6.Geo1_Country = Util.getIndex(CB_Country0);
Main.pk6.Geo2_Country = Util.getIndex(CB_Country1);
Main.pk6.Geo3_Country = Util.getIndex(CB_Country2);
Main.pk6.Geo4_Country = Util.getIndex(CB_Country3);
Main.pk6.Geo5_Country = Util.getIndex(CB_Country4);
// Save 0-255 stats
Main.pk6.HT_Friendship = Util.ToInt32(M_CT_Friendship);
Main.pk6.HT_Affection = Util.ToInt32(M_CT_Affection);
Main.pk6.OT_Friendship = Util.ToInt32(M_OT_Friendship);
Main.pk6.OT_Affection = Util.ToInt32(M_OT_Affection);
Main.pk6.Fullness = (byte)Util.ToInt32(M_Fullness);
Main.pk6.Enjoyment = (byte)Util.ToInt32(M_Enjoyment);
// Save Memories
Main.pk6.HT_Memory = Util.getIndex(CB_CTMemory);
Main.pk6.HT_TextVar = (CB_CTVar.Enabled) ? Util.getIndex(CB_CTVar) : 0;
Main.pk6.HT_Intensity = (CB_CTFeel.Enabled) ? CB_CTQual.SelectedIndex + 1 : 0;
Main.pk6.HT_Feeling = (CB_CTFeel.Enabled) ? Util.getIndex(CB_CTFeel) : 0;
Main.pk6.OT_Memory = Util.getIndex(CB_OTMemory);
Main.pk6.OT_TextVar = (CB_OTVar.Enabled) ? Util.getIndex(CB_OTVar) : 0;
Main.pk6.OT_Intensity = (CB_OTFeel.Enabled) ? CB_OTQual.SelectedIndex + 1 : 0;
Main.pk6.OT_Feeling = (CB_OTFeel.Enabled) ? Util.getIndex(CB_OTFeel) : 0;
}
// Event Actions
private void B_Save_Click(object sender, EventArgs e)
{
saveFields();
Close();
} // Button: Save pressed.
private void B_Cancel_Click(object sender, EventArgs e)
{
Close();
} // Button: Cancel pressed.
private void getCountries()
{
ComboBox[] cba = { CB_Country0, CB_Country1, CB_Country2, CB_Country3, CB_Country4, };
foreach (ComboBox comboBox in cba)
{
comboBox.DisplayMember = "Text";
comboBox.ValueMember = "Value";
Main.setCountrySubRegion(comboBox, "countries");
}
}
private void getLangStrings()
{
// Memory Chooser
int memorycount = Main.memories.Length - 38;
string[] memories = new string[memorycount];
int[] allowed = new int[memorycount];
for (int i = 0; i < memorycount; i++)
{
memories[i] = Main.memories[38 + i];
allowed[i] = i + 1;
}
Array.Resize(ref allowed, allowed.Length - 1);
var memory_list1 = Util.getCBList(new[] { memories[0] }, null);
var memory_list = Util.getOffsetCBList(memory_list1, memories, 0, allowed);
CB_OTMemory.DisplayMember = "Text";
CB_OTMemory.ValueMember = "Value";
CB_OTMemory.DataSource = memory_list;
CB_CTMemory.DisplayMember = "Text";
CB_CTMemory.ValueMember = "Value";
CB_CTMemory.DataSource = new BindingSource(memory_list, null);
// Quality Chooser
CB_CTQual.Items.Clear();
CB_OTQual.Items.Clear();
for (int i = 0; i < 7; i++)
{
CB_CTQual.Items.Add(Main.memories[2 + i]);
CB_OTQual.Items.Add(Main.memories[2 + i]);
}
// Feeling Chooser
CB_CTFeel.Items.Clear();
CB_OTFeel.Items.Clear();
for (int i = 0; i < 24; i++)
{
CB_CTFeel.Items.Add(Main.memories[10 + i]);
CB_OTFeel.Items.Add(Main.memories[10 + i]);
}
}
private void getMemoryArguments(string ARG, ComboBox sender)
{
var argvals = Util.getCBList(new[] { "" }, null);
string vs = "";
bool enabled = true;
switch (ARG)
{
case "NONE":
enabled = false;
vs = "";
break;
case "PKM":
argvals = Util.getCBList(Main.specieslist, null);
vs = vartypes[0];
break;
case "GENLOC":
argvals = Util.getCBList(Main.genloc, null);
vs = vartypes[1];
break;
case "ITEM":
{
#region Items
int[] items_allowed =
{
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
100,101,102,103,104,105,106,107,108,109,110,111,112,116,117,118,119,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,
150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,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,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,
250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,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,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,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,
400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,
450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,
500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,
550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,
600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,
650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,
700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,
/* ORAS */
718,719,720,737,738,739,740,741,742,752,753,754,755,756,757,758,759,760,761,762,763,764,765,767,768, 769,770,775
};
var item_list = Util.getCBList(Main.itemlist, items_allowed);
#endregion
argvals = item_list;
vs = vartypes[2];
}
break;
case "MOVE":
argvals = Util.getCBList(Main.movelist, null);
vs = vartypes[3];
break;
case "LOCATION":
argvals = Util.getCBList(Main.metXY_00000, Legal.Met_XY_0);
vs = vartypes[4];
break;
}
if (sender == CB_CTMemory)
{
CB_CTVar.DisplayMember = "Text";
CB_CTVar.ValueMember = "Value";
CB_CTVar.DataSource = argvals;
LCTV.Text = vs;
LCTV.Visible = CB_CTVar.Visible = CB_CTVar.Enabled = enabled;
}
else
{
CB_OTVar.DisplayMember = "Text";
CB_OTVar.ValueMember = "Value";
CB_OTVar.DataSource = argvals;
LOTV.Text = vs;
LOTV.Visible = CB_OTVar.Visible = CB_OTVar.Enabled = enabled;
}
}
private string getMemoryString(ComboBox m, ComboBox arg, ComboBox q, ComboBox f, string tr)
{
string result;
string nn = Main.pk6.Nickname;
string a = ((Util.cbItem)(arg.SelectedItem) == null) ? arg.Text ?? "ERROR" : ((Util.cbItem)(arg.SelectedItem)).Text;
int mem = Util.getIndex(m);
bool enabled = false;
if (mem == 0)
result = Main.memories[38];
else
{
result = String.Format(Main.memories[mem + 38], nn, tr, a, f.Text, q.Text);
enabled = true;
}
// Show labels if the memory allows for them.
if (q == CB_CTQual)
L_CT_Quality.Visible = L_CT_Feeling.Visible = enabled;
else
L_OT_Quality.Visible = L_OT_Feeling.Visible = enabled;
// Show Quality and Feeling.
q.Visible = q.Enabled = f.Visible = f.Enabled = enabled;
return result;
}
private void changeMemory(object sender, EventArgs e)
{
ComboBox m = (ComboBox)sender;
if (m == CB_CTMemory || m == CB_OTMemory)
{
int memory = Util.getIndex(m);
switch (memory) // Memory Case Switchtable
{
case 0: getMemoryArguments("NONE", m); break;
case 1: getMemoryArguments("GENLOC", m); break;
case 2: getMemoryArguments("GENLOC", m); break;
case 3: getMemoryArguments("GENLOC", m); break;
case 4: getMemoryArguments("GENLOC", m); break;
case 5: getMemoryArguments("ITEM", m); break;
case 6: getMemoryArguments("LOCATION", m); break;
case 7: getMemoryArguments("PKM", m); break;
case 8: getMemoryArguments("NONE", m); break;
case 9: getMemoryArguments("PKM", m); break;
case 10: getMemoryArguments("NONE", m); break;
case 11: getMemoryArguments("NONE", m); break;
case 12: getMemoryArguments("MOVE", m); break;
case 13: getMemoryArguments("PKM", m); break;
case 14: getMemoryArguments("PKM", m); break;
case 15: getMemoryArguments("ITEM", m); break;
case 16: getMemoryArguments("MOVE", m); break;
case 17: getMemoryArguments("PKM", m); break;
case 18: getMemoryArguments("PKM", m); break;
case 19: getMemoryArguments("GENLOC", m); break;
case 20: getMemoryArguments("NONE", m); break;
case 21: getMemoryArguments("PKM", m); break;
case 22: getMemoryArguments("NONE", m); break;
case 23: getMemoryArguments("NONE", m); break;
case 24: getMemoryArguments("GENLOC", m); break;
case 25: getMemoryArguments("PKM", m); break;
case 26: getMemoryArguments("ITEM", m); break;
case 27: getMemoryArguments("NONE", m); break;
case 28: getMemoryArguments("NONE", m); break;
case 29: getMemoryArguments("PKM", m); break;
case 30: getMemoryArguments("NONE", m); break;
case 31: getMemoryArguments("GENLOC", m); break;
case 32: getMemoryArguments("GENLOC", m); break;
case 33: getMemoryArguments("GENLOC", m); break;
case 34: getMemoryArguments("ITEM", m); break;
case 35: getMemoryArguments("GENLOC", m); break;
case 36: getMemoryArguments("GENLOC", m); break;
case 37: getMemoryArguments("GENLOC", m); break;
case 38: getMemoryArguments("GENLOC", m); break;
case 39: getMemoryArguments("GENLOC", m); break;
case 40: getMemoryArguments("ITEM", m); break;
case 41: getMemoryArguments("NONE", m); break;
case 42: getMemoryArguments("GENLOC", m); break;
case 43: getMemoryArguments("NONE", m); break;
case 44: getMemoryArguments("PKM", m); break;
case 45: getMemoryArguments("PKM", m); break;
case 46: getMemoryArguments("NONE", m); break;
case 47: getMemoryArguments("NONE", m); break;
case 48: getMemoryArguments("MOVE", m); break;
case 49: getMemoryArguments("MOVE", m); break;
case 50: getMemoryArguments("PKM", m); break;
case 51: getMemoryArguments("ITEM", m); break;
case 52: getMemoryArguments("GENLOC", m); break;
case 53: getMemoryArguments("NONE", m); break;
case 54: getMemoryArguments("NONE", m); break;
case 55: getMemoryArguments("NONE", m); break;
case 56: getMemoryArguments("NONE", m); break;
case 57: getMemoryArguments("NONE", m); break;
case 58: getMemoryArguments("NONE", m); break;
case 59: getMemoryArguments("GENLOC", m); break;
case 60: getMemoryArguments("PKM", m); break;
case 61: getMemoryArguments("NONE", m); break;
case 62: getMemoryArguments("NONE", m); break;
case 63: getMemoryArguments("NONE", m); break;
case 64: getMemoryArguments("NONE", m); break;
default: getMemoryArguments("NONE", m); break;
}
}
if (!init) return;
RTB_OT.Text = getMemoryString(CB_OTMemory, CB_OTVar, CB_OTQual, CB_OTFeel, Main.pk6.OT_Name);
RTB_CT.Text = getMemoryString(CB_CTMemory, CB_CTVar, CB_CTQual, CB_CTFeel, Main.pk6.HT_Name);
}
private void changeCountryIndex(object sender, EventArgs e)
{
ComboBox[] cba = { CB_Country0, CB_Country1, CB_Country2, CB_Country3, CB_Country4 };
ComboBox[] mta = { CB_Region0, CB_Region1, CB_Region2, CB_Region3, CB_Region4, };
int index = Array.IndexOf(cba, sender as ComboBox);
if (Util.getIndex(sender as ComboBox) > 0)
{
Main.setCountrySubRegion(mta[index], "sr_" + Util.getIndex(sender as ComboBox).ToString("000"));
mta[index].Enabled = true;
}
else
{
mta[index].DataSource = new[] { new { Text = "", Value = 0 } };
mta[index].Enabled = false;
mta[index].SelectedValue = 0;
}
}
private void changeCountryText(object sender, EventArgs e)
{
if ((sender as ComboBox).Text == "")
{
(sender as ComboBox).SelectedValue = 0;
changeCountryIndex(sender, e);
}
}
private void update255_MTB(object sender, EventArgs e)
{
MaskedTextBox mtb = sender as MaskedTextBox;
try
{
int val = Util.ToInt32(mtb.Text);
if (val > 255) mtb.Text = "255";
}
catch { mtb.Text = "0"; }
}
private void clickResetLocation(object sender, EventArgs e)
{
Label[] senderarr = { L_Geo0, L_Geo1, L_Geo2, L_Geo3, L_Geo4, };
ComboBox[] cba = { CB_Country0, CB_Country1, CB_Country2, CB_Country3, CB_Country4, };
ComboBox[] mta = { CB_Region0, CB_Region1, CB_Region2, CB_Region3, CB_Region4, };
int index = Array.IndexOf(senderarr, sender as Label);
cba[index].SelectedValue = 0;
mta[index].DisplayMember = "Text";
mta[index].ValueMember = "Value";
mta[index].DataSource = new[] { new { Text = "", Value = 0 } };
mta[index].SelectedValue = 0;
}
}
}