PLAYER_LEVEL plev = player_ptr->lev;
const auto power_int = enum2i(power);
-
- if ((power_int > 2 && power_int < 41) || (power_int > 41 && power_int < 59) || (power == MonsterAbilityType::PSY_SPEAR) || (power == MonsterAbilityType::BO_VOID) || (power == MonsterAbilityType::BO_ABYSS) || (power == MonsterAbilityType::BA_VOID) || (power == MonsterAbilityType::BA_ABYSS) || (power == MonsterAbilityType::BR_VOID) || (power == MonsterAbilityType::BR_ABYSS)) {
+ using Mat = MonsterAbilityType;
+ EnumClassFlagGroup<Mat> flags{
+ Mat::PSY_SPEAR, Mat::BO_VOID, Mat::BO_ABYSS, Mat::BA_VOID, Mat::BA_ABYSS, Mat::BR_VOID, Mat::BR_ABYSS
+ };
+ if ((power_int > 2 && power_int < 41) || (power_int > 41 && power_int < 59) || flags.has(power)) {
return format(" %s%d", KWD_DAM, (int)dam);
}
switch (power) {
num = mane_data->mane_list.size();
/* Build a prompt (accept all spells) */
- (void)strnfmt(out_val, 78, _("(%c-%c, '*'で一覧, ESC) どの%sをまねますか?", "(%c-%c, *=List, ESC=exit) Use which %s? "), I2A(0), I2A(num - 1), p);
+ constexpr auto mes = _("(%c-%c, '*'で一覧, ESC) どの%sをまねますか?", "(%c-%c, *=List, ESC=exit) Use which %s? ");
+ (void)strnfmt(out_val, 78, mes, I2A(0), I2A(num - 1), p);
choice = always_show_list ? ESCAPE : 1;
while (!flag) {
if (!target_set(player_ptr, TARGET_KILL)) {
return false;
}
- if (!player_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx) {
+
+ auto *floor_ptr = player_ptr->current_floor_ptr;
+ if (!floor_ptr->grid_array[target_row][target_col].m_idx) {
break;
}
if (!player_has_los_bold(player_ptr, target_row, target_col)) {
if (!projectable(player_ptr, player_ptr->y, player_ptr->x, target_row, target_col)) {
break;
}
- auto *m_ptr = &player_ptr->current_floor_ptr->m_list[player_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx];
+
+ const auto &grid = floor_ptr->grid_array[target_row][target_col];
+ auto *m_ptr = &floor_ptr->m_list[grid.m_idx];
auto *r_ptr = &monraces_info[m_ptr->r_idx];
const auto m_name = monster_desc(player_ptr, m_ptr, 0);
if (r_ptr->resistance_flags.has(MonsterResistanceType::RESIST_TELEPORT)) {
}
msg_format(_("%sを引き戻した。", "You command %s to return."), m_name.data());
- teleport_monster_to(
- player_ptr, player_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx, player_ptr->y, player_ptr->x, 100, TELEPORT_PASSIVE);
+ teleport_monster_to(player_ptr, grid.m_idx, player_ptr->y, player_ptr->x, 100, TELEPORT_PASSIVE);
break;
}
case MonsterAbilityType::TELE_AWAY:
if (!can_player_ride_pet(player_ptr, g_ptr, true)) {
/* Feature code (applying "mimic" field) */
auto *f_ptr = &terrains_info[g_ptr->get_feat_mimic()];
+ using Tc = TerrainCharacteristics;
#ifdef JP
msg_format("そのモンスターは%sの%sにいる。", f_ptr->name.data(),
- (f_ptr->flags.has_none_of({ TerrainCharacteristics::MOVE, TerrainCharacteristics::CAN_FLY }) || f_ptr->flags.has_none_of({ TerrainCharacteristics::LOS, TerrainCharacteristics::TREE })) ? "中" : "上");
+ (f_ptr->flags.has_none_of({ Tc::MOVE, Tc::CAN_FLY }) || f_ptr->flags.has_none_of({ Tc::LOS, Tc::TREE })) ? "中" : "上");
#else
msg_format("This monster is %s the %s.",
- (f_ptr->flags.has_none_of({ TerrainCharacteristics::MOVE, TerrainCharacteristics::CAN_FLY }) || f_ptr->flags.has_none_of({ TerrainCharacteristics::LOS, TerrainCharacteristics::TREE })) ? "in" : "on", f_ptr->name.data());
+ (f_ptr->flags.has_none_of({ Tc::MOVE, Tc::CAN_FLY }) || f_ptr->flags.has_none_of({ Tc::LOS, Tc::TREE })) ? "in" : "on", f_ptr->name.data());
#endif
return false;
switch (player_ptr->pclass) {
case PlayerClassType::MONK:
case PlayerClassType::FORCETRAINER:
- case PlayerClassType::BERSERKER:
+ case PlayerClassType::BERSERKER: {
if (empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB)) {
if (player_ptr->pet_extra_flags & PF_TWO_HANDS) {
power_desc[num] = _("片手で格闘する", "use one hand to control the pet you are riding");
}
powers[num++] = PET_TWO_HANDS;
- } else if ((empty_hands(player_ptr, false) != EMPTY_HAND_NONE) && !has_melee_weapon(player_ptr, INVEN_MAIN_HAND) && !has_melee_weapon(player_ptr, INVEN_SUB_HAND)) {
+ break;
+ }
+
+ auto has_any_melee_weapon = has_melee_weapon(player_ptr, INVEN_MAIN_HAND);
+ has_any_melee_weapon |= has_melee_weapon(player_ptr, INVEN_SUB_HAND);
+ if ((empty_hands(player_ptr, false) != EMPTY_HAND_NONE) && !has_any_melee_weapon) {
if (player_ptr->pet_extra_flags & PF_TWO_HANDS) {
power_desc[num] = _("格闘を行わない", "use one hand to control the pet you are riding");
} else {
}
powers[num++] = PET_TWO_HANDS;
+ break;
}
- break;
+ break;
+ }
default:
break;
}
}
/* action restrictions */
- if (((bldg->action_restr[i] == 1) && !is_member(player_ptr, bldg)) || ((bldg->action_restr[i] == 2) && !is_owner(player_ptr, bldg))) {
+ const auto can_be_owner = is_owner(player_ptr, bldg);
+ if (((bldg->action_restr[i] == 1) && !is_member(player_ptr, bldg)) || ((bldg->action_restr[i] == 2) && !can_be_owner)) {
msg_print(_("それを選択する権利はありません!", "You have no right to choose that!"));
return;
}
auto bact = bldg->actions[i];
- if ((bact != BACT_RECHARGE) && (((bldg->member_costs[i] > player_ptr->au) && is_owner(player_ptr, bldg)) || ((bldg->other_costs[i] > player_ptr->au) && !is_owner(player_ptr, bldg)))) {
+ if ((bact != BACT_RECHARGE) && (((bldg->member_costs[i] > player_ptr->au) && can_be_owner) || ((bldg->other_costs[i] > player_ptr->au) && !can_be_owner))) {
msg_print(_("お金が足りません!", "You do not have the gold!"));
return;
}
get_screen_size(&wid, &hgt);
POSITION y2 = y1 = panel_row_min;
POSITION x2 = x1 = panel_col_min;
+ constexpr auto fmt = _("マップ位置 [%d(%02d),%d(%02d)] (プレイヤーの%s) 方向?", "Map sector [%d(%02d),%d(%02d)], which is%s your sector. Direction?");
while (true) {
std::string_view dirstring = dirstrings[(y2 < y1) ? 0 : ((y2 > y1) ? 2 : 1)][(x2 < x1) ? 0 : ((x2 > x1) ? 2 : 1)];
- std::string out_val = format(_("マップ位置 [%d(%02d),%d(%02d)] (プレイヤーの%s) 方向?", "Map sector [%d(%02d),%d(%02d)], which is%s your sector. Direction?"),
- y2 / (hgt / 2), y2 % (hgt / 2), x2 / (wid / 2), x2 % (wid / 2), dirstring.data());
+ std::string out_val = format(fmt, y2 / (hgt / 2), y2 % (hgt / 2), x2 / (wid / 2), x2 % (wid / 2), dirstring.data());
dir = 0;
while (!dir) {
term_clear();
while (true) {
DIRECTION dir;
- prt(format(_("%s (リターン:次, %sESC:終了, ?:ヘルプ) ", "%s (RET:next, %s, ?:help) "), info, browse_only ? _("", "ESC:exit") : _("y/n:変更, ", "y/n:change, ESC:accept")), 0, 0);
+ constexpr auto command = _("%s (リターン:次, %sESC:終了, ?:ヘルプ) ", "%s (RET:next, %s, ?:help) ");
+ prt(format(command, info, browse_only ? _("", "ESC:exit") : _("y/n:変更, ", "y/n:change, ESC:accept")), 0, 0);
if (page == OPT_PAGE_AUTODESTROY) {
- c_prt(TERM_YELLOW, _("以下のオプションは、簡易自動破壊を使用するときのみ有効", "Following options will protect items from easy auto-destroyer."), 6,
- _(6, 3));
+ constexpr auto mes = _("以下のオプションは、簡易自動破壊を使用するときのみ有効", "Following options will protect items from easy auto-destroyer.");
+ c_prt(TERM_YELLOW, mes, 6, _(6, 3));
}
for (i = 0; i < n; i++) {
*/
static void affected_monster_prevents_bad_status(PlayerType *player_ptr, effect_monster_type *em_ptr)
{
- if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || any_bits(em_ptr->r_ptr->flags1, RF1_QUESTOR) || (player_ptr->riding && (em_ptr->g_ptr->m_idx == player_ptr->riding))) {
+ const auto *r_ptr = em_ptr->r_ptr;
+ auto can_avoid_polymorph = r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
+ can_avoid_polymorph |= any_bits(r_ptr->flags1, RF1_QUESTOR);
+ can_avoid_polymorph |= (player_ptr->riding != 0) && (em_ptr->g_ptr->m_idx == player_ptr->riding);
+ if (can_avoid_polymorph) {
em_ptr->do_polymorph = false;
}
- if ((em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || any_bits(em_ptr->r_ptr->flags1, RF1_QUESTOR) || (em_ptr->r_ptr->population_flags.has(MonsterPopulationType::NAZGUL))) && !player_ptr->phase_out && (em_ptr->who > 0) && (em_ptr->dam > em_ptr->m_ptr->hp)) {
+ auto should_alive = r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
+ should_alive |= any_bits(r_ptr->flags1, RF1_QUESTOR);
+ should_alive |= r_ptr->population_flags.has(MonsterPopulationType::NAZGUL);
+ if (should_alive && !player_ptr->phase_out && (em_ptr->who > 0) && (em_ptr->dam > em_ptr->m_ptr->hp)) {
em_ptr->dam = em_ptr->m_ptr->hp;
}
}
*/
static void effect_damage_piles_stun(PlayerType *player_ptr, effect_monster_type *em_ptr)
{
- if ((em_ptr->do_stun == 0) || em_ptr->r_ptr->resistance_flags.has_any_of({ MonsterResistanceType::RESIST_SOUND, MonsterResistanceType::RESIST_FORCE }) || (em_ptr->r_ptr->flags3 & RF3_NO_STUN)) {
+ const auto *r_ptr = em_ptr->r_ptr;
+ auto can_avoid_stun = em_ptr->do_stun == 0;
+ can_avoid_stun |= r_ptr->resistance_flags.has_any_of({ MonsterResistanceType::RESIST_SOUND, MonsterResistanceType::RESIST_FORCE });
+ can_avoid_stun |= any_bits(r_ptr->flags3, RF3_NO_STUN);
+ if (can_avoid_stun) {
return;
}
if (player_ptr->levitation) {
msg_print(msg_levitation);
-
- take_hit(player_ptr, DAMAGE_NOESCAPE, damage, format(_("%sの上に浮遊したダメージ", "flying over %s"), terrains_info[g_ptr->get_feat_mimic()].name.data()).data());
+ constexpr auto mes = _("%sの上に浮遊したダメージ", "flying over %s");
+ take_hit(player_ptr, DAMAGE_NOESCAPE, damage, format(mes, terrains_info[g_ptr->get_feat_mimic()].name.data()).data());
if (additional_effect != nullptr) {
additional_effect(player_ptr, damage);
}
if (f_ptr->flags.has(TerrainCharacteristics::LAVA) && !is_invuln(player_ptr) && !has_immune_fire(player_ptr)) {
- if (deal_damege_by_feat(
- player_ptr, g_ptr, _("熱で火傷した!", "The heat burns you!"), _("で火傷した!", "burns you!"), calc_fire_damage_rate, nullptr)) {
+ constexpr auto mes_leviation = _("熱で火傷した!", "The heat burns you!");
+ constexpr auto mes_normal = _("で火傷した!", "burns you!");
+ if (deal_damege_by_feat(player_ptr, g_ptr, mes_leviation, mes_normal, calc_fire_damage_rate, nullptr)) {
cave_no_regen = true;
sound(SOUND_TERRAIN_DAMAGE);
}
}
if (f_ptr->flags.has(TerrainCharacteristics::COLD_PUDDLE) && !is_invuln(player_ptr) && !has_immune_cold(player_ptr)) {
- if (deal_damege_by_feat(
- player_ptr, g_ptr, _("冷気に覆われた!", "The cold engulfs you!"), _("に凍えた!", "frostbites you!"), calc_cold_damage_rate, nullptr)) {
+ constexpr auto mes_leviation = _("冷気に覆われた!", "The cold engulfs you!");
+ constexpr auto mes_normal = _("に凍えた!", "frostbites you!");
+ if (deal_damege_by_feat(player_ptr, g_ptr, mes_leviation, mes_normal, calc_cold_damage_rate, nullptr)) {
cave_no_regen = true;
sound(SOUND_TERRAIN_DAMAGE);
}
}
if (f_ptr->flags.has(TerrainCharacteristics::ELEC_PUDDLE) && !is_invuln(player_ptr) && !has_immune_elec(player_ptr)) {
- if (deal_damege_by_feat(
- player_ptr, g_ptr, _("電撃を受けた!", "The electricity shocks you!"), _("に感電した!", "shocks you!"), calc_elec_damage_rate, nullptr)) {
+ constexpr auto mes_leviation = _("電撃を受けた!", "The electricity shocks you!");
+ constexpr auto mes_normal = _("に感電した!", "shocks you!");
+ if (deal_damege_by_feat(player_ptr, g_ptr, mes_leviation, mes_normal, calc_elec_damage_rate, nullptr)) {
cave_no_regen = true;
sound(SOUND_TERRAIN_DAMAGE);
}
}
if (f_ptr->flags.has(TerrainCharacteristics::ACID_PUDDLE) && !is_invuln(player_ptr) && !has_immune_acid(player_ptr)) {
- if (deal_damege_by_feat(
- player_ptr, g_ptr, _("酸が飛び散った!", "The acid melts you!"), _("に溶かされた!", "melts you!"), calc_acid_damage_rate, nullptr)) {
+ constexpr auto mes_leviation = _("酸が飛び散った!", "The acid melts you!");
+ constexpr auto mes_normal = _("に溶かされた!", "melts you!");
+ if (deal_damege_by_feat(player_ptr, g_ptr, mes_leviation, mes_normal, calc_acid_damage_rate, nullptr)) {
cave_no_regen = true;
sound(SOUND_TERRAIN_DAMAGE);
}
}
if (f_ptr->flags.has(TerrainCharacteristics::POISON_PUDDLE) && !is_invuln(player_ptr)) {
- if (deal_damege_by_feat(player_ptr, g_ptr, _("毒気を吸い込んだ!", "The gas poisons you!"), _("に毒された!", "poisons you!"), calc_acid_damage_rate,
+ constexpr auto mes_leviation = _("毒気を吸い込んだ!", "The gas poisons you!");
+ constexpr auto mes_normal = _("に毒された!", "poisons you!");
+ if (deal_damege_by_feat(player_ptr, g_ptr, mes_leviation, mes_normal, calc_acid_damage_rate,
[](PlayerType *player_ptr, int damage) {
if (!has_resist_pois(player_ptr)) {
(void)BadStatusSetter(player_ptr).mod_poison(static_cast<TIME_EFFECT>(damage));
}
}
- if (f_ptr->flags.has_all_of({ TerrainCharacteristics::WATER, TerrainCharacteristics::DEEP }) && !player_ptr->levitation && !player_ptr->can_swim && !has_resist_water(player_ptr)) {
+ const auto can_drown = f_ptr->flags.has_all_of({ TerrainCharacteristics::WATER, TerrainCharacteristics::DEEP });
+ if (can_drown && !player_ptr->levitation && !player_ptr->can_swim && !has_resist_water(player_ptr)) {
if (calc_inventory_weight(player_ptr) > calc_weight_limit(player_ptr)) {
msg_print(_("溺れている!", "You are drowning!"));
take_hit(player_ptr, DAMAGE_NOESCAPE, randint1(player_ptr->lev), _("溺れ", "drowning"));
#include <optional>
#include <string>
+// clang-format off
namespace {
-const EnumClassFlagGroup<CurseTraitType> TRC_P_FLAG_MASK({ CurseTraitType::TY_CURSE, CurseTraitType::DRAIN_EXP, CurseTraitType::ADD_L_CURSE, CurseTraitType::ADD_H_CURSE, CurseTraitType::CALL_ANIMAL, CurseTraitType::CALL_DEMON,
- CurseTraitType::CALL_DRAGON, CurseTraitType::COWARDICE, CurseTraitType::TELEPORT, CurseTraitType::DRAIN_HP, CurseTraitType::DRAIN_MANA, CurseTraitType::CALL_UNDEAD, CurseTraitType::BERS_RAGE, CurseTraitType::PERSISTENT_CURSE });
-const EnumClassFlagGroup<CurseSpecialTraitType> TRCS_P_FLAG_MASK({ CurseSpecialTraitType::TELEPORT_SELF, CurseSpecialTraitType::CHAINSWORD });
+const EnumClassFlagGroup<CurseTraitType> TRC_P_FLAG_MASK({
+ CurseTraitType::TY_CURSE,
+ CurseTraitType::DRAIN_EXP,
+ CurseTraitType::ADD_L_CURSE,
+ CurseTraitType::ADD_H_CURSE,
+ CurseTraitType::CALL_ANIMAL,
+ CurseTraitType::CALL_DEMON,
+ CurseTraitType::CALL_DRAGON,
+ CurseTraitType::COWARDICE,
+ CurseTraitType::TELEPORT,
+ CurseTraitType::DRAIN_HP,
+ CurseTraitType::DRAIN_MANA,
+ CurseTraitType::CALL_UNDEAD,
+ CurseTraitType::BERS_RAGE,
+ CurseTraitType::PERSISTENT_CURSE });
+const EnumClassFlagGroup<CurseSpecialTraitType> TRCS_P_FLAG_MASK({
+ CurseSpecialTraitType::TELEPORT_SELF,
+ CurseSpecialTraitType::CHAINSWORD });
}
+// clang-format on
static bool is_specific_curse(CurseTraitType flag)
{
return;
}
- const auto item_name = describe_flavor(player_ptr, choose_cursed_obj_name(player_ptr, CurseTraitType::DRAIN_HP), (OD_OMIT_PREFIX | OD_NAME_ONLY));
+ const auto *item_ptr = choose_cursed_obj_name(player_ptr, CurseTraitType::DRAIN_HP);
+ const auto item_name = describe_flavor(player_ptr, item_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
msg_format(_("%sはあなたの体力を吸収した!", "Your %s drains HP from you!"), item_name.data());
take_hit(player_ptr, DAMAGE_LOSELIFE, std::min(player_ptr->lev * 2, 100), item_name.data());
}
return;
}
- const auto item_name = describe_flavor(player_ptr, choose_cursed_obj_name(player_ptr, CurseTraitType::DRAIN_MANA), (OD_OMIT_PREFIX | OD_NAME_ONLY));
+ const auto *item_ptr = choose_cursed_obj_name(player_ptr, CurseTraitType::DRAIN_MANA);
+ const auto item_name = describe_flavor(player_ptr, item_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
msg_format(_("%sはあなたの魔力を吸収した!", "Your %s drains mana from you!"), item_name.data());
player_ptr->csp -= std::min<short>(player_ptr->lev, 50);
if (player_ptr->csp < 0) {
static void occur_curse_effects(PlayerType *player_ptr)
{
- if ((player_ptr->cursed.has_none_of(TRC_P_FLAG_MASK) && player_ptr->cursed_special.has_none_of(TRCS_P_FLAG_MASK)) || player_ptr->phase_out || player_ptr->wild_mode) {
+ auto is_cursed = player_ptr->cursed.has_any_of(TRC_P_FLAG_MASK);
+ is_cursed |= player_ptr->cursed_special.has_any_of(TRCS_P_FLAG_MASK);
+ if (!is_cursed || player_ptr->phase_out || player_ptr->wild_mode) {
return;
}
}
}
+ constexpr auto mode = SCAN_FLOOR_ITEM_TESTER | SCAN_FLOOR_ONLY_MARKED;
OBJECT_IDX floor_list[23];
- ITEM_NUMBER floor_num = scan_floor_items(player_ptr, floor_list, player_ptr->y, player_ptr->x, SCAN_FLOOR_ITEM_TESTER | SCAN_FLOOR_ONLY_MARKED, item_tester);
+ ITEM_NUMBER floor_num = scan_floor_items(player_ptr, floor_list, player_ptr->y, player_ptr->x, mode, item_tester);
return floor_num != 0;
}
break;
}
- if (floor_ptr->dun_level && dungeons_info[player_ptr->dungeon_idx].flags.has(DungeonFeatureType::NO_MAGIC) && !pc.equals(PlayerClassType::BERSERKER) && !pc.equals(PlayerClassType::SMITH)) {
+ const auto &dungeon = dungeons_info[player_ptr->dungeon_idx];
+ auto non_magic_class = pc.equals(PlayerClassType::BERSERKER);
+ non_magic_class |= pc.equals(PlayerClassType::SMITH);
+ if (floor_ptr->dun_level && dungeon.flags.has(DungeonFeatureType::NO_MAGIC) && !non_magic_class) {
msg_print(_("ダンジョンが魔法を吸収した!", "The dungeon absorbs all attempted magic!"));
msg_print(nullptr);
break;
}
- if (player_ptr->anti_magic && !pc.equals(PlayerClassType::BERSERKER) && !pc.equals(PlayerClassType::SMITH)) {
+ if (player_ptr->anti_magic && !non_magic_class) {
concptr which_power = _("魔法", "magic");
switch (player_ptr->pclass) {
case PlayerClassType::MINDCRAFTER:
return false;
}
- if ((r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || any_bits(r_ptr->flags1, RF1_QUESTOR) || (r_ptr->population_flags.has(MonsterPopulationType::NAZGUL))) && !player_ptr->phase_out) {
+ auto is_like_unique = r_ptr->kind_flags.has(MonsterKindType::UNIQUE);
+ is_like_unique |= any_bits(r_ptr->flags1, RF1_QUESTOR);
+ is_like_unique |= r_ptr->population_flags.has(MonsterPopulationType::NAZGUL);
+ if (is_like_unique && !player_ptr->phase_out) {
mam_pp_ptr->m_ptr->hp = 1;
return false;
}
tr_ptr->aura_flags.set(MonsterAuraType::FIRE);
}
- project(player_ptr, mam_ptr->t_idx, 0, mam_ptr->m_ptr->fy, mam_ptr->m_ptr->fx, damroll(1 + ((tr_ptr->level) / 26), 1 + ((tr_ptr->level) / 17)), AttributeType::FIRE,
- PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED);
+ const auto dam = damroll(1 + ((tr_ptr->level) / 26), 1 + ((tr_ptr->level) / 17));
+ constexpr auto flags = PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED;
+ project(player_ptr, mam_ptr->t_idx, 0, mam_ptr->m_ptr->fy, mam_ptr->m_ptr->fx, dam, AttributeType::FIRE, flags);
}
static void aura_cold_by_melee(PlayerType *player_ptr, mam_type *mam_ptr)
{
- auto *r_ptr = &monraces_info[mam_ptr->m_ptr->r_idx];
+ const auto *m_ptr = mam_ptr->m_ptr;
+ auto *r_ptr = &monraces_info[m_ptr->r_idx];
MonsterRaceInfo *tr_ptr = &monraces_info[mam_ptr->t_ptr->r_idx];
- if (tr_ptr->aura_flags.has_not(MonsterAuraType::COLD) || !MonsterRace(mam_ptr->m_ptr->r_idx).is_valid()) {
+ if (tr_ptr->aura_flags.has_not(MonsterAuraType::COLD) || !MonsterRace(m_ptr->r_idx).is_valid()) {
return;
}
- if (r_ptr->resistance_flags.has_any_of(RFR_EFF_IM_COLD_MASK) && is_original_ap_and_seen(player_ptr, mam_ptr->m_ptr)) {
+ if (r_ptr->resistance_flags.has_any_of(RFR_EFF_IM_COLD_MASK) && is_original_ap_and_seen(player_ptr, m_ptr)) {
r_ptr->r_resistance_flags.set(r_ptr->resistance_flags & RFR_EFF_IM_COLD_MASK);
return;
}
msg_format(_("%s^は突然寒くなった!", "%s^ is suddenly very cold!"), mam_ptr->m_name);
}
- if (mam_ptr->m_ptr->ml && is_original_ap_and_seen(player_ptr, mam_ptr->t_ptr)) {
+ if (m_ptr->ml && is_original_ap_and_seen(player_ptr, mam_ptr->t_ptr)) {
tr_ptr->aura_flags.set(MonsterAuraType::COLD);
}
- project(player_ptr, mam_ptr->t_idx, 0, mam_ptr->m_ptr->fy, mam_ptr->m_ptr->fx, damroll(1 + ((tr_ptr->level) / 26), 1 + ((tr_ptr->level) / 17)), AttributeType::COLD,
- PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED);
+ const auto dam = damroll(1 + ((tr_ptr->level) / 26), 1 + ((tr_ptr->level) / 17));
+ constexpr auto flags = PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED;
+ project(player_ptr, mam_ptr->t_idx, 0, m_ptr->fy, m_ptr->fx, dam, AttributeType::COLD, flags);
}
static void aura_elec_by_melee(PlayerType *player_ptr, mam_type *mam_ptr)
{
- auto *r_ptr = &monraces_info[mam_ptr->m_ptr->r_idx];
+ const auto *m_ptr = mam_ptr->m_ptr;
+ auto *r_ptr = &monraces_info[m_ptr->r_idx];
MonsterRaceInfo *tr_ptr = &monraces_info[mam_ptr->t_ptr->r_idx];
- if (tr_ptr->aura_flags.has_not(MonsterAuraType::ELEC) || !MonsterRace(mam_ptr->m_ptr->r_idx).is_valid()) {
+ if (tr_ptr->aura_flags.has_not(MonsterAuraType::ELEC) || !MonsterRace(m_ptr->r_idx).is_valid()) {
return;
}
- if (r_ptr->resistance_flags.has_any_of(RFR_EFF_IM_ELEC_MASK) && is_original_ap_and_seen(player_ptr, mam_ptr->m_ptr)) {
+ if (r_ptr->resistance_flags.has_any_of(RFR_EFF_IM_ELEC_MASK) && is_original_ap_and_seen(player_ptr, m_ptr)) {
r_ptr->r_resistance_flags.set(r_ptr->resistance_flags & RFR_EFF_IM_ELEC_MASK);
return;
}
msg_format(_("%s^は電撃を食らった!", "%s^ gets zapped!"), mam_ptr->m_name);
}
- if (mam_ptr->m_ptr->ml && is_original_ap_and_seen(player_ptr, mam_ptr->t_ptr)) {
+ if (m_ptr->ml && is_original_ap_and_seen(player_ptr, mam_ptr->t_ptr)) {
tr_ptr->aura_flags.set(MonsterAuraType::ELEC);
}
- project(player_ptr, mam_ptr->t_idx, 0, mam_ptr->m_ptr->fy, mam_ptr->m_ptr->fx, damroll(1 + ((tr_ptr->level) / 26), 1 + ((tr_ptr->level) / 17)), AttributeType::ELEC,
- PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED);
+ const auto dam = damroll(1 + ((tr_ptr->level) / 26), 1 + ((tr_ptr->level) / 17));
+ constexpr auto flags = PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED;
+ project(player_ptr, mam_ptr->t_idx, 0, m_ptr->fy, m_ptr->fx, dam, AttributeType::ELEC, flags);
}
static bool check_same_monster(PlayerType *player_ptr, mam_type *mam_ptr)
static void process_melee(PlayerType *player_ptr, mam_type *mam_ptr)
{
- if (mam_ptr->effect != RaceBlowEffectType::NONE && !check_hit_from_monster_to_monster(mam_ptr->power, mam_ptr->rlev, mam_ptr->ac, mam_ptr->m_ptr->get_remaining_stun())) {
+ const auto remaining_stun = mam_ptr->m_ptr->get_remaining_stun();
+ if (mam_ptr->effect != RaceBlowEffectType::NONE && !check_hit_from_monster_to_monster(mam_ptr->power, mam_ptr->rlev, mam_ptr->ac, remaining_stun)) {
describe_monster_missed_monster(player_ptr, mam_ptr);
return;
}
mam_ptr->d_dice = r_ptr->blow[ap_cnt].d_dice;
mam_ptr->d_side = r_ptr->blow[ap_cnt].d_side;
- if (!m_ptr->is_valid() || (mam_ptr->t_ptr->fx != mam_ptr->x_saver) || (mam_ptr->t_ptr->fy != mam_ptr->y_saver) || mam_ptr->method == RaceBlowMethodType::NONE) {
+ if (!m_ptr->is_valid()) {
+ break;
+ }
+
+ const auto x_saver = mam_ptr->t_ptr->fx != mam_ptr->x_saver;
+ const auto y_saver = mam_ptr->t_ptr->fy != mam_ptr->y_saver;
+ if (x_saver || y_saver || mam_ptr->method == RaceBlowMethodType::NONE) {
break;
}
if (randint1(100) < chance / 2) {
int plev = player_ptr->lev;
msg_print(_("元素の力が制御できない氾流となって解放された!", "The elemental power surges from you in an uncontrollable torrent!"));
- project(player_ptr, PROJECT_WHO_UNCTRL_POWER, 2 + plev / 10, player_ptr->y, player_ptr->x, plev * 2, get_element_types(player_ptr->element)[0],
- PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM);
+ const auto element = get_element_types(player_ptr->element)[0];
+ constexpr auto flags = PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
+ project(player_ptr, PROJECT_WHO_UNCTRL_POWER, 2 + plev / 10, player_ptr->y, player_ptr->x, plev * 2, element, flags);
player_ptr->csp = std::max(0, player_ptr->csp - player_ptr->msp * 10 / (20 + randint1(10)));
PlayerEnergy(player_ptr).set_player_turn_energy(100);
}
MONSTER_IDX m_idx = player_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx;
- if ((m_idx == 0) || !player_has_los_bold(player_ptr, target_row, target_col) || !projectable(player_ptr, player_ptr->y, player_ptr->x, target_row, target_col)) {
+ const auto is_projectable = projectable(player_ptr, player_ptr->y, player_ptr->x, target_row, target_col);
+ if ((m_idx == 0) || !player_has_los_bold(player_ptr, target_row, target_col) || !is_projectable) {
break;
}
for (POSITION x = 0; x < player_ptr->current_floor_ptr->width; x++) {
for (POSITION y = 0; y < player_ptr->current_floor_ptr->height; y++) {
- if (player_ptr->current_floor_ptr->grid_array[y][x].is_mirror() && distance(player_ptr->y, player_ptr->x, y, x) <= get_max_range(player_ptr) && distance(player_ptr->y, player_ptr->x, y, x) != 0 && player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
- mirror_y[mirror_num] = y;
- mirror_x[mirror_num] = x;
- mirror_num++;
+ if (!player_ptr->current_floor_ptr->grid_array[y][x].is_mirror()) {
+ continue;
}
+
+ const auto dist = distance(player_ptr->y, player_ptr->x, y, x);
+ const auto is_projectable = projectable(player_ptr, player_ptr->y, player_ptr->x, y, x);
+ if ((dist == 0) || (dist > get_max_range(player_ptr)) || !player_has_los_bold(player_ptr, y, x) || !is_projectable) {
+ continue;
+ }
+
+ mirror_y[mirror_num] = y;
+ mirror_x[mirror_num] = x;
+ mirror_num++;
}
}
for (y = y1; y <= y2; y++) {
for (x = x1; x <= x2; x++) {
- if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) >= 0 && centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) >= 0 && centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) >= 0) {
- if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
- if (!(player_ptr->effects()->blindness()->is_blind()) && panel_contains(y, x)) {
- print_bolt_pict(player_ptr, y, x, y, x, AttributeType::MANA);
- move_cursor_relative(y, x);
- term_fresh();
- term_xtra(TERM_XTRA_DELAY, delay_factor);
- }
+ if ((centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) < 0)) {
+ continue;
+ }
+
+ if ((centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) < 0)) {
+ continue;
+ }
+
+ if ((centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) < 0)) {
+ continue;
+ }
+
+ if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
+ if (!(player_ptr->effects()->blindness()->is_blind()) && panel_contains(y, x)) {
+ print_bolt_pict(player_ptr, y, x, y, x, AttributeType::MANA);
+ move_cursor_relative(y, x);
+ term_fresh();
+ term_xtra(TERM_XTRA_DELAY, delay_factor);
}
}
}
for (y = y1; y <= y2; y++) {
for (x = x1; x <= x2; x++) {
- if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) >= 0 && centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) >= 0 && centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) >= 0) {
- if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
- (void)affect_feature(player_ptr, 0, 0, y, x, dam, AttributeType::MANA);
- }
+ if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) < 0) {
+ continue;
+ }
+
+ if (centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) < 0) {
+ continue;
+ }
+
+ if (centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) < 0) {
+ continue;
+ }
+
+ if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
+ (void)affect_feature(player_ptr, 0, 0, y, x, dam, AttributeType::MANA);
}
}
}
for (y = y1; y <= y2; y++) {
for (x = x1; x <= x2; x++) {
- if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) >= 0 && centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) >= 0 && centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) >= 0) {
- if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
- (void)affect_item(player_ptr, 0, 0, y, x, dam, AttributeType::MANA);
- }
+ if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) < 0) {
+ continue;
+ }
+
+ if (centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) < 0) {
+ continue;
+ }
+
+ if (centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) < 0) {
+ continue;
+ }
+
+ if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
+ (void)affect_item(player_ptr, 0, 0, y, x, dam, AttributeType::MANA);
}
}
}
for (y = y1; y <= y2; y++) {
for (x = x1; x <= x2; x++) {
- if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) >= 0 && centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) >= 0 && centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) >= 0) {
- if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
- (void)affect_monster(player_ptr, 0, 0, y, x, dam, AttributeType::MANA, (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP), true);
- }
+ if (centersign * ((point_x[0] - x) * (point_y[1] - y) - (point_y[0] - y) * (point_x[1] - x)) < 0) {
+ continue;
+ }
+
+ if (centersign * ((point_x[1] - x) * (point_y[2] - y) - (point_y[1] - y) * (point_x[2] - x)) < 0) {
+ continue;
+ }
+
+ if (centersign * ((point_x[2] - x) * (point_y[0] - y) - (point_y[2] - y) * (point_x[0] - x)) < 0) {
+ continue;
+ }
+
+ if (player_has_los_bold(player_ptr, y, x) && projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
+ constexpr auto flags = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP;
+ (void)affect_monster(player_ptr, 0, 0, y, x, dam, AttributeType::MANA, flags, true);
}
}
}
*/
void musou_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
- if ((!player_ptr->counter && !PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU)) || !monap_ptr->alive || player_ptr->is_dead || !monap_ptr->m_ptr->ml || (player_ptr->csp <= 7)) {
+ const auto is_musou = PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ if ((!player_ptr->counter && !is_musou) || !monap_ptr->alive || player_ptr->is_dead || !monap_ptr->m_ptr->ml || (player_ptr->csp <= 7)) {
return;
}
/* Build a prompt (accept all spells) */
if (only_browse) {
- (void)strnfmt(
- out_val, 78, _("(%s^ %c-%c, '*'で一覧, ESC) どの%sについて知りますか?", "(%s^s %c-%c, *=List, ESC=exit) Use which %s? "), p, I2A(0), I2A(num), p);
+ constexpr auto mes = _("(%s^ %c-%c, '*'で一覧, ESC) どの%sについて知りますか?", "(%s^s %c-%c, *=List, ESC=exit) Use which %s? ");
+ (void)strnfmt(out_val, 78, mes, p, I2A(0), I2A(num), p);
} else {
- (void)strnfmt(
- out_val, 78, _("(%s^ %c-%c, '*'で一覧, ESC) どの%sを使いますか?", "(%s^s %c-%c, *=List, ESC=exit) Use which %s? "), p, I2A(0), I2A(num), p);
+ constexpr auto mes = _("(%s^ %c-%c, '*'で一覧, ESC) どの%sを使いますか?", "(%s^s %c-%c, *=List, ESC=exit) Use which %s? ");
+ (void)strnfmt(out_val, 78, mes, p, I2A(0), I2A(num), p);
}
choice = always_show_list ? ESCAPE : 1;
bool comvert_hp_to_mp(PlayerType *player_ptr)
{
- int gain_sp = take_hit(player_ptr, DAMAGE_USELIFE, player_ptr->lev, _("HPからMPへの無謀な変換", "thoughtless conversion from HP to SP")) / 5;
+ constexpr auto mes = _("HPからMPへの無謀な変換", "thoughtless conversion from HP to SP");
+ auto gain_sp = take_hit(player_ptr, DAMAGE_USELIFE, player_ptr->lev, mes) / 5;
if (!gain_sp) {
msg_print(_("変換に失敗した。", "You failed to convert."));
player_ptr->redraw |= (PR_HP | PR_MP);
AvatarChanger ac(player_ptr, m_ptr);
ac.change_virtue();
if (r_ref.kind_flags.has(MonsterKindType::UNIQUE) && record_destroy_uniq) {
- exe_write_diary(this->player_ptr, DIARY_UNIQUE, 0, std::string(r_ref.name).append(m_ptr->mflag2.has(MonsterConstantFlagType::CLONED) ? _("(クローン)", "(Clone)") : "").data());
+ const auto clone_name = std::string(r_ref.name).append(m_ptr->mflag2.has(MonsterConstantFlagType::CLONED) ? _("(クローン)", "(Clone)") : "");
+ exe_write_diary(this->player_ptr, DIARY_UNIQUE, 0, clone_name.data());
}
sound(SOUND_KILL);
s64b_mul(&div_h, &div_l, 0, r_ptr->hdice * (ironman_nightmare ? 2 : 1) * compensation);
/* Special penalty in the wilderness */
- if (!this->player_ptr->current_floor_ptr->dun_level && (r_ptr->wilderness_flags.has_not(MonsterWildernessType::WILD_ONLY) || r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE))) {
- s64b_mul(&div_h, &div_l, 0, 5);
+ if (!this->player_ptr->current_floor_ptr->is_in_dungeon()) {
+ auto is_dungeon_monster = r_ptr->wilderness_flags.has_not(MonsterWildernessType::WILD_ONLY);
+ is_dungeon_monster |= r_ptr->kind_flags.has_not(MonsterKindType::UNIQUE);
+ if (is_dungeon_monster) {
+ s64b_mul(&div_h, &div_l, 0, 5);
+ }
}
/* Do ENERGY_DIVISION first to prevent overflaw */
}
}
- if ((player_ptr->esp_nonliving) && (r_ptr->kind_flags.has(MonsterKindType::NONLIVING) && r_ptr->kind_flags.has_none_of({ MonsterKindType::DEMON, MonsterKindType::UNDEAD }))) {
+ if ((player_ptr->esp_nonliving) && r_ptr->kind_flags.has(MonsterKindType::NONLIVING) && r_ptr->kind_flags.has_none_of({ MonsterKindType::DEMON, MonsterKindType::UNDEAD })) {
um_ptr->flag = true;
m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
if (m_ptr->is_original_ap() && !is_hallucinated) {
msa_ptr->ability_flags.reset(MonsterAbilityType::DRAIN_MANA);
}
- if (msa_ptr->ability_flags.has_any_of(RF_ABILITY_BOLT_MASK) && !clean_shot(player_ptr, msa_ptr->m_ptr->fy, msa_ptr->m_ptr->fx, player_ptr->y, player_ptr->x, false)) {
+ if (msa_ptr->ability_flags.has_any_of(RF_ABILITY_BOLT_MASK) &&
+ !clean_shot(player_ptr, msa_ptr->m_ptr->fy, msa_ptr->m_ptr->fx, player_ptr->y, player_ptr->x, false)) {
msa_ptr->ability_flags.reset(RF_ABILITY_BOLT_MASK);
}
msa_ptr->ability_flags.reset(MonsterAbilityType::RAISE_DEAD);
}
- if (msa_ptr->ability_flags.has(MonsterAbilityType::SPECIAL) && (msa_ptr->m_ptr->r_idx == MonsterRaceId::ROLENTO) && !summon_possible(player_ptr, msa_ptr->y, msa_ptr->x)) {
+ if (msa_ptr->ability_flags.has(MonsterAbilityType::SPECIAL) && (msa_ptr->m_ptr->r_idx == MonsterRaceId::ROLENTO) &&
+ !summon_possible(player_ptr, msa_ptr->y, msa_ptr->x)) {
msa_ptr->ability_flags.reset(MonsterAbilityType::SPECIAL);
}
}
if (m_ptr->r_idx == MonsterRaceId::SAURON) {
- msg_print(_("あなたは一瞬、瞼なき御目に凝視される感覚に襲われた!", "For a moment, you had the horrible sensation of being stared at by the lidless eye!"));
+ msg_print(_("あなたは一瞬、瞼なき御目に凝視される感覚に襲われた!",
+ "For a moment, you had the horrible sensation of being stared at by the lidless eye!"));
}
}
bool activate_grand_cross(PlayerType *player_ptr)
{
msg_print(_("「闇に還れ!」", "You say, 'Return to darkness!'"));
- (void)project(player_ptr, 0, 8, player_ptr->y, player_ptr->x, (randint1(100) + 200) * 2, AttributeType::HOLY_FIRE, PROJECT_KILL | PROJECT_ITEM | PROJECT_GRID);
+ constexpr auto flags = PROJECT_KILL | PROJECT_ITEM | PROJECT_GRID;
+ (void)project(player_ptr, 0, 8, player_ptr->y, player_ptr->x, (randint1(100) + 200) * 2, AttributeType::HOLY_FIRE, flags);
return true;
}
}
auto m_idx = player_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx;
- if ((m_idx == 0) || !player_has_los_bold(player_ptr, target_row, target_col) || !projectable(player_ptr, player_ptr->y, player_ptr->x, target_row, target_col)) {
+ if (m_idx == 0) {
+ return true;
+ }
+
+ if (!player_has_los_bold(player_ptr, target_row, target_col) || !projectable(player_ptr, player_ptr->y, player_ptr->x, target_row, target_col)) {
return true;
}
bool ScrollReadExecutor::read()
{
auto used_up = true;
+ auto *floor_ptr = this->player_ptr->current_floor_ptr;
switch (this->o_ptr->bi_key.sval().value()) {
case SV_SCROLL_DARKNESS:
if (!has_resist_blind(this->player_ptr) && !has_resist_dark(this->player_ptr)) {
}
case SV_SCROLL_SUMMON_MONSTER:
for (auto k = 0; k < randint1(3); k++) {
- if (summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, this->player_ptr->current_floor_ptr->dun_level, SUMMON_NONE,
+ if (summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE,
PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)) {
this->ident = true;
}
break;
case SV_SCROLL_SUMMON_UNDEAD:
for (auto k = 0; k < randint1(3); k++) {
- if (summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, this->player_ptr->current_floor_ptr->dun_level, SUMMON_UNDEAD,
+ if (summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD,
PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)) {
this->ident = true;
}
break;
case SV_SCROLL_SUMMON_PET:
if (summon_specific(
- this->player_ptr, -1, this->player_ptr->y, this->player_ptr->x, this->player_ptr->current_floor_ptr->dun_level, SUMMON_NONE, PM_ALLOW_GROUP | PM_FORCE_PET)) {
+ this->player_ptr, -1, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, PM_ALLOW_GROUP | PM_FORCE_PET)) {
this->ident = true;
}
}
}
+static bool is_bare_knuckle(PlayerType *player_ptr)
+{
+ auto bare_knuckle = is_martial_arts_mode(player_ptr);
+ bare_knuckle &= empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB);
+ return bare_knuckle;
+}
+
static short calc_to_damage(PlayerType *player_ptr, INVENTORY_IDX slot, bool is_real_value)
{
auto *o_ptr = &player_ptr->inventory_list[slot];
int bonus_to_d = 0;
o_ptr = &player_ptr->inventory_list[i];
const auto has_melee = has_melee_weapon(player_ptr, i);
- if (!o_ptr->is_valid() || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE) || ((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
+ if (!o_ptr->is_valid() || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE)) {
+ continue;
+ }
+
+ if (((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
continue;
}
}
if (main_attack_hand(player_ptr) == calc_hand) {
- if ((is_martial_arts_mode(player_ptr) && empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB)) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
+ if (is_bare_knuckle(player_ptr) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
int bonus_to_d = 0;
bonus_to_d = ((int)(adj_str_td[player_ptr->stat_index[A_STR]]) - 128) / 2;
damage += std::max<int>(bonus_to_d, 1);
break;
}
- if ((is_martial_arts_mode(player_ptr) && empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB)) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
+ if (is_bare_knuckle(player_ptr) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
int bonus_to_h = 0;
bonus_to_h = ((int)(adj_str_th[player_ptr->stat_index[A_STR]]) - 128) + ((int)(adj_dex_th[player_ptr->stat_index[A_DEX]]) - 128);
hit += std::max<int>(bonus_to_h, 1);
/* Ignore empty hands, handed weapons, bows and capture balls */
const auto has_melee = has_melee_weapon(player_ptr, i);
- if (!o_ptr->is_valid() || o_ptr->bi_key.tval() == ItemKindType::CAPTURE || (i == INVEN_MAIN_HAND && has_melee) || (i == INVEN_SUB_HAND && has_melee) || i == INVEN_BOW) {
+ if (!o_ptr->is_valid() || o_ptr->bi_key.tval() == ItemKindType::CAPTURE) {
+ continue;
+ }
+
+ if (((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
continue;
}
int bonus_to_h;
o_ptr = &player_ptr->inventory_list[i];
const auto has_melee = has_melee_weapon(player_ptr, i);
- if (!o_ptr->is_valid() || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE) || ((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || i == INVEN_BOW) {
+ if (!o_ptr->is_valid() || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE)) {
+ continue;
+ }
+
+ if (((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
continue;
}
flag = false;
+ const auto *floor_ptr = player_ptr->current_floor_ptr;
for (dir = 0; dir < 8; dir++) {
int dy = y + ddy_ddd[dir];
int dx = x + ddx_ddd[dir];
if (dir == 5) {
continue;
}
- if (player_ptr->current_floor_ptr->grid_array[dy][dx].m_idx) {
+ if (floor_ptr->grid_array[dy][dx].m_idx) {
flag = true;
}
}
- if (!is_cave_empty_bold(player_ptr, y, x) || player_ptr->current_floor_ptr->grid_array[y][x].is_icky() || (distance(y, x, player_ptr->y, player_ptr->x) > player_ptr->lev + 2)) {
+ const auto dist = distance(y, x, player_ptr->y, player_ptr->x);
+ if (!is_cave_empty_bold(player_ptr, y, x) || floor_ptr->grid_array[y][x].is_icky() || (dist > player_ptr->lev + 2)) {
msg_print(_("そこには移動できない。", "Can not teleport to there."));
continue;
}
y = player_ptr->y + ddy[dir];
x = player_ptr->x + ddx[dir];
- if (!player_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
+ const auto *floor_ptr = player_ptr->current_floor_ptr;
+ const auto &grid = floor_ptr->grid_array[y][x];
+ if (!grid.m_idx) {
msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
return std::nullopt;
}
do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
-
- if (!player_can_enter(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat)) {
+ if (!player_can_enter(player_ptr, grid.feat, 0) || is_trap(player_ptr, grid.feat)) {
break;
}
y += ddy[dir];
x += ddx[dir];
- if (player_can_enter(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat) && !player_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
+ if (player_can_enter(player_ptr, grid.feat, 0) && !is_trap(player_ptr, grid.feat) && !grid.m_idx) {
msg_print(nullptr);
(void)move_player_effect(player_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
}
return std::nullopt;
}
- if (!cave_player_teleportable_bold(player_ptr, y, x, TELEPORT_SPONTANEOUS) || (distance(y, x, player_ptr->y, player_ptr->x) > MAX_PLAYER_SIGHT / 2) || !projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
+ const auto is_teleportable = cave_player_teleportable_bold(player_ptr, y, x, TELEPORT_SPONTANEOUS);
+ const auto dist = distance(y, x, player_ptr->y, player_ptr->x);
+ if (!is_teleportable || (dist > MAX_PLAYER_SIGHT / 2) || !projectable(player_ptr, player_ptr->y, player_ptr->x, y, x)) {
msg_print(_("失敗!", "You cannot move to that place!"));
break;
}
damage *= player_ptr->num_blow[i];
total_damage += (damage / 100);
}
- project(player_ptr, 0, (cave_has_flag_bold(player_ptr->current_floor_ptr, y, x, TerrainCharacteristics::PROJECT) ? 5 : 0), y, x, total_damage * 3 / 2, AttributeType::METEOR,
- PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM);
+
+ auto *floor_ptr = player_ptr->current_floor_ptr;
+ const auto is_bold = cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::PROJECT);
+ constexpr auto flags = PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM;
+ project(player_ptr, 0, (is_bold ? 5 : 0), y, x, total_damage * 3 / 2, AttributeType::METEOR, flags);
}
break;
}
}
-static void draw_super_ray_pict(PlayerType *player_ptr, const std::map<int, std::vector<projection_path::const_iterator>> &pos_list_map, const std::vector<projection_path> &second_path_g_list, const std::pair<int, int> ¢er)
+static void draw_super_ray_pict(PlayerType *player_ptr, const std::map<int, std::vector<projection_path::const_iterator>> &pos_list_map,
+ const std::vector<projection_path> &second_path_g_list, const std::pair<int, int> ¢er)
{
if (delay_factor <= 0) {
return;
#include "util/bit-flags-calculator.h"
#include "view/display-messages.h"
+static bool is_in_special_floor(PlayerType *player_ptr)
+{
+ auto *floor_ptr = player_ptr->current_floor_ptr;
+ auto is_in_fixed_quest = inside_quest(floor_ptr->quest_number);
+ is_in_fixed_quest &= !inside_quest(random_quest_number(player_ptr, floor_ptr->dun_level));
+ return is_in_fixed_quest || floor_ptr->inside_arena || player_ptr->phase_out;
+}
+
/*!
* @brief モンスターへの単体抹殺処理サブルーチン / Delete a non-unique/non-quest monster
* @param m_idx 抹殺するモンスターID
*/
bool genocide_aux(PlayerType *player_ptr, MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, concptr spell_name)
{
- auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
+ auto *floor_ptr = player_ptr->current_floor_ptr;
+ auto *m_ptr = &floor_ptr->m_list[m_idx];
auto *r_ptr = &monraces_info[m_ptr->r_idx];
if (m_ptr->is_pet() && !player_cast) {
return false;
}
- bool resist = false;
+ auto resist = false;
if (r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || any_bits(r_ptr->flags1, RF1_QUESTOR)) {
resist = true;
} else if (r_ptr->flags7 & RF7_UNIQUE2) {
resist = true;
} else if (m_idx == player_ptr->riding) {
resist = true;
- } else if ((inside_quest(player_ptr->current_floor_ptr->quest_number) && !inside_quest(random_quest_number(player_ptr, player_ptr->current_floor_ptr->dun_level))) || player_ptr->current_floor_ptr->inside_arena || player_ptr->phase_out) {
+ } else if (is_in_special_floor(player_ptr)) {
resist = true;
} else if (player_cast && (r_ptr->level > randint0(power))) {
resist = true;
bool is_teleport_level_ineffective(PlayerType *player_ptr, MONSTER_IDX idx)
{
auto *floor_ptr = player_ptr->current_floor_ptr;
- bool is_special_floor = floor_ptr->inside_arena || player_ptr->phase_out || (inside_quest(floor_ptr->quest_number) && !inside_quest(random_quest_number(player_ptr, floor_ptr->dun_level)));
- bool is_invalid_floor = idx <= 0;
+ auto is_special_floor = floor_ptr->inside_arena;
+ is_special_floor |= player_ptr->phase_out;
+ is_special_floor |= inside_quest(floor_ptr->quest_number) && !inside_quest(random_quest_number(player_ptr, floor_ptr->dun_level));
+ auto is_invalid_floor = idx <= 0;
is_invalid_floor &= inside_quest(quest_number(player_ptr, floor_ptr->dun_level)) || (floor_ptr->dun_level >= dungeons_info[player_ptr->dungeon_idx].maxdepth);
is_invalid_floor &= player_ptr->current_floor_ptr->dun_level >= 1;
is_invalid_floor &= ironman_downward;
seiha = true;
}
- strnfmt(buf, sizeof(buf), _(" %c) %c%-12s : 最大 %d 階", " %c) %c%-16s : Max level %d"), static_cast<char>('a' + dun.size()), seiha ? '!' : ' ', d_ref.name.data(), (int)max_dlv[d_ref.idx]);
+ constexpr auto fmt = _(" %c) %c%-12s : 最大 %d 階", " %c) %c%-16s : Max level %d");
+ strnfmt(buf, sizeof(buf), fmt, static_cast<char>('a' + dun.size()), seiha ? '!' : ' ', d_ref.name.data(), (int)max_dlv[d_ref.idx]);
prt(buf, y + dun.size(), x);
dun.push_back(d_ref.idx);
}
return false;
}
char ppp[80];
- strnfmt(ppp, sizeof(ppp), _("何階にセットしますか (%d-%d):", "Reset to which level (%d-%d): "), (int)dungeons_info[select_dungeon].mindepth, (int)max_dlv[select_dungeon]);
+ constexpr auto mes = _("何階にセットしますか (%d-%d):", "Reset to which level (%d-%d): ");
+ strnfmt(ppp, sizeof(ppp), mes, (int)dungeons_info[select_dungeon].mindepth, (int)max_dlv[select_dungeon]);
char tmp_val[160];
strnfmt(tmp_val, sizeof(tmp_val), "%d", (int)std::max(player_ptr->current_floor_ptr->dun_level, 1));
max_dlv[select_dungeon] = dummy;
if (record_maxdepth) {
- exe_write_diary(player_ptr, DIARY_TRUMP, select_dungeon, _("フロア・リセットで", "using a scroll of reset recall"));
+ constexpr auto note = _("フロア・リセットで", "using a scroll of reset recall");
+ exe_write_diary(player_ptr, DIARY_TRUMP, select_dungeon, note);
}
#ifdef JP
msg_format("%sの帰還レベルを %d 階にセット。", dungeons_info[select_dungeon].name.data(), dummy);
}
auto *floor_ptr = player_ptr->current_floor_ptr;
- if (!in_bounds(floor_ptr, y, x) || !projectable(player_ptr, player_ptr->y, player_ptr->x, y, x) || !cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::PROJECT)) {
+ if (!in_bounds(floor_ptr, y, x)) {
+ continue;
+ }
+
+ const auto is_projectable = projectable(player_ptr, player_ptr->y, player_ptr->x, y, x);
+ if (!is_projectable || !cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::PROJECT)) {
continue;
}
POSITION y = player_ptr->y + ddy[dir];
POSITION x = player_ptr->x + ddx[dir];
player_ptr->fishing_dir = dir;
- if (!cave_has_flag_bold(player_ptr->current_floor_ptr, y, x, TerrainCharacteristics::WATER)) {
+ auto *floor_ptr = player_ptr->current_floor_ptr;
+ if (!cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::WATER)) {
msg_print(_("そこは水辺ではない。", "You can't fish here."));
return false;
}
- if (player_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
- const auto m_name = monster_desc(player_ptr, &player_ptr->current_floor_ptr->m_list[player_ptr->current_floor_ptr->grid_array[y][x].m_idx], 0);
+ if (floor_ptr->grid_array[y][x].m_idx) {
+ const auto m_name = monster_desc(player_ptr, &floor_ptr->m_list[floor_ptr->grid_array[y][x].m_idx], 0);
msg_format(_("%sが邪魔だ!", "%s^ is standing in your way."), m_name.data());
PlayerEnergy(player_ptr).reset_player_turn();
return false;
/*!
* @brief プレイヤーの継続行動を設定する。
- * @param typ 継続行動のID\n
- * #ACTION_NONE / #ACTION_SEARCH / #ACTION_REST / #ACTION_LEARN / #ACTION_FISH / #ACTION_MONK_STANCE / #ACTION_SAMURAI_STANCE / #ACTION_SING / #ACTION_HAYAGAKE / #ACTION_SPELL
+ * @param typ 継続行動のID
+ * NONE / SEARCH / REST / LEARN / FISH / MONK_STANCE / SAMURAI_STANCE / SING / HAYAGAKE / SPELL
* から選択。
*/
void set_action(PlayerType *player_ptr, uint8_t typ)
#include "view/display-messages.h"
/* Array of stat "descriptions" */
-static concptr desc_stat_pos[] = { _("強く", "stronger"), _("知的に", "smarter"), _("賢く", "wiser"), _("器用に", "more dextrous"), _("健康に", "healthier"), _("美しく", "cuter") };
+static concptr desc_stat_pos[] = {
+ _("強く", "stronger"),
+ _("知的に", "smarter"),
+ _("賢く", "wiser"),
+ _("器用に", "more dextrous"),
+ _("健康に", "healthier"),
+ _("美しく", "cuter")
+};
/* Array of stat "descriptions" */
-static concptr desc_stat_neg[] = { _("弱く", "weaker"), _("無知に", "stupider"), _("愚かに", "more naive"), _("不器用に", "clumsier"), _("不健康に", "more sickly"), _("醜く", "uglier") };
+static concptr desc_stat_neg[] = {
+ _("弱く", "weaker"),
+ _("無知に", "stupider"),
+ _("愚かに", "more naive"),
+ _("不器用に", "clumsier"),
+ _("不健康に", "more sickly"),
+ _("醜く", "uglier")
+};
/*!
* @brief プレイヤーの基本能力値を増加させる / Increases a stat by one randomized level -RAK-
bool is_oppose_acid(PlayerType *player_ptr)
{
- return player_ptr->oppose_acid || music_singing(player_ptr, MUSIC_RESIST) || PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ auto can_oppose_acid = player_ptr->oppose_acid != 0;
+ can_oppose_acid |= music_singing(player_ptr, MUSIC_RESIST);
+ can_oppose_acid |= PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ return can_oppose_acid;
}
bool is_oppose_elec(PlayerType *player_ptr)
{
- return player_ptr->oppose_elec || music_singing(player_ptr, MUSIC_RESIST) || PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ auto can_oppose_elec = player_ptr->oppose_elec != 0;
+ can_oppose_elec |= music_singing(player_ptr, MUSIC_RESIST);
+ can_oppose_elec |= PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ return can_oppose_elec;
}
bool is_oppose_fire(PlayerType *player_ptr)
{
- return player_ptr->oppose_fire || music_singing(player_ptr, MUSIC_RESIST) || (PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU) || (player_ptr->mimic_form == MimicKindType::DEMON) || (PlayerRace(player_ptr).equals(PlayerRaceType::BALROG) && player_ptr->lev > 44));
+ auto can_oppose_fire = player_ptr->oppose_fire != 0;
+ can_oppose_fire |= music_singing(player_ptr, MUSIC_RESIST);
+ can_oppose_fire |= PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ can_oppose_fire |= player_ptr->mimic_form == MimicKindType::DEMON;
+ can_oppose_fire |= (PlayerRace(player_ptr).equals(PlayerRaceType::BALROG) && player_ptr->lev > 44);
+ return can_oppose_fire;
}
bool is_oppose_cold(PlayerType *player_ptr)
{
- return player_ptr->oppose_cold || music_singing(player_ptr, MUSIC_RESIST) || PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ auto can_oppose_cold = player_ptr->oppose_cold != 0;
+ can_oppose_cold |= music_singing(player_ptr, MUSIC_RESIST);
+ can_oppose_cold |= PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU);
+ return can_oppose_cold;
}
bool is_oppose_pois(PlayerType *player_ptr)
{
PlayerClass pc(player_ptr);
- return player_ptr->oppose_pois || music_singing(player_ptr, MUSIC_RESIST) || pc.samurai_stance_is(SamuraiStanceType::MUSOU) || pc.has_poison_resistance();
+ auto can_oppose_pois = player_ptr->oppose_pois != 0;
+ can_oppose_pois |= music_singing(player_ptr, MUSIC_RESIST);
+ can_oppose_pois |= pc.samurai_stance_is(SamuraiStanceType::MUSOU);
+ can_oppose_pois |= pc.has_poison_resistance();
+ return can_oppose_pois;
}
return false;
}
- grid_type *g_ptr;
- g_ptr = &floor_ptr->grid_array[y][x];
- if (!g_ptr->is_mark()) {
+ auto &grid = floor_ptr->grid_array[y][x];
+ if (!grid.is_mark()) {
return false;
}
- if (g_ptr->cave_has_flag(TerrainCharacteristics::LESS) || g_ptr->cave_has_flag(TerrainCharacteristics::MORE) || g_ptr->cave_has_flag(TerrainCharacteristics::QUEST_ENTER) || g_ptr->cave_has_flag(TerrainCharacteristics::QUEST_EXIT)) {
- return true;
- }
-
- if (g_ptr->cave_has_flag(TerrainCharacteristics::STORE) || g_ptr->cave_has_flag(TerrainCharacteristics::BLDG)) {
- return true;
- }
-
- return false;
+ using Tc = TerrainCharacteristics;
+ auto is_acceptable = grid.cave_has_flag(Tc::LESS);
+ is_acceptable |= grid.cave_has_flag(Tc::MORE);
+ is_acceptable |= grid.cave_has_flag(Tc::QUEST_ENTER);
+ is_acceptable |= grid.cave_has_flag(Tc::QUEST_EXIT);
+ is_acceptable |= grid.cave_has_flag(Tc::STORE);
+ is_acceptable |= grid.cave_has_flag(Tc::BLDG);
+ return is_acceptable;
}
/*
dy = 0;
}
- if ((ts_ptr->y >= panel_row_min + ts_ptr->hgt) || (ts_ptr->y < panel_row_min) || (ts_ptr->x >= panel_col_min + ts_ptr->wid) || (ts_ptr->x < panel_col_min)) {
- if (change_panel(player_ptr, dy, dx)) {
- target_set_prepare(player_ptr, ys_interest, xs_interest, ts_ptr->mode);
- }
+ auto should_change_panel = ts_ptr->y >= panel_row_min + ts_ptr->hgt;
+ should_change_panel |= ts_ptr->y < panel_row_min;
+ should_change_panel |= ts_ptr->x >= panel_col_min + ts_ptr->wid;
+ should_change_panel |= ts_ptr->x < panel_col_min;
+ if (should_change_panel && change_panel(player_ptr, dy, dx)) {
+ target_set_prepare(player_ptr, ys_interest, xs_interest, ts_ptr->mode);
}
auto *floor_ptr = player_ptr->current_floor_ptr;
fix_floor_item_list(player_ptr, ts_ptr->y, ts_ptr->x);
/* Describe and Prompt (enable "TARGET_LOOK") */
- while ((ts_ptr->query = examine_grid(player_ptr, ts_ptr->y, ts_ptr->x, i2enum<target_type>(ts_ptr->mode | TARGET_LOOK), ts_ptr->info)) == 0) {
+ const auto target = i2enum<target_type>(ts_ptr->mode | TARGET_LOOK);
+ while ((ts_ptr->query = examine_grid(player_ptr, ts_ptr->y, ts_ptr->x, target, ts_ptr->info)) == 0) {
;
}
player_ptr->wild_mode = false;
player_ptr->leaving = true;
-
- exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, _(" しかし、生き返った。", " but revived."));
+ constexpr auto note = _(" しかし、生き返った。", " but revived.");
+ exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, note);
leave_floor(player_ptr);
}
disturb(player_ptr, false, true);
auto *floor_ptr = player_ptr->current_floor_ptr;
- if (floor_ptr->dun_level || inside_quest(player_ptr->current_floor_ptr->quest_number) || player_ptr->enter_dungeon) {
+ if (floor_ptr->dun_level || inside_quest(floor_ptr->quest_number) || player_ptr->enter_dungeon) {
msg_print(_("上に引っ張りあげられる感じがする!", "You feel yourself yanked upwards!"));
if (player_ptr->dungeon_idx) {
player_ptr->recall_dungeon = player_ptr->dungeon_idx;