OSDN Git Service

[Refactor] #37353 プレイヤーの読むコマンドを cmd-read.c/h に分離。 / Separate player's read command...
authorDeskull <deskull@users.sourceforge.jp>
Fri, 7 Sep 2018 14:31:38 +0000 (23:31 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Fri, 7 Sep 2018 14:31:38 +0000 (23:31 +0900)
Hengband_vcs2015/Hengband/Hengband.vcxproj
Hengband_vcs2015/Hengband/Hengband.vcxproj.filters
src/cmd-read.c [new file with mode: 0644]
src/cmd-read.h [new file with mode: 0644]
src/cmd6.c
src/dungeon.c
src/externs.h

index fe6a3ba..c29ef14 100644 (file)
     <ClCompile Include="..\..\src\cmd-activate.c" />\r
     <ClCompile Include="..\..\src\cmd-eat.c" />\r
     <ClCompile Include="..\..\src\cmd-quaff.c" />\r
+    <ClCompile Include="..\..\src\cmd-read.c" />\r
     <ClCompile Include="..\..\src\cmd1.c" />\r
     <ClCompile Include="..\..\src\cmd2.c" />\r
     <ClCompile Include="..\..\src\cmd3.c" />\r
     <ClInclude Include="..\..\src\cmd-activate.h" />\r
     <ClInclude Include="..\..\src\cmd-eat.h" />\r
     <ClInclude Include="..\..\src\cmd-quaff.h" />\r
+    <ClInclude Include="..\..\src\cmd-read.h" />\r
     <ClInclude Include="..\..\src\defines.h" />\r
     <ClInclude Include="..\..\src\externs.h" />\r
     <ClInclude Include="..\..\src\generate.h" />\r
index ec2885c..5143300 100644 (file)
     <ClCompile Include="..\..\src\cmd-eat.c">\r
       <Filter>Source</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\cmd-read.c">\r
+      <Filter>Source</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\angband.h">\r
     <ClInclude Include="..\..\src\cmd-activate.h">\r
       <Filter>Header</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\cmd-read.h">\r
+      <Filter>Header</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\..\src\angband.rc" />\r
diff --git a/src/cmd-read.c b/src/cmd-read.c
new file mode 100644 (file)
index 0000000..45d5c2d
--- /dev/null
@@ -0,0 +1,682 @@
+/*!\r
+ * @file cmd-read.c\r
+ * @brief プレイヤーの読むコマンド実装\r
+ * @date 2018/09/07\r
+ * @details\r
+ * cmd6.cより分離。\r
+ */\r
+\r
+\r
+#include "angband.h"\r
+\r
+/*!\r
+ * @brief 巻物を読むコマンドのサブルーチン\r
+ * Read a scroll (from the pack or floor).\r
+ * @param item 読むオブジェクトの所持品ID\r
+ * @param known 判明済ならばTRUE\r
+ * @return なし\r
+ * @details\r
+ * <pre>\r
+ * Certain scrolls can be "aborted" without losing the scroll.  These\r
+ * include scrolls with no effects but recharge or identify, which are\r
+ * cancelled before use.  XXX Reading them still takes a turn, though.\r
+ * </pre>\r
+ */\r
+void do_cmd_read_scroll_aux(int item, bool known)\r
+{\r
+       int         k, used_up, ident, lev;\r
+       object_type *o_ptr;\r
+\r
+\r
+       /* Get the item (in the pack) */\r
+       if (item >= 0)\r
+       {\r
+               o_ptr = &inventory[item];\r
+       }\r
+\r
+       /* Get the item (on the floor) */\r
+       else\r
+       {\r
+               o_ptr = &o_list[0 - item];\r
+       }\r
+\r
+\r
+       /* Take a turn */\r
+       p_ptr->energy_use = 100;\r
+\r
+       if (world_player)\r
+       {\r
+               if (flush_failure) flush();\r
+               msg_print(_("止まった時の中ではうまく働かないようだ。", "Nothing happen."));\r
+               sound(SOUND_FAIL);\r
+               return;\r
+       }\r
+\r
+       if (p_ptr->pclass == CLASS_BERSERKER)\r
+       {\r
+               msg_print(_("巻物なんて読めない。", "You cannot read."));\r
+               return;\r
+       }\r
+\r
+       if (music_singing_any()) stop_singing();\r
+\r
+       /* Hex */\r
+       if (hex_spelling_any() && ((p_ptr->lev < 35) || hex_spell_fully())) stop_hex_spell_all();\r
+\r
+       /* Not identified yet */\r
+       ident = FALSE;\r
+\r
+       /* Object level */\r
+       lev = k_info[o_ptr->k_idx].level;\r
+\r
+       /* Assume the scroll will get used up */\r
+       used_up = TRUE;\r
+\r
+       if (o_ptr->tval == TV_SCROLL)\r
+       {\r
+       /* Analyze the scroll */\r
+       switch (o_ptr->sval)\r
+       {\r
+               case SV_SCROLL_DARKNESS:\r
+               {\r
+                       if (!(p_ptr->resist_blind) && !(p_ptr->resist_dark))\r
+                       {\r
+                               (void)set_blind(p_ptr->blind + 3 + randint1(5));\r
+                       }\r
+                       if (unlite_area(10, 3)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_AGGRAVATE_MONSTER:\r
+               {\r
+                       msg_print(_("カン高くうなる様な音が辺りを覆った。", "There is a high pitched humming noise."));\r
+                       aggravate_monsters(0);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_CURSE_ARMOR:\r
+               {\r
+                       if (curse_armor()) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_CURSE_WEAPON:\r
+               {\r
+                       k = 0;\r
+                       if (buki_motteruka(INVEN_RARM))\r
+                       {\r
+                               k = INVEN_RARM;\r
+                               if (buki_motteruka(INVEN_LARM) && one_in_(2)) k = INVEN_LARM;\r
+                       }\r
+                       else if (buki_motteruka(INVEN_LARM)) k = INVEN_LARM;\r
+                       if (k && curse_weapon(FALSE, k)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_SUMMON_MONSTER:\r
+               {\r
+                       for (k = 0; k < randint1(3); k++)\r
+                       {\r
+                               if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))\r
+                               {\r
+                                       ident = TRUE;\r
+                               }\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_SUMMON_UNDEAD:\r
+               {\r
+                       for (k = 0; k < randint1(3); k++)\r
+                       {\r
+                               if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))\r
+                               {\r
+                                       ident = TRUE;\r
+                               }\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_SUMMON_PET:\r
+               {\r
+                       if (summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_FORCE_PET)))\r
+                       {\r
+                               ident = TRUE;\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_SUMMON_KIN:\r
+               {\r
+                       if (summon_kin_player(p_ptr->lev, p_ptr->y, p_ptr->x, (PM_FORCE_PET | PM_ALLOW_GROUP)))\r
+                       {\r
+                               ident = TRUE;\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_TRAP_CREATION:\r
+               {\r
+                       if (trap_creation(p_ptr->y, p_ptr->x)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_PHASE_DOOR:\r
+               {\r
+                       teleport_player(10, 0L);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_TELEPORT:\r
+               {\r
+                       teleport_player(100, 0L);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_TELEPORT_LEVEL:\r
+               {\r
+                       (void)teleport_level(0);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_WORD_OF_RECALL:\r
+               {\r
+                       if (!word_of_recall()) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_IDENTIFY:\r
+               {\r
+                       if (!ident_spell(FALSE)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_IDENTIFY:\r
+               {\r
+                       if (!identify_fully(FALSE)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_REMOVE_CURSE:\r
+               {\r
+                       if (remove_curse())\r
+                       {\r
+                               msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
+                               ident = TRUE;\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_REMOVE_CURSE:\r
+               {\r
+                       if (remove_all_curse())\r
+                       {\r
+                               msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
+                       }\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_ENCHANT_ARMOR:\r
+               {\r
+                       ident = TRUE;\r
+                       if (!enchant_spell(0, 0, 1)) used_up = FALSE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_ENCHANT_WEAPON_TO_HIT:\r
+               {\r
+                       if (!enchant_spell(1, 0, 0)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_ENCHANT_WEAPON_TO_DAM:\r
+               {\r
+                       if (!enchant_spell(0, 1, 0)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_ENCHANT_ARMOR:\r
+               {\r
+                       if (!enchant_spell(0, 0, randint1(3) + 2)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_ENCHANT_WEAPON:\r
+               {\r
+                       if (!enchant_spell(randint1(3), randint1(3), 0)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_RECHARGING:\r
+               {\r
+                       if (!recharge(130)) used_up = FALSE;\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_MUNDANITY:\r
+               {\r
+                       ident = TRUE;\r
+                       if (!mundane_spell(FALSE)) used_up = FALSE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_LIGHT:\r
+               {\r
+                       if (lite_area(damroll(2, 8), 2)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_MAPPING:\r
+               {\r
+                       map_area(DETECT_RAD_MAP);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_DETECT_GOLD:\r
+               {\r
+                       if (detect_treasure(DETECT_RAD_DEFAULT)) ident = TRUE;\r
+                       if (detect_objects_gold(DETECT_RAD_DEFAULT)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_DETECT_ITEM:\r
+               {\r
+                       if (detect_objects_normal(DETECT_RAD_DEFAULT)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_DETECT_TRAP:\r
+               {\r
+                       if (detect_traps(DETECT_RAD_DEFAULT, known)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_DETECT_DOOR:\r
+               {\r
+                       if (detect_doors(DETECT_RAD_DEFAULT)) ident = TRUE;\r
+                       if (detect_stairs(DETECT_RAD_DEFAULT)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_DETECT_INVIS:\r
+               {\r
+                       if (detect_monsters_invis(DETECT_RAD_DEFAULT)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_SATISFY_HUNGER:\r
+               {\r
+                       if (set_food(PY_FOOD_MAX - 1)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_BLESSING:\r
+               {\r
+                       if (set_blessed(p_ptr->blessed + randint1(12) + 6, FALSE)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_HOLY_CHANT:\r
+               {\r
+                       if (set_blessed(p_ptr->blessed + randint1(24) + 12, FALSE)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_HOLY_PRAYER:\r
+               {\r
+                       if (set_blessed(p_ptr->blessed + randint1(48) + 24, FALSE)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_MONSTER_CONFUSION:\r
+               {\r
+                       if (!(p_ptr->special_attack & ATTACK_CONFUSE))\r
+                       {\r
+                               msg_print(_("手が輝き始めた。", "Your hands begin to glow."));\r
+                               p_ptr->special_attack |= ATTACK_CONFUSE;\r
+                               p_ptr->redraw |= (PR_STATUS);\r
+                               ident = TRUE;\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_PROTECTION_FROM_EVIL:\r
+               {\r
+                       k = 3 * p_ptr->lev;\r
+                       if (set_protevil(p_ptr->protevil + randint1(25) + k, FALSE)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_RUNE_OF_PROTECTION:\r
+               {\r
+                       warding_glyph();\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_TRAP_DOOR_DESTRUCTION:\r
+               {\r
+                       if (destroy_doors_touch()) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_DESTRUCTION:\r
+               {\r
+                       if (destroy_area(p_ptr->y, p_ptr->x, 13 + randint0(5), FALSE))\r
+                               ident = TRUE;\r
+                       else\r
+                               msg_print(_("ダンジョンが揺れた...", "The dungeon trembles..."));\r
+\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_DISPEL_UNDEAD:\r
+               {\r
+                       if (dispel_undead(80)) ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_SPELL:\r
+               {\r
+                       if ((p_ptr->pclass == CLASS_WARRIOR) ||\r
+                               (p_ptr->pclass == CLASS_IMITATOR) ||\r
+                               (p_ptr->pclass == CLASS_MINDCRAFTER) ||\r
+                               (p_ptr->pclass == CLASS_SORCERER) ||\r
+                               (p_ptr->pclass == CLASS_ARCHER) ||\r
+                               (p_ptr->pclass == CLASS_MAGIC_EATER) ||\r
+                               (p_ptr->pclass == CLASS_RED_MAGE) ||\r
+                               (p_ptr->pclass == CLASS_SAMURAI) ||\r
+                               (p_ptr->pclass == CLASS_BLUE_MAGE) ||\r
+                               (p_ptr->pclass == CLASS_CAVALRY) ||\r
+                               (p_ptr->pclass == CLASS_BERSERKER) ||\r
+                               (p_ptr->pclass == CLASS_SMITH) ||\r
+                               (p_ptr->pclass == CLASS_MIRROR_MASTER) ||\r
+                               (p_ptr->pclass == CLASS_NINJA) ||\r
+                               (p_ptr->pclass == CLASS_SNIPER)) break;\r
+                       p_ptr->add_spells++;\r
+                       p_ptr->update |= (PU_SPELLS);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_GENOCIDE:\r
+               {\r
+                       (void)symbol_genocide(300, TRUE);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_MASS_GENOCIDE:\r
+               {\r
+                       (void)mass_genocide(300, TRUE);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_ACQUIREMENT:\r
+               {\r
+                       acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_ACQUIREMENT:\r
+               {\r
+                       acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               /* New Hengband scrolls */\r
+               case SV_SCROLL_FIRE:\r
+               {\r
+                       fire_ball(GF_FIRE, 0, 666, 4);\r
+                       /* Note: "Double" damage since it is centered on the player ... */\r
+                       if (!(IS_OPPOSE_FIRE() || p_ptr->resist_fire || p_ptr->immune_fire))\r
+                               take_hit(DAMAGE_NOESCAPE, 50+randint1(50), _("炎の巻物", "a Scroll of Fire"), -1);\r
+\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+\r
+               case SV_SCROLL_ICE:\r
+               {\r
+                       fire_ball(GF_ICE, 0, 777, 4);\r
+                       if (!(IS_OPPOSE_COLD() || p_ptr->resist_cold || p_ptr->immune_cold))\r
+                               take_hit(DAMAGE_NOESCAPE, 100+randint1(100), _("氷の巻物", "a Scroll of Ice"), -1);\r
+\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_CHAOS:\r
+               {\r
+                       fire_ball(GF_CHAOS, 0, 1000, 4);\r
+                       if (!p_ptr->resist_chaos)\r
+                               take_hit(DAMAGE_NOESCAPE, 111+randint1(111), _("ログルスの巻物", "a Scroll of Logrus"), -1);\r
+\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_RUMOR:\r
+               {\r
+                       msg_print(_("巻物にはメッセージが書かれている:", "There is message on the scroll. It says:"));\r
+                       msg_print(NULL);\r
+                       display_rumor(TRUE);\r
+                       msg_print(NULL);\r
+                       msg_print(_("巻物は煙を立てて消え去った!", "The scroll disappears in a puff of smoke!"));\r
+\r
+                       ident = TRUE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_ARTIFACT:\r
+               {\r
+                       ident = TRUE;\r
+                       if (!artifact_scroll()) used_up = FALSE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_RESET_RECALL:\r
+               {\r
+                       ident = TRUE;\r
+                       if (!reset_recall()) used_up = FALSE;\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_AMUSEMENT:\r
+               {\r
+                       ident = TRUE;\r
+                       amusement(p_ptr->y, p_ptr->x, 1, FALSE);\r
+                       break;\r
+               }\r
+\r
+               case SV_SCROLL_STAR_AMUSEMENT:\r
+               {\r
+                       ident = TRUE;\r
+                       amusement(p_ptr->y, p_ptr->x,  randint1(2) + 1, FALSE);\r
+                       break;\r
+               }\r
+       }\r
+       }\r
+       else if (o_ptr->name1 == ART_GHB)\r
+       {\r
+               msg_print(_("私は苦労して『グレーター・ヘル=ビースト』を倒した。", "I had a very hard time to kill the Greater hell-beast, "));\r
+               msg_print(_("しかし手に入ったのはこのきたないTシャツだけだった。", "but all I got was this lousy t-shirt!"));\r
+               used_up = FALSE;\r
+       }\r
+       else if (o_ptr->name1 == ART_POWER)\r
+       {\r
+               msg_print(_("「一つの指輪は全てを統べ、", "'One Ring to rule them all, "));\r
+               msg_print(NULL);\r
+               msg_print(_("一つの指輪は全てを見つけ、", "One Ring to find them, "));\r
+               msg_print(NULL);\r
+               msg_print(_("一つの指輪は全てを捕らえて", "One Ring to bring them all "));\r
+               msg_print(NULL);\r
+               msg_print(_("暗闇の中に繋ぎとめる。」", "and in the darkness bind them.'"));\r
+               used_up = FALSE;\r
+       }\r
+       else if (o_ptr->tval==TV_PARCHMENT)\r
+       {\r
+               cptr q;\r
+               char o_name[MAX_NLEN];\r
+               char buf[1024];\r
+\r
+               /* Save screen */\r
+               screen_save();\r
+\r
+               q=format("book-%d_jp.txt",o_ptr->sval);\r
+\r
+               /* Display object description */\r
+               object_desc(o_name, o_ptr, OD_NAME_ONLY);\r
+\r
+               /* Build the filename */\r
+               path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, q);\r
+\r
+               /* Peruse the help file */\r
+               (void)show_file(TRUE, buf, o_name, 0, 0);\r
+\r
+               /* Load screen */\r
+               screen_load();\r
+\r
+               used_up=FALSE;\r
+       }\r
+\r
+\r
+       /* Combine / Reorder the pack (later) */\r
+       p_ptr->notice |= (PN_COMBINE | PN_REORDER);\r
+\r
+       if (!(object_is_aware(o_ptr)))\r
+       {\r
+               chg_virtue(V_PATIENCE, -1);\r
+               chg_virtue(V_CHANCE, 1);\r
+               chg_virtue(V_KNOWLEDGE, -1);\r
+       }\r
+\r
+       /* The item was tried */\r
+       object_tried(o_ptr);\r
+\r
+       /* An identification was made */\r
+       if (ident && !object_is_aware(o_ptr))\r
+       {\r
+               object_aware(o_ptr);\r
+               gain_exp((lev + (p_ptr->lev >> 1)) / p_ptr->lev);\r
+       }\r
+\r
+       /* Window stuff */\r
+       p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);\r
+\r
+\r
+       /* Hack -- allow certain scrolls to be "preserved" */\r
+       if (!used_up)\r
+       {\r
+               return;\r
+       }\r
+\r
+       sound(SOUND_SCROLL);\r
+\r
+       /* Destroy a scroll in the pack */\r
+       if (item >= 0)\r
+       {\r
+               inven_item_increase(item, -1);\r
+               inven_item_describe(item);\r
+               inven_item_optimize(item);\r
+       }\r
+\r
+       /* Destroy a scroll on the floor */\r
+       else\r
+       {\r
+               floor_item_increase(0 - item, -1);\r
+               floor_item_describe(0 - item);\r
+               floor_item_optimize(0 - item);\r
+       }\r
+}\r
+\r
+/*!\r
+ * @brief オブジェクトをプレイヤーが読むことができるかを判定する /\r
+ * Hook to determine if an object is readable\r
+ * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ\r
+ * @return 読むことが可能ならばTRUEを返す\r
+ */\r
+static bool item_tester_hook_readable(object_type *o_ptr)\r
+{\r
+       if ((o_ptr->tval==TV_SCROLL) || (o_ptr->tval==TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);\r
+\r
+       /* Assume not */\r
+       return (FALSE);\r
+}\r
+\r
+/*!\r
+ * @brief 読むコマンドのメインルーチン /\r
+ * Eat some food (from the pack or floor)\r
+ * @return なし\r
+ */\r
+void do_cmd_read_scroll(void)\r
+{\r
+       object_type *o_ptr;\r
+       OBJECT_IDX item;\r
+       cptr q, s;\r
+\r
+       if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))\r
+       {\r
+               set_action(ACTION_NONE);\r
+       }\r
+\r
+       /* Check some conditions */\r
+       if (p_ptr->blind)\r
+       {\r
+               msg_print(_("目が見えない。", "You can't see anything."));\r
+               return;\r
+       }\r
+       if (no_lite())\r
+       {\r
+               msg_print(_("明かりがないので、暗くて読めない。", "You have no light to read by."));\r
+               return;\r
+       }\r
+       if (p_ptr->confused)\r
+       {\r
+               msg_print(_("混乱していて読めない。", "You are too confused!"));\r
+               return;\r
+       }\r
+\r
+\r
+       /* Restrict choices to scrolls */\r
+       item_tester_hook = item_tester_hook_readable;\r
+\r
+       /* Get an item */\r
+       q = _("どの巻物を読みますか? ", "Read which scroll? ");\r
+       s = _("読める巻物がない。", "You have no scrolls to read.");\r
+\r
+       if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;\r
+\r
+       /* Get the item (in the pack) */\r
+       if (item >= 0)\r
+       {\r
+               o_ptr = &inventory[item];\r
+       }\r
+\r
+       /* Get the item (on the floor) */\r
+       else\r
+       {\r
+               o_ptr = &o_list[0 - item];\r
+       }\r
+\r
+       /* Read the scroll */\r
+       do_cmd_read_scroll_aux(item, object_is_aware(o_ptr));\r
+}\r
diff --git a/src/cmd-read.h b/src/cmd-read.h
new file mode 100644 (file)
index 0000000..5285493
--- /dev/null
@@ -0,0 +1,4 @@
+\r
+\r
+extern void do_cmd_read_scroll_aux(int item, bool known);\r
+extern void do_cmd_read_scroll(void);\r
index 44bfd8d..e0ec0fe 100644 (file)
 #include "cmd-activate.h"
 #include "cmd-eat.h"
 #include "cmd-quaff.h"
+#include "cmd-read.h"
 
 
 
 
 /*!
- * @brief 巻物を読むコマンドのサブルーチン
- * Read a scroll (from the pack or floor).
- * @param item 読むオブジェクトの所持品ID
- * @param known 判明済ならばTRUE
- * @return なし
- * @details
- * <pre>
- * Certain scrolls can be "aborted" without losing the scroll.  These
- * include scrolls with no effects but recharge or identify, which are
- * cancelled before use.  XXX Reading them still takes a turn, though.
- * </pre>
- */
-static void do_cmd_read_scroll_aux(int item, bool known)
-{
-       int         k, used_up, ident, lev;
-       object_type *o_ptr;
-
-
-       /* Get the item (in the pack) */
-       if (item >= 0)
-       {
-               o_ptr = &inventory[item];
-       }
-
-       /* Get the item (on the floor) */
-       else
-       {
-               o_ptr = &o_list[0 - item];
-       }
-
-
-       /* Take a turn */
-       p_ptr->energy_use = 100;
-
-       if (world_player)
-       {
-               if (flush_failure) flush();
-               msg_print(_("止まった時の中ではうまく働かないようだ。", "Nothing happen."));
-               sound(SOUND_FAIL);
-               return;
-       }
-
-       if (p_ptr->pclass == CLASS_BERSERKER)
-       {
-               msg_print(_("巻物なんて読めない。", "You cannot read."));
-               return;
-       }
-
-       if (music_singing_any()) stop_singing();
-
-       /* Hex */
-       if (hex_spelling_any() && ((p_ptr->lev < 35) || hex_spell_fully())) stop_hex_spell_all();
-
-       /* Not identified yet */
-       ident = FALSE;
-
-       /* Object level */
-       lev = k_info[o_ptr->k_idx].level;
-
-       /* Assume the scroll will get used up */
-       used_up = TRUE;
-
-       if (o_ptr->tval == TV_SCROLL)
-       {
-       /* Analyze the scroll */
-       switch (o_ptr->sval)
-       {
-               case SV_SCROLL_DARKNESS:
-               {
-                       if (!(p_ptr->resist_blind) && !(p_ptr->resist_dark))
-                       {
-                               (void)set_blind(p_ptr->blind + 3 + randint1(5));
-                       }
-                       if (unlite_area(10, 3)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_AGGRAVATE_MONSTER:
-               {
-                       msg_print(_("カン高くうなる様な音が辺りを覆った。", "There is a high pitched humming noise."));
-                       aggravate_monsters(0);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_CURSE_ARMOR:
-               {
-                       if (curse_armor()) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_CURSE_WEAPON:
-               {
-                       k = 0;
-                       if (buki_motteruka(INVEN_RARM))
-                       {
-                               k = INVEN_RARM;
-                               if (buki_motteruka(INVEN_LARM) && one_in_(2)) k = INVEN_LARM;
-                       }
-                       else if (buki_motteruka(INVEN_LARM)) k = INVEN_LARM;
-                       if (k && curse_weapon(FALSE, k)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_SUMMON_MONSTER:
-               {
-                       for (k = 0; k < randint1(3); k++)
-                       {
-                               if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
-                               {
-                                       ident = TRUE;
-                               }
-                       }
-                       break;
-               }
-
-               case SV_SCROLL_SUMMON_UNDEAD:
-               {
-                       for (k = 0; k < randint1(3); k++)
-                       {
-                               if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
-                               {
-                                       ident = TRUE;
-                               }
-                       }
-                       break;
-               }
-
-               case SV_SCROLL_SUMMON_PET:
-               {
-                       if (summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_FORCE_PET)))
-                       {
-                               ident = TRUE;
-                       }
-                       break;
-               }
-
-               case SV_SCROLL_SUMMON_KIN:
-               {
-                       if (summon_kin_player(p_ptr->lev, p_ptr->y, p_ptr->x, (PM_FORCE_PET | PM_ALLOW_GROUP)))
-                       {
-                               ident = TRUE;
-                       }
-                       break;
-               }
-
-               case SV_SCROLL_TRAP_CREATION:
-               {
-                       if (trap_creation(p_ptr->y, p_ptr->x)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_PHASE_DOOR:
-               {
-                       teleport_player(10, 0L);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_TELEPORT:
-               {
-                       teleport_player(100, 0L);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_TELEPORT_LEVEL:
-               {
-                       (void)teleport_level(0);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_WORD_OF_RECALL:
-               {
-                       if (!word_of_recall()) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_IDENTIFY:
-               {
-                       if (!ident_spell(FALSE)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_STAR_IDENTIFY:
-               {
-                       if (!identify_fully(FALSE)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_REMOVE_CURSE:
-               {
-                       if (remove_curse())
-                       {
-                               msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
-                               ident = TRUE;
-                       }
-                       break;
-               }
-
-               case SV_SCROLL_STAR_REMOVE_CURSE:
-               {
-                       if (remove_all_curse())
-                       {
-                               msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
-                       }
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_ENCHANT_ARMOR:
-               {
-                       ident = TRUE;
-                       if (!enchant_spell(0, 0, 1)) used_up = FALSE;
-                       break;
-               }
-
-               case SV_SCROLL_ENCHANT_WEAPON_TO_HIT:
-               {
-                       if (!enchant_spell(1, 0, 0)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_ENCHANT_WEAPON_TO_DAM:
-               {
-                       if (!enchant_spell(0, 1, 0)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_STAR_ENCHANT_ARMOR:
-               {
-                       if (!enchant_spell(0, 0, randint1(3) + 2)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_STAR_ENCHANT_WEAPON:
-               {
-                       if (!enchant_spell(randint1(3), randint1(3), 0)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_RECHARGING:
-               {
-                       if (!recharge(130)) used_up = FALSE;
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_MUNDANITY:
-               {
-                       ident = TRUE;
-                       if (!mundane_spell(FALSE)) used_up = FALSE;
-                       break;
-               }
-
-               case SV_SCROLL_LIGHT:
-               {
-                       if (lite_area(damroll(2, 8), 2)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_MAPPING:
-               {
-                       map_area(DETECT_RAD_MAP);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_DETECT_GOLD:
-               {
-                       if (detect_treasure(DETECT_RAD_DEFAULT)) ident = TRUE;
-                       if (detect_objects_gold(DETECT_RAD_DEFAULT)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_DETECT_ITEM:
-               {
-                       if (detect_objects_normal(DETECT_RAD_DEFAULT)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_DETECT_TRAP:
-               {
-                       if (detect_traps(DETECT_RAD_DEFAULT, known)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_DETECT_DOOR:
-               {
-                       if (detect_doors(DETECT_RAD_DEFAULT)) ident = TRUE;
-                       if (detect_stairs(DETECT_RAD_DEFAULT)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_DETECT_INVIS:
-               {
-                       if (detect_monsters_invis(DETECT_RAD_DEFAULT)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_SATISFY_HUNGER:
-               {
-                       if (set_food(PY_FOOD_MAX - 1)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_BLESSING:
-               {
-                       if (set_blessed(p_ptr->blessed + randint1(12) + 6, FALSE)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_HOLY_CHANT:
-               {
-                       if (set_blessed(p_ptr->blessed + randint1(24) + 12, FALSE)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_HOLY_PRAYER:
-               {
-                       if (set_blessed(p_ptr->blessed + randint1(48) + 24, FALSE)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_MONSTER_CONFUSION:
-               {
-                       if (!(p_ptr->special_attack & ATTACK_CONFUSE))
-                       {
-                               msg_print(_("手が輝き始めた。", "Your hands begin to glow."));
-                               p_ptr->special_attack |= ATTACK_CONFUSE;
-                               p_ptr->redraw |= (PR_STATUS);
-                               ident = TRUE;
-                       }
-                       break;
-               }
-
-               case SV_SCROLL_PROTECTION_FROM_EVIL:
-               {
-                       k = 3 * p_ptr->lev;
-                       if (set_protevil(p_ptr->protevil + randint1(25) + k, FALSE)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_RUNE_OF_PROTECTION:
-               {
-                       warding_glyph();
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_TRAP_DOOR_DESTRUCTION:
-               {
-                       if (destroy_doors_touch()) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_STAR_DESTRUCTION:
-               {
-                       if (destroy_area(p_ptr->y, p_ptr->x, 13 + randint0(5), FALSE))
-                               ident = TRUE;
-                       else
-                               msg_print(_("ダンジョンが揺れた...", "The dungeon trembles..."));
-
-                       break;
-               }
-
-               case SV_SCROLL_DISPEL_UNDEAD:
-               {
-                       if (dispel_undead(80)) ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_SPELL:
-               {
-                       if ((p_ptr->pclass == CLASS_WARRIOR) ||
-                               (p_ptr->pclass == CLASS_IMITATOR) ||
-                               (p_ptr->pclass == CLASS_MINDCRAFTER) ||
-                               (p_ptr->pclass == CLASS_SORCERER) ||
-                               (p_ptr->pclass == CLASS_ARCHER) ||
-                               (p_ptr->pclass == CLASS_MAGIC_EATER) ||
-                               (p_ptr->pclass == CLASS_RED_MAGE) ||
-                               (p_ptr->pclass == CLASS_SAMURAI) ||
-                               (p_ptr->pclass == CLASS_BLUE_MAGE) ||
-                               (p_ptr->pclass == CLASS_CAVALRY) ||
-                               (p_ptr->pclass == CLASS_BERSERKER) ||
-                               (p_ptr->pclass == CLASS_SMITH) ||
-                               (p_ptr->pclass == CLASS_MIRROR_MASTER) ||
-                               (p_ptr->pclass == CLASS_NINJA) ||
-                               (p_ptr->pclass == CLASS_SNIPER)) break;
-                       p_ptr->add_spells++;
-                       p_ptr->update |= (PU_SPELLS);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_GENOCIDE:
-               {
-                       (void)symbol_genocide(300, TRUE);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_MASS_GENOCIDE:
-               {
-                       (void)mass_genocide(300, TRUE);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_ACQUIREMENT:
-               {
-                       acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_STAR_ACQUIREMENT:
-               {
-                       acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
-                       ident = TRUE;
-                       break;
-               }
-
-               /* New Hengband scrolls */
-               case SV_SCROLL_FIRE:
-               {
-                       fire_ball(GF_FIRE, 0, 666, 4);
-                       /* Note: "Double" damage since it is centered on the player ... */
-                       if (!(IS_OPPOSE_FIRE() || p_ptr->resist_fire || p_ptr->immune_fire))
-                               take_hit(DAMAGE_NOESCAPE, 50+randint1(50), _("炎の巻物", "a Scroll of Fire"), -1);
-
-                       ident = TRUE;
-                       break;
-               }
-
-
-               case SV_SCROLL_ICE:
-               {
-                       fire_ball(GF_ICE, 0, 777, 4);
-                       if (!(IS_OPPOSE_COLD() || p_ptr->resist_cold || p_ptr->immune_cold))
-                               take_hit(DAMAGE_NOESCAPE, 100+randint1(100), _("氷の巻物", "a Scroll of Ice"), -1);
-
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_CHAOS:
-               {
-                       fire_ball(GF_CHAOS, 0, 1000, 4);
-                       if (!p_ptr->resist_chaos)
-                               take_hit(DAMAGE_NOESCAPE, 111+randint1(111), _("ログルスの巻物", "a Scroll of Logrus"), -1);
-
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_RUMOR:
-               {
-                       msg_print(_("巻物にはメッセージが書かれている:", "There is message on the scroll. It says:"));
-                       msg_print(NULL);
-                       display_rumor(TRUE);
-                       msg_print(NULL);
-                       msg_print(_("巻物は煙を立てて消え去った!", "The scroll disappears in a puff of smoke!"));
-
-                       ident = TRUE;
-                       break;
-               }
-
-               case SV_SCROLL_ARTIFACT:
-               {
-                       ident = TRUE;
-                       if (!artifact_scroll()) used_up = FALSE;
-                       break;
-               }
-
-               case SV_SCROLL_RESET_RECALL:
-               {
-                       ident = TRUE;
-                       if (!reset_recall()) used_up = FALSE;
-                       break;
-               }
-
-               case SV_SCROLL_AMUSEMENT:
-               {
-                       ident = TRUE;
-                       amusement(p_ptr->y, p_ptr->x, 1, FALSE);
-                       break;
-               }
-
-               case SV_SCROLL_STAR_AMUSEMENT:
-               {
-                       ident = TRUE;
-                       amusement(p_ptr->y, p_ptr->x,  randint1(2) + 1, FALSE);
-                       break;
-               }
-       }
-       }
-       else if (o_ptr->name1 == ART_GHB)
-       {
-               msg_print(_("私は苦労して『グレーター・ヘル=ビースト』を倒した。", "I had a very hard time to kill the Greater hell-beast, "));
-               msg_print(_("しかし手に入ったのはこのきたないTシャツだけだった。", "but all I got was this lousy t-shirt!"));
-               used_up = FALSE;
-       }
-       else if (o_ptr->name1 == ART_POWER)
-       {
-               msg_print(_("「一つの指輪は全てを統べ、", "'One Ring to rule them all, "));
-               msg_print(NULL);
-               msg_print(_("一つの指輪は全てを見つけ、", "One Ring to find them, "));
-               msg_print(NULL);
-               msg_print(_("一つの指輪は全てを捕らえて", "One Ring to bring them all "));
-               msg_print(NULL);
-               msg_print(_("暗闇の中に繋ぎとめる。」", "and in the darkness bind them.'"));
-               used_up = FALSE;
-       }
-       else if (o_ptr->tval==TV_PARCHMENT)
-       {
-               cptr q;
-               char o_name[MAX_NLEN];
-               char buf[1024];
-
-               /* Save screen */
-               screen_save();
-
-               q=format("book-%d_jp.txt",o_ptr->sval);
-
-               /* Display object description */
-               object_desc(o_name, o_ptr, OD_NAME_ONLY);
-
-               /* Build the filename */
-               path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, q);
-
-               /* Peruse the help file */
-               (void)show_file(TRUE, buf, o_name, 0, 0);
-
-               /* Load screen */
-               screen_load();
-
-               used_up=FALSE;
-       }
-
-
-       /* Combine / Reorder the pack (later) */
-       p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
-       if (!(object_is_aware(o_ptr)))
-       {
-               chg_virtue(V_PATIENCE, -1);
-               chg_virtue(V_CHANCE, 1);
-               chg_virtue(V_KNOWLEDGE, -1);
-       }
-
-       /* The item was tried */
-       object_tried(o_ptr);
-
-       /* An identification was made */
-       if (ident && !object_is_aware(o_ptr))
-       {
-               object_aware(o_ptr);
-               gain_exp((lev + (p_ptr->lev >> 1)) / p_ptr->lev);
-       }
-
-       /* Window stuff */
-       p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
-
-
-       /* Hack -- allow certain scrolls to be "preserved" */
-       if (!used_up)
-       {
-               return;
-       }
-
-       sound(SOUND_SCROLL);
-
-       /* Destroy a scroll in the pack */
-       if (item >= 0)
-       {
-               inven_item_increase(item, -1);
-               inven_item_describe(item);
-               inven_item_optimize(item);
-       }
-
-       /* Destroy a scroll on the floor */
-       else
-       {
-               floor_item_increase(0 - item, -1);
-               floor_item_describe(0 - item);
-               floor_item_optimize(0 - item);
-       }
-}
-
-/*!
- * @brief オブジェクトをプレイヤーが読むことができるかを判定する /
- * Hook to determine if an object is readable
- * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
- * @return 読むことが可能ならばTRUEを返す
- */
-static bool item_tester_hook_readable(object_type *o_ptr)
-{
-       if ((o_ptr->tval==TV_SCROLL) || (o_ptr->tval==TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);
-
-       /* Assume not */
-       return (FALSE);
-}
-
-/*!
- * @brief 読むコマンドのメインルーチン /
- * Eat some food (from the pack or floor)
- * @return なし
- */
-void do_cmd_read_scroll(void)
-{
-       object_type *o_ptr;
-       OBJECT_IDX item;
-       cptr q, s;
-
-       if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))
-       {
-               set_action(ACTION_NONE);
-       }
-
-       /* Check some conditions */
-       if (p_ptr->blind)
-       {
-               msg_print(_("目が見えない。", "You can't see anything."));
-               return;
-       }
-       if (no_lite())
-       {
-               msg_print(_("明かりがないので、暗くて読めない。", "You have no light to read by."));
-               return;
-       }
-       if (p_ptr->confused)
-       {
-               msg_print(_("混乱していて読めない。", "You are too confused!"));
-               return;
-       }
-
-
-       /* Restrict choices to scrolls */
-       item_tester_hook = item_tester_hook_readable;
-
-       /* Get an item */
-       q = _("どの巻物を読みますか? ", "Read which scroll? ");
-       s = _("読める巻物がない。", "You have no scrolls to read.");
-
-       if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
-
-       /* Get the item (in the pack) */
-       if (item >= 0)
-       {
-               o_ptr = &inventory[item];
-       }
-
-       /* Get the item (on the floor) */
-       else
-       {
-               o_ptr = &o_list[0 - item];
-       }
-
-       /* Read the scroll */
-       do_cmd_read_scroll_aux(item, object_is_aware(o_ptr));
-}
-
-/*!
  * @brief 杖の効果を発動する
  * @param sval オブジェクトのsval
  * @param use_charge 使用回数を消費したかどうかを返す参照ポインタ
index e109081..97977f8 100644 (file)
@@ -14,6 +14,7 @@
 #include "cmd-activate.h"
 #include "cmd-eat.h"
 #include "cmd-quaff.h"
+#include "cmd-read.h"
 
 #define TY_CURSE_CHANCE 200 /*!<太古の怨念の1ターン毎の発動確率(1/n)*/
 #define CHAINSWORD_NOISE 100 /*!<チェンソーの1ターン毎の発動確率(1/n)*/
index 21cd97b..3b89652 100644 (file)
@@ -804,7 +804,6 @@ extern void do_cmd_pet_dismiss(void);
 extern void do_cmd_pet(void);
 
 /* cmd6.c */
-extern void do_cmd_read_scroll(void);
 extern void do_cmd_aim_wand(void);
 extern void do_cmd_use_staff(void);
 extern void do_cmd_zap_rod(void);