OSDN Git Service

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