OSDN Git Service

[Refactor] #37353 symbol_genocide()無効時のメッセージ追加。 / Add message when symbol_genocide...
[hengband/hengband.git] / src / cmd-usestaff.c
index 894941c..1205bda 100644 (file)
@@ -1,4 +1,6 @@
 #include "angband.h"\r
+#include "projection.h"\r
+#include "spells-summon.h"\r
 \r
 \r
 \r
@@ -15,8 +17,8 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
 {\r
        int k;\r
        int ident = FALSE;\r
-       int lev = powerful ? p_ptr->lev * 2 : p_ptr->lev;\r
-       int detect_rad = powerful ? DETECT_RAD_DEFAULT * 3 / 2 : DETECT_RAD_DEFAULT;\r
+       PLAYER_LEVEL lev = powerful ? p_ptr->lev * 2 : p_ptr->lev;\r
+       POSITION detect_rad = powerful ? DETECT_RAD_DEFAULT * 3 / 2 : DETECT_RAD_DEFAULT;\r
 \r
        /* Analyze the staff */\r
        switch (sval)\r
@@ -48,7 +50,7 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
                const int times = randint1(powerful ? 8 : 4);\r
                for (k = 0; k < times; 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
+                       if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0'))\r
                        {\r
                                ident = TRUE;\r
                        }\r
@@ -80,15 +82,6 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
                bool result = powerful ? remove_all_curse() : remove_curse();\r
                if (result)\r
                {\r
-                       if (magic)\r
-                       {\r
-                               msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
-                       }\r
-                       else if (!p_ptr->blind)\r
-                       {\r
-                               msg_print(_("杖は一瞬ブルーに輝いた...", "The staff glows blue for a moment..."));\r
-\r
-                       }\r
                        ident = TRUE;\r
                }\r
                break;\r
@@ -175,45 +168,27 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
 \r
        case SV_STAFF_CURE_LIGHT:\r
        {\r
-               ident = cure_light_wound((powerful ? 4 : 2), 8);\r
+               ident = cure_light_wounds((powerful ? 4 : 2), 8);\r
                break;\r
        }\r
 \r
        case SV_STAFF_CURING:\r
        {\r
-               if (set_blind(0)) ident = TRUE;\r
-               if (set_poisoned(0)) ident = TRUE;\r
-               if (set_confused(0)) ident = TRUE;\r
-               if (set_stun(0)) ident = TRUE;\r
-               if (set_cut(0)) ident = TRUE;\r
-               if (set_image(0)) ident = TRUE;\r
+               ident = true_healing(0);\r
                if (set_shero(0, TRUE)) ident = TRUE;\r
                break;\r
        }\r
 \r
        case SV_STAFF_HEALING:\r
        {\r
-               if (hp_player(powerful ? 500 : 300)) ident = TRUE;\r
-               if (set_stun(0)) ident = TRUE;\r
-               if (set_cut(0)) ident = TRUE;\r
-               if (set_shero(0, TRUE)) ident = TRUE;\r
+               if (cure_critical_wounds(powerful ? 500 : 300)) ident = TRUE;\r
                break;\r
        }\r
 \r
        case SV_STAFF_THE_MAGI:\r
        {\r
                if (do_res_stat(A_INT)) ident = TRUE;\r
-               if (p_ptr->csp < p_ptr->msp)\r
-               {\r
-                       p_ptr->csp = p_ptr->msp;\r
-                       p_ptr->csp_frac = 0;\r
-                       ident = TRUE;\r
-                       msg_print(_("頭がハッキリとした。", "You feel your head clear."));\r
-\r
-                       p_ptr->redraw |= (PR_MANA);\r
-                       p_ptr->window |= (PW_PLAYER);\r
-                       p_ptr->window |= (PW_SPELL);\r
-               }\r
+               ident |= restore_mana(FALSE);\r
                if (set_shero(0, TRUE)) ident = TRUE;\r
                break;\r
        }\r
@@ -257,21 +232,13 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
 \r
        case SV_STAFF_HOLINESS:\r
        {\r
-               if (dispel_evil(powerful ? 225 : 150)) ident = TRUE;\r
-               k = 3 * lev;\r
-               if (set_protevil((magic ? 0 : p_ptr->protevil) + randint1(25) + k, FALSE)) ident = TRUE;\r
-               if (set_poisoned(0)) ident = TRUE;\r
-               if (set_afraid(0)) ident = TRUE;\r
-               if (hp_player(50)) ident = TRUE;\r
-               if (set_stun(0)) ident = TRUE;\r
-               if (set_cut(0)) ident = TRUE;\r
+               if (cleansing_nova(p_ptr, magic, powerful)) ident = TRUE;\r
                break;\r
        }\r
 \r
        case SV_STAFF_GENOCIDE:\r
        {\r
-               (void)symbol_genocide((magic ? lev + 50 : 200), TRUE);\r
-               ident = TRUE;\r
+               ident = symbol_genocide((magic ? lev + 50 : 200), TRUE);\r
                break;\r
        }\r
 \r
@@ -336,7 +303,7 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
  * One charge of one staff disappears.\r
  * Hack -- staffs of identify can be "cancelled".\r
  */\r
-void do_cmd_use_staff_aux(int item)\r
+void do_cmd_use_staff_aux(INVENTORY_IDX item)\r
 {\r
        int         ident, chance, lev;\r
        object_type *o_ptr;\r
@@ -367,7 +334,6 @@ void do_cmd_use_staff_aux(int item)
        }\r
 \r
 \r
-       /* Take a turn */\r
        p_ptr->energy_use = 100;\r
 \r
        /* Extract the item level */\r
@@ -414,14 +380,13 @@ void do_cmd_use_staff_aux(int item)
                o_ptr->ident |= (IDENT_EMPTY);\r
 \r
                /* Combine / Reorder the pack (later) */\r
-               p_ptr->notice |= (PN_COMBINE | PN_REORDER);\r
+               p_ptr->update |= (PU_COMBINE | PU_REORDER);\r
                p_ptr->window |= (PW_INVEN);\r
 \r
                return;\r
        }\r
 \r
 \r
-       /* Sound */\r
        sound(SOUND_ZAP);\r
 \r
        ident = staff_effect(o_ptr->sval, &use_charge, FALSE, FALSE, object_is_aware(o_ptr));\r
@@ -434,7 +399,7 @@ void do_cmd_use_staff_aux(int item)
        }\r
 \r
        /* Combine / Reorder the pack (later) */\r
