/*!
* @brief 耐久力補正計算 - 種族
* @return 耐久力補正値
- * @details
- * * 種族による耐久力修正値。
- * * エントは別途レベル26,41,46到達ごとに加算(+1)
*/
int16_t PlayerConstitution::race_value()
{
int16_t result = PlayerBasicStatistics::race_value();
- if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
- if (this->player_ptr->lev > 25)
- result++;
- if (this->player_ptr->lev > 40)
- result++;
- if (this->player_ptr->lev > 45)
- result++;
- }
+ result += PlayerRace(this->player_ptr).additional_constitution();
return result;
}
/*!
* @brief 器用さ補正計算 - 種族
* @return 器用さ補正値
- * @details
- * * 種族による器用さ修正値。
- * * エントは別途レベル26,41,46到達ごとに減算(-1)
*/
int16_t PlayerDexterity::race_value()
{
int16_t result = PlayerBasicStatistics::race_value();
- if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
- if (this->player_ptr->lev > 25)
- result--;
- if (this->player_ptr->lev > 40)
- result--;
- if (this->player_ptr->lev > 45)
- result--;
- }
+ result += PlayerRace(this->player_ptr).additional_dexterity();
return result;
}
/*!
* @brief 腕力補正計算 - 種族
* @return 腕力補正値
- * @details
- * * 種族による腕力修正値。
- * * エントは別途レベル26,41,46到達ごとに加算(+1)
*/
int16_t PlayerStrength::race_value()
{
int16_t result = PlayerBasicStatistics::race_value();
- if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
- if (this->player_ptr->lev > 25)
- result++;
- if (this->player_ptr->lev > 40)
- result++;
- if (this->player_ptr->lev > 45)
- result++;
- }
+ result += PlayerRace(this->player_ptr).additional_strength();
return result;
}
* @details 本クラス作成時点で責務に対する余裕はかなりあるので、適宜ここへ移してくること.
*/
#include "player-base/player-race.h"
+#include "grid/feature-flag-types.h"
+#include "grid/feature.h"
#include "player-info/mimic-info-table.h"
#include "player/race-info-table.h"
+#include "system/floor-type-definition.h"
+#include "system/grid-type-definition.h"
#include "system/player-type-definition.h"
#include "util/bit-flags-calculator.h"
{
return (this->player_ptr->mimic_form == MIMIC_NONE) && (this->player_ptr->prace == prace);
}
+
+/*!
+ * @brief 速度計算 - 種族
+ * @return 速度値の増減分
+ * @details
+ * ** クラッコンと妖精に加算(+レベル/10)
+ * ** 悪魔変化/吸血鬼変化で加算(+3)
+ * ** 魔王変化で加算(+5)
+ * ** マーフォークがFF_WATER地形にいれば加算(+2+レベル/10)
+ * ** そうでなく浮遊を持っていないなら減算(-2)
+ */
+int16_t PlayerRace::speed() const
+{
+ int16_t result = 0;
+
+ if (PlayerRace(this->player_ptr).equals(PlayerRaceType::KLACKON) || PlayerRace(this->player_ptr).equals(PlayerRaceType::SPRITE))
+ result += (this->player_ptr->lev) / 10;
+
+ if (PlayerRace(this->player_ptr).equals(PlayerRaceType::MERFOLK)) {
+ floor_type *floor_ptr = this->player_ptr->current_floor_ptr;
+ feature_type *f_ptr = &f_info[floor_ptr->grid_array[this->player_ptr->y][this->player_ptr->x].feat];
+ if (f_ptr->flags.has(FF::WATER)) {
+ result += (2 + this->player_ptr->lev / 10);
+ } else if (!this->player_ptr->levitation) {
+ result -= 2;
+ }
+ }
+
+ if (this->player_ptr->mimic_form) {
+ switch (this->player_ptr->mimic_form) {
+ case MIMIC_DEMON:
+ result += 3;
+ break;
+ case MIMIC_DEMON_LORD:
+ result += 5;
+ break;
+ case MIMIC_VAMPIRE:
+ result += 3;
+ break;
+ }
+ }
+ return result;
+}
+
+/*!
+ * @brief 腕力補正計算 - 種族
+ * @return 腕力補正値
+ * @details
+ * * 種族による腕力修正値。
+ * * エントはレベル26,41,46到達ごとに加算(+1)
+ */
+int16_t PlayerRace::additional_strength() const
+{
+ int16_t result = 0;
+
+ if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
+ if (this->player_ptr->lev > 25)
+ result++;
+ if (this->player_ptr->lev > 40)
+ result++;
+ if (this->player_ptr->lev > 45)
+ result++;
+ }
+
+ return result;
+}
+
+/*!
+ * @brief 器用さ補正計算 - 種族
+ * @return 器用さ補正値
+ * @details
+ * * 種族による器用さ修正値。
+ * * エントはレベル26,41,46到達ごとに減算(-1)
+ */
+int16_t PlayerRace::additional_dexterity() const
+{
+ int16_t result = 0;
+
+ if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
+ if (this->player_ptr->lev > 25)
+ result--;
+ if (this->player_ptr->lev > 40)
+ result--;
+ if (this->player_ptr->lev > 45)
+ result--;
+ }
+
+ return result;
+}
+
+/*!
+ * @brief 耐久力補正計算 - 種族
+ * @return 耐久力補正値
+ * @details
+ * * 種族による耐久力修正値。
+ * * エントはレベル26,41,46到達ごとに加算(+1)
+ */
+int16_t PlayerRace::additional_constitution() const
+{
+ int16_t result = 0;
+
+ if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
+ if (this->player_ptr->lev > 25)
+ result++;
+ if (this->player_ptr->lev > 40)
+ result++;
+ if (this->player_ptr->lev > 45)
+ result++;
+ }
+
+ return result;
+}
/*!
* @brief 速度計算 - 種族
* @return 速度値の増減分
- * @details
- * ** クラッコンと妖精に加算(+レベル/10)
- * ** 悪魔変化/吸血鬼変化で加算(+3)
- * ** 魔王変化で加算(+5)
- * ** マーフォークがFF_WATER地形にいれば加算(+2+レベル/10)
- * ** そうでなく浮遊を持っていないなら減算(-2)
*/
int16_t PlayerSpeed::race_value()
{
- int16_t result = 0;
-
- if (PlayerRace(this->player_ptr).equals(PlayerRaceType::KLACKON) || PlayerRace(this->player_ptr).equals(PlayerRaceType::SPRITE))
- result += (this->player_ptr->lev) / 10;
-
- if (PlayerRace(this->player_ptr).equals(PlayerRaceType::MERFOLK)) {
- floor_type *floor_ptr = this->player_ptr->current_floor_ptr;
- feature_type *f_ptr = &f_info[floor_ptr->grid_array[this->player_ptr->y][this->player_ptr->x].feat];
- if (f_ptr->flags.has(FF::WATER)) {
- result += (2 + this->player_ptr->lev / 10);
- } else if (!this->player_ptr->levitation) {
- result -= 2;
- }
- }
-
- if (this->player_ptr->mimic_form) {
- switch (this->player_ptr->mimic_form) {
- case MIMIC_DEMON:
- result += 3;
- break;
- case MIMIC_DEMON_LORD:
- result += 5;
- break;
- case MIMIC_VAMPIRE:
- result += 3;
- break;
- }
- }
- return result;
+ return PlayerRace(this->player_ptr).speed();
}
/*!