OSDN Git Service

[Refactor] #37353 仙術領域処理を cmd-spell.c から realm-sorcery.c/h へ分離。
[hengband/hengband.git] / src / realm-sorcery.c
1 #include "angband.h"\r
2 #include "cmd-spell.h"\r
3 #include "selfinfo.h"\r
4 \r
5 /*!\r
6 * @brief \90å\8fp\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
7 * @param spell \96\82\96@ID\r
8 * @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
9 * @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
10 */\r
11 cptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
12 {\r
13         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
14         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
15         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
16         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
17 \r
18         int dir;\r
19         int plev = p_ptr->lev;\r
20 \r
21         switch (spell)\r
22         {\r
23         case 0:\r
24                 if (name) return _("\83\82\83\93\83X\83^\81[\8a´\92m", "Detect Monsters");\r
25                 if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\8c©\82¦\82é\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all monsters in your vicinity unless invisible.");\r
26 \r
27                 {\r
28                         int rad = DETECT_RAD_DEFAULT;\r
29 \r
30                         if (info) return info_radius(rad);\r
31 \r
32                         if (cast)\r
33                         {\r
34                                 detect_monsters_normal(rad);\r
35                         }\r
36                 }\r
37                 break;\r
38 \r
39         case 1:\r
40                 if (name) return _("\83V\83\87\81[\83g\81E\83e\83\8c\83|\81[\83g", "Phase Door");\r
41                 if (desc) return _("\8bß\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport short distance.");\r
42 \r
43                 {\r
44                         POSITION range = 10;\r
45 \r
46                         if (info) return info_range(range);\r
47 \r
48                         if (cast)\r
49                         {\r
50                                 teleport_player(range, 0L);\r
51                         }\r
52                 }\r
53                 break;\r
54 \r
55         case 2:\r
56                 if (name) return _("ã©\82Æ\94à\8a´\92m", "Detect Doors and Traps");\r
57                 if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\94à\82Æã©\82ð\8a´\92m\82·\82é\81B", "Detects traps, doors, and stairs in your vicinity.");\r
58 \r
59                 {\r
60                         int rad = DETECT_RAD_DEFAULT;\r
61 \r
62                         if (info) return info_radius(rad);\r
63 \r
64                         if (cast)\r
65                         {\r
66                                 detect_traps(rad, TRUE);\r
67                                 detect_doors(rad);\r
68                                 detect_stairs(rad);\r
69                         }\r
70                 }\r
71                 break;\r
72 \r
73         case 3:\r
74                 if (name) return _("\83\89\83C\83g\81E\83G\83\8a\83A", "Light Area");\r
75                 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
76 \r
77                 {\r
78                         int dice = 2;\r
79                         int sides = plev / 2;\r
80                         int rad = plev / 10 + 1;\r
81 \r
82                         if (info) return info_damage(dice, sides, 0);\r
83 \r
84                         if (cast)\r
85                         {\r
86                                 lite_area(damroll(dice, sides), rad);\r
87                         }\r
88                 }\r
89                 break;\r
90 \r
91         case 4:\r
92                 if (name) return _("\83p\83j\83b\83N\81E\83\82\83\93\83X\83^\81[", "Confuse Monster");\r
93                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8d¬\97\90\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to confuse a monster.");\r
94 \r
95                 {\r
96                         int power = (plev * 3) / 2;\r
97 \r
98                         if (info) return info_power(power);\r
99 \r
100                         if (cast)\r
101                         {\r
102                                 if (!get_aim_dir(&dir)) return NULL;\r
103 \r
104                                 confuse_monster(dir, power);\r
105                         }\r
106                 }\r
107                 break;\r
108 \r
109         case 5:\r
110                 if (name) return _("\83e\83\8c\83|\81[\83g", "Teleport");\r
111                 if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport long distance.");\r
112 \r
113                 {\r
114                         POSITION range = plev * 5;\r
115 \r
116                         if (info) return info_range(range);\r
117 \r
118                         if (cast)\r
119                         {\r
120                                 teleport_player(range, 0L);\r
121                         }\r
122                 }\r
123                 break;\r
124 \r
125         case 6:\r
126                 if (name) return _("\83X\83\8a\81[\83v\81E\83\82\83\93\83X\83^\81[", "Sleep Monster");\r
127                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep a monster.");\r
128 \r
129                 {\r
130                         int power = plev;\r
131 \r
132                         if (info) return info_power(power);\r
133 \r
134                         if (cast)\r
135                         {\r
136                                 if (!get_aim_dir(&dir)) return NULL;\r
137 \r
138                                 sleep_monster(dir, plev);\r
139                         }\r
140                 }\r
141                 break;\r
142 \r
143         case 7:\r
144                 if (name) return _("\96\82\97Í\8f[\93U", "Recharging");\r
145                 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
146 \r
147                 {\r
148                         int power = plev * 4;\r
149 \r
150                         if (info) return info_power(power);\r
151 \r
152                         if (cast)\r
153                         {\r
154                                 if (!recharge(power)) return NULL;\r
155                         }\r
156                 }\r
157                 break;\r
158 \r
159         case 8:\r
160                 if (name) return _("\96\82\96@\82Ì\92n\90}", "Magic Mapping");\r
161                 if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "Maps nearby area.");\r
162 \r
163                 {\r
164                         int rad = DETECT_RAD_MAP;\r
165 \r
166                         if (info) return info_radius(rad);\r
167 \r
168                         if (cast)\r
169                         {\r
170                                 map_area(rad);\r
171                         }\r
172                 }\r
173                 break;\r
174 \r
175         case 9:\r
176                 if (name) return _("\8aÓ\92è", "Identify");\r
177                 if (desc) return _("\83A\83C\83e\83\80\82ð\8e¯\95Ê\82·\82é\81B", "Identifies an item.");\r
178 \r
179                 {\r
180                         if (cast)\r
181                         {\r
182                                 if (!ident_spell(FALSE)) return NULL;\r
183                         }\r
184                 }\r
185                 break;\r
186 \r
187         case 10:\r
188                 if (name) return _("\83X\83\8d\83E\81E\83\82\83\93\83X\83^\81[", "Slow Monster");\r
189                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8c¸\91¬\82³\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to slow a monster.");\r
190 \r
191                 {\r
192                         int power = plev;\r
193 \r
194                         if (info) return info_power(power);\r
195 \r
196                         if (cast)\r
197                         {\r
198                                 if (!get_aim_dir(&dir)) return NULL;\r
199 \r
200                                 slow_monster(dir, plev);\r
201                         }\r
202                 }\r
203                 break;\r
204 \r
205         case 11:\r
206                 if (name) return _("\8eü\95Ó\83X\83\8a\81[\83v", "Mass Sleep");\r
207                 if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\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 all monsters in sight.");\r
208 \r
209                 {\r
210                         int power = plev;\r
211 \r
212                         if (info) return info_power(power);\r
213 \r
214                         if (cast)\r
215                         {\r
216                                 sleep_monsters(plev);\r
217                         }\r
218                 }\r
219                 break;\r
220 \r
221         case 12:\r
222                 if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\82\83\93\83X\83^\81[", "Teleport Away");\r
223                 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
224 \r
225                 {\r
226                         int power = plev;\r
227 \r
228                         if (info) return info_power(power);\r
229 \r
230                         if (cast)\r
231                         {\r
232                                 if (!get_aim_dir(&dir)) return NULL;\r
233 \r
234                                 fire_beam(GF_AWAY_ALL, dir, power);\r
235                         }\r
236                 }\r
237                 break;\r
238 \r
239         case 13:\r
240                 if (name) return _("\83X\83s\81[\83h", "Haste Self");\r
241                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Á\91¬\82·\82é\81B", "Hastes you for a while.");\r
242 \r
243                 {\r
244                         int base = plev;\r
245                         int sides = 20 + plev;\r
246 \r
247                         if (info) return info_duration(base, sides);\r
248 \r
249                         if (cast)\r
250                         {\r
251                                 set_fast(randint1(sides) + base, FALSE);\r
252                         }\r
253                 }\r
254                 break;\r
255 \r
256         case 14:\r
257                 if (name) return _("\90^\81E\8a´\92m", "Detection True");\r
258                 if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81Aã©\81A\94à\81A\8aK\92i\81A\8dà\95ó\81A\82»\82µ\82Ä\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B",\r
259                         "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
260 \r
261                 {\r
262                         int rad = DETECT_RAD_DEFAULT;\r
263 \r
264                         if (info) return info_radius(rad);\r
265 \r
266                         if (cast)\r
267                         {\r
268                                 detect_all(rad);\r
269                         }\r
270                 }\r
271                 break;\r
272 \r
273         case 15:\r
274                 if (name) return _("\90^\81E\8aÓ\92è", "Identify True");\r
275                 if (desc) return _("\83A\83C\83e\83\80\82Ì\8e\9d\82Â\94\\97Í\82ð\8a®\91S\82É\92m\82é\81B", "*Identifies* an item.");\r
276 \r
277                 {\r
278                         if (cast)\r
279                         {\r
280                                 if (!identify_fully(FALSE)) return NULL;\r
281                         }\r
282                 }\r
283                 break;\r
284 \r
285         case 16:\r
286                 if (name) return _("\95¨\91Ì\82Æ\8dà\95ó\8a´\92m", "Detect items and Treasure");\r
287                 if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83A\83C\83e\83\80\82Æ\8dà\95ó\82ð\8a´\92m\82·\82é\81B", "Detects all treasures and items in your vicinity.");\r
288 \r
289                 {\r
290                         int rad = DETECT_RAD_DEFAULT;\r
291 \r
292                         if (info) return info_radius(rad);\r
293 \r
294                         if (cast)\r
295                         {\r
296                                 detect_objects_normal(rad);\r
297                                 detect_treasure(rad);\r
298                                 detect_objects_gold(rad);\r
299                         }\r
300                 }\r
301                 break;\r
302 \r
303         case 17:\r
304                 if (name) return _("\83`\83\83\81[\83\80\81E\83\82\83\93\83X\83^\81[", "Charm Monster");\r
305                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to charm a monster.");\r
306 \r
307                 {\r
308                         int power = plev;\r
309 \r
310                         if (info) return info_power(power);\r
311 \r
312                         if (cast)\r
313                         {\r
314                                 if (!get_aim_dir(&dir)) return NULL;\r
315 \r
316                                 charm_monster(dir, power);\r
317                         }\r
318                 }\r
319                 break;\r
320 \r
321         case 18:\r
322                 if (name) return _("\90¸\90_\8a´\92m", "Sense Minds");\r
323                 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
324 \r
325                 {\r
326                         int base = 25;\r
327                         int sides = 30;\r
328 \r
329                         if (info) return info_duration(base, sides);\r
330 \r
331                         if (cast)\r
332                         {\r
333                                 set_tim_esp(randint1(sides) + base, FALSE);\r
334                         }\r
335                 }\r
336                 break;\r
337 \r
338         case 19:\r
339                 if (name) return _("\8aX\88Ú\93®", "Teleport to town");\r
340                 if (desc) return _("\8aX\82Ö\88Ú\93®\82·\82é\81B\92n\8fã\82É\82¢\82é\82Æ\82«\82µ\82©\8eg\82¦\82È\82¢\81B", "Teleport to a town which you choose in a moment. Can only be used outdoors.");\r
341 \r
342                 {\r
343                         if (cast)\r
344                         {\r
345                                 if (!tele_town()) return NULL;\r
346                         }\r
347                 }\r
348                 break;\r
349 \r
350         case 20:\r
351                 if (name) return _("\8e©\8cÈ\95ª\90Í", "Self Knowledge");\r
352                 if (desc) return _("\8c»\8dÝ\82Ì\8e©\95ª\82Ì\8fó\91Ô\82ð\8a®\91S\82É\92m\82é\81B",\r
353                         "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");\r
354 \r
355                 {\r
356                         if (cast)\r
357                         {\r
358                                 self_knowledge();\r
359                         }\r
360                 }\r
361                 break;\r
362 \r
363         case 21:\r
364                 if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\8c\83x\83\8b", "Teleport Level");\r
365                 if (desc) return _("\8fu\8e\9e\82É\8fã\82©\89º\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "Teleport to up or down stairs in a moment.");\r
366 \r
367                 {\r
368                         if (cast)\r
369                         {\r
370                                 if (!get_check(_("\96{\93\96\82É\91¼\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82µ\82Ü\82·\82©\81H", "Are you sure? (Teleport Level)"))) return NULL;\r
371                                 teleport_level(0);\r
372                         }\r
373                 }\r
374                 break;\r
375 \r
376         case 22:\r
377                 if (name) return _("\8bA\8aÒ\82Ì\8eô\95¶", "Word of Recall");\r
378                 if (desc) return _("\92n\8fã\82É\82¢\82é\82Æ\82«\82Í\83_\83\93\83W\83\87\83\93\82Ì\8dÅ\90[\8aK\82Ö\81A\83_\83\93\83W\83\87\83\93\82É\82¢\82é\82Æ\82«\82Í\92n\8fã\82Ö\82Æ\88Ú\93®\82·\82é\81B",\r
379                         "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
380 \r
381                 {\r
382                         int base = 15;\r
383                         int sides = 20;\r
384 \r
385                         if (info) return info_delay(base, sides);\r
386 \r
387                         if (cast)\r
388                         {\r
389                                 if (!word_of_recall()) return NULL;\r
390                         }\r
391                 }\r
392                 break;\r
393 \r
394         case 23:\r
395                 if (name) return _("\8e\9f\8c³\82Ì\94à", "Dimension Door");\r
396                 if (desc) return _("\92Z\8b\97\97£\93à\82Ì\8ew\92è\82µ\82½\8fê\8f\8a\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "Teleport to given location.");\r
397 \r
398                 {\r
399                         POSITION range = plev / 2 + 10;\r
400 \r
401                         if (info) return info_range(range);\r
402 \r
403                         if (cast)\r
404                         {\r
405                                 msg_print(_("\8e\9f\8c³\82Ì\94à\82ª\8aJ\82¢\82½\81B\96Ú\93I\92n\82ð\91I\82ñ\82Å\89º\82³\82¢\81B", "You open a dimensional gate. Choose a destination."));\r
406                                 if (!dimension_door()) return NULL;\r
407                         }\r
408                 }\r
409                 break;\r
410 \r
411         case 24:\r
412                 if (name) return _("\92²\8d¸", "Probing");\r
413                 if (desc) return _("\83\82\83\93\83X\83^\81[\82Ì\91®\90«\81A\8ec\82è\91Ì\97Í\81A\8dÅ\91å\91Ì\97Í\81A\83X\83s\81[\83h\81A\90³\91Ì\82ð\92m\82é\81B",\r
414                         "Proves all monsters' alignment, HP, speed and their true character.");\r
415 \r
416                 {\r
417                         if (cast)\r
418                         {\r
419                                 probing();\r
420                         }\r
421                 }\r
422                 break;\r
423 \r
424         case 25:\r
425                 if (name) return _("\94\9a\94­\82Ì\83\8b\81[\83\93", "Explosive Rune");\r
426                 if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82é\82Æ\94\9a\94­\82µ\82Ä\83_\83\81\81[\83W\82ð\97^\82¦\82é\83\8b\81[\83\93\82ð\95`\82­\81B",\r
427                         "Sets a glyph under you. The glyph will explode when a monster moves on it.");\r
428 \r
429                 {\r
430                         int dice = 7;\r
431                         int sides = 7;\r
432                         int base = plev;\r
433 \r
434                         if (info) return info_damage(dice, sides, base);\r
435 \r
436                         if (cast)\r
437                         {\r
438                                 explosive_rune();\r
439                         }\r
440                 }\r
441                 break;\r
442 \r
443         case 26:\r
444                 if (name) return _("\94O\93®\97Í", "Telekinesis");\r
445                 if (desc) return _("\83A\83C\83e\83\80\82ð\8e©\95ª\82Ì\91«\8c³\82Ö\88Ú\93®\82³\82¹\82é\81B", "Pulls a distant item close to you.");\r
446 \r
447                 {\r
448                         int weight = plev * 15;\r
449 \r
450                         if (info) return info_weight(weight);\r
451 \r
452                         if (cast)\r
453                         {\r
454                                 if (!get_aim_dir(&dir)) return NULL;\r
455 \r
456                                 fetch(dir, weight, FALSE);\r
457                         }\r
458                 }\r
459                 break;\r
460 \r
461         case 27:\r
462                 if (name) return _("\90ç\97¢\8aá", "Clairvoyance");\r
463                 if (desc) return _("\82»\82Ì\8aK\91S\91Ì\82ð\89i\8bv\82É\8fÆ\82ç\82µ\81A\83_\83\93\83W\83\87\83\93\93à\82·\82×\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B\82³\82ç\82É\81A\88ê\92è\8e\9e\8aÔ\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B",\r
464                         "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
465 \r
466                 {\r
467                         int base = 25;\r
468                         int sides = 30;\r
469 \r
470                         if (info) return info_duration(base, sides);\r
471 \r
472                         if (cast)\r
473                         {\r
474                                 chg_virtue(V_KNOWLEDGE, 1);\r
475                                 chg_virtue(V_ENLIGHTEN, 1);\r
476 \r
477                                 wiz_lite(FALSE);\r
478 \r
479                                 if (!p_ptr->telepathy)\r
480                                 {\r
481                                         set_tim_esp(randint1(sides) + base, FALSE);\r
482                                 }\r
483                         }\r
484                 }\r
485                 break;\r
486 \r
487         case 28:\r
488                 if (name) return _("\96£\97¹\82Ì\8e\8b\90ü", "Charm monsters");\r
489                 if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to charm all monsters in sight.");\r
490 \r
491                 {\r
492                         int power = plev * 2;\r
493 \r
494                         if (info) return info_power(power);\r
495 \r
496                         if (cast)\r
497                         {\r
498                                 charm_monsters(power);\r
499                         }\r
500                 }\r
501                 break;\r
502 \r
503         case 29:\r
504                 if (name) return _("\98B\8bà\8fp", "Alchemy");\r
505                 if (desc) return _("\83A\83C\83e\83\801\82Â\82ð\82¨\8bà\82É\95Ï\82¦\82é\81B", "Turns an item into 1/3 of its value in gold.");\r
506 \r
507                 {\r
508                         if (cast)\r
509                         {\r
510                                 if (!alchemy()) return NULL;\r
511                         }\r
512                 }\r
513                 break;\r
514 \r
515         case 30:\r
516                 if (name) return _("\89ö\95¨\92Ç\95ú", "Banishment");\r
517                 if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Teleports all monsters in sight away unless resisted.");\r
518 \r
519                 {\r
520                         int power = plev * 4;\r
521 \r
522                         if (info) return info_power(power);\r
523 \r
524                         if (cast)\r
525                         {\r
526                                 banish_monsters(power);\r
527                         }\r
528                 }\r
529                 break;\r
530 \r
531         case 31:\r
532                 if (name) return _("\96³\8f\9d\82Ì\8b\85", "Globe of Invulnerability");\r
533                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83_\83\81\81[\83W\82ð\8eó\82¯\82È\82­\82È\82é\83o\83\8a\83A\82ð\92£\82é\81B\90Ø\82ê\82½\8fu\8aÔ\82É\8f­\82µ\83^\81[\83\93\82ð\8fÁ\94ï\82·\82é\82Ì\82Å\92\8d\88Ó\81B",\r
534                         "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");\r
535 \r
536                 {\r
537                         int base = 4;\r
538 \r
539                         if (info) return info_duration(base, base);\r
540 \r
541                         if (cast)\r
542                         {\r
543                                 set_invuln(randint1(base) + base, FALSE);\r
544                         }\r
545                 }\r
546                 break;\r
547         }\r
548 \r
549         return "";\r
550 }\r