OSDN Git Service

[Refactor] #37353 コメント整理。 / Refactor comments.
[hengband/hengband.git] / src / realm-trump.c
index 8046b4b..53c42f9 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-\r
-/*!\r
-* @brief \83g\83\89\83\93\83v\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @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
-*/\r
-cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
-       bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
-       bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
-       bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
-       bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-       bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;\r
-       static const char s_random[] = _("\83\89\83\93\83_\83\80", "random");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("\83V\83\87\81[\83g\81E\83e\83\8c\83|\81[\83g", "Phase Door");\r
-               if (desc) return _("\8bß\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport short distance.");\r
-\r
-               {\r
-                       POSITION range = 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("\92\81\82Ì\83J\81[\83h", "Trump Spiders");\r
-               if (desc) return _("\92\81\82ð\8f¢\8a«\82·\82é\81B", "Summons spiders.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("\8f¢\8a«\82³\82ê\82½\92\81\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned spiders get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\83V\83\83\83b\83t\83\8b", "Shuffle");\r
-               if (desc) return _("\83J\81[\83h\82Ì\90è\82¢\82ð\82·\82é\81B", "Causes random effects.");\r
-\r
-               {\r
-                       if (info) return s_random;\r
-\r
-                       if (cast)\r
-                       {\r
-                               cast_shuffle();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("\83t\83\8d\83A\81E\83\8a\83Z\83b\83g", "Reset Recall");\r
-               if (desc) return _("\8dÅ\90[\8aK\82ð\95Ï\8dX\82·\82é\81B", "Resets the 'deepest' level for recall spell.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!reset_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("\83e\83\8c\83|\81[\83g", "Teleport");\r
-               if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport long distance.");\r
-\r
-               {\r
-                       POSITION range = plev * 4;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("\8a´\92m\82Ì\83J\81[\83h", "Trump Spying");\r
-               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
-\r
-               {\r
-                       int base = 25;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_esp(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\82\83\93\83X\83^\81[", "Teleport Away");\r
-               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
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_beam(GF_AWAY_ALL, dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\93®\95¨\82Ì\83J\81[\83h", "Trump Animals");\r
-               if (desc) return _("1\91Ì\82Ì\93®\95¨\82ð\8f¢\8a«\82·\82é\81B", "Summons an animal.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("\8f¢\8a«\82³\82ê\82½\93®\95¨\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned animal gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\88Ú\93®\82Ì\83J\81[\83h", "Trump Reach");\r
-               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
-\r
-               {\r
-                       int weight = plev * 15;\r
-\r
-                       if (info) return info_weight(weight);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fetch(dir, weight, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\83J\83~\83J\83[\82Ì\83J\81[\83h", "Trump Kamikaze");\r
-               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
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int x, y;\r
-                               int type;\r
-\r
-                               if (cast)\r
-                               {\r
-                                       if (!target_set(TARGET_KILL)) return NULL;\r
-                                       x = target_col;\r
-                                       y = target_row;\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Summons near player when failed */\r
-                                       x = p_ptr->x;\r
-                                       y = p_ptr->y;\r
-                               }\r
-\r
-                               if (p_ptr->pclass == CLASS_BEASTMASTER)\r
-                                       type = SUMMON_KAMIKAZE_LIVING;\r
-                               else\r
-                                       type = SUMMON_KAMIKAZE;\r
-\r
-                               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
-                               if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\8c\97ì\8f¢\8a«", "Phantasmal Servant");\r
-               if (desc) return _("1\91Ì\82Ì\97H\97ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a ghost.");\r
-\r
-               {\r
-                       /* Phantasmal Servant is not summoned as enemy when failed */\r
-                       if (cast)\r
-                       {\r
-                               int summon_lev = plev * 2 / 3 + randint1(plev / 2);\r
-\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))\r
-                               {\r
-                                       msg_print(_("\8cä\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\8cä\8eå\90l\97l\81H", "'Your wish, master?'"));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\83X\83s\81[\83h\81E\83\82\83\93\83X\83^\81[", "Haste Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\89Á\91¬\82³\82¹\82é\81B", "Hastes a monster.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               bool result;\r
-\r
-                               /* Temporary enable target_pet option */\r
-                               bool old_target_pet = target_pet;\r
-                               target_pet = TRUE;\r
-\r
-                               result = get_aim_dir(&dir);\r
-\r
-                               /* Restore target_pet option */\r
-                               target_pet = old_target_pet;\r
-\r
-                               if (!result) return NULL;\r
-\r
-                               speed_monster(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\8c\83x\83\8b", "Teleport Level");\r
-               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
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               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
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("\8e\9f\8c³\82Ì\94à", "Dimension Door");\r
-               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
-\r
-               {\r
-                       POSITION range = plev / 2 + 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               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
-                               if (!dimension_door()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("\8bA\8aÒ\82Ì\8eô\95¶", "Word of Recall");\r
-               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
-                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
-\r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!word_of_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\89ö\95¨\92Ç\95ú", "Banish");\r
-               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
-\r
-               {\r
-                       int power = plev * 4;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               banish_monsters(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("\88Ê\92u\8cð\8a·\82Ì\83J\81[\83h", "Swap Position");\r
-               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
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               bool result;\r
-\r
-                               /* HACK -- No range limit */\r
-                               project_length = -1;\r
-\r
-                               result = get_aim_dir(&dir);\r
-\r
-                               /* Restore range to default */\r
-                               project_length = 0;\r
-\r
-                               if (!result) return NULL;\r
-\r
-                               teleport_swap(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h", "Trump Undead");\r
-               if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("à¦\92\8e\97Þ\82Ì\83J\81[\83h", "Trump Reptiles");\r
-               if (desc) return _("1\91Ì\82Ì\83q\83h\83\89\82ð\8f¢\8a«\82·\82é\81B", "Summons a hydra.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("\8f¢\8a«\82³\82ê\82½à¦\92\8e\97Þ\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned reptile gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\83\82\83\93\83X\83^\81[\82Ì\83J\81[\83h", "Trump Monsters");\r
-               if (desc) return _("\95¡\90\94\82Ì\83\82\83\93\83X\83^\81[\82ð\8f¢\8a«\82·\82é\81B", "Summons some monsters.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type;\r
-                               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
-                               if (p_ptr->pclass == CLASS_BEASTMASTER)\r
-                                       type = SUMMON_LIVING;\r
-                               else\r
-                                       type = 0;\r
-\r
-                               if (trump_summoning((1 + (plev - 15) / 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\83n\83E\83\93\83h\82Ì\83J\81[\83h", "Trump Hounds");\r
-               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
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\83g\83\89\83\93\83v\82Ì\90n", "Trump Branding");\r
-               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
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(5);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\90l\8aÔ\83g\83\89\83\93\83v", "Living Trump");\r
-               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
-                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int mutation;\r
-\r
-                               if (one_in_(7))\r
-                                       /* Teleport control */\r
-                                       mutation = 12;\r
-                               else\r
-                                       /* Random teleportation (uncontrolled) */\r
-                                       mutation = 77;\r
-\r
-                               /* Gain the mutation */\r
-                               if (gain_random_mutation(mutation))\r
-                               {\r
-                                       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
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\83T\83C\83o\81[\83f\81[\83\82\83\93\82Ì\83J\81[\83h", "Trump Cyberdemon");\r
-               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
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\97\\8c©\82Ì\83J\81[\83h", "Trump Divination");\r
-               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
-                       "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");\r
-\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_all(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("\92m\8e¯\82Ì\83J\81[\83h", "Trump Lore");\r
-               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
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!identify_fully(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\89ñ\95\9c\83\82\83\93\83X\83^\81[", "Heal Monster");\r
-               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
-\r
-               {\r
-                       int heal = plev * 10 + 200;\r
-\r
-                       if (info) return info_heal(0, 0, heal);\r
-\r
-                       if (cast)\r
-                       {\r
-                               bool result;\r
-\r
-                               /* Temporary enable target_pet option */\r
-                               bool old_target_pet = target_pet;\r
-                               target_pet = TRUE;\r
-\r
-                               result = get_aim_dir(&dir);\r
-\r
-                               /* Restore target_pet option */\r
-                               target_pet = old_target_pet;\r
-\r
-                               if (!result) return NULL;\r
-\r
-                               heal_monster(dir, heal);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\83h\83\89\83S\83\93\82Ì\83J\81[\83h", "Trump Dragon");\r
-               if (desc) return _("1\91Ì\82Ì\83h\83\89\83S\83\93\82ð\8f¢\8a«\82·\82é\81B", "Summons a dragon.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("è¦\90Î\82Ì\83J\81[\83h", "Trump Meteor");\r
-               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
-\r
-               {\r
-                       HIT_POINT dam = plev * 2;\r
-                       int rad = 2;\r
-\r
-                       if (info) return info_multi_damage(dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               cast_meteor(dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("\83f\81[\83\82\83\93\82Ì\83J\81[\83h", "Trump Demon");\r
-               if (desc) return _("1\91Ì\82Ì\88«\96\82\82ð\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\92n\8d\96\82Ì\83J\81[\83h", "Trump Greater Undead");\r
-               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
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               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
-                               /* May allow unique depend on level and dice roll */\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\8cÃ\91ã\83h\83\89\83S\83\93\82Ì\83J\81[\83h", "Trump Ancient Dragon");\r
-               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
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int type;\r
-\r
-                               if (p_ptr->pclass == CLASS_BEASTMASTER)\r
-                                       type = SUMMON_HI_DRAGON_LIVING;\r
-                               else\r
-                                       type = SUMMON_HI_DRAGON;\r
-\r
-                               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
-                               /* May allow unique depend on level and dice roll */\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               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
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
+#include "angband.h"
+#include "cmd-spell.h"
+#include "projection.h"
+#include "spells-summon.h"
+#include "mutation.h"
+#include "spells-status.h"
+
+
+/*!
+* @brief トランプ領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+concptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode)
+{
+       bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
+       bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
+       bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
+       bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
+       bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
+
+       DIRECTION dir;
+       PLAYER_LEVEL plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("ショート・テレポート", "Phase Door");
+               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
+
+               {
+                       POSITION range = 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("蜘蛛のカード", "Trump Spiders");
+               if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたは蜘蛛のカードに集中する...", "You concentrate on the trump of an spider..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("シャッフル", "Shuffle");
+               if (desc) return _("カードの占いをする。", "Causes random effects.");
+
+               {
+                       if (info) return KWD_RANDOM;
+
+                       if (cast)
+                       {
+                               cast_shuffle();
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("フロア・リセット", "Reset Recall");
+               if (desc) return _("最深階を変更する。", "Resets the 'deepest' level for recall spell.");
+
+               {
+                       if (cast)
+                       {
+                               if (!reset_recall()) return NULL;
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("テレポート", "Teleport");
+               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
+
+               {
+                       POSITION range = plev * 4;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("感知のカード", "Trump Spying");
+               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
+
+               {
+                       int base = 25;
+                       DICE_SID sides = 30;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_tim_esp(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("テレポート・モンスター", "Teleport Away");
+               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_AWAY_ALL, dir, power);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("動物のカード", "Trump Animals");
+               if (desc) return _("1体の動物を召喚する。", "Summons an animal.");
+
+               {
+                       if (cast || fail)
+                       {
+                               int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
+                               msg_print(_("あなたは動物のカードに集中する...", "You concentrate on the trump of an animal..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("移動のカード", "Trump Reach");
+               if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
+
+               {
+                       WEIGHT weight = plev * 15;
+
+                       if (info) return info_weight(weight);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fetch(dir, weight, FALSE);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("カミカゼのカード", "Trump Kamikaze");
+               if (desc) return _("複数の爆発するモンスターを召喚する。", "Summons monsters which explode by itself.");
+
+               {
+                       if (cast || fail)
+                       {
+                               POSITION x, y;
+                               int type;
+
+                               if (cast)
+                               {
+                                       if (!target_set(TARGET_KILL)) return NULL;
+                                       x = target_col;
+                                       y = target_row;
+                               }
+                               else
+                               {
+                                       /* Summons near player when failed */
+                                       x = p_ptr->x;
+                                       y = p_ptr->y;
+                               }
+
+                               if (p_ptr->pclass == CLASS_BEASTMASTER)
+                                       type = SUMMON_KAMIKAZE_LIVING;
+                               else
+                                       type = SUMMON_KAMIKAZE;
+
+                               msg_print(_("あなたはカミカゼのカードに集中する...", "You concentrate on several trumps at once..."));
+                               if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("幻霊召喚", "Phantasmal Servant");
+               if (desc) return _("1体の幽霊を召喚する。", "Summons a ghost.");
+
+               {
+                       /* Phantasmal Servant is not summoned as enemy when failed */
+                       if (cast)
+                       {
+                               int summon_lev = plev * 2 / 3 + randint1(plev / 2);
+
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
+                               {
+                                       msg_print(_("御用でございますか、御主人様?", "'Your wish, master?'"));
+                               }
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("スピード・モンスター", "Haste Monster");
+               if (desc) return _("モンスター1体を加速させる。", "Hastes a monster.");
+
+               {
+                       if (cast)
+                       {
+                               bool result;
+
+                               /* Temporary enable target_pet option */
+                               bool old_target_pet = target_pet;
+                               target_pet = TRUE;
+
+                               result = get_aim_dir(&dir);
+
+                               /* Restore target_pet option */
+                               target_pet = old_target_pet;
+
+                               if (!result) return NULL;
+
+                               speed_monster(dir, plev);
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("テレポート・レベル", "Teleport Level");
+               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
+                               teleport_level(0);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("次元の扉", "Dimension Door");
+               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
+
+               {
+                       POSITION range = plev / 2 + 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
+                               if (!dimension_door()) return NULL;
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("帰還の呪文", "Word of Recall");
+               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
+                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
+
+               {
+                       int base = 15;
+                       DICE_SID sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               if (!recall_player(p_ptr, randint0(21) + 15)) return NULL;
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("怪物追放", "Banish");
+               if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");
+
+               {
+                       int power = plev * 4;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               banish_monsters(power);
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("位置交換のカード", "Swap Position");
+               if (desc) return _("1体のモンスターと位置を交換する。", "Swap positions of you and a monster.");
+
+               {
+                       if (cast)
+                       {
+                               bool result;
+
+                               /* HACK -- No range limit */
+                               project_length = -1;
+
+                               result = get_aim_dir(&dir);
+
+                               /* Restore range to default */
+                               project_length = 0;
+
+                               if (!result) return NULL;
+
+                               teleport_swap(dir);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("アンデッドのカード", "Trump Undead");
+               if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはアンデッドのカードに集中する...", "You concentrate on the trump of an undead creature..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("爬虫類のカード", "Trump Reptiles");
+               if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたは爬虫類のカードに集中する...", "You concentrate on the trump of a reptile..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("モンスターのカード", "Trump Monsters");
+               if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");
+
+               {
+                       if (cast || fail)
+                       {
+                               int type;
+                               msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));
+                               if (p_ptr->pclass == CLASS_BEASTMASTER)
+                                       type = SUMMON_LIVING;
+                               else
+                                       type = 0;
+
+                               if (trump_summoning((1 + (plev - 15) / 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
+                                       }
+                               }
+
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("ハウンドのカード", "Trump Hounds");
+               if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはハウンドのカードに集中する...", "You concentrate on the trump of a hound..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("トランプの刃", "Trump Branding");
+               if (desc) return _("武器にトランプの属性をつける。", "Makes current weapon a Trump weapon.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(5);
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("人間トランプ", "Living Trump");
+               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
+                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
+
+               {
+                       if (cast)
+                       {
+                               int mutation;
+
+                               if (one_in_(7))
+                                       /* Teleport control */
+                                       mutation = 12;
+                               else
+                                       /* Random teleportation (uncontrolled) */
+                                       mutation = 77;
+
+                               /* Gain the mutation */
+                               if (gain_random_mutation(mutation))
+                               {
+                                       msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
+                               }
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");
+               if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはサイバーデーモンのカードに集中する...", "You concentrate on the trump of a Cyberdemon..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("予見のカード", "Trump Divination");
+               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
+                       "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
+
+               {
+                       POSITION rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_all(rad);
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("知識のカード", "Trump Lore");
+               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!identify_fully(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("回復モンスター", "Heal Monster");
+               if (desc) return _("モンスター1体の体力を回復させる。", "Heal a monster.");
+
+               {
+                       int heal = plev * 10 + 200;
+
+                       if (info) return info_heal(0, 0, heal);
+
+                       if (cast)
+                       {
+                               bool result;
+
+                               /* Temporary enable target_pet option */
+                               bool old_target_pet = target_pet;
+                               target_pet = TRUE;
+
+                               result = get_aim_dir(&dir);
+
+                               /* Restore target_pet option */
+                               target_pet = old_target_pet;
+
+                               if (!result) return NULL;
+
+                               heal_monster(dir, heal);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("ドラゴンのカード", "Trump Dragon");
+               if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはドラゴンのカードに集中する...", "You concentrate on the trump of a dragon..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("隕石のカード", "Trump Meteor");
+               if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");
+
+               {
+                       HIT_POINT dam = plev * 2;
+                       POSITION rad = 2;
+
+                       if (info) return info_multi_damage(dam);
+
+                       if (cast)
+                       {
+                               cast_meteor(dam, rad);
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("デーモンのカード", "Trump Demon");
+               if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはデーモンのカードに集中する...", "You concentrate on the trump of a demon..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("地獄のカード", "Trump Greater Undead");
+               if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたは強力なアンデッドのカードに集中する...", "You concentrate on the trump of a greater undead being..."));
+                               /* May allow unique depend on level and dice roll */
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");
+               if (desc) return _("1体の古代ドラゴンを召喚する。", "Summons an ancient dragon.");
+
+               {
+                       if (cast)
+                       {
+                               int type;
+
+                               if (p_ptr->pclass == CLASS_BEASTMASTER)
+                                       type = SUMMON_HI_DRAGON_LIVING;
+                               else
+                                       type = SUMMON_HI_DRAGON;
+
+                               msg_print(_("あなたは古代ドラゴンのカードに集中する...", "You concentrate on the trump of an ancient dragon..."));
+                               /* May allow unique depend on level and dice roll */
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+       }
+
+       return "";
+}