OSDN Git Service

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