OSDN Git Service

[Refactor] #37353 トランプ領域処理を cmd-spell.c から realm-trump.c/h へ分離。
authorDeskull <deskull@users.sourceforge.jp>
Thu, 13 Sep 2018 11:27:07 +0000 (20:27 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Thu, 13 Sep 2018 11:27:07 +0000 (20:27 +0900)
Separate trump realm process from cmd-spell.c to realm-trump.c/h.

Hengband_vcs2015/Hengband/Hengband.vcxproj
Hengband_vcs2015/Hengband/Hengband.vcxproj.filters
src/cmd-spell.c
src/realm-trump.c [new file with mode: 0644]
src/realm-trump.h [new file with mode: 0644]

index eca6ce4..8509bff 100644 (file)
     <ClCompile Include="..\..\src\realm-chaos.c" />\r
     <ClCompile Include="..\..\src\realm-hex.c" />\r
     <ClCompile Include="..\..\src\realm-life.c" />\r
+    <ClCompile Include="..\..\src\realm-trump.c" />\r
     <ClCompile Include="..\..\src\report.c" />\r
     <ClCompile Include="..\..\src\rooms-normal.c" />\r
     <ClCompile Include="..\..\src\rooms-pitnest.c" />\r
     <ClInclude Include="..\..\src\realm-life.h" />\r
     <ClInclude Include="..\..\src\realm-nature.h" />\r
     <ClInclude Include="..\..\src\realm-sorcery.h" />\r
+    <ClInclude Include="..\..\src\realm-trump.h" />\r
     <ClInclude Include="..\..\src\rooms-normal.h" />\r
     <ClInclude Include="..\..\src\rooms-pitnest.h" />\r
     <ClInclude Include="..\..\src\rooms-vault.h" />\r
index 653ac12..a9585e7 100644 (file)
     <ClCompile Include="..\..\src\realm-death.c">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\realm-trump.c">\r
+      <Filter>Source</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\angband.h">\r
     <ClInclude Include="..\..\src\realm-death.h">\r
       <Filter>Header</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\realm-trump.h">\r
+      <Filter>Header</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\..\src\angband.rc" />\r
index b2c144e..100be8d 100644 (file)
@@ -16,6 +16,7 @@
 #include "realm-life.h"\r
 #include "realm-nature.h"\r
 #include "realm-sorcery.h"\r
+#include "realm-trump.h"\r
 \r
 /*!\r
  * @brief\r
@@ -237,651 +238,6 @@ void stop_singing(void)
 \r
 \r
 \r
-/*!\r
- * @brief トランプ領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static 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[] = _("ランダム", "random");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("ショート・テレポート", "Phase Door");\r
-               if (desc) return _("近距離のテレポートをする。", "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 _("蜘蛛のカード", "Trump Spiders");\r
-               if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたは蜘蛛のカードに集中する...", "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(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("シャッフル", "Shuffle");\r
-               if (desc) return _("カードの占いをする。", "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 _("フロア・リセット", "Reset Recall");\r
-               if (desc) return _("最深階を変更する。", "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 _("テレポート", "Teleport");\r
-               if (desc) return _("遠距離のテレポートをする。", "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 _("感知のカード", "Trump Spying");\r
-               if (desc) return _("一定時間、テレパシー能力を得る。", "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 _("テレポート・モンスター", "Teleport Away");\r
-               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "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 _("動物のカード", "Trump Animals");\r
-               if (desc) return _("1体の動物を召喚する。", "Summons an animal.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);\r
-                               msg_print(_("あなたは動物のカードに集中する...", "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(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("移動のカード", "Trump Reach");\r
-               if (desc) return _("アイテムを自分の足元へ移動させる。", "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 _("カミカゼのカード", "Trump Kamikaze");\r
-               if (desc) return _("複数の爆発するモンスターを召喚する。", "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(_("あなたはカミカゼのカードに集中する...", "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(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("幻霊召喚", "Phantasmal Servant");\r
-               if (desc) return _("1体の幽霊を召喚する。", "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(_("御用でございますか、御主人様?", "'Your wish, master?'"));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("スピード・モンスター", "Haste Monster");\r
-               if (desc) return _("モンスター1体を加速させる。", "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 _("テレポート・レベル", "Teleport Level");\r
-               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("次元の扉", "Dimension Door");\r
-               if (desc) return _("短距離内の指定した場所にテレポートする。", "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(_("次元の扉が開いた。目的地を選んで下さい。", "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 _("帰還の呪文", "Word of Recall");\r
-               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",\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 _("怪物追放", "Banish");\r
-               if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "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 _("位置交換のカード", "Swap Position");\r
-               if (desc) return _("1体のモンスターと位置を交換する。", "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 _("アンデッドのカード", "Trump Undead");\r
-               if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはアンデッドのカードに集中する...", "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(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("爬虫類のカード", "Trump Reptiles");\r
-               if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたは爬虫類のカードに集中する...", "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(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("モンスターのカード", "Trump Monsters");\r
-               if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type;\r
-                               msg_print(_("あなたはモンスターのカードに集中する...", "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(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));\r
-                                       }\r
-                               }\r
-\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("ハウンドのカード", "Trump Hounds");\r
-               if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはハウンドのカードに集中する...", "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(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("トランプの刃", "Trump Branding");\r
-               if (desc) return _("武器にトランプの属性をつける。", "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 _("人間トランプ", "Living Trump");\r
-               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。", \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(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");\r
-               if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはサイバーデーモンのカードに集中する...", "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(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("予見のカード", "Trump Divination");\r
-               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",\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 _("知識のカード", "Trump Lore");\r
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*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 _("回復モンスター", "Heal Monster");\r
-               if (desc) return _("モンスター1体の体力を回復させる。", "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 _("ドラゴンのカード", "Trump Dragon");\r
-               if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはドラゴンのカードに集中する...", "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(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("隕石のカード", "Trump Meteor");\r
-               if (desc) return _("自分の周辺に隕石を落とす。", "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 _("デーモンのカード", "Trump Demon");\r
-               if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはデーモンのカードに集中する...", "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(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("地獄のカード", "Trump Greater Undead");\r
-               if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたは強力なアンデッドのカードに集中する...", "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(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");\r
-               if (desc) return _("1体の古代ドラゴンを召喚する。", "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(_("あなたは古代ドラゴンのカードに集中する...", "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(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
-\r
 \r
 /*!\r
  * @brief 匠領域魔法の各処理を行う\r
diff --git a/src/realm-trump.c b/src/realm-trump.c
new file mode 100644 (file)
index 0000000..8046b4b
--- /dev/null
@@ -0,0 +1,648 @@
+#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
diff --git a/src/realm-trump.h b/src/realm-trump.h
new file mode 100644 (file)
index 0000000..7d9e31a
--- /dev/null
@@ -0,0 +1 @@
+extern cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode);\r