OSDN Git Service

refactor: extract ball functions in make_attack_spell
[hengband/hengband.git] / src / mspells4.c
1 #include "angband.h"
2
3 void spell_RF4_SHRIEK(int m_idx, cptr m_name)
4 {
5     disturb(1, 1);
6     msg_format(_("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", "%^s makes a high pitched shriek."), m_name);
7     aggravate_monsters(m_idx);
8 }
9
10 void spell_RF4_DISPEL(bool blind, cptr m_name)
11 {
12     disturb(1, 1);
13
14     if (blind)
15     {
16         msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
17     }
18     else
19     {
20         msg_format(_("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic."), m_name);
21     }
22     dispel_player();
23     if (p_ptr->riding) dispel_monster_status(p_ptr->riding);
24
25 #ifdef JP
26     if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
27         msg_print("¤ä¤ê¤ä¤¬¤Ã¤¿¤Ê¡ª");
28 #endif
29     learn_spell(MS_DISPEL);
30 }
31
32 void spell_RF4_ROCKET(bool blind, cptr m_name, monster_type* m_ptr, int y, int x, int m_idx, bool learnable)
33 {
34     int dam;
35
36     disturb(1, 1);
37     if (blind)
38     {
39         msg_format(_("%^s¤¬²¿¤«¤ò¼Í¤Ã¤¿¡£", "%^s shoots something."), m_name);
40     }
41     else
42     {
43         msg_format(_("%^s¤¬¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£", "%^s fires a rocket."), m_name);
44     }
45
46     dam = ((m_ptr->hp / 4) > 800 ? 800 : (m_ptr->hp / 4));
47     breath(y, x, m_idx, GF_ROCKET,
48         dam, 2, FALSE, MS_ROCKET, learnable);
49     update_smart_learn(m_idx, DRS_SHARD);
50 }
51
52 void spell_RF4_SHOOT(bool blind, cptr m_name, monster_race* r_ptr, int m_idx, bool learnable)
53 {
54     int dam;
55     disturb(1, 1);
56     if (blind)
57     {
58         msg_format(_("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", "%^s makes a strange noise."), m_name);
59     }
60     else
61     {
62         msg_format(_("%^s¤¬Ìð¤òÊü¤Ã¤¿¡£", "%^s fires an arrow."), m_name);
63     }
64
65     dam = damroll(r_ptr->blow[0].d_dice, r_ptr->blow[0].d_side);
66     bolt(m_idx, GF_ARROW, dam, MS_SHOOT, learnable);
67     update_smart_learn(m_idx, DRS_REFLECT);
68 }
69
70 void spell_RF4_BREATH(int GF_TYPE, bool blind, cptr m_name, monster_type* m_ptr, int y, int x, int m_idx, bool learnable)
71 {
72     int dam, ms_type, drs_type;
73     cptr type_s;
74     bool smart_learn = TRUE;
75
76     switch (GF_TYPE)
77     {
78         case GF_ACID:
79             dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
80             type_s = _("»À", "acid");
81             ms_type = MS_BR_ACID;
82             drs_type = DRS_ACID;
83             break;
84         case GF_ELEC:
85             dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
86             type_s = _("°ðºÊ", "lightning");
87             ms_type = MS_BR_ELEC;
88             drs_type = DRS_ELEC;
89             break;
90         case GF_FIRE:
91             dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
92             type_s = _("²Ð±ê", "fire");
93             ms_type = MS_BR_FIRE;
94             drs_type = DRS_FIRE;
95             break;
96         case GF_COLD:
97             dam = ((m_ptr->hp / 3) > 1600 ? 1600 : (m_ptr->hp / 3));
98             type_s = _("Î䵤", "frost");
99             ms_type = MS_BR_COLD;
100             drs_type = DRS_COLD;
101             break;
102         case GF_POIS:
103             dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
104             type_s = _("¥¬¥¹", "gas");
105             ms_type = MS_BR_POIS;
106             drs_type = DRS_POIS;
107             break;
108         case GF_NETHER:
109             dam = ((m_ptr->hp / 6) > 550 ? 550 : (m_ptr->hp / 6));
110             type_s = _("ÃϹö", "nether");
111             ms_type = MS_BR_NETHER;
112             drs_type = DRS_NETH;
113             break;
114         case GF_LITE:
115             dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
116             type_s = _("Á®¸÷", "light");
117             ms_type = MS_BR_LITE;
118             drs_type = DRS_LITE;
119             break;
120         case GF_DARK:
121             dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6));
122             type_s = _("°Å¹õ", "darkness");
123             ms_type = MS_BR_DARK;
124             drs_type = DRS_DARK;
125             break;
126         case GF_CONFUSION:
127             dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
128             type_s = _("º®Íð", "confusion");
129             ms_type = MS_BR_CONF;
130             drs_type = DRS_CONF;
131             break;
132         case GF_SOUND:
133             dam = ((m_ptr->hp / 6) > 450 ? 450 : (m_ptr->hp / 6));
134             type_s = _("¹ì²»", "sound");
135             ms_type = MS_BR_SOUND;
136             drs_type = DRS_SOUND;
137             break;
138         case GF_CHAOS:
139             dam = ((m_ptr->hp / 6) > 600 ? 600 : (m_ptr->hp / 6));
140             type_s = _("¥«¥ª¥¹", "chaos");
141             ms_type = MS_BR_CHAOS;
142             drs_type = DRS_CHAOS;
143             break;
144         case GF_DISENCHANT:
145             dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
146             type_s = _("Îô²½", "disenchantment");
147             ms_type = MS_BR_DISEN;
148             drs_type = DRS_DISEN;
149             break;
150         case GF_NEXUS:
151             dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
152             type_s = _("°ø²Ìº®Íð", "nexus");
153             ms_type = MS_BR_NEXUS;
154             drs_type = DRS_NEXUS;
155             break;
156         case GF_TIME:
157             dam = ((m_ptr->hp / 3) > 150 ? 150 : (m_ptr->hp / 3));
158             type_s = _("»þ´ÖµÕž", "time");
159             ms_type = MS_BR_TIME;
160             smart_learn = FALSE;
161             break;
162         case GF_INERTIA:
163             dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
164             type_s = _("ÃÙÆß", "inertia");
165             ms_type = MS_BR_INERTIA;
166             smart_learn = FALSE;
167             break;
168         case GF_GRAVITY:
169             dam = ((m_ptr->hp / 3) > 200 ? 200 : (m_ptr->hp / 3));
170             type_s = _("½ÅÎÏ", "gravity");
171             ms_type = MS_BR_GRAVITY;
172             smart_learn = FALSE;
173             break;
174         case GF_SHARDS:
175             dam = ((m_ptr->hp / 6) > 500 ? 500 : (m_ptr->hp / 6));
176             type_s = _("ÇËÊÒ", "shards");
177             ms_type = MS_BR_SHARDS;
178             drs_type = DRS_SHARD;
179             break;
180         case GF_PLASMA:
181             dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
182             type_s = _("¥×¥é¥º¥Þ", "plasma");
183             ms_type = MS_BR_PLASMA;
184             smart_learn = FALSE;
185             break;
186         case GF_FORCE:
187             dam = ((m_ptr->hp / 6) > 200 ? 200 : (m_ptr->hp / 6));
188             type_s = _("¥Õ¥©¡¼¥¹", "force");
189             ms_type = MS_BR_FORCE;
190             smart_learn = FALSE;
191             break;
192         case GF_MANA:
193             dam = ((m_ptr->hp / 3) > 250 ? 250 : (m_ptr->hp / 3));
194             type_s = _("ËâÎÏ", "mana");
195             ms_type = MS_BR_MANA;
196             smart_learn = FALSE;
197             break;
198         case GF_NUKE:
199             dam = ((m_ptr->hp / 3) > 800 ? 800 : (m_ptr->hp / 3));
200             type_s = _("Êü¼ÍÀ­ÇÑ´þʪ", "toxic waste");
201             ms_type = MS_BR_NUKE;
202             drs_type = DRS_POIS;
203             break;
204         case GF_DISINTEGRATE:
205             dam = ((m_ptr->hp / 6) > 150 ? 150 : (m_ptr->hp / 6));
206             type_s = _("ʬ²ò", "disintegration");
207             ms_type = MS_BR_DISI;
208             smart_learn = FALSE;
209             break;
210         default:
211             break;
212     }
213
214     disturb(1, 1);
215     if (m_ptr->r_idx == MON_JAIAN && GF_TYPE == GF_SOUND)
216     {
217         msg_format(_("¡Ö¥Ü¥©¥¨¡Á¡Á¡Á¡Á¡Á¡Á¡×", "'Booooeeeeee'"));
218     }
219     else if (m_ptr->r_idx == MON_BOTEI && GF_TYPE == GF_SHARDS)
220     {
221         msg_format(_("¡Ö¥ÜÄë¥Ó¥ë¥«¥Ã¥¿¡¼¡ª¡ª¡ª¡×", "'Boty-Build cutter!!!'"));
222     }
223     else if (blind)
224     {
225         msg_format(_("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes."), m_name);
226     }
227     else
228     {
229         msg_format(_("%^s¤¬%^s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", "%^s breathes %^s."), m_name, type_s);
230     }
231
232     breath(y, x, m_idx, GF_TYPE, dam, 0, TRUE, ms_type, learnable);
233     if (smart_learn) update_smart_learn(m_idx, drs_type);
234 }
235
236 void spell_RF4_BA_CHAO(bool blind, cptr m_name, monster_race* r_ptr, int rlev, int y, int x, int m_idx, bool learnable)
237 {
238     int dam;
239     disturb(1, 1);
240
241     if (blind)
242     {
243         msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles frighteningly."), m_name);
244     }
245     else
246     {
247         msg_format(_("%^s¤¬½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£", "%^s invokes a raw Logrus."), m_name);
248     }
249
250     dam = ((r_ptr->flags2 & RF2_POWERFUL) ? (rlev * 3) : (rlev * 2)) + damroll(10, 10);
251
252     breath(y, x, m_idx, GF_CHAOS, dam, 4, FALSE, MS_BALL_CHAOS, learnable);
253     update_smart_learn(m_idx, DRS_CHAOS);
254 }
255
256 void spell_RF4_BA_NUKE(bool blind, cptr m_name, monster_race* r_ptr, int rlev, int y, int x, int m_idx, bool learnable)
257 {
258     int dam;
259     disturb(1, 1);
260
261     if (blind)
262     {
263         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
264     }
265     else
266     {
267         msg_format(_("%^s¤¬Êü¼Íǽµå¤òÊü¤Ã¤¿¡£", "%^s casts a ball of radiation."), m_name);
268     }
269
270     dam = (rlev + damroll(10, 6)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
271
272     breath(y, x, m_idx, GF_NUKE, dam, 2, FALSE, MS_BALL_NUKE, learnable);
273     update_smart_learn(m_idx, DRS_POIS);
274 }
275
276 void spell_RF5_BA_ACID(bool blind, cptr m_name, monster_race* r_ptr, int rlev, int y, int x, int m_idx, bool learnable)
277 {
278     int dam, rad;
279     disturb(1, 1);
280
281     if (blind)
282     {
283         msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
284     }
285     else
286     {
287         msg_format(_("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts an acid ball."), m_name);
288     }
289
290     if (r_ptr->flags2 & RF2_POWERFUL)
291     {
292         rad = 4;
293         dam = (rlev * 4) + 50 + damroll(10, 10);
294     }
295     else
296     {
297         rad = 2;
298         dam = (randint1(rlev * 3) + 15);
299     }
300     breath(y, x, m_idx, GF_ACID, dam, rad, FALSE, MS_BALL_ACID, learnable);
301     update_smart_learn(m_idx, DRS_ACID);
302 }