X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmspell%2Fmspell-status.cpp;h=fb190480e980071bd078a9c03015446b0d083925;hb=23cf9fbcf5bcaddd0d8c2ff163a3c2791c201751;hp=55a25de2d0e5f8475a12527665e774fd2937a718;hpb=6fa7aaf06a57edf4217a51bc6eb780ac2ceea61c;p=hengbandforosx%2Fhengbandosx.git diff --git a/src/mspell/mspell-status.cpp b/src/mspell/mspell-status.cpp index 55a25de2d..fb190480e 100644 --- a/src/mspell/mspell-status.cpp +++ b/src/mspell/mspell-status.cpp @@ -8,7 +8,6 @@ #include "mspell/mspell-status.h" #include "blue-magic/blue-magic-checker.h" #include "core/disturbance.h" -#include "core/player-redraw-types.h" #include "effect/attribute-types.h" #include "effect/effect-processor.h" #include "mind/drs-types.h" @@ -32,9 +31,12 @@ #include "status/bad-status-setter.h" #include "status/base-status.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 "system/redrawing-flags-updater.h" +#include "timed-effect/player-blindness.h" +#include "timed-effect/timed-effects.h" #include "view/display-messages.h" mspell_cast_msg_bad_status_to_player::mspell_cast_msg_bad_status_to_player(concptr blind, concptr not_blind, concptr resist, concptr saved_throw) @@ -64,14 +66,13 @@ mspell_cast_msg_bad_status_to_monster::mspell_cast_msg_bad_status_to_monster(con void spell_badstatus_message_to_player(PlayerType *player_ptr, MONSTER_IDX m_idx, const mspell_cast_msg_bad_status_to_player &msgs, bool resist, bool saved_throw) { - GAME_TEXT m_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); + const auto m_name = monster_name(player_ptr, m_idx); disturb(player_ptr, true, true); - if (player_ptr->blind) { - msg_format(msgs.blind, m_name); + if (player_ptr->effects()->blindness()->is_blind()) { + msg_format(msgs.blind, m_name.data()); } else { - msg_format(msgs.not_blind, m_name); + msg_format(msgs.not_blind, m_name.data()); } if (resist) { @@ -99,13 +100,12 @@ void spell_badstatus_message_to_mons(PlayerType *player_ptr, MONSTER_IDX m_idx, bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); bool see_t = see_monster(player_ptr, t_idx); bool known = monster_near_player(floor_ptr, m_idx, t_idx); - GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); - monster_name(player_ptr, t_idx, t_name); + const auto m_name = monster_name(player_ptr, m_idx); + const auto t_name = monster_name(player_ptr, t_idx); if (known) { if (see_either) { - msg_format(msgs.default_msg, m_name, t_name); + msg_format(msgs.default_msg, m_name.data(), t_name.data()); } else { floor_ptr->monster_noise = true; } @@ -113,15 +113,15 @@ void spell_badstatus_message_to_mons(PlayerType *player_ptr, MONSTER_IDX m_idx, if (resist) { if (see_t) { - msg_format(msgs.resist, t_name); + msg_format(msgs.resist, t_name.data()); } } else if (saved_throw) { if (see_t) { - msg_format(msgs.saved_throw, t_name); + msg_format(msgs.saved_throw, t_name.data()); } } else { if (see_t) { - msg_format(msgs.success, t_name); + msg_format(msgs.success, t_name.data()); } } @@ -141,15 +141,14 @@ void spell_badstatus_message_to_mons(PlayerType *player_ptr, MONSTER_IDX m_idx, */ MonsterSpellResult spell_RF5_DRAIN_MANA(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type) { - GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); - monster_name(player_ptr, t_idx, t_name); + const auto m_name = monster_name(player_ptr, m_idx); + const auto t_name = monster_name(player_ptr, t_idx); if (target_type == MONSTER_TO_PLAYER) { disturb(player_ptr, true, true); } else if (target_type == MONSTER_TO_MONSTER && see_monster(player_ptr, m_idx)) { /* Basic message */ - msg_format(_("%^sは精神エネルギーを%sから吸いとった。", "%^s draws psychic energy from %s."), m_name, t_name); + msg_format(_("%s^は精神エネルギーを%sから吸いとった。", "%s^ draws psychic energy from %s."), m_name.data(), t_name.data()); } const auto dam = monspell_damage(player_ptr, MonsterAbilityType::DRAIN_MANA, m_idx, DAM_ROLL); @@ -178,20 +177,19 @@ MonsterSpellResult spell_RF5_DRAIN_MANA(PlayerType *player_ptr, POSITION y, POSI MonsterSpellResult spell_RF5_MIND_BLAST(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type) { auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx]; - bool seen = (!player_ptr->blind && m_ptr->ml); - GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); - monster_name(player_ptr, t_idx, t_name); + bool seen = (!player_ptr->effects()->blindness()->is_blind() && m_ptr->ml); + const auto m_name = monster_name(player_ptr, m_idx); + const auto t_name = monster_name(player_ptr, t_idx); if (target_type == MONSTER_TO_PLAYER) { disturb(player_ptr, true, true); if (!seen) { msg_print(_("何かがあなたの精神に念を放っているようだ。", "You feel something focusing on your mind.")); } else { - msg_format(_("%^sがあなたの瞳をじっとにらんでいる。", "%^s gazes deep into your eyes."), m_name); + msg_format(_("%s^があなたの瞳をじっとにらんでいる。", "%s^ gazes deep into your eyes."), m_name.data()); } } else if (target_type == MONSTER_TO_MONSTER && see_monster(player_ptr, m_idx)) { - msg_format(_("%^sは%sをじっと睨んだ。", "%^s gazes intently at %s."), m_name, t_name); + msg_format(_("%s^は%sをじっと睨んだ。", "%s^ gazes intently at %s."), m_name.data(), t_name.data()); } const auto dam = monspell_damage(player_ptr, MonsterAbilityType::MIND_BLAST, m_idx, DAM_ROLL); @@ -217,20 +215,19 @@ MonsterSpellResult spell_RF5_MIND_BLAST(PlayerType *player_ptr, POSITION y, POSI MonsterSpellResult spell_RF5_BRAIN_SMASH(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type) { auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx]; - bool seen = (!player_ptr->blind && m_ptr->ml); - GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); - monster_name(player_ptr, t_idx, t_name); + bool seen = (!player_ptr->effects()->blindness()->is_blind() && m_ptr->ml); + const auto m_name = monster_name(player_ptr, m_idx); + const auto t_name = monster_name(player_ptr, t_idx); if (target_type == MONSTER_TO_PLAYER) { disturb(player_ptr, true, true); if (!seen) { msg_print(_("何かがあなたの精神に念を放っているようだ。", "You feel something focusing on your mind.")); } else { - msg_format(_("%^sがあなたの瞳をじっとにらんでいる。", "%^s gazes deep into your eyes."), m_name); + msg_format(_("%s^があなたの瞳をじっとにらんでいる。", "%s^ gazes deep into your eyes."), m_name.data()); } } else if (target_type == MONSTER_TO_MONSTER && see_monster(player_ptr, m_idx)) { - msg_format(_("%^sは%sをじっと睨んだ。", "%^s gazes intently at %s."), m_name, t_name); + msg_format(_("%s^は%sをじっと睨んだ。", "%s^ gazes intently at %s."), m_name.data(), t_name.data()); } const auto dam = monspell_damage(player_ptr, MonsterAbilityType::BRAIN_SMASH, m_idx, DAM_ROLL); @@ -256,8 +253,8 @@ MonsterSpellResult spell_RF5_SCARE(MONSTER_IDX m_idx, PlayerType *player_ptr, MO res.learnable = target_type == MONSTER_TO_PLAYER; auto *floor_ptr = player_ptr->current_floor_ptr; - monster_type *t_ptr = &floor_ptr->m_list[t_idx]; - monster_race *tr_ptr = &r_info[t_ptr->r_idx]; + MonsterEntity *t_ptr = &floor_ptr->m_list[t_idx]; + MonsterRaceInfo *tr_ptr = &monraces_info[t_ptr->r_idx]; DEPTH rlev = monster_level_idx(floor_ptr, m_idx); bool resist, saving_throw; @@ -265,8 +262,8 @@ MonsterSpellResult spell_RF5_SCARE(MONSTER_IDX m_idx, PlayerType *player_ptr, MO resist = (has_resist_fear(player_ptr) != 0); saving_throw = (randint0(100 + rlev / 2) < player_ptr->skill_sav); - mspell_cast_msg_bad_status_to_player msg(_("%^sが何かをつぶやくと、恐ろしげな音が聞こえた。", "%^s mumbles, and you hear scary noises."), - _("%^sが恐ろしげな幻覚を作り出した。", "%^s casts a fearful illusion."), _("しかし恐怖に侵されなかった。", "You refuse to be frightened."), + mspell_cast_msg_bad_status_to_player msg(_("%s^が何かをつぶやくと、恐ろしげな音が聞こえた。", "%s^ mumbles, and you hear scary noises."), + _("%s^が恐ろしげな幻覚を作り出した。", "%s^ casts a fearful illusion."), _("しかし恐怖に侵されなかった。", "You refuse to be frightened."), _("しかし恐怖に侵されなかった。", "You refuse to be frightened.")); spell_badstatus_message_to_player(player_ptr, m_idx, msg, resist, saving_throw); @@ -286,14 +283,14 @@ MonsterSpellResult spell_RF5_SCARE(MONSTER_IDX m_idx, PlayerType *player_ptr, MO resist = ((tr_ptr->flags3 & RF3_NO_FEAR) != 0); saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); - mspell_cast_msg_bad_status_to_monster msg(_("%^sが恐ろしげな幻覚を作り出した。", "%^s casts a fearful illusion in front of %s."), - _("%^sは恐怖を感じない。", "%^s refuses to be frightened."), _("%^sは恐怖を感じない。", "%^s refuses to be frightened."), - _("%^sは恐怖して逃げ出した!", "%^s flees in terror!")); + mspell_cast_msg_bad_status_to_monster msg(_("%s^が恐ろしげな幻覚を作り出した。", "%s^ casts a fearful illusion in front of %s."), + _("%s^は恐怖を感じない。", "%s^ refuses to be frightened."), _("%s^は恐怖を感じない。", "%s^ refuses to be frightened."), + _("%s^は恐怖して逃げ出した!", "%s^ flees in terror!")); spell_badstatus_message_to_mons(player_ptr, m_idx, t_idx, msg, resist, saving_throw); if (!resist && !saving_throw) { - set_monster_monfear(player_ptr, t_idx, monster_fear_remaining(t_ptr) + randint0(4) + 4); + set_monster_monfear(player_ptr, t_idx, t_ptr->get_remaining_fear() + randint0(4) + 4); } return res; @@ -313,8 +310,8 @@ MonsterSpellResult spell_RF5_BLIND(MONSTER_IDX m_idx, PlayerType *player_ptr, MO res.learnable = target_type == MONSTER_TO_PLAYER; auto *floor_ptr = player_ptr->current_floor_ptr; - monster_type *t_ptr = &floor_ptr->m_list[t_idx]; - monster_race *tr_ptr = &r_info[t_ptr->r_idx]; + MonsterEntity *t_ptr = &floor_ptr->m_list[t_idx]; + MonsterRaceInfo *tr_ptr = &monraces_info[t_ptr->r_idx]; DEPTH rlev = monster_level_idx(floor_ptr, m_idx); bool resist, saving_throw; @@ -322,14 +319,14 @@ MonsterSpellResult spell_RF5_BLIND(MONSTER_IDX m_idx, PlayerType *player_ptr, MO resist = (has_resist_blind(player_ptr) != 0); saving_throw = (randint0(100 + rlev / 2) < player_ptr->skill_sav); - mspell_cast_msg_bad_status_to_player msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), - _("%^sが呪文を唱えてあなたの目をくらました!", "%^s casts a spell, burning your eyes!"), _("しかし効果がなかった!", "You are unaffected!"), + mspell_cast_msg_bad_status_to_player msg(_("%s^が何かをつぶやいた。", "%s^ mumbles."), + _("%s^が呪文を唱えてあなたの目をくらました!", "%s^ casts a spell, burning your eyes!"), _("しかし効果がなかった!", "You are unaffected!"), _("しかし効力を跳ね返した!", "You resist the effects!")); spell_badstatus_message_to_player(player_ptr, m_idx, msg, resist, saving_throw); if (!resist && !saving_throw) { - (void)BadStatusSetter(player_ptr).blindness(12 + randint0(4)); + (void)BadStatusSetter(player_ptr).set_blindness(12 + randint0(4)); } update_smart_learn(player_ptr, m_idx, DRS_BLIND); @@ -341,25 +338,24 @@ MonsterSpellResult spell_RF5_BLIND(MONSTER_IDX m_idx, PlayerType *player_ptr, MO } concptr msg_default; - GAME_TEXT t_name[MAX_NLEN]; - monster_name(player_ptr, t_idx, t_name); + const auto t_name = monster_name(player_ptr, t_idx); - if (streq(t_name, "it")) { - msg_default = _("%sは呪文を唱えて%sの目を焼き付かせた。", "%^s casts a spell, burning %ss eyes."); + if (streq(t_name.data(), "it")) { + msg_default = _("%sは呪文を唱えて%sの目を焼き付かせた。", "%s^ casts a spell, burning %ss eyes."); } else { - msg_default = _("%sは呪文を唱えて%sの目を焼き付かせた。", "%^s casts a spell, burning %s's eyes."); + msg_default = _("%sは呪文を唱えて%sの目を焼き付かせた。", "%s^ casts a spell, burning %s's eyes."); } resist = ((tr_ptr->flags3 & RF3_NO_CONF) != 0); saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); - mspell_cast_msg_bad_status_to_monster msg(msg_default, _("%^sには効果がなかった。", "%^s is unaffected."), - _("%^sには効果がなかった。", "%^s is unaffected."), _("%^sは目が見えなくなった! ", "%^s is blinded!")); + mspell_cast_msg_bad_status_to_monster msg(msg_default, _("%s^には効果がなかった。", "%s^ is unaffected."), + _("%s^には効果がなかった。", "%s^ is unaffected."), _("%s^は目が見えなくなった! ", "%s^ is blinded!")); spell_badstatus_message_to_mons(player_ptr, m_idx, t_idx, msg, resist, saving_throw); if (!resist && !saving_throw) { - (void)set_monster_confused(player_ptr, t_idx, monster_confused_remaining(t_ptr) + 12 + randint0(4)); + (void)set_monster_confused(player_ptr, t_idx, t_ptr->get_remaining_confusion() + 12 + randint0(4)); } return res; @@ -379,8 +375,8 @@ MonsterSpellResult spell_RF5_CONF(MONSTER_IDX m_idx, PlayerType *player_ptr, MON res.learnable = target_type == MONSTER_TO_PLAYER; auto *floor_ptr = player_ptr->current_floor_ptr; - monster_type *t_ptr = &floor_ptr->m_list[t_idx]; - monster_race *tr_ptr = &r_info[t_ptr->r_idx]; + MonsterEntity *t_ptr = &floor_ptr->m_list[t_idx]; + MonsterRaceInfo *tr_ptr = &monraces_info[t_ptr->r_idx]; DEPTH rlev = monster_level_idx(floor_ptr, m_idx); bool resist, saving_throw; @@ -388,8 +384,8 @@ MonsterSpellResult spell_RF5_CONF(MONSTER_IDX m_idx, PlayerType *player_ptr, MON resist = (has_resist_conf(player_ptr) != 0); saving_throw = (randint0(100 + rlev / 2) < player_ptr->skill_sav); - mspell_cast_msg_bad_status_to_player msg(_("%^sが何かをつぶやくと、頭を悩ます音がした。", "%^s mumbles, and you hear puzzling noises."), - _("%^sが誘惑的な幻覚を作り出した。", "%^s creates a mesmerising illusion."), + mspell_cast_msg_bad_status_to_player msg(_("%s^が何かをつぶやくと、頭を悩ます音がした。", "%s^ mumbles, and you hear puzzling noises."), + _("%s^が誘惑的な幻覚を作り出した。", "%s^ creates a mesmerising illusion."), _("しかし幻覚にはだまされなかった。", "You disbelieve the feeble spell."), _("しかし幻覚にはだまされなかった。", "You disbelieve the feeble spell.")); @@ -410,14 +406,14 @@ MonsterSpellResult spell_RF5_CONF(MONSTER_IDX m_idx, PlayerType *player_ptr, MON resist = ((tr_ptr->flags3 & RF3_NO_CONF) != 0); saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); - mspell_cast_msg_bad_status_to_monster msg(_("%^sが%sの前に幻惑的な幻をつくり出した。", "%^s casts a mesmerizing illusion in front of %s."), - _("%^sは惑わされなかった。", "%^s disbelieves the feeble spell."), _("%^sは惑わされなかった。", "%^s disbelieves the feeble spell."), - _("%^sは混乱したようだ。", "%^s seems confused.")); + mspell_cast_msg_bad_status_to_monster msg(_("%s^が%sの前に幻惑的な幻をつくり出した。", "%s^ casts a mesmerizing illusion in front of %s."), + _("%s^は惑わされなかった。", "%s^ disbelieves the feeble spell."), _("%s^は惑わされなかった。", "%s^ disbelieves the feeble spell."), + _("%s^は混乱したようだ。", "%s^ seems confused.")); spell_badstatus_message_to_mons(player_ptr, m_idx, t_idx, msg, resist, saving_throw); if (!resist && !saving_throw) { - (void)set_monster_confused(player_ptr, t_idx, monster_confused_remaining(t_ptr) + 12 + randint0(4)); + (void)set_monster_confused(player_ptr, t_idx, t_ptr->get_remaining_confusion() + 12 + randint0(4)); } return res; @@ -437,8 +433,8 @@ MonsterSpellResult spell_RF5_HOLD(MONSTER_IDX m_idx, PlayerType *player_ptr, MON res.learnable = target_type == MONSTER_TO_PLAYER; auto *floor_ptr = player_ptr->current_floor_ptr; - monster_type *t_ptr = &floor_ptr->m_list[t_idx]; - monster_race *tr_ptr = &r_info[t_ptr->r_idx]; + MonsterEntity *t_ptr = &floor_ptr->m_list[t_idx]; + MonsterRaceInfo *tr_ptr = &monraces_info[t_ptr->r_idx]; DEPTH rlev = monster_level_idx(floor_ptr, m_idx); bool resist, saving_throw; @@ -446,8 +442,8 @@ MonsterSpellResult spell_RF5_HOLD(MONSTER_IDX m_idx, PlayerType *player_ptr, MON resist = (player_ptr->free_act != 0); saving_throw = (randint0(100 + rlev / 2) < player_ptr->skill_sav); - mspell_cast_msg_bad_status_to_player msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), - _("%^sがあなたの目をじっと見つめた!", "%^s stares deep into your eyes!"), _("しかし効果がなかった!", "You are unaffected!"), + mspell_cast_msg_bad_status_to_player msg(_("%s^が何かをつぶやいた。", "%s^ mumbles."), + _("%s^があなたの目をじっと見つめた!", "%s^ stares deep into your eyes!"), _("しかし効果がなかった!", "You are unaffected!"), _("しかし効力を跳ね返した!", "You resist the effects!")); spell_badstatus_message_to_player(player_ptr, m_idx, msg, (bool)resist, saving_throw); @@ -467,13 +463,13 @@ MonsterSpellResult spell_RF5_HOLD(MONSTER_IDX m_idx, PlayerType *player_ptr, MON resist = (tr_ptr->kind_flags.has(MonsterKindType::UNIQUE) || (tr_ptr->flags3 & RF3_NO_STUN) != 0); saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); - mspell_cast_msg_bad_status_to_monster msg(_("%^sは%sをじっと見つめた。", "%^s stares intently at %s."), - _("%^sには効果がなかった。", "%^s is unaffected."), _("%^sには効果がなかった。", "%^s is unaffected."), _("%^sは麻痺した!", "%^s is paralyzed!")); + mspell_cast_msg_bad_status_to_monster msg(_("%s^は%sをじっと見つめた。", "%s^ stares intently at %s."), + _("%s^には効果がなかった。", "%s^ is unaffected."), _("%s^には効果がなかった。", "%s^ is unaffected."), _("%s^は麻痺した!", "%s^ is paralyzed!")); spell_badstatus_message_to_mons(player_ptr, m_idx, t_idx, msg, (bool)resist, saving_throw); if (!resist && !saving_throw) { - (void)set_monster_stunned(player_ptr, t_idx, monster_stunned_remaining(t_ptr) + randint1(4) + 4); + (void)set_monster_stunned(player_ptr, t_idx, t_ptr->get_remaining_stun() + randint1(4) + 4); } return res; @@ -492,21 +488,19 @@ MonsterSpellResult spell_RF6_HASTE(PlayerType *player_ptr, MONSTER_IDX m_idx, MO { bool see_m = see_monster(player_ptr, m_idx); auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx]; - GAME_TEXT m_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); - char m_poss[10]; - monster_desc(player_ptr, m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE); + const auto m_name = monster_name(player_ptr, m_idx); + const auto m_poss = monster_desc(player_ptr, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE); - mspell_cast_msg msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), - _("%^sが自分の体に念を送った。", format("%%^s concentrates on %s body.", m_poss)), - _("%^sが自分の体に念を送った。", format("%%^s concentrates on %s body.", m_poss)), - _("%^sが自分の体に念を送った。", format("%%^s concentrates on %s body.", m_poss))); + mspell_cast_msg msg(_("%s^が何かをつぶやいた。", "%s^ mumbles."), + _("%s^が自分の体に念を送った。", format("%%s^ concentrates on %s body.", m_poss.data())), + _("%s^が自分の体に念を送った。", format("%%s^ concentrates on %s body.", m_poss.data())), + _("%s^が自分の体に念を送った。", format("%%s^ concentrates on %s body.", m_poss.data()))); - monspell_message_base(player_ptr, m_idx, t_idx, msg, player_ptr->blind > 0, target_type); + monspell_message_base(player_ptr, m_idx, t_idx, msg, player_ptr->effects()->blindness()->is_blind(), target_type); - if (set_monster_fast(player_ptr, m_idx, monster_fast_remaining(m_ptr) + 100)) { + if (set_monster_fast(player_ptr, m_idx, m_ptr->get_remaining_acceleration() + 100)) { if (target_type == MONSTER_TO_PLAYER || (target_type == MONSTER_TO_MONSTER && see_m)) { - msg_format(_("%^sの動きが速くなった。", "%^s starts moving faster."), m_name); + msg_format(_("%s^の動きが速くなった。", "%s^ starts moving faster."), m_name.data()); } } @@ -527,8 +521,8 @@ MonsterSpellResult spell_RF5_SLOW(MONSTER_IDX m_idx, PlayerType *player_ptr, MON res.learnable = target_type == MONSTER_TO_PLAYER; auto *floor_ptr = player_ptr->current_floor_ptr; - monster_type *t_ptr = &floor_ptr->m_list[t_idx]; - monster_race *tr_ptr = &r_info[t_ptr->r_idx]; + MonsterEntity *t_ptr = &floor_ptr->m_list[t_idx]; + MonsterRaceInfo *tr_ptr = &monraces_info[t_ptr->r_idx]; DEPTH rlev = monster_level_idx(floor_ptr, m_idx); bool resist, saving_throw; @@ -536,14 +530,14 @@ MonsterSpellResult spell_RF5_SLOW(MONSTER_IDX m_idx, PlayerType *player_ptr, MON resist = (has_resist_conf(player_ptr) != 0); saving_throw = (randint0(100 + rlev / 2) < player_ptr->skill_sav); - mspell_cast_msg_bad_status_to_player msg(_("%^sがあなたの筋力を吸い取ろうとした!", "%^s drains power from your muscles!"), - _("%^sがあなたの筋力を吸い取ろうとした!", "%^s drains power from your muscles!"), _("しかし効果がなかった!", "You are unaffected!"), + mspell_cast_msg_bad_status_to_player msg(_("%s^があなたの筋力を吸い取ろうとした!", "%s^ drains power from your muscles!"), + _("%s^があなたの筋力を吸い取ろうとした!", "%s^ drains power from your muscles!"), _("しかし効果がなかった!", "You are unaffected!"), _("しかし効力を跳ね返した!", "You resist the effects!")); spell_badstatus_message_to_player(player_ptr, m_idx, msg, resist, saving_throw); if (!resist && !saving_throw) { - (void)BadStatusSetter(player_ptr).mod_slowness(randint0(4) + 4, false); + (void)BadStatusSetter(player_ptr).mod_deceleration(randint0(4) + 4, false); } update_smart_learn(player_ptr, m_idx, DRS_FREE); @@ -555,25 +549,24 @@ MonsterSpellResult spell_RF5_SLOW(MONSTER_IDX m_idx, PlayerType *player_ptr, MON } concptr msg_default; - GAME_TEXT t_name[MAX_NLEN]; - monster_name(player_ptr, t_idx, t_name); + const auto t_name = monster_name(player_ptr, t_idx); - if (streq(t_name, "it")) { - msg_default = _("%sが%sの筋肉から力を吸いとった。", "%^s drains power from %ss muscles."); + if (streq(t_name.data(), "it")) { + msg_default = _("%sが%sの筋肉から力を吸いとった。", "%s^ drains power from %ss muscles."); } else { - msg_default = _("%sが%sの筋肉から力を吸いとった。", "%^s drains power from %s's muscles."); + msg_default = _("%sが%sの筋肉から力を吸いとった。", "%s^ drains power from %s's muscles."); } resist = (tr_ptr->kind_flags.has(MonsterKindType::UNIQUE)); saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); - mspell_cast_msg_bad_status_to_monster msg(msg_default, _("%^sには効果がなかった。", "%^s is unaffected."), - _("%^sには効果がなかった。", "%^s is unaffected."), _("%sの動きが遅くなった。", "%^s starts moving slower.")); + mspell_cast_msg_bad_status_to_monster msg(msg_default, _("%s^には効果がなかった。", "%s^ is unaffected."), + _("%s^には効果がなかった。", "%s^ is unaffected."), _("%sの動きが遅くなった。", "%s^ starts moving slower.")); spell_badstatus_message_to_mons(player_ptr, m_idx, t_idx, msg, resist, saving_throw); if (!resist && !saving_throw) { - set_monster_slow(player_ptr, t_idx, monster_slow_remaining(t_ptr) + 50); + set_monster_slow(player_ptr, t_idx, t_ptr->get_remaining_deceleration() + 50); } return res; @@ -596,52 +589,52 @@ MonsterSpellResult spell_RF6_HEAL(PlayerType *player_ptr, MONSTER_IDX m_idx, MON auto *floor_ptr = player_ptr->current_floor_ptr; auto *m_ptr = &floor_ptr->m_list[m_idx]; DEPTH rlev = monster_level_idx(floor_ptr, m_idx); - bool seen = (!player_ptr->blind && m_ptr->ml); - GAME_TEXT m_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); - char m_poss[10]; - monster_desc(player_ptr, m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE); + const auto is_blind = player_ptr->effects()->blindness()->is_blind(); + const auto seen = (!is_blind && m_ptr->ml); + const auto m_poss = monster_desc(player_ptr, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE); - msg.to_player_true = _("%^sが何かをつぶやいた。", "%^s mumbles."); - msg.to_mons_true = _("%^sは自分の傷に念を集中した。", format("%%^s concentrates on %s wounds.", m_poss)); - msg.to_player_false = _("%^sが自分の傷に集中した。", format("%%^s concentrates on %s wounds.", m_poss)); - msg.to_mons_false = _("%^sは自分の傷に念を集中した。", format("%%^s concentrates on %s wounds.", m_poss)); + msg.to_player_true = _("%s^が何かをつぶやいた。", "%s^ mumbles."); + msg.to_mons_true = _("%s^は自分の傷に念を集中した。", format("%%s^ concentrates on %s wounds.", m_poss.data())); + msg.to_player_false = _("%s^が自分の傷に集中した。", format("%%s^ concentrates on %s wounds.", m_poss.data())); + msg.to_mons_false = _("%s^は自分の傷に念を集中した。", format("%%s^ concentrates on %s wounds.", m_poss.data())); - monspell_message_base(player_ptr, m_idx, t_idx, msg, player_ptr->blind > 0, target_type); + monspell_message_base(player_ptr, m_idx, t_idx, msg, is_blind, target_type); m_ptr->hp += (rlev * 6); if (m_ptr->hp >= m_ptr->maxhp) { /* Fully healed */ m_ptr->hp = m_ptr->maxhp; - msg.to_player_true = _("%^sは完全に治ったようだ!", "%^s sounds completely healed!"); - msg.to_mons_true = _("%^sは完全に治ったようだ!", "%^s sounds completely healed!"); - msg.to_player_false = _("%^sは完全に治った!", "%^s looks completely healed!"); - msg.to_mons_false = _("%^sは完全に治った!", "%^s looks completely healed!"); + msg.to_player_true = _("%s^は完全に治ったようだ!", "%s^ sounds completely healed!"); + msg.to_mons_true = _("%s^は完全に治ったようだ!", "%s^ sounds completely healed!"); + msg.to_player_false = _("%s^は完全に治った!", "%s^ looks completely healed!"); + msg.to_mons_false = _("%s^は完全に治った!", "%s^ looks completely healed!"); } else { - msg.to_player_true = _("%^sは体力を回復したようだ。", "%^s sounds healthier."); - msg.to_mons_true = _("%^sは体力を回復したようだ。", "%^s sounds healthier."); - msg.to_player_false = _("%^sは体力を回復したようだ。", "%^s looks healthier."); - msg.to_mons_false = _("%^sは体力を回復したようだ。", "%^s looks healthier."); + msg.to_player_true = _("%s^は体力を回復したようだ。", "%s^ sounds healthier."); + msg.to_mons_true = _("%s^は体力を回復したようだ。", "%s^ sounds healthier."); + msg.to_player_false = _("%s^は体力を回復したようだ。", "%s^ looks healthier."); + msg.to_mons_false = _("%s^は体力を回復したようだ。", "%s^ looks healthier."); } monspell_message_base(player_ptr, m_idx, t_idx, msg, !seen, target_type); - + auto &rfu = RedrawingFlagsUpdater::get_instance(); if (player_ptr->health_who == m_idx) { - player_ptr->redraw |= (PR_HEALTH); + rfu.set_flag(MainWindowRedrawingFlag::HEALTH); } + if (player_ptr->riding == m_idx) { - player_ptr->redraw |= (PR_UHEALTH); + rfu.set_flag(MainWindowRedrawingFlag::UHEALTH); } - if (!monster_fear_remaining(m_ptr)) { + if (!m_ptr->is_fearful()) { return res; } (void)set_monster_monfear(player_ptr, m_idx, 0); if (see_monster(player_ptr, m_idx)) { - msg_format(_("%^sは勇気を取り戻した。", format("%%^s recovers %s courage.", m_poss)), m_name); + const auto m_name = monster_name(player_ptr, m_idx); + msg_print(_(format("%s^は勇気を取り戻した。", m_name.data()), format("%s^ recovers %s courage.", m_name.data(), m_poss.data()))); } return res; @@ -659,32 +652,31 @@ MonsterSpellResult spell_RF6_HEAL(PlayerType *player_ptr, MONSTER_IDX m_idx, MON MonsterSpellResult spell_RF6_INVULNER(PlayerType *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type) { auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx]; - bool seen = (!player_ptr->blind && m_ptr->ml); - mspell_cast_msg msg(_("%^sが何かを力強くつぶやいた。", "%^s mumbles powerfully."), - _("%^sが何かを力強くつぶやいた。", "%^s mumbles powerfully."), _("%sは無傷の球の呪文を唱えた。", "%^s casts a Globe of Invulnerability."), - _("%sは無傷の球の呪文を唱えた。", "%^s casts a Globe of Invulnerability.")); + bool seen = (!player_ptr->effects()->blindness()->is_blind() && m_ptr->ml); + mspell_cast_msg msg(_("%s^が何かを力強くつぶやいた。", "%s^ mumbles powerfully."), + _("%s^が何かを力強くつぶやいた。", "%s^ mumbles powerfully."), _("%sは無傷の球の呪文を唱えた。", "%s^ casts a Globe of Invulnerability."), + _("%sは無傷の球の呪文を唱えた。", "%s^ casts a Globe of Invulnerability.")); monspell_message_base(player_ptr, m_idx, t_idx, msg, !seen, target_type); if (m_ptr->ml) { - MONRACE_IDX r_idx = m_ptr->r_idx; - GAME_TEXT m_name[MAX_NLEN]; - monster_desc(player_ptr, m_name, m_ptr, MD_NONE); + MonsterRaceId r_idx = m_ptr->r_idx; + const auto m_name = monster_desc(player_ptr, m_ptr, MD_NONE); switch (r_idx) { - case MON_MARIO: - case MON_LUIGI: - msg_format(_("%sはスターを取った!", "%^s got a star!"), m_name); + case MonsterRaceId::MARIO: + case MonsterRaceId::LUIGI: + msg_format(_("%sはスターを取った!", "%s^ got a star!"), m_name.data()); break; - case MON_DIAVOLO: + case MonsterRaceId::DIAVOLO: msg_print(_("『読める』………動きの『軌跡』が読める……", "'Read'......... I can read the 'trajectory' of movement...")); break; default: - msg_format(_("%sの身体がまばゆく輝き始めた!", "The body of %^s began to shine dazzlingly!"), m_name); + msg_format(_("%sの身体がまばゆく輝き始めた!", "The body of %s^ began to shine dazzlingly!"), m_name.data()); break; } } - if (!monster_invulner_remaining(m_ptr)) { + if (!m_ptr->is_invulnerable()) { (void)set_monster_invulner(player_ptr, m_idx, randint1(4) + 4, false); } @@ -701,12 +693,11 @@ MonsterSpellResult spell_RF6_INVULNER(PlayerType *player_ptr, MONSTER_IDX m_idx, MonsterSpellResult spell_RF6_FORGET(PlayerType *player_ptr, MONSTER_IDX m_idx) { DEPTH rlev = monster_level_idx(player_ptr->current_floor_ptr, m_idx); - GAME_TEXT m_name[MAX_NLEN]; - monster_name(player_ptr, m_idx, m_name); + const auto m_name = monster_name(player_ptr, m_idx); disturb(player_ptr, true, true); - msg_format(_("%^sがあなたの記憶を消去しようとしている。", "%^s tries to blank your mind."), m_name); + msg_format(_("%s^があなたの記憶を消去しようとしている。", "%s^ tries to blank your mind."), m_name.data()); if (randint0(100 + rlev / 2) < player_ptr->skill_sav) { msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));