mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-07-24 21:10:11 -05:00
Change background coloring to bottom-stripe
This commit is contained in:
parent
e3fecdf1d5
commit
2a9f3585e5
|
|
@ -50,13 +50,13 @@ public static Bitmap ChangeAllColorTo(Image img, Color c)
|
|||
return bmp;
|
||||
}
|
||||
|
||||
public static Bitmap ChangeTransparentTo(Image img, Color c, byte trans)
|
||||
public static Bitmap ChangeTransparentTo(Image img, Color c, byte trans, int start = 0)
|
||||
{
|
||||
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, trans);
|
||||
SetAllTransparencyTo(data, c, trans, start);
|
||||
Marshal.Copy(data, 0, ptr, data.Length);
|
||||
bmp.UnlockBits(bmpData);
|
||||
|
||||
|
|
@ -130,12 +130,12 @@ private static void SetAllTransparencyTo(byte[] data, double trans)
|
|||
data[i + 3] = (byte)(data[i + 3] * trans);
|
||||
}
|
||||
|
||||
public static void SetAllTransparencyTo(byte[] data, Color c, byte trans)
|
||||
public static void SetAllTransparencyTo(byte[] data, Color c, byte trans, int start)
|
||||
{
|
||||
byte R = c.R;
|
||||
byte G = c.G;
|
||||
byte B = c.B;
|
||||
for (int i = 0; i < data.Length; i += 4)
|
||||
for (int i = start; i < data.Length; i += 4)
|
||||
{
|
||||
if (data[i + 3] != 0)
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -69,10 +69,7 @@ private static Image GetSprite(MysteryGift gift)
|
|||
|
||||
var img = GetBaseImage(gift);
|
||||
if (SpriteBuilder.ShowEncounterColor)
|
||||
{
|
||||
var color = Color.FromArgb(gift.GetType().Name.GetHashCode() * 0x43FD43FD);
|
||||
img = ImageUtil.ChangeTransparentTo(img, color, 0x3F);
|
||||
}
|
||||
img = ApplyStripe(gift, img);
|
||||
if (gift.GiftUsed)
|
||||
img = ImageUtil.ChangeOpacity(img, 0.3);
|
||||
return img;
|
||||
|
|
@ -163,11 +160,7 @@ private static Image GetSprite(PKM pk, SaveFile sav, int box, int slot, bool fla
|
|||
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);
|
||||
}
|
||||
sprite = ApplyStripe(la.EncounterOriginal, sprite);
|
||||
}
|
||||
if (inBox) // in box
|
||||
{
|
||||
|
|
@ -187,6 +180,14 @@ private static Image GetSprite(PKM pk, SaveFile sav, int box, int slot, bool fla
|
|||
return sprite;
|
||||
}
|
||||
|
||||
private static Image ApplyStripe(IEncounterTemplate enc, Image img)
|
||||
{
|
||||
var index = (enc.GetType().Name.GetHashCode() * 0x43FD43FD);
|
||||
var color = Color.FromArgb(index);
|
||||
const int stripeHeight = 4; // from bottom
|
||||
return ImageUtil.ChangeTransparentTo(img, color, 0x7F, img.Width * 4 * (img.Height - stripeHeight));
|
||||
}
|
||||
|
||||
private const int MaxSlotCount = 30; // slots in a box
|
||||
private static int SpriteWidth => Spriter.Width;
|
||||
private static int SpriteHeight => Spriter.Height;
|
||||
|
|
@ -240,11 +241,6 @@ 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.ShowEncounterColor)
|
||||
{
|
||||
var color = Color.FromArgb(enc.GetType().Name.GetHashCode() * 0x43FD43FD);
|
||||
img = ImageUtil.ChangeTransparentTo(img, color, 0x3F);
|
||||
}
|
||||
if (SpriteBuilder.ShowEncounterBall && enc is IFixedBall {FixedBall: not Ball.None} b)
|
||||
{
|
||||
var ballSprite = GetBallSprite((int)b.FixedBall);
|
||||
|
|
@ -253,8 +249,10 @@ public static Image Sprite(this IEncounterTemplate enc)
|
|||
if (enc is IGigantamax {CanGigantamax: true})
|
||||
{
|
||||
var gm = Resources.dyna;
|
||||
return ImageUtil.LayerImage(img, gm, (img.Width - gm.Width) / 2, 0);
|
||||
img = ImageUtil.LayerImage(img, gm, (img.Width - gm.Width) / 2, 0);
|
||||
}
|
||||
if (SpriteBuilder.ShowEncounterColor)
|
||||
img = ApplyStripe(enc, img);
|
||||
return img;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user