diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index d5b27fecc..bda6591cb 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -300,7 +300,6 @@ private void loadConfig(out bool BAKprompt, out bool showChangelog, out int lang BAKprompt = Settings.BAKPrompt = true; Settings.Version = Resources.ProgramVersion; - Settings.Save(); } // Main Menu Strip UI Functions private void mainMenuOpen(object sender, EventArgs e) @@ -1345,17 +1344,17 @@ private void InitializeFields() } private void TemplateFields() { - CB_Species.SelectedValue = SAV.MaxSpeciesID; + CB_GameOrigin.SelectedIndex = 0; CB_Move1.SelectedValue = 1; TB_OT.Text = "PKHeX"; TB_TID.Text = 12345.ToString(); TB_SID.Text = 54321.ToString(); - CB_GameOrigin.SelectedIndex = 0; int curlang = Array.IndexOf(GameInfo.lang_val, curlanguage); CB_Language.SelectedIndex = curlang > CB_Language.Items.Count - 1 ? 1 : curlang; CB_Ball.SelectedIndex = Math.Min(0, CB_Ball.Items.Count - 1); CB_Country.SelectedIndex = Math.Min(0, CB_Country.Items.Count - 1); CAL_MetDate.Value = CAL_EggDate.Value = DateTime.Today; + CB_Species.SelectedValue = SAV.MaxSpeciesID; CHK_Nicknamed.Checked = false; } private void InitializeLanguage() @@ -2515,9 +2514,9 @@ private void updateNickname(object sender, EventArgs e) if (fieldsInitialized && ModifierKeys == Keys.Alt && sender != null) // Export Showdown { clickShowdownExportPKM(sender, e); return; } + int lang = WinFormsUtil.getIndex(CB_Language); if (sender == CB_Language || sender == CHK_Nicknamed) { - int lang = WinFormsUtil.getIndex(CB_Language); switch (lang) { case 9: @@ -2536,24 +2535,20 @@ private void updateNickname(object sender, EventArgs e) // Fetch Current Species and set it as Nickname Text int species = WinFormsUtil.getIndex(CB_Species); if (species < 1 || species > SAV.MaxSpeciesID) - TB_Nickname.Text = ""; - else - { - // get language - int lang = WinFormsUtil.getIndex(CB_Language); - if (CHK_IsEgg.Checked) species = 0; // Set species to 0 to get the egg name. - string nick = PKX.getSpeciesName(CHK_IsEgg.Checked ? 0 : species, lang); + { TB_Nickname.Text = ""; return; } + + if (CHK_IsEgg.Checked) + species = 0; // get the egg name. - if (SAV.Generation < 5) // All caps GenIV and previous - nick = nick.ToUpper(); - if (SAV.Generation < 3) - nick = nick.Replace(" ", ""); - TB_Nickname.Text = nick; - if (SAV.Generation == 1) - ((PK1)pkm).setNotNicknamed(); - if (SAV.Generation == 2) - ((PK2)pkm).setNotNicknamed(); - } + // If name is that of another language, don't replace the nickname + if (species != 0 && !PKX.getIsNicknamedAnyLanguage(species, SAV.Generation, TB_Nickname.Text)) + return; + + TB_Nickname.Text = PKX.getSpeciesNameGeneration(species, lang, SAV.Generation); + if (SAV.Generation == 1) + ((PK1) pkm).setNotNicknamed(); + if (SAV.Generation == 2) + ((PK2) pkm).setNotNicknamed(); } private void updateNicknameClick(object sender, MouseEventArgs e) { @@ -3603,25 +3598,19 @@ private void updateIsNicknamed(object sender, EventArgs e) if (!fieldsLoaded) return; - if (!CHK_Nicknamed.Checked) - { - int species = WinFormsUtil.getIndex(CB_Species); - if (species < 1 || species > SAV.MaxSpeciesID) - return; - int lang = WinFormsUtil.getIndex(CB_Language); - if (CHK_IsEgg.Checked) species = 0; // Set species to 0 to get the egg name. - string nick = PKX.getSpeciesName(CHK_IsEgg.Checked ? 0 : species, lang); + pkm.Nickname = TB_Nickname.Text; + if (CHK_Nicknamed.Checked) + return; - if (SAV.Generation < 5) // All caps GenIV and previous - nick = nick.ToUpper(); - if (SAV.Generation < 3) - nick = nick.Replace(" ", ""); - if (TB_Nickname.Text != nick) - { - CHK_Nicknamed.Checked = true; - pkm.Nickname = TB_Nickname.Text; - } - } + int species = WinFormsUtil.getIndex(CB_Species); + if (species < 1 || species > SAV.MaxSpeciesID) + return; + + if (CHK_IsEgg.Checked) + species = 0; // get the egg name. + + if (PKX.getIsNicknamedAnyLanguage(species, SAV.Generation, TB_Nickname.Text)) + CHK_Nicknamed.Checked = true; } // Generic Subfunctions // diff --git a/PKHeX/PKM/PKX.cs b/PKHeX/PKM/PKX.cs index 8b829b5ce..766783525 100644 --- a/PKHeX/PKM/PKX.cs +++ b/PKHeX/PKM/PKX.cs @@ -53,13 +53,7 @@ public static bool getIsPKM(long len) SIZE_6STORED, SIZE_6PARTY }.Contains((int)len); } - - // C# PKX Function Library - // No WinForm object related code, only to calculate information. - // May require re-referencing to main form for string array referencing. - // Relies on Util for some common operations. - - // Data + public static uint LCRNG(uint seed) { const uint a = 0x41C64E6D; @@ -198,13 +192,37 @@ public static uint LCRNG(ref uint seed) public static string getSpeciesName(int species, int lang) { - try { return SpeciesLang[lang][species]; } - catch { return ""; } + if (lang < 0 || SpeciesLang.Length <= lang) + return ""; + if (species < 0 || SpeciesLang[0].Length <= species) + return ""; + + return SpeciesLang[lang][species]; } public static bool getIsNicknamed(int species, string nick) { - try { return SpeciesLang.All(list => list[species].ToUpper() != nick); } - catch { return false; } + if (species < 0 || SpeciesLang[0].Length <= species) + return false; + + return SpeciesLang.All(list => list[species].ToUpper() != nick); + } + public static string getSpeciesNameGeneration(int species, int lang, int generation) + { + string nick = getSpeciesName(species, lang); + + if (generation < 5) // All caps GenIV and previous + nick = nick.ToUpper(); + if (generation < 3) + nick = nick.Replace(" ", ""); + return nick; + } + public static bool getIsNicknamedAnyLanguage(int species, int generation, string nick) + { + int len = SpeciesLang.Length; + for (int i = 0; i < len; i++) + if (getSpeciesNameGeneration(species, i, generation) == nick) + return false; + return true; } public static readonly PersonalTable Personal = PersonalTable.SM;