diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index e43edd8aa..8ac4a01d9 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -3622,7 +3622,7 @@ public void setPKXBoxes() { int boxoffset = SAV.getBoxOffset(CB_BoxSelect.SelectedIndex); int boxbgval = SAV.getBoxWallpaper(CB_BoxSelect.SelectedIndex); - PAN_Box.BackgroundImage = SAV.getWallpaper(boxbgval); + PAN_Box.BackgroundImage = SAV.WallpaperImage(boxbgval); for (int i = 0; i < 30; i++) { if (i < SAV.BoxSlotCount) diff --git a/PKHeX.WinForms/Subforms/KChart.cs b/PKHeX.WinForms/Subforms/KChart.cs index a637e81d7..a15aacef2 100644 --- a/PKHeX.WinForms/Subforms/KChart.cs +++ b/PKHeX.WinForms/Subforms/KChart.cs @@ -53,8 +53,8 @@ private void popEntry(int index) row.Cells[r++].Value = s > 721 || Legal.PastGenAlolanNatives.Contains(s); row.Cells[r].Style.BackColor = mapColor((int)((p.BST - 175) / 3f)); row.Cells[r++].Value = p.BST.ToString("000"); - row.Cells[r++].Value = (Image)Resources.ResourceManager.GetObject("type_icon_" + p.Types[0].ToString("00")); - row.Cells[r++].Value = p.Types[0] == p.Types[1] ? Resources.slotTrans : (Image)Resources.ResourceManager.GetObject("type_icon_" + p.Types[1].ToString("00")); + row.Cells[r++].Value = PKMUtil.getTypeSprite(p.Types[0]); + row.Cells[r++].Value = p.Types[0] == p.Types[1] ? Resources.slotTrans : PKMUtil.getTypeSprite(p.Types[1]); row.Cells[r].Style.BackColor = mapColor(p.HP); row.Cells[r++].Value = p.HP.ToString("000"); row.Cells[r].Style.BackColor = mapColor(p.ATK); diff --git a/PKHeX.WinForms/Subforms/PKM Editors/RibbonEditor.cs b/PKHeX.WinForms/Subforms/PKM Editors/RibbonEditor.cs index 896cc9ff0..e33674a30 100644 --- a/PKHeX.WinForms/Subforms/PKM Editors/RibbonEditor.cs +++ b/PKHeX.WinForms/Subforms/PKM Editors/RibbonEditor.cs @@ -72,7 +72,7 @@ private void populateRibbons() private void addRibbonSprite(RibbonInfo rib) { PictureBox pb = new PictureBox { AutoSize = false, Size = new Size(40,40), BackgroundImageLayout = ImageLayout.Center, Visible = false, Name = PrefixPB + rib.Name }; - var img = Core.Properties.Resources.ResourceManager.GetObject(rib.Name.Replace("CountG3", "G3").ToLower()); + var img = PKMUtil.getRibbonSprite(rib.Name); if (img != null) pb.BackgroundImage = (Bitmap)img; if (img == null) diff --git a/PKHeX.WinForms/Subforms/SAV_MysteryGiftDB.cs b/PKHeX.WinForms/Subforms/SAV_MysteryGiftDB.cs index a1a7de638..a29dab9f3 100644 --- a/PKHeX.WinForms/Subforms/SAV_MysteryGiftDB.cs +++ b/PKHeX.WinForms/Subforms/SAV_MysteryGiftDB.cs @@ -311,7 +311,7 @@ private void FillPKXBoxes(int start) } var data = Results.Skip(start * RES_MIN).Take(RES_MAX).ToArray(); for (int i = 0; i < data.Length; i++) - PKXBOXES[i].Image = SAV_Wondercard.getSprite(data[i]); + PKXBOXES[i].Image = data[i].Sprite(); for (int i = data.Length; i < RES_MAX; i++) PKXBOXES[i].Image = null; diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs index d9aa1a655..b713157b7 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs @@ -125,7 +125,7 @@ private void changeBoxBG(object sender, EventArgs e) if (!editing) SAV.setBoxWallpaper(LB_BoxSelect.SelectedIndex, CB_BG.SelectedIndex); - PAN_BG.BackgroundImage = SAV.getWallpaper(CB_BG.SelectedIndex); + PAN_BG.BackgroundImage = SAV.WallpaperImage(CB_BG.SelectedIndex); } private bool MoveItem(int direction) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs index 0e7045d4d..11a0519a3 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs @@ -422,8 +422,8 @@ private void getTextBoxes() MT_Seconds.Text = SAV.PlayedSeconds.ToString(); // Load PSS Sprite - CB_MultiplayerSprite.SelectedValue = SAV.Sprite; - PB_Sprite.Image = (Image)Core.Properties.Resources.ResourceManager.GetObject("tr_" + SAV.Sprite.ToString("00")); + CB_MultiplayerSprite.SelectedValue = SAV.MultiplayerSpriteID; + PB_Sprite.Image = SAV.Sprite(); if (SAV.XY) { @@ -519,7 +519,7 @@ private void save() SAV.PlayedSeconds = ushort.Parse(MT_Seconds.Text)%60; // Sprite - SAV.Sprite = Convert.ToByte(CB_MultiplayerSprite.SelectedValue); + SAV.MultiplayerSpriteID = Convert.ToByte(CB_MultiplayerSprite.SelectedValue); // Appearance if (SAV.XY) @@ -657,7 +657,8 @@ private void toggleBadge(object sender, EventArgs e) private void CB_Multi_SelectedIndexChanged(object sender, EventArgs e) { - PB_Sprite.Image = (Image)Core.Properties.Resources.ResourceManager.GetObject(Main.SAV.ORAS || Main.SAV.ORASDEMO ? "tr_" + WinFormsUtil.getIndex(CB_MultiplayerSprite).ToString("00") : "tr_00"); + SAV.MultiplayerSpriteID = WinFormsUtil.getIndex(CB_MultiplayerSprite); + PB_Sprite.Image = SAV.Sprite(); } } } \ No newline at end of file diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs index f466cdd39..de3dc80fc 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs @@ -90,7 +90,7 @@ public void setPKXBoxes() { int boxoffset = SAV.getBoxOffset(CB_BoxSelect.SelectedIndex); int boxbgval = SAV.getBoxWallpaper(CB_BoxSelect.SelectedIndex); - PAN_Box.BackgroundImage = SAV.getWallpaper(boxbgval); + PAN_Box.BackgroundImage = SAV.WallpaperImage(boxbgval); for (int i = 0; i < SAV.BoxSlotCount; i++) getSlotFiller(boxoffset + SAV.SIZE_STORED*i, SlotPictureBoxes[i]); diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs index d5e8b28a9..723a33817 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs @@ -70,7 +70,7 @@ private void setGiftBoxes() for (int i = 0; i < mga.Gifts.Length; i++) { MysteryGift m = mga.Gifts[i]; - pba[i].Image = m.Empty ? null : getSprite(m); + pba[i].Image = m.Sprite(); } } private void viewGiftData(MysteryGift g) @@ -85,7 +85,7 @@ private void viewGiftData(MysteryGift g) g.GiftUsed = false; RTB.Text = getDescription(g); - PB_Preview.Image = getSprite(g); + PB_Preview.Image = g.Sprite(); mg = g; } catch (Exception e) @@ -468,21 +468,6 @@ private void pbBoxSlot_DragEnter(object sender, DragEventArgs e) e.Effect = DragDropEffects.Move; } private int wc_slot = -1; - - internal static Image getSprite(MysteryGift gift) - { - Image img; - if (gift.IsPokémon) - img = PKMUtil.getSprite(gift.convertToPKM(Main.SAV)); - else if (gift.IsItem) - img = (Image)(Core.Properties.Resources.ResourceManager.GetObject("item_" + gift.Item) ?? Core.Properties.Resources.unknown); - else - img = Core.Properties.Resources.unknown; - - if (gift.GiftUsed) - img = ImageUtil.LayerImage(new Bitmap(img.Width, img.Height), img, 0, 0, 0.3); - return img; - } private static string getDescription(MysteryGift gift) { if (gift.Empty) diff --git a/PKHeX.WinForms/Util/PKMUtil.cs b/PKHeX.WinForms/Util/PKMUtil.cs index 115624946..e650b610d 100644 --- a/PKHeX.WinForms/Util/PKMUtil.cs +++ b/PKHeX.WinForms/Util/PKMUtil.cs @@ -11,14 +11,10 @@ public static Image getBallSprite(int ball) string str = PKX.getBallString(ball); return (Image)Resources.ResourceManager.GetObject(str) ?? Resources._ball4; // Poké Ball (default) } - public static Image Sprite(this PKM pkm) - { - return getSprite(pkm); - } public static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1) { if (species == 0) - return (Image)Resources.ResourceManager.GetObject("_0"); + return Resources._0; string file = PKX.getSpriteString(species, form, gender, generation); @@ -26,22 +22,15 @@ public static Image getSprite(int species, int form, int gender, int item, bool Image baseImage = (Image)Resources.ResourceManager.GetObject(file); if (baseImage == null) { - if (species < 803) - { - baseImage = ImageUtil.LayerImage( - (Image)Resources.ResourceManager.GetObject("_" + species), - Resources.unknown, - 0, 0, .5); - } - else - baseImage = Resources.unknown; + baseImage = (Image) Resources.ResourceManager.GetObject("_" + species); + baseImage = baseImage != null ? ImageUtil.LayerImage(baseImage, Resources.unknown, 0, 0, .5) : Resources.unknown; } if (isegg) { // Start with a partially transparent species by layering the species with partial opacity onto a blank image. - baseImage = ImageUtil.LayerImage((Image)Resources.ResourceManager.GetObject("_0"), baseImage, 0, 0, 0.33); + baseImage = ImageUtil.LayerImage(Resources._0, baseImage, 0, 0, 0.33); // Add the egg layer over-top with full opacity. - baseImage = ImageUtil.LayerImage(baseImage, (Image)Resources.ResourceManager.GetObject("egg"), 0, 0, 1); + baseImage = ImageUtil.LayerImage(baseImage, Resources.egg, 0, 0, 1); } if (shiny) { @@ -59,15 +48,53 @@ public static Image getSprite(int species, int form, int gender, int item, bool } return baseImage; } - public static Image getSprite(PKM pkm) + public static Image getRibbonSprite(string name) + { + return Resources.ResourceManager.GetObject(name.Replace("CountG3", "G3").ToLower()) as Image; + } + public static Image getTypeSprite(int type) + { + return Resources.ResourceManager.GetObject("type_icon_" + type.ToString("00")) as Image; + } + + private static Image getSprite(MysteryGift gift) + { + if (gift.Empty) + return null; + + Image img; + if (gift.IsPokémon) + img = getSprite(gift.convertToPKM(Main.SAV)); + else if (gift.IsItem) + img = (Image)(Resources.ResourceManager.GetObject("item_" + gift.Item) ?? Resources.unknown); + else + img = Resources.unknown; + + if (gift.GiftUsed) + img = ImageUtil.LayerImage(new Bitmap(img.Width, img.Height), img, 0, 0, 0.3); + return img; + } + private static Image getSprite(PKM pkm) { return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format); } - - public static Image getWallpaper(this SaveFile SAV, int box) + private static Image getSprite(SaveFile SAV) + { + string file = "tr_00"; + if (SAV.Generation == 6 && (SAV.ORAS || SAV.ORASDEMO)) + file = "tr_" + SAV.MultiplayerSpriteID.ToString("00"); + return Resources.ResourceManager.GetObject(file) as Image; + } + private static Image getWallpaper(SaveFile SAV, int box) { string s = BoxWallpaper.getWallpaper(SAV, box); return (Bitmap)(Resources.ResourceManager.GetObject(s) ?? Resources.box_wp16xy); } + + // Extension Methods + public static Image Sprite(this MysteryGift gift) => getSprite(gift); + public static Image Sprite(this PKM pkm) => getSprite(pkm); + public static Image Sprite(this SaveFile SAV) => getSprite(SAV); + public static Image WallpaperImage(this SaveFile SAV, int box) => getWallpaper(SAV, box); } } diff --git a/PKHeX/PKM/PKX.cs b/PKHeX/PKM/PKX.cs index e81389dc4..274ef7c92 100644 --- a/PKHeX/PKM/PKX.cs +++ b/PKHeX/PKM/PKX.cs @@ -516,9 +516,9 @@ public static string getSpriteString(int species, int form, int gender, int gene string file = "_" + species; if (form > 0) // Alt Form Handling - file = file + "_" + form; + file += "_" + form; else if (gender == 1 && new[] { 592, 593, 521, 668 }.Contains(species)) // Frillish & Jellicent, Unfezant & Pyroar - file = file + "_" + gender; + file += "_" + gender; if (species == 25 && form > 0 && generation >= 7) // Pikachu file += "c"; // Cap diff --git a/PKHeX/Saves/SAV6.cs b/PKHeX/Saves/SAV6.cs index 3ef90cb08..dd448fa25 100644 --- a/PKHeX/Saves/SAV6.cs +++ b/PKHeX/Saves/SAV6.cs @@ -347,7 +347,7 @@ public override int Gender get { return Data[TrainerCard + 5]; } set { Data[TrainerCard + 5] = (byte)value; } } - public int Sprite + public override int MultiplayerSpriteID { get { return Data[TrainerCard + 7]; } set { Data[TrainerCard + 7] = (byte)value; } diff --git a/PKHeX/Saves/SaveFile.cs b/PKHeX/Saves/SaveFile.cs index d8cf1326c..997defb6d 100644 --- a/PKHeX/Saves/SaveFile.cs +++ b/PKHeX/Saves/SaveFile.cs @@ -328,6 +328,7 @@ public virtual MysteryGiftAlbum GiftAlbum public virtual uint Money { get; set; } public abstract int BoxCount { get; } public virtual int PartyCount { get; protected set; } + public virtual int MultiplayerSpriteID { get { return 0; } set { } } // Varied Methods protected abstract void setChecksums();