diff --git a/PKHeX/MainWindow/Main.cs b/PKHeX/MainWindow/Main.cs index 6c99d57fa..3f1180fc8 100644 --- a/PKHeX/MainWindow/Main.cs +++ b/PKHeX/MainWindow/Main.cs @@ -1597,7 +1597,7 @@ internal static void setCountrySubRegion(ComboBox CB, string type) private void setForms() { int species = Util.getIndex(CB_Species); - if (SAV.Generation < 4 && species != 201) + if (SAV.Generation < 4 && species != 201 || SAV.Generation < 3) { Label_Form.Visible = CB_Form.Visible = CB_Form.Enabled = false; return; @@ -1605,10 +1605,8 @@ private void setForms() bool hasForms = SAV.Personal[species].HasFormes || new[] { 201, 664, 665, 414 }.Contains(species); CB_Form.Enabled = CB_Form.Visible = Label_Form.Visible = hasForms; - if (SAV.Generation == 2) - CB_Form.Enabled = false; - if (HaX) + if (HaX && SAV.Generation >= 4) Label_Form.Visible = true; if (!hasForms) @@ -1661,20 +1659,20 @@ private void setMarkings() { PictureBox[] pba = { PB_Mark1, PB_Mark2, PB_Mark3, PB_Mark4, PB_Mark5, PB_Mark6 }; for (int i = 0; i < 6; i++) - pba[i].Image = Util.ChangeOpacity(pba[i].InitialImage, (pkm.Markings[i] ? 1 : 0) * 0.9 + 0.1); + pba[i].Image = Util.ChangeOpacity(pba[i].InitialImage, pkm.Markings[i] ? 1 : 0.1); - PB_MarkShiny.Image = Util.ChangeOpacity(PB_MarkShiny.InitialImage, (!BTN_Shinytize.Enabled ? 1 : 0) * 0.9 + 0.1); - PB_MarkCured.Image = Util.ChangeOpacity(PB_MarkCured.InitialImage, (CHK_Cured.Checked ? 1 : 0) * 0.9 + 0.1); + PB_MarkShiny.Image = Util.ChangeOpacity(PB_MarkShiny.InitialImage, !BTN_Shinytize.Enabled ? 1 : 0.1); + PB_MarkCured.Image = Util.ChangeOpacity(PB_MarkCured.InitialImage, CHK_Cured.Checked ? 1 : 0.1); - int Version = Util.getIndex(CB_GameOrigin); // 24,25 = XY, 26,27 = ORAS, 28,29 = ??? - PB_MarkPentagon.Image = Util.ChangeOpacity(PB_MarkPentagon.InitialImage, (Version >= 24 && Version <= 29 ? 1 : 0) * 0.9 + 0.1); + int Version = pkm.Version; + PB_MarkPentagon.Image = Util.ChangeOpacity(PB_MarkPentagon.InitialImage, Version >= 24 && Version <= 29 ? 1 : 0.1); } // Clicked Label Shortcuts // private void clickQR(object sender, EventArgs e) { - if (SAV.Generation != 6) + if (SAV.Generation <= 3) { - Util.Alert("QR feature only available for 6th Gen Games."); + Util.Alert("QR feature not available for loaded game."); return; } if (ModifierKeys == Keys.Alt) @@ -1683,15 +1681,20 @@ private void clickQR(object sender, EventArgs e) byte[] ekx = QR.getQRData(); if (ekx == null) return; + + if (ekx.Length != SAV.SIZE_STORED) { Util.Alert($"Decoded data not {SAV.SIZE_STORED} bytes.", $"QR Data Size: {SAV.SIZE_STORED}"); } + else + { + PKM pk = PKMConverter.getPKMfromBytes(ekx); + if (!pk.Valid || pk.Species <= 0) + { Util.Alert("Invalid data detected."); return; } - if (ekx.Length != PKX.SIZE_6STORED) { Util.Alert($"Decoded data not {PKX.SIZE_6STORED} bytes.", $"QR Data Size: {ekx.Length}"); } - else try - { - PK6 pk = new PK6(PKX.decryptArray(ekx)); - if (pk.ChecksumValid) { populateFields(pk); } - else Util.Alert("Invalid checksum in QR data."); - } - catch { Util.Alert("Error loading decrypted data."); } + string c; PKM pkz = PKMConverter.convertToFormat(pk, SAV.PKMType, out c); + if (pkz == null) + { Util.Alert(c); return; } + + populateFields(pkz); + } } else { @@ -1699,12 +1702,13 @@ private void clickQR(object sender, EventArgs e) PKM pkx = preparePKM(); byte[] ekx = pkx.EncryptedBoxData; const string server = "http://loadcode.projectpokemon.org/b1s1.html#"; // Rehosted with permission from LC/MS -- massive thanks! - Image qr = QR.getQRImage(ekx, server); + Image qr = QR.getQRImage(ekx, pkx.Format == 6 ? server : "null/#"); // pls no use QR on non gen6 -- bad user! if (qr == null) return; string[] r = pkx.QRText; - new QR(qr, dragout.Image, r[0], r[1], r[2], "PKHeX @ ProjectPokemon.org").ShowDialog(); + const string refURL = "PKHeX @ ProjectPokemon.org"; + new QR(qr, dragout.Image, r[0], r[1], r[2], $"{refURL} ({pkx.GetType().Name})").ShowDialog(); } } private void clickFriendship(object sender, EventArgs e) @@ -2076,13 +2080,8 @@ private void updateRandomEVs(object sender, EventArgs e) private void updateRandomPID(object sender, EventArgs e) { if (fieldsLoaded) - { - pkm.Version = Util.getIndex(CB_GameOrigin); pkm.PID = Util.getHEXval(TB_PID.Text); - pkm.Species = Util.getIndex(CB_Species); - pkm.Nature = Util.getIndex(CB_Nature); - pkm.AltForm = CB_Form.SelectedIndex; - } + if (sender == Label_Gender) pkm.setPIDGender(pkm.Gender); else if (sender == CB_Nature && pkm.Nature != Util.getIndex(CB_Nature)) @@ -2094,7 +2093,7 @@ private void updateRandomPID(object sender, EventArgs e) TB_PID.Text = pkm.PID.ToString("X8"); getQuickFiller(dragout); - if (pkm.GenNumber < 6 && TB_EC.Visible) + if (pkm.GenNumber < 6 && SAV.Generation >= 6) TB_EC.Text = TB_PID.Text; } private void updateRandomEC(object sender, EventArgs e) @@ -2209,12 +2208,8 @@ private void updatePKRSdays(object sender, EventArgs e) // If no days are selected if (CB_PKRSStrain.SelectedIndex == 0) - { - // Never Infected - CHK_Cured.Checked = false; - CHK_Infected.Checked = false; - } - else CHK_Cured.Checked = true; + CHK_Cured.Checked = CHK_Infected.Checked = false; // No Strain = Never Cured / Infected, triggers Strain update + else CHK_Cured.Checked = true; // Any Strain = Cured } private void updatePKRSCured(object sender, EventArgs e) { @@ -2270,21 +2265,22 @@ private void updateCountry(object sender, EventArgs e) } private void updateSpecies(object sender, EventArgs e) { - // Change Species Prompted - int Species = Util.getIndex(CB_Species); - int Level = Util.ToInt32(TB_Level.Text); - if (MT_Level.Visible) Level = Util.ToInt32(MT_Level.Text); - - // Get Forms for Given Species + // Get Species dependent information + setAbilityList(); setForms(); + updateForm(null, null); + + if (!fieldsLoaded) + return; + pkm.Species = Util.getIndex(CB_Species); // Recalculate EXP for Given Level - uint EXP = PKX.getEXP(Level, Species); + uint EXP = PKX.getEXP(pkm.CurrentLevel, pkm.Species); TB_EXP.Text = EXP.ToString(); // Check for Gender Changes // Get Gender Threshold - int gt = SAV.Personal[Species].Gender; + int gt = SAV.Personal[pkm.Species].Gender; int cg = Array.IndexOf(gendersymbols, Label_Gender.Text); int Gender; @@ -2301,8 +2297,6 @@ private void updateSpecies(object sender, EventArgs e) Label_Gender.Text = gendersymbols[Gender]; Label_Gender.ForeColor = Gender == 2 ? Label_Species.ForeColor : (Gender == 1 ? Color.Red : Color.Blue); - setAbilityList(); - updateForm(null, null); // If species changes and no nickname, set the new name == speciesName. if (!CHK_Nicknamed.Checked) @@ -2502,7 +2496,6 @@ private void updateNickname(object sender, EventArgs e) ((PK1)pkm).setNotNicknamed(); if (SAV.Generation == 2) ((PK2)pkm).setNotNicknamed(); - } } private void updateNicknameClick(object sender, MouseEventArgs e) @@ -2530,28 +2523,39 @@ private void updateNotOT(object sender, EventArgs e) } private void updateIsEgg(object sender, EventArgs e) { + // Display hatch counter if it is an egg, Display Friendship if it is not. + Label_HatchCounter.Visible = CHK_IsEgg.Checked && SAV.Generation > 1; + Label_Friendship.Visible = !CHK_IsEgg.Checked && SAV.Generation > 1; + + if (!fieldsLoaded) + return; + + pkm.IsEgg = CHK_IsEgg.Checked; if (CHK_IsEgg.Checked) { - CHK_Nicknamed.Checked = false; TB_Friendship.Text = "1"; - if (SAV.Generation == 2) - pkm.IsEgg = true; // If we are an egg, it won't have a met location. CHK_AsEgg.Checked = true; GB_EggConditions.Enabled = true; CAL_MetDate.Value = new DateTime(2000, 01, 01); - CB_MetLocation.SelectedIndex = 2; + + // if egg wasn't originally obtained by OT => Link Trade, else => None + bool isTraded = SAV.OT != TB_OT.Text || SAV.TID != Util.ToInt32(TB_TID.Text) || SAV.SID != Util.ToInt32(TB_SID.Text); + CB_MetLocation.SelectedIndex = isTraded ? 2 : 0; + + if (!CHK_Nicknamed.Checked) + { + TB_Nickname.Text = PKX.getSpeciesName(0, Util.getIndex(CB_Language)); + CHK_Nicknamed.Checked = true; + } } else // Not Egg { if (!CHK_Nicknamed.Checked) updateNickname(null, null); - if (SAV.Generation == 2) - pkm.IsEgg = false; - TB_Friendship.Text = SAV.Personal[Util.getIndex(CB_Species)].BaseFriendship.ToString(); if (CB_EggLocation.SelectedIndex == 0) @@ -2560,14 +2564,11 @@ private void updateIsEgg(object sender, EventArgs e) CHK_AsEgg.Checked = false; GB_EggConditions.Enabled = false; } + + if (TB_Nickname.Text == PKX.getSpeciesName(0, Util.getIndex(CB_Language))) + CHK_Nicknamed.Checked = false; } - // Display hatch counter if it is an egg, Display Friendship if it is not. - Label_HatchCounter.Visible = CHK_IsEgg.Checked && SAV.Generation > 1; - Label_Friendship.Visible = !CHK_IsEgg.Checked && SAV.Generation > 1; - - // Update image to (not) show egg. - if (!fieldsInitialized) return; updateNickname(null, null); getQuickFiller(dragout); } @@ -2715,7 +2716,10 @@ private void validateComboBox2(object sender, EventArgs e) if (sender == CB_Ability && SAV.Generation <= 5 && CB_Ability.SelectedIndex < 2) // not hidden updateRandomPID(sender, e); if (sender == CB_Nature && SAV.Generation <= 4) + { + pkm.Nature = CB_Nature.SelectedIndex; updateRandomPID(sender, e); + } } updateNatureModification(sender, null); updateIVs(null, null); // updating Nature will trigger stats to update as well @@ -2753,7 +2757,7 @@ private void removedropCB(object sender, KeyEventArgs e) { ((ComboBox)sender).DroppedDown = false; } - private void showLegality(PK6 pk, bool tabs, bool verbose) + private void showLegality(PKM pk, bool tabs, bool verbose) { LegalityAnalysis la = new LegalityAnalysis(pk); if (tabs) @@ -2786,14 +2790,14 @@ private void updateLegality(LegalityAnalysis la = null) private void updateStats() { // Generate the stats. - ushort[] stats = pkm.getStats(SAV.Personal.getFormeEntry(pkm.Species, pkm.AltForm)); + pkm.setStats(pkm.getStats(SAV.Personal.getFormeEntry(pkm.Species, pkm.AltForm))); - Stat_HP.Text = stats[0].ToString(); - Stat_ATK.Text = stats[1].ToString(); - Stat_DEF.Text = stats[2].ToString(); - Stat_SPA.Text = stats[4].ToString(); - Stat_SPD.Text = stats[5].ToString(); - Stat_SPE.Text = stats[3].ToString(); + Stat_HP.Text = pkm.Stat_HPCurrent.ToString(); + Stat_ATK.Text = pkm.Stat_ATK.ToString(); + Stat_DEF.Text = pkm.Stat_DEF.ToString(); + Stat_SPA.Text = pkm.Stat_SPA.ToString(); + Stat_SPD.Text = pkm.Stat_SPD.ToString(); + Stat_SPE.Text = pkm.Stat_SPE.ToString(); // Recolor the Stat Labels based on boosted stats. { @@ -2844,10 +2848,8 @@ private void openMedals(object sender, EventArgs e) } private void openHistory(object sender, EventArgs e) { - if (pkm.Format < 6) return; // Write back current values PK6 pk6 = pkm as PK6; - pk6.Version = Util.getIndex(CB_GameOrigin); pk6.HT_Name = TB_OTt2.Text; pk6.OT_Name = TB_OT.Text; pk6.IsEgg = CHK_IsEgg.Checked; @@ -2892,35 +2894,14 @@ public static string[] verifyPKMtoSAV(PKM pk) List errata = new List(); if (SAV.Generation > 1) { - ushort held; - switch (pk.GetType().Name) - { - case "PK2": - held = (ushort)(((PK2)pk).G2Item); - break; - case "CK3": - held = (ushort)(((CK3)pk).G3Item); - break; - case "XK3": - held = (ushort)(((XK3)pk).G3Item); - break; - case "PK3": - held = (ushort)(((PK3)pk).G3Item); - break; - default: - held = (ushort)(pk.HeldItem); - break; - } + ushort held = (ushort)pk.HeldItem; if (held > itemlist.Length) errata.Add($"Item Index beyond range: {held}"); - else - { - if (held > SAV.MaxItemID) - errata.Add($"Game can't obtain item: {itemlist[held]}"); - if (!pk.CanHoldItem(SAV.HeldItems)) - errata.Add($"Game can't hold item: {itemlist[held]}"); - } + else if (held > SAV.MaxItemID) + errata.Add($"Game can't obtain item: {itemlist[held]}"); + else if (!pk.CanHoldItem(SAV.HeldItems)) + errata.Add($"Game can't hold item: {itemlist[held]}"); } if (pk.Species > specieslist.Length) @@ -3470,6 +3451,7 @@ private void updateIsNicknamed(object sender, EventArgs e) { if (!fieldsLoaded) return; + if (!CHK_Nicknamed.Checked) { int species = Util.getIndex(CB_Species); diff --git a/PKHeX/MainWindow/MainCK3.cs b/PKHeX/MainWindow/MainCK3.cs index a3c82476e..a5d480001 100644 --- a/PKHeX/MainWindow/MainCK3.cs +++ b/PKHeX/MainWindow/MainCK3.cs @@ -27,8 +27,7 @@ private void populateFieldsCK3() Label_OTGender.Text = gendersymbols[ck3.OT_Gender]; Label_OTGender.ForeColor = ck3.OT_Gender == 1 ? Color.Red : Color.Blue; TB_PID.Text = ck3.PID.ToString("X8"); - CB_HeldItem.SelectedValue = ck3.G3Item; - setAbilityList(); + CB_HeldItem.SelectedValue = ck3.HeldItem; CB_Ability.SelectedIndex = ck3.AbilityNumber > CB_Ability.Items.Count ? 0 : ck3.AbilityNumber; CB_Nature.SelectedValue = ck3.Nature; TB_TID.Text = ck3.TID.ToString("00000"); @@ -131,7 +130,7 @@ private PKM prepareCK3() return null; ck3.Species = Util.getIndex(CB_Species); - ck3.G3Item = Util.getIndex(CB_HeldItem); + ck3.HeldItem = Util.getIndex(CB_HeldItem); ck3.TID = Util.ToInt32(TB_TID.Text); ck3.SID = Util.ToInt32(TB_SID.Text); ck3.EXP = Util.ToUInt32(TB_EXP.Text); diff --git a/PKHeX/MainWindow/MainPK2.cs b/PKHeX/MainWindow/MainPK2.cs index 0df93f0dc..75e6d37fc 100644 --- a/PKHeX/MainWindow/MainPK2.cs +++ b/PKHeX/MainWindow/MainPK2.cs @@ -21,7 +21,7 @@ private void populateFieldsPK2() MT_Level.Text = pk2.Stat_Level.ToString(); TB_Level.Text = pk2.Stat_Level.ToString(); TB_EXP.Text = pk2.EXP.ToString(); - CB_HeldItem.SelectedValue = pk2.G2Item; + CB_HeldItem.SelectedValue = pk2.HeldItem; CB_Form.SelectedIndex = pk2.AltForm; CHK_IsEgg.Checked = pk2.IsEgg; TB_Friendship.Text = pk2.CurrentFriendship.ToString(); @@ -85,7 +85,7 @@ private PKM preparePK2() pk2.Species = Util.getIndex(CB_Species); pk2.TID = Util.ToInt32(TB_TID.Text); pk2.EXP = Util.ToUInt32(TB_EXP.Text); - pk2.G2Item = Util.getIndex(CB_HeldItem); + pk2.HeldItem = Util.getIndex(CB_HeldItem); pk2.IsEgg = CHK_IsEgg.Checked; pk2.CurrentFriendship = Util.ToInt32(TB_Friendship.Text); pk2.Met_Level = Util.ToInt32(TB_MetLevel.Text); diff --git a/PKHeX/MainWindow/MainPK3.cs b/PKHeX/MainWindow/MainPK3.cs index c95b41c68..56e8d5c7c 100644 --- a/PKHeX/MainWindow/MainPK3.cs +++ b/PKHeX/MainWindow/MainPK3.cs @@ -27,8 +27,7 @@ private void populateFieldsPK3() Label_OTGender.Text = gendersymbols[pk3.OT_Gender]; Label_OTGender.ForeColor = pk3.OT_Gender == 1 ? Color.Red : Color.Blue; TB_PID.Text = pk3.PID.ToString("X8"); - CB_HeldItem.SelectedValue = pk3.G3Item; - setAbilityList(); + CB_HeldItem.SelectedValue = pk3.HeldItem; CB_Ability.SelectedIndex = pk3.AbilityNumber > CB_Ability.Items.Count ? 0 : pk3.AbilityNumber; CB_Nature.SelectedValue = pk3.Nature; TB_TID.Text = pk3.TID.ToString("00000"); @@ -109,7 +108,7 @@ private PKM preparePK3() return null; pk3.Species = Util.getIndex(CB_Species); - pk3.G3Item = Util.getIndex(CB_HeldItem); + pk3.HeldItem = Util.getIndex(CB_HeldItem); pk3.TID = Util.ToInt32(TB_TID.Text); pk3.SID = Util.ToInt32(TB_SID.Text); pk3.EXP = Util.ToUInt32(TB_EXP.Text); diff --git a/PKHeX/MainWindow/MainPK4.cs b/PKHeX/MainWindow/MainPK4.cs index aa4ed4e0b..be56a037b 100644 --- a/PKHeX/MainWindow/MainPK4.cs +++ b/PKHeX/MainWindow/MainPK4.cs @@ -28,7 +28,6 @@ private void populateFieldsPK4() Label_OTGender.ForeColor = pk4.OT_Gender == 1 ? Color.Red : Color.Blue; TB_PID.Text = pk4.PID.ToString("X8"); CB_HeldItem.SelectedValue = pk4.HeldItem; - setAbilityList(); CB_Nature.SelectedValue = pk4.Nature; TB_TID.Text = pk4.TID.ToString("00000"); TB_SID.Text = pk4.SID.ToString("00000"); diff --git a/PKHeX/MainWindow/MainPK5.cs b/PKHeX/MainWindow/MainPK5.cs index 37764677e..a3da5fbb2 100644 --- a/PKHeX/MainWindow/MainPK5.cs +++ b/PKHeX/MainWindow/MainPK5.cs @@ -28,7 +28,6 @@ private void populateFieldsPK5() Label_OTGender.ForeColor = pk5.OT_Gender == 1 ? Color.Red : Color.Blue; TB_PID.Text = pk5.PID.ToString("X8"); CB_HeldItem.SelectedValue = pk5.HeldItem; - setAbilityList(); CB_Nature.SelectedValue = pk5.Nature; TB_TID.Text = pk5.TID.ToString("00000"); TB_SID.Text = pk5.SID.ToString("00000"); diff --git a/PKHeX/MainWindow/MainPK6.cs b/PKHeX/MainWindow/MainPK6.cs index 534dbd8db..6692d6090 100644 --- a/PKHeX/MainWindow/MainPK6.cs +++ b/PKHeX/MainWindow/MainPK6.cs @@ -29,7 +29,6 @@ private void populateFieldsPK6() Label_OTGender.ForeColor = pk6.OT_Gender == 1 ? Color.Red : Color.Blue; TB_PID.Text = pk6.PID.ToString("X8"); CB_HeldItem.SelectedValue = pk6.HeldItem; - setAbilityList(); TB_AbilityNumber.Text = pk6.AbilityNumber.ToString(); CB_Ability.SelectedIndex = pk6.AbilityNumber < 6 ? pk6.AbilityNumber >> 1 : 0; // with some simple error handling CB_Nature.SelectedValue = pk6.Nature; diff --git a/PKHeX/MainWindow/MainXK3.cs b/PKHeX/MainWindow/MainXK3.cs index 67e2a75d2..89b8541d5 100644 --- a/PKHeX/MainWindow/MainXK3.cs +++ b/PKHeX/MainWindow/MainXK3.cs @@ -27,8 +27,7 @@ private void populateFieldsXK3() Label_OTGender.Text = gendersymbols[xk3.OT_Gender]; Label_OTGender.ForeColor = xk3.OT_Gender == 1 ? Color.Red : Color.Blue; TB_PID.Text = xk3.PID.ToString("X8"); - CB_HeldItem.SelectedValue = xk3.G3Item; - setAbilityList(); + CB_HeldItem.SelectedValue = xk3.HeldItem; CB_Ability.SelectedIndex = xk3.AbilityNumber > CB_Ability.Items.Count ? 0 : xk3.AbilityNumber; CB_Nature.SelectedValue = xk3.Nature; TB_TID.Text = xk3.TID.ToString("00000"); @@ -128,7 +127,7 @@ private PKM prepareXK3() return null; xk3.Species = Util.getIndex(CB_Species); - xk3.G3Item = Util.getIndex(CB_HeldItem); + xk3.HeldItem = Util.getIndex(CB_HeldItem); xk3.TID = Util.ToInt32(TB_TID.Text); xk3.SID = Util.ToInt32(TB_SID.Text); xk3.EXP = Util.ToUInt32(TB_EXP.Text); diff --git a/PKHeX/PKM/CK3.cs b/PKHeX/PKM/CK3.cs index 615331731..0b2270164 100644 --- a/PKHeX/PKM/CK3.cs +++ b/PKHeX/PKM/CK3.cs @@ -79,8 +79,8 @@ public CK3(byte[] decryptedData = null, string ident = null) public override int Move4_PP { get { return Data[0x86]; } set { Data[0x86] = (byte)value; } } public override int Move4_PPUps { get { return Data[0x87]; } set { Data[0x87] = (byte)value; } } - public override int HeldItem { get { return PKX.getG4Item((ushort)G3Item); } set { } } - public int G3Item { get { return BigEndian.ToUInt16(Data, 0x88); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x88); } } + public override int SpriteItem => PKX.getG4Item((ushort)HeldItem); + public override int HeldItem { get { return BigEndian.ToUInt16(Data, 0x88); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x88); } } // More party stats public override int Stat_HPCurrent { get { return BigEndian.ToUInt16(Data, 0x8A); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x8A); } } @@ -203,9 +203,5 @@ public override bool getGenderIsValid() return false; } - public override bool CanHoldItem(ushort[] ValidArray) - { - return ValidArray.Contains((ushort)G3Item); - } } } diff --git a/PKHeX/PKM/PK2.cs b/PKHeX/PKM/PK2.cs index 24048e5f9..d07d88b47 100644 --- a/PKHeX/PKM/PK2.cs +++ b/PKHeX/PKM/PK2.cs @@ -133,8 +133,8 @@ public override int Species Data[0] = (byte)value; } } - public override int HeldItem { get { return PKX.getG4Item((byte) G2Item); } set { } } - public int G2Item { get { return Data[0x1]; } set { Data[0x1] = (byte)value; } } + public override int SpriteItem => PKX.getG4Item((byte)HeldItem); + public override int HeldItem { get { return Data[0x1]; } set { Data[0x1] = (byte)value; } } public override int Move1 { get { return Data[2]; } set { Data[2] = (byte) value; } } public override int Move2 { get { return Data[3]; } set { Data[3] = (byte)value; } } public override int Move3 { get { return Data[4]; } set { Data[4] = (byte)value; } } @@ -272,11 +272,6 @@ public override int Gender public bool hasMetData => CaughtData != 0; - public override bool CanHoldItem(ushort[] ValidArray) - { - return ValidArray.Contains((ushort)G2Item); - } - #region Future, Unused Attributes public override uint EncryptionConstant { get { return 0; } set { } } public override uint PID { get { return 0; } set { } } diff --git a/PKHeX/PKM/PK3.cs b/PKHeX/PKM/PK3.cs index cdcda97e4..0a673c8b6 100644 --- a/PKHeX/PKM/PK3.cs +++ b/PKHeX/PKM/PK3.cs @@ -59,8 +59,8 @@ public PK3(byte[] decryptedData = null, string ident = null) #region Block A public override int Species { get { return PKX.getG4Species(BitConverter.ToUInt16(Data, 0x20)); } set { BitConverter.GetBytes((ushort)PKX.getG3Species(value)).CopyTo(Data, 0x20); } } - public override int HeldItem { get { return PKX.getG4Item((ushort)G3Item); } set { } } - public int G3Item { get { return BitConverter.ToUInt16(Data, 0x22); } set { BitConverter.GetBytes((ushort) value).CopyTo(Data, 0x22); } } + public override int SpriteItem => PKX.getG4Item((ushort)HeldItem); + public override int HeldItem { get { return BitConverter.ToUInt16(Data, 0x22); } set { BitConverter.GetBytes((ushort) value).CopyTo(Data, 0x22); } } public override uint EXP { get { return BitConverter.ToUInt32(Data, 0x24); } set { BitConverter.GetBytes(value).CopyTo(Data, 0x24); } } private byte PPUps { get { return Data[0x28]; } set { Data[0x28] = value; } } @@ -180,10 +180,6 @@ public override bool getGenderIsValid() return false; } - public override bool CanHoldItem(ushort[] ValidArray) - { - return ValidArray.Contains((ushort)G3Item); - } public PK4 convertToPK4() { diff --git a/PKHeX/PKM/PKM.cs b/PKHeX/PKM/PKM.cs index 1f2658a7e..dcab5dd98 100644 --- a/PKHeX/PKM/PKM.cs +++ b/PKHeX/PKM/PKM.cs @@ -227,6 +227,7 @@ public byte[] Write() public abstract int CurrentHandler { get; set; } // Derived + public virtual int SpriteItem => HeldItem; public virtual bool IsShiny => TSV == PSV; public bool Gen6 => Version >= 24 && Version <= 29; public bool XY => Version == (int)GameVersion.X || Version == (int)GameVersion.Y; diff --git a/PKHeX/PKM/PKX.cs b/PKHeX/PKM/PKX.cs index 3c0c84a52..4aef4f662 100644 --- a/PKHeX/PKM/PKX.cs +++ b/PKHeX/PKM/PKX.cs @@ -548,7 +548,7 @@ public static Image getSprite(int species, int form, int gender, int item, bool } public static Image getSprite(PKM pkm) { - return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.HeldItem, pkm.IsEgg, pkm.IsShiny, pkm.Format); + return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format); } // Font Related diff --git a/PKHeX/PKM/XK3.cs b/PKHeX/PKM/XK3.cs index 96a2c8e2b..e11f1c881 100644 --- a/PKHeX/PKM/XK3.cs +++ b/PKHeX/PKM/XK3.cs @@ -43,8 +43,8 @@ public XK3(byte[] decryptedData = null, string ident = null) public override ushort Checksum { get { return SaveUtil.ccitt16(Data); } set { } } // totally false, just a way to get a 'random' ident for the pkm. public override int Species { get { return PKX.getG4Species(BigEndian.ToUInt16(Data, 0x00)); } set { BigEndian.GetBytes((ushort)PKX.getG3Species(value)).CopyTo(Data, 0x00); } } - public override int HeldItem { get { return PKX.getG4Item((ushort)G3Item); } set { } } - public int G3Item { get { return BigEndian.ToUInt16(Data, 0x02); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x02); } } + public override int SpriteItem => PKX.getG4Item((ushort)HeldItem); + public override int HeldItem { get { return BigEndian.ToUInt16(Data, 0x02); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x02); } } public override int Stat_HPCurrent { get { return BigEndian.ToUInt16(Data, 0x04); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x04); } } public override int OT_Friendship { get { return Data[0x06]; } set { Data[0x06] = (byte)value; } } public override int Met_Location { get { return BigEndian.ToUInt16(Data, 0x08); } set { BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x08); } } @@ -210,9 +210,5 @@ public override bool getGenderIsValid() return false; } - public override bool CanHoldItem(ushort[] ValidArray) - { - return ValidArray.Contains((ushort)G3Item); - } } }