Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Still got an error... #166

Open
StarProgamGamer opened this issue Dec 13, 2018 · 0 comments
Open

Still got an error... #166

StarProgamGamer opened this issue Dec 13, 2018 · 0 comments

Comments

@StarProgamGamer
Copy link

StarProgamGamer commented Dec 13, 2018

Originally posted by @StarProgamGamer in https://github.com/drgoku282/PKMN-NTR/issue_comments#issuecomment-447143478
The program still says something's illegal when it's not when I have the latest PKHeX and in PKHeX it says its fine. I used the latest PKHex Core to compile it but it doesnt seem like it makes a difference.
This is what my PKMUtil.cs looks like:

using System.Drawing;
using PKHeX.Core;
using pkmn_ntr.Properties;

namespace pkmn_ntr.Helpers
{
    public static class PKMUtil
    {
        public static void Initialize(SaveFile sav)
        {
            if (sav.Generation != 3)
                return;

            Game = sav.Version;
            if (Game == GameVersion.FRLG)
                Game = sav.Personal == PersonalTable.FR ? GameVersion.FR : GameVersion.LG;
        }
        private static GameVersion Game;

        private static int GetDeoxysForm()
        {
            switch (Game)
            {
                default:
                    return 0;
                case GameVersion.FR: // Attack
                    return 1;
                case GameVersion.LG: // Defense
                    return 2;
                case GameVersion.E: // Speed
                    return 3;
            }
        }

        public static Image GetBallSprite(int ball)
        {
            string str = PKX.GetResourceStringBall(ball);
            return (Image)Resources.ResourceManager.GetObject(str) ?? Resources._ball4; // Poké Ball (default)
        }
        public static Image GetSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1, bool isBoxBGRed = false)
        {
            if (species == 0)
                return Resources._0;

            if (generation == 3 && species == 386) // Deoxys, special consideration for Gen3 save files
                form = GetDeoxysForm();

            string file = PKX.GetResourceStringSprite(species, form, gender, generation);

            // Redrawing logic
            Image baseImage = (Image)Resources.ResourceManager.GetObject(file);
            if (FormConverter.IsTotemForm(species, form))
            {
                form = FormConverter.GetTotemBaseForm(species, form);
                file = PKX.GetResourceStringSprite(species, form, gender, generation);
                baseImage = (Image)Resources.ResourceManager.GetObject(file);
                baseImage = ImageUtil.ToGrayscale(baseImage);
            }
            if (baseImage == null)
            {
                baseImage = (Image)Resources.ResourceManager.GetObject($"_{species}");
                baseImage = baseImage != null ? ImageUtil.LayerImage(baseImage, Resources.unknown, 0, 0, .5) : Resources.unknown;
            }
            if (isegg)
            {
                // Partially transparent species.
                baseImage = ImageUtil.ChangeOpacity(baseImage, 0.33);
                // Add the egg layer over-top with full opacity.
                var egg = species == 490 ? (Image)Resources.ResourceManager.GetObject("_490_e") : Resources.egg;
                baseImage = ImageUtil.LayerImage(baseImage, egg, 0, 0, 1);
            }
            if (shiny)
            {
                // Add shiny star to top left of image.
                var rare = isBoxBGRed ? Resources.rare_icon_alt : Resources.rare_icon;
                baseImage = ImageUtil.LayerImage(baseImage, rare, 0, 0, 0.7);
            }
            if (item > 0)
            {
                Image itemimg = (Image)Resources.ResourceManager.GetObject($"item_{item}") ?? Resources.helditem;
                if (generation >= 2 && generation <= 4 && 328 <= item && item <= 419) // gen2/3/4 TM
                    itemimg = Resources.item_tm;

                // Redraw
                int x = 22 + (15 - itemimg.Width) / 2;
                if (x + itemimg.Width > baseImage.Width)
                    x = baseImage.Width - itemimg.Width;
                int y = 15 + (15 - itemimg.Height);
                baseImage = ImageUtil.LayerImage(baseImage, itemimg, x, y, 1);
            }
            return baseImage;
        }
        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:00}") as Image;
        }

        private static Image GetSprite(MysteryGift gift)
        {
            if (gift.Empty)
                return null;

            Image img;
            if (gift.IsEgg && gift.Species == 490) // Manaphy Egg
                img = (Image)(Resources.ResourceManager.GetObject("_490_e") ?? Resources.unknown);
            else if (gift.IsPokémon)
                img = GetSprite(gift.Species, gift.Form, gift.Gender, gift.HeldItem, gift.IsEgg, gift.IsShiny, gift.Format);
            else if (gift.IsItem)
            {
                int item = gift.ItemID;
                if (Legal.ZCrystalDictionary.TryGetValue(item, out int value))
                    item = value;
                img = (Image)(Resources.ResourceManager.GetObject("item_" + 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, bool isBoxBGRed = false)
        {
            return GetSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format, isBoxBGRed);
        }
        private static Image GetSprite(SaveFile SAV)
        {
            string file = "tr_00";
            if (SAV.Generation == 6 && (SAV.ORAS || SAV.ORASDEMO))
                file = $"tr_{SAV.MultiplayerSpriteID: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);
        //}
        private static Image GetSprite(PKM pkm, SaveFile SAV, int box, int slot, bool flagIllegal = false)
        {
            if (!pkm.Valid)
                return null;

            bool inBox = slot >= 0 && slot < 30;
            var sprite = pkm.Species != 0 ? pkm.Sprite(isBoxBGRed: inBox && BoxWallpaper.IsWallpaperRed(SAV, box)) : null;

            if (slot <= -1) // from tabs
                return sprite;

            if (flagIllegal)
            {
                if (slot < 30)
                    pkm.Box = box;
                var la = new LegalityAnalysis(pkm, SAV.Personal);
                if (la.Parsed == false && pkm.Species != 0)
                    sprite = ImageUtil.LayerImage(sprite, Resources.warn, 0, 14, 1);
            }
            //if (inBox) // in box
            //{
            //    if (SAV.IsSlotLocked(box, slot))
            //        sprite = ImageUtil.LayerImage(sprite, Resources.locked, 26, 0, 1);
            //    else if (SAV.IsSlotInBattleTeam(box, slot))
            //        sprite = ImageUtil.LayerImage(sprite, Resources.team, 21, 0, 1);
            //}

            return sprite;
        }

        // Extension Methods
        //public static Image WallpaperImage(this SaveFile SAV, int box) => GetWallpaper(SAV, box);
        public static Image Sprite(this MysteryGift gift) => GetSprite(gift);
        public static Image Sprite(this SaveFile SAV) => GetSprite(SAV);
        public static Image Sprite(this PKM pkm, bool isBoxBGRed = false) => GetSprite(pkm, isBoxBGRed);
        public static Image Sprite(this PKM pkm, SaveFile SAV, int box, int slot, bool flagIllegal = false)
            => GetSprite(pkm, SAV, box, slot, flagIllegal);
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant