OSDN Git Service

[Refactor] #37353 型の置換(C_MAKE)。 / Type replacement(C_MAKE).
[hengband/hengband.git] / src / cmd5.c
index d8f509f..ede88af 100644 (file)
@@ -18,7 +18,7 @@
  * @param tval 魔法書のtval
  * @return 領域魔法の技能名称を保管した文字列ポインタ
  */
-cptr spell_category_name(OBJECT_TYPE_VALUE tval)
+concptr spell_category_name(OBJECT_TYPE_VALUE tval)
 {
        switch (tval)
        {
@@ -33,9 +33,6 @@ cptr spell_category_name(OBJECT_TYPE_VALUE tval)
        }
 }
 
-
-bool select_the_force = FALSE;
-
 /*!
  * @brief 領域魔法の閲覧、学習、使用選択するインターフェイス処理
  * Allow user to choose a spell/prayer from the given book.
@@ -53,19 +50,19 @@ bool select_the_force = FALSE;
  * The "known" should be TRUE for cast/pray, FALSE for study
  * </pre>
  */
-static int get_spell(SPELL_IDX *sn, cptr prompt, OBJECT_SUBTYPE_VALUE sval, bool learned, REALM_IDX use_realm)
+static int get_spell(SPELL_IDX *sn, concptr prompt, OBJECT_SUBTYPE_VALUE sval, bool learned, REALM_IDX use_realm)
 {
-       int         i;
+       int i;
        SPELL_IDX   spell = -1;
-       int         num = 0;
-       int         ask = TRUE;
-       MANA_POINT  need_mana;
-       SPELL_IDX   spells[64];
-       bool        flag, redraw, okay;
-       char        choice;
+       int num = 0;
+       int ask = TRUE;
+       MANA_POINT need_mana;
+       SPELL_IDX spells[64];
+       bool flag, redraw, okay;
+       char choice;
        const magic_type  *s_ptr;
-       char        out_val[160];
-       cptr        p;
+       char out_val[160];
+       concptr p;
        COMMAND_CODE code;
 #ifdef JP
        char jverb_buf[128];
@@ -125,10 +122,8 @@ static int get_spell(SPELL_IDX *sn, cptr prompt, OBJECT_SUBTYPE_VALUE sval, bool
        /* No redraw yet */
        redraw = FALSE;
 
-       /* Show choices */
        p_ptr->window |= (PW_SPELL);
-
-       window_stuff();
+       handle_stuff();
 
        /* Build a prompt (accept all spells) */
 #ifdef JP
@@ -199,8 +194,6 @@ static int get_spell(SPELL_IDX *sn, cptr prompt, OBJECT_SUBTYPE_VALUE sval, bool
                                {
                                        /* Show list */
                                        redraw = TRUE;
-
-                                       /* Save the screen */
                                        screen_save();
 
                                        /* Display a list of spells */
@@ -214,8 +207,6 @@ static int get_spell(SPELL_IDX *sn, cptr prompt, OBJECT_SUBTYPE_VALUE sval, bool
 
                                        /* Hide list */
                                        redraw = FALSE;
-
-                                       /* Restore the screen */
                                        screen_load();
                                }
 
@@ -304,16 +295,10 @@ static int get_spell(SPELL_IDX *sn, cptr prompt, OBJECT_SUBTYPE_VALUE sval, bool
                flag = TRUE;
        }
 
-
-       /* Restore the screen */
        if (redraw) screen_load();
 
-
-       /* Show choices */
        p_ptr->window |= (PW_SPELL);
-
-       window_stuff();
-
+       handle_stuff();
 
        /* Abort if needed */
        if (!flag) return FALSE;
@@ -408,9 +393,7 @@ static void confirm_use_force(bool browse_only)
                if (which == ESCAPE) break;
                else if (which == 'w')
                {
-
                        repeat_push(INVEN_FORCE);
-
                        break;
                }
        }
@@ -451,7 +434,7 @@ void do_cmd_browse(void)
 
        object_type     *o_ptr;
 
-       cptr q, s;
+       concptr q, s;
 
        /* Warriors are illiterate */
        if (!(p_ptr->realm1 || p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE))
@@ -472,7 +455,6 @@ void do_cmd_browse(void)
                        confirm_use_force(TRUE);
                        return;
                }
-               select_the_force = TRUE;
        }
 
        /* Restrict choices to "useful" books */
@@ -482,31 +464,17 @@ void do_cmd_browse(void)
        q = _("どの本を読みますか? ", "Browse which book? ");
        s = _("読める本がない。", "You have no books that you can read.");
 
-       if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR)))
-       {
-               select_the_force = FALSE;
-               return;
-       }
-       select_the_force = FALSE;
-
-       if (item == INVEN_FORCE) /* the_force */
+       o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | (p_ptr->pclass == CLASS_FORCETRAINER ? USE_FORCE : 0)));
+       if (!o_ptr)
        {
-               do_cmd_mind_browse();
+               if (item == INVEN_FORCE) /* the_force */
+               {
+                       do_cmd_mind_browse();
+                       return;
+               }
                return;
        }
 
-       /* Get the item (in the pack) */
-       else if (item >= 0)
-       {
-               o_ptr = &inventory[item];
-       }
-
-       /* Get the item (on the floor) */
-       else
-       {
-               o_ptr = &o_list[0 - item];
-       }
-
        /* Access the item's sval */
        sval = o_ptr->sval;
 
@@ -514,11 +482,8 @@ void do_cmd_browse(void)
 
        /* Track the object kind */
        object_kind_track(o_ptr->k_idx);
