public static unsafe void EXP_SingleLine(uint *bmpAddress, int bmpWidth, int bmpHeight, int x, int y, int width, uint exp, byte level, PBESpecies species, PBEForm form)
        {
            if (level >= PkmnConstants.MaxLevel)
            {
                EXP_SingleLine(bmpAddress, bmpWidth, bmpHeight, x, y, width, 0);
                return;
            }
            PBEGrowthRate gr = BaseStats.Get(species, form, true).GrowthRate;

            EXP_SingleLine(bmpAddress, bmpWidth, bmpHeight, x, y, width, exp, level, gr);
        }
        public void Debug_LevelUpManually(int numTimes)
        {
            var           bs         = BaseStats.Get(Pkmn.Species, Pkmn.Form, true);
            PBEGrowthRate growthRate = bs.GrowthRate;

            for (int i = 0; i < numTimes; i++)
            {
                uint nextLevelAmt = PBEDataProvider.Instance.GetEXPRequired(growthRate, (byte)(Pkmn.Level + 1));
                Pkmn.EXP = nextLevelAmt;
                Pkmn.Level++;
                LevelsGained++;
                TeachNewMoves();
            }
        }
Example #3
0
        public static void ValidateEXP(PBEGrowthRate type, uint value, byte level)
        {
            uint requiredForLevel = PBEDataProvider.Instance.GetEXPRequired(type, level);

            if (value < requiredForLevel)
            {
                throw new ArgumentOutOfRangeException(nameof(value));
            }
            if (level < 100)
            {
                uint requiredForNextLevel = PBEDataProvider.Instance.GetEXPRequired(type, (byte)(level + 1));
                if (value >= requiredForNextLevel)
                {
                    throw new ArgumentOutOfRangeException(nameof(value));
                }
            }
        }
        public void IncrementStep()
        {
            if (Pkmn.Level >= PkmnConstants.MaxLevel)
            {
                return; // Cannot level up anymore
            }

            var           bs           = BaseStats.Get(Pkmn.Species, Pkmn.Form, true);
            PBEGrowthRate growthRate   = bs.GrowthRate;
            uint          nextLevelAmt = PBEDataProvider.Instance.GetEXPRequired(growthRate, (byte)(Pkmn.Level + 1));

            if (++Pkmn.EXP < nextLevelAmt)
            {
                return; // No level up
            }
            Pkmn.Level++;
            LevelsGained++;
            TeachNewMoves();
        }
Example #5
0
 public BaseStats(JToken j)
 {
     HP             = j[nameof(HP)].Value <byte>();
     Attack         = j[nameof(Attack)].Value <byte>();
     Defense        = j[nameof(Defense)].Value <byte>();
     SpAttack       = j[nameof(SpAttack)].Value <byte>();
     SpDefense      = j[nameof(SpDefense)].Value <byte>();
     Speed          = j[nameof(Speed)].Value <byte>();
     Type1          = j[nameof(Type1)].ReadEnumValue <PBEType>();
     Type2          = j[nameof(Type2)].ReadEnumValue <PBEType>();
     CatchRate      = j[nameof(CatchRate)].Value <byte>();
     BaseFriendship = j[nameof(BaseFriendship)].Value <byte>();
     EggCycles      = j[nameof(EggCycles)].Value <byte>();
     GenderRatio    = j[nameof(GenderRatio)].ReadEnumValue <PBEGenderRatio>();
     GrowthRate     = j[nameof(GrowthRate)].ReadEnumValue <PBEGrowthRate>();
     BaseEXPYield   = j[nameof(BaseEXPYield)].Value <ushort>();
     EggGroup1      = j[nameof(EggGroup1)].ReadEnumValue <EggGroup>();
     EggGroup2      = j[nameof(EggGroup2)].ReadEnumValue <EggGroup>();
     Ability1       = j[nameof(Ability1)].ReadEnumValue <PBEAbility>();
     Ability2       = j[nameof(Ability2)].ReadEnumValue <PBEAbility>();
     AbilityH       = j[nameof(AbilityH)].ReadEnumValue <PBEAbility>();
     FleeRate       = j[nameof(FleeRate)].Value <byte>();
     Weight         = j[nameof(Weight)].Value <double>();
 }
