OSDN Git Service

[Refactor] #37353 魔力の嵐の杖の効果を unleash_mana_storm() に分離。 / Separate implementation...
[hengband/hengband.git] / src / cmd5.c
index 416f837..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];
@@ -396,9 +393,7 @@ static void confirm_use_force(bool browse_only)
                if (which == ESCAPE) break;
                else if (which == 'w')
                {
-
                        repeat_push(INVEN_FORCE);
-
                        break;
                }
        }
@@ -439,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))
@@ -460,7 +455,6 @@ void do_cmd_browse(void)
                        confirm_use_force(TRUE);
                        return;
                }
-               select_the_force = TRUE;
        }
 
        /* Restrict choices to "useful" books */
@@ -470,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;
 
@@ -504,7 +484,6 @@ void do_cmd_browse(void)
        object_kind_track(o_ptr->k_idx);
        handle_stuff();
 
-
        /* Extract spells */
        for (spell = 0; spell < 32; spell++)
        {
@@ -517,8 +496,6 @@ void do_cmd_browse(void)
        }
 
        screen_save();
-
-       /* Clear the top line */
        prt("", 0, 0);
 
        /* Keep browsing spells.  Exit browsing on cancel. */
@@ -593,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();
 
@@ -618,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)
        {
@@ -674,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;
@@ -766,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)
                {
@@ -857,10 +823,10 @@ void do_cmd_study(void)
 
        /* One less spell available */
        p_ptr->learned_spells++;
-#
+
        /* Update Study */
        p_ptr->update |= (PU_SPELLS);
-       handle_stuff();
+       update_creature(p_ptr);
 
        /* Redraw object recall */
        p_ptr->window |= (PW_OBJECT);
@@ -883,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;
 
@@ -937,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);
@@ -948,37 +913,22 @@ 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)))
-       {
-               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();
+               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);
        handle_stuff();