OSDN Git Service

#37353 特殊部屋生成処理を rooms.c から rooms-special.c/h へ分離。
[hengband/hengband.git] / src / realm-life.c
1 #include "angband.h"\r
2 #include "cmd-spell.h"\r
3 \r
4 /*!\r
5 * @brief \90\96½\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_life_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         int dir;\r
18         int plev = p_ptr->lev;\r
19 \r
20         switch (spell)\r
21         {\r
22         case 0:\r
23                 if (name) return _("\8cy\8f\9d\82Ì\8e¡\96ü", "Cure Light Wounds");\r
24                 if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\8f­\82µ\89ñ\95\9c\82³\82¹\82é\81B", "Heals cut and HP a little.");\r
25                 {\r
26                         int dice = 2;\r
27                         int sides = 10;\r
28 \r
29                         if (info) return info_heal(dice, sides, 0);\r
30 \r
31                         if (cast)\r
32                         {\r
33                                 hp_player(damroll(dice, sides));\r
34                                 set_cut(p_ptr->cut - 10);\r
35                         }\r
36                 }\r
37                 break;\r
38 \r
39         case 1:\r
40                 if (name) return _("\8fj\95\9f", "Bless");\r
41                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96½\92\86\97¦\82ÆAC\82É\83{\81[\83i\83X\82ð\93¾\82é\81B", "Gives bonus to hit and AC for a few turns.");\r
42                 {\r
43                         int base = 12;\r
44 \r
45                         if (info) return info_duration(base, base);\r
46 \r
47                         if (cast)\r
48                         {\r
49                                 set_blessed(randint1(base) + base, FALSE);\r
50                         }\r
51                 }\r
52                 break;\r
53 \r
54         case 2:\r
55                 if (name) return _("\8cy\8f\9d", "Cause Light Wounds");\r
56                 if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\8f¬\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Wounds a monster a little unless resisted.");\r
57                 {\r
58                         int dice = 3 + (plev - 1) / 5;\r
59                         int sides = 4;\r
60 \r
61                         if (info) return info_damage(dice, sides, 0);\r
62 \r
63                         if (cast)\r
64                         {\r
65                                 if (!get_aim_dir(&dir)) return NULL;\r
66                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
67                         }\r
68                 }\r
69                 break;\r
70 \r
71         case 3:\r
72                 if (name) return _("\8cõ\82Ì\8f¢\8a«", "Call Light");\r
73                 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
74                 {\r
75                         int dice = 2;\r
76                         int sides = plev / 2;\r
77                         int rad = plev / 10 + 1;\r
78 \r
79                         if (info) return info_damage(dice, sides, 0);\r
80 \r
81                         if (cast)\r
82                         {\r
83                                 lite_area(damroll(dice, sides), rad);\r
84                         }\r
85                 }\r
86                 break;\r
87 \r
88         case 4:\r
89                 if (name) return _("ã© & \89B\82µ\94à\8a´\92m", "Detect Doors & Traps");\r
90                 if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ìã©\82Æ\94à\82Æ\8aK\92i\82ð\8a´\92m\82·\82é\81B", "Detects traps, doors, and stairs in your vicinity.");\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_traps(rad, TRUE);\r
99                                 detect_doors(rad);\r
100                                 detect_stairs(rad);\r
101                         }\r
102                 }\r
103                 break;\r
104 \r
105         case 5:\r
106                 if (name) return _("\8fd\8f\9d\82Ì\8e¡\96ü", "Cure Medium Wounds");\r
107                 if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\92\86\92ö\93x\89ñ\95\9c\82³\82¹\82é\81B", "Heals cut and HP more.");\r
108                 {\r
109                         int dice = 4;\r
110                         int sides = 10;\r
111 \r
112                         if (info) return info_heal(dice, sides, 0);\r
113 \r
114                         if (cast)\r
115                         {\r
116                                 hp_player(damroll(dice, sides));\r
117                                 set_cut((p_ptr->cut / 2) - 20);\r
118                         }\r
119                 }\r
120                 break;\r
121 \r
122         case 6:\r
123                 if (name) return _("\89ð\93Å", "Cure Poison");\r
124                 if (desc) return _("\91Ì\93à\82Ì\93Å\82ð\8eæ\82è\8f\9c\82­\81B", "Cure poison status.");\r
125                 {\r
126                         if (cast)\r
127                         {\r
128                                 set_poisoned(0);\r
129                         }\r
130                 }\r
131                 break;\r
132 \r
133         case 7:\r
134                 if (name) return _("\8bó\95 \8f[\91«", "Satisfy Hunger");\r
135                 if (desc) return _("\96\9e\95 \82É\82·\82é\81B", "Satisfies hunger.");\r
136                 {\r
137                         if (cast)\r
138                         {\r
139                                 set_food(PY_FOOD_MAX - 1);\r
140                         }\r
141                 }\r
142                 break;\r
143 \r
144         case 8:\r
145                 if (name) return _("\89ð\8eô", "Remove Curse");\r
146                 if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8eã\82¢\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal curses from equipped items.");\r
147                 {\r
148                         if (cast)\r
149                         {\r
150                                 if (remove_curse())\r
151                                 {\r
152                                         msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
153                                 }\r
154                         }\r
155                 }\r
156                 break;\r
157 \r
158         case 9:\r
159                 if (name) return _("\8fd\8f\9d", "Cause Medium Wounds");\r
160                 if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\92\86\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Wounds a monster unless resisted.");\r
161                 {\r
162                         int sides = 8 + (plev - 5) / 4;\r
163                         int dice = 8;\r
164 \r
165                         if (info) return info_damage(dice, sides, 0);\r
166 \r
167                         if (cast)\r
168                         {\r
169                                 if (!get_aim_dir(&dir)) return NULL;\r
170                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
171                         }\r
172                 }\r
173                 break;\r
174 \r
175         case 10:\r
176                 if (name) return _("\92v\96½\8f\9d\82Ì\8e¡\96ü", "Cure Critical Wounds");\r
177                 if (desc) return _("\91Ì\97Í\82ð\91å\95\9d\82É\89ñ\95\9c\82³\82¹\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "Heals cut, stun and HP greatly.");\r
178                 {\r
179                         int dice = 8;\r
180                         int sides = 10;\r
181 \r
182                         if (info) return info_heal(dice, sides, 0);\r
183 \r
184                         if (cast)\r
185                         {\r
186                                 hp_player(damroll(dice, sides));\r
187                                 set_stun(0);\r
188                                 set_cut(0);\r
189                         }\r
190                 }\r
191                 break;\r
192 \r
193         case 11:\r
194                 if (name) return _("\91Ï\94M\91Ï\8a¦", "Resist Heat and Cold");\r
195                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Î\89\8a\82Æ\97â\8bC\82É\91Î\82·\82é\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
196                         "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.");\r
197 \r
198                 {\r
199                         int base = 20;\r
200 \r
201                         if (info) return info_duration(base, base);\r
202 \r
203                         if (cast)\r
204                         {\r
205                                 set_oppose_cold(randint1(base) + base, FALSE);\r
206                                 set_oppose_fire(randint1(base) + base, FALSE);\r
207                         }\r
208                 }\r
209                 break;\r
210 \r
211         case 12:\r
212                 if (name) return _("\8eü\95Ó\8a´\92m", "Sense Surroundings");\r
213                 if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "Maps nearby area.");\r
214 \r
215                 {\r
216                         int rad = DETECT_RAD_MAP;\r
217 \r
218                         if (info) return info_radius(rad);\r
219 \r
220                         if (cast)\r
221                         {\r
222                                 map_area(rad);\r
223                         }\r
224                 }\r
225                 break;\r
226 \r
227         case 13:\r
228                 if (name) return _("\83p\83j\83b\83N\81E\83A\83\93\83f\83b\83h", "Turn Undead");\r
229                 if (desc) return _("\8e\8b\8aE\93à\82Ì\83A\83\93\83f\83b\83h\82ð\8b°\95|\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare undead monsters in sight.");\r
230 \r
231                 {\r
232                         if (cast)\r
233                         {\r
234                                 turn_undead();\r
235                         }\r
236                 }\r
237                 break;\r
238 \r
239         case 14:\r
240                 if (name) return _("\91Ì\97Í\89ñ\95\9c", "Healing");\r
241                 if (desc) return _("\8bÉ\82ß\82Ä\8b­\97Í\82È\89ñ\95\9c\8eô\95\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "Much powerful healing magic, and heals cut and stun completely.");\r
242 \r
243                 {\r
244                         int heal = 300;\r
245 \r
246                         if (info) return info_heal(0, 0, heal);\r
247 \r
248                         if (cast)\r
249                         {\r
250                                 hp_player(heal);\r
251                                 set_stun(0);\r
252                                 set_cut(0);\r
253                         }\r
254                 }\r
255                 break;\r
256 \r
257         case 15:\r
258                 if (name) return _("\8c\8b\8aE\82Ì\96ä\8fÍ", "Glyph of Warding");\r
259                 if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B",\r
260                         "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");\r
261 \r
262                 {\r
263                         if (cast)\r
264                         {\r
265                                 warding_glyph();\r
266                         }\r
267                 }\r
268                 break;\r
269 \r
270         case 16:\r
271                 if (name) return _("*\89ð\8eô*", "Dispel Curse");\r
272                 if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8b­\97Í\82È\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal and heavy curse from equipped items.");\r
273 \r
274                 {\r
275                         if (cast)\r
276                         {\r
277                                 if (remove_all_curse())\r
278                                 {\r
279                                         msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
280                                 }\r
281                         }\r
282                 }\r
283                 break;\r
284 \r
285         case 17:\r
286                 if (name) return _("\8aÓ\8e¯", "Perception");\r
287                 if (desc) return _("\83A\83C\83e\83\80\82ð\8e¯\95Ê\82·\82é\81B", "Identifies an item.");\r
288 \r
289                 {\r
290                         if (cast)\r
291                         {\r
292                                 if (!ident_spell(FALSE)) return NULL;\r
293                         }\r
294                 }\r
295                 break;\r
296 \r
297         case 18:\r
298                 if (name) return _("\83A\83\93\83f\83b\83h\91Þ\8eU", "Dispel Undead");\r
299                 if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83A\83\93\83f\83b\83h\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Damages all undead monsters in sight.");\r
300 \r
301                 {\r
302                         int dice = 1;\r
303                         int sides = plev * 5;\r
304 \r
305                         if (info) return info_damage(dice, sides, 0);\r
306 \r
307                         if (cast)\r
308                         {\r
309                                 dispel_undead(damroll(dice, sides));\r
310                         }\r
311                 }\r
312                 break;\r
313 \r
314         case 19:\r
315                 if (name) return _("\93â\82Ì\8d\8f", "Day of the Dove");\r
316                 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
317 \r
318                 {\r
319                         int power = plev * 2;\r
320 \r
321                         if (info) return info_power(power);\r
322 \r
323                         if (cast)\r
324                         {\r
325                                 charm_monsters(power);\r
326                         }\r
327                 }\r
328                 break;\r
329 \r
330         case 20:\r
331                 if (name) return _("\92v\96½\8f\9d", "Cause Critical Wounds");\r
332                 if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Wounds a monster critically unless resisted.");\r
333 \r
334                 {\r
335                         int dice = 5 + (plev - 5) / 3;\r
336                         int sides = 15;\r
337 \r
338                         if (info) return info_damage(dice, sides, 0);\r
339 \r
340                         if (cast)\r
341                         {\r
342                                 if (!get_aim_dir(&dir)) return NULL;\r
343                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
344                         }\r
345                 }\r
346                 break;\r
347 \r
348         case 21:\r
349                 if (name) return _("\8bA\8aÒ\82Ì\8fÙ", "Word of Recall");\r
350                 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", "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
351 \r
352                 {\r
353                         int base = 15;\r
354                         int sides = 20;\r
355 \r
356                         if (info) return info_delay(base, sides);\r
357 \r
358                         if (cast)\r
359                         {\r
360                                 if (!word_of_recall()) return NULL;\r
361                         }\r
362                 }\r
363                 break;\r
364 \r
365         case 22:\r
366                 if (name) return _("\90^\8eÀ\82Ì\8dÕ\92d", "Alter Reality");\r
367                 if (desc) return _("\8c»\8dÝ\82Ì\8aK\82ð\8dÄ\8d\\90¬\82·\82é\81B", "Recreates current dungeon level.");\r
368 \r
369                 {\r
370                         int base = 15;\r
371                         int sides = 20;\r
372 \r
373                         if (info) return info_delay(base, sides);\r
374 \r
375                         if (cast)\r
376                         {\r
377                                 alter_reality();\r
378                         }\r
379                 }\r
380                 break;\r
381 \r
382         case 23:\r
383                 if (name) return _("\90^\81E\8c\8b\8aE", "Warding True");\r
384                 if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Æ\8eü\88Í8\83}\83X\82Ì\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B", "Creates glyphs in all adjacent squares and under you.");\r
385 \r
386                 {\r
387                         int rad = 1;\r
388 \r
389                         if (info) return info_radius(rad);\r
390 \r
391                         if (cast)\r
392                         {\r
393                                 warding_glyph();\r
394                                 glyph_creation();\r
395                         }\r
396                 }\r
397                 break;\r
398 \r
399         case 24:\r
400                 if (name) return _("\95s\96Ñ\89»", "Sterilization");\r
401                 if (desc) return _("\82±\82Ì\8aK\82Ì\91\9d\90B\82·\82é\83\82\83\93\83X\83^\81[\82ª\91\9d\90B\82Å\82«\82È\82­\82È\82é\81B", "Prevents any breeders on current level from breeding.");\r
402 \r
403                 {\r
404                         if (cast)\r
405                         {\r
406                                 num_repro += MAX_REPRO;\r
407                         }\r
408                 }\r
409                 break;\r
410 \r
411         case 25:\r
412                 if (name) return _("\91S\8a´\92m", "Detection");\r
413                 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", "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
414 \r
415                 {\r
416                         int rad = DETECT_RAD_DEFAULT;\r
417 \r
418                         if (info) return info_radius(rad);\r
419 \r
420                         if (cast)\r
421                         {\r
422                                 detect_all(rad);\r
423                         }\r
424                 }\r
425                 break;\r
426 \r
427         case 26:\r
428                 if (name) return _("\83A\83\93\83f\83b\83h\8fÁ\96Å", "Annihilate Undead");\r
429                 if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\82¢\82é\83A\83\93\83f\83b\83h\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
430                         "Eliminates all nearby undead monsters, exhausting you.  Powerful or unique monsters may be able to resist.");\r
431 \r
432                 {\r
433                         int power = plev + 50;\r
434 \r
435                         if (info) return info_power(power);\r
436 \r
437                         if (cast)\r
438                         {\r
439                                 mass_genocide_undead(power, TRUE);\r
440                         }\r
441                 }\r
442                 break;\r
443 \r
444         case 27:\r
445                 if (name) return _("\90ç\97¢\8aá", "Clairvoyance");\r
446                 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", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
447 \r
448                 {\r
449                         if (cast)\r
450                         {\r
451                                 wiz_lite(FALSE);\r
452                         }\r
453                 }\r
454                 break;\r
455 \r
456         case 28:\r
457                 if (name) return _("\91S\95\9c\8a\88", "Restoration");\r
458                 if (desc) return _("\82·\82×\82Ä\82Ì\83X\83e\81[\83^\83X\82Æ\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restores all stats and experience.");\r
459 \r
460                 {\r
461                         if (cast)\r
462                         {\r
463                                 do_res_stat(A_STR);\r
464                                 do_res_stat(A_INT);\r
465                                 do_res_stat(A_WIS);\r
466                                 do_res_stat(A_DEX);\r
467                                 do_res_stat(A_CON);\r
468                                 do_res_stat(A_CHR);\r
469                                 restore_level();\r
470                         }\r
471                 }\r
472                 break;\r
473 \r
474         case 29:\r
475                 if (name) return _("*\91Ì\97Í\89ñ\95\9c*", "Healing True");\r
476                 if (desc) return _("\8dÅ\8b­\82Ì\8e¡\96ü\82Ì\96\82\96@\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "The greatest healing magic. Heals all HP, cut and stun.");\r
477 \r
478                 {\r
479                         int heal = 2000;\r
480 \r
481                         if (info) return info_heal(0, 0, heal);\r
482 \r
483                         if (cast)\r
484                         {\r
485                                 hp_player(heal);\r
486                                 set_stun(0);\r
487                                 set_cut(0);\r
488                         }\r
489                 }\r
490                 break;\r
491 \r
492         case 30:\r
493                 if (name) return _("\90¹\82È\82é\83r\83W\83\87\83\93", "Holy Vision");\r
494                 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
495 \r
496                 {\r
497                         if (cast)\r
498                         {\r
499                                 if (!identify_fully(FALSE)) return NULL;\r
500                         }\r
501                 }\r
502                 break;\r
503 \r
504         case 31:\r
505                 if (name) return _("\8b\86\8bÉ\82Ì\91Ï\90«", "Ultimate Resistance");\r
506                 if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\82 \82ç\82ä\82é\91Ï\90«\82ð\95t\82¯\81AAC\82Æ\96\82\96@\96h\8cä\94\\97Í\82ð\8fã\8f¸\82³\82¹\82é\81B", "Gives ultimate resistance, bonus to AC and speed.");\r
507 \r
508                 {\r
509                         TIME_EFFECT base = (TIME_EFFECT)plev / 2;\r
510 \r
511                         if (info) return info_duration(base, base);\r
512 \r
513                         if (cast)\r
514                         {\r
515                                 TIME_EFFECT v = randint1(base) + base;\r
516                                 set_fast(v, FALSE);\r
517                                 set_oppose_acid(v, FALSE);\r
518                                 set_oppose_elec(v, FALSE);\r
519                                 set_oppose_fire(v, FALSE);\r
520                                 set_oppose_cold(v, FALSE);\r
521                                 set_oppose_pois(v, FALSE);\r
522                                 set_ultimate_res(v, FALSE);\r
523                         }\r
524                 }\r
525                 break;\r
526         }\r
527 \r
528         return "";\r
529 }\r