OSDN Git Service

#37353 狂戦士化の効果をberserk()にまとめる。
[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 (IS_WIZARD_CLASS())\r
205                                 base = plev + plev / 2;\r
206                         else\r
207                                 base = plev + plev / 4;\r
208 \r
209 \r
210                         if (info) return info_damage(dice, sides, base);\r
211 \r
212                         if (cast)\r
213                         {\r
214                                 if (!get_aim_dir(&dir)) return NULL;\r
215 \r
216                                 fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);\r
217                         }\r
218                 }\r
219                 break;\r
220 \r
221         case 9:\r
222                 if (name) return _("\92n\8d\96\82Ì\96î", "Nether Bolt");\r
223                 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
224 \r
225                 {\r
226                         int dice = 8 + (plev - 5) / 4;\r
227                         int sides = 8;\r
228 \r
229                         if (info) return info_damage(dice, sides, 0);\r
230 \r
231                         if (cast)\r
232                         {\r
233                                 if (!get_aim_dir(&dir)) return NULL;\r
234 \r
235                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
236                         }\r
237                 }\r
238                 break;\r
239 \r
240         case 10:\r
241                 if (name) return _("\8eE\9dC\89_", "Cloud kill");\r
242                 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
243 \r
244                 {\r
245                         HIT_POINT dam = (30 + plev) * 2;\r
246                         int rad = plev / 10 + 2;\r
247 \r
248                         if (info) return info_damage(0, 0, dam / 2);\r
249 \r
250                         if (cast)\r
251                         {\r
252                                 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);\r
253                         }\r
254                 }\r
255                 break;\r
256 \r
257         case 11:\r
258                 if (name) return _("\83\82\83\93\83X\83^\81[\8fÁ\96Å", "Genocide One");\r
259                 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
260 \r
261                 {\r
262                         int power = plev + 50;\r
263 \r
264                         if (info) return info_power(power);\r
265 \r
266                         if (cast)\r
267                         {\r
268                                 if (!get_aim_dir(&dir)) return NULL;\r
269 \r
270                                 fire_ball_hide(GF_GENOCIDE, dir, power, 0);\r
271                         }\r
272                 }\r
273                 break;\r
274 \r
275         case 12:\r
276                 if (name) return _("\93Å\82Ì\90n", "Poison Branding");\r
277                 if (desc) return _("\95\90\8aí\82É\93Å\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon poison branded.");\r
278 \r
279                 {\r
280                         if (cast)\r
281                         {\r
282                                 brand_weapon(3);\r
283                         }\r
284                 }\r
285                 break;\r
286 \r
287         case 13:\r
288                 if (name) return _("\8bz\8c\8c\82Ì\96î", "Vampiric Bolt");\r
289                 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
290                         "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");\r
291 \r
292                 {\r
293                         int dice = 1;\r
294                         int sides = plev * 2;\r
295                         int base = plev * 2;\r
296 \r
297                         if (info) return info_damage(dice, sides, base);\r
298 \r
299                         if (cast)\r
300                         {\r
301                                 HIT_POINT dam = base + damroll(dice, sides);\r
302 \r
303                                 if (!get_aim_dir(&dir)) return NULL;\r
304 \r
305                                 if (hypodynamic_bolt(dir, dam))\r
306                                 {\r
307                                         chg_virtue(V_SACRIFICE, -1);\r
308                                         chg_virtue(V_VITALITY, -1);\r
309 \r
310                                         hp_player(dam);\r
311 \r
312                                         /*\r
313                                         * Gain nutritional sustenance:\r
314                                         * 150/hp drained\r
315                                         *\r
316                                         * A Food ration gives 5000\r
317                                         * food points (by contrast)\r
318                                         * Don't ever get more than\r
319                                         * "Full" this way But if we\r
320                                         * ARE Gorged, it won't cure\r
321                                         * us\r
322                                         */\r
323                                         dam = p_ptr->food + MIN(5000, 100 * dam);\r
324 \r
325                                         /* Not gorged already */\r
326                                         if (p_ptr->food < PY_FOOD_MAX)\r
327                                                 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);\r
328                                 }\r
329                         }\r
330                 }\r
331                 break;\r
332 \r
333         case 14:\r
334                 if (name) return _("\94½\8d°\82Ì\8fp", "Animate dead");\r
335                 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
336 \r
337                 {\r
338                         if (cast)\r
339                         {\r
340                                 animate_dead(0, p_ptr->y, p_ptr->x);\r
341                         }\r
342                 }\r
343                 break;\r
344 \r
345         case 15:\r
346                 if (name) return _("\96\95\8eE", "Genocide");\r
347                 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
348                         "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.");\r
349 \r
350                 {\r
351                         int power = plev + 50;\r
352 \r
353                         if (info) return info_power(power);\r
354 \r
355                         if (cast)\r
356                         {\r
357                                 symbol_genocide(power, TRUE);\r
358                         }\r
359                 }\r
360                 break;\r
361 \r
362         case 16:\r
363                 if (name) return _("\8b\90í\8em\89»", "Berserk");\r
364                 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
365 \r
366                 {\r
367                         int base = 25;\r
368 \r
369                         if (info) return info_duration(base, base);\r
370 \r
371                         if (cast)\r
372                         {\r
373                                 (void)berserk(base + randint1(base));\r
374                         }\r
375                 }\r
376                 break;\r
377 \r
378         case 17:\r
379                 if (name) return _("\88«\97ì\8f¢\8a«", "Invoke Spirits");\r
380                 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
381 \r
382                 {\r
383                         if (info) return s_random;\r
384 \r
385                         if (cast)\r
386                         {\r
387                                 if (!get_aim_dir(&dir)) return NULL;\r
388 \r
389                                 cast_invoke_spirits(dir);\r
390                         }\r
391                 }\r
392                 break;\r
393 \r
394         case 18:\r
395                 if (name) return _("\88Ã\8d\95\82Ì\96î", "Dark Bolt");\r
396                 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
397 \r
398                 {\r
399                         int dice = 4 + (plev - 5) / 4;\r
400                         int sides = 8;\r
401 \r
402                         if (info) return info_damage(dice, sides, 0);\r
403 \r
404                         if (cast)\r
405                         {\r
406                                 if (!get_aim_dir(&dir)) return NULL;\r
407 \r
408                                 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));\r
409                         }\r
410                 }\r
411                 break;\r
412 \r
413         case 19:\r
414                 if (name) return _("\8b\97\90\90í\8em", "Battle Frenzy");\r
415                 if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82µ\81A\89Á\91¬\82·\82é\81B",\r
416                         "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");\r
417 \r
418                 {\r
419                         int b_base = 25;\r
420                         int sp_base = plev / 2;\r
421                         int sp_sides = 20 + plev / 2;\r
422 \r
423                         if (info) return info_duration(b_base, b_base);\r
424 \r
425                         if (cast)\r
426                         {\r
427                                 (void)berserk(b_base + randint1(b_base));\r
428                                 set_fast(randint1(sp_sides) + sp_base, FALSE);\r
429                         }\r
430                 }\r
431                 break;\r
432 \r
433         case 20:\r
434                 if (name) return _("\8bz\8c\8c\82Ì\90n", "Vampiric Branding");\r
435                 if (desc) return _("\95\90\8aí\82É\8bz\8c\8c\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon Vampiric.");\r
436 \r
437                 {\r
438                         if (cast)\r
439                         {\r
440                                 brand_weapon(4);\r
441                         }\r
442                 }\r
443                 break;\r
444 \r
445         case 21:\r
446                 if (name) return _("\8bz\8c\8c\82Ì\98A\96î", "Vampiric Bolts");\r
447                 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
448                         "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");\r
449                 {\r
450                         HIT_POINT dam = 100;\r
451 \r
452                         if (info) return format("%s3*%d", s_dam, dam);\r
453 \r
454                         if (cast)\r
455                         {\r
456                                 int i;\r
457 \r
458                                 if (!get_aim_dir(&dir)) return NULL;\r
459 \r
460                                 chg_virtue(V_SACRIFICE, -1);\r
461                                 chg_virtue(V_VITALITY, -1);\r
462 \r
463                                 for (i = 0; i < 3; i++)\r
464                                 {\r
465                                         if (hypodynamic_bolt(dir, dam))\r
466                                                 hp_player(dam);\r
467                                 }\r
468                         }\r
469                 }\r
470                 break;\r
471 \r
472         case 22:\r
473                 if (name) return _("\8e\80\82Ì\8c¾\8d°", "Nether Wave");\r
474                 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
475 \r
476                 {\r
477                         int sides = plev * 3;\r
478 \r
479                         if (info) return info_damage(1, sides, 0);\r
480 \r
481                         if (cast)\r
482                         {\r
483                                 dispel_living(randint1(sides));\r
484                         }\r
485                 }\r
486                 break;\r
487 \r
488         case 23:\r
489                 if (name) return _("\88Ã\8d\95\82Ì\97\92", "Darkness Storm");\r
490                 if (desc) return _("\8b\90\91å\82È\88Ã\8d\95\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of darkness.");\r
491 \r
492                 {\r
493                         HIT_POINT dam = 100 + plev * 2;\r
494                         int rad = 4;\r
495 \r
496                         if (info) return info_damage(0, 0, dam);\r
497 \r
498                         if (cast)\r
499                         {\r
500                                 if (!get_aim_dir(&dir)) return NULL;\r
501 \r
502                                 fire_ball(GF_DARK, dir, dam, rad);\r
503                         }\r
504                 }\r
505                 break;\r
506 \r
507         case 24:\r
508                 if (name) return _("\8e\80\82Ì\8cõ\90ü", "Death Ray");\r
509                 if (desc) return _("\8e\80\82Ì\8cõ\90ü\82ð\95ú\82Â\81B", "Fires a beam of death.");\r
510 \r
511                 {\r
512                         if (cast)\r
513                         {\r
514                                 if (!get_aim_dir(&dir)) return NULL;\r
515 \r
516                                 death_ray(dir, plev);\r
517                         }\r
518                 }\r
519                 break;\r
520 \r
521         case 25:\r
522                 if (name) return _("\8e\80\8eÒ\8f¢\8a«", "Raise the Dead");\r
523                 if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
524 \r
525                 {\r
526                         if (cast)\r
527                         {\r
528                                 int type;\r
529                                 bool pet = one_in_(3);\r
530                                 u32b flg = 0L;\r
531 \r
532                                 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);\r
533 \r
534                                 if (!pet || (pet && (plev > 24) && one_in_(3)))\r
535                                         flg |= PM_ALLOW_GROUP;\r
536 \r
537                                 if (pet) flg |= PM_FORCE_PET;\r
538                                 else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);\r
539 \r
540                                 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))\r
541                                 {\r
542                                         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
543                                                 "Cold winds begin to blow around you, carrying with them the stench of decay..."));\r
544 \r
545 \r
546                                         if (pet)\r
547                                         {\r
548                                                 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
549                                                         "Ancient, long-dead forms arise from the ground to serve you!"));\r
550                                         }\r
551                                         else\r
552                                         {\r
553                                                 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
554                                                         "'The dead arise... to punish you for disturbing them!'"));\r
555                                         }\r
556 \r
557                                         chg_virtue(V_UNLIFE, 1);\r
558                                 }\r
559                         }\r
560                 }\r
561                 break;\r
562 \r
563         case 26:\r
564                 if (name) return _("\8e\80\8eÒ\82Ì\94é\93`", "Esoteria");\r
565                 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
566                         "Identifies an item. Or *identifies* an item at higher level.");\r
567 \r
568                 {\r
569                         if (cast)\r
570                         {\r
571                                 if (randint1(50) > plev)\r
572                                 {\r
573                                         if (!ident_spell(FALSE)) return NULL;\r
574                                 }\r
575                                 else\r
576                                 {\r
577                                         if (!identify_fully(FALSE)) return NULL;\r
578                                 }\r
579                         }\r
580                 }\r
581                 break;\r
582 \r
583         case 27:\r
584                 if (name) return _("\8bz\8c\8c\8bS\95Ï\89»", "Polymorph Vampire");\r
585                 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
586                         "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");\r
587 \r
588                 {\r
589                         int base = 10 + plev / 2;\r
590 \r
591                         if (info) return info_duration(base, base);\r
592 \r
593                         if (cast)\r
594                         {\r
595                                 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);\r
596                         }\r
597                 }\r
598                 break;\r
599 \r
600         case 28:\r
601                 if (name) return _("\8co\8c±\92l\95\9c\8a\88", "Restore Life");\r
602                 if (desc) return _("\8e¸\82Á\82½\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restore lost experience.");\r
603 \r
604                 {\r
605                         if (cast)\r
606                         {\r
607                                 restore_level();\r
608                         }\r
609                 }\r
610                 break;\r
611 \r
612         case 29:\r
613                 if (name) return _("\8eü\95Ó\96\95\8eE", "Mass Genocide");\r
614                 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
615                         "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.");\r
616 \r
617                 {\r
618                         int power = plev + 50;\r
619 \r
620                         if (info) return info_power(power);\r
621 \r
622                         if (cast)\r
623                         {\r
624                                 mass_genocide(power, TRUE);\r
625                         }\r
626                 }\r
627                 break;\r
628 \r
629         case 30:\r
630                 if (name) return _("\92n\8d\96\82Ì\8d\85\89Î", "Hellfire");\r
631                 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
632                         "Fires a powerful ball of evil power. Hurts good monsters greatly.");\r
633 \r
634                 {\r
635                         HIT_POINT dam = 666;\r
636                         int rad = 3;\r
637 \r
638                         if (info) return info_damage(0, 0, dam);\r
639 \r
640                         if (cast)\r
641                         {\r
642                                 if (!get_aim_dir(&dir)) return NULL;\r
643 \r
644                                 fire_ball(GF_HELL_FIRE, dir, dam, rad);\r
645                                 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
646                         }\r
647                 }\r
648                 break;\r
649 \r
650         case 31:\r
651                 if (name) return _("\97H\91Ì\89»", "Wraithform");\r
652                 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
653                         "Becomes wraith form which gives ability to pass walls and makes all damages half.");\r
654 \r
655                 {\r
656                         int base = plev / 2;\r
657 \r
658                         if (info) return info_duration(base, base);\r
659 \r
660                         if (cast)\r
661                         {\r
662                                 set_wraith_form(randint1(base) + base, FALSE);\r
663                         }\r
664                 }\r
665                 break;\r
666         }\r
667 \r
668         return "";\r
669 }\r