Example #6
0
        private unsafe void DrawInfoPage(uint *bmpAddress, int bmpWidth, int bmpHeight)
        {
            const float winX            = 0.03f;
            const float winY            = 0.15f;
            const float winW            = 0.97f - winX;
            const float winH            = 0.85f - winY;
            const float leftColX        = winX + 0.02f;
            const float rightColX       = winX + 0.52f;
            const float rightColY       = winY + 0.03f;
            const float rightColW       = 0.95f - rightColX;
            const float rightColH       = 0.82f - rightColY;
            const float rightColCenterX = rightColX + (rightColW / 2f);
            const float textStartY      = rightColY + 0.02f;
            const float textSpacingY    = 0.1f;
            int         xpW             = (int)(bmpWidth * 0.3f);
            int         xpX             = RenderUtils.GetCoordinatesForCentering(bmpWidth, xpW, rightColCenterX);
            int         xpY             = (int)(bmpHeight * (rightColY + 0.61f));

            RenderUtils.FillRoundedRectangle(bmpAddress, bmpWidth, bmpHeight, winX, winY, winX + winW, winY + winH, 15, RenderUtils.Color(128, 215, 135, 255));
            RenderUtils.FillRoundedRectangle(bmpAddress, bmpWidth, bmpHeight, rightColX, rightColY, rightColX + rightColW, rightColY + rightColH, 8, RenderUtils.Color(210, 210, 210, 255));

            Font leftColFont = Font.Default;

            uint[] leftColColors = Font.DefaultWhite_DarkerOutline_I;
            Font   rightColFont  = Font.Default;

            uint[] rightColColors = Font.DefaultBlack_I;

            void PlaceLeftCol(int i, string leftColStr)
            {
                float y = textStartY + (i * textSpacingY);

                leftColFont.DrawString(bmpAddress, bmpWidth, bmpHeight, leftColX, y, leftColStr, leftColColors);
            }

            void PlaceRightCol(int i, string rightColStr, uint[] colors)
            {
                float y = textStartY + (i * textSpacingY);

                rightColFont.MeasureString(rightColStr, out int strW, out _);
                rightColFont.DrawString(bmpAddress, bmpWidth, bmpHeight,
                                        RenderUtils.GetCoordinatesForCentering(bmpWidth, strW, rightColCenterX), (int)(bmpHeight * y), rightColStr, colors);
            }

            PlaceLeftCol(0, "Species");
            PlaceLeftCol(1, "Type(s)");
            PlaceLeftCol(2, "OT");
            PlaceLeftCol(3, "OT ID");
            PlaceLeftCol(4, "Exp. Points");
            PlaceLeftCol(5, "Exp. To Next Level");

            PBESpecies species;
            PBEForm    form;
            OTInfo     ot;
            byte       level;
            uint       exp;

            if (_pPkmn is not null)
            {
                species = _pPkmn.Species;
                form    = _pPkmn.Form;
                ot      = _pPkmn.OT;
                level   = _pPkmn.Level;
                exp     = _pPkmn.EXP;
            }
            else if (_pcPkmn is not null)
            {
                species = _pcPkmn.Species;
                form    = _pcPkmn.Form;
                ot      = _pcPkmn.OT;
                level   = _pcPkmn.Level;
                exp     = _pcPkmn.EXP;
            }
            else
            {
                PartyPokemon     pPkmn = _bPkmn.PartyPkmn;
                PBEBattlePokemon bPkmn = _bPkmn.Pkmn;
                species = pPkmn.Species;
                form    = bPkmn.RevertForm;
                ot      = pPkmn.OT;
                level   = bPkmn.Level;
                exp     = bPkmn.EXP;
            }

            var  bs = BaseStats.Get(species, form, true);
            uint toNextLvl;

            if (level >= PkmnConstants.MaxLevel)
            {
                toNextLvl = 0;
                RenderUtils.EXP_SingleLine(bmpAddress, bmpWidth, bmpHeight, xpX, xpY, xpW, 0);
            }
            else
            {
                PBEGrowthRate gr = bs.GrowthRate;
                toNextLvl = PBEEXPTables.GetEXPRequired(gr, (byte)(level + 1)) - exp;
                RenderUtils.EXP_SingleLine(bmpAddress, bmpWidth, bmpHeight, xpX, xpY, xpW, exp, level, gr);
            }

            // Species
            string str = PBELocalizedString.GetSpeciesName(species).English;

            PlaceRightCol(0, str, rightColColors);
            // Types
            str = PBELocalizedString.GetTypeName(bs.Type1).English;
            if (bs.Type2 != PBEType.None)
            {
                str += ' ' + PBELocalizedString.GetTypeName(bs.Type2).English;
            }
            PlaceRightCol(1, str, rightColColors);
            // OT
            str = ot.TrainerName;
            PlaceRightCol(2, str, ot.TrainerIsFemale ? Font.DefaultRed_I : Font.DefaultBlue_I);
            // OT ID
            str = ot.TrainerID.ToString();
            PlaceRightCol(3, str, rightColColors);
            // Exp
            str = exp.ToString();
            PlaceRightCol(4, str, rightColColors);
            // To next level
            str = toNextLvl.ToString();
            PlaceRightCol(5, str, rightColColors);
        }
        public static unsafe void EXP_SingleLine(uint *bmpAddress, int bmpWidth, int bmpHeight, int x, int y, int width, uint exp, byte level, PBEGrowthRate gr)
        {
            double percent;

            if (level >= PkmnConstants.MaxLevel)
            {
                percent = 0;
            }
            else
            {
                uint expPrev = PBEEXPTables.GetEXPRequired(gr, level);
                uint expNext = PBEEXPTables.GetEXPRequired(gr, (byte)(level + 1));
                uint expCur  = exp;
                percent = (double)(expCur - expPrev) / (expNext - expPrev);
            }
            EXP_SingleLine(bmpAddress, bmpWidth, bmpHeight, x, y, width, percent);
        }
 public abstract byte GetEXPLevel(PBEGrowthRate type, uint exp);
 public abstract uint GetEXPRequired(PBEGrowthRate type, byte level);