-
-       /* Hack -- Handle stuff */
        handle_stuff();
 
-
        /* Extract spells */
        for (spell = 0; spell < 32; spell++)
        {
@@ -530,11 +495,7 @@ void do_cmd_browse(void)
                }
        }
 
-
-       /* Save the screen */
        screen_save();
-
-       /* Clear the top line */
        prt("", 0, 0);
 
        /* Keep browsing spells.  Exit browsing on cancel. */
@@ -556,8 +517,6 @@ void do_cmd_browse(void)
                                prt(_("読める呪文がない。", "No spells to browse."), 0, 0);
                        (void)inkey();
 
-
-                       /* Restore the screen */
                        screen_load();
 
                        return;
@@ -577,8 +536,6 @@ void do_cmd_browse(void)
                        line++;
                }
        }
-
-       /* Restore the screen */
        screen_load();
 }
 
@@ -613,7 +570,7 @@ static void change_realm2(CHARACTER_IDX next_realm)
        p_ptr->old_realm |= 1 << (p_ptr->realm2-1);
        p_ptr->realm2 = next_realm;
 
-       p_ptr->notice |= (PN_REORDER);
+       p_ptr->update |= (PU_REORDER);
        p_ptr->update |= (PU_SPELLS);
        handle_stuff();
 
@@ -638,11 +595,11 @@ void do_cmd_study(void)
        /* Spells of realm2 will have an increment of +32 */
        SPELL_IDX spell = -1;
 
-       cptr p = spell_category_name(mp_ptr->spell_book);
+       concptr p = spell_category_name(mp_ptr->spell_book);
 
        object_type *o_ptr;
 
-       cptr q, s;
+       concptr q, s;
 
        if (!p_ptr->realm1)
        {
@@ -694,19 +651,8 @@ void do_cmd_study(void)
        q = _("どの本から学びますか? ", "Study which book? ");
        s = _("読める本がない。", "You have no books that you can 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];
-       }
+       o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
+       if (!o_ptr) return;
 
        /* Access the item's sval */
        sval = o_ptr->sval;
@@ -721,8 +667,6 @@ void do_cmd_study(void)
 
        /* Track the object kind */
        object_kind_track(o_ptr->k_idx);
-
-       /* Hack -- Handle stuff */
        handle_stuff();
 
        /* Mage -- Learn a selected spell */
@@ -788,7 +732,7 @@ void do_cmd_study(void)
                int max_exp = (spell < 32) ? SPELL_EXP_MASTER : SPELL_EXP_EXPERT;
                int old_exp = p_ptr->spell_exp[spell];
                int new_rank = EXP_LEVEL_UNSKILLED;
-               cptr name = do_spell(increment ? p_ptr->realm2 : p_ptr->realm1, spell%32, SPELL_NAME);
+               concptr name = do_spell(increment ? p_ptr->realm2 : p_ptr->realm1, spell%32, SPELL_NAME);
 
                if (old_exp >= max_exp)
                {
@@ -879,10 +823,10 @@ void do_cmd_study(void)
 
        /* One less spell available */
        p_ptr->learned_spells++;
-#
+
        /* Update Study */
        p_ptr->update |= (PU_SPELLS);
-       update_stuff();
+       update_creature(p_ptr);
 
        /* Redraw object recall */
        p_ptr->window |= (PW_OBJECT);
@@ -905,10 +849,10 @@ void do_cmd_cast(void)
        REALM_IDX use_realm;
        MANA_POINT need_mana;
 
-       cptr prayer;
+       concptr prayer;
        object_type     *o_ptr;
        const magic_type *s_ptr;
-       cptr q, s;
+       concptr q, s;
 
        bool over_exerted = FALSE;
 
@@ -959,7 +903,6 @@ void do_cmd_cast(void)
                        confirm_use_force(FALSE);
                        return;
                }
-               select_the_force = TRUE;
        }
 
        prayer = spell_category_name(mp_ptr->spell_book);
@@ -970,41 +913,24 @@ void do_cmd_cast(void)
        q = _("どの呪文書を使いますか? ", "Use which book? ");
        s = _("呪文書がない!", "You have no spell books!");
 
-       if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR)))
+       o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | (p_ptr->pclass == CLASS_FORCETRAINER ? USE_FORCE : 0)));
+       if (!o_ptr)
        {
-               select_the_force = FALSE;
-               return;
-       }
-       select_the_force = FALSE;
-
-       if (item == INVEN_FORCE) /* the_force */
-       {
-               do_cmd_mind();
+               if (item == INVEN_FORCE) /* the_force */
+               {
+                       do_cmd_mind();
+                       return;
+               }
                return;
        }
 
-       /* Get the item (in the pack) */
-       else if (item >= 0)
-       {
-               o_ptr = &inventory[item];
-       }
-
-       /* Get the item (on the floor) */
-       else
-       {
-               o_ptr = &o_list[0 - item];
-       }
-
        /* Access the item's sval */
        sval = o_ptr->sval;
 
        if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32;
 
-
        /* Track the object kind */
        object_kind_track(o_ptr->k_idx);
-
-       /* Hack -- Handle stuff */
        handle_stuff();
 
        if ((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE))
@@ -1087,8 +1013,6 @@ void do_cmd_cast(void)
                p_ptr->csp -= need_mana;
        }
        else over_exerted = TRUE;
-
-       /* Redraw mana */
        p_ptr->redraw |= (PR_MANA);
 
        /* Failed spell */