#include "player-ability/player-dexterity.h"
#include "mutation/mutation-flag-types.h"
#include "object/object-flags.h"
-#include "player/mimic-info-table.h"
-#include "player/player-class.h"
+#include "player-base/player-class.h"
+#include "player-base/player-race.h"
+#include "player-info/class-info.h"
+#include "player-info/monk-data-type.h"
+#include "player-info/samurai-data-type.h"
#include "player/player-personality.h"
#include "player/race-info-table.h"
#include "player/special-defense-types.h"
#include "system/player-type-definition.h"
#include "util/bit-flags-calculator.h"
+PlayerDexterity::PlayerDexterity(player_type* player_ptr)
+ : PlayerBasicStatistics(player_ptr)
+{
+}
+
void PlayerDexterity::set_locals()
{
this->max_value = +99;
/*!
* @brief 器用さ補正計算 - 種族
* @return 器用さ補正値
- * @details
- * * 種族による器用さ修正値。
- * * エントは別途レベル26,41,46到達ごとに減算(-1)
*/
-s16b PlayerDexterity::race_value()
+int16_t PlayerDexterity::race_value()
{
- s16b result = PlayerBasicStatistics::race_value();
-
- if (is_specific_player_race(this->owner_ptr, player_race_type::ENT)) {
- if (this->owner_ptr->lev > 25)
- result--;
- if (this->owner_ptr->lev > 40)
- result--;
- if (this->owner_ptr->lev > 45)
- result--;
- }
+ int16_t result = PlayerBasicStatistics::race_value();
+
+ result += PlayerRace(this->player_ptr).additional_dexterity();
return result;
}
* * 一時効果による器用さ修正値
* * 呪術の肉体強化で加算(+4)
*/
-s16b PlayerDexterity::time_effect_value()
+int16_t PlayerDexterity::time_effect_value()
{
- s16b result = 0;
+ int16_t result = 0;
- if (this->owner_ptr->realm1 == REALM_HEX) {
- if (hex_spelling(this->owner_ptr, HEX_BUILDING)) {
+ if (this->player_ptr->realm1 == REALM_HEX) {
+ if (SpellHex(this->player_ptr).is_spelling_specific(HEX_BUILDING)) {
result += 4;
}
}
* * 玄武の構えで減算(-2)
* * 朱雀の構えで加算(+2)
*/
-s16b PlayerDexterity::battleform_value()
+int16_t PlayerDexterity::stance_value()
{
- s16b result = 0;
+ int16_t result = 0;
- if (any_bits(this->owner_ptr->special_defense, KATA_KOUKIJIN)) {
+ PlayerClass pc(player_ptr);
+ if (pc.samurai_stance_is(SamuraiStance::KOUKIJIN)) {
result += 5;
}
- if (any_bits(this->owner_ptr->special_defense, KAMAE_BYAKKO)) {
+ if (pc.monk_stance_is(MonkStance::BYAKKO)) {
result += 2;
- } else if (any_bits(this->owner_ptr->special_defense, KAMAE_GENBU)) {
+ } else if (pc.monk_stance_is(MonkStance::GENBU)) {
result -= 2;
- } else if (any_bits(this->owner_ptr->special_defense, KAMAE_SUZAKU)) {
+ } else if (pc.monk_stance_is(MonkStance::SUZAKU)) {
result += 2;
}
* * 変異MUT3_LIMBERで加算(+3)
* * 変異MUT3_ARTHRITISで減算(-3)
*/
-s16b PlayerDexterity::mutation_value()
+int16_t PlayerDexterity::mutation_value()
{
- s16b result = 0;
+ int16_t result = 0;
- if (this->owner_ptr->muta.has(MUTA::IRON_SKIN)) {
+ if (this->player_ptr->muta.has(PlayerMutationType::IRON_SKIN)) {
result -= 1;
}
- if (this->owner_ptr->muta.has(MUTA::LIMBER)) {
+ if (this->player_ptr->muta.has(PlayerMutationType::LIMBER)) {
result += 3;
}
- if (this->owner_ptr->muta.has(MUTA::ARTHRITIS)) {
+ if (this->player_ptr->muta.has(PlayerMutationType::ARTHRITIS)) {
result -= 3;
}