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"
14 * @brief RF4_SHOOTの処理。射撃。 /
15 * @param target_ptr プレーヤーへの参照ポインタ
18 * @param m_idx 呪文を唱えるモンスターID
19 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
20 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
38 * @brief RF5_BO_ACIDの処理。アシッド・ボルト。 /
39 * @param target_ptr プレーヤーへの参照ポインタ
42 * @param m_idx 呪文を唱えるモンスターID
43 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
44 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
66 * @brief RF5_BO_ELECの処理。サンダー・ボルト。 /
67 * @param target_ptr プレーヤーへの参照ポインタ
70 * @param m_idx 呪文を唱えるモンスターID
71 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
72 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
94 * @brief RF5_BO_FIREの処理。ファイア・ボルト。 /
95 * @param target_ptr プレーヤーへの参照ポインタ
98 * @param m_idx 呪文を唱えるモンスターID
99 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
100 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
122 * @brief RF5_BO_COLDの処理。アイス・ボルト。 /
123 * @param target_ptr プレーヤーへの参照ポインタ
126 * @param m_idx 呪文を唱えるモンスターID
127 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
128 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
150 * @brief RF5_BO_NETHの処理。地獄の矢。 /
151 * @param target_ptr プレーヤーへの参照ポインタ
154 * @param m_idx 呪文を唱えるモンスターID
155 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
156 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
177 * @brief RF5_BO_WATEの処理。ウォーター・ボルト。 /
178 * @param target_ptr プレーヤーへの参照ポインタ
181 * @param m_idx 呪文を唱えるモンスターID
182 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
183 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
204 * @brief RF5_BO_MANAの処理。魔力の矢。 /
205 * @param target_ptr プレーヤーへの参照ポインタ
208 * @param m_idx 呪文を唱えるモンスターID
209 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
210 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
230 * @brief RF5_BO_PLASの処理。プラズマ・ボルト。 /
231 * @param target_ptr プレーヤーへの参照ポインタ
234 * @param m_idx 呪文を唱えるモンスターID
235 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
236 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
257 * @brief RF5_BO_ICEEの処理。極寒の矢。 /
258 * @param target_ptr プレーヤーへの参照ポインタ
261 * @param m_idx 呪文を唱えるモンスターID
262 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
263 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);
284 * @brief RF5_MISSILEの処理。マジック・ミサイル。 /
285 * @param target_ptr プレーヤーへの参照ポインタ
288 * @param m_idx 呪文を唱えるモンスターID
289 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
290 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
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)
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);
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);