Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void calculate_ivs() {
- // Calculate HP IVs
- // 100 * HP = [x + (2 * base.hp) + evs.hp / 4 + 100] * level + 1000
- // (100 * HP)/level + 1000 = x + (2 * base.hp) + evs.hp /4 + 100
- // (100 * HP)/level + 900 - (evs.hp / 4) - (2 * base.hp) = x
- poke->ivs.hp = (100 * poke->actual.hp)/poke->level + 900 - (poke->evs.hp / 4) - (2 * poke->base.hp);
- // Update nature
- switch(poke->nature.increased) {
- case Attack:
- poke->actual.attack = static_cast<double>(poke->actual.attack) / 1.1;
- break;
- case Defense:
- poke->actual.defense = static_cast<double>(poke->actual.defense) / 1.1;
- break;
- case SpecialAttack:
- poke->actual.special_attack = static_cast<double>(poke->actual.special_attack) / 1.1;
- break;
- case SpecialDefense:
- poke->actual.special_defense = static_cast<double>(poke->actual.special_defense) / 1.1;
- break;
- case Speed:
- poke->actual.speed = static_cast<double>(poke->actual.speed) / 1.1;
- break;
- case None:
- default:
- break;
- }
- switch(poke->nature.decreased) {
- case Attack:
- poke->actual.attack = static_cast<double>(poke->actual.attack) / 0.9;
- break;
- case Defense:
- poke->actual.defense = static_cast<double>(poke->actual.defense) / 0.9;
- break;
- case SpecialAttack:
- poke->actual.special_attack = static_cast<double>(poke->actual.special_attack) / 0.9;
- break;
- case SpecialDefense:
- poke->actual.special_defense = static_cast<double>(poke->actual.special_defense) / 0.9;
- break;
- case Speed:
- poke->actual.speed = static_cast<double>(poke->actual.speed) / 0.9;
- break;
- case None:
- default:
- break;
- }
- // Calculate other stats
- // stat = (([x + (2 * base) + (ev/4)] * level)/100 + 5) * nature
- // 100 * (stat / nature) - 500 = [x + (2 * base) + (ev/4)] * level
- // (100 * (stat / nature) - 500)/level = x + (2 * base) + (ev/4)
- // x = (100 * (stat / nature) - 500)/level - (2 * base) - (ev/4)
- poke->ivs.attack = (100 * poke->actual.attack - 500)/poke->level - (2 * poke->base.attack) - (poke->evs.attack / 4);
- poke->ivs.defense = (100 * poke->actual.defense - 500)/poke->level - (2 * poke->base.defense) - (poke->evs.defense / 4);
- poke->ivs.special_attack = (100 * poke->actual.special_attack - 500)/poke->level - (2 * poke->base.special_attack) - (poke->evs.special_attack / 4);
- poke->ivs.special_defense = (100 * poke->actual.special_defense - 500)/poke->level - (2 * poke->base.special_defense) - (poke->evs.special_defense / 4);
- poke->ivs.speed = (100 * poke->actual.speed - 500)/poke->level - (2 * poke->base.speed) - (poke->evs.speed / 4);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement