OSDN Git Service

#37353 特殊部屋生成処理を rooms.c から rooms-special.c/h へ分離。
[hengband/hengband.git] / src / realm-death.c
1 #include "angband.h"\r
2 #include "cmd-spell.h"\r
3 \r
4 \r
5 \r
6 /*!\r
7 * @brief \88Ã\8d\95\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_death_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 \r
19         static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
20         static const char s_random[] = _("\83\89\83\93\83_\83\80", "random");\r
21 \r
22         int dir;\r
23         int plev = p_ptr->lev;\r
24 \r
25         switch (spell)\r
26         {\r
27         case 0:\r
28                 if (name) return _("\96³\90\96½\8a´\92m", "Detect Unlife");\r
29                 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
30 \r
31                 {\r
32                         int rad = DETECT_RAD_DEFAULT;\r
33 \r
34                         if (info) return info_radius(rad);\r
35 \r
36                         if (cast)\r
37                         {\r
38                                 detect_monsters_nonliving(rad);\r
39                         }\r
40                 }\r
41                 break;\r
42 \r
43         case 1:\r
44                 if (name) return _("\8eô\8eE\92e", "Malediction");\r
45                 if (desc) return _("\82²\82­\8f¬\82³\82È\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
46                         "Fires a tiny ball of evil power which hurts good monsters greatly.");\r
47 \r
48                 {\r
49                         int dice = 3 + (plev - 1) / 5;\r
50                         int sides = 4;\r
51                         int rad = 0;\r
52 \r
53                         if (info) return info_damage(dice, sides, 0);\r
54 \r
55                         if (cast)\r
56                         {\r
57                                 if (!get_aim_dir(&dir)) return NULL;\r
58 \r
59                                 /*\r
60                                 * A radius-0 ball may (1) be aimed at\r
61                                 * objects etc., and will affect them;\r
62                                 * (2) may be aimed at ANY visible\r
63                                 * monster, unlike a 'bolt' which must\r
64                                 * travel to the monster.\r
65                                 */\r
66 \r
67                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);\r
68 \r
69                                 if (one_in_(5))\r
70                                 {\r
71                                         /* Special effect first */\r
72                                         int effect = randint1(1000);\r
73 \r
74                                         if (effect == 666)\r
75                                                 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);\r
76                                         else if (effect < 500)\r
77                                                 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);\r
78                                         else if (effect < 800)\r
79                                                 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);\r
80                                         else\r
81                                                 fire_ball_hide(GF_STUN, dir, plev, 0);\r
82                                 }\r
83                         }\r
84                 }\r
85                 break;\r
86 \r
87         case 2:\r
88                 if (name) return _("\8e×\88«\8a´\92m", "Detect Evil");\r
89                 if (desc) return _("\8bß\82­\82Ì\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all evil monsters in your vicinity.");\r
90 \r
91                 {\r
92                         int rad = DETECT_RAD_DEFAULT;\r
93 \r
94                         if (info) return info_radius(rad);\r
95 \r
96                         if (cast)\r
97                         {\r
98                                 detect_monsters_evil(rad);\r
99                         }\r
100                 }\r
101                 break;\r
102 \r
103         case 3:\r
104                 if (name) return _("\88«\8fL\89_", "Stinking Cloud");\r
105                 if (desc) return _("\93Å\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of poison.");\r
106 \r
107                 {\r
108                         HIT_POINT dam = 10 + plev / 2;\r
109                         int rad = 2;\r
110 \r
111                         if (info) return info_damage(0, 0, dam);\r
112 \r
113                         if (cast)\r
114                         {\r
115                                 if (!get_aim_dir(&dir)) return NULL;\r
116 \r
117                                 fire_ball(GF_POIS, dir, dam, rad);\r
118                         }\r
119                 }\r
120                 break;\r
121 \r
122         case 4:\r
123                 if (name) return _("\8d\95\82¢\96°\82è", "Black Sleep");\r
124                 if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep a monster.");\r
125 \r
126                 {\r
127                         int power = plev;\r
128 \r
129                         if (info) return info_power(power);\r
130 \r
131                         if (cast)\r
132                         {\r
133                                 if (!get_aim_dir(&dir)) return NULL;\r
134 \r
135                                 sleep_monster(dir, plev);\r
136                         }\r
137                 }\r
138                 break;\r
139 \r
140         case 5:\r
141                 if (name) return _("\91Ï\93Å", "Resist Poison");\r
142                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93Å\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
143                         "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
144 \r
145                 {\r
146                         int base = 20;\r
147 \r
148                         if (info) return info_duration(base, base);\r
149 \r
150                         if (cast)\r
151                         {\r
152                                 set_oppose_pois(randint1(base) + base, FALSE);\r
153                         }\r
154                 }\r
155                 break;\r
156 \r
157         case 6:\r
158                 if (name) return _("\8b°\8dQ", "Horrify");\r
159                 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
160 \r
161                 {\r
162                         int power = plev;\r
163 \r
164                         if (info) return info_power(power);\r
165 \r
166                         if (cast)\r
167                         {\r
168                                 if (!get_aim_dir(&dir)) return NULL;\r
169 \r
170                                 fear_monster(dir, power);\r
171                                 stun_monster(dir, power);\r
172                         }\r
173                 }\r
174                 break;\r
175 \r
176         case 7:\r
177                 if (name) return _("\83A\83\93\83f\83b\83h\8f]\91®", "Enslave Undead");\r
178                 if (desc) return _("\83A\83\93\83f\83b\83h1\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to charm an undead monster.");\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_undead(dir, power);\r
190                         }\r
191                 }\r
192                 break;\r
193 \r
194         case 8:\r
195                 if (name) return _("\83G\83\93\83g\83\8d\83s\81[\82Ì\8b\85", "Orb of Entropy");\r
196                 if (desc) return _("\90\96½\82Ì\82 \82é\8eÒ\82ÌHP\82Æ\8dÅ\91åHP\91o\95û\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\8cø\89Ê\82Ì\82 \82é\8b\85\82ð\95ú\82Â\81B", "Fires a ball which damages to both HP and MaxHP of living monsters.");\r
197 \r
198                 {\r
199                         int dice = 3;\r
200                         int sides = 6;\r
201                         int rad = (plev < 30) ? 2 : 3;\r
202                         int base;\r
203 \r
204                         if (p_ptr->pclass == CLASS_MAGE ||\r
205                                 p_ptr->pclass == CLASS_HIGH_MAGE ||\r
206                                 p_ptr->pclass == CLASS_SORCERER)\r
207                                 base = plev + plev / 2;\r
208                         else\r
209                                 base = plev + plev / 4;\r
210 \r
211 \r
212                         if (info) return info_damage(dice, sides, base);\r
213 \r
214                         if (cast)\r
215                         {\r
216                                 if (!get_aim_dir(&dir)) return NULL;\r
217 \r
218                                 fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);\r
219                         }\r
220                 }\r
221                 break;\r
222 \r
223         case 9:\r
224                 if (name) return _("\92n\8d\96\82Ì\96î", "Nether Bolt");\r
225                 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
226 \r
227                 {\r
228                         int dice = 8 + (plev - 5) / 4;\r
229                         int sides = 8;\r
230 \r
231                         if (info) return info_damage(dice, sides, 0);\r
232 \r
233                         if (cast)\r
234                         {\r
235                                 if (!get_aim_dir(&dir)) return NULL;\r
236 \r
237                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
238                         }\r
239                 }\r
240                 break;\r
241 \r
242         case 10:\r
243                 if (name) return _("\8eE\9dC\89_", "Cloud kill");\r
244                 if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\93Å\82Ì\8b\85\82ð\94­\90\82³\82¹\82é\81B", "Generate a ball of poison centered on you.");\r
245 \r
246                 {\r
247                         HIT_POINT dam = (30 + plev) * 2;\r
248                         int rad = plev / 10 + 2;\r
249 \r
250                         if (info) return info_damage(0, 0, dam / 2);\r
251 \r
252                         if (cast)\r
253                         {\r
254                                 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);\r
255                         }\r
256                 }\r
257                 break;\r
258 \r
259         case 11:\r
260                 if (name) return _("\83\82\83\93\83X\83^\81[\8fÁ\96Å", "Genocide One");\r
261                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8fÁ\82µ\8b\8e\82é\81B\8co\8c±\92l\82â\83A\83C\83e\83\80\82Í\8eè\82É\93ü\82ç\82È\82¢\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to vanish a monster.");\r
262 \r
263                 {\r
264                         int power = plev + 50;\r
265 \r
266                         if (info) return info_power(power);\r
267 \r
268                         if (cast)\r
269                         {\r
270                                 if (!get_aim_dir(&dir)) return NULL;\r
271 \r
272                                 fire_ball_hide(GF_GENOCIDE, dir, power, 0);\r
273                         }\r
274                 }\r
275                 break;\r
276 \r
277         case 12:\r
278                 if (name) return _("\93Å\82Ì\90n", "Poison Branding");\r
279                 if (desc) return _("\95\90\8aí\82É\93Å\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon poison branded.");\r
280 \r
281                 {\r
282                         if (cast)\r
283                         {\r
284                                 brand_weapon(3);\r
285                         }\r
286                 }\r
287                 break;\r
288 \r
289         case 13:\r
290                 if (name) return _("\8bz\8c\8c\82Ì\96î", "Vampiric Bolt");\r
291                 if (desc) return _("\83{\83\8b\83g\82É\82æ\82è\83\82\83\93\83X\83^\81[1\91Ì\82©\82ç\90\96½\97Í\82ð\8bz\82¢\82Æ\82é\81B\8bz\82¢\82Æ\82Á\82½\90\96½\97Í\82É\82æ\82Á\82Ä\96\9e\95 \93x\82ª\8fã\82ª\82é\81B",\r
292                         "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");\r
293 \r
294                 {\r
295                         int dice = 1;\r
296                         int sides = plev * 2;\r
297                         int base = plev * 2;\r
298 \r
299                         if (info) return info_damage(dice, sides, base);\r
300 \r
301                         if (cast)\r
302                         {\r
303                                 HIT_POINT dam = base + damroll(dice, sides);\r
304 \r
305                                 if (!get_aim_dir(&dir)) return NULL;\r
306 \r
307                                 if (hypodynamic_bolt(dir, dam))\r
308                                 {\r
309                                         chg_virtue(V_SACRIFICE, -1);\r
310                                         chg_virtue(V_VITALITY, -1);\r
311 \r
312                                         hp_player(dam);\r
313 \r
314                                         /*\r
315                                         * Gain nutritional sustenance:\r
316                                         * 150/hp drained\r
317                                         *\r
318                                         * A Food ration gives 5000\r
319                                         * food points (by contrast)\r
320                                         * Don't ever get more than\r
321                                         * "Full" this way But if we\r
322                                         * ARE Gorged, it won't cure\r
323                                         * us\r
324                                         */\r
325                                         dam = p_ptr->food + MIN(5000, 100 * dam);\r
326 \r
327                                         /* Not gorged already */\r
328                                         if (p_ptr->food < PY_FOOD_MAX)\r
329                                                 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);\r
330                                 }\r
331                         }\r
332                 }\r
333                 break;\r
334 \r
335         case 14:\r
336                 if (name) return _("\94½\8d°\82Ì\8fp", "Animate dead");\r
337                 if (desc) return _("\8eü\88Í\82Ì\8e\80\91Ì\82â\8d\9c\82ð\90\82«\95Ô\82·\81B", "Resurrects nearby corpse and skeletons. And makes these your pets.");\r
338 \r
339                 {\r
340                         if (cast)\r
341                         {\r
342                                 animate_dead(0, p_ptr->y, p_ptr->x);\r
343                         }\r
344                 }\r
345                 break;\r
346 \r
347         case 15:\r
348                 if (name) return _("\96\95\8eE", "Genocide");\r
349                 if (desc) return _("\8ew\92è\82µ\82½\95\8e\9a\82Ì\83\82\83\93\83X\83^\81[\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
350                         "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.");\r
351 \r
352                 {\r
353                         int power = plev + 50;\r
354 \r
355                         if (info) return info_power(power);\r
356 \r
357                         if (cast)\r
358                         {\r
359                                 symbol_genocide(power, TRUE);\r
360                         }\r
361                 }\r
362                 break;\r
363 \r
364         case 16:\r
365                 if (name) return _("\8b\90í\8em\89»", "Berserk");\r
366                 if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82·\82é\81B", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
367 \r
368                 {\r
369                         int base = 25;\r
370 \r
371                         if (info) return info_duration(base, base);\r
372 \r
373                         if (cast)\r
374                         {\r
375                                 set_shero(randint1(base) + base, FALSE);\r
376                                 hp_player(30);\r
377                                 set_afraid(0);\r
378                         }\r
379                 }\r
380                 break;\r
381 \r
382         case 17:\r
383                 if (name) return _("\88«\97ì\8f¢\8a«", "Invoke Spirits");\r
384                 if (desc) return _("\83\89\83\93\83_\83\80\82Å\97l\81X\82È\8cø\89Ê\82ª\8bN\82±\82é\81B", "Causes random effects.");\r
385 \r
386                 {\r
387                         if (info) return s_random;\r
388 \r
389                         if (cast)\r
390                         {\r
391                                 if (!get_aim_dir(&dir)) return NULL;\r
392 \r
393                                 cast_invoke_spirits(dir);\r
394                         }\r
395                 }\r
396                 break;\r
397 \r
398         case 18:\r
399                 if (name) return _("\88Ã\8d\95\82Ì\96î", "Dark Bolt");\r
400                 if (desc) return _("\88Ã\8d\95\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of darkness.");\r
401 \r
402                 {\r
403                         int dice = 4 + (plev - 5) / 4;\r
404                         int sides = 8;\r
405 \r
406                         if (info) return info_damage(dice, sides, 0);\r
407 \r
408                         if (cast)\r
409                         {\r
410                                 if (!get_aim_dir(&dir)) return NULL;\r
411 \r
412                                 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));\r
413                         }\r
414                 }\r
415                 break;\r
416 \r
417         case 19:\r
418                 if (name) return _("\8b\97\90\90í\8em", "Battle Frenzy");\r
419                 if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82µ\81A\89Á\91¬\82·\82é\81B",\r
420                         "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");\r
421 \r
422                 {\r
423                         int b_base = 25;\r
424                         int sp_base = plev / 2;\r
425                         int sp_sides = 20 + plev / 2;\r
426 \r
427                         if (info) return info_duration(b_base, b_base);\r
428 \r
429                         if (cast)\r
430                         {\r
431                                 set_shero(randint1(25) + 25, FALSE);\r
432                                 hp_player(30);\r
433                                 set_afraid(0);\r
434                                 set_fast(randint1(sp_sides) + sp_base, FALSE);\r
435                         }\r
436                 }\r
437                 break;\r
438 \r
439         case 20:\r
440                 if (name) return _("\8bz\8c\8c\82Ì\90n", "Vampiric Branding");\r
441                 if (desc) return _("\95\90\8aí\82É\8bz\8c\8c\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon Vampiric.");\r
442 \r
443                 {\r
444                         if (cast)\r
445                         {\r
446                                 brand_weapon(4);\r
447                         }\r
448                 }\r
449                 break;\r
450 \r
451         case 21:\r
452                 if (name) return _("\8bz\8c\8c\82Ì\98A\96î", "Vampiric Bolts");\r
453                 if (desc) return _("3\98A\8eË\82Ì\83{\83\8b\83g\82É\82æ\82è\83\82\83\93\83X\83^\81[1\91Ì\82©\82ç\90\96½\97Í\82ð\8bz\82¢\82Æ\82é\81B\8bz\82¢\82Æ\82Á\82½\90\96½\97Í\82É\82æ\82Á\82Ä\91Ì\97Í\82ª\89ñ\95\9c\82·\82é\81B",\r
454                         "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");\r
455                 {\r
456                         HIT_POINT dam = 100;\r
457 \r
458                         if (info) return format("%s3*%d", s_dam, dam);\r
459 \r
460                         if (cast)\r
461                         {\r
462                                 int i;\r
463 \r
464                                 if (!get_aim_dir(&dir)) return NULL;\r
465 \r
466                                 chg_virtue(V_SACRIFICE, -1);\r
467                                 chg_virtue(V_VITALITY, -1);\r
468 \r
469                                 for (i = 0; i < 3; i++)\r
470                                 {\r
471                                         if (hypodynamic_bolt(dir, dam))\r
472                                                 hp_player(dam);\r
473                                 }\r
474                         }\r
475                 }\r
476                 break;\r
477 \r
478         case 22:\r
479                 if (name) return _("\8e\80\82Ì\8c¾\8d°", "Nether Wave");\r
480                 if (desc) return _("\8e\8b\8aE\93à\82Ì\90\96½\82Ì\82 \82é\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Damages all living monsters in sight.");\r
481 \r
482                 {\r
483                         int sides = plev * 3;\r
484 \r
485                         if (info) return info_damage(1, sides, 0);\r
486 \r
487                         if (cast)\r
488                         {\r
489                                 dispel_living(randint1(sides));\r
490                         }\r
491                 }\r
492                 break;\r
493 \r
494         case 23:\r
495                 if (name) return _("\88Ã\8d\95\82Ì\97\92", "Darkness Storm");\r
496                 if (desc) return _("\8b\90\91å\82È\88Ã\8d\95\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of darkness.");\r
497 \r
498                 {\r
499                         HIT_POINT dam = 100 + plev * 2;\r
500                         int rad = 4;\r
501 \r
502                         if (info) return info_damage(0, 0, dam);\r
503 \r
504                         if (cast)\r
505                         {\r
506                                 if (!get_aim_dir(&dir)) return NULL;\r
507 \r
508                                 fire_ball(GF_DARK, dir, dam, rad);\r
509                         }\r
510                 }\r
511                 break;\r
512 \r
513         case 24:\r
514                 if (name) return _("\8e\80\82Ì\8cõ\90ü", "Death Ray");\r
515                 if (desc) return _("\8e\80\82Ì\8cõ\90ü\82ð\95ú\82Â\81B", "Fires a beam of death.");\r
516 \r
517                 {\r
518                         if (cast)\r
519                         {\r
520                                 if (!get_aim_dir(&dir)) return NULL;\r
521 \r
522                                 death_ray(dir, plev);\r
523                         }\r
524                 }\r
525                 break;\r
526 \r
527         case 25:\r
528                 if (name) return _("\8e\80\8eÒ\8f¢\8a«", "Raise the Dead");\r
529                 if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
530 \r
531                 {\r
532                         if (cast)\r
533                         {\r
534                                 int type;\r
535                                 bool pet = one_in_(3);\r
536                                 u32b flg = 0L;\r
537 \r
538                                 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);\r
539 \r
540                                 if (!pet || (pet && (plev > 24) && one_in_(3)))\r
541                                         flg |= PM_ALLOW_GROUP;\r
542 \r
543                                 if (pet) flg |= PM_FORCE_PET;\r
544                                 else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);\r
545 \r
546                                 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))\r
547                                 {\r
548                                         msg_print(_("\97â\82½\82¢\95\97\82ª\82 \82È\82½\82Ì\8eü\82è\82É\90\81\82«\8en\82ß\82½\81B\82»\82ê\82Í\95\85\94s\8fL\82ð\89^\82ñ\82Å\82¢\82é...",\r
549                                                 "Cold winds begin to blow around you, carrying with them the stench of decay..."));\r
550 \r
551 \r
552                                         if (pet)\r
553                                         {\r
554                                                 msg_print(_("\8cÃ\82¦\82Ì\8e\80\82¹\82é\8eÒ\8b¤\82ª\82 \82È\82½\82É\8ed\82¦\82é\82½\82ß\93y\82©\82çáS\82Á\82½\81I",\r
555                                                         "Ancient, long-dead forms arise from the ground to serve you!"));\r
556                                         }\r
557                                         else\r
558                                         {\r
559                                                 msg_print(_("\8e\80\8eÒ\82ªáS\82Á\82½\81B\96°\82è\82ð\96W\82°\82é\82 \82È\82½\82ð\94±\82·\82é\82½\82ß\82É\81I",\r
560                                                         "'The dead arise... to punish you for disturbing them!'"));\r
561                                         }\r
562 \r
563                                         chg_virtue(V_UNLIFE, 1);\r
564                                 }\r
565                         }\r
566                 }\r
567                 break;\r
568 \r
569         case 26:\r
570                 if (name) return _("\8e\80\8eÒ\82Ì\94é\93`", "Esoteria");\r
571                 if (desc) return _("\83A\83C\83e\83\80\82ð1\82Â\8e¯\95Ê\82·\82é\81B\83\8c\83x\83\8b\82ª\8d\82\82¢\82Æ\83A\83C\83e\83\80\82Ì\94\\97Í\82ð\8a®\91S\82É\92m\82é\82±\82Æ\82ª\82Å\82«\82é\81B",\r
572                         "Identifies an item. Or *identifies* an item at higher level.");\r
573 \r
574                 {\r
575                         if (cast)\r
576                         {\r
577                                 if (randint1(50) > plev)\r
578                                 {\r
579                                         if (!ident_spell(FALSE)) return NULL;\r
580                                 }\r
581                                 else\r
582                                 {\r
583                                         if (!identify_fully(FALSE)) return NULL;\r
584                                 }\r
585                         }\r
586                 }\r
587                 break;\r
588 \r
589         case 27:\r
590                 if (name) return _("\8bz\8c\8c\8bS\95Ï\89»", "Polymorph Vampire");\r
591                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8bz\8c\8c\8bS\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É\8bz\8c\8c\8bS\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\82é\81B",\r
592                         "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");\r
593 \r
594                 {\r
595                         int base = 10 + plev / 2;\r
596 \r
597                         if (info) return info_duration(base, base);\r
598 \r
599                         if (cast)\r
600                         {\r
601                                 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);\r
602                         }\r
603                 }\r
604                 break;\r
605 \r
606         case 28:\r
607                 if (name) return _("\8co\8c±\92l\95\9c\8a\88", "Restore Life");\r
608                 if (desc) return _("\8e¸\82Á\82½\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restore lost experience.");\r
609 \r
610                 {\r
611                         if (cast)\r
612                         {\r
613                                 restore_level();\r
614                         }\r
615                 }\r
616                 break;\r
617 \r
618         case 29:\r
619                 if (name) return _("\8eü\95Ó\96\95\8eE", "Mass Genocide");\r
620                 if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\82¢\82é\83\82\83\93\83X\83^\81[\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
621                         "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.");\r
622 \r
623                 {\r
624                         int power = plev + 50;\r
625 \r
626                         if (info) return info_power(power);\r
627 \r
628                         if (cast)\r
629                         {\r
630                                 mass_genocide(power, TRUE);\r
631                         }\r
632                 }\r
633                 break;\r
634 \r
635         case 30:\r
636                 if (name) return _("\92n\8d\96\82Ì\8d\85\89Î", "Hellfire");\r
637                 if (desc) return _("\8e×\88«\82È\97Í\82ð\8e\9d\82Â\95ó\8eì\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
638                         "Fires a powerful ball of evil power. Hurts good monsters greatly.");\r
639 \r
640                 {\r
641                         HIT_POINT dam = 666;\r
642                         int rad = 3;\r
643 \r
644                         if (info) return info_damage(0, 0, dam);\r
645 \r
646                         if (cast)\r
647                         {\r
648                                 if (!get_aim_dir(&dir)) return NULL;\r
649 \r
650                                 fire_ball(GF_HELL_FIRE, dir, dam, rad);\r
651                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("\92n\8d\96\82Ì\8d\85\89Î\82Ì\8eô\95\82ð\8f¥\82¦\82½\94æ\98J", "the strain of casting Hellfire"), -1);\r
652                         }\r
653                 }\r
654                 break;\r
655 \r
656         case 31:\r
657                 if (name) return _("\97H\91Ì\89»", "Wraithform");\r
658                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\95Ç\82ð\92Ê\82è\94²\82¯\82é\82±\82Æ\82ª\82Å\82«\8eó\82¯\82é\83_\83\81\81[\83W\82ª\8cy\8c¸\82³\82ê\82é\97H\91Ì\82Ì\8fó\91Ô\82É\95Ï\90g\82·\82é\81B",\r
659                         "Becomes wraith form which gives ability to pass walls and makes all damages half.");\r
660 \r
661                 {\r
662                         int base = plev / 2;\r
663 \r
664                         if (info) return info_duration(base, base);\r
665 \r
666                         if (cast)\r
667                         {\r
668                                 set_wraith_form(randint1(base) + base, FALSE);\r
669                         }\r
670                 }\r
671                 break;\r
672         }\r
673 \r
674         return "";\r
675 }\r