OSDN Git Service

simpler_monspell_message()のメッセージを構造体化
authorSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sun, 12 Sep 2021 12:06:22 +0000 (21:06 +0900)
committerSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Tue, 12 Oct 2021 03:39:20 +0000 (12:39 +0900)
src/mspell/mspell-floor.cpp
src/mspell/mspell-particularity.cpp
src/mspell/mspell-special.cpp
src/mspell/mspell-util.cpp
src/mspell/mspell-util.h
src/mspell/specified-summon.cpp

index 7174bf1..5c6a1e1 100644 (file)
  */
 MonsterSpellResult spell_RF4_SHRIEK(MONSTER_IDX m_idx, player_type *player_ptr, MONSTER_IDX t_idx, int target_type)
 {
-    simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sがかん高い金切り声をあげた。", "%^s makes a high pitched shriek."),
-        _("%^sが%sに向かって叫んだ。", "%^s shrieks at %s."), target_type);
+    mspell_cast_msg_simple msg(_("%^sがかん高い金切り声をあげた。", "%^s makes a high pitched shriek."),
+        _("%^sが%sに向かって叫んだ。", "%^s shrieks at %s."));
+
+    simple_monspell_message(player_ptr, m_idx, t_idx, msg, target_type);
 
     auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
     auto result = MonsterSpellResult::make_valid();
