-#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 _("\92wå\81\82Ì\83J\81[\83h", "Trump Spiders");\r
- if (desc) return _("\92wå\81\82ð\8f¢\8a«\82·\82é\81B", "Summons spiders.");\r
-\r
- {\r
- if (cast || fail)\r
- {\r
- msg_print(_("\82 \82È\82½\82Í\92wå\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½\92wå\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 "";
+}