OSDN Git Service

[Refactor] #37353 悪魔領域処理を cmd-spell.c から realm-daemon.c/h へ分離。
[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 (p_ptr->pclass == CLASS_MAGE ||\r
158                                 p_ptr->pclass == CLASS_HIGH_MAGE ||\r
159                                 p_ptr->pclass == CLASS_SORCERER)\r
160                                 base = plev + plev / 2;\r
161                         else\r
162                                 base = plev + plev / 4;\r
163 \r
164 \r
165                         if (info) return info_damage(dice, sides, base);\r
166 \r
167                         if (cast)\r
168                         {\r
169                                 if (!get_aim_dir(&dir)) return NULL;\r
170 \r
171                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);\r
172                         }\r
173                 }\r
174                 break;\r
175 \r
176         case 8:\r
177                 if (name) return _("\83f\81[\83\82\83\93\8ex\94z", "Dominate Demon");\r
178                 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
179 \r
180                 {\r
181                         int power = plev;\r
182 \r
183                         if (info) return info_power(power);\r
184 \r
185                         if (cast)\r
186                         {\r
187                                 if (!get_aim_dir(&dir)) return NULL;\r
188 \r
189                                 control_one_demon(dir, power);\r
190                         }\r
191                 }\r
192                 break;\r
193 \r
194         case 9:\r
195                 if (name) return _("\83r\83W\83\87\83\93", "Vision");\r
196                 if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "Maps nearby area.");\r
197 \r
198                 {\r
199                         int rad = DETECT_RAD_MAP;\r
200 \r
201                         if (info) return info_radius(rad);\r
202 \r
203                         if (cast)\r
204                         {\r
205                                 map_area(rad);\r
206                         }\r
207                 }\r
208                 break;\r
209 \r
210         case 10:\r
211                 if (name) return _("\91Ï\92n\8d\96", "Resist Nether");\r
212                 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
213 \r
214                 {\r
215                         int base = 20;\r
216 \r
217                         if (info) return info_duration(base, base);\r
218 \r
219                         if (cast)\r
220                         {\r
221                                 set_tim_res_nether(randint1(base) + base, FALSE);\r
222                         }\r
223                 }\r
224                 break;\r
225 \r
226         case 11:\r
227                 if (name) return _("\83v\83\89\83Y\83}\81E\83{\83\8b\83g", "Plasma bolt");\r
228                 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
229 \r
230                 {\r
231                         int dice = 11 + (plev - 5) / 4;\r
232                         int sides = 8;\r
233 \r
234                         if (info) return info_damage(dice, sides, 0);\r
235 \r
236                         if (cast)\r
237                         {\r
238                                 if (!get_aim_dir(&dir)) return NULL;\r
239 \r
240                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));\r
241                         }\r
242                 }\r
243                 break;\r
244 \r
245         case 12:\r
246                 if (name) return _("\83t\83@\83C\83A\81E\83{\81[\83\8b", "Fire Ball");\r
247                 if (desc) return _("\89\8a\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of fire.");\r
248 \r
249                 {\r
250                         HIT_POINT dam = plev + 55;\r
251                         int rad = 2;\r
252 \r
253                         if (info) return info_damage(0, 0, dam);\r
254 \r
255                         if (cast)\r
256                         {\r
257                                 if (!get_aim_dir(&dir)) return NULL;\r
258 \r
259                                 fire_ball(GF_FIRE, dir, dam, rad);\r
260                         }\r
261                 }\r
262                 break;\r
263 \r
264         case 13:\r
265                 if (name) return _("\89\8a\82Ì\90n", "Fire Branding");\r
266                 if (desc) return _("\95\90\8aí\82É\89\8a\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon fire branded.");\r
267 \r
268                 {\r
269                         if (cast)\r
270                         {\r
271                                 brand_weapon(1);\r
272                         }\r
273                 }\r
274                 break;\r
275 \r
276         case 14:\r
277                 if (name) return _("\92n\8d\96\8b\85", "Nether Ball");\r
278                 if (desc) return _("\91å\82«\82È\92n\8d\96\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of nether.");\r
279 \r
280                 {\r
281                         HIT_POINT dam = plev * 3 / 2 + 100;\r
282                         int rad = plev / 20 + 2;\r
283 \r
284                         if (info) return info_damage(0, 0, dam);\r
285 \r
286                         if (cast)\r
287                         {\r
288                                 if (!get_aim_dir(&dir)) return NULL;\r
289 \r
290                                 fire_ball(GF_NETHER, dir, dam, rad);\r
291                         }\r
292                 }\r
293                 break;\r
294 \r
295         case 15:\r
296                 if (name) return _("\83f\81[\83\82\83\93\8f¢\8a«", "Summon Demon");\r
297                 if (desc) return _("\88«\96\821\91Ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
298 \r
299                 {\r
300                         if (cast)\r
301                         {\r
302                                 bool pet = !one_in_(3);\r
303                                 u32b flg = 0L;\r
304 \r
305                                 if (pet) flg |= PM_FORCE_PET;\r
306                                 else flg |= PM_NO_PET;\r
307                                 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;\r
308 \r
309                                 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, plev * 2 / 3 + randint1(plev / 2), SUMMON_DEMON, flg))\r
310                                 {\r
311                                         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
312 \r
313                                         if (pet)\r
314                                         {\r
315                                                 msg_print(_("\81u\82²\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\82²\8eå\90l\97l\81v", "'What is thy bidding... Master?'"));\r
316                                         }\r
317                                         else\r
318                                         {\r
319                                                 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
320                                                         "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));\r
321                                         }\r
322                                 }\r
323                                 else\r
324                                 {\r
325                                         msg_print(_("\88«\96\82\82Í\8c»\82ê\82È\82©\82Á\82½\81B", "No demons arrive."));\r
326                                 }\r
327                                 break;\r
328                         }\r
329                 }\r
330                 break;\r
331 \r
332         case 16:\r
333                 if (name) return _("\88«\96\82\82Ì\96Ú", "Devilish Eye");\r
334                 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
335 \r
336                 {\r
337                         int base = 30;\r
338                         int sides = 25;\r
339 \r
340                         if (info) return info_duration(base, sides);\r
341 \r
342                         if (cast)\r
343                         {\r
344                                 set_tim_esp(randint1(sides) + base, FALSE);\r
345                         }\r
346                 }\r
347                 break;\r
348 \r
349         case 17:\r
350                 if (name) return _("\88«\96\82\82Ì\83N\83\8d\81[\83N", "Devil Cloak");\r
351                 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
352                         "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
353 \r
354                 {\r
355                         TIME_EFFECT base = 20;\r
356 \r
357                         if (info) return info_duration(base, base);\r
358 \r
359                         if (cast)\r
360                         {\r
361                                 TIME_EFFECT dur = randint1(base) + base;\r
362 \r
363                                 set_oppose_fire(dur, FALSE);\r
364                                 set_oppose_cold(dur, FALSE);\r
365                                 set_tim_sh_fire(dur, FALSE);\r
366                                 set_afraid(0);\r
367                                 break;\r
368                         }\r
369                 }\r
370                 break;\r
371 \r
372         case 18:\r
373                 if (name) return _("\97n\8aâ\97¬", "The Flow of Lava");\r
374                 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
375                         "Generates a ball of fire centered on you which transforms floors to magma.");\r
376 \r
377                 {\r
378                         HIT_POINT dam = (55 + plev) * 2;\r
379                         int rad = 3;\r
380 \r
381                         if (info) return info_damage(0, 0, dam / 2);\r
382 \r
383                         if (cast)\r
384                         {\r
385                                 fire_ball(GF_FIRE, 0, dam, rad);\r
386                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);\r
387                         }\r
388                 }\r
389                 break;\r
390 \r
391         case 19:\r
392                 if (name) return _("\83v\83\89\83Y\83}\8b\85", "Plasma Ball");\r
393                 if (desc) return _("\83v\83\89\83Y\83}\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of plasma.");\r
394 \r
395                 {\r
396                         HIT_POINT dam = plev * 3 / 2 + 80;\r
397                         int rad = 2 + plev / 40;\r
398 \r
399                         if (info) return info_damage(0, 0, dam);\r
400 \r
401                         if (cast)\r
402                         {\r
403                                 if (!get_aim_dir(&dir)) return NULL;\r
404 \r
405                                 fire_ball(GF_PLASMA, dir, dam, rad);\r
406                         }\r
407                 }\r
408                 break;\r
409 \r
410         case 20:\r
411                 if (name) return _("\88«\96\82\95Ï\89»", "Polymorph Demon");\r
412                 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
413                         "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.");\r
414 \r
415                 {\r
416                         int base = 10 + plev / 2;\r
417 \r
418                         if (info) return info_duration(base, base);\r
419 \r
420                         if (cast)\r
421                         {\r
422                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);\r
423                         }\r
424                 }\r
425                 break;\r
426 \r
427         case 21:\r
428                 if (name) return _("\92n\8d\96\82Ì\94g\93®", "Nather Wave");\r
429                 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
430                         "Damages all monsters in sight. Hurts good monsters greatly.");\r
431 \r
432                 {\r
433                         int sides1 = plev * 2;\r
434                         int sides2 = plev * 2;\r
435 \r
436                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);\r
437 \r
438                         if (cast)\r
439                         {\r
440                                 dispel_monsters(randint1(sides1));\r
441                                 dispel_good(randint1(sides2));\r
442                         }\r
443                 }\r
444                 break;\r
445 \r
446         case 22:\r
447                 if (name) return _("\83T\83L\83\85\83o\83X\82Ì\90Ú\95«", "Kiss of Succubus");\r
448                 if (desc) return _("\88ö\89Ê\8d¬\97\90\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of nexus.");\r
449 \r
450                 {\r
451                         HIT_POINT dam = 100 + plev * 2;\r
452                         int rad = 4;\r
453 \r
454                         if (info) return info_damage(0, 0, dam);\r
455 \r
456                         if (cast)\r
457                         {\r
458                                 if (!get_aim_dir(&dir)) return NULL;\r
459                                 fire_ball(GF_NEXUS, dir, dam, rad);\r
460                         }\r
461                 }\r
462                 break;\r
463 \r
464         case 23:\r
465                 if (name) return _("\94j\96Å\82Ì\8eè", "Doom Hand");\r
466                 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
467 \r
468                 {\r
469                         if (cast)\r
470                         {\r
471                                 if (!get_aim_dir(&dir))\r
472                                         return NULL;\r
473                                 else\r
474                                         msg_print(_("<\94j\96Å\82Ì\8eè>\82ð\95ú\82Á\82½\81I", "You invoke the Hand of Doom!"));\r
475 \r
476                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);\r
477                         }\r
478                 }\r
479                 break;\r
480 \r
481         case 24:\r
482                 if (name) return _("\8em\8bC\8d\82\97g", "Raise the Morale");\r
483                 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
484 \r
485                 {\r
486                         int base = 25;\r
487 \r
488                         if (info) return info_duration(base, base);\r
489 \r
490                         if (cast)\r
491                         {\r
492                                 set_hero(randint1(base) + base, FALSE);\r
493                                 hp_player(10);\r
494                                 set_afraid(0);\r
495                         }\r
496                 }\r
497                 break;\r
498 \r
499         case 25:\r
500                 if (name) return _("\95s\96Å\82Ì\93÷\91Ì", "Immortal Body");\r
501                 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
502 \r
503                 {\r
504                         int base = 20;\r
505 \r
506                         if (info) return info_duration(base, base);\r
507 \r
508                         if (cast)\r
509                         {\r
510                                 set_tim_res_time(randint1(base) + base, FALSE);\r
511                         }\r
512                 }\r
513                 break;\r
514 \r
515         case 26:\r
516                 if (name) return _("\8b\8bC\82Ì\89~\8aÂ", "Insanity Circle");\r
517                 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
518                         "Generate balls of chaos, confusion and charm centered on you.");\r
519 \r
520                 {\r
521                         HIT_POINT dam = 50 + plev;\r
522                         int power = 20 + plev;\r
523                         int rad = 3 + plev / 20;\r
524 \r
525                         if (info) return format("%s%d+%d", s_dam, dam / 2, dam / 2);\r
526 \r
527                         if (cast)\r
528                         {\r
529                                 fire_ball(GF_CHAOS, 0, dam, rad);\r
530                                 fire_ball(GF_CONFUSION, 0, dam, rad);\r
531                                 fire_ball(GF_CHARM, 0, power, rad);\r
532                         }\r
533                 }\r
534                 break;\r
535 \r
536         case 27:\r
537                 if (name) return _("\83y\83b\83g\94\9a\94j", "Explode Pets");\r
538                 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
539 \r
540                 {\r
541                         if (cast)\r
542                         {\r
543                                 discharge_minion();\r
544                         }\r
545                 }\r
546                 break;\r
547 \r
548         case 28:\r
549                 if (name) return _("\83O\83\8c\81[\83^\81[\83f\81[\83\82\83\93\8f¢\8a«", "Summon Greater Demon");\r
550                 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
551                         "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').");\r
552 \r
553                 {\r
554                         if (cast)\r
555                         {\r
556                                 if (!cast_summon_greater_demon()) return NULL;\r
557                         }\r
558                 }\r
559                 break;\r
560 \r
561         case 29:\r
562                 if (name) return _("\92n\8d\96\97\92", "Nether Storm");\r
563                 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
564 \r
565                 {\r
566                         HIT_POINT dam = plev * 15;\r
567                         int rad = plev / 5;\r
568 \r
569                         if (info) return info_damage(0, 0, dam);\r
570 \r
571                         if (cast)\r
572                         {\r
573                                 if (!get_aim_dir(&dir)) return NULL;\r
574 \r
575                                 fire_ball(GF_NETHER, dir, dam, rad);\r
576                         }\r
577                 }\r
578                 break;\r
579 \r
580         case 30:\r
581                 if (name) return _("\8c\8c\82Ì\8eô\82¢", "Bloody Curse");\r
582                 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
583                         "Puts blood curse which damages and causes various effects on a monster. You also take damage.");\r
584 \r
585                 {\r
586                         HIT_POINT dam = 600;\r
587                         int rad = 0;\r
588 \r
589                         if (info) return info_damage(0, 0, dam);\r
590 \r
591                         if (cast)\r
592                         {\r
593                                 if (!get_aim_dir(&dir)) return NULL;\r
594 \r
595                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);\r
596                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("\8c\8c\82Ì\8eô\82¢", "Blood curse"), -1);\r
597                         }\r
598                 }\r
599                 break;\r
600 \r
601         case 31:\r
602                 if (name) return _("\96\82\89¤\95Ï\89»", "Polymorph Demonlord");\r
603                 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
604                         "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
605 \r
606                 {\r
607                         int base = 15;\r
608 \r
609                         if (info) return info_duration(base, base);\r
610 \r
611                         if (cast)\r
612                         {\r
613                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);\r
614                         }\r
615                 }\r
616                 break;\r
617         }\r
618 \r
619         return "";\r
620 }\r
621 \r