<ClCompile Include="..\..\src\player-status\player-speed.cpp" />\r
<ClCompile Include="..\..\src\player-status\player-status-base.cpp" />\r
<ClCompile Include="..\..\src\player-status\player-stealth.cpp" />\r
+ <ClCompile Include="..\..\src\player-status\player-infravision.cpp" />\r
<ClCompile Include="..\..\src\player-status\player-basic-statistics.cpp" />\r
<ClCompile Include="..\..\src\player-status\player-strength.cpp" />\r
<ClCompile Include="..\..\src\player-status\player-intelligence.cpp" />\r
<ClInclude Include="..\..\src\player-status\player-speed.h" />\r
<ClInclude Include="..\..\src\player-status\player-status-base.h" />\r
<ClInclude Include="..\..\src\player-status\player-stealth.h" />\r
+ <ClInclude Include="..\..\src\player-status\player-infravision.h" />\r
<ClInclude Include="..\..\src\player-status\player-basic-statistics.h" />\r
<ClInclude Include="..\..\src\player-status\player-strength.h" />\r
<ClInclude Include="..\..\src\player-status\player-intelligence.h" />\r
<ClCompile Include="..\..\src\player-status\player-strength.cpp">\r
<Filter>player-status</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\src\player-status\player-infravision.cpp">\r
+ <Filter>player-status</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\..\src\player-status\player-intelligence.cpp">\r
<Filter>player-status</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\src\player-status\player-stealth.h">\r
<Filter>player-status</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\src\player-status\player-infravision.h">\r
+ <Filter>player-status</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\..\src\player-status\player-basic-statistics.h">\r
<Filter>player-status</Filter>\r
</ClInclude>\r
player-status/player-status-base.h \
player-status/player-speed.h \
player-status/player-stealth.h \
+ player-status/player-infravision.h \
player-status/player-basic-statistics.h \
player-status/player-strength.h \
player-status/player-intelligence.h \
player-status/player-status-base.cpp \
player-status/player-speed.cpp \
player-status/player-stealth.cpp \
+ player-status/player-infravision.cpp \
player-status/player-basic-statistics.cpp \
player-status/player-strength.cpp \
player-status/player-intelligence.cpp \
--- /dev/null
+#include "player-status/player-infravision.h"
+#include "mutation/mutation-flag-types.h"
+#include "player/mimic-info-table.h"
+#include "player/player-race-types.h"
+#include "player/race-info-table.h"
+#include "system/player-type-definition.h"
+/*
+ * @brief 赤外線視力 - 初期値、下限、上限
+ */
+void PlayerInfravision::set_locals()
+{
+ this->default_value = 0;
+ this->min_value = 0;
+ this->max_value = 20;
+ this->tr_flag = TR_INFRA;
+ this->tr_bad_flag = TR_INFRA;
+}
+
+/*!
+ * @brief 赤外線視力計算 - 種族
+ * @return 赤外線視力の増分
+ * @details
+ * * 種族による加算
+ */
+s16b PlayerInfravision::race_value()
+{
+ const player_race *tmp_rp_ptr;
+
+ if (this->owner_ptr->mimic_form)
+ tmp_rp_ptr = &mimic_info[this->owner_ptr->mimic_form];
+ else
+ tmp_rp_ptr = &race_info[this->owner_ptr->prace];
+
+ return tmp_rp_ptr->infra;
+}
+
+/*!
+ * @brief 赤外線視力計算 - 変異
+ * @return 赤外線視力の増分
+ * @details
+ * * 変異MUT3_INFRAVISによる加算(+3)
+ */
+s16b PlayerInfravision::mutation_value()
+{
+ s16b result = 0;
+ if (this->owner_ptr->muta.has(MUTA::INFRAVIS)) {
+ result += 3;
+ }
+
+ return result;
+}
+
+/*!
+ * @brief 赤外線視力計算 - 一時効果
+ * @return 赤外線視力の増分
+ * @details
+ * * 魔法効果tim_infraによる加算(+3)
+ */
+s16b PlayerInfravision::time_effect_value()
+{
+ s16b result = 0;
+ if (this->owner_ptr->tim_infra) {
+ result += 3;
+ }
+
+ return result;
+}
--- /dev/null
+#pragma once
+#include "player-status/player-status-base.h"
+
+class PlayerInfravision : public PlayerStatusBase {
+public:
+ using PlayerStatusBase::PlayerStatusBase;
+ PlayerInfravision() = delete;
+
+protected:
+ void set_locals() override;
+ s16b race_value() override;
+ s16b time_effect_value() override;
+ s16b mutation_value() override;
+};
#include "object-hook/hook-weapon.h"
#include "object/object-flags.h"
#include "player-status/player-basic-statistics.h"
+#include "player-status/player-infravision.h"
#include "player-status/player-speed.h"
#include "player-status/player-stealth.h"
#include "player/attack-defense-types.h"
case TR_SEARCH:
return 0;
case TR_INFRA:
- return has_infra_vision(creature_ptr);
+ return PlayerInfravision(creature_ptr).get_all_flags();
case TR_TUNNEL:
return 0;
case TR_SPEED:
return has_resist_time(creature_ptr);
case TR_RES_WATER:
return has_resist_water(creature_ptr);
- case TR_RES_CURSE :
+ case TR_RES_CURSE:
return has_resist_curse(creature_ptr);
case TR_SH_FIRE:
}
/*!
- * @brief クリーチャーが赤外線視力修正を持っているかを返す。
- * @param creature_ptr 判定対象のクリーチャー参照ポインタ
- * @return 持っていたら所持前提ビットフラグを返す。
- * @details 種族修正は0より大きければTRUEとする。
- */
-BIT_FLAGS has_infra_vision(player_type *creature_ptr)
-{
- BIT_FLAGS result = 0L;
- const player_race *tmp_rp_ptr;
-
- if (creature_ptr->mimic_form)
- tmp_rp_ptr = &mimic_info[creature_ptr->mimic_form];
- else
- tmp_rp_ptr = &race_info[creature_ptr->prace];
-
- if (tmp_rp_ptr->infra > 0)
- result |= FLAG_CAUSE_RACE;
-
- if (creature_ptr->muta.has(MUTA::INFRAVIS))
- result |= FLAG_CAUSE_MUTATION;
-
- if (creature_ptr->tim_infra)
- result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
-
- result |= check_equipment_flags(creature_ptr, TR_INFRA);
- return result;
-}
-
-/*!
* @brief クリーチャーが邪悪感知を持っているかを返す。
* @param creature_ptr 判定対象のクリーチャー参照ポインタ
* @return 持っていたら所持前提ビットフラグを返す。
BIT_FLAGS result = 0L;
if (player_race_has_flag(creature_ptr, TR_RES_DARK))
- result |= FLAG_CAUSE_RACE;
+ result |= FLAG_CAUSE_RACE;
if (creature_ptr->special_defense & KATA_MUSOU) {
result |= FLAG_CAUSE_BATTLE_FORM;
#include "pet/pet-util.h"
#include "player-info/avatar.h"
#include "player-status/player-basic-statistics.h"
+#include "player-status/player-infravision.h"
#include "player-status/player-speed.h"
#include "player-status/player-stealth.h"
#include "player/attack-defense-types.h"
#include "sv-definition/sv-lite-types.h"
#include "sv-definition/sv-weapon-types.h"
#include "system/floor-type-definition.h"
-#include "system/object-type-definition.h"
#include "system/monster-race-definition.h"
#include "system/monster-type-definition.h"
+#include "system/object-type-definition.h"
#include "system/player-type-definition.h"
#include "term/screen-processor.h"
#include "util/bit-flags-calculator.h"
static bool is_martial_arts_mode(player_type *creature_ptr);
-static ACTION_SKILL_POWER calc_intra_vision(player_type *creature_ptr);
static ACTION_SKILL_POWER calc_disarming(player_type *creature_ptr);
static ACTION_SKILL_POWER calc_device_ability(player_type *creature_ptr);
static ACTION_SKILL_POWER calc_saving_throw(player_type *creature_ptr);
}
creature_ptr->pspeed = PlayerSpeed(creature_ptr).get_value();
- creature_ptr->see_infra = calc_intra_vision(creature_ptr);
+ creature_ptr->see_infra = PlayerInfravision(creature_ptr).get_value();
creature_ptr->skill_stl = PlayerStealth(creature_ptr).get_value();
creature_ptr->skill_dis = calc_disarming(creature_ptr);
creature_ptr->skill_dev = calc_device_ability(creature_ptr);
case CLASS_MAGE:
case CLASS_HIGH_MAGE:
case CLASS_BLUE_MAGE:
- case CLASS_ELEMENTALIST: {
+ case CLASS_ELEMENTALIST: {
msp -= msp * (cur_wgt - max_wgt) / 600;
break;
}
}
/*!
- * @brief 赤外線視力計算
- * @param creature_ptr 計算するクリーチャーの参照ポインタ
- * @return 赤外線視力
- * @details
- * * 種族による加算
- * * 変異MUT3_INFRAVISによる加算(+3)
- * * 魔法効果tim_infraによる加算(+3)
- * * 装備がTR_INFRAフラグ持ちなら加算(+pval*1)
- */
-static ACTION_SKILL_POWER calc_intra_vision(player_type *creature_ptr)
-{
- ACTION_SKILL_POWER pow;
- const player_race *tmp_rp_ptr;
-
- if (creature_ptr->mimic_form)
- tmp_rp_ptr = &mimic_info[creature_ptr->mimic_form];
- else
- tmp_rp_ptr = &race_info[creature_ptr->prace];
-
- pow = tmp_rp_ptr->infra;
-
- if (creature_ptr->muta.has(MUTA::INFRAVIS)) {
- pow += 3;
- }
-
- if (creature_ptr->tim_infra) {
- pow += 3;
- }
-
- for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
- object_type *o_ptr;
- BIT_FLAGS flgs[TR_FLAG_SIZE];
- o_ptr = &creature_ptr->inventory_list[i];
- if (!o_ptr->k_idx)
- continue;
- object_flags(creature_ptr, o_ptr, flgs);
- if (has_flag(flgs, TR_INFRA))
- pow += o_ptr->pval;
- }
-
- return pow;
-}
-
-/*!
* @brief 解除能力計算
* @param creature_ptr 計算するクリーチャーの参照ポインタ
* @return 解除能力
return (s16b)penalty;
}
-
static bool is_riding_two_hands(player_type *creature_ptr)
{
if (!creature_ptr->riding) {