diff --git a/PKHeX.Drawing/ImageUtil.cs b/PKHeX.Drawing/ImageUtil.cs index 16a42de66..69708b5eb 100644 --- a/PKHeX.Drawing/ImageUtil.cs +++ b/PKHeX.Drawing/ImageUtil.cs @@ -50,13 +50,13 @@ public static Bitmap ChangeAllColorTo(Image img, Color c) return bmp; } - public static Bitmap ChangeTransparentTo(Image img, Color c) + public static Bitmap ChangeTransparentTo(Image img, Color c, byte trans) { var bmp = (Bitmap)img.Clone(); GetBitmapData(bmp, out BitmapData bmpData, out IntPtr ptr, out byte[] data); Marshal.Copy(ptr, data, 0, data.Length); - SetAllTransparencyTo(data, c); + SetAllTransparencyTo(data, c, trans); Marshal.Copy(data, 0, ptr, data.Length); bmp.UnlockBits(bmpData); @@ -130,7 +130,7 @@ private static void SetAllTransparencyTo(byte[] data, double trans) data[i + 3] = (byte)(data[i + 3] * trans); } - public static void SetAllTransparencyTo(byte[] data, Color c) + public static void SetAllTransparencyTo(byte[] data, Color c, byte trans) { byte R = c.R; byte G = c.G; @@ -142,7 +142,7 @@ public static void SetAllTransparencyTo(byte[] data, Color c) data[i + 0] = B; data[i + 1] = G; data[i + 2] = R; - data[i + 3] = 0x3F; + data[i + 3] = trans; } } diff --git a/PKHeX.Drawing/Sprites/SpriteBuilder.cs b/PKHeX.Drawing/Sprites/SpriteBuilder.cs index fc159281e..f748215dc 100644 --- a/PKHeX.Drawing/Sprites/SpriteBuilder.cs +++ b/PKHeX.Drawing/Sprites/SpriteBuilder.cs @@ -7,8 +7,9 @@ namespace PKHeX.Drawing public abstract class SpriteBuilder : ISpriteBuilder { public static bool ShowEggSpriteAsItem { get; set; } = true; - public static bool EncounterColorBackground { get; set; } = true; - public static bool EncounterShowFixedBall { get; set; } = true; + public static bool ShowEncounterColor { get; set; } = true; + public static bool ShowEncounterBall { get; set; } = true; + public static bool ShowEncounterColorPKM { get; set; } /// Width of the generated Sprite image. public abstract int Width { get; } diff --git a/PKHeX.Drawing/Sprites/SpriteUtil.cs b/PKHeX.Drawing/Sprites/SpriteUtil.cs index 001f39e81..df1dfe4d7 100644 --- a/PKHeX.Drawing/Sprites/SpriteUtil.cs +++ b/PKHeX.Drawing/Sprites/SpriteUtil.cs @@ -68,10 +68,10 @@ private static Image GetSprite(MysteryGift gift) return Spriter.None; var img = GetBaseImage(gift); - if (SpriteBuilder.EncounterColorBackground) + if (SpriteBuilder.ShowEncounterColor) { var color = Color.FromArgb(gift.GetType().Name.GetHashCode() * 0x43FD43FD); - img = ImageUtil.ChangeTransparentTo(img, color); + img = ImageUtil.ChangeTransparentTo(img, color, 0x3F); } if (gift.GiftUsed) img = ImageUtil.ChangeOpacity(img, 0.3); @@ -86,7 +86,7 @@ private static Image GetBaseImage(MysteryGift gift) { var gender = Math.Max(0, gift.Gender); var img = GetSprite(gift.Species, gift.Form, gender, 0, gift.HeldItem, gift.IsEgg, gift.IsShiny, gift.Generation); - if (SpriteBuilder.EncounterShowFixedBall && gift is IFixedBall { FixedBall: not Ball.None } b) + if (SpriteBuilder.ShowEncounterBall && gift is IFixedBall { FixedBall: not Ball.None } b) { var ballSprite = GetBallSprite((int)b.FixedBall); img = ImageUtil.LayerImage(img, ballSprite, 0, img.Height - ballSprite.Height); @@ -162,6 +162,12 @@ private static Image GetSprite(PKM pk, SaveFile sav, int box, int slot, bool fla sprite = ImageUtil.LayerImage(sprite, Resources.warn, 0, FlagIllegalShiftY); else if (pk.Format >= 8 && pk.Moves.Any(Legal.DummiedMoves_SWSH.Contains)) sprite = ImageUtil.LayerImage(sprite, Resources.hint, 0, FlagIllegalShiftY); + if (SpriteBuilder.ShowEncounterColorPKM) + { + var enc = la.EncounterOriginal; + var color = Color.FromArgb(enc.GetType().Name.GetHashCode() * 0x43FD43FD); + sprite = ImageUtil.ChangeTransparentTo(sprite, color, 0x1F); + } } if (inBox) // in box { @@ -234,12 +240,12 @@ public static Image Sprite(this IEncounterTemplate enc) return g.Sprite(); var gender = GetDisplayGender(enc); var img = GetSprite(enc.Species, enc.Form, gender, 0, 0, enc.EggEncounter, enc.IsShiny, enc.Generation); - if (SpriteBuilder.EncounterColorBackground) + if (SpriteBuilder.ShowEncounterColor) { var color = Color.FromArgb(enc.GetType().Name.GetHashCode() * 0x43FD43FD); - img = ImageUtil.ChangeTransparentTo(img, color); + img = ImageUtil.ChangeTransparentTo(img, color, 0x3F); } - if (SpriteBuilder.EncounterShowFixedBall && enc is IFixedBall {FixedBall: not Ball.None} b) + if (SpriteBuilder.ShowEncounterBall && enc is IFixedBall {FixedBall: not Ball.None} b) { var ballSprite = GetBallSprite((int)b.FixedBall); img = ImageUtil.LayerImage(img, ballSprite, 0, img.Height - ballSprite.Height); diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index e0436e75f..f19fdd3e0 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -453,6 +453,9 @@ private void ReloadProgramSettings(PKHeXSettings settings) C_SAV.FlagIllegal = settings.Display.FlagIllegal; C_SAV.M.Hover.GlowHover = settings.Hover.HoverSlotGlowEdges; SpriteBuilder.ShowEggSpriteAsItem = settings.Display.ShowEggSpriteAsHeldItem; + SpriteBuilder.ShowEncounterColor = settings.Display.ShowEncounterColor; + SpriteBuilder.ShowEncounterBall = settings.Display.ShowEncounterBall; + SpriteBuilder.ShowEncounterColorPKM = settings.Display.ShowEncounterColorPKM; ParseSettings.InitFromSettings(settings.Legality); PKME_Tabs.HideSecretValues = C_SAV.HideSecretDetails = settings.Privacy.HideSecretDetails; PKMConverter.AllowIncompatibleConversion = settings.Advanced.AllowIncompatibleConversion; diff --git a/PKHeX.WinForms/Properties/PKHeXSettings.cs b/PKHeX.WinForms/Properties/PKHeXSettings.cs index 256a83b7c..2a2aa702c 100644 --- a/PKHeX.WinForms/Properties/PKHeXSettings.cs +++ b/PKHeX.WinForms/Properties/PKHeXSettings.cs @@ -322,11 +322,20 @@ public sealed class DisplaySettings [LocalizedDescription("Show an Egg Sprite As Held Item rather than hiding the PKM")] public bool ShowEggSpriteAsHeldItem { get; set; } = true; + [LocalizedDescription("Show a background to differentiate an Encounter Template's type")] + public bool ShowEncounterColor { get; set; } = true; + + [LocalizedDescription("Show a background to differentiate the recognized Encounter Template type for PKM slots")] + public bool ShowEncounterColorPKM { get; set; } + [LocalizedDescription("Don't show the Legality popup if Legal!")] public bool IgnoreLegalPopup { get; set; } [LocalizedDescription("Flag Illegal Slots in Save File")] public bool FlagIllegal { get; set; } = true; + + [LocalizedDescription("Show the required ball for an Encounter Template")] + public bool ShowEncounterBall { get; set; } = true; } [Serializable]