Advertisement
Rapptz

IVs

Oct 18th, 2013
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.96 KB | None | 0 0
  1. void calculate_ivs() {
  2.         // Calculate HP IVs
  3.         // 100 * HP = [x + (2 * base.hp) + evs.hp / 4 + 100] * level + 1000
  4.         // (100 * HP)/level + 1000 = x + (2 * base.hp) + evs.hp /4 + 100
  5.         // (100 * HP)/level + 900 - (evs.hp / 4) - (2 * base.hp) = x
  6.         poke->ivs.hp = (100 * poke->actual.hp)/poke->level + 900 - (poke->evs.hp / 4) - (2 * poke->base.hp);
  7.        
  8.         // Update nature
  9.         switch(poke->nature.increased) {
  10.         case Attack:
  11.             poke->actual.attack = static_cast<double>(poke->actual.attack) / 1.1;
  12.             break;
  13.         case Defense:
  14.             poke->actual.defense = static_cast<double>(poke->actual.defense) / 1.1;
  15.             break;
  16.         case SpecialAttack:
  17.             poke->actual.special_attack = static_cast<double>(poke->actual.special_attack) / 1.1;
  18.             break;
  19.         case SpecialDefense:
  20.             poke->actual.special_defense = static_cast<double>(poke->actual.special_defense) / 1.1;
  21.             break;
  22.         case Speed:
  23.             poke->actual.speed = static_cast<double>(poke->actual.speed) / 1.1;
  24.             break;
  25.         case None:
  26.         default:
  27.             break;
  28.         }
  29.  
  30.         switch(poke->nature.decreased) {
  31.         case Attack:
  32.             poke->actual.attack = static_cast<double>(poke->actual.attack) / 0.9;
  33.             break;
  34.         case Defense:
  35.             poke->actual.defense = static_cast<double>(poke->actual.defense) / 0.9;
  36.             break;
  37.         case SpecialAttack:
  38.             poke->actual.special_attack = static_cast<double>(poke->actual.special_attack) / 0.9;
  39.             break;
  40.         case SpecialDefense:
  41.             poke->actual.special_defense = static_cast<double>(poke->actual.special_defense) / 0.9;
  42.             break;
  43.         case Speed:
  44.             poke->actual.speed = static_cast<double>(poke->actual.speed) / 0.9;
  45.             break;
  46.         case None:
  47.         default:
  48.             break;
  49.         }
  50.  
  51.         // Calculate other stats
  52.         // stat = (([x + (2 * base) + (ev/4)] * level)/100 + 5) * nature
  53.         // 100 * (stat / nature) - 500 = [x + (2 * base) + (ev/4)] * level
  54.         // (100 * (stat / nature) - 500)/level = x + (2 * base) + (ev/4)
  55.         // x = (100 * (stat / nature) - 500)/level - (2 * base) - (ev/4)
  56.  
  57.         poke->ivs.attack = (100 * poke->actual.attack - 500)/poke->level - (2 * poke->base.attack) - (poke->evs.attack / 4);
  58.         poke->ivs.defense = (100 * poke->actual.defense - 500)/poke->level - (2 * poke->base.defense) - (poke->evs.defense / 4);
  59.         poke->ivs.special_attack = (100 * poke->actual.special_attack - 500)/poke->level - (2 * poke->base.special_attack) - (poke->evs.special_attack / 4);
  60.         poke->ivs.special_defense = (100 * poke->actual.special_defense - 500)/poke->level - (2 * poke->base.special_defense) - (poke->evs.special_defense / 4);
  61.         poke->ivs.speed = (100 * poke->actual.speed - 500)/poke->level - (2 * poke->base.speed) - (poke->evs.speed / 4);
  62.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement