OSDN Git Service

[Refactor] #40014 Separated monster2.h from monster.h
[hengband/hengband.git] / src / mspell / mspell-bolt.c
1 #include "mspell/mspell-bolt.h"
2 #include "main/sound-definitions-table.h"
3 #include "mind/drs-types.h"
4 #include "monster/monster2.h"
5 #include "mspell/monster-spell.h"
6 #include "mspell/mspell-damage-calculator.h"
7 #include "mspell/mspell-type.h"
8 #include "mspell/mspell-util.h"
9 #include "spell/spells-type.h"
10
11 /*!
12  * @brief RF4_SHOOTの処理。射撃。 /
13  * @param target_ptr プレーヤーへの参照ポインタ
14  * @param y 対象の地点のy座標
15  * @param x 対象の地点のx座標
16  * @param m_idx 呪文を唱えるモンスターID
17  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
18  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
19  * @return ダメージ量を返す。
20  */
21 HIT_POINT spell_RF4_SHOOT(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
22 {
23     HIT_POINT dam;
24
25     monspell_message(target_ptr, m_idx, t_idx, _("%^sが奇妙な音を発した。", "%^s makes a strange noise."), _("%^sが矢を放った。", "%^s fires an arrow."),
26         _("%^sが%sに矢を放った。", "%^s fires an arrow at %s."), TARGET_TYPE);
27
28     dam = monspell_damage(target_ptr, (MS_SHOOT), m_idx, DAM_ROLL);
29     bolt(target_ptr, m_idx, y, x, GF_ARROW, dam, MS_SHOOT, TARGET_TYPE);
30     sound(SOUND_SHOOT);
31
32     return dam;
33 }
34
35 /*!
36  * @brief RF5_BO_ACIDの処理。アシッド・ボルト。 /
37  * @param target_ptr プレーヤーへの参照ポインタ
38  * @param y 対象の地点のy座標
39  * @param x 対象の地点のx座標
40  * @param m_idx 呪文を唱えるモンスターID
41  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
42  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
43  * @return ダメージ量を返す。
44  */
45 HIT_POINT spell_RF5_BO_ACID(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
46 {
47     HIT_POINT dam;
48
49     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
50         _("%^sがアシッド・ボルトの呪文を唱えた。", "%^s casts a acid bolt."),
51         _("%sが%sに向かってアシッド・ボルトの呪文を唱えた。", "%^s casts an acid bolt at %s."), TARGET_TYPE);
52
53     dam = monspell_damage(target_ptr, (MS_BOLT_ACID), m_idx, DAM_ROLL);
54     bolt(target_ptr, m_idx, y, x, GF_ACID, dam, MS_BOLT_ACID, TARGET_TYPE);
55     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
56         update_smart_learn(target_ptr, m_idx, DRS_ACID);
57         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
58     }
59
60     return dam;
61 }
62
63 /*!
64  * @brief RF5_BO_ELECの処理。サンダー・ボルト。 /
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  * @return ダメージ量を返す。
72  */
73 HIT_POINT spell_RF5_BO_ELEC(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
74 {
75     HIT_POINT dam;
76
77     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
78         _("%^sがサンダー・ボルトの呪文を唱えた。", "%^s casts a lightning bolt."),
79         _("%^sが%sに向かってサンダー・ボルトの呪文を唱えた。", "%^s casts a lightning bolt at %s."), TARGET_TYPE);
80
81     dam = monspell_damage(target_ptr, (MS_BOLT_ELEC), m_idx, DAM_ROLL);
82     bolt(target_ptr, m_idx, y, x, GF_ELEC, dam, MS_BOLT_ELEC, TARGET_TYPE);
83     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
84         update_smart_learn(target_ptr, m_idx, DRS_ELEC);
85         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
86     }
87
88     return dam;
89 }
90
91 /*!
92  * @brief RF5_BO_FIREの処理。ファイア・ボルト。 /
93  * @param target_ptr プレーヤーへの参照ポインタ
94  * @param y 対象の地点のy座標
95  * @param x 対象の地点のx座標
96  * @param m_idx 呪文を唱えるモンスターID
97  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
98  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
99  * @return ダメージ量を返す。
100  */
101 HIT_POINT spell_RF5_BO_FIRE(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
102 {
103     HIT_POINT dam;
104
105     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
106         _("%^sがファイア・ボルトの呪文を唱えた。", "%^s casts a fire bolt."),
107         _("%^sが%sに向かってファイア・ボルトの呪文を唱えた。", "%^s casts a fire bolt at %s."), TARGET_TYPE);
108
109     dam = monspell_damage(target_ptr, (MS_BOLT_FIRE), m_idx, DAM_ROLL);
110     bolt(target_ptr, m_idx, y, x, GF_FIRE, dam, MS_BOLT_FIRE, TARGET_TYPE);
111     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
112         update_smart_learn(target_ptr, m_idx, DRS_FIRE);
113         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
114     }
115
116     return dam;
117 }
118
119 /*!
120  * @brief RF5_BO_COLDの処理。アイス・ボルト。 /
121  * @param target_ptr プレーヤーへの参照ポインタ
122  * @param y 対象の地点のy座標
123  * @param x 対象の地点のx座標
124  * @param m_idx 呪文を唱えるモンスターID
125  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
126  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
127  * @return ダメージ量を返す。
128  */
129 HIT_POINT spell_RF5_BO_COLD(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
130 {
131     HIT_POINT dam;
132
133     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
134         _("%^sがアイス・ボルトの呪文を唱えた。", "%^s casts a frost bolt."),
135         _("%^sが%sに向かってアイス・ボルトの呪文を唱えた。", "%^s casts a frost bolt at %s."), TARGET_TYPE);
136
137     dam = monspell_damage(target_ptr, (MS_BOLT_COLD), m_idx, DAM_ROLL);
138     bolt(target_ptr, m_idx, y, x, GF_COLD, dam, MS_BOLT_COLD, TARGET_TYPE);
139     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
140         update_smart_learn(target_ptr, m_idx, DRS_COLD);
141         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
142     }
143
144     return dam;
145 }
146
147 /*!
148  * @brief RF5_BO_NETHの処理。地獄の矢。 /
149  * @param target_ptr プレーヤーへの参照ポインタ
150  * @param y 対象の地点のy座標
151  * @param x 対象の地点のx座標
152  * @param m_idx 呪文を唱えるモンスターID
153  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
154  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
155  * @return ダメージ量を返す。
156  */
157 HIT_POINT spell_RF5_BO_NETH(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
158 {
159     HIT_POINT dam;
160
161     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが地獄の矢の呪文を唱えた。", "%^s casts a nether bolt."),
162         _("%^sが%sに向かって地獄の矢の呪文を唱えた。", "%^s casts a nether bolt at %s."), TARGET_TYPE);
163
164     dam = monspell_damage(target_ptr, (MS_BOLT_NETHER), m_idx, DAM_ROLL);
165     bolt(target_ptr, m_idx, y, x, GF_NETHER, dam, MS_BOLT_NETHER, TARGET_TYPE);
166     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
167         update_smart_learn(target_ptr, m_idx, DRS_NETH);
168         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
169     }
170
171     return dam;
172 }
173
174 /*!
175  * @brief RF5_BO_WATEの処理。ウォーター・ボルト。 /
176  * @param target_ptr プレーヤーへの参照ポインタ
177  * @param y 対象の地点のy座標
178  * @param x 対象の地点のx座標
179  * @param m_idx 呪文を唱えるモンスターID
180  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
181  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
182  * @return ダメージ量を返す。
183  */
184 HIT_POINT spell_RF5_BO_WATE(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
185 {
186     HIT_POINT dam;
187
188     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
189         _("%^sがウォーター・ボルトの呪文を唱えた。", "%^s casts a water bolt."),
190         _("%^sが%sに向かってウォーター・ボルトの呪文を唱えた。", "%^s casts a water bolt at %s."), TARGET_TYPE);
191
192     dam = monspell_damage(target_ptr, (MS_BOLT_WATER), m_idx, DAM_ROLL);
193     bolt(target_ptr, m_idx, y, x, GF_WATER, dam, MS_BOLT_WATER, TARGET_TYPE);
194     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
195         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
196     }
197
198     return dam;
199 }
200
201 /*!
202  * @brief RF5_BO_MANAの処理。魔力の矢。 /
203  * @param target_ptr プレーヤーへの参照ポインタ
204  * @param y 対象の地点のy座標
205  * @param x 対象の地点のx座標
206  * @param m_idx 呪文を唱えるモンスターID
207  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
208  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
209  * @return ダメージ量を返す。
210  */
211 HIT_POINT spell_RF5_BO_MANA(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
212 {
213     HIT_POINT dam;
214
215     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔力の矢の呪文を唱えた。", "%^s casts a mana bolt."),
216         _("%^sが%sに向かって魔力の矢の呪文を唱えた。", "%^s casts a mana bolt at %s."), TARGET_TYPE);
217
218     dam = monspell_damage(target_ptr, (MS_BOLT_MANA), m_idx, DAM_ROLL);
219     bolt(target_ptr, m_idx, y, x, GF_MANA, dam, MS_BOLT_MANA, TARGET_TYPE);
220     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
221         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
222     }
223
224     return dam;
225 }
226
227 /*!
228  * @brief RF5_BO_PLASの処理。プラズマ・ボルト。 /
229  * @param target_ptr プレーヤーへの参照ポインタ
230  * @param y 対象の地点のy座標
231  * @param x 対象の地点のx座標
232  * @param m_idx 呪文を唱えるモンスターID
233  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
234  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
235  * @return ダメージ量を返す。
236  */
237 HIT_POINT spell_RF5_BO_PLAS(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
238 {
239     HIT_POINT dam;
240
241     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
242         _("%^sがプラズマ・ボルトの呪文を唱えた。", "%^s casts a plasma bolt."),
243         _("%^sが%sに向かってプラズマ・ボルトの呪文を唱えた。", "%^s casts a plasma bolt at %s."), TARGET_TYPE);
244
245     dam = monspell_damage(target_ptr, (MS_BOLT_PLASMA), m_idx, DAM_ROLL);
246     bolt(target_ptr, m_idx, y, x, GF_PLASMA, dam, MS_BOLT_PLASMA, TARGET_TYPE);
247     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
248         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
249     }
250
251     return dam;
252 }
253
254 /*!
255  * @brief RF5_BO_ICEEの処理。極寒の矢。 /
256  * @param target_ptr プレーヤーへの参照ポインタ
257  * @param y 対象の地点のy座標
258  * @param x 対象の地点のx座標
259  * @param m_idx 呪文を唱えるモンスターID
260  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
261  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
262  * @return ダメージ量を返す。
263  */
264 HIT_POINT spell_RF5_BO_ICEE(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
265 {
266     HIT_POINT dam;
267
268     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが極寒の矢の呪文を唱えた。", "%^s casts an ice bolt."),
269         _("%^sが%sに向かって極寒の矢の呪文を唱えた。", "%^s casts an ice bolt at %s."), TARGET_TYPE);
270
271     dam = monspell_damage(target_ptr, (MS_BOLT_ICE), m_idx, DAM_ROLL);
272     bolt(target_ptr, m_idx, y, x, GF_ICE, dam, MS_BOLT_ICE, TARGET_TYPE);
273     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
274         update_smart_learn(target_ptr, m_idx, DRS_COLD);
275         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
276     }
277
278     return dam;
279 }
280
281 /*!
282  * @brief RF5_MISSILEの処理。マジック・ミサイル。 /
283  * @param target_ptr プレーヤーへの参照ポインタ
284  * @param y 対象の地点のy座標
285  * @param x 対象の地点のx座標
286  * @param m_idx 呪文を唱えるモンスターID
287  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
288  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
289  * @return ダメージ量を返す。
290  */
291 HIT_POINT spell_RF5_MISSILE(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
292 {
293     HIT_POINT dam;
294
295     monspell_message(target_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."),
296         _("%^sがマジック・ミサイルの呪文を唱えた。", "%^s casts a magic missile."),
297         _("%^sが%sに向かってマジック・ミサイルの呪文を唱えた。", "%^s casts a magic missile at %s."), TARGET_TYPE);
298
299     dam = monspell_damage(target_ptr, (MS_MAGIC_MISSILE), m_idx, DAM_ROLL);
300     bolt(target_ptr, m_idx, y, x, GF_MISSILE, dam, MS_MAGIC_MISSILE, TARGET_TYPE);
301     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
302         update_smart_learn(target_ptr, m_idx, DRS_REFLECT);
303     }
304
305     return dam;
306 }