OSDN Git Service

#37353 歌領域処理を cmd-spell.c から realm-song.c/h へ分離。
[hengband/hengband.git] / src / realm-trump.c
1 #include "angband.h"\r
2 #include "cmd-spell.h"\r
3 \r
4 \r
5 /*!\r
6 * @brief \83g\83\89\83\93\83v\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_trump_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         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;\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 _("\83V\83\87\81[\83g\81E\83e\83\8c\83|\81[\83g", "Phase Door");\r
27                 if (desc) return _("\8bß\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport short distance.");\r
28 \r
29                 {\r
30                         POSITION range = 10;\r
31 \r
32                         if (info) return info_range(range);\r
33 \r
34                         if (cast)\r
35                         {\r
36                                 teleport_player(range, 0L);\r
37                         }\r
38                 }\r
39                 break;\r
40 \r
41         case 1:\r
42                 if (name) return _("\92\81\82Ì\83J\81[\83h", "Trump Spiders");\r
43                 if (desc) return _("\92\81\82ð\8f¢\8a«\82·\82é\81B", "Summons spiders.");\r
44 \r
45                 {\r
46                         if (cast || fail)\r
47                         {\r
48                                 msg_print(_("\82 \82È\82½\82Í\92\81\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of an spider..."));\r
49                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))\r
50                                 {\r
51                                         if (fail)\r
52                                         {\r
53                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\92\81\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned spiders get angry!"));\r
54                                         }\r
55                                 }\r
56                         }\r
57                 }\r
58                 break;\r
59 \r
60         case 2:\r
61                 if (name) return _("\83V\83\83\83b\83t\83\8b", "Shuffle");\r
62                 if (desc) return _("\83J\81[\83h\82Ì\90è\82¢\82ð\82·\82é\81B", "Causes random effects.");\r
63 \r
64                 {\r
65                         if (info) return s_random;\r
66 \r
67                         if (cast)\r
68                         {\r
69                                 cast_shuffle();\r
70                         }\r
71                 }\r
72                 break;\r
73 \r
74         case 3:\r
75                 if (name) return _("\83t\83\8d\83A\81E\83\8a\83Z\83b\83g", "Reset Recall");\r
76                 if (desc) return _("\8dÅ\90[\8aK\82ð\95Ï\8dX\82·\82é\81B", "Resets the 'deepest' level for recall spell.");\r
77 \r
78                 {\r
79                         if (cast)\r
80                         {\r
81                                 if (!reset_recall()) return NULL;\r
82                         }\r
83                 }\r
84                 break;\r
85 \r
86         case 4:\r
87                 if (name) return _("\83e\83\8c\83|\81[\83g", "Teleport");\r
88                 if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport long distance.");\r
89 \r
90                 {\r
91                         POSITION range = plev * 4;\r
92 \r
93                         if (info) return info_range(range);\r
94 \r
95                         if (cast)\r
96                         {\r
97                                 teleport_player(range, 0L);\r
98                         }\r
99                 }\r
100                 break;\r
101 \r
102         case 5:\r
103                 if (name) return _("\8a´\92m\82Ì\83J\81[\83h", "Trump Spying");\r
104                 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
105 \r
106                 {\r
107                         int base = 25;\r
108                         int sides = 30;\r
109 \r
110                         if (info) return info_duration(base, sides);\r
111 \r
112                         if (cast)\r
113                         {\r
114                                 set_tim_esp(randint1(sides) + base, FALSE);\r
115                         }\r
116                 }\r
117                 break;\r
118 \r
119         case 6:\r
120                 if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\82\83\93\83X\83^\81[", "Teleport Away");\r
121                 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
122 \r
123                 {\r
124                         int power = plev;\r
125 \r
126                         if (info) return info_power(power);\r
127 \r
128                         if (cast)\r
129                         {\r
130                                 if (!get_aim_dir(&dir)) return NULL;\r
131 \r
132                                 fire_beam(GF_AWAY_ALL, dir, power);\r
133                         }\r
134                 }\r
135                 break;\r
136 \r
137         case 7:\r
138                 if (name) return _("\93®\95¨\82Ì\83J\81[\83h", "Trump Animals");\r
139                 if (desc) return _("1\91Ì\82Ì\93®\95¨\82ð\8f¢\8a«\82·\82é\81B", "Summons an animal.");\r
140 \r
141                 {\r
142                         if (cast || fail)\r
143                         {\r
144                                 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);\r
145                                 msg_print(_("\82 \82È\82½\82Í\93®\95¨\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of an animal..."));\r
146                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
147                                 {\r
148                                         if (fail)\r
149                                         {\r
150                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\93®\95¨\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned animal gets angry!"));\r
151                                         }\r
152                                 }\r
153                         }\r
154                 }\r
155                 break;\r
156 \r
157         case 8:\r
158                 if (name) return _("\88Ú\93®\82Ì\83J\81[\83h", "Trump Reach");\r
159                 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
160 \r
161                 {\r
162                         int weight = plev * 15;\r
163 \r
164                         if (info) return info_weight(weight);\r
165 \r
166                         if (cast)\r
167                         {\r
168                                 if (!get_aim_dir(&dir)) return NULL;\r
169 \r
170                                 fetch(dir, weight, FALSE);\r
171                         }\r
172                 }\r
173                 break;\r
174 \r
175         case 9:\r
176                 if (name) return _("\83J\83~\83J\83[\82Ì\83J\81[\83h", "Trump Kamikaze");\r
177                 if (desc) return _("\95¡\90\94\82Ì\94\9a\94­\82·\82é\83\82\83\93\83X\83^\81[\82ð\8f¢\8a«\82·\82é\81B", "Summons monsters which explode by itself.");\r
178 \r
179                 {\r
180                         if (cast || fail)\r
181                         {\r
182                                 int x, y;\r
183                                 int type;\r
184 \r
185                                 if (cast)\r
186                                 {\r
187                                         if (!target_set(TARGET_KILL)) return NULL;\r
188                                         x = target_col;\r
189                                         y = target_row;\r
190                                 }\r
191                                 else\r
192                                 {\r
193                                         /* Summons near player when failed */\r
194                                         x = p_ptr->x;\r
195                                         y = p_ptr->y;\r
196                                 }\r
197 \r
198                                 if (p_ptr->pclass == CLASS_BEASTMASTER)\r
199                                         type = SUMMON_KAMIKAZE_LIVING;\r
200                                 else\r
201                                         type = SUMMON_KAMIKAZE;\r
202 \r
203                                 msg_print(_("\82 \82È\82½\82Í\83J\83~\83J\83[\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on several trumps at once..."));\r
204                                 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))\r
205                                 {\r
206                                         if (fail)\r
207                                         {\r
208                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83\82\83\93\83X\83^\81[\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned creatures get angry!"));\r
209                                         }\r
210                                 }\r
211                         }\r
212                 }\r
213                 break;\r
214 \r
215         case 10:\r
216                 if (name) return _("\8c\97ì\8f¢\8a«", "Phantasmal Servant");\r
217                 if (desc) return _("1\91Ì\82Ì\97H\97ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a ghost.");\r
218 \r
219                 {\r
220                         /* Phantasmal Servant is not summoned as enemy when failed */\r
221                         if (cast)\r
222                         {\r
223                                 int summon_lev = plev * 2 / 3 + randint1(plev / 2);\r
224 \r
225                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))\r
226                                 {\r
227                                         msg_print(_("\8cä\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\8cä\8eå\90l\97l\81H", "'Your wish, master?'"));\r
228                                 }\r
229                         }\r
230                 }\r
231                 break;\r
232 \r
233         case 11:\r
234                 if (name) return _("\83X\83s\81[\83h\81E\83\82\83\93\83X\83^\81[", "Haste Monster");\r
235                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\89Á\91¬\82³\82¹\82é\81B", "Hastes a monster.");\r
236 \r
237                 {\r
238                         if (cast)\r
239                         {\r
240                                 bool result;\r
241 \r
242                                 /* Temporary enable target_pet option */\r
243                                 bool old_target_pet = target_pet;\r
244                                 target_pet = TRUE;\r
245 \r
246                                 result = get_aim_dir(&dir);\r
247 \r
248                                 /* Restore target_pet option */\r
249                                 target_pet = old_target_pet;\r
250 \r
251                                 if (!result) return NULL;\r
252 \r
253                                 speed_monster(dir, plev);\r
254                         }\r
255                 }\r
256                 break;\r
257 \r
258         case 12:\r
259                 if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\8c\83x\83\8b", "Teleport Level");\r
260                 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
261 \r
262                 {\r
263                         if (cast)\r
264                         {\r
265                                 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
266                                 teleport_level(0);\r
267                         }\r
268                 }\r
269                 break;\r
270 \r
271         case 13:\r
272                 if (name) return _("\8e\9f\8c³\82Ì\94à", "Dimension Door");\r
273                 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
274 \r
275                 {\r
276                         POSITION range = plev / 2 + 10;\r
277 \r
278                         if (info) return info_range(range);\r
279 \r
280                         if (cast)\r
281                         {\r
282                                 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
283                                 if (!dimension_door()) return NULL;\r
284                         }\r
285                 }\r
286                 break;\r
287 \r
288         case 14:\r
289                 if (name) return _("\8bA\8aÒ\82Ì\8eô\95¶", "Word of Recall");\r
290                 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
291                         "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
292 \r
293                 {\r
294                         int base = 15;\r
295                         int sides = 20;\r
296 \r
297                         if (info) return info_delay(base, sides);\r
298 \r
299                         if (cast)\r
300                         {\r
301                                 if (!word_of_recall()) return NULL;\r
302                         }\r
303                 }\r
304                 break;\r
305 \r
306         case 15:\r
307                 if (name) return _("\89ö\95¨\92Ç\95ú", "Banish");\r
308                 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
309 \r
310                 {\r
311                         int power = plev * 4;\r
312 \r
313                         if (info) return info_power(power);\r
314 \r
315                         if (cast)\r
316                         {\r
317                                 banish_monsters(power);\r
318                         }\r
319                 }\r
320                 break;\r
321 \r
322         case 16:\r
323                 if (name) return _("\88Ê\92u\8cð\8a·\82Ì\83J\81[\83h", "Swap Position");\r
324                 if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82Æ\88Ê\92u\82ð\8cð\8a·\82·\82é\81B", "Swap positions of you and a monster.");\r
325 \r
326                 {\r
327                         if (cast)\r
328                         {\r
329                                 bool result;\r
330 \r
331                                 /* HACK -- No range limit */\r
332                                 project_length = -1;\r
333 \r
334                                 result = get_aim_dir(&dir);\r
335 \r
336                                 /* Restore range to default */\r
337                                 project_length = 0;\r
338 \r
339                                 if (!result) return NULL;\r
340 \r
341                                 teleport_swap(dir);\r
342                         }\r
343                 }\r
344                 break;\r
345 \r
346         case 17:\r
347                 if (name) return _("\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h", "Trump Undead");\r
348                 if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
349 \r
350                 {\r
351                         if (cast || fail)\r
352                         {\r
353                                 msg_print(_("\82 \82È\82½\82Í\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of an undead creature..."));\r
354                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))\r
355                                 {\r
356                                         if (fail)\r
357                                         {\r
358                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83A\83\93\83f\83b\83h\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned undead creature gets angry!"));\r
359                                         }\r
360                                 }\r
361                         }\r
362                 }\r
363                 break;\r
364 \r
365         case 18:\r
366                 if (name) return _("à¦\92\8e\97Þ\82Ì\83J\81[\83h", "Trump Reptiles");\r
367                 if (desc) return _("1\91Ì\82Ì\83q\83h\83\89\82ð\8f¢\8a«\82·\82é\81B", "Summons a hydra.");\r
368 \r
369                 {\r
370                         if (cast || fail)\r
371                         {\r
372                                 msg_print(_("\82 \82È\82½\82Íà¦\92\8e\97Þ\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of a reptile..."));\r
373                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))\r
374                                 {\r
375                                         if (fail)\r
376                                         {\r
377                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½à¦\92\8e\97Þ\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned reptile gets angry!"));\r
378                                         }\r
379                                 }\r
380                         }\r
381                 }\r
382                 break;\r
383 \r
384         case 19:\r
385                 if (name) return _("\83\82\83\93\83X\83^\81[\82Ì\83J\81[\83h", "Trump Monsters");\r
386                 if (desc) return _("\95¡\90\94\82Ì\83\82\83\93\83X\83^\81[\82ð\8f¢\8a«\82·\82é\81B", "Summons some monsters.");\r
387 \r
388                 {\r
389                         if (cast || fail)\r
390                         {\r
391                                 int type;\r
392                                 msg_print(_("\82 \82È\82½\82Í\83\82\83\93\83X\83^\81[\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on several trumps at once..."));\r
393                                 if (p_ptr->pclass == CLASS_BEASTMASTER)\r
394                                         type = SUMMON_LIVING;\r
395                                 else\r
396                                         type = 0;\r
397 \r
398                                 if (trump_summoning((1 + (plev - 15) / 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
399                                 {\r
400                                         if (fail)\r
401                                         {\r
402                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83\82\83\93\83X\83^\81[\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned creatures get angry!"));\r
403                                         }\r
404                                 }\r
405 \r
406                         }\r
407                 }\r
408                 break;\r
409 \r
410         case 20:\r
411                 if (name) return _("\83n\83E\83\93\83h\82Ì\83J\81[\83h", "Trump Hounds");\r
412                 if (desc) return _("1\83O\83\8b\81[\83v\82Ì\83n\83E\83\93\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons a group of hounds.");\r
413 \r
414                 {\r
415                         if (cast || fail)\r
416                         {\r
417                                 msg_print(_("\82 \82È\82½\82Í\83n\83E\83\93\83h\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of a hound..."));\r
418                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))\r
419                                 {\r
420                                         if (fail)\r
421                                         {\r
422                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83n\83E\83\93\83h\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned hounds get angry!"));\r
423                                         }\r
424                                 }\r
425                         }\r
426                 }\r
427                 break;\r
428 \r
429         case 21:\r
430                 if (name) return _("\83g\83\89\83\93\83v\82Ì\90n", "Trump Branding");\r
431                 if (desc) return _("\95\90\8aí\82É\83g\83\89\83\93\83v\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon a Trump weapon.");\r
432 \r
433                 {\r
434                         if (cast)\r
435                         {\r
436                                 brand_weapon(5);\r
437                         }\r
438                 }\r
439                 break;\r
440 \r
441         case 22:\r
442                 if (name) return _("\90l\8aÔ\83g\83\89\83\93\83v", "Living Trump");\r
443                 if (desc) return _("\83\89\83\93\83_\83\80\82É\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82©\81A\8e©\95ª\82Ì\88Ó\8ev\82Å\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82ª\90g\82É\82Â\82­\81B",\r
444                         "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");\r
445 \r
446                 {\r
447                         if (cast)\r
448                         {\r
449                                 int mutation;\r
450 \r
451                                 if (one_in_(7))\r
452                                         /* Teleport control */\r
453                                         mutation = 12;\r
454                                 else\r
455                                         /* Random teleportation (uncontrolled) */\r
456                                         mutation = 77;\r
457 \r
458                                 /* Gain the mutation */\r
459                                 if (gain_random_mutation(mutation))\r
460                                 {\r
461                                         msg_print(_("\82 \82È\82½\82Í\90\82«\82Ä\82¢\82é\83J\81[\83h\82É\95Ï\82í\82Á\82½\81B", "You have turned into a Living Trump."));\r
462                                 }\r
463                         }\r
464                 }\r
465                 break;\r
466 \r
467         case 23:\r
468                 if (name) return _("\83T\83C\83o\81[\83f\81[\83\82\83\93\82Ì\83J\81[\83h", "Trump Cyberdemon");\r
469                 if (desc) return _("1\91Ì\82Ì\83T\83C\83o\81[\83f\81[\83\82\83\93\82ð\8f¢\8a«\82·\82é\81B", "Summons a cyber demon.");\r
470 \r
471                 {\r
472                         if (cast || fail)\r
473                         {\r
474                                 msg_print(_("\82 \82È\82½\82Í\83T\83C\83o\81[\83f\81[\83\82\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of a Cyberdemon..."));\r
475                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))\r
476                                 {\r
477                                         if (fail)\r
478                                         {\r
479                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83T\83C\83o\81[\83f\81[\83\82\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned Cyberdemon gets angry!"));\r
480                                         }\r
481                                 }\r
482                         }\r
483                 }\r
484                 break;\r
485 \r
486         case 24:\r
487                 if (name) return _("\97\\8c©\82Ì\83J\81[\83h", "Trump Divination");\r
488                 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
489                         "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
490 \r
491                 {\r
492                         int rad = DETECT_RAD_DEFAULT;\r
493 \r
494                         if (info) return info_radius(rad);\r
495 \r
496                         if (cast)\r
497                         {\r
498                                 detect_all(rad);\r
499                         }\r
500                 }\r
501                 break;\r
502 \r
503         case 25:\r
504                 if (name) return _("\92m\8e¯\82Ì\83J\81[\83h", "Trump Lore");\r
505                 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
506 \r
507                 {\r
508                         if (cast)\r
509                         {\r
510                                 if (!identify_fully(FALSE)) return NULL;\r
511                         }\r
512                 }\r
513                 break;\r
514 \r
515         case 26:\r
516                 if (name) return _("\89ñ\95\9c\83\82\83\93\83X\83^\81[", "Heal Monster");\r
517                 if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82Ì\91Ì\97Í\82ð\89ñ\95\9c\82³\82¹\82é\81B", "Heal a monster.");\r
518 \r
519                 {\r
520                         int heal = plev * 10 + 200;\r
521 \r
522                         if (info) return info_heal(0, 0, heal);\r
523 \r
524                         if (cast)\r
525                         {\r
526                                 bool result;\r
527 \r
528                                 /* Temporary enable target_pet option */\r
529                                 bool old_target_pet = target_pet;\r
530                                 target_pet = TRUE;\r
531 \r
532                                 result = get_aim_dir(&dir);\r
533 \r
534                                 /* Restore target_pet option */\r
535                                 target_pet = old_target_pet;\r
536 \r
537                                 if (!result) return NULL;\r
538 \r
539                                 heal_monster(dir, heal);\r
540                         }\r
541                 }\r
542                 break;\r
543 \r
544         case 27:\r
545                 if (name) return _("\83h\83\89\83S\83\93\82Ì\83J\81[\83h", "Trump Dragon");\r
546                 if (desc) return _("1\91Ì\82Ì\83h\83\89\83S\83\93\82ð\8f¢\8a«\82·\82é\81B", "Summons a dragon.");\r
547 \r
548                 {\r
549                         if (cast || fail)\r
550                         {\r
551                                 msg_print(_("\82 \82È\82½\82Í\83h\83\89\83S\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of a dragon..."));\r
552                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))\r
553                                 {\r
554                                         if (fail)\r
555                                         {\r
556                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83h\83\89\83S\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned dragon gets angry!"));\r
557                                         }\r
558                                 }\r
559                         }\r
560                 }\r
561                 break;\r
562 \r
563         case 28:\r
564                 if (name) return _("è¦\90Î\82Ì\83J\81[\83h", "Trump Meteor");\r
565                 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
566 \r
567                 {\r
568                         HIT_POINT dam = plev * 2;\r
569                         int rad = 2;\r
570 \r
571                         if (info) return info_multi_damage(dam);\r
572 \r
573                         if (cast)\r
574                         {\r
575                                 cast_meteor(dam, rad);\r
576                         }\r
577                 }\r
578                 break;\r
579 \r
580         case 29:\r
581                 if (name) return _("\83f\81[\83\82\83\93\82Ì\83J\81[\83h", "Trump Demon");\r
582                 if (desc) return _("1\91Ì\82Ì\88«\96\82\82ð\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
583 \r
584                 {\r
585                         if (cast || fail)\r
586                         {\r
587                                 msg_print(_("\82 \82È\82½\82Í\83f\81[\83\82\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of a demon..."));\r
588                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))\r
589                                 {\r
590                                         if (fail)\r
591                                         {\r
592                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\83f\81[\83\82\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned demon gets angry!"));\r
593                                         }\r
594                                 }\r
595                         }\r
596                 }\r
597                 break;\r
598 \r
599         case 30:\r
600                 if (name) return _("\92n\8d\96\82Ì\83J\81[\83h", "Trump Greater Undead");\r
601                 if (desc) return _("1\91Ì\82Ì\8fã\8b\89\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons a greater undead.");\r
602 \r
603                 {\r
604                         if (cast || fail)\r
605                         {\r
606                                 msg_print(_("\82 \82È\82½\82Í\8b­\97Í\82È\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of a greater undead being..."));\r
607                                 /* May allow unique depend on level and dice roll */\r
608                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))\r
609                                 {\r
610                                         if (fail)\r
611                                         {\r
612                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\8fã\8b\89\83A\83\93\83f\83b\83h\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned greater undead creature gets angry!"));\r
613                                         }\r
614                                 }\r
615                         }\r
616                 }\r
617                 break;\r
618 \r
619         case 31:\r
620                 if (name) return _("\8cÃ\91ã\83h\83\89\83S\83\93\82Ì\83J\81[\83h", "Trump Ancient Dragon");\r
621                 if (desc) return _("1\91Ì\82Ì\8cÃ\91ã\83h\83\89\83S\83\93\82ð\8f¢\8a«\82·\82é\81B", "Summons an ancient dragon.");\r
622 \r
623                 {\r
624                         if (cast)\r
625                         {\r
626                                 int type;\r
627 \r
628                                 if (p_ptr->pclass == CLASS_BEASTMASTER)\r
629                                         type = SUMMON_HI_DRAGON_LIVING;\r
630                                 else\r
631                                         type = SUMMON_HI_DRAGON;\r
632 \r
633                                 msg_print(_("\82 \82È\82½\82Í\8cÃ\91ã\83h\83\89\83S\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "You concentrate on the trump of an ancient dragon..."));\r
634                                 /* May allow unique depend on level and dice roll */\r
635                                 if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))\r
636                                 {\r
637                                         if (fail)\r
638                                         {\r
639                                                 msg_print(_("\8f¢\8a«\82³\82ê\82½\8cÃ\91ã\83h\83\89\83S\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned ancient dragon gets angry!"));\r
640                                         }\r
641                                 }\r
642                         }\r
643                 }\r
644                 break;\r
645         }\r
646 \r
647         return "";\r
648 }\r