#include "spell-realm/spells-hex.h"
#include "spell/spells-util.h"
#include "system/floor-type-definition.h"
-#include "system/monster-race-definition.h"
-#include "system/monster-type-definition.h"
+#include "system/monster-entity.h"
+#include "system/monster-race-info.h"
#include "system/player-type-definition.h"
#include "target/projection-path-calculator.h"
+#include "timed-effect/player-blindness.h"
+#include "timed-effect/timed-effects.h"
#include "util/bit-flags-calculator.h"
+#include "util/string-processor.h"
#include "view/display-messages.h"
#include <string>
sound(SOUND_REFLECT);
std::string mes;
- if (player_ptr->blind) {
+ if (player_ptr->effects()->blindness()->is_blind()) {
mes = _("何かが跳ね返った!", "Something bounces!");
} else if (PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::FUUJIN)) {
mes = _("風の如く武器を振るって弾き返した!", "The attack bounces!");
mes = _("攻撃が跳ね返った!", "The attack bounces!");
}
- msg_print(mes.data());
+ msg_print(mes);
POSITION t_y;
POSITION t_x;
if (ep_ptr->who > 0) {
* @param x 目標X座標
* @return 当たらなかったらFALSE、反射したらTRUE、当たったらCONTINUE
*/
-static process_result check_continue_player_effect(PlayerType *player_ptr, EffectPlayerType *ep_ptr, POSITION y, POSITION x, project_func project)
+static ProcessResult check_continue_player_effect(PlayerType *player_ptr, EffectPlayerType *ep_ptr, POSITION y, POSITION x, project_func project)
{
if (!player_bold(player_ptr, y, x)) {
- return PROCESS_FALSE;
+ return ProcessResult::PROCESS_FALSE;
}
auto is_effective = ep_ptr->dam > 0;
is_effective &= ep_ptr->who > 0;
is_effective &= ep_ptr->who != player_ptr->riding;
if (is_effective && kawarimi(player_ptr, true)) {
- return PROCESS_FALSE;
+ return ProcessResult::PROCESS_FALSE;
}
if ((ep_ptr->who == 0) || (ep_ptr->who == player_ptr->riding)) {
- return PROCESS_FALSE;
+ return ProcessResult::PROCESS_FALSE;
}
if (process_bolt_reflection(player_ptr, ep_ptr, project)) {
- return PROCESS_TRUE;
+ return ProcessResult::PROCESS_TRUE;
}
- return PROCESS_CONTINUE;
+ return ProcessResult::PROCESS_CONTINUE;
}
/*!
{
if (ep_ptr->who > 0) {
ep_ptr->m_ptr = &player_ptr->current_floor_ptr->m_list[ep_ptr->who];
- ep_ptr->rlev = (&r_info[ep_ptr->m_ptr->r_idx])->level >= 1 ? (&r_info[ep_ptr->m_ptr->r_idx])->level : 1;
- monster_desc(player_ptr, ep_ptr->m_name, ep_ptr->m_ptr, 0);
- strcpy(ep_ptr->killer, who_name);
+ ep_ptr->rlev = (&monraces_info[ep_ptr->m_ptr->r_idx])->level >= 1 ? (&monraces_info[ep_ptr->m_ptr->r_idx])->level : 1;
+ angband_strcpy(ep_ptr->m_name, monster_desc(player_ptr, ep_ptr->m_ptr, 0).data(), sizeof(ep_ptr->m_name));
+ angband_strcpy(ep_ptr->killer, who_name, sizeof(ep_ptr->killer));
return;
}
EffectPlayerType tmp_effect(who, dam, attribute, flag);
auto *ep_ptr = &tmp_effect;
auto check_result = check_continue_player_effect(player_ptr, ep_ptr, y, x, project);
- if (check_result != PROCESS_CONTINUE) {
- return check_result == PROCESS_TRUE;
+ if (check_result != ProcessResult::PROCESS_CONTINUE) {
+ return check_result == ProcessResult::PROCESS_TRUE;
}
if (ep_ptr->dam > 1600) {
SpellHex(player_ptr).store_vengeful_damage(ep_ptr->get_damage);
if ((player_ptr->tim_eyeeye || SpellHex(player_ptr).is_spelling_specific(HEX_EYE_FOR_EYE)) && (ep_ptr->get_damage > 0) && !player_ptr->is_dead && (ep_ptr->who > 0)) {
- GAME_TEXT m_name_self[MAX_MONSTER_NAME];
- monster_desc(player_ptr, m_name_self, ep_ptr->m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
- msg_format(_("攻撃が%s自身を傷つけた!", "The attack of %s has wounded %s!"), ep_ptr->m_name, m_name_self);
+ const auto m_name_self = monster_desc(player_ptr, ep_ptr->m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
+ msg_format(_("攻撃が%s自身を傷つけた!", "The attack of %s has wounded %s!"), ep_ptr->m_name, m_name_self.data());
(*project)(player_ptr, 0, 0, ep_ptr->m_ptr->fy, ep_ptr->m_ptr->fx, ep_ptr->get_damage, AttributeType::MISSILE, PROJECT_KILL, std::nullopt);
if (player_ptr->tim_eyeeye) {
set_tim_eyeeye(player_ptr, player_ptr->tim_eyeeye - 5, true);