OSDN Git Service

[Refactor] take_hit() と project() の未使用引数 monspell を削除
[hengbandforosx/hengbandosx.git] / src / mspell / mspell-curse.cpp
1 #include "mspell/mspell-curse.h"
2 #include "core/disturbance.h"
3 #include "effect/effect-processor.h"
4 #include "monster/monster-info.h"
5 #include "monster/monster-list.h"
6 #include "mspell/mspell-checker.h"
7 #include "mspell/mspell-damage-calculator.h"
8 #include "mspell/mspell-type.h"
9 #include "mspell/mspell-util.h"
10 #include "mspell/mspell.h"
11 #include "spell/spell-types.h"
12 #include "system/floor-type-definition.h"
13 #include "view/display-messages.h"
14
15 /*!
16  * @brief RF5_CAUSE_* の処理関数
17  * @param target_ptr プレーヤーへの参照ポインタ
18  * @param GF_TYPE 攻撃に使用する属性
19  * @param dam 攻撃に使用するダメージ量
20  * @param y 対象の地点のy座標
21  * @param x 対象の地点のx座標
22  * @param m_idx 呪文を唱えるモンスターID
23  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
24  * @param msg1 対プレイヤー、盲目時メッセージ
25  * @param msg2 対プレイヤー、非盲目時メッセージ
26  * @param msg3 対モンスターのメッセージ
27  * @param MS_TYPE 呪文の番号
28  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
29  */
30 static MonsterSpellResult spell_RF5_CAUSE(player_type *target_ptr, int GF_TYPE, HIT_POINT dam, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx,
31     concptr msg1, concptr msg2, concptr msg3, int TARGET_TYPE)
32 {
33     auto res = MonsterSpellResult::make_valid(dam);
34     res.learnable = TARGET_TYPE == MONSTER_TO_PLAYER;
35
36     GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
37     monster_name(target_ptr, m_idx, m_name);
38     monster_name(target_ptr, t_idx, t_name);
39
40     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
41         disturb(target_ptr, TRUE, TRUE);
42         if (target_ptr->blind)
43             msg_format(msg1, m_name);
44         else
45             msg_format(msg2, m_name);
46         breath(target_ptr, y, x, m_idx, GF_TYPE, dam, 0, FALSE, TARGET_TYPE);
47         return res;
48     }
49
50     if (TARGET_TYPE == MONSTER_TO_MONSTER) {
51         if (see_monster(target_ptr, m_idx)) {
52             msg_format(msg3, m_name, t_name);
53         } else {
54             target_ptr->current_floor_ptr->monster_noise = TRUE;
55         }
56     }
57
58     breath(target_ptr, y, x, m_idx, GF_TYPE, dam, 0, FALSE, TARGET_TYPE);
59
60     return res;
61 }
62
63 /*!
64  * @brief RF5_CAUSE_1の処理。軽傷の呪い。 /
65  * @param target_ptr プレーヤーへの参照ポインタ
66  * @param y 対象の地点のy座標
67  * @param x 対象の地点のx座標
68  * @param m_idx 呪文を唱えるモンスターID
69  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
70  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
71  *
72  * プレイヤーが対象ならラーニング可。
73  */
74 MonsterSpellResult spell_RF5_CAUSE_1(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
75 {
76     concptr msg1 = _("%^sが何かをつぶやいた。", "%^s mumbles.");
77     concptr msg2 = _("%^sがあなたを指さして呪った。", "%^s points at you and curses.");
78     concptr msg3 = _("%^sは%sを指さして呪いをかけた。", "%^s points at %s and curses.");
79
80     const auto dam = monspell_damage(target_ptr, (MS_CAUSE_1), m_idx, DAM_ROLL);
81
82     return spell_RF5_CAUSE(target_ptr, GF_CAUSE_1, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, TARGET_TYPE);
83 }
84
85 /*!
86  * @brief RF5_CAUSE_2の処理。重傷の呪い。 /
87  * @param target_ptr プレーヤーへの参照ポインタ
88  * @param y 対象の地点のy座標
89  * @param x 対象の地点のx座標
90  * @param m_idx 呪文を唱えるモンスターID
91  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
92  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
93  *
94  * プレイヤーが対象ならラーニング可。
95  */
96 MonsterSpellResult spell_RF5_CAUSE_2(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
97 {
98     concptr msg1 = _("%^sが何かをつぶやいた。", "%^s mumbles.");
99     concptr msg2 = _("%^sがあなたを指さして恐ろしげに呪った。", "%^s points at you and curses horribly.");
100     concptr msg3 = _("%^sは%sを指さして恐ろしげに呪いをかけた。", "%^s points at %s and curses horribly.");
101
102     const auto dam = monspell_damage(target_ptr, (MS_CAUSE_2), m_idx, DAM_ROLL);
103
104     return spell_RF5_CAUSE(target_ptr, GF_CAUSE_2, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, TARGET_TYPE);
105 }
106
107 /*!
108  * @brief RF5_CAUSE_3の処理。致命傷の呪い。 /
109  * @param target_ptr プレーヤーへの参照ポインタ
110  * @param y 対象の地点のy座標
111  * @param x 対象の地点のx座標
112  * @param m_idx 呪文を唱えるモンスターID
113  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
114  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
115  *
116  * プレイヤーが対象ならラーニング可。
117  */
118 MonsterSpellResult spell_RF5_CAUSE_3(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
119 {
120     concptr msg1 = _("%^sが何かを大声で叫んだ。", "%^s mumbles loudly.");
121     concptr msg2 = _("%^sがあなたを指さして恐ろしげに呪文を唱えた!", "%^s points at you, incanting terribly!");
122     concptr msg3 = _("%^sは%sを指さし、恐ろしげに呪文を唱えた!", "%^s points at %s, incanting terribly!");
123
124     const auto dam = monspell_damage(target_ptr, (MS_CAUSE_3), m_idx, DAM_ROLL);
125
126     return spell_RF5_CAUSE(target_ptr, GF_CAUSE_3, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, TARGET_TYPE);
127 }
128
129 /*!
130  * @brief RF5_CAUSE_4の処理。秘孔を突く。 /
131  * @param target_ptr プレーヤーへの参照ポインタ
132  * @param y 対象の地点のy座標
133  * @param x 対象の地点のx座標
134  * @param m_idx 呪文を唱えるモンスターID
135  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
136  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
137  *
138  * プレイヤーが対象ならラーニング可。
139  */
140 MonsterSpellResult spell_RF5_CAUSE_4(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
141 {
142     concptr msg1 = _("%^sが「お前は既に死んでいる」と叫んだ。", "%^s screams the word 'DIE!'");
143     concptr msg2 = _("%^sがあなたの秘孔を突いて「お前は既に死んでいる」と叫んだ。", "%^s points at you, screaming the word DIE!");
144     concptr msg3 = _("%^sが%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。", "%^s points at %s, screaming the word, 'DIE!'");
145
146     const auto dam = monspell_damage(target_ptr, (MS_CAUSE_4), m_idx, DAM_ROLL);
147
148     return spell_RF5_CAUSE(target_ptr, GF_CAUSE_4, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, TARGET_TYPE);
149 }