@@ -175,8 +177,10 @@ MonsterSpellResult spell_RF6_TELE_TO(player_type *player_ptr, MONSTER_IDX m_idx,
     monster_type *t_ptr = &floor_ptr->m_list[t_idx];
     monster_race *tr_ptr = &r_info[t_ptr->r_idx];
 
-    simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sがあなたを引き戻した。", "%^s commands you to return."),
-        _("%^sが%sを引き戻した。", "%^s commands %s to return."), TARGET_TYPE);
+    mspell_cast_msg_simple msg(_("%^sがあなたを引き戻した。", "%^s commands you to return."),
+        _("%^sが%sを引き戻した。", "%^s commands %s to return."));
+
+    simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
 
     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
         teleport_player_to(player_ptr, m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
@@ -240,8 +244,10 @@ MonsterSpellResult spell_RF6_TELE_AWAY(player_type *player_ptr, MONSTER_IDX m_id
     monster_type *t_ptr = &floor_ptr->m_list[t_idx];
     monster_race *tr_ptr = &r_info[t_ptr->r_idx];
 
-    simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sにテレポートさせられた。", "%^s teleports you away."),
-        _("%^sは%sをテレポートさせた。", "%^s teleports %s away."), TARGET_TYPE);
+    mspell_cast_msg_simple msg(_("%^sにテレポートさせられた。", "%^s teleports you away."),
+        _("%^sは%sをテレポートさせた。", "%^s teleports %s away."));
+
+    simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
 
     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
         if (is_echizen(player_ptr))
index 8341c70..8fec73f 100644 (file)
@@ -62,8 +62,10 @@ MonsterSpellResult spell_RF4_ROCKET(player_type *player_ptr, POSITION y, POSITIO
  */
 MonsterSpellResult spell_RF6_HAND_DOOM(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-    simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sが<破滅の手>を放った!", "%^s invokes the Hand of Doom!"),
-        _("%^sが%sに<破滅の手>を放った!", "%^s invokes the Hand of Doom upon %s!"), TARGET_TYPE);
+    mspell_cast_msg_simple msg(_("%^sが<破滅の手>を放った!", "%^s invokes the Hand of Doom!"),
+        _("%^sが%sに<破滅の手>を放った!", "%^s invokes the Hand of Doom upon %s!"));
+
+    simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
 
     ProjectResult proj_res;
     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
index 8300c17..73accd9 100644 (file)
@@ -140,6 +140,7 @@ static MonsterSpellResult spell_RF6_SPECIAL_ROLENTO(player_type *player_ptr, POS
  */
 static MonsterSpellResult spell_RF6_SPECIAL_B(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
+    mspell_cast_msg_simple msg;
     floor_type *floor_ptr = player_ptr->current_floor_ptr;
     monster_type *m_ptr = &floor_ptr->m_list[m_idx];
     monster_type *t_ptr = &floor_ptr->m_list[t_idx];
@@ -152,8 +153,10 @@ static MonsterSpellResult spell_RF6_SPECIAL_B(player_type *player_ptr, POSITION
 
     disturb(player_ptr, true, true);
     if (one_in_(3) || !direct) {
-        simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sは突然視界から消えた!", "You lose sight of %s!"),
-            _("%^sは突然急上昇して視界から消えた!", "You lose sight of %s!"), TARGET_TYPE);
+        msg.to_player = _("%^sは突然視界から消えた!", "You lose sight of %s!");
+        msg.to_mons = _("%^sは突然急上昇して視界から消えた!", "You lose sight of %s!");
+
+        simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
 
         teleport_away(player_ptr, m_idx, 10, TELEPORT_NONMAGICAL);
         player_ptr->update |= (PU_MONSTERS);
@@ -164,8 +167,10 @@ static MonsterSpellResult spell_RF6_SPECIAL_B(player_type *player_ptr, POSITION
         sound(SOUND_FALL);
     }
 
-    simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sがあなたを掴んで空中から投げ落とした。", "%^s snatches you, soars into the sky, and drops you."),
-        _("%^sが%sを掴んで空中から投げ落とした。", "%^s snatches %s, soars into the sky, and releases its grip."), TARGET_TYPE);
+    msg.to_player = _("%^sがあなたを掴んで空中から投げ落とした。", "%^s snatches you, soars into the sky, and drops you.");
+    msg.to_mons = _("%^sが%sを掴んで空中から投げ落とした。", "%^s snatches %s, soars into the sky, and releases its grip.");
+
+    simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
 
     bool fear, dead; /* dummy */
     HIT_POINT dam = damroll(4, 8);
@@ -176,14 +181,16 @@ static MonsterSpellResult spell_RF6_SPECIAL_B(player_type *player_ptr, POSITION
         teleport_monster_to(player_ptr, t_idx, m_ptr->fy, m_ptr->fx, 100, i2enum<teleport_flags>(TELEPORT_NONMAGICAL | TELEPORT_PASSIVE));
 
     if ((monster_to_player && player_ptr->levitation) || (monster_to_monster && (tr_ptr->flags7 & RF7_CAN_FLY))) {
-        simple_monspell_message(player_ptr, m_idx, t_idx, _("あなたは静かに着地した。", "You float gently down to the ground."),
-            _("%^sは静かに着地した。", "%^s floats gently down to the ground."), TARGET_TYPE);
+        msg.to_player = _("あなたは静かに着地した。", "You float gently down to the ground.");
+        msg.to_mons = _("%^sは静かに着地した。", "%^s floats gently down to the ground.");
     } else {
-        simple_monspell_message(player_ptr, m_idx, t_idx, _("あなたは地面に叩きつけられた。", "You crashed into the ground."),
-            _("%^sは地面に叩きつけられた。", "%^s crashed into the ground."), TARGET_TYPE);
-        dam += damroll(6, 8);
+        msg.to_player = _("あなたは地面に叩きつけられた。", "You crashed into the ground.");
+        msg.to_mons = _("%^sは地面に叩きつけられた。", "%^s crashed into the ground.");
     }
 
+    simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+    dam += damroll(6, 8);
+
     if (monster_to_player || (monster_to_monster && player_ptr->riding == t_idx)) {
         int get_damage = take_hit(player_ptr, DAMAGE_NOESCAPE, dam, m_name);
         if (player_ptr->tim_eyeeye && get_damage > 0 && !player_ptr->is_dead) {
index 4741313..7d6fbcb 100644 (file)
@@ -21,6 +21,11 @@ mspell_cast_msg_blind::mspell_cast_msg_blind(concptr blind, concptr to_player, c
     , to_mons(to_mons)
  {}
 
+mspell_cast_msg_simple::mspell_cast_msg_simple(concptr to_player, concptr to_mons)
+     : to_player(to_player)
+     , to_mons(to_mons)
+ {}
+
 /*!
 * @brief プレイヤーがモンスターを見ることができるかの判定 /
 * @param floor_ptr 現在フロアへの参照ポインタ
@@ -115,11 +120,11 @@ bool monspell_message(player_type* player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_
 * @param player_ptr プレイヤーへの参照ポインタ
 * @param m_idx 呪文を唱えるモンスターID
 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
-* @param msg1 プレイヤーを対象とする場合のメッセージ
-* @param msg2 モンスター対象とする場合のメッセージ
+* @param msgs メッセージの構造体
 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
 */
-void simple_monspell_message(player_type* player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, int TARGET_TYPE)
+void simple_monspell_message(player_type* player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg_simple &msgs, int TARGET_TYPE)
 {
-    monspell_message_base(player_ptr, m_idx, t_idx, msg1, msg2, msg1, msg2, player_ptr->blind > 0, TARGET_TYPE);
+    monspell_message_base(player_ptr, m_idx, t_idx, mspell_cast_msg(msgs.to_player, msgs.to_mons,
+        msgs.to_player, msgs.to_mons), player_ptr->blind > 0, TARGET_TYPE);
 }
index 47e89e6..e017249 100644 (file)
@@ -31,8 +31,15 @@ struct mspell_cast_msg_blind {
     concptr to_mons; /*!< 対モンスター*/
 };
 
+struct mspell_cast_msg_simple {
+    mspell_cast_msg_simple(concptr to_player, concptr to_mons);
+    mspell_cast_msg_simple() = default;
+    concptr to_player; /*!< プレイヤー対象*/
+    concptr to_mons; /*!< モンスター対象*/
+};
+
 bool see_monster(player_type *player_ptr, MONSTER_IDX m_idx);
 bool monster_near_player(floor_type *floor_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx);
 bool monspell_message_base(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg &msgs, bool msg_flag_aux, int TARGET_TYPE);
 bool monspell_message(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg_blind &msgs, int TARGET_TYPE);
-void simple_monspell_message(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, int TARGET_TYPE);
+void simple_monspell_message(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg_simple &msgs, int TARGET_TYPE);
index e055597..638dc02 100644 (file)
@@ -74,8 +74,10 @@ MONSTER_NUMBER summon_guardian(player_type *player_ptr, POSITION y, POSITION x,
     bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
 
     if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6)) {
-        simple_monspell_message(player_ptr, m_idx, t_idx, _("地面から水が吹き出した!", "Water blew off from the ground!"),
-            _("地面から水が吹き出した!", "Water blew off from the ground!"), TARGET_TYPE);
+        mspell_cast_msg_simple msg(_("地面から水が吹き出した!", "Water blew off from the ground!"),
+            _("地面から水が吹き出した!", "Water blew off from the ground!"));
+
+        simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
 
         if (mon_to_player)
             fire_ball_hide(player_ptr, GF_WATER_FLOW, 0, 3, 8);