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(); } }
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(); }
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>(); }
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);