OSDN Git Service

[Refactor] #37353 mon_take_hit() と関連処理を monster-status.c/h へ移動。 / Move mon_take_hit...
[hengband/hengband.git] / src / cmd-zaprod.c
index f8d430f..671ffd5 100644 (file)
@@ -9,12 +9,12 @@
  * @param magic 魔道具術上の処理ならばTRUE
  * @return 発動により効果内容が確定したならばTRUEを返す
  */
-int rod_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool *use_charge, bool powerful, bool magic)
+int rod_effect(OBJECT_SUBTYPE_VALUE sval, DIRECTION dir, bool *use_charge, bool powerful, bool magic)
 {
        int ident = FALSE;
-       int lev = powerful ? p_ptr->lev * 2 : p_ptr->lev;
-       int detect_rad = powerful ? DETECT_RAD_DEFAULT * 3 / 2 : DETECT_RAD_DEFAULT;
-       int rad = powerful ? 3 : 2;
+       PLAYER_LEVEL lev = powerful ? p_ptr->lev * 2 : p_ptr->lev;
+       POSITION detect_rad = powerful ? DETECT_RAD_DEFAULT * 3 / 2 : DETECT_RAD_DEFAULT;
+       POSITION rad = powerful ? 3 : 2;
 
        /* Unused */
        (void)magic;
@@ -49,7 +49,7 @@ int rod_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool *use_charge, bool powerf
 
        case SV_ROD_RECALL:
        {
-               if (!word_of_recall()) *use_charge = FALSE;
+               if (!recall_player(p_ptr, randint0(21) + 15)) *use_charge = FALSE;
                ident = TRUE;
                break;
        }
@@ -256,7 +256,7 @@ int rod_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool *use_charge, bool powerf
 void do_cmd_zap_rod_aux(INVENTORY_IDX item)
 {
        int ident, chance, lev, fail;
-       int dir = 0;
+       DIRECTION dir = 0;
        object_type *o_ptr;
        bool success;
 
@@ -295,7 +295,6 @@ void do_cmd_zap_rod_aux(INVENTORY_IDX item)
        }
 
 
-       /* Take a turn */
        p_ptr->energy_use = 100;
 
        /* Extract the item level */
@@ -359,7 +358,6 @@ void do_cmd_zap_rod_aux(INVENTORY_IDX item)
                return;
        }
 
-       /* Sound */
        sound(SOUND_ZAP);
 
        ident = rod_effect(o_ptr->sval, dir, &use_charge, FALSE, FALSE);
@@ -368,7 +366,7 @@ void do_cmd_zap_rod_aux(INVENTORY_IDX item)
        if (use_charge) o_ptr->timeout += k_ptr->pval;
 
        /* Combine / Reorder the pack (later) */
-       p_ptr->notice |= (PN_COMBINE | PN_REORDER);
+       p_ptr->update |= (PU_COMBINE | PU_REORDER);
 
        if (!(object_is_aware(o_ptr)))
        {
@@ -387,7 +385,6 @@ void do_cmd_zap_rod_aux(INVENTORY_IDX item)
                gain_exp((lev + (p_ptr->lev >> 1)) / p_ptr->lev);
        }
 
-       /* Window stuff */
        p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
 }
 
@@ -398,7 +395,19 @@ void do_cmd_zap_rod_aux(INVENTORY_IDX item)
 void do_cmd_zap_rod(void)
 {
        OBJECT_IDX item;
-       cptr q, s;
+       concptr q, s;
+
+       if (p_ptr->wild_mode)
+       {
+               return;
+       }
+
+       if (p_ptr->inside_arena)
+       {
+               msg_print(_("アリーナが魔法を吸収した!", "The arena absorbs all attempted magic!"));
+               msg_print(NULL);
+               return;
+       }
 
        if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))
        {
@@ -408,11 +417,10 @@ void do_cmd_zap_rod(void)
        /* Restrict choices to rods */
        item_tester_tval = TV_ROD;
 
-       /* Get an item */
        q = _("どのロッドを振りますか? ", "Zap which rod? ");
        s = _("使えるロッドがない。", "You have no rod to zap.");
 
-       if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
+       if (!choose_object(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
 
        /* Zap the rod */
        do_cmd_zap_rod_aux(item);