OSDN Git Service

[Refactor] #37353 全復活系の効果をrestore_all_status()にまとめる。
[hengband/hengband.git] / src / realm-daemon.c
1 \r
2 #include "angband.h"\r
3 #include "cmd-spell.h"\r
4 #include "spells-summon.h"\r
5 \r
6 /*!\r
7 * @brief \88«\96\82\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
8 * @param spell \96\82\96@ID\r
9 * @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
10 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
11 */\r
12 cptr do_daemon_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
13 {\r
14         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
15         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
16         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
17         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
18         static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
19 \r
20         int dir;\r
21         int plev = p_ptr->lev;\r
22 \r
23         switch (spell)\r
24         {\r
25         case 0:\r
26                 if (name) return _("\83}\83W\83b\83N\81E\83~\83T\83C\83\8b", "Magic Missile");\r
27                 if (desc) return _("\8eã\82¢\96\82\96@\82Ì\96î\82ð\95ú\82Â\81B", "Fires a weak bolt of magic.");\r
28 \r
29                 {\r
30                         int dice = 3 + (plev - 1) / 5;\r
31                         int sides = 4;\r
32 \r
33                         if (info) return info_damage(dice, sides, 0);\r
34 \r
35                         if (cast)\r
36                         {\r
37                                 if (!get_aim_dir(&dir)) return NULL;\r
38 \r
39                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));\r
40                         }\r
41                 }\r
42                 break;\r
43 \r
44         case 1:\r
45                 if (name) return _("\96³\90\96½\8a´\92m", "Detect Unlife");\r
46                 if (desc) return _("\8bß\82­\82Ì\90\96½\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all nonliving monsters in your vicinity.");\r
47 \r
48                 {\r
49                         int rad = DETECT_RAD_DEFAULT;\r
50 \r
51                         if (info) return info_radius(rad);\r
52 \r
53                         if (cast)\r
54                         {\r
55                                 detect_monsters_nonliving(rad);\r
56                         }\r
57                 }\r
58                 break;\r
59 \r
60         case 2:\r
61                 if (name) return _("\8e×\82È\82é\8fj\95\9f", "Evil Bless");\r
62                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96½\92\86\97¦\82ÆAC\82É\83{\81[\83i\83X\82ð\93¾\82é\81B", "Gives bonus to hit and AC for a few turns.");\r
63 \r
64                 {\r
65                         int base = 12;\r
66 \r
67                         if (info) return info_duration(base, base);\r
68 \r
69                         if (cast)\r
70                         {\r
71                                 set_blessed(randint1(base) + base, FALSE);\r
72                         }\r
73                 }\r
74                 break;\r
75 \r
76         case 3:\r
77                 if (name) return _("\91Ï\89Î\89\8a", "Resist Fire");\r
78                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89\8a\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
79                         "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
80 \r
81                 {\r
82                         int base = 20;\r
83 \r
84                         if (info) return info_duration(base, base);\r
85 \r
86                         if (cast)\r
87                         {\r
88                                 set_oppose_fire(randint1(base) + base, FALSE);\r
89                         }\r
90                 }\r
91                 break;\r
92 \r
93         case 4:\r
94                 if (name) return _("\8b°\8dQ", "Horrify");\r
95                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8b°\95|\82³\82¹\81A\9eN\9eO\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare and stun a monster.");\r
96 \r
97                 {\r
98                         int power = plev;\r
99 \r
100                         if (info) return info_power(power);\r
101 \r
102                         if (cast)\r
103                         {\r
104                                 if (!get_aim_dir(&dir)) return NULL;\r
105 \r
106                                 fear_monster(dir, power);\r
107                                 stun_monster(dir, power);\r
108                         }\r
109                 }\r
110                 break;\r
111 \r
112         case 5:\r
113                 if (name) return _("\92n\8d\96\82Ì\96î", "Nether Bolt");\r
114                 if (desc) return _("\92n\8d\96\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of nether.");\r
115 \r
116                 {\r
117                         int dice = 6 + (plev - 5) / 4;\r
118                         int sides = 8;\r
119 \r
120                         if (info) return info_damage(dice, sides, 0);\r
121 \r
122                         if (cast)\r
123                         {\r
124                                 if (!get_aim_dir(&dir)) return NULL;\r
125 \r
126                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
127                         }\r
128                 }\r
129                 break;\r
130 \r
131         case 6:\r
132                 if (name) return _("\8cÃ\91ã\82Ì\8e\80\97ì\8f¢\8a«", "Summon Manes");\r
133                 if (desc) return _("\8cÃ\91ã\82Ì\8e\80\97ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a manes.");\r
134 \r
135                 {\r
136                         if (cast)\r
137                         {\r
138                                 if (!summon_specific(-1, p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))\r
139                                 {\r
140                                         msg_print(_("\8cÃ\91ã\82Ì\8e\80\97ì\82Í\8c»\82ê\82È\82©\82Á\82½\81B", "No Manes arrive."));\r
141                                 }\r
142                         }\r
143                 }\r
144                 break;\r
145 \r
146         case 7:\r
147                 if (name) return _("\92n\8d\96\82Ì\89\8b", "Hellish Flame");\r
148                 if (desc) return _("\8e×\88«\82È\97Í\82ð\8e\9d\82Â\83{\81[\83\8b\82ð\95ú\82Â\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
149                         "Fires a ball of evil power. Hurts good monsters greatly.");\r
150 \r
151                 {\r
152                         int dice = 3;\r
153                         int sides = 6;\r
154                         int rad = (plev < 30) ? 2 : 3;\r
155                         int base;\r
156 \r
157                         if (IS_WIZARD_CLASS())\r
158                                 base = plev + plev / 2;\r
159                         else\r
160                                 base = plev + plev / 4;\r
161 \r
162 \r
163                         if (info) return info_damage(dice, sides, base);\r
164 \r
165                         if (cast)\r
166                         {\r
167                                 if (!get_aim_dir(&dir)) return NULL;\r
168 \r
169                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);\r
170                         }\r
171                 }\r
172                 break;\r
173 \r
174         case 8:\r
175                 if (name) return _("\83f\81[\83\82\83\93\8ex\94z", "Dominate Demon");\r
176                 if (desc) return _("\88«\96\821\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø", "Attempts to charm a demon.");\r
177 \r
178                 {\r
179                         int power = plev;\r
180 \r
181                         if (info) return info_power(power);\r
182 \r
183                         if (cast)\r
184                         {\r
185                                 if (!get_aim_dir(&dir)) return NULL;\r
186 \r
187                                 control_one_demon(dir, power);\r
188                         }\r
189                 }\r
190                 break;\r
191 \r
192         case 9:\r
193                 if (name) return _("\83r\83W\83\87\83\93", "Vision");\r
194                 if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "Maps nearby area.");\r
195 \r
196                 {\r
197                         int rad = DETECT_RAD_MAP;\r
198 \r
199                         if (info) return info_radius(rad);\r
200 \r
201                         if (cast)\r
202                         {\r
203                                 map_area(rad);\r
204                         }\r
205                 }\r
206                 break;\r
207 \r
208         case 10:\r
209                 if (name) return _("\91Ï\92n\8d\96", "Resist Nether");\r
210                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\92n\8d\96\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B", "Gives resistance to nether for a while.");\r
211 \r
212                 {\r
213                         int base = 20;\r
214 \r
215                         if (info) return info_duration(base, base);\r
216 \r
217                         if (cast)\r
218                         {\r
219                                 set_tim_res_nether(randint1(base) + base, FALSE);\r
220                         }\r
221                 }\r
222                 break;\r
223 \r
224         case 11:\r
225                 if (name) return _("\83v\83\89\83Y\83}\81E\83{\83\8b\83g", "Plasma bolt");\r
226                 if (desc) return _("\83v\83\89\83Y\83}\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of plasma.");\r
227 \r
228                 {\r
229                         int dice = 11 + (plev - 5) / 4;\r
230                         int sides = 8;\r
231 \r
232                         if (info) return info_damage(dice, sides, 0);\r
233 \r
234                         if (cast)\r
235                         {\r
236                                 if (!get_aim_dir(&dir)) return NULL;\r
237 \r
238                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));\r
239                         }\r
240                 }\r
241                 break;\r
242 \r
243         case 12:\r
244                 if (name) return _("\83t\83@\83C\83A\81E\83{\81[\83\8b", "Fire Ball");\r
245                 if (desc) return _("\89\8a\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of fire.");\r
246 \r
247                 {\r
248                         HIT_POINT dam = plev + 55;\r
249                         int rad = 2;\r
250 \r
251                         if (info) return info_damage(0, 0, dam);\r
252 \r
253                         if (cast)\r
254                         {\r
255                                 if (!get_aim_dir(&dir)) return NULL;\r
256 \r
257                                 fire_ball(GF_FIRE, dir, dam, rad);\r
258                         }\r
259                 }\r
260                 break;\r
261 \r
262         case 13:\r
263                 if (name) return _("\89\8a\82Ì\90n", "Fire Branding");\r
264                 if (desc) return _("\95\90\8aí\82É\89\8a\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon fire branded.");\r
265 \r
266                 {\r
267                         if (cast)\r
268                         {\r
269                                 brand_weapon(1);\r
270                         }\r
271                 }\r
272                 break;\r
273 \r
274         case 14:\r
275                 if (name) return _("\92n\8d\96\8b\85", "Nether Ball");\r
276                 if (desc) return _("\91å\82«\82È\92n\8d\96\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of nether.");\r
277 \r
278                 {\r
279                         HIT_POINT dam = plev * 3 / 2 + 100;\r
280                         int rad = plev / 20 + 2;\r
281 \r
282                         if (info) return info_damage(0, 0, dam);\r
283 \r
284                         if (cast)\r
285                         {\r
286                                 if (!get_aim_dir(&dir)) return NULL;\r
287 \r
288                                 fire_ball(GF_NETHER, dir, dam, rad);\r
289                         }\r
290                 }\r
291                 break;\r
292 \r
293         case 15:\r
294                 if (name) return _("\83f\81[\83\82\83\93\8f¢\8a«", "Summon Demon");\r
295                 if (desc) return _("\88«\96\821\91Ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
296 \r
297                 {\r
298                         if (cast)\r
299                         {\r
300                                 bool pet = !one_in_(3);\r
301                                 u32b flg = 0L;\r
302 \r
303                                 if (pet) flg |= PM_FORCE_PET;\r
304                                 else flg |= PM_NO_PET;\r
305                                 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;\r
306 \r
307                                 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, plev * 2 / 3 + randint1(plev / 2), SUMMON_DEMON, flg))\r
308                                 {\r
309                                         msg_print(_("\97°\89©\82Ì\88«\8fL\82ª\8f[\96\9e\82µ\82½\81B", "The area fills with a stench of sulphur and brimstone."));\r
310 \r
311                                         if (pet)\r
312                                         {\r
313                                                 msg_print(_("\81u\82²\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\82²\8eå\90l\97l\81v", "'What is thy bidding... Master?'"));\r
314                                         }\r
315                                         else\r
316                                         {\r
317                                                 msg_print(_("\81u\94Ú\82µ\82«\8eÒ\82æ\81A\89ä\82Í\93ð\82Ì\89º\96l\82É\82 \82ç\82¸\81\82¨\91O\82Ì\8d°\82ð\92¸\82­\82¼\81I\81v",\r
318                                                         "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));\r
319                                         }\r
320                                 }\r
321                                 else\r
322                                 {\r
323                                         msg_print(_("\88«\96\82\82Í\8c»\82ê\82È\82©\82Á\82½\81B", "No demons arrive."));\r
324                                 }\r
325                                 break;\r
326                         }\r
327                 }\r
328                 break;\r
329 \r
330         case 16:\r
331                 if (name) return _("\88«\96\82\82Ì\96Ú", "Devilish Eye");\r
332                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B", "Gives telepathy for a while.");\r
333 \r
334                 {\r
335                         int base = 30;\r
336                         int sides = 25;\r
337 \r
338                         if (info) return info_duration(base, sides);\r
339 \r
340                         if (cast)\r
341                         {\r
342                                 set_tim_esp(randint1(sides) + base, FALSE);\r
343                         }\r
344                 }\r
345                 break;\r
346 \r
347         case 17:\r
348                 if (name) return _("\88«\96\82\82Ì\83N\83\8d\81[\83N", "Devil Cloak");\r
349                 if (desc) return _("\8b°\95|\82ð\8eæ\82è\8f\9c\82«\81A\88ê\92è\8e\9e\8aÔ\81A\89\8a\82Æ\97â\8bC\82Ì\91Ï\90«\81A\89\8a\82Ì\83I\81[\83\89\82ð\93¾\82é\81B\91Ï\90«\82Í\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
350                         "Removes fear. Gives resistance to fire and cold, and aura of fire. These resistances can be added to which from equipment for more powerful resistances.");\r
351 \r
352                 {\r
353                         TIME_EFFECT base = 20;\r
354 \r
355                         if (info) return info_duration(base, base);\r
356 \r
357                         if (cast)\r
358                         {\r
359                                 TIME_EFFECT dur = randint1(base) + base;\r
360 \r
361                                 set_oppose_fire(dur, FALSE);\r
362                                 set_oppose_cold(dur, FALSE);\r
363                                 set_tim_sh_fire(dur, FALSE);\r
364                                 set_afraid(0);\r
365                                 break;\r
366                         }\r
367                 }\r
368                 break;\r
369 \r
370         case 18:\r
371                 if (name) return _("\97n\8aâ\97¬", "The Flow of Lava");\r
372                 if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\89\8a\82Ì\8b\85\82ð\8dì\82è\8fo\82µ\81A\8f°\82ð\97n\8aâ\82É\95Ï\82¦\82é\81B",\r
373                         "Generates a ball of fire centered on you which transforms floors to magma.");\r
374 \r
375                 {\r
376                         HIT_POINT dam = (55 + plev) * 2;\r
377                         int rad = 3;\r
378 \r
379                         if (info) return info_damage(0, 0, dam / 2);\r
380 \r
381                         if (cast)\r
382                         {\r
383                                 fire_ball(GF_FIRE, 0, dam, rad);\r
384                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);\r
385                         }\r
386                 }\r
387                 break;\r
388 \r
389         case 19:\r
390                 if (name) return _("\83v\83\89\83Y\83}\8b\85", "Plasma Ball");\r
391                 if (desc) return _("\83v\83\89\83Y\83}\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of plasma.");\r
392 \r
393                 {\r
394                         HIT_POINT dam = plev * 3 / 2 + 80;\r
395                         int rad = 2 + plev / 40;\r
396 \r
397                         if (info) return info_damage(0, 0, dam);\r
398 \r
399                         if (cast)\r
400                         {\r
401                                 if (!get_aim_dir(&dir)) return NULL;\r
402 \r
403                                 fire_ball(GF_PLASMA, dir, dam, rad);\r
404                         }\r
405                 }\r
406                 break;\r
407 \r
408         case 20:\r
409                 if (name) return _("\88«\96\82\95Ï\89»", "Polymorph Demon");\r
410                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\88«\96\82\82É\95Ï\89»\82·\82é\81B\95Ï\89»\82µ\82Ä\82¢\82é\8aÔ\82Í\96{\97\88\82Ì\8eí\91°\82Ì\94\\97Í\82ð\8e¸\82¢\81A\91ã\82í\82è\82É\88«\96\82\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\82é\81B",\r
411                         "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.");\r
412 \r
413                 {\r
414                         int base = 10 + plev / 2;\r
415 \r
416                         if (info) return info_duration(base, base);\r
417 \r
418                         if (cast)\r
419                         {\r
420                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);\r
421                         }\r
422                 }\r
423                 break;\r
424 \r
425         case 21:\r
426                 if (name) return _("\92n\8d\96\82Ì\94g\93®", "Nather Wave");\r
427                 if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\93Á\82É\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
428                         "Damages all monsters in sight. Hurts good monsters greatly.");\r
429 \r
430                 {\r
431                         int sides1 = plev * 2;\r
432                         int sides2 = plev * 2;\r
433 \r
434                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);\r
435 \r
436                         if (cast)\r
437                         {\r
438                                 dispel_monsters(randint1(sides1));\r
439                                 dispel_good(randint1(sides2));\r
440                         }\r
441                 }\r
442                 break;\r
443 \r
444         case 22:\r
445                 if (name) return _("\83T\83L\83\85\83o\83X\82Ì\90Ú\95«", "Kiss of Succubus");\r
446                 if (desc) return _("\88ö\89Ê\8d¬\97\90\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of nexus.");\r
447 \r
448                 {\r
449                         HIT_POINT dam = 100 + plev * 2;\r
450                         int rad = 4;\r
451 \r
452                         if (info) return info_damage(0, 0, dam);\r
453 \r
454                         if (cast)\r
455                         {\r
456                                 if (!get_aim_dir(&dir)) return NULL;\r
457                                 fire_ball(GF_NEXUS, dir, dam, rad);\r
458                         }\r
459                 }\r
460                 break;\r
461 \r
462         case 23:\r
463                 if (name) return _("\94j\96Å\82Ì\8eè", "Doom Hand");\r
464                 if (desc) return _("\94j\96Å\82Ì\8eè\82ð\95ú\82Â\81B\90H\82ç\82Á\82½\83\82\83\93\83X\83^\81[\82Í\82»\82Ì\82Æ\82«\82ÌHP\82Ì\94¼\95ª\91O\8cã\82Ì\83_\83\81\81[\83W\82ð\8eó\82¯\82é\81B", "Attempts to make a monster's HP almost half.");\r
465 \r
466                 {\r
467                         if (cast)\r
468                         {\r
469                                 if (!get_aim_dir(&dir))\r
470                                         return NULL;\r
471                                 else\r
472                                         msg_print(_("<\94j\96Å\82Ì\8eè>\82ð\95ú\82Á\82½\81I", "You invoke the Hand of Doom!"));\r
473 \r
474                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);\r
475                         }\r
476                 }\r
477                 break;\r
478 \r
479         case 24:\r
480                 if (name) return _("\8em\8bC\8d\82\97g", "Raise the Morale");\r
481                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82é\81B", "Removes fear, and gives bonus to hit and 10 more HP for a while.");\r
482 \r
483                 {\r
484                         int base = 25;\r
485                         if (info) return info_duration(base, base);\r
486                         if (cast)heroism(base);\r
487                 }\r
488                 break;\r
489 \r
490         case 25:\r
491                 if (name) return _("\95s\96Å\82Ì\93÷\91Ì", "Immortal Body");\r
492                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e\9e\8aÔ\8bt\93]\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B", "Gives resistance to time for a while.");\r
493 \r
494                 {\r
495                         int base = 20;\r
496 \r
497                         if (info) return info_duration(base, base);\r
498 \r
499                         if (cast)\r
500                         {\r
501                                 set_tim_res_time(randint1(base) + base, FALSE);\r
502                         }\r
503                 }\r
504                 break;\r
505 \r
506         case 26:\r
507                 if (name) return _("\8b\8bC\82Ì\89~\8aÂ", "Insanity Circle");\r
508                 if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\83J\83I\83X\82Ì\8b\85\81A\8d¬\97\90\82Ì\8b\85\82ð\94­\90\82³\82¹\81A\8bß\82­\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B",\r
509                         "Generate balls of chaos, confusion and charm centered on you.");\r
510 \r
511                 {\r
512                         HIT_POINT dam = 50 + plev;\r
513                         int power = 20 + plev;\r
514                         int rad = 3 + plev / 20;\r
515 \r
516                         if (info) return format("%s%d+%d", s_dam, dam / 2, dam / 2);\r
517 \r
518                         if (cast)\r
519                         {\r
520                                 fire_ball(GF_CHAOS, 0, dam, rad);\r
521                                 fire_ball(GF_CONFUSION, 0, dam, rad);\r
522                                 fire_ball(GF_CHARM, 0, power, rad);\r
523                         }\r
524                 }\r
525                 break;\r
526 \r
527         case 27:\r
528                 if (name) return _("\83y\83b\83g\94\9a\94j", "Explode Pets");\r
529                 if (desc) return _("\91S\82Ä\82Ì\83y\83b\83g\82ð\8b­\90§\93I\82É\94\9a\94j\82³\82¹\82é\81B", "Makes all pets explode.");\r
530 \r
531                 {\r
532                         if (cast)\r
533                         {\r
534                                 discharge_minion();\r
535                         }\r
536                 }\r
537                 break;\r
538 \r
539         case 28:\r
540                 if (name) return _("\83O\83\8c\81[\83^\81[\83f\81[\83\82\83\93\8f¢\8a«", "Summon Greater Demon");\r
541                 if (desc) return _("\8fã\8b\89\83f\81[\83\82\83\93\82ð\8f¢\8a«\82·\82é\81B\8f¢\8a«\82·\82é\82É\82Í\90l\8aÔ('p','h','t'\82Å\95\\82³\82ê\82é\83\82\83\93\83X\83^\81[)\82Ì\8e\80\91Ì\82ð\95ù\82°\82È\82¯\82ê\82Î\82È\82ç\82È\82¢\81B",\r
542                         "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').");\r
543 \r
544                 {\r
545                         if (cast)\r
546                         {\r
547                                 if (!cast_summon_greater_demon()) return NULL;\r
548                         }\r
549                 }\r
550                 break;\r
551 \r
552         case 29:\r
553                 if (name) return _("\92n\8d\96\97\92", "Nether Storm");\r
554                 if (desc) return _("\92´\8b\90\91å\82È\92n\8d\96\82Ì\8b\85\82ð\95ú\82Â\81B", "Generate a huge ball of nether.");\r
555 \r
556                 {\r
557                         HIT_POINT dam = plev * 15;\r
558                         int rad = plev / 5;\r
559 \r
560                         if (info) return info_damage(0, 0, dam);\r
561 \r
562                         if (cast)\r
563                         {\r
564                                 if (!get_aim_dir(&dir)) return NULL;\r
565 \r
566                                 fire_ball(GF_NETHER, dir, dam, rad);\r
567                         }\r
568                 }\r
569                 break;\r
570 \r
571         case 30:\r
572                 if (name) return _("\8c\8c\82Ì\8eô\82¢", "Bloody Curse");\r
573                 if (desc) return _("\8e©\95ª\82ª\83_\83\81\81[\83W\82ð\8eó\82¯\82é\82±\82Æ\82É\82æ\82Á\82Ä\91Î\8fÛ\82É\8eô\82¢\82ð\82©\82¯\81A\83_\83\81\81[\83W\82ð\97^\82¦\97l\81X\82È\8cø\89Ê\82ð\88ø\82«\8bN\82±\82·\81B",\r
574                         "Puts blood curse which damages and causes various effects on a monster. You also take damage.");\r
575 \r
576                 {\r
577                         HIT_POINT dam = 600;\r
578                         int rad = 0;\r
579 \r
580                         if (info) return info_damage(0, 0, dam);\r
581 \r
582                         if (cast)\r
583                         {\r
584                                 if (!get_aim_dir(&dir)) return NULL;\r
585 \r
586                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);\r
587                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("\8c\8c\82Ì\8eô\82¢", "Blood curse"), -1);\r
588                         }\r
589                 }\r
590                 break;\r
591 \r
592         case 31:\r
593                 if (name) return _("\96\82\89¤\95Ï\89»", "Polymorph Demonlord");\r
594                 if (desc) return _("\88«\96\82\82Ì\89¤\82É\95Ï\89»\82·\82é\81B\95Ï\89»\82µ\82Ä\82¢\82é\8aÔ\82Í\96{\97\88\82Ì\8eí\91°\82Ì\94\\97Í\82ð\8e¸\82¢\81A\91ã\82í\82è\82É\88«\96\82\82Ì\89¤\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\81A\95Ç\82ð\94j\89ó\82µ\82È\82ª\82ç\95à\82­\81B",\r
595                         "Mimic a demon lord for a while. Loses abilities of original race and gets great abilities as a demon lord. Even hard walls can't stop your walking.");\r
596 \r
597                 {\r
598                         int base = 15;\r
599 \r
600                         if (info) return info_duration(base, base);\r
601 \r
602                         if (cast)\r
603                         {\r
604                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);\r
605                         }\r
606                 }\r
607                 break;\r
608         }\r
609 \r
610         return "";\r
611 }\r
612 \r