From c3136187de9e013e9df40b58b5debc67f60ce837 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 4 Aug 2018 10:06:06 -0700 Subject: [PATCH] Style updates --- .../Controls/SAV Editor/SAVEditor.cs | 4 +- PKHeX.WinForms/Subforms/Misc/PKMPreview.cs | 37 ++++---- .../Subforms/Misc/SortableBindingList.cs | 2 + .../PKM Editors/SuperTrainingEditor.cs | 12 ++- PKHeX.WinForms/Subforms/ReportGrid.cs | 17 ++-- PKHeX.WinForms/Subforms/SAV_Database.cs | 45 +++++---- .../Save Editors/Gen1/SAV_EventReset1.cs | 3 +- .../Subforms/Save Editors/Gen3/SAV_Misc3.cs | 29 ++++-- .../Subforms/Save Editors/Gen3/SAV_RTC3.cs | 7 +- .../Subforms/Save Editors/Gen3/SAV_Roamer3.cs | 3 + .../Save Editors/Gen4/SAV_Apricorn.cs | 4 + .../Save Editors/Gen4/SAV_HoneyTree.cs | 6 ++ .../Subforms/Save Editors/Gen4/SAV_Misc4.cs | 87 ++++++++++++----- .../Save Editors/Gen4/SAV_Pokedex4.cs | 62 +++++++----- .../Save Editors/Gen4/SAV_Underground.cs | 2 +- .../Save Editors/Gen5/SAV_CGearSkin.cs | 5 + .../Subforms/Save Editors/Gen5/SAV_Misc5.cs | 62 ++++++++++-- .../Save Editors/Gen5/SAV_Pokedex5.cs | 65 ++++++++++--- .../Save Editors/Gen6/SAV_BerryFieldXY.cs | 21 +++-- .../Save Editors/Gen6/SAV_BoxLayout.cs | 11 +++ .../Save Editors/Gen6/SAV_HallOfFame.cs | 43 ++++++--- .../Subforms/Save Editors/Gen6/SAV_Link6.cs | 4 + .../Subforms/Save Editors/Gen6/SAV_OPower.cs | 3 + .../Save Editors/Gen6/SAV_PokeBlockORAS.cs | 10 +- .../Save Editors/Gen6/SAV_PokedexORAS.cs | 77 ++++++++++----- .../Save Editors/Gen6/SAV_PokedexXY.cs | 62 +++++++++--- .../Save Editors/Gen6/SAV_Pokepuff.cs | 10 +- .../Save Editors/Gen6/SAV_SecretBase.cs | 70 +++++++++----- .../Save Editors/Gen6/SAV_SuperTrain.cs | 36 ++++--- .../Subforms/Save Editors/Gen6/SAV_Trainer.cs | 43 +++++++-- .../Gen7/SAV_FestivalPlaza.Designer.cs | 2 +- .../Save Editors/Gen7/SAV_FestivalPlaza.cs | 94 ++++++++++++++----- .../Save Editors/Gen7/SAV_HallOfFame7.cs | 7 +- .../Save Editors/Gen7/SAV_Pokebean.cs | 3 + .../Save Editors/Gen7/SAV_PokedexSM.cs | 39 ++++++-- .../Save Editors/Gen7/SAV_Trainer7.cs | 56 ++++++++--- .../Save Editors/Gen7/SAV_ZygardeCell.cs | 14 ++- .../Subforms/Save Editors/SAV_BoxList.cs | 9 +- .../Subforms/Save Editors/SAV_EventFlags.cs | 65 ++++++++----- .../Subforms/Save Editors/SAV_GameSelect.cs | 4 + .../Subforms/Save Editors/SAV_Inventory.cs | 48 +++++++--- .../Subforms/Save Editors/SAV_MailBox.cs | 44 ++++++++- .../Save Editors/SAV_SimpleTrainer.cs | 6 ++ PKHeX.WinForms/Util/ImageUtil.cs | 6 +- PKHeX.WinForms/Util/WinFormsUtil.cs | 8 ++ 45 files changed, 926 insertions(+), 321 deletions(-) diff --git a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs index 32524cfab..345c88d19 100644 --- a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs +++ b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs @@ -1078,13 +1078,15 @@ namespace PKHeX.WinForms.Controls if (sav is SAV4BR br) { L_SaveSlot.Visible = CB_SaveSlot.Visible = true; - var list = br.SaveNames.Select((z, i) => new ComboItem { Text = z, Value = i }).ToList(); + var list = br.SaveNames.Select((z, i) => new ComboItem {Text = z, Value = i}).ToList(); CB_SaveSlot.InitializeBinding(); CB_SaveSlot.DataSource = new BindingSource(list, null); CB_SaveSlot.SelectedValue = br.CurrentSlot; } else + { L_SaveSlot.Visible = CB_SaveSlot.Visible = false; + } switch (sav.Generation) { diff --git a/PKHeX.WinForms/Subforms/Misc/PKMPreview.cs b/PKHeX.WinForms/Subforms/Misc/PKMPreview.cs index 9f0806355..01dc9aa91 100644 --- a/PKHeX.WinForms/Subforms/Misc/PKMPreview.cs +++ b/PKHeX.WinForms/Subforms/Misc/PKMPreview.cs @@ -11,17 +11,17 @@ namespace PKHeX.WinForms public string Position => pkm.Identifier; public Image Sprite => pkm.Sprite(); public string Nickname => pkm.Nickname; - public string Species => Get(GameInfo.Strings.specieslist, pkm.Species); - public string Nature => Get(GameInfo.Strings.natures, pkm.Nature); + public string Species => Get(Strings.specieslist, pkm.Species); + public string Nature => Get(Strings.natures, pkm.Nature); public string Gender => Get(Main.GenderSymbols, pkm.Gender); public string ESV => pkm.PSV.ToString("0000"); - public string HP_Type => Get(GameInfo.Strings.types, pkm.HPType + 1); - public string Ability => Get(GameInfo.Strings.abilitylist, pkm.Ability); - public string Move1 => Get(GameInfo.Strings.movelist, pkm.Move1); - public string Move2 => Get(GameInfo.Strings.movelist, pkm.Move2); - public string Move3 => Get(GameInfo.Strings.movelist, pkm.Move3); - public string Move4 => Get(GameInfo.Strings.movelist, pkm.Move4); - public string HeldItem => Get(GameInfo.Strings.itemlist, pkm.HeldItem); + public string HP_Type => Get(Strings.types, pkm.HPType + 1); + public string Ability => Get(Strings.abilitylist, pkm.Ability); + public string Move1 => Get(Strings.movelist, pkm.Move1); + public string Move2 => Get(Strings.movelist, pkm.Move2); + public string Move3 => Get(Strings.movelist, pkm.Move3); + public string Move4 => Get(Strings.movelist, pkm.Move4); + public string HeldItem => Get(Strings.itemlist, pkm.HeldItem); public string HP => Stats[0].ToString(); public string ATK => Stats[1].ToString(); public string DEF => Stats[2].ToString(); @@ -30,10 +30,10 @@ namespace PKHeX.WinForms public string SPE => Stats[3].ToString(); public string MetLoc => pkm.GetLocationString(eggmet: false); public string EggLoc => pkm.GetLocationString(eggmet: true); - public string Ball => Get(GameInfo.Strings.balllist, pkm.Ball); + public string Ball => Get(Strings.balllist, pkm.Ball); public string OT => pkm.OT_Name; - public string Version => Get(GameInfo.Strings.gamelist, pkm.Version); - public string OTLang => Get(GameInfo.Strings.gamelanguages, pkm.Language) ?? $"UNK {pkm.Language}"; + public string Version => Get(Strings.gamelist, pkm.Version); + public string OTLang => Get(Strings.gamelanguages, pkm.Language) ?? $"UNK {pkm.Language}"; public string Legal { get { var la = new LegalityAnalysis(pkm); return la.Parsed ? la.Valid.ToString() : "-"; } } public string CountryID => pkm.Format > 5 ? pkm.Country.ToString() : "N/A"; public string RegionID => pkm.Format > 5 ? pkm.Region.ToString() : "N/A"; @@ -90,10 +90,10 @@ namespace PKHeX.WinForms public int Move2_PPUp => pkm.Move2_PPUps; public int Move3_PPUp => pkm.Move3_PPUps; public int Move4_PPUp => pkm.Move4_PPUps; - public string Relearn1 => Get(GameInfo.Strings.movelist, pkm.RelearnMove1); - public string Relearn2 => Get(GameInfo.Strings.movelist, pkm.RelearnMove2); - public string Relearn3 => Get(GameInfo.Strings.movelist, pkm.RelearnMove3); - public string Relearn4 => Get(GameInfo.Strings.movelist, pkm.RelearnMove4); + public string Relearn1 => Get(Strings.movelist, pkm.RelearnMove1); + public string Relearn2 => Get(Strings.movelist, pkm.RelearnMove2); + public string Relearn3 => Get(Strings.movelist, pkm.RelearnMove3); + public string Relearn4 => Get(Strings.movelist, pkm.RelearnMove4); public ushort Checksum => pkm.Checksum; public int Friendship => pkm.OT_Friendship; public int OT_Affection => pkm.OT_Affection; @@ -107,9 +107,12 @@ namespace PKHeX.WinForms #endregion - public PKMPreview(PKM p) + private readonly GameStrings Strings; + + public PKMPreview(PKM p, GameStrings strings) { pkm = p; + Strings = strings; Stats = pkm.GetStats(pkm.PersonalInfo); } diff --git a/PKHeX.WinForms/Subforms/Misc/SortableBindingList.cs b/PKHeX.WinForms/Subforms/Misc/SortableBindingList.cs index 6cdc6d38c..6edd935fb 100644 --- a/PKHeX.WinForms/Subforms/Misc/SortableBindingList.cs +++ b/PKHeX.WinForms/Subforms/Misc/SortableBindingList.cs @@ -60,8 +60,10 @@ namespace PKHeX.WinForms { int count = Count; for (int i = 0; i < count; ++i) + { if (prop.GetValue(this[i]).Equals(key)) return i; + } return -1; } diff --git a/PKHeX.WinForms/Subforms/PKM Editors/SuperTrainingEditor.cs b/PKHeX.WinForms/Subforms/PKM Editors/SuperTrainingEditor.cs index a0c346182..88414c0ca 100644 --- a/PKHeX.WinForms/Subforms/PKM Editors/SuperTrainingEditor.cs +++ b/PKHeX.WinForms/Subforms/PKM Editors/SuperTrainingEditor.cs @@ -55,10 +55,8 @@ namespace PKHeX.WinForms private const string PrefixLabel = "L_"; private const string PrefixCHK = "CHK_"; - private void B_Cancel_Click(object sender, EventArgs e) - { - Close(); - } + private void B_Cancel_Click(object sender, EventArgs e) => Close(); + private void B_Save_Click(object sender, EventArgs e) { Save(); @@ -86,6 +84,7 @@ namespace PKHeX.WinForms foreach (ColumnStyle style in TLP.ColumnStyles) style.SizeType = SizeType.AutoSize; } + private static void AddRegimenChoice(RegimenInfo reg, TableLayoutPanel TLP) { // Get row we add to @@ -131,6 +130,7 @@ namespace PKHeX.WinForms { public readonly string Name; public bool CompletedRegimen; + internal RegimenInfo(string name, bool completedRegimen) { Name = name; @@ -141,8 +141,10 @@ namespace PKHeX.WinForms private void B_All_Click(object sender, EventArgs e) { if (CHK_SecretUnlocked.Checked) // only give dist if Secret is Unlocked (None -> All -> All*) + { foreach (var c in TLP_DistSuperTrain.Controls.OfType()) c.Checked = true; + } if (pkm is PK6) { @@ -152,6 +154,7 @@ namespace PKHeX.WinForms foreach (var c in TLP_SuperTrain.Controls.OfType()) c.Checked = true; } + private void B_None_Click(object sender, EventArgs e) { CHK_SecretUnlocked.Checked = false; @@ -161,6 +164,7 @@ namespace PKHeX.WinForms foreach (var c in TLP_DistSuperTrain.Controls.OfType()) c.Checked = false; } + private void CHK_Secret_CheckedChanged(object sender, EventArgs e) { if (!(pkm is PK6)) diff --git a/PKHeX.WinForms/Subforms/ReportGrid.cs b/PKHeX.WinForms/Subforms/ReportGrid.cs index 0bb1685f1..4a1519d1c 100644 --- a/PKHeX.WinForms/Subforms/ReportGrid.cs +++ b/PKHeX.WinForms/Subforms/ReportGrid.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Reflection; using System.Text; using System.Windows.Forms; using PKHeX.Core; @@ -19,6 +18,7 @@ namespace PKHeX.WinForms CenterToParent(); GetContextMenu(); } + private void GetContextMenu() { var mnuHide = new ToolStripMenuItem { Name = "mnuHide", Text = MsgReportColumnHide, }; @@ -55,10 +55,11 @@ namespace PKHeX.WinForms SuspendLayout(); BoxBar.Step = 1; var PL = new PokemonList(); + var strings = GameInfo.Strings; foreach (PKM pkm in Data.Where(pkm => pkm.ChecksumValid && pkm.Species != 0)) { pkm.Stat_Level = PKX.GetLevel(pkm.Species, pkm.EXP); // recalc Level - PL.Add(new PKMPreview(pkm)); + PL.Add(new PKMPreview(pkm, strings)); BoxBar.PerformStep(); } @@ -86,12 +87,14 @@ namespace PKHeX.WinForms ResumeLayout(); } + private void Data_Sorted(object sender, EventArgs e) { int height = SpriteUtil.GetSprite(1, 0, 0, 0, false, false).Height + 1; // dummy sprite, max height of a row for (int i = 0; i < dgData.Rows.Count; i++) dgData.Rows[i].Height = height; } + private void PromptSaveCSV(object sender, FormClosingEventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, MsgReportExportCSV) != DialogResult.Yes) @@ -104,6 +107,7 @@ namespace PKHeX.WinForms if (savecsv.ShowDialog() == DialogResult.OK) Export_CSV(savecsv.FileName); } + private void Export_CSV(string path) { var sb = new StringBuilder(); @@ -151,13 +155,4 @@ namespace PKHeX.WinForms return newlines; } } - public static class ExtensionMethods - { - public static void DoubleBuffered(this DataGridView dgv, bool setting) - { - Type dgvType = dgv.GetType(); - PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); - pi.SetValue(dgv, setting, null); - } - } } diff --git a/PKHeX.WinForms/Subforms/SAV_Database.cs b/PKHeX.WinForms/Subforms/SAV_Database.cs index 1a96e583e..08e64605c 100644 --- a/PKHeX.WinForms/Subforms/SAV_Database.cs +++ b/PKHeX.WinForms/Subforms/SAV_Database.cs @@ -329,9 +329,27 @@ namespace PKHeX.WinForms } private void LoadDatabase() + { + RawDB = LoadPKMSaves(DatabasePath, Main.BackupPath, EXTERNAL_SAV, SAV); + + // Load stats for pkm who do not have any + foreach (var pk in RawDB.Where(z => z.Stat_Level == 0)) + { + pk.Stat_Level = pk.CurrentLevel; + pk.SetStats(pk.GetStats(pk.PersonalInfo)); + } + + try + { + BeginInvoke(new MethodInvoker(() => SetResults(RawDB))); + } + catch { /* Window Closed? */ } + } + + private static List LoadPKMSaves(string pkmdb, string savdb, string EXTERNAL_SAV, SaveFile SAV) { var dbTemp = new ConcurrentBag(); - var files = Directory.EnumerateFiles(DatabasePath, "*", SearchOption.AllDirectories); + var files = Directory.EnumerateFiles(pkmdb, "*", SearchOption.AllDirectories); Parallel.ForEach(files, file => { FileInfo fi = new FileInfo(file); @@ -344,7 +362,7 @@ namespace PKHeX.WinForms }); #if LOADALL - if (SaveUtil.GetSavesFromFolder(Main.BackupPath, false, out IEnumerable result)) + if (SaveUtil.GetSavesFromFolder(savdb, false, out IEnumerable result)) { Parallel.ForEach(result, file => { @@ -364,25 +382,14 @@ namespace PKHeX.WinForms }); } #endif + // Fetch from save file + var savpkm = SAV.BoxData.Where(pk => pk.Species != 0); + + var bakpkm = dbTemp.Where(pk => pk.Species != 0).OrderBy(pk => pk.Identifier); + var db = bakpkm.Concat(savpkm).Where(pk => pk.ChecksumValid && pk.Sanity == 0); // Prepare Database - RawDB = new List(dbTemp.OrderBy(pk => pk.Identifier) - .Concat(SAV.BoxData.Where(pk => pk.Species != 0)) // Fetch from save file - .Where(pk => pk.ChecksumValid && pk.Species != 0 && pk.Sanity == 0) - .Distinct()); - - // Load stats for pkm who do not have any - foreach (var pk in RawDB.Where(z => z.Stat_Level == 0)) - { - pk.Stat_Level = pk.CurrentLevel; - pk.SetStats(pk.GetStats(pk.PersonalInfo)); - } - - try - { - BeginInvoke(new MethodInvoker(() => SetResults(RawDB))); - } - catch { /* Window Closed? */ } + return new List(db); } // IO Usage diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen1/SAV_EventReset1.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen1/SAV_EventReset1.cs index 38e15ab3f..596437496 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen1/SAV_EventReset1.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen1/SAV_EventReset1.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly G1OverworldSpawner Overworld; private void SAV_EventReset1_FormClosing(object sender, FormClosingEventArgs e) => Overworld.Save(); + public SAV_EventReset1(SaveFile sav) { InitializeComponent(); @@ -33,7 +34,7 @@ namespace PKHeX.WinForms var b = new Button { Text = pkmname, Enabled = pair.IsDespawned, - Size = new Size(Width / 2 - 25, 22), + Size = new Size((Width / 2) - 25, 22), }; b.Click += (s, e) => { diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Misc3.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Misc3.cs index 12667f32a..48cd1c5e0 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Misc3.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Misc3.cs @@ -60,7 +60,7 @@ namespace PKHeX.WinForms } } else - TB_OTName.Visible = L_TrainerName.Visible = GB_TCM.Visible = false; + { TB_OTName.Visible = L_TrainerName.Visible = GB_TCM.Visible = false; } NUD_BP.Value = Math.Min(NUD_BP.Maximum, SAV.BP); NUD_Coins.Value = Math.Min(NUD_Coins.Maximum, SAV.Coin); @@ -95,6 +95,7 @@ namespace PKHeX.WinForms #region Joyful private int JUMPS_IN_ROW, JUMPS_SCORE, JUMPS_5_IN_ROW; private int BERRIES_IN_ROW, BERRIES_SCORE, BERRIES_5_IN_ROW; + private void ReadJoyful() { switch (SAV.Version) @@ -125,6 +126,7 @@ namespace PKHeX.WinForms TB_B2.Text = Math.Min((ushort)9999, BitConverter.ToUInt16(SAV.Data, BERRIES_SCORE)).ToString(); TB_B3.Text = Math.Min((ushort)9999, BitConverter.ToUInt16(SAV.Data, BERRIES_5_IN_ROW)).ToString(); } + private void SaveJoyful() { BitConverter.GetBytes((ushort)Util.ToUInt32(TB_J1.Text)).CopyTo(SAV.Data, JUMPS_IN_ROW); @@ -142,8 +144,10 @@ namespace PKHeX.WinForms var Pouches = SAV.Inventory; var itemlist = GameInfo.Strings.GetItemStrings(SAV.Generation, SAV.Version).ToArray(); for (int i = 0; i < itemlist.Length; i++) + { if (string.IsNullOrEmpty(itemlist[i])) itemlist[i] = $"(Item #{i:000})"; + } const int oldsea = 0x178; int[] tickets = {0x109, 0x113, 0x172, 0x173, oldsea }; // item IDs @@ -198,6 +202,7 @@ namespace PKHeX.WinForms B_GetTickets.Enabled = false; } + private void ReadFerry() { CHK_Catchable.Checked = IsFerryFlagActive(0x864); @@ -211,14 +216,17 @@ namespace PKHeX.WinForms CHK_InitialFaraway.Checked = IsFerryFlagActive(0x1B0); CHK_InitialNavel.Checked = IsFerryFlagActive(0x1DB); } + private bool IsFerryFlagActive(int n) { return SAV.GetEventFlag(n); } + private void SetFerryFlagFromNum(int n, bool b) { SAV.SetEventFlag(n, b); } + private void SaveFerry() { SetFerryFlagFromNum(0x864, CHK_Catchable.Checked); @@ -260,7 +268,10 @@ namespace PKHeX.WinForms foreach (RadioButton r in StatRBA) r.Checked = false; - if (BFT[BFF[facility][1]] == null) CB_Stats2.Visible = false; + if (BFT[BFF[facility][1]] == null) + { + CB_Stats2.Visible = false; + } else { CB_Stats2.Visible = true; @@ -275,11 +286,13 @@ namespace PKHeX.WinForms editingcont = false; StatRBA[0].Checked = true; } + private void ChangeStat(object sender, EventArgs e) { if (editingcont) return; StatAddrControl(SetValToSav: -2, SetSavToVal: true); } + private void StatAddrControl(int SetValToSav = -2, bool SetSavToVal = false) { int Facility = CB_Stats1.SelectedIndex; @@ -305,14 +318,14 @@ namespace PKHeX.WinForms SetValToSav = Array.IndexOf(BFV[BFF[Facility][0]], SetValToSav); if (SetValToSav < 0) return; if (val > 9999) val = 9999; - BitConverter.GetBytes(val).CopyTo(SAV.Data, SAV.GetBlockOffset(0) + BFF[Facility][2 + SetValToSav] + 4 * BattleType + 2 * RBi); + BitConverter.GetBytes(val).CopyTo(SAV.Data, SAV.GetBlockOffset(0) + BFF[Facility][2 + SetValToSav] + (4 * BattleType) + (2 * RBi)); return; } if (SetValToSav == -1) { int p = BFF[Facility][2 + BFV[BFF[Facility][0]].Length + BattleType] + RBi; int offset = SAV.GetBlockOffset(0) + 0xCDC; - BitConverter.GetBytes(BitConverter.ToUInt32(SAV.Data, offset) & (uint)~(1 << p) | (uint)((CHK_Continue.Checked ? 1 : 0) << p)).CopyTo(SAV.Data, offset); + BitConverter.GetBytes((BitConverter.ToUInt32(SAV.Data, offset) & (uint)~(1 << p)) | (uint)((CHK_Continue.Checked ? 1 : 0) << p)).CopyTo(SAV.Data, offset); return; } if (!SetSavToVal) @@ -321,13 +334,14 @@ namespace PKHeX.WinForms editingval = true; for (int i = 0; i < BFV[BFF[Facility][0]].Length; i++) { - int vali = BitConverter.ToUInt16(SAV.Data, SAV.GetBlockOffset(0) + BFF[Facility][2 + i] + 4 * BattleType + 2 * RBi); + int vali = BitConverter.ToUInt16(SAV.Data, SAV.GetBlockOffset(0) + BFF[Facility][2 + i] + (4 * BattleType) + (2 * RBi)); if (vali > 9999) vali = 9999; StatNUDA[BFV[BFF[Facility][0]][i]].Value = vali; } CHK_Continue.Checked = (BitConverter.ToUInt32(SAV.Data, SAV.GetBlockOffset(0) + 0xCDC) & 1 << (BFF[Facility][2 + BFV[BFF[Facility][0]].Length + BattleType] + RBi)) != 0; editingval = false; } + private void ChangeStatVal(object sender, EventArgs e) { if (editingval) return; @@ -390,11 +404,13 @@ namespace PKHeX.WinForms loading = false; CB_Stats1.SelectedIndex = 0; } + private void SetFrontierSymbols() { for (int i = 0; i < SymbolButtonA.Length; i++) SymbolButtonA[i].BackColor = SymbolColorA[Symbols[i]]; } + private void SaveBattleFrontier() { uint iSymbols = 0; @@ -403,9 +419,10 @@ namespace PKHeX.WinForms if (CHK_ActivatePass.Checked) iSymbols |= 1 << 14; - uint val = (uint)(BitConverter.ToUInt32(SAV.Data, ofsSymbols) & ~(0x7FFF << 4) | (iSymbols & 0x7FFF) << 4); + uint val = (uint)((BitConverter.ToUInt32(SAV.Data, ofsSymbols) & ~(0x7FFF << 4)) | (iSymbols & 0x7FFF) << 4); BitConverter.GetBytes(val).CopyTo(SAV.Data, ofsSymbols); } + private void BTN_Symbol_Click(object sender, EventArgs e) { int index = Array.IndexOf(SymbolButtonA, sender); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_RTC3.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_RTC3.cs index 1470177c8..5078b5b03 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_RTC3.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_RTC3.cs @@ -8,6 +8,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV3 SAV; + public SAV_RTC3(SaveFile sav) { InitializeComponent(); @@ -34,6 +35,7 @@ namespace PKHeX.WinForms NUD_EMinute.Value = Math.Min(NUD_EMinute.Maximum, ClockElapsed.Minute); NUD_ESecond.Value = Math.Min(NUD_ESecond.Maximum, ClockElapsed.Second); } + private void SaveData() { ClockInitial.Day = (ushort)NUD_IDay.Value; @@ -46,6 +48,7 @@ namespace PKHeX.WinForms ClockElapsed.Minute = (byte)NUD_EMinute.Value; ClockElapsed.Second = (byte)NUD_ESecond.Value; } + private void B_Save_Click(object sender, EventArgs e) { SaveData(); @@ -56,10 +59,12 @@ namespace PKHeX.WinForms Origin.SetData(SAV.Data, 0); Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void B_Reset_Click(object sender, EventArgs e) { NUD_IDay.Value = NUD_IHour.Value = NUD_IMinute.Value = NUD_ISecond.Value = 0; @@ -69,7 +74,7 @@ namespace PKHeX.WinForms private void B_BerryFix_Click(object sender, EventArgs e) { - NUD_EDay.Value = Math.Max(2*366 + 2, NUD_EDay.Value); // advance + NUD_EDay.Value = Math.Max((2 * 366) + 2, NUD_EDay.Value); // advance System.Media.SystemSounds.Asterisk.Play(); } } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Roamer3.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Roamer3.cs index 396766e34..d3f30cb3f 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Roamer3.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen3/SAV_Roamer3.cs @@ -36,6 +36,7 @@ namespace PKHeX.WinForms CHK_Active.Checked = Reader.Active; NUD_Level.Value = Math.Min(NUD_Level.Maximum, Reader.CurrentLevel); } + private void SaveData() { int[] IVs = new int[6]; @@ -49,11 +50,13 @@ namespace PKHeX.WinForms Reader.Active = CHK_Active.Checked; Reader.CurrentLevel = (int)NUD_Level.Value; } + private void B_Save_Click(object sender, EventArgs e) { SaveData(); Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Apricorn.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Apricorn.cs index d865d17ae..09c9be91e 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Apricorn.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Apricorn.cs @@ -19,6 +19,7 @@ namespace PKHeX.WinForms private readonly SAV4 SAV; private const int Count = 7; private static readonly string[] itemlist = {"Red", "Yellow", "Blue", "Green", "Pink", "White", "Black"}; + private void Setup() { dgv.Rows.Clear(); @@ -63,18 +64,21 @@ namespace PKHeX.WinForms { Close(); } + private void B_All_Click(object sender, EventArgs e) { for (int i = 0; i < Count; i++) SAV.SetApricornCount(i, 99); Setup(); } + private void B_None_Click(object sender, EventArgs e) { for (int i = 0; i < Count; i++) SAV.SetApricornCount(i, 0); Setup(); } + private void B_Save_Click(object sender, EventArgs e) { for (int i = 0; i < Count; i++) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_HoneyTree.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_HoneyTree.cs index 61ca65c42..692919f95 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_HoneyTree.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_HoneyTree.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV4 SAV; + public SAV_HoneyTree(SaveFile sav) { InitializeComponent(); @@ -37,6 +38,7 @@ namespace PKHeX.WinForms private int TreeSpecies => Table[(int)NUD_Group.Value][(int)NUD_Slot.Value]; private void B_Catchable_Click(object sender, EventArgs e) => NUD_Time.Value = 1080; + private void ChangeGroupSlot(object sender, EventArgs e) { int species = TreeSpecies; @@ -51,12 +53,14 @@ namespace PKHeX.WinForms if (species == 446 && !MunchlaxTrees.Contains(CB_TreeList.SelectedIndex)) WinFormsUtil.Alert("Catching Munchlax in this tree will make it illegal for this savegame's TID/SID combination."); } + private void ChangeTree(object sender, EventArgs e) { SaveTree(); entry = CB_TreeList.SelectedIndex; ReadTree(); } + private void ReadTree() { loading = true; @@ -70,6 +74,7 @@ namespace PKHeX.WinForms ChangeGroupSlot(null, null); loading = false; } + private void SaveTree() { if (Tree == null) @@ -89,6 +94,7 @@ namespace PKHeX.WinForms Origin.SetData(SAV.Data, 0); Close(); } + private void B_Cancel_Click(object sender, EventArgs e) => Close(); } } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Misc4.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Misc4.cs index abf761a1b..50da79015 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Misc4.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Misc4.cs @@ -13,6 +13,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV4 SAV; + public SAV_Misc4(SaveFile sav) { InitializeComponent(); @@ -98,6 +99,7 @@ namespace PKHeX.WinForms private readonly int ofsUGFlagCount = -1; private readonly int ofsPoketch = -1; private int[] FlyDestC; + private void ReadMain() { NUD_Coin.Value = SAV.Coin; @@ -145,6 +147,7 @@ namespace PKHeX.WinForms CB_UpgradeMap.SelectedIndex = index; } } + private void SaveMain() { SAV.Coin = (uint)NUD_Coin.Value; @@ -154,25 +157,30 @@ namespace PKHeX.WinForms if (FlyDestC[i] < 32) { if (CLB_FlyDest.GetItemChecked(i)) - valFly |= (uint)1 << FlyDestC[i]; + valFly |= (uint) 1 << FlyDestC[i]; else - valFly &= ~((uint)1 << FlyDestC[i]); + valFly &= ~((uint) 1 << FlyDestC[i]); + } + else + { + var o = ofsFly + (FlyDestC[i] >> 3); + SAV.Data[o] = (byte)((SAV.Data[o] & ~(1 << (FlyDestC[i] & 7))) | (CLB_FlyDest.GetItemChecked(i) ? 1 << (FlyDestC[i] & 7) : 0)); } - else SAV.Data[ofsFly + (FlyDestC[i] >> 3)] = (byte)(SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & ~(1 << (FlyDestC[i] & 7)) | (CLB_FlyDest.GetItemChecked(i) ? 1 << (FlyDestC[i] & 7) : 0)); } BitConverter.GetBytes(valFly).CopyTo(SAV.Data, ofsFly); BitConverter.GetBytes((ushort)NUD_BP.Value).CopyTo(SAV.Data, ofsBP); if (ofsPoketch > 0) SavePoketch(); if (ofsUGFlagCount > 0) - BitConverter.GetBytes(BitConverter.ToUInt32(SAV.Data, ofsUGFlagCount) & ~(uint)0xFFFFF | (uint)NUD_UGFlags.Value).CopyTo(SAV.Data, ofsUGFlagCount); + BitConverter.GetBytes((BitConverter.ToUInt32(SAV.Data, ofsUGFlagCount) & ~(uint)0xFFFFF) | (uint)NUD_UGFlags.Value).CopyTo(SAV.Data, ofsUGFlagCount); if (ofsMap > 0) { int valMap = CB_UpgradeMap.SelectedIndex; if (valMap >= 0) - SAV.Data[ofsMap] = (byte)(SAV.Data[ofsMap] & 0xE7 | valMap << 3); + SAV.Data[ofsMap] = (byte)((SAV.Data[ofsMap] & 0xE7) | valMap << 3); } } + private void B_AllFlyDest_Click(object sender, EventArgs e) { for (int i = 0; i < CLB_FlyDest.Items.Count; i++) @@ -184,6 +192,7 @@ namespace PKHeX.WinForms private byte[] ColorTable; private bool[] oldPoketchVal; private readonly ToolTip tip1 = new ToolTip(); + private void ReadPoketch() { string[] PoketchTitle = new[] { @@ -214,19 +223,22 @@ namespace PKHeX.WinForms tip1.SetToolTip(PB_DotArtist, tip); TAB_Main.AllowDrop = true; } + private void SavePoketch() { byte count = 0; for (int i = 1; i <= CLB_Poketch.Items.Count; i++) { - if (CLB_Poketch.GetItemChecked(i-1)) + if (CLB_Poketch.GetItemChecked(i - 1)) { count++; if (!oldPoketchVal[i]) SAV.Data[ofsPoketch + i] = 1; } else if (oldPoketchVal[i]) + { SAV.Data[ofsPoketch + i] = 0; + } } SAV.Data[ofsPoketch - 2] = count; byte current = SAV.Data[ofsPoketch - 1]; @@ -242,22 +254,30 @@ namespace PKHeX.WinForms if (inp.Length != 120) return; byte[] dupbyte = new byte[23040]; for (int iy = 0; iy < 20; iy++) + { for (int ix = 0; ix < 24; ix++) { - var ib = ix + 24 * iy; + var ib = ix + (24 * iy); var ict = ColorTable[inp[ib >> 2] >> (ib % 4 << 1) & 3]; - var iz = 12 * ix + 0x480 * iy; + var iz = (12 * ix) + (0x480 * iy); for (int izy = 0; izy < 4; izy++) + { for (int izx = 0; izx < 4; izx++) + { for (int ic = 0; ic < 3; ic++) - dupbyte[ic + 3 * izx + 0x120 * izy + iz] = ict; + dupbyte[ic + (3 * izx) + (0x120 * izy) + iz] = ict; + } + } } + } + Bitmap dabmp = new Bitmap(96, 80); BitmapData dabdata = dabmp.LockBits(new Rectangle(0, 0, dabmp.Width, dabmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); System.Runtime.InteropServices.Marshal.Copy(dupbyte, 0, dabdata.Scan0, dupbyte.Length); dabmp.UnlockBits(dabdata); PB_DotArtist.Image = dabmp; } + private void SetFlagsFromFileName(string inpFileName) { if (new FileInfo(inpFileName).Length > 2058) return; // 24*20*4(ARGB)=1920 @@ -278,12 +298,14 @@ namespace PKHeX.WinForms byte[] BrightCount = new byte[0x100]; byte[] iBrightCount = new byte[0x100]; for (int iy = 0; iy < 20; iy++) + { for (int ix = 0; ix < 24; ix++) { var ig = (byte)(0xFF * bmp.GetPixel(ix, iy).GetBrightness()); - BrightMap[ix + 24 * iy] = ig; + BrightMap[ix + (24 * iy)] = ig; BrightCount[ig]++; } + } int ColorCount = BrightCount.Count(v => v > 0); if (ColorCount > 4 || ColorCount == 0) return; @@ -297,8 +319,11 @@ namespace PKHeX.WinForms { BrightCount.CopyTo(iBrightCount, 0); for (int i = 0, j = 0; i < 0x100; i++) + { if (iBrightCount[i] > 0) iBrightCount[i] = LCT[j++]; + } + var errtot = 0; for (int i = 0; i < 480; i++) errtot += Math.Abs(BrightMap[i] - ColorTable[iBrightCount[BrightMap[i]]]); @@ -311,8 +336,11 @@ namespace PKHeX.WinForms if (LCT[0] >= 4) break; } for (int i = 0, j = 0; i < 0x100; i++) + { if (BrightCount[i] > 0) BrightCount[i] = mLCT[j++]; + } + for (int i = 0; i < 480; i++) BrightMap[i] = BrightCount[BrightMap[i]]; @@ -353,7 +381,7 @@ namespace PKHeX.WinForms else if (inpX > 95) inpX = 95; if (inpY < 0) inpY = 0; else if (inpY > 79) inpY = 79; - int i = (inpX >> 2) + 24 * (inpY >> 2); + int i = (inpX >> 2) + (24 * (inpY >> 2)); byte[] ndab = new byte[120]; DotArtistByte.CopyTo(ndab, 0); byte c = (byte)(ndab[i >> 2] >> (i % 4 << 1) & 3); @@ -386,6 +414,7 @@ namespace PKHeX.WinForms SetFlagsFromFileName(t[0]); SetPictureBoxFromFlags(DotArtistByte); } + private void PB_DotArtist_MouseClick(object sender, MouseEventArgs e) { SetFlagsFromClickPoint(e.X, e.Y); @@ -410,6 +439,7 @@ namespace PKHeX.WinForms private NumericUpDown[] HallNUDA; private bool HallStatUpdated; private int ofsHallStat = -1; + private void ReadBattleFrontier() { BFV = new[] { @@ -491,14 +521,18 @@ namespace PKHeX.WinForms editing = false; CB_Stats1.SelectedIndex = 0; } + private void SaveBattleFrontier() { if (ofsPrints > 0) + { for (int i = 0; i < Prints.Length; i++) { if (Prints[i] == 1 + Math.Sign((BitConverter.ToUInt16(SAV.Data, ofsPrints + (i << 1)) >> 1) - 1)) continue; BitConverter.GetBytes(Prints[i] << 1).CopyTo(SAV.Data, ofsPrints + (i << 1)); } + } + if (HallStatUpdated) BitConverter.GetBytes(SaveUtil.CRC16_CCITT(SAV.Data, ofsHallStat, 0xBAE)).CopyTo(SAV.Data, ofsHallStat + 0xBAE); } @@ -508,6 +542,7 @@ namespace PKHeX.WinForms for (int i = 0; i < PrintButtonA.Length; i++) PrintButtonA[i].BackColor = PrintColorA[Prints[i]]; } + private void BTN_Print_Click(object sender, EventArgs e) { int index = Array.IndexOf(PrintButtonA, sender); @@ -551,6 +586,7 @@ namespace PKHeX.WinForms editing = false; CB_Stats2.SelectedIndex = 0; } + private void ChangeStat(object sender, EventArgs e) { if (editing) return; @@ -571,12 +607,13 @@ namespace PKHeX.WinForms editing = false; } } + private void StatAddrControl(int SetValToSav = -2, bool SetSavToVal = false) { int Facility = CB_Stats1.SelectedIndex; int BattleType = CB_Stats2.SelectedIndex; int RBi = StatRBA[1].Checked ? 1 : 0; - int addrVal = SAV.GBO + BFF[Facility][2] + BFF[Facility][3] * BattleType + (RBi << 3); + int addrVal = SAV.GBO + BFF[Facility][2] + (BFF[Facility][3] * BattleType) + (RBi << 3); int addrFlag = SAV.GBO + BFF[Facility][4]; byte maskFlag = (byte)(1 << BattleType + (RBi << 2)); int TowerContinueCountOfs = SAV.DP ? 3 : 1; @@ -618,10 +655,12 @@ namespace PKHeX.WinForms if (Facility == 3) SAV.Data[addrFlag + 1] |= 0x01; // not found what this flag means } else + { SAV.Data[addrFlag] &= (byte)~maskFlag; - return; + } } } + private void ChangeStatVal(object sender, EventArgs e) { if (editing) return; @@ -632,7 +671,9 @@ namespace PKHeX.WinForms if (CB_Stats1.SelectedIndex == 0 && Math.Floor(StatNUDA[0].Value / 7) != StatNUDA[1].Value) { if (n == 0) + { StatNUDA[1].Value = Math.Floor(StatNUDA[0].Value / 7); + } else if (n == 1) { if (StatNUDA[0].Maximum > StatNUDA[1].Value * 7) @@ -650,6 +691,7 @@ namespace PKHeX.WinForms } private int species = -1; + private void ChangeSpecies(object sender, EventArgs e) { species = (int)CB_Species.SelectedValue; @@ -658,9 +700,10 @@ namespace PKHeX.WinForms GetHallStat(); editing = false; } + private void GetCastleStat() { - int ofs = SAV.GBO + BFF[3][2] + BFF[3][3] * CB_Stats2.SelectedIndex + 0x0A; + int ofs = SAV.GBO + BFF[3][2] + (BFF[3][3] * CB_Stats2.SelectedIndex) + 0x0A; NumericUpDown[] na = { NUD_CastleRankRcv, NUD_CastleRankItem, NUD_CastleRankInfo }; for (int i = 0; i < na.Length; i++) { @@ -668,17 +711,19 @@ namespace PKHeX.WinForms na[i].Value = val > na[i].Maximum ? na[i].Maximum : val < na[i].Minimum ? na[i].Minimum : val; } } + private void NUD_CastleRank_ValueChanged(object sender, EventArgs e) { if (editing) return; NumericUpDown[] na = new[] { NUD_CastleRankRcv, NUD_CastleRankItem, NUD_CastleRankInfo }; int i = Array.IndexOf(na, sender); if (i < 0) return; - BitConverter.GetBytes((int)na[i].Value).CopyTo(SAV.Data, SAV.GBO + BFF[3][2] + BFF[3][3] * CB_Stats2.SelectedIndex + 0x0A + (i << 1)); + BitConverter.GetBytes((int)na[i].Value).CopyTo(SAV.Data, SAV.GBO + BFF[3][2] + (BFF[3][3] * CB_Stats2.SelectedIndex) + 0x0A + (i << 1)); } + private void GetHallStat() { - int ofscur = SAV.GBO + BFF[2][2] + BFF[2][3] * CB_Stats2.SelectedIndex; + int ofscur = SAV.GBO + BFF[2][2] + (BFF[2][3] * CB_Stats2.SelectedIndex); int curspe = BitConverter.ToInt16(SAV.Data, ofscur + 4); bool c = curspe == species; CHK_HallCurrent.Checked = c; @@ -698,7 +743,7 @@ namespace PKHeX.WinForms if (ofsHallStat > 0) { - ushort v = BitConverter.ToUInt16(SAV.Data, ofsHallStat + 4 + 0x3DE * CB_Stats2.SelectedIndex + (species << 1)); + ushort v = BitConverter.ToUInt16(SAV.Data, ofsHallStat + 4 + (0x3DE * CB_Stats2.SelectedIndex) + (species << 1)); NUD_HallStreaks.Value = v > 9999 ? 9999 : v; } } @@ -706,7 +751,7 @@ namespace PKHeX.WinForms private void CHK_HallCurrent_CheckedChanged(object sender, EventArgs e) { if (editing) return; - BitConverter.GetBytes((ushort)(CHK_HallCurrent.Checked ? species : 0)).CopyTo(SAV.Data, SAV.GBO + BFF[2][2] + BFF[2][3] * CB_Stats2.SelectedIndex + 4); + BitConverter.GetBytes((ushort)(CHK_HallCurrent.Checked ? species : 0)).CopyTo(SAV.Data, SAV.GBO + BFF[2][2] + (BFF[2][3] * CB_Stats2.SelectedIndex) + 4); editing = true; GetHallStat(); editing = false; @@ -717,15 +762,15 @@ namespace PKHeX.WinForms if (editing) return; int i = Array.IndexOf(HallNUDA, sender); if (i < 0) return; - int ofs = SAV.GBO + BFF[2][2] + BFF[2][3] * CB_Stats2.SelectedIndex + 6 + (i >> 1 << 1); - SAV.Data[ofs] = (byte)(SAV.Data[ofs] & ~(0xF << ((i & 1) << 2)) | (int)HallNUDA[i].Value << ((i & 1) << 2)); + int ofs = SAV.GBO + BFF[2][2] + (BFF[2][3] * CB_Stats2.SelectedIndex) + 6 + (i >> 1 << 1); + SAV.Data[ofs] = (byte)((SAV.Data[ofs] & ~(0xF << ((i & 1) << 2))) | (int)HallNUDA[i].Value << ((i & 1) << 2)); L_SumHall.Text = HallNUDA.Sum(x => x.Value).ToString(); } private void NUD_HallStreaks_ValueChanged(object sender, EventArgs e) { if (editing || ofsHallStat < 0) return; - BitConverter.GetBytes((ushort)NUD_HallStreaks.Value).CopyTo(SAV.Data, ofsHallStat + 4 + 0x3DE * CB_Stats2.SelectedIndex + (species << 1)); + BitConverter.GetBytes((ushort)NUD_HallStreaks.Value).CopyTo(SAV.Data, ofsHallStat + 4 + (0x3DE * CB_Stats2.SelectedIndex) + (species << 1)); HallStatUpdated = true; } #endregion diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs index cf575983a..de2534c5e 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV4 SAV; + public SAV_Pokedex4(SaveFile sav) { InitializeComponent(); @@ -60,6 +61,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeLBSpecies(object sender, EventArgs e) { if (editing) return; @@ -76,13 +78,14 @@ namespace PKHeX.WinForms private const string MALE = "Male"; private const string FEMALE = "Female"; private static readonly int[] DPLangSpecies = { 23, 25, 54, 77, 120, 129, 202, 214, 215, 216, 228, 278, 287, 315 }; + private void GetEntry() { // Load Bools for the data int bit = species - 1; byte mask = (byte)(1 << (bit & 7)); int ofs = SAV.PokeDex + (bit >> 3) + 0x4; - int FormOffset1 = SAV.PokeDex + 4 + brSize * 4 + 4; + int FormOffset1 = SAV.PokeDex + 4 + (brSize * 4) + 4; int PokeDexLanguageFlags = FormOffset1 + (SAV.HGSS ? 0x3C : 0x20); int l_ofs = !SAV.DP ? species : 1 + Array.IndexOf(DPLangSpecies, species); if (l_ofs > 0) @@ -95,13 +98,16 @@ namespace PKHeX.WinForms } } else - for (int i = 0; i < LangCount; i++) CL[i].Enabled = CL[i].Checked = false; + { + for (int i = 0; i < LangCount; i++) + CL[i].Enabled = CL[i].Checked = false; + } - bool bit2 = (SAV.Data[ofs + brSize * 2] & mask) != 0; - bool bit3 = (SAV.Data[ofs + brSize * 3] & mask) != 0; + bool bit2 = (SAV.Data[ofs + (brSize * 2)] & mask) != 0; + bool bit3 = (SAV.Data[ofs + (brSize * 3)] & mask) != 0; - CHK_Seen.Checked = (SAV.Data[ofs + brSize * 1] & mask) != 0; - CHK_Caught.Checked = (SAV.Data[ofs + brSize * 0] & mask) != 0; + CHK_Seen.Checked = (SAV.Data[ofs + (brSize * 1)] & mask) != 0; + CHK_Caught.Checked = (SAV.Data[ofs + (brSize * 0)] & mask) != 0; // Genders LB_Gender.Items.Clear(); @@ -165,46 +171,46 @@ namespace PKHeX.WinForms // Check if already Seen if (!CHK_Seen.Checked || LB_Gender.Items.Count == 0) { - SAV.Data[ofs + brSize * 0] &= (byte)~mask; - SAV.Data[ofs + brSize * 1] &= (byte)~mask; - SAV.Data[ofs + brSize * 2] &= (byte)~mask; - SAV.Data[ofs + brSize * 3] &= (byte)~mask; + SAV.Data[ofs + (brSize * 0)] &= (byte)~mask; + SAV.Data[ofs + (brSize * 1)] &= (byte)~mask; + SAV.Data[ofs + (brSize * 2)] &= (byte)~mask; + SAV.Data[ofs + (brSize * 3)] &= (byte)~mask; } else // Is Seen { // Set the Species Owned Flag if (CHK_Caught.Checked) - SAV.Data[ofs + brSize * 0] |= mask; + SAV.Data[ofs + (brSize * 0)] |= mask; else - SAV.Data[ofs + brSize * 0] &= (byte)~mask; + SAV.Data[ofs + (brSize * 0)] &= (byte)~mask; - SAV.Data[ofs + brSize * 1] |= mask; + SAV.Data[ofs + (brSize * 1)] |= mask; switch ((string)LB_Gender.Items[0]) { case GENDERLESS: - SAV.Data[ofs + brSize * 2] &= (byte)~mask; - SAV.Data[ofs + brSize * 3] &= (byte)~mask; + SAV.Data[ofs + (brSize * 2)] &= (byte)~mask; + SAV.Data[ofs + (brSize * 3)] &= (byte)~mask; break; case FEMALE: - SAV.Data[ofs + brSize * 2] |= mask; // set + SAV.Data[ofs + (brSize * 2)] |= mask; // set if (LB_Gender.Items.Count != 1) // Male present - SAV.Data[ofs + brSize * 3] &= (byte)~mask; // unset + SAV.Data[ofs + (brSize * 3)] &= (byte)~mask; // unset else - SAV.Data[ofs + brSize * 3] |= mask; // set + SAV.Data[ofs + (brSize * 3)] |= mask; // set break; case MALE: - SAV.Data[ofs + brSize * 2] &= (byte)~mask; // unset + SAV.Data[ofs + (brSize * 2)] &= (byte)~mask; // unset if (LB_Gender.Items.Count != 1) // Female present - SAV.Data[ofs + brSize * 3] |= mask; // set + SAV.Data[ofs + (brSize * 3)] |= mask; // set else - SAV.Data[ofs + brSize * 3] &= (byte)~mask; // unset + SAV.Data[ofs + (brSize * 3)] &= (byte)~mask; // unset break; default: throw new ArgumentException("Invalid Gender???"); } } - int FormOffset1 = SAV.PokeDex + 4 + 4 * brSize + 4; + int FormOffset1 = SAV.PokeDex + 4 + (4 * brSize) + 4; int PokeDexLanguageFlags = FormOffset1 + (SAV.HGSS ? 0x3C : 0x20); int l_ofs = !SAV.DP ? species : (1 + Array.IndexOf(DPLangSpecies, species)); if (l_ofs > 0) @@ -231,6 +237,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { SetEntry(); @@ -259,6 +266,7 @@ namespace PKHeX.WinForms else SeenAll(); } + private void B_Modify_Click(object sender, EventArgs e) { Button btn = (Button)sender; @@ -276,6 +284,7 @@ namespace PKHeX.WinForms foreach (var c in CL) c.Checked = false; } + private void SeenAll() { LB_Gender.Items.AddRange(LB_NGender.Items); @@ -285,6 +294,7 @@ namespace PKHeX.WinForms LB_NForm.Items.Clear(); CHK_Seen.Checked = true; } + private void ModifyAll(object sender, EventArgs e) { int lang = SAV.Language - 1; @@ -309,13 +319,17 @@ namespace PKHeX.WinForms { CHK_Caught.Checked = true; for (int j = 0; j < CL.Length; j++) // set SAV language (and others if Complete) - CL[j].Checked = sender == mnuComplete || mnuCaughtNone != sender && j == lang; + CL[j].Checked = sender == mnuComplete || (mnuCaughtNone != sender && j == lang); } else if (caughtN) + { CHK_Caught.Checked = false; + } else if (!CHK_Seen.Checked) + { foreach (CheckBox t in CL) t.Checked = false; + } } SetEntry(); @@ -368,6 +382,7 @@ namespace PKHeX.WinForms dest.Items.Add(item); dest.SelectedIndex = dest.Items.Count - 1; } + private void MoveGender(object sender, EventArgs e) { if (editing) @@ -414,6 +429,7 @@ namespace PKHeX.WinForms dest.Items.Add(item); dest.SelectedIndex = dest.Items.Count - 1; } + private void MoveForm(object sender, EventArgs e) { if (editing) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Underground.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Underground.cs index c22ef4412..448057c09 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Underground.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Underground.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using System.Windows.Forms; using PKHeX.Core; @@ -9,6 +8,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV4 SAV; + public SAV_Underground(SaveFile sav) { InitializeComponent(); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs index ca7bbca73..2d748774d 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_CGearSkin.cs @@ -12,6 +12,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV5 SAV; + public SAV_CGearSkin(SaveFile sav) { InitializeComponent(); @@ -49,6 +50,7 @@ namespace PKHeX.WinForms WinFormsUtil.Error(ex.Message); } } + private void B_ExportPNG_Click(object sender, EventArgs e) { Image png = PB_Background.Image; @@ -63,6 +65,7 @@ namespace PKHeX.WinForms png.Save(sfd.FileName, ImageFormat.Png); } + private void B_ImportCGB_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog @@ -99,6 +102,7 @@ namespace PKHeX.WinForms byte[] data = bg.GetSkin(true); File.WriteAllBytes(sfd.FileName, data); } + private void B_Save_Click(object sender, EventArgs e) { byte[] bgdata = bg.GetSkin(SAV.B2W2); @@ -109,6 +113,7 @@ namespace PKHeX.WinForms } Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Misc5.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Misc5.cs index 9debf1de8..0b1b53e1c 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Misc5.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Misc5.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV5 SAV; + public SAV_Misc5(SaveFile sav) { InitializeComponent(); @@ -44,6 +45,7 @@ namespace PKHeX.WinForms private uint valLibPass; private bool bLibPass; private const int ofsKS = 0x25828; + private readonly uint[] keyKS = { // 0x34525, 0x11963, // Selected City // 0x31239, 0x15657, 0x49589, // Selected Difficulty @@ -51,8 +53,10 @@ namespace PKHeX.WinForms 0x35691, 0x18256, 0x59389, 0x48292, 0x09892, // Obtained Keys(EasyMode, Challenge, City, Iron, Iceberg) 0x93389, 0x22843, 0x34771, 0xAB031, 0xB3818 // Unlocked(EasyMode, Challenge, City, Iron, Iceberg) }; + private uint[] valKS; private bool[] bKS; + private void ReadMain() { string[] FlyDestA = null; @@ -145,9 +149,11 @@ namespace PKHeX.WinForms { GB_Roamer.Visible = CHK_LibertyPass.Visible = false; // KeySystem - string[] KeySystemA = { + string[] KeySystemA = + { "Obtain EasyKey", "Obtain ChallengeKey", "Obtain CityKey", "Obtain IronKey", "Obtain IcebergKey", - "Unlock EasyMode", "Unlock ChallengeMode", "Unlock City", "Unlock IronChamber", "Unlock IcebergChamber" + "Unlock EasyMode", "Unlock ChallengeMode", "Unlock City", "Unlock IronChamber", + "Unlock IcebergChamber" }; uint KSID = BitConverter.ToUInt32(SAV.Data, ofsKS + 0x34); valKS = new uint[keyKS.Length]; @@ -160,8 +166,12 @@ namespace PKHeX.WinForms CLB_KeySystem.Items.Add(KeySystemA[i], bKS[i]); } } - else GB_KeySystem.Visible = GB_Roamer.Visible = CHK_LibertyPass.Visible = false; + else + { + GB_KeySystem.Visible = GB_Roamer.Visible = CHK_LibertyPass.Visible = false; + } } + private void SaveMain() { uint valFly = BitConverter.ToUInt32(SAV.Data, ofsFly); @@ -170,11 +180,15 @@ namespace PKHeX.WinForms if (FlyDestC[i] < 32) { if (CLB_FlyDest.GetItemChecked(i)) - valFly |= (uint)1 << FlyDestC[i]; + valFly |= (uint) 1 << FlyDestC[i]; else - valFly &= ~((uint)1 << FlyDestC[i]); + valFly &= ~((uint) 1 << FlyDestC[i]); + } + else + { + var ofs = ofsFly + (FlyDestC[i] >> 3); + SAV.Data[ofs] = (byte)((SAV.Data[ofs] & ~(1 << (FlyDestC[i] & 7))) | ((CLB_FlyDest.GetItemChecked(i) ? 1 : 0) << (FlyDestC[i] & 7))); } - else SAV.Data[ofsFly + (FlyDestC[i] >> 3)] = (byte)(SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & ~(1 << (FlyDestC[i] & 7)) | ((CLB_FlyDest.GetItemChecked(i) ? 1 : 0) << (FlyDestC[i] & 7))); } BitConverter.GetBytes(valFly).CopyTo(SAV.Data, ofsFly); @@ -191,7 +205,7 @@ namespace PKHeX.WinForms SAV.Data[ofsRoamer + 0x2E + i] = (byte)d; if (c != 1) continue; - new byte[14].CopyTo(SAV.Data, ofsRoamer + 4 + i * 0x14); + new byte[14].CopyTo(SAV.Data, ofsRoamer + 4 + (i * 0x14)); SAV.Data[ofsRoamer + 0x2C + i] = 0; } @@ -203,10 +217,13 @@ namespace PKHeX.WinForms { // KeySystem for (int i = 0; i < CLB_KeySystem.Items.Count; i++) + { if (CLB_KeySystem.GetItemChecked(i) ^ bKS[i]) BitConverter.GetBytes(bKS[i] ? 0 : valKS[i]).CopyTo(SAV.Data, ofsKS + (i << 2)); + } } } + private void B_AllFlyDest_Click(object sender, EventArgs e) { for (int i = 0; i < CLB_FlyDest.Items.Count; i++) @@ -260,12 +277,14 @@ namespace PKHeX.WinForms new[] { 2400 }, // 37 new[] { 2557 } // 38 }; + private bool editing; private const int ofsFM = 0x25900; private readonly ToolTip TipExpB = new ToolTip(), TipExpW = new ToolTip(); private NumericUpDown[] nudaE, nudaF; private ComboBox[] cba; private ToolTip[] ta; + private void ReadEntralink() { editing = true; @@ -383,6 +402,7 @@ namespace PKHeX.WinForms SetEntreeExpTooltip(); editing = false; } + private void SaveEntralink() { for (int i = 0; i < 2; i++) @@ -400,6 +420,7 @@ namespace PKHeX.WinForms BitConverter.GetBytes((ushort)nudaF[i].Value).CopyTo(SAV.Data, ofsFM + 0xF0 + (i << 1)); SAV.Data[ofsFM + 0xFA] = (byte)NUD_FMMostParticipants.Value; } + private void SetEntreeExpTooltip(bool? isBlack = null) { for (int i = 0; i < 2; i++) @@ -410,7 +431,7 @@ namespace PKHeX.WinForms if (lv < 9) exp = lv * (lv + 1) * 5 / 2; else - exp = (lv - 9) * 50 + 225; + exp = ((lv - 9) * 50) + 225; exp += (int)nudaE[(i << 1) + 1].Value; var lvl = lv == 999 ? -1 : nudaE[(i << 1) + 1].Maximum - nudaE[(i << 1) + 1].Value + 1; var tip0 = $"{(i == 0 ? "White" : "Black")} LV {lv}{Environment.NewLine}" + @@ -421,6 +442,7 @@ namespace PKHeX.WinForms ta[i].SetToolTip(nudaE[(i << 1) + 1], tip0); } } + private void SetNudMax(bool? isBlack = null) { for (int i = 0; i < 2; i++) @@ -428,18 +450,20 @@ namespace PKHeX.WinForms if (isBlack == true) continue; var lv = (int)nudaE[i << 1].Value; - var expmax = lv > 8 ? 49 : lv * 5 + 4; + var expmax = lv > 8 ? 49 : (lv * 5) + 4; if (nudaE[(i << 1) + 1].Value > expmax) nudaE[(i << 1) + 1].Value = expmax; nudaE[(i << 1) + 1].Maximum = expmax; } } + private void SetFMVal(int ofsB, int len, uint val) { int s = LB_FunfestMissions.SelectedIndex; if (s < 0 || s >= FMUnlockConditions.Length) return; - BitConverter.GetBytes(BitConverter.ToUInt32(SAV.Data, ofsFM + (s << 2)) & ~(~(uint)0 >> (32 - len) << ofsB) | val << ofsB).CopyTo(SAV.Data, ofsFM + (s << 2)); + BitConverter.GetBytes((BitConverter.ToUInt32(SAV.Data, ofsFM + (s << 2)) & ~(~(uint)0 >> (32 - len) << ofsB)) | val << ofsB).CopyTo(SAV.Data, ofsFM + (s << 2)); } + private void LB_FunfestMissions_SelectedIndexChanged(object sender, EventArgs e) { int s = LB_FunfestMissions.SelectedIndex; @@ -487,8 +511,11 @@ namespace PKHeX.WinForms const int FunfestFlag = 2438; SAV.Data[0x2025E + (FunfestFlag >> 3)] |= 1 << (FunfestFlag & 7); foreach (int[] ia in FMUnlockConditions) + { for (int i = 0; i < ia?.Length; i++) SAV.Data[0x2025E + (ia[i] >> 3)] |= (byte)(1 << (ia[i] & 7)); + } + L_FMUnlocked.Visible = true; L_FMLocked.Visible = false; } @@ -551,6 +578,7 @@ namespace PKHeX.WinForms } private IList CurrentSlots; + private void ChangeArea(object sender, EventArgs e) { var area = WinFormsUtil.GetIndex(CB_Areas); @@ -560,6 +588,7 @@ namespace PKHeX.WinForms LB_Slots.Items.Add(z); LB_Slots.SelectedIndex = 0; } + private void ChangeSlot(object sender, EventArgs e) { CurrentSlot = null; @@ -575,6 +604,7 @@ namespace PKHeX.WinForms } private EntreeSlot CurrentSlot; + private void UpdateSlotValue(object sender, EventArgs e) { if (CurrentSlot == null) @@ -588,15 +618,26 @@ namespace PKHeX.WinForms SetGenders(CurrentSlot); } else if (sender == CB_Move) + { CurrentSlot.Move = WinFormsUtil.GetIndex(CB_Move); + } else if (sender == CB_Gender) + { CurrentSlot.Gender = WinFormsUtil.GetIndex(CB_Gender); + } else if (sender == CB_Form) + { CurrentSlot.Form = CB_Form.SelectedIndex; + } else if (sender == CHK_Invisible) + { CurrentSlot.Invisible = CHK_Invisible.Checked; + } else if (sender == NUD_Animation) + { CurrentSlot.Animation = (int)NUD_Animation.Value; + } + SetSprite(CurrentSlot); } @@ -645,6 +686,7 @@ namespace PKHeX.WinForms list.Add(new ComboItem { Text = "Female", Value = 1 }); return list; } + private void SetForms(EntreeSlot slot) { bool hasForms = PersonalTable.B2W2[slot.Species].HasFormes || slot.Species == 414; diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Pokedex5.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Pokedex5.cs index 55e73b713..7ebd28fd8 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Pokedex5.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen5/SAV_Pokedex5.cs @@ -11,6 +11,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV5 SAV; + public SAV_Pokedex5(SaveFile sav) { InitializeComponent(); @@ -61,6 +62,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeLBSpecies(object sender, EventArgs e) { if (editing) return; @@ -72,6 +74,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeDisplayed(object sender, EventArgs e) { if (!((CheckBox) sender).Checked) @@ -87,10 +90,13 @@ namespace PKHeX.WinForms CHK_P4.Checked |= CHK_P8.Checked; CHK_P5.Checked |= CHK_P9.Checked; } + private void ChangeEncountered(object sender, EventArgs e) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) + { CHK_P6.Checked = CHK_P7.Checked = CHK_P8.Checked = CHK_P9.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) { if (sender == CHK_P2 && CHK_P2.Checked) @@ -143,15 +149,16 @@ namespace PKHeX.WinForms return; for (int i = 0; i < forms.Length; i++) // Seen - CLB_FormsSeen.Items.Add(forms[i], formbools[f + i + 0*FormLen*8]); + CLB_FormsSeen.Items.Add(forms[i], formbools[f + i + (0 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Seen Shiny - CLB_FormsSeen.Items.Add($"* {forms[i]}", formbools[f + i + 1*FormLen*8]); + CLB_FormsSeen.Items.Add($"* {forms[i]}", formbools[f + i + (1 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Displayed - CLB_FormDisplayed.Items.Add(forms[i], formbools[f + i + 2*FormLen*8]); + CLB_FormDisplayed.Items.Add(forms[i], formbools[f + i + (2 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Displayed Shiny - CLB_FormDisplayed.Items.Add($"* {forms[i]}", formbools[f + i + 3*FormLen*8]); + CLB_FormDisplayed.Items.Add($"* {forms[i]}", formbools[f + i + (3 *FormLen*8)]); } + private void SetEntry() { if (species < 0) @@ -161,8 +168,10 @@ namespace PKHeX.WinForms specbools[i, species - 1] = CP[i].Checked; if (species <= 493) + { for (int i = 0; i < 7; i++) langbools[i, species - 1] = CL[i].Checked; + } int fc = SAV.Personal[species].FormeCount; int f = SAV.B2W2 ? SaveUtil.GetDexFormIndexB2W2(species, fc) : SaveUtil.GetDexFormIndexBW(species, fc); @@ -170,15 +179,15 @@ namespace PKHeX.WinForms return; for (int i = 0; i < CLB_FormsSeen.Items.Count/2; i++) // Seen - formbools[f + i + 0*FormLen*8] = CLB_FormsSeen.GetItemChecked(i); + formbools[f + i + (0 *FormLen*8)] = CLB_FormsSeen.GetItemChecked(i); for (int i = 0; i < CLB_FormsSeen.Items.Count/2; i++) // Seen Shiny - formbools[f + i + 1*FormLen*8] = CLB_FormsSeen.GetItemChecked(i + CLB_FormsSeen.Items.Count/2); + formbools[f + i + (1 *FormLen*8)] = CLB_FormsSeen.GetItemChecked(i + (CLB_FormsSeen.Items.Count/2)); editing = true; for (int i = 0; i < CLB_FormDisplayed.Items.Count/2; i++) // Displayed - formbools[f + i + 2*FormLen*8] = CLB_FormDisplayed.GetItemChecked(i); + formbools[f + i + (2 *FormLen*8)] = CLB_FormDisplayed.GetItemChecked(i); for (int i = 0; i < CLB_FormDisplayed.Items.Count/2; i++) // Displayed Shiny - formbools[f + i + 3*FormLen*8] = CLB_FormDisplayed.GetItemChecked(i + CLB_FormDisplayed.Items.Count/2); + formbools[f + i + (3 *FormLen*8)] = CLB_FormDisplayed.GetItemChecked(i + (CLB_FormDisplayed.Items.Count/2)); editing = false; } @@ -189,7 +198,7 @@ namespace PKHeX.WinForms for (int i = 0; i < arrCount; i++) { byte[] data = new byte[brSize]; - Array.Copy(SAV.Data, SAV.PokeDex + 8 + brSize * i, data, 0, brSize); + Array.Copy(SAV.Data, SAV.PokeDex + 8 + (brSize * i), data, 0, brSize); BitArray BitRegion = new BitArray(data); for (int b = 0; b < brSize * 8; b++) specbools[i, b] = BitRegion[b]; @@ -200,14 +209,17 @@ namespace PKHeX.WinForms Array.Copy(SAV.Data, SAV.PokeDexLanguageFlags, langdata, 0, LangSize); BitArray LangRegion = new BitArray(langdata); for (int b = 0; b < 493; b++) + { for (int i = 0; i < 7; i++) // 7 Languages - langbools[i, b] = LangRegion[7 * b + i]; + langbools[i, b] = LangRegion[(7 * b) + i]; + } byte[] formdata = new byte[FormLen*4]; - int FormDex = SAV.PokeDex + 0x8 + brSize*9; + int FormDex = SAV.PokeDex + 0x8 + (brSize * 9); Array.Copy(SAV.Data, FormDex, formdata, 0, formdata.Length); formbools = new BitArray(formdata); } + private void SetData() { // Save back the Species Bools @@ -217,10 +229,12 @@ namespace PKHeX.WinForms byte[] sdata = new byte[brSize]; for (int i = 0; i < brSize * 8; i++) + { if (specbools[p, i]) sdata[i>>3] |= (byte)(1 << (i&7)); + } - sdata.CopyTo(SAV.Data, SAV.PokeDex + 8 + brSize * p); + sdata.CopyTo(SAV.Data, SAV.PokeDex + 8 + (brSize * p)); } // Build new bool array for the Languages @@ -229,19 +243,23 @@ namespace PKHeX.WinForms int speciesCount = langbools.GetLength(1); bool[] languagedata = new bool[speciesCount << 3]; for (int i = 0; i < speciesCount; i++) + { for (int l = 0; l < langCount; l++) - languagedata[i * langCount + l] = langbools[l, i]; + languagedata[(i * langCount) + l] = langbools[l, i]; + } // Return to Byte Array byte[] ldata = new byte[languagedata.Length>>3]; for (int i = 0; i < languagedata.Length; i++) + { if (languagedata[i]) ldata[i>>3] |= (byte)(1 << (i&7)); + } ldata.CopyTo(SAV.Data, SAV.PokeDexLanguageFlags); } - int FormDex = SAV.PokeDex + 0x8 + brSize * 9; + int FormDex = SAV.PokeDex + 0x8 + (brSize * 9); formbools.CopyTo(SAV.Data, FormDex); } @@ -249,6 +267,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { SetEntry(); @@ -281,16 +300,22 @@ namespace PKHeX.WinForms CHK_P3.Checked = CHK_P5.Checked = gt != 0 && gt != 255 && ModifierKeys != Keys.Control; if (ModifierKeys == Keys.Control) + { foreach (var chk in new[] { CHK_P6, CHK_P7, CHK_P8, CHK_P9 }) chk.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) + { (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; + } } + private void B_Modify_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenu.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAll(object sender, EventArgs e) { int lang = SAV.Language; @@ -298,6 +323,7 @@ namespace PKHeX.WinForms lang--; if (sender == mnuSeenNone || sender == mnuSeenAll || sender == mnuComplete) + { for (int i = 0; i < LB_Species.Items.Count; i++) { int gt = SAV.Personal[i + 1].Gender; @@ -318,11 +344,15 @@ namespace PKHeX.WinForms } if (!CHK_P1.Checked) + { foreach (CheckBox t in CL) t.Checked = false; + } } + } if (sender == mnuCaughtNone || sender == mnuCaughtAll || sender == mnuComplete) + { for (int i = 0; i < CB_Species.Items.Count; i++) { int gt = SAV.Personal[i + 1].Gender; @@ -338,8 +368,10 @@ namespace PKHeX.WinForms if (mnuCaughtNone == sender) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) // if seen + { if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) // not displayed (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; // check one + } } if (mnuCaughtNone != sender) { @@ -360,6 +392,7 @@ namespace PKHeX.WinForms (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; } } + } SetEntry(); SetData(); @@ -376,16 +409,20 @@ namespace PKHeX.WinForms // Only allow one form to be displayed if the user sets a new display value if (e.NewValue != CheckState.Checked) return; for (int i = 0; i < CLB_FormDisplayed.Items.Count; i++) + { if (i != e.Index) CLB_FormDisplayed.SetItemChecked(i, false); else if (sender == CLB_FormDisplayed) CLB_FormsSeen.SetItemChecked(e.Index, true); // ensure this form is seen + } } + private void B_ModifyForms_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenuForms.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAllForms(object sender, EventArgs e) { if (sender == mnuFormNone) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BerryFieldXY.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BerryFieldXY.cs index 55e236421..ec6428c93 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BerryFieldXY.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BerryFieldXY.cs @@ -6,13 +6,13 @@ namespace PKHeX.WinForms { public partial class SAV_BerryFieldXY : Form { - private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_BerryFieldXY(SaveFile sav) { InitializeComponent(); WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage); - SAV = (SAV6)(Origin = sav).Clone(); + SAV = (SAV6)sav; listBox1.SelectedIndex = 0; } @@ -21,14 +21,15 @@ namespace PKHeX.WinForms // Change Berry Field // Gather Data - int berry = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex*0x18 + 1 * 0); - int u1 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 1 * 2); - int u2 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 2 * 2); - int u3 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 3 * 2); - int u4 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 4 * 2); - int u5 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 5 * 2); - int u6 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 6 * 2); - int u7 = BitConverter.ToUInt16(SAV.Data, SAV.BerryField + 0xC + listBox1.SelectedIndex * 0x18 + 7 * 2); + int ofs = SAV.BerryField + 0xC + (listBox1.SelectedIndex * 0x18); + int berry = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 0)); + int u1 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 1)); + int u2 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 2)); + int u3 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 3)); + int u4 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 4)); + int u5 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 5)); + int u6 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 6)); + int u7 = BitConverter.ToUInt16(SAV.Data, ofs + (2 * 7)); // Display Data TB_Berry.Text = berry.ToString(); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs index bf3c1d094..4869b60ea 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SaveFile SAV; + public SAV_BoxLayout(SaveFile sav, int box) { InitializeComponent(); @@ -51,12 +52,14 @@ namespace PKHeX.WinForms return false; } } + private void LoadBoxNames() { LB_BoxSelect.Items.Clear(); for (int i = 0; i < SAV.BoxCount; i++) LB_BoxSelect.Items.Add(SAV.GetBoxName(i)); } + private void LoadUnlockedCount() { if (SAV.BoxesUnlocked <= 0) @@ -72,6 +75,7 @@ namespace PKHeX.WinForms CB_Unlocked.Items.Add(i); CB_Unlocked.SelectedIndex = Math.Min(max, SAV.BoxesUnlocked); } + private void LoadFlags() { byte[] flags = SAV.BoxFlags; @@ -99,6 +103,7 @@ namespace PKHeX.WinForms private NumericUpDown[] flagArr = new NumericUpDown[0]; private bool editing; private bool renamingBox; + private void ChangeBox(object sender, EventArgs e) { if (renamingBox) @@ -110,6 +115,7 @@ namespace PKHeX.WinForms editing = false; } + private void ChangeBoxDetails(object sender, EventArgs e) { if (editing) @@ -120,10 +126,12 @@ namespace PKHeX.WinForms LB_BoxSelect.Items[LB_BoxSelect.SelectedIndex] = TB_BoxName.Text; renamingBox = false; } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void B_Save_Click(object sender, EventArgs e) { if (flagArr.Length > 0) @@ -184,7 +192,10 @@ namespace PKHeX.WinForms WinFormsUtil.Alert("Locked/Team slots prevent movement of box(es)."); } else + { ChangeBox(null, null); + } + editing = renamingBox = false; } } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs index a7fdf4ec4..351631fa2 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs @@ -12,6 +12,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_HallOfFame(SaveFile sav) { InitializeComponent(); @@ -53,6 +54,7 @@ namespace PKHeX.WinForms catch (Exception e) { WinFormsUtil.Alert("Font loading failed...", e.ToString()); } editing = true; } + private bool editing; private readonly string[] gendersymbols = Main.GenderSymbols; @@ -91,11 +93,13 @@ namespace PKHeX.WinForms { Close(); } + private void B_Close_Click(object sender, EventArgs e) { Origin.SetData(data, SAV.HoF); Close(); } + private void DisplayEntry(object sender, EventArgs e) { editing = false; @@ -180,16 +184,21 @@ namespace PKHeX.WinForms NUP_PartyIndex.Value = 1; NUP_PartyIndex_ValueChanged(sender, e); } - else editing = true; - end: + else + { + editing = true; + } + + end: RTB.Lines = s.ToArray(); RTB.Font = new Font("Courier New", 8); } + private void NUP_PartyIndex_ValueChanged(object sender, EventArgs e) { editing = false; int index = LB_DataEntry.SelectedIndex; - int offset = index * 0x1B4 + (Convert.ToInt32(NUP_PartyIndex.Value)-1) * 0x48; + int offset = (index * 0x1B4) + ((Convert.ToInt32(NUP_PartyIndex.Value)-1) * 0x48); if (offset < 0) return; @@ -235,6 +244,7 @@ namespace PKHeX.WinForms bpkx.Image = SpriteUtil.GetSprite(species, (int)form, (int)gender, item, false, shiny == 1); editing = true; } + private void Write_Entry(object sender, EventArgs e) { if (!editing) @@ -244,7 +254,7 @@ namespace PKHeX.WinForms int index = LB_DataEntry.SelectedIndex; int partymember = Convert.ToInt32(NUP_PartyIndex.Value) - 1; - int offset = index * 0x1B4 + partymember * 0x48; + int offset = (index * 0x1B4) + (partymember * 0x48); BitConverter.GetBytes(Convert.ToUInt16(CB_Species.SelectedValue)).CopyTo(data, offset + 0x00); BitConverter.GetBytes(Convert.ToUInt16(CB_HeldItem.SelectedValue)).CopyTo(data, offset + 0x02); @@ -296,6 +306,7 @@ namespace PKHeX.WinForms bpkx.Image = SpriteUtil.GetSprite(WinFormsUtil.GetIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.GetGenderFromString(Label_Gender.Text), WinFormsUtil.GetIndex(CB_HeldItem), false, CHK_Shiny.Checked); DisplayEntry(null, null); // refresh text view } + private void Validate_TextBoxes() { TB_Level.Text = Math.Min(Util.ToInt32(TB_Level.Text), 100).ToString(); @@ -303,6 +314,7 @@ namespace PKHeX.WinForms TB_TID.Text = Math.Min(Util.ToInt32(TB_TID.Text), ushort.MaxValue).ToString(); TB_SID.Text = Math.Min(Util.ToInt32(TB_SID.Text), ushort.MaxValue).ToString(); } + private void UpdateNickname(object sender, EventArgs e) { if (!CHK_Nicknamed.Checked) @@ -310,13 +322,18 @@ namespace PKHeX.WinForms // Fetch Current Species and set it as Nickname Text int species = WinFormsUtil.GetIndex(CB_Species); if (species == 0 || species > 721) - TB_Nickname.Text = ""; - else try { - // get language - TB_Nickname.Text = PKX.GetSpeciesNameGeneration(species, SAV.Language, 6); + TB_Nickname.Text = ""; + } + else + { + try + { + // get language + TB_Nickname.Text = PKX.GetSpeciesNameGeneration(species, SAV.Language, 6); + } + catch { } } - catch { } } TB_Nickname.ReadOnly = !CHK_Nicknamed.Checked; @@ -332,11 +349,13 @@ namespace PKHeX.WinForms CB_Form.InitializeBinding(); CB_Form.DataSource = PKX.GetFormList(species, GameInfo.Strings.types, GameInfo.Strings.forms, Main.GenderSymbols, SAV.Generation).ToList(); } + private void UpdateSpecies(object sender, EventArgs e) { SetForms(); UpdateNickname(null, null); } + private void UpdateShiny(object sender, EventArgs e) { if (!editing) @@ -345,6 +364,7 @@ namespace PKHeX.WinForms Write_Entry(null, null); } + private void UpdateGender(object sender, EventArgs e) { // Get Gender Threshold @@ -376,6 +396,7 @@ namespace PKHeX.WinForms Write_Entry(null, null); } + private void SetGenderLabel(int gender) { if (gender == 0) @@ -397,8 +418,8 @@ namespace PKHeX.WinForms { if (LB_DataEntry.SelectedIndex < 1) { WinFormsUtil.Alert("Cannot delete your first Hall of Fame Clear entry."); return; } int index = LB_DataEntry.SelectedIndex; - if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, $"Delete Entry {index} from your records?") - != DialogResult.Yes) return; + if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, $"Delete Entry {index} from your records?") != DialogResult.Yes) + return; int offset = index * 0x1B4; if (index != 15) Array.Copy(data, offset + 0x1B4, data, offset, 0x1B4 * (15 - index)); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Link6.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Link6.cs index c3e6cfea5..0af16b9c5 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Link6.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Link6.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_Link6(SaveFile sav) { InitializeComponent(); @@ -46,10 +47,12 @@ namespace PKHeX.WinForms Origin.SetData(SAV.Data, 0); Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void B_Import_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog {Filter = PL6.Filter}; @@ -64,6 +67,7 @@ namespace PKHeX.WinForms LoadLinkData(data); B_Export.Enabled = true; } + private void B_Export_Click(object sender, EventArgs e) { if (LinkInfo.Data == null) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_OPower.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_OPower.cs index 25ed61ffe..d20aa8d72 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_OPower.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_OPower.cs @@ -30,6 +30,7 @@ namespace PKHeX.WinForms } private void B_Cancel_Click(object sender, EventArgs e) => Close(); + private void B_Save_Click(object sender, EventArgs e) { SaveData(); @@ -40,6 +41,7 @@ namespace PKHeX.WinForms private static readonly string[] Values = Enum.GetNames(typeof(OPower6Value)); private OPower6Type Current; + private void SaveData() { Data.MasterFlag = CHK_Master.Checked; @@ -63,6 +65,7 @@ namespace PKHeX.WinForms CHK_MAX.Enabled = Data.GetHasOPowerMAX(Current); CHK_MAX.Checked = Data.GetOPowerMAX(Current); } + private void SaveCurrent() { Data.SetOPowerLevel(Current, CB_Value.SelectedIndex); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokeBlockORAS.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokeBlockORAS.cs index 6e49805fc..35b780046 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokeBlockORAS.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokeBlockORAS.cs @@ -8,6 +8,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_PokeBlockORAS(SaveFile sav) { InitializeComponent(); @@ -19,19 +20,21 @@ namespace PKHeX.WinForms for (int i = 0; i < lbl_spec.Length; i++) { lbl_spec[i].Text = $"{GameInfo.Strings.pokeblocks[94 + i]}:"; - nup_spec[i].Value = BitConverter.ToUInt32(SAV.Data, SAV.Contest + i * 4); + nup_spec[i].Value = BitConverter.ToUInt32(SAV.Data, SAV.Contest + (i * 4)); } } + private readonly NumericUpDown[] nup_spec; private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void B_Save_Click(object sender, EventArgs e) { for (int i = 0; i < nup_spec.Length; i++) - BitConverter.GetBytes((uint)nup_spec[i].Value).CopyTo(SAV.Data, SAV.Contest + i * 4); + BitConverter.GetBytes((uint)nup_spec[i].Value).CopyTo(SAV.Data, SAV.Contest + (i * 4)); Origin.SetData(SAV.Data, 0); Close(); } @@ -48,9 +51,10 @@ namespace PKHeX.WinForms { ushort berry = plantable[Util.Rand.Next(1, plantable.Length)]; // get random berry item ID from list BitConverter.GetBytes(berry).CopyTo(tree, 6); // put berry into tree. - tree.CopyTo(SAV.Data, SAV.BerryField + 0x10 * i); // put tree into plot + tree.CopyTo(SAV.Data, SAV.BerryField + (0x10 * i)); // put tree into plot } } + private void B_GiveAllBlocks_Click(object sender, EventArgs e) { foreach (NumericUpDown n in nup_spec) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexORAS.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexORAS.cs index 4a0395bb0..bc7eda6f0 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexORAS.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexORAS.cs @@ -11,6 +11,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_PokedexORAS(SaveFile sav) { InitializeComponent(); @@ -59,6 +60,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeLBSpecies(object sender, EventArgs e) { if (editing) return; @@ -70,6 +72,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeDisplayed(object sender, EventArgs e) { if (!((CheckBox) sender).Checked) @@ -85,10 +88,13 @@ namespace PKHeX.WinForms CHK_P4.Checked |= CHK_P8.Checked; CHK_P5.Checked |= CHK_P9.Checked; } + private void ChangeEncountered(object sender, EventArgs e) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) + { CHK_P6.Checked = CHK_P7.Checked = CHK_P8.Checked = CHK_P9.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) { if (sender == CHK_P2 && CHK_P2.Checked) @@ -121,7 +127,7 @@ namespace PKHeX.WinForms CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = gt != 0 && gt != 255; // Not Male-Only and Not Genderless // Load Encountered Count - MT_Count.Text = BitConverter.ToUInt16(SAV.Data, SAV.EncounterCount + (pk - 1) * 2).ToString(); + MT_Count.Text = BitConverter.ToUInt16(SAV.Data, SAV.EncounterCount + ((pk - 1) * 2)).ToString(); CLB_FormsSeen.Items.Clear(); CLB_FormDisplayed.Items.Clear(); @@ -136,15 +142,16 @@ namespace PKHeX.WinForms // 0x26 packs of bools for (int i = 0; i < forms.Length; i++) // Seen - CLB_FormsSeen.Items.Add(forms[i], formbools[f + i + 0*FormLen*8]); + CLB_FormsSeen.Items.Add(forms[i], formbools[f + i + (0 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Seen Shiny - CLB_FormsSeen.Items.Add($"* {forms[i]}", formbools[f + i + 1*FormLen*8]); + CLB_FormsSeen.Items.Add($"* {forms[i]}", formbools[f + i + (1 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Displayed - CLB_FormDisplayed.Items.Add(forms[i], formbools[f + i + 2*FormLen*8]); + CLB_FormDisplayed.Items.Add(forms[i], formbools[f + i + (2 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Displayed Shiny - CLB_FormDisplayed.Items.Add($"* {forms[i]}", formbools[f + i + 3*FormLen*8]); + CLB_FormDisplayed.Items.Add($"* {forms[i]}", formbools[f + i + (3 *FormLen*8)]); } + private void SetEntry() { if (species < 0) @@ -168,7 +175,7 @@ namespace PKHeX.WinForms langbools[5, species - 1] = CHK_L6.Checked; langbools[6, species - 1] = CHK_L7.Checked; - BitConverter.GetBytes((ushort)Math.Min(0xFFFF, Util.ToUInt32(MT_Count.Text))).CopyTo(SAV.Data, SAV.EncounterCount + (species - 1) * 2); + BitConverter.GetBytes((ushort)Math.Min(0xFFFF, Util.ToUInt32(MT_Count.Text))).CopyTo(SAV.Data, SAV.EncounterCount + ((species - 1) * 2)); int fc = SAV.Personal[species].FormeCount; int f = SaveUtil.GetDexFormIndexORAS(species, fc); @@ -176,15 +183,15 @@ namespace PKHeX.WinForms return; for (int i = 0; i < CLB_FormsSeen.Items.Count/2; i++) // Seen - formbools[f + i + 0*FormLen*8] = CLB_FormsSeen.GetItemChecked(i); + formbools[f + i + (0 *FormLen*8)] = CLB_FormsSeen.GetItemChecked(i); for (int i = 0; i < CLB_FormsSeen.Items.Count/2; i++) // Seen Shiny - formbools[f + i + 1*FormLen*8] = CLB_FormsSeen.GetItemChecked(i + CLB_FormsSeen.Items.Count/2); + formbools[f + i + (1 *FormLen*8)] = CLB_FormsSeen.GetItemChecked(i + (CLB_FormsSeen.Items.Count/2)); editing = true; for (int i = 0; i < CLB_FormDisplayed.Items.Count/2; i++) // Displayed - formbools[f + i + 2*FormLen*8] = CLB_FormDisplayed.GetItemChecked(i); + formbools[f + i + (2 *FormLen*8)] = CLB_FormDisplayed.GetItemChecked(i); for (int i = 0; i < CLB_FormDisplayed.Items.Count/2; i++) // Displayed Shiny - formbools[f + i + 3*FormLen*8] = CLB_FormDisplayed.GetItemChecked(i + CLB_FormDisplayed.Items.Count/2); + formbools[f + i + (3 *FormLen*8)] = CLB_FormDisplayed.GetItemChecked(i + (CLB_FormDisplayed.Items.Count/2)); editing = false; } @@ -194,7 +201,7 @@ namespace PKHeX.WinForms for (int i = 0; i < 9; i++) { byte[] data = new byte[0x60]; - int offset = SAV.PokeDex + 0x8 + 0x60 * i; + int offset = SAV.PokeDex + 0x8 + (0x60 * i); Array.Copy(SAV.Data, offset, data, 0, data.Length); BitArray BitRegion = new BitArray(data); for (int b = 0; b < 0x60 * 8; b++) @@ -205,14 +212,17 @@ namespace PKHeX.WinForms byte[] langdata = new byte[0x280]; Array.Copy(SAV.Data, SAV.PokeDexLanguageFlags, langdata, 0, langdata.Length); BitArray LangRegion = new BitArray(langdata); - for (int b = 0; b < 721; b++) // 721 Species + for (int b = 0; b < SAV.MaxSpeciesID; b++) // 721 Species + { for (int i = 0; i < 7; i++) // 7 Languages - langbools[i, b] = LangRegion[7 * b + i]; + langbools[i, b] = LangRegion[(7 * b) + i]; + } byte[] formdata = new byte[FormLen*4]; Array.Copy(SAV.Data, SAV.PokeDex + 0x368, formdata, 0, formdata.Length); formbools = new BitArray(formdata); } + private void SetData() { // Save back the Species Bools @@ -222,24 +232,30 @@ namespace PKHeX.WinForms byte[] sdata = new byte[0x60]; for (int i = 0; i < 0x60*8; i++) + { if (specbools[p, i]) sdata[i/8] |= (byte) (1 << i%8); + } - sdata.CopyTo(SAV.Data, SAV.PokeDex + 8 + 0x60*p); + sdata.CopyTo(SAV.Data, SAV.PokeDex + 8 + (0x60 * p)); } // Build new bool array for the Languages bool[] languagedata = new bool[0x27C*8]; - for (int i = 0; i < 722; i++) + for (int i = 0; i <= SAV.MaxSpeciesID; i++) + { for (int l = 0; l < 7; l++) - languagedata[i*7 + l] = langbools[l, i]; + languagedata[(i * 7) + l] = langbools[l, i]; + } // Return to Byte Array byte[] ldata = new byte[languagedata.Length/8]; for (int i = 0; i < languagedata.Length; i++) + { if (languagedata[i]) ldata[i/8] |= (byte) (1 << i%8); + } ldata.CopyTo(SAV.Data, SAV.PokeDexLanguageFlags); @@ -254,6 +270,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { SetEntry(); @@ -286,10 +303,14 @@ namespace PKHeX.WinForms CHK_P3.Checked = CHK_P5.Checked = gt != 0 && gt != 255 && ModifierKeys != Keys.Control; if (ModifierKeys == Keys.Control) - foreach (var chk in new[]{CHK_P6, CHK_P7, CHK_P8, CHK_P9}) + { + foreach (var chk in new[] { CHK_P6, CHK_P7, CHK_P8, CHK_P9 }) chk.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) + { (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; + } for (int i = 0; i < CLB_FormsSeen.Items.Count; i++) CLB_FormsSeen.SetItemChecked(i, ModifierKeys != Keys.Control); @@ -299,23 +320,25 @@ namespace PKHeX.WinForms if (Util.ToInt32(MT_Count.Text) == 0) MT_Count.Text = "1"; } + private void B_Modify_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenu.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAll(object sender, EventArgs e) { if (mnuDexNav == sender) { - for (int i = 0; i < 0x2D1; i++) - BitConverter.GetBytes((ushort)999).CopyTo(SAV.Data, SAV.EncounterCount + i * 2); + for (int i = 0; i < SAV.MaxSpeciesID; i++) + BitConverter.GetBytes((ushort)999).CopyTo(SAV.Data, SAV.EncounterCount + (i * 2)); return; } if (mnuResetNav == sender) { - for (int i = 0; i < 0x2D1; i++) - BitConverter.GetBytes((ushort)0).CopyTo(SAV.Data, SAV.EncounterCount + i * 2); + for (int i = 0; i < SAV.MaxSpeciesID; i++) + BitConverter.GetBytes((ushort)0).CopyTo(SAV.Data, SAV.EncounterCount + (i * 2)); return; } @@ -324,6 +347,7 @@ namespace PKHeX.WinForms lang--; if (sender == mnuSeenNone || sender == mnuSeenAll || sender == mnuComplete) + { for (int i = 0; i < CB_Species.Items.Count; i++) { int gt = SAV.Personal[i + 1].Gender; @@ -344,11 +368,15 @@ namespace PKHeX.WinForms } if (!CHK_P1.Checked) + { foreach (CheckBox t in CL) t.Checked = false; + } } + } if (sender == mnuCaughtNone || sender == mnuCaughtAll || sender == mnuComplete) + { for (int i = 0; i < LB_Species.Items.Count; i++) { int gt = SAV.Personal[i + 1].Gender; @@ -361,8 +389,10 @@ namespace PKHeX.WinForms if (mnuCaughtNone == sender) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) // if seen + { if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) // not displayed (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; // check one + } } if (mnuCaughtNone != sender) { @@ -383,6 +413,7 @@ namespace PKHeX.WinForms (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; } } + } SetEntry(); SetData(); @@ -401,16 +432,20 @@ namespace PKHeX.WinForms // Only allow one form to be displayed if the user sets a new display value if (e.NewValue != CheckState.Checked) return; for (int i = 0; i < CLB_FormDisplayed.Items.Count; i++) + { if (i != e.Index) CLB_FormDisplayed.SetItemChecked(i, false); else if (sender == CLB_FormDisplayed) CLB_FormsSeen.SetItemChecked(e.Index, true); // ensure this form is seen + } } + private void B_ModifyForms_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenuForms.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAllForms(object sender, EventArgs e) { if (sender == mnuFormNone) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexXY.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexXY.cs index b4600637e..cdc8e310c 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexXY.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_PokedexXY.cs @@ -11,6 +11,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_PokedexXY(SaveFile sav) { InitializeComponent(); @@ -60,6 +61,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeLBSpecies(object sender, EventArgs e) { if (editing) return; @@ -71,6 +73,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeDisplayed(object sender, EventArgs e) { if (!((CheckBox) sender).Checked) @@ -86,10 +89,13 @@ namespace PKHeX.WinForms CHK_P4.Checked |= CHK_P8.Checked; CHK_P5.Checked |= CHK_P9.Checked; } + private void ChangeEncountered(object sender, EventArgs e) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) + { CHK_P6.Checked = CHK_P7.Checked = CHK_P8.Checked = CHK_P9.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) { if (sender == CHK_P2 && CHK_P2.Checked) @@ -137,15 +143,16 @@ namespace PKHeX.WinForms // 0x26 packs of bools for (int i = 0; i < forms.Length; i++) // Seen - CLB_FormsSeen.Items.Add(forms[i], formbools[f + i + 0*FormLen*8]); + CLB_FormsSeen.Items.Add(forms[i], formbools[f + i + (0 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Seen Shiny - CLB_FormsSeen.Items.Add($"* {forms[i]}", formbools[f + i + 1*FormLen*8]); + CLB_FormsSeen.Items.Add($"* {forms[i]}", formbools[f + i + (1 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Displayed - CLB_FormDisplayed.Items.Add(forms[i], formbools[f + i + 2*FormLen*8]); + CLB_FormDisplayed.Items.Add(forms[i], formbools[f + i + (2 *FormLen*8)]); for (int i = 0; i < forms.Length; i++) // Displayed Shiny - CLB_FormDisplayed.Items.Add($"* {forms[i]}", formbools[f + i + 3*FormLen*8]); + CLB_FormDisplayed.Items.Add($"* {forms[i]}", formbools[f + i + (3 *FormLen*8)]); } + private void SetEntry() { if (species < 0) @@ -177,15 +184,15 @@ namespace PKHeX.WinForms return; for (int i = 0; i < CLB_FormsSeen.Items.Count/2; i++) // Seen - formbools[f + i + 0*FormLen*8] = CLB_FormsSeen.GetItemChecked(i); + formbools[f + i + (0 *FormLen*8)] = CLB_FormsSeen.GetItemChecked(i); for (int i = 0; i < CLB_FormsSeen.Items.Count/2; i++) // Seen Shiny - formbools[f + i + 1*FormLen*8] = CLB_FormsSeen.GetItemChecked(i + CLB_FormsSeen.Items.Count/2); + formbools[f + i + (1 *FormLen*8)] = CLB_FormsSeen.GetItemChecked(i + (CLB_FormsSeen.Items.Count/2)); editing = true; for (int i = 0; i < CLB_FormDisplayed.Items.Count/2; i++) // Displayed - formbools[f + i + 2*FormLen*8] = CLB_FormDisplayed.GetItemChecked(i); + formbools[f + i + (2 *FormLen*8)] = CLB_FormDisplayed.GetItemChecked(i); for (int i = 0; i < CLB_FormDisplayed.Items.Count/2; i++) // Displayed Shiny - formbools[f + i + 3*FormLen*8] = CLB_FormDisplayed.GetItemChecked(i + CLB_FormDisplayed.Items.Count/2); + formbools[f + i + (3 *FormLen*8)] = CLB_FormDisplayed.GetItemChecked(i + (CLB_FormDisplayed.Items.Count/2)); editing = false; } @@ -195,7 +202,7 @@ namespace PKHeX.WinForms for (int i = 0; i < 9; i++) { byte[] data = new byte[0x60]; - Array.Copy(SAV.Data, SAV.PokeDex + 8 + 0x60 * i, data, 0, 0x60); + Array.Copy(SAV.Data, SAV.PokeDex + 8 + (0x60 * i), data, 0, 0x60); BitArray BitRegion = new BitArray(data); for (int b = 0; b < 0x60 * 8; b++) specbools[i, b] = BitRegion[b]; @@ -206,8 +213,10 @@ namespace PKHeX.WinForms Array.Copy(SAV.Data, SAV.PokeDexLanguageFlags, langdata, 0, 0x280); BitArray LangRegion = new BitArray(langdata); for (int b = 0; b < 721; b++) // 721 Species + { for (int i = 0; i < 7; i++) // 7 Languages - langbools[i, b] = LangRegion[7 * b + i]; + langbools[i, b] = LangRegion[(7 * b) + i]; + } // Fill Foreign array byte[] foreigndata = new byte[0x52]; @@ -220,6 +229,7 @@ namespace PKHeX.WinForms Array.Copy(SAV.Data, SAV.PokeDex + 0x368, formdata, 0, formdata.Length); formbools = new BitArray(formdata); } + private void SetData() { // Save back the Species Bools @@ -229,25 +239,31 @@ namespace PKHeX.WinForms byte[] sdata = new byte[0x60]; for (int i = 0; i < 0x60 * 8; i++) + { if (specbools[p, i]) sdata[i / 8] |= (byte)(1 << i % 8); + } - sdata.CopyTo(SAV.Data, SAV.PokeDex + 8 + 0x60 * p); + sdata.CopyTo(SAV.Data, SAV.PokeDex + 8 + (0x60 * p)); } // Build new bool array for the Languages { bool[] languagedata = new bool[0x280 * 8]; for (int i = 0; i < 731; i++) + { for (int l = 0; l < 7; l++) - languagedata[i * 7 + l] = langbools[l, i]; + languagedata[(i * 7) + l] = langbools[l, i]; + } // Return to Byte Array byte[] ldata = new byte[languagedata.Length / 8]; for (int i = 0; i < languagedata.Length; i++) + { if (languagedata[i]) ldata[i / 8] |= (byte)(1 << i % 8); + } ldata.CopyTo(SAV.Data, SAV.PokeDexLanguageFlags); } @@ -258,8 +274,11 @@ namespace PKHeX.WinForms { byte[] foreigndata = new byte[0x52]; for (int i = 0; i < 0x52 * 8; i++) + { if (foreignbools[i]) foreigndata[i / 8] |= (byte)(1 << i % 8); + } + foreigndata.CopyTo(SAV.Data, SAV.PokeDex + 0x64C); } @@ -272,6 +291,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { SetEntry(); @@ -309,16 +329,22 @@ namespace PKHeX.WinForms CHK_P3.Checked = CHK_P5.Checked = gt != 0 && gt != 255 && ModifierKeys != Keys.Control; if (ModifierKeys == Keys.Control) + { foreach (var chk in new[] { CHK_P6, CHK_P7, CHK_P8, CHK_P9 }) chk.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) + { (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; + } } + private void B_Modify_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenu.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAll(object sender, EventArgs e) { int lang = SAV.Language; @@ -326,6 +352,7 @@ namespace PKHeX.WinForms lang--; if (sender == mnuSeenNone || sender == mnuSeenAll || sender == mnuComplete) + { for (int i = 0; i < LB_Species.Items.Count; i++) { int gt = SAV.Personal[i + 1].Gender; @@ -346,11 +373,15 @@ namespace PKHeX.WinForms } if (!CHK_P1.Checked && !CHK_F1.Checked) + { foreach (CheckBox t in CL) t.Checked = false; + } } + } if (sender == mnuCaughtNone || sender == mnuCaughtAll || sender == mnuComplete) + { for (int i = 0; i < CB_Species.Items.Count; i++) { int gt = SAV.Personal[i + 1].Gender; @@ -363,8 +394,10 @@ namespace PKHeX.WinForms if (mnuCaughtNone == sender) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) // if seen + { if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) // not displayed (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; // check one + } } if (mnuCaughtNone != sender) { @@ -385,6 +418,7 @@ namespace PKHeX.WinForms (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; } } + } SetEntry(); SetData(); @@ -403,16 +437,20 @@ namespace PKHeX.WinForms // Only allow one form to be displayed if the user sets a new display value if (e.NewValue != CheckState.Checked) return; for (int i = 0; i < CLB_FormDisplayed.Items.Count; i++) + { if (i != e.Index) CLB_FormDisplayed.SetItemChecked(i, false); else if (sender == CLB_FormDisplayed) CLB_FormsSeen.SetItemChecked(e.Index, true); // ensure this form is seen + } } + private void B_ModifyForms_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenuForms.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAllForms(object sender, EventArgs e) { if (sender == mnuFormNone) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs index dbfb58d12..9cbcd32f2 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_Pokepuff(SaveFile sav) { InitializeComponent(); @@ -23,6 +24,7 @@ namespace PKHeX.WinForms private readonly string[] pfa = GameInfo.Strings.puffs; private int PuffCount { get; set; } + private void Setup() { dgv.Rows.Clear(); @@ -78,24 +80,28 @@ namespace PKHeX.WinForms { Close(); } + private void B_All_Click(object sender, EventArgs e) { int[] plus10 = {21, 22}; byte[] newpuffs = new byte[PuffCount]; if (ModifierKeys == Keys.Control) + { for (int i = 0; i < PuffCount; i++) newpuffs[i] = (byte)plus10[Util.Rand.Next(2)]; + } else { for (int i = 0; i < PuffCount; i++) - newpuffs[i] = (byte)(i % (pfa.Length - 1) + 1); + newpuffs[i] = (byte)((i % (pfa.Length - 1)) + 1); Util.Shuffle(newpuffs); } Array.Copy(newpuffs, 0, SAV.Data, SAV.Puff, PuffCount); Setup(); } + private void B_None_Click(object sender, EventArgs e) { byte[] newpuffs = new byte[PuffCount]; @@ -107,6 +113,7 @@ namespace PKHeX.WinForms Array.Copy(newpuffs, 0, SAV.Data, SAV.Puff, PuffCount); Setup(); } + private void B_Sort_Click(object sender, EventArgs e) { var puffs = GetPuffs(false); @@ -132,6 +139,7 @@ namespace PKHeX.WinForms Array.Resize(ref arr, PuffCount); return arr; } + private void B_Save_Click(object sender, EventArgs e) { SAV.Puffs = GetPuffs(); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs index 588ae9873..9ae09dc7a 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; @@ -11,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_SecretBase(SaveFile sav) { InitializeComponent(); @@ -68,12 +68,13 @@ namespace PKHeX.WinForms LB_Favorite.Items.Add($"* {OT}"); for (int i = 0; i < 30; i++) { - string BaseTrainer = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, favoff + i * 0x3E0 + 0x218, 0x1A)); + string BaseTrainer = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, favoff + (i * 0x3E0) + 0x218, 0x1A)); if (BaseTrainer.Length < 1 || BaseTrainer[0] == '\0') BaseTrainer = "Empty"; LB_Favorite.Items.Add($"{i} {BaseTrainer}"); } } + private void B_SAV2FAV(object sender, EventArgs e) { loading = true; @@ -88,24 +89,26 @@ namespace PKHeX.WinForms string TrainerName = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x218, 0x1A)); TB_FOT.Text = TrainerName; - TB_FT1.Text = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x232 + 0x22 * 0, 0x22)); - TB_FT2.Text = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x232 + 0x22 * 1, 0x22)); + TB_FT1.Text = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x232 + (0x22 * 0), 0x22)); + TB_FT2.Text = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x232 + (0x22 * 1), 0x22)); - string saying1 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + 0x22 * 0, 0x22)); - string saying2 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + 0x22 * 1, 0x22)); - string saying3 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + 0x22 * 2, 0x22)); - string saying4 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + 0x22 * 3, 0x22)); + string saying1 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + (0x22 * 0), 0x22)); + string saying2 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + (0x22 * 1), 0x22)); + string saying3 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + (0x22 * 2), 0x22)); + string saying4 = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, offset + 0x276 + (0x22 * 3), 0x22)); - int baseloc = BitConverter.ToInt16(SAV.Data, offset); - NUD_FBaseLocation.Value = baseloc; + NUD_FBaseLocation.Value = BitConverter.ToInt16(SAV.Data, offset); TB_FSay1.Text = saying1; TB_FSay2.Text = saying2; TB_FSay3.Text = saying3; TB_FSay4.Text = saying4; // Gather data for Object Array objdata = new byte[25, 12]; for (int i = 0; i < 25; i++) + { for (int z = 0; z < 12; z++) - objdata[i, z] = SAV.Data[offset + 2 + 12 * i + z]; + objdata[i, z] = SAV.Data[offset + 2 + (12 * i) + z]; + } + NUD_FObject.Value = 1; // Trigger Update ChangeObjectIndex(null, null); @@ -114,17 +117,23 @@ namespace PKHeX.WinForms // Trainer Pokemon pkmdata = new byte[3, 0x34]; if (index > 0) + { for (int i = 0; i < 3; i++) + { for (int z = 0; z < 0x34; z++) - pkmdata[i, z] = SAV.Data[offset + 0x32E + 0x34 * i + z]; + pkmdata[i, z] = SAV.Data[offset + 0x32E + (0x34 * i) + z]; + } + } NUD_FPKM.Value = 1; ChangeFavPKM(null, null); // Trigger Update loading = false; } + private byte[,] objdata; private byte[,] pkmdata; + private void B_FAV2SAV(object sender, EventArgs e) { // Write data back to save @@ -152,22 +161,22 @@ namespace PKHeX.WinForms string team1 = TB_FT1.Text; string team2 = TB_FT2.Text; byte[] t1 = Encoding.Unicode.GetBytes(team1); - Array.Resize(ref t1, 0x22); Array.Copy(t1, 0, SAV.Data, offset + 0x232 + 0x22 * 0, 0x22); + Array.Resize(ref t1, 0x22); Array.Copy(t1, 0, SAV.Data, offset + 0x232 + (0x22 * 0), 0x22); byte[] t2 = Encoding.Unicode.GetBytes(team2); - Array.Resize(ref t2, 0x22); Array.Copy(t2, 0, SAV.Data, offset + 0x232 + 0x22 * 1, 0x22); + Array.Resize(ref t2, 0x22); Array.Copy(t2, 0, SAV.Data, offset + 0x232 + (0x22 * 1), 0x22); string saying1 = TB_FSay1.Text; string saying2 = TB_FSay2.Text; string saying3 = TB_FSay3.Text; string saying4 = TB_FSay4.Text; byte[] s1 = Encoding.Unicode.GetBytes(saying1); - Array.Resize(ref s1, 0x22); Array.Copy(s1, 0, SAV.Data, offset + 0x276 + 0x22 * 0, 0x22); + Array.Resize(ref s1, 0x22); Array.Copy(s1, 0, SAV.Data, offset + 0x276 + (0x22 * 0), 0x22); byte[] s2 = Encoding.Unicode.GetBytes(saying2); - Array.Resize(ref s2, 0x22); Array.Copy(s2, 0, SAV.Data, offset + 0x276 + 0x22 * 1, 0x22); + Array.Resize(ref s2, 0x22); Array.Copy(s2, 0, SAV.Data, offset + 0x276 + (0x22 * 1), 0x22); byte[] s3 = Encoding.Unicode.GetBytes(saying3); - Array.Resize(ref s3, 0x22); Array.Copy(s3, 0, SAV.Data, offset + 0x276 + 0x22 * 2, 0x22); + Array.Resize(ref s3, 0x22); Array.Copy(s3, 0, SAV.Data, offset + 0x276 + (0x22 * 2), 0x22); byte[] s4 = Encoding.Unicode.GetBytes(saying4); - Array.Resize(ref s4, 0x22); Array.Copy(s4, 0, SAV.Data, offset + 0x276 + 0x22 * 3, 0x22); + Array.Resize(ref s4, 0x22); Array.Copy(s4, 0, SAV.Data, offset + 0x276 + (0x22 * 3), 0x22); int baseloc = (int)NUD_FBaseLocation.Value; if (baseloc < 3) baseloc = 0; // skip 1/2 baselocs as they are dummied out ingame. @@ -177,15 +186,19 @@ namespace PKHeX.WinForms // Copy back Objects for (int i = 0; i < 25; i++) + { for (int z = 0; z < 12; z++) - SAV.Data[offset + 2 + 12 * i + z] = objdata[i, z]; + SAV.Data[offset + 2 + (12 * i) + z] = objdata[i, z]; + } if (GB_PKM.Enabled) // Copy pkm data back in { SaveFavPKM(); for (int i = 0; i < 3; i++) + { for (int z = 0; z < 0x34; z++) - SAV.Data[offset + 0x32E + 0x34 * i + z] = pkmdata[i, z]; + SAV.Data[offset + 0x32E + (0x34 * i) + z] = pkmdata[i, z]; + } } PopFavorite(); LB_Favorite.SelectedIndex = index; @@ -196,6 +209,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { uint flags = Util.ToUInt32(MT_Flags.Text); @@ -204,6 +218,7 @@ namespace PKHeX.WinForms Origin.SetData(SAV.Data, 0); Close(); } + private void B_GiveDecor_Click(object sender, EventArgs e) { for (int i = 0; i < 173; i++) @@ -211,8 +226,8 @@ namespace PKHeX.WinForms // int qty = BitConverter.ToUInt16(sav, offset + i * 4); // int has = BitConverter.ToUInt16(sav, offset + i * 4 + 2); - SAV.Data[SAV.SecretBase + i * 4] = 25; - SAV.Data[SAV.SecretBase + i * 4 + 2] = 1; + SAV.Data[SAV.SecretBase + (i * 4)] = 25; + SAV.Data[SAV.SecretBase + (i * 4) + 2] = 1; } } @@ -241,6 +256,7 @@ namespace PKHeX.WinForms editing = false; } + private void ChangeObjectQuality(object sender, EventArgs e) { if (editing) return; @@ -259,6 +275,7 @@ namespace PKHeX.WinForms } private int currentpkm; + private void ChangeFavPKM(object sender, EventArgs e) { int index = (int)NUD_FPKM.Value; @@ -266,6 +283,7 @@ namespace PKHeX.WinForms currentpkm = index; LoadFavPKM(); } + private void SaveFavPKM() { if (loading || !GB_PKM.Enabled) return; @@ -317,6 +335,7 @@ namespace PKHeX.WinForms for (int i = 0; i < 0x34; i++) // Copy data back to storage. pkmdata[index - 1, i] = pkm[i]; } + private void LoadFavPKM() { int index = currentpkm - 1; @@ -454,6 +473,7 @@ namespace PKHeX.WinForms SetGenderLabel(); SetAbilityList(); } + private void UpdateForm(object sender, EventArgs e) { SetAbilityList(); @@ -464,6 +484,7 @@ namespace PKHeX.WinForms } private int genderflag; + private void Label_Gender_Click(object sender, EventArgs e) { // Get Gender Threshold @@ -475,6 +496,7 @@ namespace PKHeX.WinForms if (gt < 256) // If not a single gender(less) species: Label_Gender.Text = Main.GenderSymbols[PKX.GetGenderFromString(Label_Gender.Text) ^ 1]; } + private void SetGenderLabel() { Label_Gender.Text = Main.GenderSymbols[genderflag]; @@ -486,7 +508,7 @@ namespace PKHeX.WinForms int index = LB_Favorite.SelectedIndex - 1; int favoff = SAV.SecretBase + 0x63A; - string BaseTrainer = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, favoff + index * 0x3E0 + 0x218, 0x1A)); + string BaseTrainer = Util.TrimFromZero(Encoding.Unicode.GetString(SAV.Data, favoff + (index * 0x3E0) + 0x218, 0x1A)); if (string.IsNullOrEmpty(BaseTrainer)) BaseTrainer = "Empty"; @@ -495,7 +517,7 @@ namespace PKHeX.WinForms const int max = 29; const int size = 0x3E0; - int offset = favoff + index * size; + int offset = favoff + (index * size); if (index != max) Array.Copy(SAV.Data, offset + size, SAV.Data, offset, size * (max - index)); // Ensure Last Entry is Cleared Array.Copy(new byte[size], 0, SAV.Data, size * max, size); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SuperTrain.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SuperTrain.cs index b1ada97ba..5c6bf7409 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SuperTrain.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SuperTrain.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_SuperTrain(SaveFile sav) { InitializeComponent(); @@ -31,6 +32,7 @@ namespace PKHeX.WinForms private readonly int offsetVal; private readonly int offsetTime; private readonly int offsetSpec; + private void Setup() { dataGridView1.Rows.Clear(); @@ -45,10 +47,11 @@ namespace PKHeX.WinForms listBox1.SelectedIndex = 0; FillTrainingBags(); - CB_S2.SelectedValue = (int)BitConverter.ToUInt16(SAV.Data, offsetSpec + 4 * 30); - TB_Time1.Text = BitConverter.ToSingle(SAV.Data, offsetTime + 4 * 30).ToString(); - TB_Time2.Text = BitConverter.ToSingle(SAV.Data, offsetTime + 4 * 31).ToString(); + CB_S2.SelectedValue = (int)BitConverter.ToUInt16(SAV.Data, offsetSpec + (4 * 30)); + TB_Time1.Text = BitConverter.ToSingle(SAV.Data, offsetTime + (4 * 30)).ToString(); + TB_Time2.Text = BitConverter.ToSingle(SAV.Data, offsetTime + (4 * 31)).ToString(); } + private void FillTrainingBags() { DataGridViewColumn dgvIndex = new DataGridViewTextBoxColumn(); @@ -65,8 +68,10 @@ namespace PKHeX.WinForms }; { foreach (string t in trba) + { if (t.Length > 0) dgvBag.Items.Add(t); + } dgvBag.DisplayIndex = 1; dgvBag.Width = 135; @@ -83,6 +88,7 @@ namespace PKHeX.WinForms dataGridView1.Rows[i].Cells[1].Value = trba[SAV.Data[offset + i]]; } } + private void DropClick(object sender, DataGridViewCellEventArgs e) { try @@ -95,16 +101,18 @@ namespace PKHeX.WinForms } private bool loading = true; + private void ChangeListRecordSelection(object sender, EventArgs e) { int index = listBox1.SelectedIndex; if (index < 0) return; loading = true; - TB_Time.Text = BitConverter.ToSingle(SAV.Data, offsetTime + 4 * index).ToString(); - TB_Unk.Text = BitConverter.ToUInt16(SAV.Data, offsetVal + 4 * index).ToString(); - CB_Species.SelectedValue = (int)BitConverter.ToUInt16(SAV.Data, offsetSpec + 4 * index); + TB_Time.Text = BitConverter.ToSingle(SAV.Data, offsetTime + (4 * index)).ToString(); + TB_Unk.Text = BitConverter.ToUInt16(SAV.Data, offsetVal + (4 * index)).ToString(); + CB_Species.SelectedValue = (int)BitConverter.ToUInt16(SAV.Data, offsetSpec + (4 * index)); loading = false; } + private void B_Save_Click(object sender, EventArgs e) { // Copy Bags @@ -120,34 +128,38 @@ namespace PKHeX.WinForms } bagarray[i - emptyslots] = (byte)Array.IndexOf(trba, bag); } - try { BitConverter.GetBytes(float.Parse(TB_Time1.Text)).CopyTo(SAV.Data, offsetTime + 4 * 30); } catch { } - try { BitConverter.GetBytes(float.Parse(TB_Time2.Text)).CopyTo(SAV.Data, offsetTime + 4 * 31); } catch { } - BitConverter.GetBytes((ushort)WinFormsUtil.GetIndex(CB_S2)).CopyTo(SAV.Data, offsetSpec + 4 * 30); + try { BitConverter.GetBytes(float.Parse(TB_Time1.Text)).CopyTo(SAV.Data, offsetTime + (4 * 30)); } catch { } + try { BitConverter.GetBytes(float.Parse(TB_Time2.Text)).CopyTo(SAV.Data, offsetTime + (4 * 31)); } catch { } + BitConverter.GetBytes((ushort)WinFormsUtil.GetIndex(CB_S2)).CopyTo(SAV.Data, offsetSpec + (4 * 30)); bagarray.CopyTo(SAV.Data, SAV.SuperTrain + 0x308); Origin.SetData(SAV.Data, 0); Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void ChangeRecordSpecies(object sender, EventArgs e) { int index = listBox1.SelectedIndex; if (index < 0 || loading) return; - BitConverter.GetBytes(WinFormsUtil.GetIndex(CB_Species)).CopyTo(SAV.Data, offsetSpec + 4 * index); + BitConverter.GetBytes(WinFormsUtil.GetIndex(CB_Species)).CopyTo(SAV.Data, offsetSpec + (4 * index)); } + private void ChangeRecordVal(object sender, EventArgs e) { int index = listBox1.SelectedIndex; if (index < 0 || loading) return; - try { BitConverter.GetBytes(ushort.Parse(TB_Unk.Text)).CopyTo(SAV.Data, offsetVal + 4 * index); } catch { } + try { BitConverter.GetBytes(ushort.Parse(TB_Unk.Text)).CopyTo(SAV.Data, offsetVal + (4 * index)); } catch { } } + private void ChangeRecordTime(object sender, EventArgs e) { int index = listBox1.SelectedIndex; if (index < 0 || loading) return; - try { BitConverter.GetBytes(float.Parse(TB_Time.Text)).CopyTo(SAV.Data, offsetTime + 4 * index); } catch { } + try { BitConverter.GetBytes(float.Parse(TB_Time.Text)).CopyTo(SAV.Data, offsetTime + (4 * index)); } catch { } } } } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs index a0c1f4cab..528b3bdf0 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs @@ -10,19 +10,22 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV6 SAV; + public SAV_Trainer(SaveFile sav) { InitializeComponent(); WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage); SAV = (SAV6)(Origin = sav).Clone(); if (Main.Unicode) + { try { TB_OTName.Font = FontUtil.GetPKXFont(11); if (SAV.XY) TB_TRNick.Font = TB_OTName.Font; } - catch (Exception e) { WinFormsUtil.Alert("Font loading failed...", e.ToString()); } + catch (Exception e) { WinFormsUtil.Alert("Font loading failed...", e.ToString()); } + } B_MaxCash.Click += (sender, e) => MT_Money.Text = "9,999,999"; @@ -213,11 +216,12 @@ namespace PKHeX.WinForms CB_Stats.Items.Clear(); for (int i = 0; i < statdata.Length / 2; i++) - CB_Stats.Items.Add(statdata[2 * i + 1]); + CB_Stats.Items.Add(statdata[(2 * i) + 1]); CB_Stats.SelectedIndex = 0; CHK_MegaUnlocked.Checked = SAV.IsMegaEvolutionUnlocked; } + private readonly string[] statdata; private bool editing; private readonly ToolTip Tip1 = new ToolTip(), Tip2 = new ToolTip(); @@ -332,12 +336,14 @@ namespace PKHeX.WinForms CB_Vivillon.InitializeBinding(); CB_Vivillon.DataSource = PKX.GetFormList(666, GameInfo.Strings.types, GameInfo.Strings.forms, Main.GenderSymbols, 6).ToList(); } + private void GetBadges() { var bma = GetGen6BadgeSprites(SAV.ORAS); for (int i = 0; i < 8; i++) pba[i].Image = ImageUtil.ChangeOpacity(bma[i], cba[i].Checked ? 1 : 0.1); } + private static Bitmap[] GetGen6BadgeSprites(bool ORAS) { if (ORAS) @@ -391,20 +397,27 @@ namespace PKHeX.WinForms // Maison Data if (SAV.MaisonStats > -1) + { for (int i = 0; i < MaisonRecords.Length; i++) MaisonRecords[i].Text = SAV.GetMaisonStat(i).ToString(); + } NUD_M.Value = SAV.M; // Sanity Check Map Coordinates if (!GB_Map.Enabled || SAV.X%0.5 != 0 || SAV.Z%0.5 != 0 || SAV.Y%0.5 != 0) - GB_Map.Enabled = false; - else try { - NUD_X.Value = (decimal)SAV.X; - NUD_Z.Value = (decimal)SAV.Z; - NUD_Y.Value = (decimal)SAV.Y; + GB_Map.Enabled = false; + } + else + { + try + { + NUD_X.Value = (decimal)SAV.X; + NUD_Z.Value = (decimal)SAV.Z; + NUD_Y.Value = (decimal)SAV.Y; + } + catch { GB_Map.Enabled = false; } } - catch { GB_Map.Enabled = false; } // Load BP and PokeMiles TB_BP.Text = SAV.BP.ToString(); @@ -463,6 +476,7 @@ namespace PKHeX.WinForms CAL_HoFDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame); CAL_HoFTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame % 86400); } + private void Save() { SAV.Game = (byte)(CB_Game.SelectedIndex + 0x18); @@ -486,8 +500,10 @@ namespace PKHeX.WinForms // Copy Maison Data in if (SAV.MaisonStats > -1) + { for (int i = 0; i < MaisonRecords.Length; i++) SAV.SetMaisonStat(i, ushort.Parse(MaisonRecords[i].Text)); + } // Copy Position if (GB_Map.Enabled && MapUpdated) @@ -572,6 +588,7 @@ namespace PKHeX.WinForms d.ShowDialog(); tb.Text = d.FinalString; } + private void ShowTSV(object sender, EventArgs e) { uint TID = Util.ToUInt32(MT_TID.Text); @@ -585,16 +602,19 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { Save(); Origin.SetData(SAV.Data, 0); Close(); } + private void ChangeBadge(object sender, EventArgs e) { GetBadges(); } + private void ChangeSpecial(object sender, EventArgs e) { MaskedTextBox box = sender as MaskedTextBox; @@ -605,18 +625,21 @@ namespace PKHeX.WinForms if (box == MT_Hat) box.Text = (val > 31 ? 31 : val).ToString(); } + private void Change255(object sender, EventArgs e) { MaskedTextBox box = (MaskedTextBox)sender; if (box.Text.Length == 0) box.Text = "0"; if (Util.ToInt32(box.Text) > 255) box.Text = "255"; } + private void ChangeFFFF(object sender, EventArgs e) { MaskedTextBox box = (MaskedTextBox)sender; if (box.Text.Length == 0) box.Text = "0"; if (Util.ToInt32(box.Text) > 65535) box.Text = "65535"; } + private void ChangeStat(object sender, EventArgs e) { editing = true; @@ -625,12 +648,14 @@ namespace PKHeX.WinForms L_Offset.Text = $"0x{offset:X3}"; editing = false; } + private void ChangeStatVal(object sender, EventArgs e) { if (editing) return; int offset = Convert.ToInt32(statdata[CB_Stats.SelectedIndex * 2].Substring(2), 16); SAV.SetPSSStat(offset/4, uint.Parse(MT_Stat.Text)); } + private void GiveAllAccessories(object sender, EventArgs e) { SAV.UnlockAllAccessories(); @@ -642,10 +667,12 @@ namespace PKHeX.WinForms if (sender is ComboBox c && (index = WinFormsUtil.GetIndex(c)) > 0) Main.SetCountrySubRegion(CB_Region, $"sr_{index:000}"); } + private void ToggleBadge(object sender, EventArgs e) { cba[Array.IndexOf(pba, sender)].Checked ^= true; } + private void ChangeMapValue(object sender, EventArgs e) { if (!editing) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.Designer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.Designer.cs index 6b25fd064..766041d05 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.Designer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.Designer.cs @@ -1116,7 +1116,7 @@ this.mnuSave.Name = "mnuSave"; this.mnuSave.Size = new System.Drawing.Size(122, 22); this.mnuSave.Text = "Save PKM"; - this.mnuSave.Click += new System.EventHandler(this.mnuSave_Click); + this.mnuSave.Click += new System.EventHandler(this.MnuSave_Click); // // L_Grade // diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.cs index a8fa6b8ae..6c5337f4e 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_FestivalPlaza.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV7 SAV; + public SAV_FestivalPlaza(SaveFile sav) { InitializeComponent(); @@ -17,6 +18,7 @@ namespace PKHeX.WinForms editing = true; typeMAX = SAV.USUM ? 0x7F : 0x7C; TB_PlazaName.Text = SAV.FestivalPlazaName; + if (SAV.USUM) { PBs = new[] { ppkx1, ppkx2, ppkx3 }; @@ -24,10 +26,16 @@ namespace PKHeX.WinForms LoadBattleAgency(); } else + { TC_Editor.TabPages.Remove(Tab_BattleAgency); + } + if (Main.Unicode) + { try { TB_OTName.Font = FontUtil.GetPKXFont(11); } catch (Exception e) { WinFormsUtil.Alert("Font loading failed...", e.ToString()); } + } + uint cc = SAV.FestaCoins; uint cu = SAV.UsedFestaCoins; NUD_FC_Current.Value = Math.Min(cc, NUD_FC_Current.Maximum); @@ -111,13 +119,17 @@ namespace PKHeX.WinForms new[]{"Red","Yellow","Green","Blue","Orange","NavyBlue","Purple","Pink"}, new[]{"Switcheroo"} }; + CB_FacilityType.Items.Clear(); for (int k = 0; k < RES_FacilityLevelType.Length - (SAV.USUM ? 0 : 1); k++) //Exchange is USUM only + { for (int j = 0; j < RES_FacilityLevelType[k].Length; j++) { if (RES_FacilityLevelType[k][j] != 4) + { for (int i = 0; i < RES_FacilityLevelType[k][j]; i++) CB_FacilityType.Items.Add($"{res6[k]} {res7[k][j]} {i + 1}"); + } else { CB_FacilityType.Items.Add($"{res6[k]} {res7[k][j]} 1"); @@ -125,13 +137,17 @@ namespace PKHeX.WinForms CB_FacilityType.Items.Add($"{res6[k]} {res7[k][j]} 5"); } } - string[] res8 = { "GTS", "Wonder Trade", "Battle Spot", "Festival Plaza", "mission", "lottery shop", "haunted house" }; - string[] res9 = { "+", "++", "+++" }; + } + + string[] types = { "GTS", "Wonder Trade", "Battle Spot", "Festival Plaza", "mission", "lottery shop", "haunted house" }; + string[] lvl = { "+", "++", "+++" }; CB_LuckyResult.Items.Clear(); CB_LuckyResult.Items.Add("none"); - for (int i = 0; i < res8.Length; i++) - for (int j = 0; j < res9.Length; j++) - CB_LuckyResult.Items.Add($"{res9[j]} {res8[i]}"); + foreach (string type in types) + { + foreach (string lv in lvl) + CB_LuckyResult.Items.Add($"{lv} {type}"); + } NUD_Rank.Value = SAV.FestaRank; LoadRankLabel(SAV.FestaRank); @@ -146,11 +162,13 @@ namespace PKHeX.WinForms entry = 0; LoadFacility(); } + private bool editing; private readonly byte[] r = { 0, 2, 1 }; // CheckState.Indeterminate <-> CheckState.Checked private readonly int typeMAX; private readonly FestaFacility[] f = new FestaFacility[7]; private readonly string[] RES_Color = { "Red", "Blue", "Gold", "Black", "Purple", "Yellow", "Brown", "Green", "Orange", "NavyBlue", "Pink", "White" }; + private readonly byte[][] RES_FacilityColor = //facility appearance { new byte[]{0,1,2,3},//Lottery @@ -162,6 +180,7 @@ namespace PKHeX.WinForms new byte[]{0,7,8,4,5,1,9,10},//Dye new byte[]{11,1,5,3},//Exchange }; + private readonly byte[][] RES_FacilityLevelType = //3:123 4:135 5:12345 { new byte[]{5,5,5}, @@ -173,6 +192,7 @@ namespace PKHeX.WinForms new byte[]{4,4,4,4,4,4,4,4}, new byte[]{3} }; + private int TypeIndexToType(int typeIndex) { if (typeIndex < 0 || typeIndex > typeMAX) return -1; @@ -185,12 +205,14 @@ namespace PKHeX.WinForms if (typeIndex < 0x7D) return 6; return 7; } + private int GetColorCount(int i) => i >= 0 && i < RES_FacilityColor.Length - (SAV.USUM ? 0 : 1) ? RES_FacilityColor[i].Length - 1 : 3; private int entry = -1; + private void LoadFacility() { editing = true; @@ -208,7 +230,7 @@ namespace PKHeX.WinForms switch (type) { case 5: - int lucky = facility.UsedLuckyPlace * 3 + facility.UsedLuckyRank - 3; + int lucky = (facility.UsedLuckyPlace * 3) + facility.UsedLuckyRank - 3; if (lucky < 0 || lucky >= CB_LuckyResult.Items.Count) lucky = 0; CB_LuckyResult.SelectedIndex = lucky; break; @@ -231,6 +253,7 @@ namespace PKHeX.WinForms TB_FacilityID.Text = str; editing = false; } + private void Save() { SAV.SetFestaPhraseUnlocked(106, CLB_Phrases.GetItemChecked(0)); @@ -252,6 +275,7 @@ namespace PKHeX.WinForms if (SAV.USUM) SaveBattleAgency(); } + private void LoadBattleAgency() { p[0] = SAV.GetPKM(SAV.DecryptPKM(SAV.GetData(0x6C200, 0xE8))); @@ -264,30 +288,33 @@ namespace PKHeX.WinForms ushort valus = BitConverter.ToUInt16(SAV.GetData(0x6C55C, 2), 0); int grade = valus >> 6 & 0x3F; NUD_Grade.Value = grade; - int max = Math.Min(49, grade) / 10 * 3 + 2; + int max = (Math.Min(49, grade) / 10 * 3) + 2; int defeated = valus >> 12; NUD_Defeated.Value = defeated > max ? max : defeated; NUD_Defeated.Maximum = max; NUD_DefeatMon.Value = BitConverter.ToUInt16(SAV.GetData(0x6C558, 2), 0); for (int i = 0; i < NUD_Trainers.Length; i++) { - int j = GetSavData16(0x6C56C + 0x14 * i); + int j = GetSavData16(0x6C56C + (0x14 * i)); var m = (int)NUD_Trainers[i].Maximum; NUD_Trainers[i].Value = j < 0 || j > m ? m : j; } B_AgentGlass.Enabled = (SAV.GetData(SAV.Fashion + 0xD0, 1)[0] & 1) == 0; } + private void LoadPictureBox() { for (int i = 0; i < 3; i++) PBs[i].Image = p[i].Sprite(SAV, -1, -1, flagIllegal: true); } + private readonly NumericUpDown[] NUD_Trainers = new NumericUpDown[3]; private ushort GetSavData16(int Offset) => BitConverter.ToUInt16(SAV.GetData(Offset, 2), 0); - private readonly ushort InvitedValue = 0x7DFF; + private const ushort InvitedValue = 0x7DFF; private readonly PKM[] p = new PKM[3]; private readonly PictureBox[] PBs = new PictureBox[3]; private bool IsTrainerInvited() => (GetSavData16(0x6C3EE) & InvitedValue) == InvitedValue && (GetSavData16(0x6C526) & InvitedValue) == InvitedValue; + private void SaveBattleAgency() { SAV.SetFlag(0x6C55E, 1, CHK_Choosed.Checked); @@ -299,12 +326,13 @@ namespace PKHeX.WinForms SAV.SetData(p[0].EncryptedBoxData, 0x6C200); SAV.SetData(p[1].EncryptedPartyData, 0x6C2E8); SAV.SetData(p[2].EncryptedPartyData, 0x6C420); - SAV.SetData(BitConverter.GetBytes((ushort)(((int)NUD_Defeated.Value & 0xF) << 12 | ((int)NUD_Grade.Value & 0x3F) << 6 | SAV.Data[0x6C55C] & 0x3F)), 0x6C55C); + SAV.SetData(BitConverter.GetBytes((ushort)(((int)NUD_Defeated.Value & 0xF) << 12 | ((int)NUD_Grade.Value & 0x3F) << 6 | (SAV.Data[0x6C55C] & 0x3F))), 0x6C55C); SAV.SetData(BitConverter.GetBytes((ushort)NUD_DefeatMon.Value), 0x6C558); for (int i = 0; i < NUD_Trainers.Length; i++) - SAV.SetData(BitConverter.GetBytes((ushort)NUD_Trainers[i].Value), 0x6C56C + 0x14 * i); + SAV.SetData(BitConverter.GetBytes((ushort)NUD_Trainers[i].Value), 0x6C56C + (0x14 * i)); SAV.FestivalPlazaName = TB_PlazaName.Text; } + private void NUD_FC_ValueChanged(object sender, EventArgs e) { if (editing) return; @@ -352,12 +380,15 @@ namespace PKHeX.WinForms d.ShowDialog(); tb.Text = d.FinalString; } + private readonly string[] gendersymbols = { "♂", "♀" }; + private void LoadOTlabel(int b) { Label_OTGender.Text = gendersymbols[b & 1]; Label_OTGender.ForeColor = b == 1 ? Color.Red : Color.Blue; } + private void Label_OTGender_Click(object sender, EventArgs e) { if (entry < 0) return; @@ -366,7 +397,9 @@ namespace PKHeX.WinForms f[entry].Gender = b; LoadOTlabel(b); } + private void LoadFMessage(int fmIndex) => NUD_FacilityMessage.Value = f[entry].GetMessage(fmIndex); + private void CB_FacilityMessage_SelectedIndexChanged(object sender, EventArgs e) { if (editing) return; @@ -404,9 +437,13 @@ namespace PKHeX.WinForms System.Media.SystemSounds.Beep.Play(); } if (sender == TB_UsedFlags) + { f[entry].UsedFlags = Convert.ToUInt32(t, 16); + } else if (sender == TB_UsedStats) + { f[entry].UsedRandStat = Convert.ToUInt32(t, 16); + } else if (sender == TB_FacilityID) { if (t.Length != 12 * 2) @@ -416,7 +453,9 @@ namespace PKHeX.WinForms f[entry].TrainerFesID = bytes; } } + private void LoadColorLabel(int type) => L_FacilityColorV.Text = RES_Color[RES_FacilityColor[type][(int)NUD_FacilityColor.Value]]; + private void NUD_FacilityColor_ValueChanged(object sender, EventArgs e) { if (editing) return; @@ -454,7 +493,7 @@ namespace PKHeX.WinForms switch (type) { case 5: - int lucky = facility.UsedLuckyPlace * 3 + facility.UsedLuckyRank - 3; + int lucky = (facility.UsedLuckyPlace * 3) + facility.UsedLuckyRank - 3; if (lucky < 0 || lucky >= CB_LuckyResult.Items.Count) lucky = 0; CB_LuckyResult.SelectedIndex = lucky; break; @@ -481,9 +520,10 @@ namespace PKHeX.WinForms facility.ExchangeLeftCount = type == 7 ? (byte)NUD_Exchangable.Value : 0; int lucky = CB_LuckyResult.SelectedIndex - 1; bool writeLucky = type == 5 && lucky >= 0; - facility.UsedLuckyRank = writeLucky ? lucky % 3 + 1 : 0; - facility.UsedLuckyPlace = writeLucky ? lucky / 3 + 1 : 0; + facility.UsedLuckyRank = writeLucky ? (lucky % 3) + 1 : 0; + facility.UsedLuckyPlace = writeLucky ? (lucky / 3) + 1 : 0; } + private void LoadRankLabel(int rank) => L_RankFC.Text = GetRankText(rank); private static string GetRankText(int rank) @@ -494,28 +534,28 @@ namespace PKHeX.WinForms if (rank == 3) return "16 - 30"; if (rank <= 10) { - int i = (rank - 1) * (rank - 2) * 5 + 1; - return $"{i} - {i + (rank - 1) * 10 - 1}"; + int i = ((rank - 1) * (rank - 2) * 5) + 1; + return $"{i} - {i + ((rank - 1) * 10) - 1}"; } if (rank <= 20) { - int i = rank * 100 - 649; + int i = (rank * 100) - 649; return $"{i} - {i + 99}"; } if (rank <= 70) { int j = (rank - 1) / 10; - int i = rank * (j * 30 + 60) - (j * j * 150 + j * 180 + 109); // 30 * (rank - 5 * j + 4) * (j + 2) - 349; - return $"{i} - {i + j * 30 + 59}"; + int i = (rank * ((j * 30) + 60)) - ((j * j * 150) + (j * 180) + 109); // 30 * (rank - 5 * j + 4) * (j + 2) - 349; + return $"{i} - {i + (j * 30) + 59}"; } if (rank <= 100) { - int i = rank * 270 - 8719; + int i = (rank * 270) - 8719; return $"{i} - {i + 269}"; } if (rank <= 998) { - int i = rank * 300 - 11749; + int i = (rank * 300) - 11749; return $"{i} - {i + 299}"; } if (rank == 999) @@ -530,7 +570,9 @@ namespace PKHeX.WinForms SAV.FestaRank = (ushort)rank; LoadRankLabel(rank); } + private readonly NumericUpDown[] NUD_Messages; + private void NUD_MyMessage_ValueChanged(object sender, EventArgs e) { if (editing) return; @@ -583,7 +625,9 @@ namespace PKHeX.WinForms facility.SetMessage(i, 0); LoadFacility(); } + private string GetSpeciesNameFromPKM(PKM pkm) => PKX.GetSpeciesName(pkm.Species, SAV.Language); + private void B_ImportParty_Click(object sender, EventArgs e) { if (!SAV.HasParty) return; @@ -604,7 +648,7 @@ namespace PKHeX.WinForms LoadPictureBox(); } - private void mnuSave_Click(object sender, EventArgs e) + private void MnuSave_Click(object sender, EventArgs e) { sender = WinFormsUtil.GetUnderlyingControl(sender); int i = Array.IndexOf(PBs, sender); @@ -615,7 +659,7 @@ namespace PKHeX.WinForms private void NUD_Grade_ValueChanged(object sender, EventArgs e) { if (editing) return; - int max = Math.Min(49, (int)NUD_Grade.Value) / 10 * 3 + 2; + int max = (Math.Min(49, (int)NUD_Grade.Value) / 10 * 3) + 2; editing = true; if (NUD_Defeated.Value > max) NUD_Defeated.Value = max; @@ -637,8 +681,8 @@ namespace PKHeX.WinForms int lucky = CB_LuckyResult.SelectedIndex; if (lucky-- < 0) return; // both 0 if "none" - f[entry].UsedLuckyRank = lucky < 0 ? 0 : lucky % 3 + 1; - f[entry].UsedLuckyPlace = lucky < 0 ? 0 : lucky / 3 + 1; + f[entry].UsedLuckyRank = lucky < 0 ? 0 : (lucky % 3) + 1; + f[entry].UsedLuckyPlace = lucky < 0 ? 0 : (lucky / 3) + 1; } private void B_AgentGlass_Click(object sender, EventArgs e) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_HallOfFame7.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_HallOfFame7.cs index 92c31c1fd..f6187af59 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_HallOfFame7.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_HallOfFame7.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV7 SAV; + public SAV_HallOfFame7(SaveFile sav) { InitializeComponent(); @@ -21,6 +22,7 @@ namespace PKHeX.WinForms }; Setup(); } + private readonly ComboBox[] entries; private void Setup() @@ -33,7 +35,7 @@ namespace PKHeX.WinForms var specList = GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(); for (int i = 0; i < entries.Length; i++) { - int o = ofs + 4 + i*2; + int o = ofs + 4 + (i * 2); var cb = entries[i]; cb.Items.Clear(); @@ -53,6 +55,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Close_Click(object sender, EventArgs e) { int ofs = SAV.HoF; @@ -62,7 +65,7 @@ namespace PKHeX.WinForms BitConverter.GetBytes((ushort)NUD_Count.Value).CopyTo(SAV.Data, ofs + 2); for (int i = 0; i < entries.Length; i++) { - int o = ofs + 4 + i * 2; + int o = ofs + 4 + (i * 2); var cb = entries[i]; var val = WinFormsUtil.GetIndex(cb); BitConverter.GetBytes((ushort)val).CopyTo(SAV.Data, o); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Pokebean.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Pokebean.cs index 638ef3a69..b5a751baa 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Pokebean.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Pokebean.cs @@ -21,6 +21,7 @@ namespace PKHeX.WinForms private readonly SaveFile Origin; private readonly SAV7 SAV; + private void LoadValues() { dgv.Rows.Clear(); @@ -69,12 +70,14 @@ namespace PKHeX.WinForms { Close(); } + private void B_All_Click(object sender, EventArgs e) { Pouch.SetCountAll(255); LoadValues(); System.Media.SystemSounds.Asterisk.Play(); } + private void B_None_Click(object sender, EventArgs e) { Pouch.SetCountAll(0); diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_PokedexSM.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_PokedexSM.cs index a0edb7f0c..396f650a8 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_PokedexSM.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_PokedexSM.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV7 SAV; + public SAV_PokedexSM(SaveFile sav) { InitializeComponent(); @@ -28,7 +29,6 @@ namespace PKHeX.WinForms CB_Species.InitializeBinding(); CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Skip(1).ToList(), null); - Dex = new PokeDex7(SAV); var Species = GameInfo.Strings.Species; var names = Dex.GetEntryNames(Species); @@ -46,7 +46,6 @@ namespace PKHeX.WinForms private int species = -1; private readonly CheckBox[] CP, CL; - private void ChangeCBSpecies(object sender, EventArgs e) { if (editing) return; @@ -60,6 +59,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeLBSpecies(object sender, EventArgs e) { if (editing) return; @@ -72,6 +72,7 @@ namespace PKHeX.WinForms GetEntry(); editing = false; } + private void ChangeLBForms(object sender, EventArgs e) { if (allModifying) return; @@ -94,15 +95,22 @@ namespace PKHeX.WinForms species = bspecies; } else + { species = bspecies; + } } - else species = bspecies; + else + { + species = bspecies; + } + CB_Species.SelectedValue = species; LB_Species.SelectedIndex = species - 1; LB_Species.TopIndex = LB_Species.SelectedIndex; GetEntry(); editing = false; } + private bool FillLBForms() { if (allModifying) return false; @@ -129,7 +137,9 @@ namespace PKHeX.WinForms LB_Forms.DataSource = ds; if (fspecies <= SAV.MaxSpeciesID) + { LB_Forms.SelectedIndex = 0; + } else { int fc = SAV.Personal[bspecies].FormeCount; @@ -163,10 +173,13 @@ namespace PKHeX.WinForms CHK_P4.Checked |= CHK_P8.Checked; CHK_P5.Checked |= CHK_P9.Checked; } + private void ChangeEncountered(object sender, EventArgs e) { if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) + { CHK_P6.Checked = CHK_P7.Checked = CHK_P8.Checked = CHK_P9.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) { if (sender == CHK_P2 && CHK_P2.Checked) @@ -201,10 +214,11 @@ namespace PKHeX.WinForms for (int i = 0; i < 9; i++) { CL[i].Enabled = species <= SAV.MaxSpeciesID; - CL[i].Checked = CL[i].Enabled && Dex.LanguageFlags[pk*9 + i]; + CL[i].Checked = CL[i].Enabled && Dex.LanguageFlags[(pk * 9) + i]; } editing = false; } + private void SetEntry() { if (species <= 0) @@ -224,13 +238,14 @@ namespace PKHeX.WinForms Dex.Owned[pk] = CHK_P1.Checked; for (int i = 0; i < 9; i++) - Dex.LanguageFlags[pk*9 + i] = CL[i].Checked; + Dex.LanguageFlags[(pk * 9) + i] = CL[i].Checked; } private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void B_Save_Click(object sender, EventArgs e) { SetEntry(); @@ -264,16 +279,22 @@ namespace PKHeX.WinForms CHK_P3.Checked = CHK_P5.Checked = gt != 0 && gt != 255 && ModifierKeys != Keys.Control; if (ModifierKeys == Keys.Control) + { foreach (var chk in new[] { CHK_P6, CHK_P7, CHK_P8, CHK_P9 }) chk.Checked = false; + } else if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) + { (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; + } } + private void B_Modify_Click(object sender, EventArgs e) { Button btn = (Button)sender; modifyMenu.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void ModifyAll(object sender, EventArgs e) { allModifying = true; @@ -289,13 +310,14 @@ namespace PKHeX.WinForms SetEntry(); // Turn off zh2 Petilil - Dex.LanguageFlags[548 * 9 + 8] = false; + Dex.LanguageFlags[(548 * 9) + 8] = false; GetEntry(); allModifying = false; LB_Forms.Enabled = LB_Forms.Visible = true; LB_Species.SelectedIndex = 0; System.Media.SystemSounds.Asterisk.Play(); } + private void ClearAll(object sender) { for (int i = 0; i < LB_Species.Items.Count; i++) @@ -311,6 +333,7 @@ namespace PKHeX.WinForms CHK_P6.Checked = CHK_P7.Checked = CHK_P8.Checked = CHK_P9.Checked = false; } } + private void SetAll(object sender, int lang) { for (int i = 0; i < SAV.MaxSpeciesID; i++) @@ -347,8 +370,10 @@ namespace PKHeX.WinForms if (isForm) return; if (!(CHK_P2.Checked || CHK_P3.Checked || CHK_P4.Checked || CHK_P5.Checked)) // if seen + { if (!(CHK_P6.Checked || CHK_P7.Checked || CHK_P8.Checked || CHK_P9.Checked)) // not displayed (gt != 254 ? CHK_P6 : CHK_P7).Checked = true; // check one + } return; } @@ -393,8 +418,10 @@ namespace PKHeX.WinForms } if (!CHK_P1.Checked) + { foreach (CheckBox t in CL) t.Checked = false; + } } } } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs index 47f1f017b..ff91926b5 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs @@ -10,6 +10,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV7 SAV; + public SAV_Trainer7(SaveFile sav) { InitializeComponent(); @@ -17,8 +18,10 @@ namespace PKHeX.WinForms SAV = (SAV7)(Origin = sav).Clone(); Loading = true; if (Main.Unicode) - try { TB_OTName.Font = FontUtil.GetPKXFont(11); } - catch (Exception e) { WinFormsUtil.Alert("Font loading failed...", e.ToString()); } + { + try { TB_OTName.Font = FontUtil.GetPKXFont(11); } + catch (Exception e) { WinFormsUtil.Alert("Font loading failed...", e.ToString()); } + } B_MaxCash.Click += (sender, e) => MT_Money.Text = "9,999,999"; @@ -46,7 +49,7 @@ namespace PKHeX.WinForms private static readonly string[] TrainerStampTitle = { "01:Official Pokemon Trainer", "02:Melemele Trial Completion", "03:Akala Trial Completion", "04:Ula'ula Trial Completion", "05:Poni Trial Completion", "06:Island Challenge Completion", "07:Melemele Pokedex Completion", "08:Akala Pokedex Completion", "09:Ula'ula Pokedex Completion", "10:Poni Pokedex Completion", "11:Alola Pokedex Completion", "12:50 Consecutive Single Battle Wins", "13:50 Consecutive Double Battle Wins", "14:50 Consecutive Multi Battle Wins", "15:Poke Finder Pro" }; private static readonly string[] BattleStyles = { "Normal", "Elegant", "Girlish", "Reverent", "Smug", "Left-handed", "Passionate", "Idol" }; private int[] FlyDestFlagOfs, MapUnmaskFlagOfs; - private int skipFlag => SAV.USUM ? 4160 : 3200; // FlagMax - 768 + private int SkipFlag => SAV.USUM ? 4160 : 3200; // FlagMax - 768 private void GetComboBoxes() { @@ -101,6 +104,7 @@ namespace PKHeX.WinForms foreach (string t in TrainerStampTitle) LB_Stamps.Items.Add(t); } + private void GetTextBoxes() { // Get Data @@ -197,8 +201,7 @@ namespace PKHeX.WinForms if (SAV.SM) LoadThrowTypeLists(); else - CB_BallThrowTypeListMode.Visible = LB_BallThrowTypeLearned.Visible = - LB_BallThrowTypeUnlocked.Visible = false; + CB_BallThrowTypeListMode.Visible = LB_BallThrowTypeLearned.Visible = LB_BallThrowTypeUnlocked.Visible = false; uint stampBits = SAV.Stamps; for (int i = 0; i < LB_Stamps.Items.Count; i++) @@ -262,7 +265,7 @@ namespace PKHeX.WinForms FlyDestNameIndex[i] < 0 ? FlyDestAltName[u++] : metLocationList.First(v => v.Value == FlyDestNameIndex[i]).Text - , SAV.GetEventFlag(skipFlag + FlyDestFlagOfs[i]) + , SAV.GetEventFlag(SkipFlag + FlyDestFlagOfs[i]) ); } int[] MapUnmaskNameIndex = { @@ -289,10 +292,11 @@ namespace PKHeX.WinForms MapUnmaskNameIndex[i] < 0 ? MapUnmaskAltName[u++] : metLocationList.First(v => v.Value == MapUnmaskNameIndex[i]).Text - , SAV.GetEventFlag(skipFlag + MapUnmaskFlagOfs[i]) + , SAV.GetEventFlag(SkipFlag + MapUnmaskFlagOfs[i]) ); } } + private void LoadUltraData() { NUD_Surf0.Value = SAV.GetSurfScore(0); @@ -302,6 +306,7 @@ namespace PKHeX.WinForms TB_RotomOT.Font = TB_OTName.Font; TB_RotomOT.Text = SAV.RotomOT; } + private void Save() { SaveTrainerInfo(); @@ -321,6 +326,7 @@ namespace PKHeX.WinForms if (SAV.USUM) SaveUltraData(); } + private void SaveTrainerInfo() { SAV.Game = (byte)(CB_Game.SelectedIndex + 30); @@ -367,6 +373,7 @@ namespace PKHeX.WinForms SAV.BP = (uint)NUD_BP.Value; SAV.FestaCoins = (uint)NUD_FC.Value; } + private void SavePokeFinder() { SAV.PokeFinderSnapCount = (uint)NUD_SnapCount.Value; @@ -376,6 +383,7 @@ namespace PKHeX.WinForms SAV.PokeFinderCameraVersion = (ushort)CB_CameraVersion.SelectedIndex; SAV.PokeFinderGyroFlag = CHK_Gyro.Checked; } + private void SaveBattleTree() { SAV.SetTreeStreak((int)NUD_RCStreak0.Value, 0, super:false, max:false); @@ -392,6 +400,7 @@ namespace PKHeX.WinForms SAV.SetTreeStreak((int)NUD_SMStreak1.Value, 1, super:true, max:true); SAV.SetTreeStreak((int)NUD_SMStreak2.Value, 2, super:true, max:true); } + private void SaveTrainerAppearance() { // Skin changed && (gender matches || override) @@ -400,10 +409,13 @@ namespace PKHeX.WinForms string gStr = CB_Gender.Items[gender].ToString(); string sStr = CB_Gender.Items[skin].ToString(); - if (SAV.DressUpSkinColor != CB_SkinColor.SelectedIndex && - (SAV.Gender == skin || DialogResult.Yes == WinFormsUtil.Prompt(MessageBoxButtons.YesNo, $"Gender-Skin mismatch:{Environment.NewLine}Gender: {gStr}, Skin: {sStr}", "Save selected Skin Color?"))) - SAV.DressUpSkinColor = CB_SkinColor.SelectedIndex; + if (SAV.DressUpSkinColor == CB_SkinColor.SelectedIndex) + return; + + if (SAV.Gender == skin || DialogResult.Yes == WinFormsUtil.Prompt(MessageBoxButtons.YesNo, $"Gender-Skin mismatch:{Environment.NewLine}Gender: {gStr}, Skin: {sStr}", "Save selected Skin Color?")) + SAV.DressUpSkinColor = CB_SkinColor.SelectedIndex; } + private void SaveThrowType() { if (CB_BallThrowType.SelectedIndex >= 0) @@ -419,6 +431,7 @@ namespace PKHeX.WinForms for (int i = 1; i < BattleStyles.Length; i++) SAV.SetEventFlag(learnedStart + i, LB_BallThrowTypeLearned.GetSelected(i)); } + private void SaveFlags() { SAV.Stamps = GetBits(LB_Stamps); @@ -431,10 +444,11 @@ namespace PKHeX.WinForms SAV.ZMoveUnlocked = CHK_UnlockZMove.Checked; for (int i = 0; i < CLB_FlyDest.Items.Count; i++) - SAV.SetEventFlag(skipFlag + FlyDestFlagOfs[i], CLB_FlyDest.GetItemChecked(i)); + SAV.SetEventFlag(SkipFlag + FlyDestFlagOfs[i], CLB_FlyDest.GetItemChecked(i)); for (int i = 0; i < CLB_MapUnmask.Items.Count; i++) - SAV.SetEventFlag(skipFlag + MapUnmaskFlagOfs[i], CLB_MapUnmask.GetItemChecked(i)); + SAV.SetEventFlag(SkipFlag + MapUnmaskFlagOfs[i], CLB_MapUnmask.GetItemChecked(i)); } + private void SaveUltraData() { SAV.SetSurfScore(0, (int)NUD_Surf0.Value); @@ -446,17 +460,23 @@ namespace PKHeX.WinForms && TB_OTName.Text != SAV.OT // manually changed && DialogResult.Yes == // wants to update WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Rotom OT does not match OT name. Update Rotom OT name with OT name?")) + { SAV.RotomOT = TB_OTName.Text; + } else + { SAV.RotomOT = TB_RotomOT.Text; + } } private static uint GetBits(ListBox listbox) { uint bits = 0; for (int i = 0; i < listbox.Items.Count; i++) + { if (listbox.GetSelected(i)) bits |= (uint)(1 << i); + } return bits; } @@ -476,35 +496,41 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { Save(); Origin.SetData(SAV.Data, 0); Close(); } + private void Change255(object sender, EventArgs e) { MaskedTextBox box = (MaskedTextBox)sender; if (box.Text.Length == 0) box.Text = "0"; if (Util.ToInt32(box.Text) > 255) box.Text = "255"; } + private void ChangeFFFF(object sender, EventArgs e) { MaskedTextBox box = (MaskedTextBox)sender; if (box.Text.Length == 0) box.Text = "0"; if (Util.ToInt32(box.Text) > 65535) box.Text = "65535"; } + private void ChangeMapValue(object sender, EventArgs e) { if (!Loading) MapUpdated = true; } + private void UpdateCountry(object sender, EventArgs e) { int index; if (sender is ComboBox c && (index = WinFormsUtil.GetIndex(c)) > 0) Main.SetCountrySubRegion(CB_Region, $"sr_{index:000}"); } + private void B_Fashion_Click(object sender, EventArgs e) { var prompt = WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Modifying Fashion Items will clear existing fashion unlock data.", "Continue?"); @@ -550,6 +576,7 @@ namespace PKHeX.WinForms } System.Media.SystemSounds.Asterisk.Play(); } + private string UpdateTip(int index) { switch (index) @@ -563,6 +590,7 @@ namespace PKHeX.WinForms return null; } } + private static string ConvertDateValueToString(int value, int secondsBias = -1) { const int spd = 86400; // seconds per day @@ -588,12 +616,14 @@ namespace PKHeX.WinForms LB_BallThrowTypeLearned.Visible = true; } } + private void UpdateBallThrowTypeLearned(object sender, EventArgs e) { if (Loading) return; if (!LB_BallThrowTypeLearned.GetSelected(0)) LB_BallThrowTypeLearned.SetSelected(0, true); } + private void UpdateBallThrowTypeUnlocked(object sender, EventArgs e) { if (Loading) return; @@ -603,11 +633,13 @@ namespace PKHeX.WinForms LB_BallThrowTypeUnlocked.SetSelected(i, true); } } + private void B_AllFlyDest_Click(object sender, EventArgs e) { for (int i = 0; i < CLB_FlyDest.Items.Count; i++) CLB_FlyDest.SetItemChecked(i, true); } + private void B_AllMapUnmask_Click(object sender, EventArgs e) { for (int i = 0; i < CLB_MapUnmask.Items.Count; i++) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_ZygardeCell.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_ZygardeCell.cs index a78529a17..a649ff87c 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_ZygardeCell.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_ZygardeCell.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SAV7 SAV; + public SAV_ZygardeCell(SaveFile sav) { InitializeComponent(); @@ -19,7 +20,7 @@ namespace PKHeX.WinForms // Cell Data @ 0x1D8C // Use constants 0x18C/2 = 198 thru +95 ushort[] constants = SAV.EventConsts; - ushort[] cells = constants.Skip(celloffset).Take(cellcount).ToArray(); + ushort[] cells = constants.Skip(celloffset).Take(CellCount).ToArray(); int cellCount = constants[cellstotal]; int cellCollected = constants[cellscollected]; @@ -32,9 +33,9 @@ namespace PKHeX.WinForms combo.Items.Add(t); // add only the Names // Populate Grid - dgv.Rows.Add(cellcount); + dgv.Rows.Add(CellCount); var locations = SAV.SM ? locationsSM : locationsUSUM; - for (int i = 0; i < cellcount; i++) + for (int i = 0; i < CellCount; i++) { if (cells[i] > 2) throw new ArgumentException(); @@ -48,13 +49,13 @@ namespace PKHeX.WinForms private const int cellstotal = 161; private const int cellscollected = 169; private const int celloffset = 0xC6; - private int cellcount => SAV.USUM ? 100 : 95; + private int CellCount => SAV.USUM ? 100 : 95; private readonly string[] states = {"None", "Available", "Received"}; private void B_Save_Click(object sender, EventArgs e) { ushort[] constants = SAV.EventConsts; - for (int i = 0; i < cellcount; i++) + for (int i = 0; i < CellCount; i++) { string str = (string)dgv.Rows[i].Cells[2].Value; int val = Array.IndexOf(states, str); @@ -74,10 +75,12 @@ namespace PKHeX.WinForms Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private void B_GiveAll_Click(object sender, EventArgs e) { int added = 0; @@ -195,6 +198,7 @@ namespace PKHeX.WinForms "Aether Foundation 1F - Entrance (Night)", "Aether Foundation 1F - Main Building", }; + private readonly string[] locationsUSUM = { "Hau'oli City (Shopping) - Salon (Outside)", diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxList.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxList.cs index 439a5eab5..1adf3990a 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxList.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxList.cs @@ -11,6 +11,7 @@ namespace PKHeX.WinForms public sealed partial class SAV_BoxList : Form { private readonly List Boxes = new List(); + public SAV_BoxList(SAVEditor p, SlotChangeManager m) { InitializeComponent(); @@ -86,11 +87,11 @@ namespace PKHeX.WinForms Debug.Assert(height * width >= count); width = Math.Min(4, width); - var padWidth = Boxes[0].Margin.Horizontal * 2 + 1; - Width = (Boxes[0].Width + padWidth) * width - padWidth/2 + 0x10; + var padWidth = (Boxes[0].Margin.Horizontal * 2) + 1; + Width = ((Boxes[0].Width + padWidth) * width) - (padWidth / 2) + 0x10; - var padHeight = Boxes[0].Margin.Vertical * 2 + 1; - Height = (Boxes[0].Height + padHeight) * height - padHeight/2; + var padHeight = (Boxes[0].Margin.Vertical * 2) + 1; + Height = ((Boxes[0].Height + padHeight) * height) - (padHeight / 2); } private static void Main_DragEnter(object sender, DragEventArgs e) diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_EventFlags.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_EventFlags.cs index b7b73a8f1..788f28ba8 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_EventFlags.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_EventFlags.cs @@ -14,6 +14,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SaveFile SAV; + public SAV_EventFlags(SaveFile sav) { InitializeComponent(); @@ -47,7 +48,9 @@ namespace PKHeX.WinForms Text = $"{Text} ({gamePrefix.ToUpper()})"; if (CB_Stats.Items.Count > 0) + { CB_Stats.SelectedIndex = 0; + } else { L_Stats.Visible = CB_Stats.Visible = MT_Stat.Visible = false; @@ -75,6 +78,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { // Gather Updated Flags @@ -156,6 +160,7 @@ namespace PKHeX.WinForms } return GameInfo.GetStrings(gamePrefix, GameInfo.CurrentLanguage, type); } + private void AddFlagList(string[] list) { if (list == null || list.Length == 0) @@ -172,26 +177,19 @@ namespace PKHeX.WinForms { try { - var flag = split[0]; - - int n; - if (flag.StartsWith("0x")) - { - flag = flag.Substring(2); - n = Convert.ToInt16(flag, 16); - } - else - n = Convert.ToInt16(flag); + var flagIndex = split[0]; + int n = TryParseHexDec(flagIndex); if (num.Contains(n)) continue; num.Add(n); desc.Add(split[1]); - } catch { } + } + catch { } } if (num.Count == 0) { - TLP_Flags.Controls.Add(new Label { Text = "Needs more research.", Name = "TLP_Flags_Research", ForeColor = Color.Red, AutoSize = true }, 0, 0); + TLP_Flags.Controls.Add(new Label { Text = MsgResearchRequired, Name = "TLP_Flags_Research", ForeColor = Color.Red, AutoSize = true }, 0, 0); return; } @@ -218,6 +216,15 @@ namespace PKHeX.WinForms TLP_Flags.Controls.Add(lbl, 1, i); } } + + private static int TryParseHexDec(string flag) + { + if (!flag.StartsWith("0x")) + return Convert.ToInt16(flag); + flag = flag.Substring(2); + return Convert.ToInt16(flag, 16); + } + private void AddConstList(string[] list) { if (list == null || list.Length == 0) @@ -236,21 +243,15 @@ namespace PKHeX.WinForms try { var c = split[0]; - int n; - if (c.StartsWith("0x40")) - { - c = c.Substring(4); - n = Convert.ToInt16(c, 16); - } - else - n = Convert.ToInt16(c); + int n = TryParseHexDecConst(c); if (num.Contains(n)) continue; num.Add(n); desc.Add(split[1]); enums.Add(split.Length == 3 ? split[2] : ""); - } catch { } + } + catch { } } if (num.Count == 0) { @@ -312,6 +313,14 @@ namespace PKHeX.WinForms } } + private static int TryParseHexDecConst(string c) + { + if (!c.StartsWith("0x40")) + return Convert.ToInt16(c); + c = c.Substring(4); + return Convert.ToInt16(c, 16); + } + private static int GetControlNum(Control c) { try @@ -321,6 +330,7 @@ namespace PKHeX.WinForms } catch { return 0; } } + private void ChangeCustomBool(object sender, EventArgs e) { if (editing) @@ -332,6 +342,7 @@ namespace PKHeX.WinForms c.Checked = c_CustomFlag.Checked; editing = false; } + private void ChangeCustomFlag(object sender, EventArgs e) { int flag = (int)NUD_Flag.Value; @@ -348,10 +359,12 @@ namespace PKHeX.WinForms c_CustomFlag.Checked = flags[flag]; } } + private void ChangeCustomFlag(object sender, KeyEventArgs e) { ChangeCustomFlag(null, (EventArgs)e); } + private void ToggleFlag(object sender, EventArgs e) { if (editing) @@ -377,6 +390,7 @@ namespace PKHeX.WinForms editing = false; } + private void ChangeConstantIndex(object sender, EventArgs e) { if (Constants.Length == 0) @@ -387,6 +401,7 @@ namespace PKHeX.WinForms constEntry = CB_Stats.SelectedIndex; // Get Entry MT_Stat.Text = Constants[constEntry].ToString(); } + private void ToggleConst(object sender, EventArgs e) { if (editing) @@ -419,12 +434,14 @@ namespace PKHeX.WinForms if (TB_NewSAV.Text.Length > 0 && TB_OldSAV.Text.Length > 0) DiffSaves(); } + private void OpenSAV(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) LoadSAV(sender, ofd.FileName); } + private void LoadSAV(object sender, string path) { if (sender == B_LoadOld) @@ -432,6 +449,7 @@ namespace PKHeX.WinForms else TB_NewSAV.Text = path; } + private void DiffSaves() { if (!File.Exists(TB_OldSAV.Text)) { WinFormsUtil.Alert(string.Format(MsgSaveNumberInvalid, 1)); return; } @@ -454,9 +472,11 @@ namespace PKHeX.WinForms bool[] oldBits = s1.EventFlags; bool[] newBits = s2.EventFlags; if (oldBits.Length != newBits.Length) + { throw new Exception("Event flag lengths for games are different." + $"{Environment.NewLine}S1: {(GameVersion)s1.Game}" + $"{Environment.NewLine}S2: {(GameVersion)s2.Game}"); + } for (int i = 0; i < oldBits.Length; i++) { @@ -484,8 +504,10 @@ namespace PKHeX.WinForms { WinFormsUtil.Alert("Event flag lengths for games are different.", $"S1: {(GameVersion)s1.Game}", $"S2: {(GameVersion)s2.Game}"); return; } for (int i = 0; i < newConst.Length; i++) + { if (oldConst[i] != newConst[i]) r += $"{i}: {oldConst[i]}->{newConst[i]}{Environment.NewLine}"; + } } catch (Exception e) { @@ -508,6 +530,7 @@ namespace PKHeX.WinForms { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; } + private void Main_DragDrop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_GameSelect.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_GameSelect.cs index 0b23f45f7..da950db60 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_GameSelect.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_GameSelect.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms public partial class SAV_GameSelect : Form { public GameVersion Result = GameVersion.Invalid; + public SAV_GameSelect(IEnumerable items) { InitializeComponent(); @@ -18,12 +19,15 @@ namespace PKHeX.WinForms CB_Game.SelectedIndex = 0; CB_Game.Focus(); } + private void B_Cancel_Click(object sender, EventArgs e) => Close(); + private void B_OK_Click(object sender, EventArgs e) { Result = (GameVersion)WinFormsUtil.GetIndex(CB_Game); Close(); } + private void SAV_GameSelect_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_Inventory.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_Inventory.cs index 63ec77c9c..046b590bb 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_Inventory.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_Inventory.cs @@ -11,6 +11,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SaveFile SAV; + public SAV_Inventory(SaveFile sav) { InitializeComponent(); @@ -19,8 +20,10 @@ namespace PKHeX.WinForms itemlist = GameInfo.Strings.GetItemStrings(SAV.Generation, SAV.Version).ToArray(); for (int i = 0; i < itemlist.Length; i++) + { if (itemlist[i]?.Length == 0) itemlist[i] = $"(Item #{i:000})"; + } HasFreeSpace = SAV.Generation == 7; HasNew = CHK_NEW.Visible = SAV.Generation == 7; @@ -40,6 +43,7 @@ namespace PKHeX.WinForms { Close(); } + private void B_Save_Click(object sender, EventArgs e) { SetBags(); @@ -64,6 +68,7 @@ namespace PKHeX.WinForms tabControl1.TabPages[i].Controls.Add(GetDGV(Pouches[i])); } } + private DataGridView GetDGV(InventoryPouch pouch) { // Add DataGrid @@ -146,6 +151,7 @@ namespace PKHeX.WinForms return dgv; } + private void GetBags() { foreach (InventoryPouch pouch in Pouches) @@ -166,6 +172,7 @@ namespace PKHeX.WinForms GetBag(dgv, pouch); } } + private void SetBags() { foreach (InventoryPouch t in Pouches) @@ -174,6 +181,7 @@ namespace PKHeX.WinForms SetBag(dgv, t); } } + private void GetBag(DataGridView dgv, InventoryPouch pouch) { for (int i = 0; i < dgv.Rows.Count; i++) @@ -187,6 +195,7 @@ namespace PKHeX.WinForms dgv.Rows[i].Cells[c].Value = pouch.Items[i].New; } } + private void SetBag(DataGridView dgv, InventoryPouch pouch) { int ctr = 0; @@ -217,7 +226,9 @@ namespace PKHeX.WinForms itemcnt = pouch.MaxCount; // Cap at pouch maximum } else if (itemcnt <= 0 && !HasNew) + { continue; // ignore item + } pouch.Items[ctr] = new InventoryItem { Index = itemindex, Count = itemcnt }; if (HasFreeSpace) @@ -234,18 +245,7 @@ namespace PKHeX.WinForms { int index = tabControl1.SelectedIndex; var pouch = Pouches[index]; - if (Main.HaX) - { - // Cap at absolute maximum - if (SAV.Generation <= 2) - NUD_Count.Maximum = byte.MaxValue; - else if (SAV.Generation >= 7) - NUD_Count.Maximum = pouch.MaxCount; - else // if (SAV.Generation >= 3) - NUD_Count.Maximum = ushort.MaxValue; - } - else - NUD_Count.Maximum = pouch.MaxCount; + NUD_Count.Maximum = GetMax(SAV, pouch, Main.HaX); bool disable = pouch.Type == InventoryType.PCItems || pouch.Type == InventoryType.FreeSpace; NUD_Count.Visible = L_Count.Visible = B_GiveAll.Visible = !disable; @@ -262,8 +262,23 @@ namespace PKHeX.WinForms NUD_Count.Value = Math.Max(1, pouch.MaxCount - 4); } + private static int GetMax(ITrainerInfo sav, InventoryPouch pouch, bool haX) + { + if (haX) + return pouch.MaxCount; + + // Cap at absolute maximum + if (sav.Generation <= 2) + return byte.MaxValue; + if (sav.Generation >= 7) + return pouch.MaxCount; + // if (SAV.Generation >= 3) + return ushort.MaxValue; + } + // Initialize String Tables private readonly string[] itemlist; + private string[] GetItems(ushort[] items, bool sort = true) { string[] res = new string[items.Length + 1]; @@ -277,11 +292,13 @@ namespace PKHeX.WinForms // User Cheats private int CurrentPouch => tabControl1.SelectedIndex; + private void B_GiveAll_Click(object sender, EventArgs e) { Button btn = (Button)sender; giveMenu.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void GiveAllItems(object sender, EventArgs e) { // Get Current Pouch @@ -329,6 +346,7 @@ namespace PKHeX.WinForms } System.Media.SystemSounds.Asterisk.Play(); } + private static bool IsItemCount1(ushort item, SaveFile sav) { switch (sav.Generation) @@ -343,6 +361,7 @@ namespace PKHeX.WinForms return new[] {420, 421, 422, 423, 423, 424, 425, 426, 427, 737}.Contains(item); } } + private void RemoveAllItems(object sender, EventArgs e) { // Get Current Pouch @@ -364,6 +383,7 @@ namespace PKHeX.WinForms } WinFormsUtil.Alert(MsgItemCleared); } + private void ModifyAllItems(object sender, EventArgs e) { // Get Current Pouch @@ -382,11 +402,13 @@ namespace PKHeX.WinForms } WinFormsUtil.Alert(MsgItemPouchCountUpdated); } + private void B_Sort_Click(object sender, EventArgs e) { Button btn = (Button)sender; sortMenu.Show(btn.PointToScreen(new Point(0, btn.Height))); } + private void SortByName(object sender, EventArgs e) { int pouch = CurrentPouch; @@ -399,6 +421,7 @@ namespace PKHeX.WinForms p.SortByName(itemlist, reverse:true); GetBag(dgv, p); } + private void SortByCount(object sender, EventArgs e) { int pouch = CurrentPouch; @@ -411,6 +434,7 @@ namespace PKHeX.WinForms p.SortByCount(reverse:true); GetBag(dgv, p); } + private void SortByIndex(object sender, EventArgs e) { int pouch = CurrentPouch; diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_MailBox.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_MailBox.cs index 70cecc9b1..86398e53e 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_MailBox.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_MailBox.cs @@ -11,6 +11,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SaveFile SAV; + public SAV_MailBox(SaveFile sav) { InitializeComponent(); @@ -155,6 +156,7 @@ namespace PKHeX.WinForms editing = false; LB_PartyHeld.SelectedIndex = 0; } + private readonly int[] HoennListMixed = { 277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300, 304,305,309,310,392,393,394,311,312,306,307,364,365,366,301,302,303,370,371,372,335,336,350,320,315,316, @@ -164,11 +166,13 @@ namespace PKHeX.WinForms 346,347,341,342,343,373,374,375,381,325,395,396,397,398,399,400, 401,402,403,407,408,404,405,406,409,410 }; + private void LoadList() { if (entry < 6) MakePartyList(); else MakePCList(); } + private void MakePartyList() { LB_PartyHeld.BeginUpdate(); @@ -180,6 +184,7 @@ namespace PKHeX.WinForms LB_PartyHeld.SelectedIndex = s; LB_PartyHeld.EndUpdate(); } + private void MakePCList() { LB_PCBOX.BeginUpdate(); @@ -211,6 +216,7 @@ namespace PKHeX.WinForms LB_PCBOX.SelectedIndex = s; LB_PCBOX.EndUpdate(); } + private void LoadPKM(bool isInit) { for (int i = 0; i < p.Count; i++) @@ -226,6 +232,7 @@ namespace PKHeX.WinForms PKMNUDs[i].Value = k >= -1 && k <= 5 ? k : -1; } } + private readonly Mail[] m; private bool editing; private int entry; @@ -235,6 +242,7 @@ namespace PKHeX.WinForms private readonly ComboBox[] AppearPKMs; private readonly int Gen; private readonly byte ResetVer, ResetLang; + private void Save() { switch (Gen) @@ -247,7 +255,7 @@ namespace PKHeX.WinForms Array.Copy(SAV.Data, ofs, SAV.Data, ofs + len, len); ofs += len << 1; SAV.Data[ofs] = (byte)NUD_BoxSize.Value; - len = 0x2F * 10 + 1; + len = (0x2F * 10) + 1; Array.Copy(SAV.Data, ofs, SAV.Data, ofs + len, len); break; case 3: @@ -270,6 +278,7 @@ namespace PKHeX.WinForms } SAV.PartyData = p; } + private void TempSave() { switch (m[entry]) @@ -288,8 +297,11 @@ namespace PKHeX.WinForms m3.MailType = CBIndexToMailType(CB_MailType.SelectedIndex); for (int y = 0; y < 3; y++) + { for (int x = 0; x < 3; x++) m3.SetMessage(y, x, (ushort)Messages[y][x].Value); + } + m3.AuthorSID = (ushort)NUD_AuthorSID.Value; int v = CB_AppearPKM1.SelectedValue as int? ?? 0; m3.AppearPKM = v < 252 ? v : HoennListMixed[v - 252]; @@ -301,8 +313,11 @@ namespace PKHeX.WinForms m4.MailType = v > 0 ? v - 1 : 0xFF; for (int y = 0; y < 3; y++) + { for (int x = 0; x < 4; x++) m4.SetMessage(y, x, (ushort)Messages[y][x].Value); + } + m4.AuthorSID = (ushort)NUD_AuthorSID.Value; for (int i = 0; i < AppearPKMs.Length; i++) m4.SetAppearPKM(i, (AppearPKMs[i].SelectedValue as int?) + 7 ?? 0); @@ -318,8 +333,11 @@ namespace PKHeX.WinForms m5.MailType = v > 0 ? v - 1 : 0xFF; for (int y = 0; y < 3; y++) + { for (int x = 0; x < 4; x++) m5.SetMessage(y, x, (ushort)Messages[y][x].Value); + } + m5.AuthorSID = (ushort)NUD_AuthorSID.Value; for (int i = 0; i < Miscs.Length; i++) m5.SetMisc(i, (ushort)Miscs[i].Value); @@ -329,6 +347,7 @@ namespace PKHeX.WinForms break; } } + private string CheckValid() { string ret = ""; @@ -353,7 +372,9 @@ namespace PKHeX.WinForms ret += $"{Environment.NewLine}Party#{i + 1} MailID mismatch"; } else if (h != -1) //C + { ret += $"{Environment.NewLine}Party#{i + 1} MailID mismatch"; + } } for (int i = 0; i < 6; i++) { @@ -376,7 +397,9 @@ namespace PKHeX.WinForms ret += $"{Environment.NewLine}MailID{i} MailType mismatch"; } else if (m[i].IsEmpty == false) //Q + { ret += $"{Environment.NewLine}MailID{i} MailType mismatch"; + } } } // Gen5 @@ -396,8 +419,10 @@ namespace PKHeX.WinForms // Gen* // Z: mail type is illegal for (int i = 0; i < m.Length; i++) + { if (m[i].IsEmpty == null) // Z ret += $"{Environment.NewLine}MailID{i} MailType mismatch"; + } return ret; } @@ -414,17 +439,20 @@ namespace PKHeX.WinForms Origin.SetData(SAV.Data, 0); Close(); } + private bool ItemIsMail(int itemID) => Array.IndexOf(MailItemID, itemID) >= 0; private int MailTypeToCBIndex(int mailtype) => 1 + Array.IndexOf(MailItemID, mailtype); private int CBIndexToMailType(int cbindex) => cbindex <= 0 ? 0 : cbindex <= MailItemID.Length ? MailItemID[cbindex - 1] : MailItemID[0]; private readonly int[] MailItemID; private readonly IList p; + private string GetSpeciesNameFromCB(int index) { foreach (ComboItem i in CB_AppearPKM1.Items) if (index == i.Value) return i.Text; return "PKM"; } + private DialogResult ModifyHeldItem() { DialogResult ret = DialogResult.Abort; @@ -438,6 +466,7 @@ namespace PKHeX.WinForms LoadPKM(false); return ret; } + private void B_Delete_Click(object sender, EventArgs e) { if (entry < 0) return; @@ -457,6 +486,7 @@ namespace PKHeX.WinForms LoadMail(); editing = false; } + private void EntryControl(object sender, EventArgs e) { if (editing) return; @@ -486,6 +516,7 @@ namespace PKHeX.WinForms if (entry >= 0) LoadMail(); editing = false; } + private void LoadMail() { switch (m[entry]) @@ -505,8 +536,11 @@ namespace PKHeX.WinForms CB_MailType.SelectedIndex = MailTypeToCBIndex(m3.MailType); for (int y = 0; y < 3; y++) + { for (int x = 0; x < 3; x++) Messages[y][x].Value = m3.GetMessage(y, x); + } + NUD_AuthorSID.Value = m3.AuthorSID; int v = Array.IndexOf(HoennListMixed, m3.AppearPKM); AppearPKMs[0].SelectedValue = m3.AppearPKM < 252 ? m3.AppearPKM : v >= 0 ? 252 + v : 0; @@ -517,8 +551,11 @@ namespace PKHeX.WinForms CB_MailType.SelectedIndex = m4.IsEmpty == false ? m4.MailType + 1 : 0; for (int y = 0; y < 3; y++) + { for (int x = 0; x < 4; x++) Messages[y][x].Value = m4.GetMessage(y, x); + } + NUD_AuthorSID.Value = m4.AuthorSID; for (int i = 0; i < AppearPKMs.Length; i++) AppearPKMs[i].SelectedValue = Math.Max(0, m4.GetAppearPKM(i) - 7); @@ -532,8 +569,11 @@ namespace PKHeX.WinForms CB_MailType.SelectedIndex = m5.IsEmpty == false ? m5.MailType + 1 : 0; for (int y = 0; y < 3; y++) + { for (int x = 0; x < 4; x++) Messages[y][x].Value = m5.GetMessage(y, x); + } + NUD_AuthorSID.Value = m5.AuthorSID; for (int i = 0; i < Miscs.Length; i++) Miscs[i].Value = m5.GetMisc(i); @@ -546,11 +586,13 @@ namespace PKHeX.WinForms } private readonly string[] gendersymbols = { "♂", "♀" }; + private void LoadOTlabel(int b) { Label_OTGender.Text = gendersymbols[b & 1]; Label_OTGender.ForeColor = b == 1 ? Color.Red : Color.Blue; } + private void Label_OTGender_Click(object sender, EventArgs e) { if (entry < 0) return; diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs index c3734e30c..0b1024e0d 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs @@ -9,6 +9,7 @@ namespace PKHeX.WinForms { private readonly SaveFile Origin; private readonly SaveFile SAV; + public SAV_SimpleTrainer(SaveFile sav) { InitializeComponent(); @@ -152,6 +153,7 @@ namespace PKHeX.WinForms Loading = false; } + private readonly CheckBox[] cba; private readonly bool Loading; private bool MapUpdated; @@ -162,6 +164,7 @@ namespace PKHeX.WinForms if (box.Text.Length == 0) box.Text = "0"; if (Util.ToInt32(box.Text) > 65535) box.Text = "65535"; } + private void Change255(object sender, EventArgs e) { MaskedTextBox box = (MaskedTextBox)sender; @@ -249,10 +252,12 @@ namespace PKHeX.WinForms Origin.SetData(SAV.Data, 0); Close(); } + private void B_Cancel_Click(object sender, EventArgs e) { Close(); } + private static int GetSeconds(DateTimePicker date, DateTimePicker time) { int val = (int)(date.Value - new DateTime(2000, 1, 1)).TotalSeconds; @@ -260,6 +265,7 @@ namespace PKHeX.WinForms val += (int)(time.Value - new DateTime(2000, 1, 1)).TotalSeconds; return val; } + private void ChangeMapValue(object sender, EventArgs e) { if (!Loading) diff --git a/PKHeX.WinForms/Util/ImageUtil.cs b/PKHeX.WinForms/Util/ImageUtil.cs index 05d07f628..3e39702af 100644 --- a/PKHeX.WinForms/Util/ImageUtil.cs +++ b/PKHeX.WinForms/Util/ImageUtil.cs @@ -5,9 +5,11 @@ using System.Runtime.InteropServices; namespace PKHeX.WinForms { + /// + /// Image Layering/Blending Utility + /// public static class ImageUtil { - // Image Layering/Blending Utility public static Bitmap LayerImage(Image baseLayer, Image overLayer, int x, int y, double transparency) { if (baseLayer == null) @@ -109,8 +111,10 @@ namespace PKHeX.WinForms public static void SetAllUsedPixelsOpaque(byte[] data) { for (int i = 0; i < data.Length; i += 4) + { if (data[i + 3] != 0) data[i + 3] = 0xFF; + } } public static void RemovePixels(byte[] pixels, byte[] original) diff --git a/PKHeX.WinForms/Util/WinFormsUtil.cs b/PKHeX.WinForms/Util/WinFormsUtil.cs index 95755e3ce..84367f672 100644 --- a/PKHeX.WinForms/Util/WinFormsUtil.cs +++ b/PKHeX.WinForms/Util/WinFormsUtil.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; +using System.Reflection; using System.Windows.Forms; using static PKHeX.Core.MessageStrings; @@ -104,6 +105,13 @@ namespace PKHeX.WinForms } } + public static void DoubleBuffered(this DataGridView dgv, bool setting) + { + Type dgvType = dgv.GetType(); + PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); + pi.SetValue(dgv, setting, null); + } + /// /// Initializes the to be bound to a provided list. ///