-       p_ptr->notice |= (PN_COMBINE | PN_REORDER);\r
+       p_ptr->update |= (PU_COMBINE | PU_REORDER);\r
 \r
        /* Tried the item */\r
        object_tried(o_ptr);\r
@@ -446,7 +411,6 @@ void do_cmd_use_staff_aux(int item)
                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
@@ -462,8 +426,6 @@ void do_cmd_use_staff_aux(int item)
        {\r
                object_type forge;\r
                object_type *q_ptr;\r
-\r
-               /* Get local object */\r
                q_ptr = &forge;\r
 \r
                /* Obtain a local object */\r
@@ -480,7 +442,6 @@ void do_cmd_use_staff_aux(int item)
                p_ptr->total_weight -= q_ptr->weight;\r
                item = inven_carry(q_ptr);\r
 \r
-               /* Message */\r
                msg_print(_("杖をまとめなおした。", "You unstack your staff."));\r
        }\r
 \r
@@ -504,7 +465,19 @@ void do_cmd_use_staff_aux(int item)
 void do_cmd_use_staff(void)\r
 {\r
        OBJECT_IDX item;\r
-       cptr q, s;\r
+       concptr q, s;\r
+\r
+       if (p_ptr->wild_mode)\r
+       {\r
+               return;\r
+       }\r
+\r
+       if (p_ptr->inside_arena)\r
+       {\r
+               msg_print(_("アリーナが魔法を吸収した!", "The arena absorbs all attempted magic!"));\r
+               msg_print(NULL);\r
+               return;\r
+       }\r
 \r
        if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))\r
        {\r
@@ -514,11 +487,10 @@ void do_cmd_use_staff(void)
        /* Restrict choices to wands */\r
        item_tester_tval = TV_STAFF;\r
 \r
-       /* Get an item */\r
        q = _("どの杖を使いますか? ", "Use which staff? ");\r
        s = _("使える杖がない。", "You have no staff to use.");\r
 \r
-       if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;\r
+       if (!choose_object(&item, q, s, (USE_INVEN | USE_FLOOR))) return;\r
 \r
        do_cmd_use_staff_aux(item);\r
 }\r