OSDN Git Service

[Refactor] #37353 カオス領域処理を cmd-spell.c から realm-chaos.c/h へ分離。
[hengband/hengband.git] / src / realm-chaos.c
1 #include "angband.h"\r
2 #include "cmd-spell.h"\r
3 \r
4 /*!\r
5 * @brief \83J\83I\83X\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
6 * @param spell \96\82\96@ID\r
7 * @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
8 * @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
9 */\r
10 cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
11 {\r
12         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
13         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
14         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
15         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
16 \r
17         static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
18         static const char s_random[] = _("\83\89\83\93\83_\83\80", "random");\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 _("\83g\83\89\83b\83v/\83h\83A\94j\89ó", "Trap / Door Destruction");\r
46                 if (desc) return _("\97×\90Ú\82·\82éã©\82Æ\94à\82ð\94j\89ó\82·\82é\81B", "Destroys all traps in adjacent squares.");\r
47 \r
48                 {\r
49                         int rad = 1;\r
50 \r
51                         if (info) return info_radius(rad);\r
52 \r
53                         if (cast)\r
54                         {\r
55                                 destroy_doors_touch();\r
56                         }\r
57                 }\r
58                 break;\r
59 \r
60         case 2:\r
61                 if (name) return _("\91M\8cõ", "Flash of Light");\r
62                 if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "Lights up nearby area and the inside of a room permanently.");\r
63 \r
64                 {\r
65                         int dice = 2;\r
66                         int sides = plev / 2;\r
67                         int rad = (plev / 10) + 1;\r
68 \r
69                         if (info) return info_damage(dice, sides, 0);\r
70 \r
71                         if (cast)\r
72                         {\r
73                                 lite_area(damroll(dice, sides), rad);\r
74                         }\r
75                 }\r
76                 break;\r
77 \r
78         case 3:\r
79                 if (name) return _("\8d¬\97\90\82Ì\8eè", "Touch of Confusion");\r
80                 if (desc) return _("\91\8a\8eè\82ð\8d¬\97\90\82³\82¹\82é\8dU\8c\82\82ð\82Å\82«\82é\82æ\82¤\82É\82·\82é\81B", "Attempts to confuse the next monster that you hit.");\r
81 \r
82                 {\r
83                         if (cast)\r
84                         {\r
85                                 if (!(p_ptr->special_attack & ATTACK_CONFUSE))\r
86                                 {\r
87                                         msg_print(_("\82 \82È\82½\82Ì\8eè\82Í\8cõ\82è\8en\82ß\82½\81B", "Your hands start glowing."));\r
88                                         p_ptr->special_attack |= ATTACK_CONFUSE;\r
89                                         p_ptr->redraw |= (PR_STATUS);\r
90                                 }\r
91                         }\r
92                 }\r
93                 break;\r
94 \r
95         case 4:\r
96                 if (name) return _("\96\82\97Íày\97ô", "Mana Burst");\r
97                 if (desc) return _("\96\82\96@\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of magic.");\r
98 \r
99                 {\r
100                         int dice = 3;\r
101                         int sides = 5;\r
102                         int rad = (plev < 30) ? 2 : 3;\r
103                         int base;\r
104 \r
105                         if (p_ptr->pclass == CLASS_MAGE ||\r
106                                 p_ptr->pclass == CLASS_HIGH_MAGE ||\r
107                                 p_ptr->pclass == CLASS_SORCERER)\r
108                                 base = plev + plev / 2;\r
109                         else\r
110                                 base = plev + plev / 4;\r
111 \r
112 \r
113                         if (info) return info_damage(dice, sides, base);\r
114 \r
115                         if (cast)\r
116                         {\r
117                                 if (!get_aim_dir(&dir)) return NULL;\r
118 \r
119                                 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);\r
120 \r
121                                 /*\r
122                                 * Shouldn't actually use GF_MANA, as\r
123                                 * it will destroy all items on the\r
124                                 * floor\r
125                                 */\r
126                         }\r
127                 }\r
128                 break;\r
129 \r
130         case 5:\r
131                 if (name) return _("\83t\83@\83C\83A\81E\83{\83\8b\83g", "Fire Bolt");\r
132                 if (desc) return _("\89\8a\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of fire.");\r
133 \r
134                 {\r
135                         int dice = 8 + (plev - 5) / 4;\r
136                         int sides = 8;\r
137 \r
138                         if (info) return info_damage(dice, sides, 0);\r
139 \r
140                         if (cast)\r
141                         {\r
142                                 if (!get_aim_dir(&dir)) return NULL;\r
143 \r
144                                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));\r
145                         }\r
146                 }\r
147                 break;\r
148 \r
149         case 6:\r
150                 if (name) return _("\97Í\82Ì\8c\9d", "Fist of Force");\r
151                 if (desc) return _("\82²\82­\8f¬\82³\82È\95ª\89ð\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a tiny ball of disintegration.");\r
152 \r
153                 {\r
154                         int dice = 8 + ((plev - 5) / 4);\r
155                         int sides = 8;\r
156 \r
157                         if (info) return info_damage(dice, sides, 0);\r
158 \r
159                         if (cast)\r
160                         {\r
161                                 if (!get_aim_dir(&dir)) return NULL;\r
162 \r
163                                 fire_ball(GF_DISINTEGRATE, dir, damroll(dice, sides), 0);\r
164                         }\r
165                 }\r
166                 break;\r
167 \r
168         case 7:\r
169                 if (name) return _("\83e\83\8c\83|\81[\83g", "Teleport Self");\r
170                 if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport long distance.");\r
171 \r
172                 {\r
173                         POSITION range = plev * 5;\r
174 \r
175                         if (info) return info_range(range);\r
176 \r
177                         if (cast)\r
178                         {\r
179                                 teleport_player(range, 0L);\r
180                         }\r
181                 }\r
182                 break;\r
183 \r
184         case 8:\r
185                 if (name) return _("\83\8f\83\93\83_\81[", "Wonder");\r
186                 if (desc) return _("\83\82\83\93\83X\83^\81[\82É\83\89\83\93\83_\83\80\82È\8cø\89Ê\82ð\97^\82¦\82é\81B", "Fires something with random effects.");\r
187 \r
188                 {\r
189                         if (info) return s_random;\r
190 \r
191                         if (cast)\r
192                         {\r
193 \r
194                                 if (!get_aim_dir(&dir)) return NULL;\r
195 \r
196                                 cast_wonder(dir);\r
197                         }\r
198                 }\r
199                 break;\r
200 \r
201         case 9:\r
202                 if (name) return _("\83J\83I\83X\81E\83{\83\8b\83g", "Chaos Bolt");\r
203                 if (desc) return _("\83J\83I\83X\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or ball of chaos.");\r
204 \r
205                 {\r
206                         int dice = 10 + (plev - 5) / 4;\r
207                         int sides = 8;\r
208 \r
209                         if (info) return info_damage(dice, sides, 0);\r
210 \r
211                         if (cast)\r
212                         {\r
213                                 if (!get_aim_dir(&dir)) return NULL;\r
214 \r
215                                 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));\r
216                         }\r
217                 }\r
218                 break;\r
219 \r
220         case 10:\r
221                 if (name) return _("\83\\83j\83b\83N\81E\83u\81[\83\80", "Sonic Boom");\r
222                 if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\8d\8c\89¹\82Ì\8b\85\82ð\94­\90\82³\82¹\82é\81B", "Generates a ball of sound centered on you.");\r
223 \r
224                 {\r
225                         HIT_POINT dam = 60 + plev;\r
226                         int rad = plev / 10 + 2;\r
227 \r
228                         if (info) return info_damage(0, 0, dam / 2);\r
229 \r
230                         if (cast)\r
231                         {\r
232                                 msg_print(_("\83h\81[\83\93\81I\95\94\89®\82ª\97h\82ê\82½\81I", "BOOM! Shake the room!"));\r
233                                 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);\r
234                         }\r
235                 }\r
236                 break;\r
237 \r
238         case 11:\r
239                 if (name) return _("\94j\96Å\82Ì\96î", "Doom Bolt");\r
240                 if (desc) return _("\8f\83\90\88\82È\96\82\97Í\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a beam of pure mana.");\r
241 \r
242                 {\r
243                         int dice = 11 + (plev - 5) / 4;\r
244                         int sides = 8;\r
245 \r
246                         if (info) return info_damage(dice, sides, 0);\r
247 \r
248                         if (cast)\r
249                         {\r
250                                 if (!get_aim_dir(&dir)) return NULL;\r
251 \r
252                                 fire_beam(GF_MANA, dir, damroll(dice, sides));\r
253                         }\r
254                 }\r
255                 break;\r
256 \r
257         case 12:\r
258                 if (name) return _("\83t\83@\83C\83A\81E\83{\81[\83\8b", "Fire Ball");\r
259                 if (desc) return _("\89\8a\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of fire.");\r
260 \r
261                 {\r
262                         HIT_POINT dam = plev + 55;\r
263                         int rad = 2;\r
264 \r
265                         if (info) return info_damage(0, 0, dam);\r
266 \r
267                         if (cast)\r
268                         {\r
269                                 if (!get_aim_dir(&dir)) return NULL;\r
270 \r
271                                 fire_ball(GF_FIRE, dir, dam, rad);\r
272                         }\r
273                 }\r
274                 break;\r
275 \r
276         case 13:\r
277                 if (name) return _("\83e\83\8c\83|\81[\83g\81E\83A\83E\83F\83C", "Teleport Other");\r
278                 if (desc) return _("\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\83r\81[\83\80\82ð\95ú\82Â\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Teleports all monsters on the line away unless resisted.");\r
279 \r
280                 {\r
281                         int power = plev;\r
282 \r
283                         if (info) return info_power(power);\r
284 \r
285                         if (cast)\r
286                         {\r
287                                 if (!get_aim_dir(&dir)) return NULL;\r
288 \r
289                                 fire_beam(GF_AWAY_ALL, dir, power);\r
290                         }\r
291                 }\r
292                 break;\r
293 \r
294         case 14:\r
295                 if (name) return _("\94j\89ó\82Ì\8c¾\97t", "Word of Destruction");\r
296                 if (desc) return _("\8eü\95Ó\82Ì\83A\83C\83e\83\80\81A\83\82\83\93\83X\83^\81[\81A\92n\8c`\82ð\94j\89ó\82·\82é\81B", "Destroy everything in nearby area.");\r
297 \r
298                 {\r
299                         int base = 12;\r
300                         int sides = 4;\r
301 \r
302                         if (cast)\r
303                         {\r
304                                 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);\r
305                         }\r
306                 }\r
307                 break;\r
308 \r
309         case 15:\r
310                 if (name) return _("\83\8d\83O\83\8b\83X\94­\93®", "Invoke Logrus");\r
311                 if (desc) return _("\8b\90\91å\82È\83J\83I\83X\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of chaos.");\r
312 \r
313                 {\r
314                         HIT_POINT dam = plev * 2 + 99;\r
315                         int rad = plev / 5;\r
316 \r
317                         if (info) return info_damage(0, 0, dam);\r
318 \r
319                         if (cast)\r
320                         {\r
321                                 if (!get_aim_dir(&dir)) return NULL;\r
322 \r
323                                 fire_ball(GF_CHAOS, dir, dam, rad);\r
324                         }\r
325                 }\r
326                 break;\r
327 \r
328         case 16:\r
329                 if (name) return _("\91¼\8eÒ\95Ï\97e", "Polymorph Other");\r
330                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\95Ï\90g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to polymorph a monster.");\r
331 \r
332                 {\r
333                         int power = plev;\r
334 \r
335                         if (info) return info_power(power);\r
336 \r
337                         if (cast)\r
338                         {\r
339                                 if (!get_aim_dir(&dir)) return NULL;\r
340 \r
341                                 poly_monster(dir, plev);\r
342                         }\r
343                 }\r
344                 break;\r
345 \r
346         case 17:\r
347                 if (name) return _("\98A\8d½\88î\8dÈ", "Chain Lightning");\r
348                 if (desc) return _("\91S\95û\8cü\82É\91Î\82µ\82Ä\93d\8c\82\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires lightning beams in all directions.");\r
349 \r
350                 {\r
351                         int dice = 5 + plev / 10;\r
352                         int sides = 8;\r
353 \r
354                         if (info) return info_damage(dice, sides, 0);\r
355 \r
356                         if (cast)\r
357                         {\r
358                                 for (dir = 0; dir <= 9; dir++)\r
359                                         fire_beam(GF_ELEC, dir, damroll(dice, sides));\r
360                         }\r
361                 }\r
362                 break;\r
363 \r
364         case 18:\r
365                 if (name) return _("\96\82\97Í\95\95\93ü", "Arcane Binding");\r
366                 if (desc) return _("\8fñ/\96\82\96@\96_\82Ì\8f[\93U\89ñ\90\94\82ð\91\9d\82â\82·\82©\81A\8f[\93U\92\86\82Ì\83\8d\83b\83h\82Ì\8f[\93U\8e\9e\8aÔ\82ð\8c¸\82ç\82·\81B", "Recharges staffs, wands or rods.");\r
367 \r
368                 {\r
369                         int power = 90;\r
370 \r
371                         if (info) return info_power(power);\r
372 \r
373                         if (cast)\r
374                         {\r
375                                 if (!recharge(power)) return NULL;\r
376                         }\r
377                 }\r
378                 break;\r
379 \r
380         case 19:\r
381                 if (name) return _("\8c´\8eq\95ª\89ð", "Disintegrate");\r
382                 if (desc) return _("\8b\90\91å\82È\95ª\89ð\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of disintegration.");\r
383 \r
384                 {\r
385                         HIT_POINT dam = plev + 70;\r
386                         int rad = 3 + plev / 40;\r
387 \r
388                         if (info) return info_damage(0, 0, dam);\r
389 \r
390                         if (cast)\r
391                         {\r
392                                 if (!get_aim_dir(&dir)) return NULL;\r
393 \r
394                                 fire_ball(GF_DISINTEGRATE, dir, dam, rad);\r
395                         }\r
396                 }\r
397                 break;\r
398 \r
399         case 20:\r
400                 if (name) return _("\8c»\8eÀ\95Ï\97e", "Alter Reality");\r
401                 if (desc) return _("\8c»\8dÝ\82Ì\8aK\82ð\8dÄ\8d\\90¬\82·\82é\81B", "Recreates current dungeon level.");\r
402 \r
403                 {\r
404                         int base = 15;\r
405                         int sides = 20;\r
406 \r
407                         if (info) return info_delay(base, sides);\r
408 \r
409                         if (cast)\r
410                         {\r
411                                 alter_reality();\r
412                         }\r
413                 }\r
414                 break;\r
415 \r
416         case 21:\r
417                 if (name) return _("\83}\83W\83b\83N\81E\83\8d\83P\83b\83g", "Magic Rocket");\r
418                 if (desc) return _("\83\8d\83P\83b\83g\82ð\94­\8eË\82·\82é\81B", "Fires a magic rocket.");\r
419 \r
420                 {\r
421                         HIT_POINT dam = 120 + plev * 2;\r
422                         int rad = 2;\r
423 \r
424                         if (info) return info_damage(0, 0, dam);\r
425 \r
426                         if (cast)\r
427                         {\r
428                                 if (!get_aim_dir(&dir)) return NULL;\r
429 \r
430                                 msg_print(_("\83\8d\83P\83b\83g\94­\8eË\81I", "You launch a rocket!"));\r
431                                 fire_rocket(GF_ROCKET, dir, dam, rad);\r
432                         }\r
433                 }\r
434                 break;\r
435 \r
436         case 22:\r
437                 if (name) return _("\8d¬\93×\82Ì\90n", "Chaos Branding");\r
438                 if (desc) return _("\95\90\8aí\82É\83J\83I\83X\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon a Chaotic weapon.");\r
439 \r
440                 {\r
441                         if (cast)\r
442                         {\r
443                                 brand_weapon(2);\r
444                         }\r
445                 }\r
446                 break;\r
447 \r
448         case 23:\r
449                 if (name) return _("\88«\96\82\8f¢\8a«", "Summon Demon");\r
450                 if (desc) return _("\88«\96\82\82ð1\91Ì\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
451 \r
452                 {\r
453                         if (cast)\r
454                         {\r
455                                 u32b flg = 0L;\r
456                                 bool pet = !one_in_(3);\r
457 \r
458                                 if (pet) flg |= PM_FORCE_PET;\r
459                                 else flg |= PM_NO_PET;\r
460                                 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;\r
461 \r
462                                 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_DEMON, flg))\r
463                                 {\r
464                                         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
465                                         if (pet)\r
466                                         {\r
467                                                 msg_print(_("\81u\82²\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\82²\8eå\90l\97l\81v", "'What is thy bidding... Master?'"));\r
468                                         }\r
469                                         else\r
470                                         {\r
471                                                 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
472                                                         "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));\r
473                                         }\r
474                                 }\r
475                         }\r
476                 }\r
477                 break;\r
478 \r
479         case 24:\r
480                 if (name) return _("\8fd\97Í\8cõ\90ü", "Beam of Gravity");\r
481                 if (desc) return _("\8fd\97Í\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a beam of gravity.");\r
482 \r
483                 {\r
484                         int dice = 9 + (plev - 5) / 4;\r
485                         int sides = 8;\r
486 \r
487                         if (info) return info_damage(dice, sides, 0);\r
488 \r
489                         if (cast)\r
490                         {\r
491                                 if (!get_aim_dir(&dir)) return NULL;\r
492 \r
493                                 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));\r
494                         }\r
495                 }\r
496                 break;\r
497 \r
498         case 25:\r
499                 if (name) return _("\97¬\90¯\8cQ", "Meteor Swarm");\r
500                 if (desc) return _("\8e©\95ª\82Ì\8eü\95Ó\82Éè¦\90Î\82ð\97\8e\82Æ\82·\81B", "Makes meteor balls fall down to nearby random locations.");\r
501 \r
502                 {\r
503                         HIT_POINT dam = plev * 2;\r
504                         int rad = 2;\r
505 \r
506                         if (info) return info_multi_damage(dam);\r
507 \r
508                         if (cast)\r
509                         {\r
510                                 cast_meteor(dam, rad);\r
511                         }\r
512                 }\r
513                 break;\r
514 \r
515         case 26:\r
516                 if (name) return _("\89\8b\82Ì\88ê\8c\82", "Flame Strike");\r
517                 if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\92´\8b\90\91å\82È\89\8a\82Ì\8b\85\82ð\94­\90\82³\82¹\82é\81B", "Generate a huge ball of fire centered on you.");\r
518 \r
519                 {\r
520                         HIT_POINT dam = 300 + 3 * plev;\r
521                         int rad = 8;\r
522 \r
523                         if (info) return info_damage(0, 0, dam / 2);\r
524 \r
525                         if (cast)\r
526                         {\r
527                                 fire_ball(GF_FIRE, 0, dam, rad);\r
528                         }\r
529                 }\r
530                 break;\r
531 \r
532         case 27:\r
533                 if (name) return _("\8d¬\93×\8f¢\97\88", "Call Chaos");\r
534                 if (desc) return _("\83\89\83\93\83_\83\80\82È\91®\90«\82Ì\8b\85\82â\83r\81[\83\80\82ð\94­\90\82³\82¹\82é\81B", "Generate random kind of balls or beams.");\r
535 \r
536                 {\r
537                         if (info) return format("%s150 / 250", s_dam);\r
538 \r
539                         if (cast)\r
540                         {\r
541                                 call_chaos();\r
542                         }\r
543                 }\r
544                 break;\r
545 \r
546         case 28:\r
547                 if (name) return _("\8e©\8cÈ\95Ï\97e", "Polymorph Self");\r
548                 if (desc) return _("\8e©\95ª\82ð\95Ï\90g\82³\82¹\82æ\82¤\82Æ\82·\82é\81B", "Polymorphs yourself.");\r
549 \r
550                 {\r
551                         if (cast)\r
552                         {\r
553                                 if (!get_check(_("\95Ï\90g\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H", "You will polymorph yourself. Are you sure? "))) return NULL;\r
554                                 do_poly_self();\r
555                         }\r
556                 }\r
557                 break;\r
558 \r
559         case 29:\r
560                 if (name) return _("\96\82\97Í\82Ì\97\92", "Mana Storm");\r
561                 if (desc) return _("\94ñ\8fí\82É\8b­\97Í\82Å\8b\90\91å\82È\8f\83\90\88\82È\96\82\97Í\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires an extremely powerful huge ball of pure mana.");\r
562 \r
563                 {\r
564                         HIT_POINT dam = 300 + plev * 4;\r
565                         int rad = 4;\r
566 \r
567                         if (info) return info_damage(0, 0, dam);\r
568 \r
569                         if (cast)\r
570                         {\r
571                                 if (!get_aim_dir(&dir)) return NULL;\r
572 \r
573                                 fire_ball(GF_MANA, dir, dam, rad);\r
574                         }\r
575                 }\r
576                 break;\r
577 \r
578         case 30:\r
579                 if (name) return _("\83\8d\83O\83\8b\83X\82Ì\83u\83\8c\83X", "Breathe Logrus");\r
580                 if (desc) return _("\94ñ\8fí\82É\8b­\97Í\82È\83J\83I\83X\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires an extremely powerful ball of chaos.");\r
581 \r
582                 {\r
583                         HIT_POINT dam = p_ptr->chp;\r
584                         int rad = 2;\r
585 \r
586                         if (info) return info_damage(0, 0, dam);\r
587 \r
588                         if (cast)\r
589                         {\r
590                                 if (!get_aim_dir(&dir)) return NULL;\r
591 \r
592                                 fire_ball(GF_CHAOS, dir, dam, rad);\r
593                         }\r
594                 }\r
595                 break;\r
596 \r
597         case 31:\r
598                 if (name) return _("\8b\95\96³\8f¢\97\88", "Call the Void");\r
599                 if (desc) return _("\8e©\95ª\82É\8eü\88Í\82É\8cü\82©\82Á\82Ä\81A\83\8d\83P\83b\83g\81A\8f\83\90\88\82È\96\82\97Í\82Ì\8b\85\81A\95ú\8eË\90«\94p\8aü\95¨\82Ì\8b\85\82ð\95ú\82Â\81B\82½\82¾\82µ\81A\95Ç\82É\97×\90Ú\82µ\82Ä\8eg\97p\82·\82é\82Æ\8dL\94Í\88Í\82ð\94j\89ó\82·\82é\81B",\r
600                         "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.");\r
601 \r
602                 {\r
603                         if (info) return format("%s3 * 175", s_dam);\r
604 \r
605                         if (cast)\r
606                         {\r
607                                 call_the_();\r
608                         }\r
609                 }\r
610                 break;\r
611         }\r
612 \r
613         return "";\r
614 }