pokemon/pokemon_instance.cpp
Zack Buhman abe7bde678 graphic: display nearly-complete stats page #1
Type is not displayed because the type names have no
parsers/generators yet.
2023-08-04 03:28:17 +00:00

72 lines
2.0 KiB
C++

#include "pokemon_instance.hpp"
static constexpr uint16_t _determine_stat(const uint32_t base_stat_value,
const uint32_t determinant_value,
const uint32_t stat_experience,
const uint32_t level)
{
const uint32_t x = base_stat_value + determinant_value;
const uint32_t y = sqrt_ceil<uint16_t>(stat_experience) / 4;
const uint32_t z = (x * 2 + y) * level;
return (z / 100);
}
static_assert(_determine_stat(106, 0b0100, 0, 70) == (234 - 10 - 70));
static_assert(_determine_stat(110, 0b1110, 0, 70) == (178 - 5));
static_assert(_determine_stat( 90, 0b0101, 0, 70) == (138 - 5));
static_assert(_determine_stat(130, 0b1000, 0, 70) == (198 - 5));
static_assert(_determine_stat(154, 0b0110, 0, 70) == (229 - 5));
void
pokemon_instance_t::determine_stats()
{
stat_values.hit_points = _determine_stat(pokemon[species].base_stat_values.hit_points,
determinant_values.hit_points(),
stat_experience.hit_points,
level
) + 10 + level;
stat_values.attack = _determine_stat(pokemon[species].base_stat_values.attack,
determinant_values.attack(),
stat_experience.attack,
level
) + 5;
stat_values.defense = _determine_stat(pokemon[species].base_stat_values.defense,
determinant_values.defense(),
stat_experience.defense,
level
) + 5;
stat_values.speed = _determine_stat(pokemon[species].base_stat_values.speed,
determinant_values.speed(),
stat_experience.speed,
level
) + 5;
stat_values.special = _determine_stat(pokemon[species].base_stat_values.special,
determinant_values.special(),
stat_experience.special,
level
) + 5;
}
void
pokemon_instance_t::learn_move(enum move_t::move move, int32_t index)
{
switch (index) {
case 0: [[fallthrough]];
case 1: [[fallthrough]];
case 2: [[fallthrough]];
case 3:
moves[index] = move;
break;
default:
moves[0] = moves[1];
moves[1] = moves[2];
moves[2] = moves[3];
moves[3] = move;
break;
}
}