OSDN Git Service

[Refactor] #38997 random_artifact_resistance() にplayer_type * 引数を追加/ Added player_typ...
[hengband/hengband.git] / src / object2.c
index 81f77ec..c79cc82 100644 (file)
@@ -81,6 +81,7 @@ bool(*get_obj_num_hook)(KIND_OBJECT_IDX k_idx);
 */
 OBJECT_SUBTYPE_VALUE coin_type;        /* Hack -- force coin type */
 
+void floor_item_describe(floor_type *floor_ptr, INVENTORY_IDX item);
 
 /*!
  * @brief 床上、モンスター所持でスタックされたアイテムを削除しスタックを補完する / Excise a dungeon object from any stacks
@@ -90,12 +91,11 @@ OBJECT_SUBTYPE_VALUE coin_type;     /* Hack -- force coin type */
  */
 void excise_object_idx(floor_type *floor_ptr, OBJECT_IDX o_idx)
 {
-       object_type *j_ptr;
-
        OBJECT_IDX this_o_idx, next_o_idx = 0;
        OBJECT_IDX prev_o_idx = 0;
 
        /* Object */
+       object_type *j_ptr;
        j_ptr = &floor_ptr->o_list[o_idx];
 
        if (OBJECT_IS_HELD_MONSTER(j_ptr))
@@ -110,85 +110,84 @@ void excise_object_idx(floor_type *floor_ptr, OBJECT_IDX o_idx)
                        o_ptr = &floor_ptr->o_list[this_o_idx];
                        next_o_idx = o_ptr->next_o_idx;
 
-                       if (this_o_idx == o_idx)
+                       if (this_o_idx != o_idx)
                        {
-                               /* No previous */
-                               if (prev_o_idx == 0)
-                               {
-                                       /* Remove from list */
-                                       m_ptr->hold_o_idx = next_o_idx;
-                               }
-
-                               /* Real previous */
-                               else
-                               {
-                                       object_type *k_ptr;
-
-                                       /* Previous object */
-                                       k_ptr = &floor_ptr->o_list[prev_o_idx];
+                               prev_o_idx = this_o_idx;
+                               continue;
+                       }
+                       
+                       /* No previous */
+                       if (prev_o_idx == 0)
+                       {
+                               /* Remove from list */
+                               m_ptr->hold_o_idx = next_o_idx;
+                       }
 
-                                       /* Remove from list */
-                                       k_ptr->next_o_idx = next_o_idx;
-                               }
+                       /* Real previous */
+                       else
+                       {
+                               object_type *k_ptr;
 
-                               /* Forget next pointer */
-                               o_ptr->next_o_idx = 0;
+                               /* Previous object */
+                               k_ptr = &floor_ptr->o_list[prev_o_idx];
 
-                               break;
+                               /* Remove from list */
+                               k_ptr->next_o_idx = next_o_idx;
                        }
 
-                       /* Save prev_o_idx */
-                       prev_o_idx = this_o_idx;
+                       /* Forget next pointer */
+                       o_ptr->next_o_idx = 0;
+
+                       break;
                }
+
+               return;
        }
 
        /* Dungeon */
-       else
-       {
-               grid_type *g_ptr;
+       grid_type *g_ptr;
+
+       POSITION y = j_ptr->iy;
+       POSITION x = j_ptr->ix;
 
-               POSITION y = j_ptr->iy;
-               POSITION x = j_ptr->ix;
+       g_ptr = &floor_ptr->grid_array[y][x];
 
-               g_ptr = &floor_ptr->grid_array[y][x];
+       /* Scan all objects in the grid */
+       for (this_o_idx = g_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+       {
+               object_type *o_ptr;
+               o_ptr = &floor_ptr->o_list[this_o_idx];
+               next_o_idx = o_ptr->next_o_idx;
 
-               /* Scan all objects in the grid */
-               for (this_o_idx = g_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+               if (this_o_idx != o_idx)
                {
-                       object_type *o_ptr;
-                       o_ptr = &floor_ptr->o_list[this_o_idx];
-                       next_o_idx = o_ptr->next_o_idx;
-
-                       if (this_o_idx == o_idx)
-                       {
-                               /* No previous */
-                               if (prev_o_idx == 0)
-                               {
-                                       /* Remove from list */
-                                       g_ptr->o_idx = next_o_idx;
-                               }
+                       prev_o_idx = this_o_idx;
+                       continue;
+               }
 
-                               /* Real previous */
-                               else
-                               {
-                                       object_type *k_ptr;
+               /* No previous */
+               if (prev_o_idx == 0)
+               {
+                       /* Remove from list */
+                       g_ptr->o_idx = next_o_idx;
+               }
 
-                                       /* Previous object */
-                                       k_ptr = &floor_ptr->o_list[prev_o_idx];
+               /* Real previous */
+               else
+               {
+                       object_type *k_ptr;
 
-                                       /* Remove from list */
-                                       k_ptr->next_o_idx = next_o_idx;
-                               }
+                       /* Previous object */
+                       k_ptr = &floor_ptr->o_list[prev_o_idx];
 
-                               /* Forget next pointer */
-                               o_ptr->next_o_idx = 0;
+                       /* Remove from list */
+                       k_ptr->next_o_idx = next_o_idx;
+               }
 
-                               break;
-                       }
+               /* Forget next pointer */
+               o_ptr->next_o_idx = 0;
 
-                       /* Save prev_o_idx */
-                       prev_o_idx = this_o_idx;
-               }
+               break;
        }
 }
 
@@ -220,8 +219,8 @@ void delete_object_idx(floor_type *floor_ptr, OBJECT_IDX o_idx)
                x = j_ptr->ix;
                lite_spot(y, x);
        }
-       object_wipe(j_ptr);
 
+       object_wipe(j_ptr);
        floor_ptr->o_cnt--;
 }
 
@@ -453,28 +452,26 @@ OBJECT_IDX get_obj_num(player_type *owner_ptr, DEPTH level, BIT_FLAGS mode)
        }
 
        /* Try for a "better" object twice (10%) */
-       if (p < 10)
-       {
-               /* Save old */
-               j = i;
-
-               /* Pick a object */
-               value = randint0(total);
+       if (p >= 10) return (table[i].index);
+       
+       /* Save old */
+       j = i;
 
-               /* Find the object */
-               for (i = 0; i < alloc_kind_size; i++)
-               {
-                       /* Found the entry */
-                       if (value < table[i].prob3) break;
+       /* Pick a object */
+       value = randint0(total);
 
-                       /* Decrement */
-                       value = value - table[i].prob3;
-               }
+       /* Find the object */
+       for (i = 0; i < alloc_kind_size; i++)
+       {
+               /* Found the entry */
+               if (value < table[i].prob3) break;
 
-               /* Keep the "best" one */
-               if (table[i].level < table[j].level) i = j;
+               /* Decrement */
+               value = value - table[i].prob3;
        }
 
+       /* Keep the "best" one */
+       if (table[i].level < table[j].level) i = j;
        return (table[i].index);
 }
 
@@ -522,26 +519,25 @@ void object_known(object_type *o_ptr)
  */
 void object_aware(player_type *owner_ptr, object_type *o_ptr)
 {
-       bool mihanmei = !object_is_aware(o_ptr);
-
        /* Fully aware of the effects */
        k_info[o_ptr->k_idx].aware = TRUE;
 
-       if (mihanmei && !(k_info[o_ptr->k_idx].gen_flags & TRG_INSTA_ART) && record_ident &&
-               !owner_ptr->is_dead && ((o_ptr->tval >= TV_AMULET && o_ptr->tval <= TV_POTION) || (o_ptr->tval == TV_FOOD)))
-       {
-               object_type forge;
-               object_type *q_ptr;
-               GAME_TEXT o_name[MAX_NLEN];
+       bool mihanmei = !object_is_aware(o_ptr);
+       bool is_undefined = mihanmei && !(k_info[o_ptr->k_idx].gen_flags & TRG_INSTA_ART) && record_ident &&
+               !owner_ptr->is_dead && ((o_ptr->tval >= TV_AMULET && o_ptr->tval <= TV_POTION) || (o_ptr->tval == TV_FOOD));
+       if (!is_undefined) return;
 
-               q_ptr = &forge;
-               object_copy(q_ptr, o_ptr);
+       object_type forge;
+       object_type *q_ptr;
+       GAME_TEXT o_name[MAX_NLEN];
+
+       q_ptr = &forge;
+       object_copy(q_ptr, o_ptr);
 
-               q_ptr->number = 1;
-               object_desc(o_name, q_ptr, OD_NAME_ONLY);
+       q_ptr->number = 1;
+       object_desc(o_name, q_ptr, OD_NAME_ONLY);
 
-               exe_write_diary(owner_ptr, NIKKI_HANMEI, 0, o_name);
-       }
+       exe_write_diary(owner_ptr, NIKKI_HANMEI, 0, o_name);
 }
 
 
@@ -1241,25 +1237,23 @@ PRICE object_value(object_type *o_ptr)
  */
 void distribute_charges(object_type *o_ptr, object_type *q_ptr, int amt)
 {
-       if ((o_ptr->tval == TV_WAND) || (o_ptr->tval == TV_ROD))
-       {
-               q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
-               if (amt < o_ptr->number) o_ptr->pval -= q_ptr->pval;
+       if ((o_ptr->tval != TV_WAND) && (o_ptr->tval != TV_ROD)) return;
 
-               /* Hack -- Rods also need to have their timeouts distributed.  The
-                * dropped stack will accept all time remaining to charge up to its
-                * maximum.
-                */
-               if ((o_ptr->tval == TV_ROD) && (o_ptr->timeout))
-               {
-                       if (q_ptr->pval > o_ptr->timeout)
-                               q_ptr->timeout = o_ptr->timeout;
-                       else
-                               q_ptr->timeout = q_ptr->pval;
+       q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
+       if (amt < o_ptr->number) o_ptr->pval -= q_ptr->pval;
 
-                       if (amt < o_ptr->number) o_ptr->timeout -= q_ptr->timeout;
-               }
-       }
+       /* Hack -- Rods also need to have their timeouts distributed.  The
+        * dropped stack will accept all time remaining to charge up to its
+        * maximum.
+        */
+       if ((o_ptr->tval != TV_ROD) || !o_ptr->timeout) return;
+
+       if (q_ptr->pval > o_ptr->timeout)
+               q_ptr->timeout = o_ptr->timeout;
+       else
+               q_ptr->timeout = q_ptr->pval;
+
+       if (amt < o_ptr->number) o_ptr->timeout -= q_ptr->timeout;
 }
 
 
@@ -1734,12 +1728,11 @@ static void object_mention(player_type *owner_ptr, object_type *o_ptr)
  */
 static byte get_random_ego(byte slot, bool good)
 {
-       int i, value;
        ego_item_type *e_ptr;
 
        long total = 0L;
 
-       for (i = 1; i < max_e_idx; i++)
+       for (int i = 1; i < max_e_idx; i++)
        {
                e_ptr = &e_info[i];
 
@@ -1751,11 +1744,12 @@ static byte get_random_ego(byte slot, bool good)
                }
        }
 
-       value = randint1(total);
+       int value = randint1(total);
 
-       for (i = 1; i < max_e_idx; i++)
+       int j;
+       for (j = 1; j < max_e_idx; j++)
        {
-               e_ptr = &e_info[i];
+               e_ptr = &e_info[j];
 
                if (e_ptr->slot == slot
                        && ((good && e_ptr->rating) || (!good && !e_ptr->rating)))
@@ -1765,7 +1759,8 @@ static byte get_random_ego(byte slot, bool good)
                        if (value <= 0L) break;
                }
        }
-       return (byte)i;
+
+       return (byte)j;
 }
 
 
@@ -3751,10 +3746,10 @@ void apply_magic(player_type *owner_ptr, object_type *o_ptr, DEPTH lev, BIT_FLAG
        for (i = 0; i < rolls; i++)
        {
                /* Roll for an artifact */
-               if (make_artifact(o_ptr)) break;
+               if (make_artifact(owner_ptr, o_ptr)) break;
                if ((owner_ptr->muta3 & MUT3_GOOD_LUCK) && one_in_(77))
                {
-                       if (make_artifact(o_ptr)) break;
+                       if (make_artifact(owner_ptr, o_ptr)) break;
                }
        }
 
@@ -4079,7 +4074,7 @@ bool make_object(player_type *owner_ptr, object_type *j_ptr, BIT_FLAGS mode)
 
 
        /* Generate a special object, or a normal object */
-       if (!one_in_(prob) || !make_artifact_special(j_ptr))
+       if (!one_in_(prob) || !make_artifact_special(owner_ptr, j_ptr))
        {
                KIND_OBJECT_IDX k_idx;
 
@@ -4107,7 +4102,7 @@ bool make_object(player_type *owner_ptr, object_type *j_ptr, BIT_FLAGS mode)
                }
 
                /* Handle failure */
-               if (!k_idx) return (FALSE);
+               if (!k_idx) return FALSE;
 
                /* Prepare the object */
                object_prep(j_ptr, k_idx);
@@ -4174,7 +4169,7 @@ bool make_gold(floor_type *floor_ptr, object_type *j_ptr)
        j_ptr->pval = (base + (8L * randint1(base)) + randint1(8));
 
        /* Success */
-       return (TRUE);
+       return TRUE;
 }
 
 
@@ -4556,9 +4551,9 @@ void inven_item_charges(player_type *owner_ptr, INVENTORY_IDX item)
  * @param item 残量を表示したいプレイヤーのアイテム所持スロット
  * @return なし
  */
-void inven_item_describe(INVENTORY_IDX item)
+void inven_item_describe(player_type *owner_ptr, INVENTORY_IDX item)
 {
-       object_type *o_ptr = &p_ptr->inventory_list[item];
+       object_type *o_ptr = &owner_ptr->inventory_list[item];
        GAME_TEXT o_name[MAX_NLEN];
 
        object_desc(o_name, o_ptr, 0);
@@ -4581,20 +4576,21 @@ void inven_item_describe(INVENTORY_IDX item)
 
 }
 
-void vary_item(INVENTORY_IDX item, ITEM_NUMBER num)
+
+void vary_item(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER num)
 {
        if (item >= 0)
        {
-               inven_item_increase(item, num);
-               inven_item_describe(item);
-               inven_item_optimize(item);
-       }
-       else
-       {
-               floor_item_increase(0 - item, num);
-               floor_item_describe(0 - item);
-               floor_item_optimize(0 - item);
+               inven_item_increase(owner_ptr, item, num);
+               inven_item_describe(owner_ptr, item);
+               inven_item_optimize(owner_ptr, item);
+               return;
        }
+
+       floor_type *floor_ptr = owner_ptr->current_floor_ptr;
+       floor_item_increase(floor_ptr, 0 - item, num);
+       floor_item_describe(floor_ptr, 0 - item);
+       floor_item_optimize(floor_ptr, 0 - item);
 }
 
 
@@ -4606,9 +4602,9 @@ void vary_item(INVENTORY_IDX item, ITEM_NUMBER num)
  * @param num 増やしたい量
  * @return なし
  */
-void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
+void inven_item_increase(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER num)
 {
-       object_type *o_ptr = &p_ptr->inventory_list[item];
+       object_type *o_ptr = &owner_ptr->inventory_list[item];
 
        /* Apply */
        num += o_ptr->number;
@@ -4621,31 +4617,25 @@ void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
        num -= o_ptr->number;
 
        /* Change the number and weight */
-       if (num)
-       {
-               /* Add the number */
-               o_ptr->number += num;
+       if (num != 0) return;
 
-               /* Add the weight */
-               p_ptr->total_weight += (num * o_ptr->weight);
-               p_ptr->update |= (PU_BONUS);
-               p_ptr->update |= (PU_MANA);
-               p_ptr->update |= (PU_COMBINE);
-               p_ptr->window |= (PW_INVEN | PW_EQUIP);
+       /* Add the number */
+       o_ptr->number += num;
 
-               /* Hack -- Clear temporary elemental brands if player takes off weapons */
-               if (!o_ptr->number && p_ptr->ele_attack)
-               {
-                       if ((item == INVEN_RARM) || (item == INVEN_LARM))
-                       {
-                               if (!has_melee_weapon(p_ptr, INVEN_RARM + INVEN_LARM - item))
-                               {
-                                       /* Clear all temporary elemental brands */
-                                       set_ele_attack(p_ptr, 0, 0);
-                               }
-                       }
-               }
-       }
+       /* Add the weight */
+       owner_ptr->total_weight += (num * o_ptr->weight);
+       owner_ptr->update |= (PU_BONUS);
+       owner_ptr->update |= (PU_MANA);
+       owner_ptr->update |= (PU_COMBINE);
+       owner_ptr->window |= (PW_INVEN | PW_EQUIP);
+
+       /* Hack -- Clear temporary elemental brands if player takes off weapons */
+       if (o_ptr->number || !owner_ptr->ele_attack) return;
+       if (!(item == INVEN_RARM) && !(item == INVEN_LARM)) return;
+       if (has_melee_weapon(owner_ptr, INVEN_RARM + INVEN_LARM - item)) return;
+
+       /* Clear all temporary elemental brands */
+       set_ele_attack(owner_ptr, 0, 0);
 }
 
 
@@ -4656,9 +4646,9 @@ void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
  * @param item 消去したいプレイヤーのアイテム所持スロット
  * @return なし
  */
-void inven_item_optimize(INVENTORY_IDX item)
+void inven_item_optimize(player_type *owner_ptr, INVENTORY_IDX item)
 {
-       object_type *o_ptr = &p_ptr->inventory_list[item];
+       object_type *o_ptr = &owner_ptr->inventory_list[item];
 
        /* Only optimize real items */
        if (!o_ptr->k_idx) return;
@@ -4666,43 +4656,33 @@ void inven_item_optimize(INVENTORY_IDX item)
        /* Only optimize empty items */
        if (o_ptr->number) return;
 
-       /* The item is in the pack */
-       if (item < INVEN_RARM)
+       if (item >= INVEN_RARM)
        {
-               int i;
-
-               /* One less item */
-               p_ptr->inven_cnt--;
+               owner_ptr->equip_cnt--;
+               object_wipe(&owner_ptr->inventory_list[item]);
+               owner_ptr->update |= PU_BONUS;
+               owner_ptr->update |= PU_TORCH;
+               owner_ptr->update |= PU_MANA;
 
-               /* Slide everything down */
-               for (i = item; i < INVEN_PACK; i++)
-               {
-                       /* Structure copy */
-                       p_ptr->inventory_list[i] = p_ptr->inventory_list[i + 1];
-               }
-
-               /* Erase the "final" slot */
-               object_wipe(&p_ptr->inventory_list[i]);
-
-               p_ptr->window |= (PW_INVEN);
+               owner_ptr->window |= PW_EQUIP;
+               owner_ptr->window |= PW_SPELL;
+               return;
        }
 
-       /* The item is being wielded */
-       else
-       {
-               /* One less item */
-               p_ptr->equip_cnt--;
+       owner_ptr->inven_cnt--;
 
-               /* Erase the empty slot */
-               object_wipe(&p_ptr->inventory_list[item]);
-               p_ptr->update |= (PU_BONUS);
-               p_ptr->update |= (PU_TORCH);
-               p_ptr->update |= (PU_MANA);
-
-               p_ptr->window |= (PW_EQUIP);
+       /* Slide everything down */
+       int i;
+       for (i = item; i < INVEN_PACK; i++)
+       {
+               owner_ptr->inventory_list[i] = owner_ptr->inventory_list[i + 1];
        }
 
-       p_ptr->window |= (PW_SPELL);
+       /* Erase the "final" slot */
+       object_wipe(&owner_ptr->inventory_list[i]);
+
+       owner_ptr->window |= PW_INVEN;
+       owner_ptr->window |= PW_SPELL;
 }
 
 
@@ -4713,9 +4693,9 @@ void inven_item_optimize(INVENTORY_IDX item)
  * @param item メッセージの対象にしたいアイテム所持スロット
  * @return なし
  */
-void floor_item_charges(INVENTORY_IDX item)
+void floor_item_charges(floor_type *floor_ptr, INVENTORY_IDX item)
 {
-       object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[item];
+       object_type *o_ptr = &floor_ptr->o_list[item];
 
        /* Require staff/wand */
        if ((o_ptr->tval != TV_STAFF) && (o_ptr->tval != TV_WAND)) return;
@@ -4756,9 +4736,9 @@ void floor_item_charges(INVENTORY_IDX item)
  * @param item メッセージの対象にしたいアイテム所持スロット
  * @return なし
  */
-void floor_item_describe(INVENTORY_IDX item)
+void floor_item_describe(floor_type *floor_ptr, INVENTORY_IDX item)
 {
-       object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[item];
+       object_type *o_ptr = &floor_ptr->o_list[item];
        GAME_TEXT o_name[MAX_NLEN];
 
        object_desc(o_name, o_ptr, 0);
@@ -4788,9 +4768,9 @@ void floor_item_describe(INVENTORY_IDX item)
  * @param num 増やしたいアイテムの数
  * @return なし
  */
-void floor_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
+void floor_item_increase(floor_type *floor_ptr, INVENTORY_IDX item, ITEM_NUMBER num)
 {
-       object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[item];
+       object_type *o_ptr = &floor_ptr->o_list[item];
 
        /* Apply */
        num += o_ptr->number;
@@ -4814,9 +4794,9 @@ void floor_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
  * @param item 消去したいアイテムの所持スロット
  * @return なし
  */
-void floor_item_optimize(INVENTORY_IDX item)
+void floor_item_optimize(floor_type *floor_ptr, INVENTORY_IDX item)
 {
-       object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[item];
+       object_type *o_ptr = &floor_ptr->o_list[item];
 
        /* Paranoia -- be sure it exists */
        if (!o_ptr->k_idx) return;
@@ -4824,11 +4804,12 @@ void floor_item_optimize(INVENTORY_IDX item)
        /* Only optimize empty items */
        if (o_ptr->number) return;
 
-       delete_object_idx(p_ptr->current_floor_ptr, item);
+       delete_object_idx(floor_ptr, item);
 }
 
 
 /*!
+ * todo ここのp_ptrだけは抜けない……関数ポインタの嵐でにっちもさっちもいかない
  * @brief アイテムを拾う際にザックから溢れずに済むかを判定する /
  * Check if we have space for an item in the pack without overflow
  * @param owner_ptr プレーヤーへの参照ポインタ
@@ -4837,24 +4818,23 @@ void floor_item_optimize(INVENTORY_IDX item)
  */
 bool inven_carry_okay(object_type *o_ptr)
 {
-       int j;
-
        /* Empty slot? */
-       if (p_ptr->inven_cnt < INVEN_PACK) return (TRUE);
+       if (p_ptr->inven_cnt < INVEN_PACK) return TRUE;
 
        /* Similar slot? */
-       for (j = 0; j < INVEN_PACK; j++)
+       for (int j = 0; j < INVEN_PACK; j++)
        {
                object_type *j_ptr = &p_ptr->inventory_list[j];
                if (!j_ptr->k_idx) continue;
 
                /* Check if the two items can be combined */
-               if (object_similar(j_ptr, o_ptr)) return (TRUE);
+               if (object_similar(j_ptr, o_ptr)) return TRUE;
        }
 
-       return (FALSE);
+       return FALSE;
 }
 
+
 /*!
  * @brief オブジェクトを定義された基準に従いソートするための関数 /
  * Check if we have space for an item in the pack without overflow
@@ -5063,7 +5043,7 @@ s16b inven_carry(player_type *owner_ptr, object_type *o_ptr)
        owner_ptr->window |= (PW_INVEN);
 
        /* Return the slot */
-       return (i);
+       return i;
 }
 
 
@@ -5080,7 +5060,7 @@ s16b inven_carry(player_type *owner_ptr, object_type *o_ptr)
  * to fall to the ground.\n
  * Return the inventory slot into which the item is placed.\n
  */
-INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
+INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt)
 {
        INVENTORY_IDX slot;
 
@@ -5095,7 +5075,7 @@ INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
 
 
        /* Get the item to take off */
-       o_ptr = &p_ptr->inventory_list[item];
+       o_ptr = &owner_ptr->inventory_list[item];
        if (amt <= 0) return (-1);
 
        /* Verify */
@@ -5134,11 +5114,11 @@ INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
        }
 
        /* Modify, Optimize */
-       inven_item_increase(item, -amt);
-       inven_item_optimize(item);
+       inven_item_increase(owner_ptr, item, -amt);
+       inven_item_optimize(owner_ptr, item);
 
        /* Carry the object */
-       slot = inven_carry(p_ptr, q_ptr);
+       slot = inven_carry(owner_ptr, q_ptr);
 
 #ifdef JP
        msg_format("%s(%c)%s。", o_name, index_to_label(slot), act);
@@ -5146,9 +5126,7 @@ INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
        msg_format("%s %s (%c).", act, o_name, index_to_label(slot));
 #endif
 
-
-       /* Return slot */
-       return (slot);
+       return slot;
 }
 
 
@@ -5183,7 +5161,7 @@ void drop_from_inventory(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER
        if (item >= INVEN_RARM)
        {
                /* Take off first */
-               item = inven_takeoff(item, amt);
+               item = inven_takeoff(owner_ptr, item, amt);
 
                /* Access original object */
                o_ptr = &owner_ptr->inventory_list[item];
@@ -5208,7 +5186,7 @@ void drop_from_inventory(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER
        /* Drop it near the player */
        (void)drop_near(owner_ptr, q_ptr, 0, owner_ptr->y, owner_ptr->x);
 
-       vary_item(item, -amt);
+       vary_item(owner_ptr, item, -amt);
 }
 
 
@@ -5221,28 +5199,27 @@ void drop_from_inventory(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER
  */
 void combine_pack(player_type *owner_ptr)
 {
-       int             i, j, k;
-       object_type *o_ptr;
-       object_type     *j_ptr;
-       bool            flag = FALSE, combined;
-
-       do
+       bool flag = FALSE;
+       bool is_first_combination = TRUE;
+       bool combined = TRUE;
+       while (is_first_combination || combined)
        {
+               is_first_combination = FALSE;
                combined = FALSE;
 
                /* Combine the pack (backwards) */
-               for (i = INVEN_PACK; i > 0; i--)
+               for (int i = INVEN_PACK; i > 0; i--)
                {
+                       object_type *o_ptr;
                        o_ptr = &owner_ptr->inventory_list[i];
 
                        /* Skip empty items */
                        if (!o_ptr->k_idx) continue;
 
                        /* Scan the items above that item */
-                       for (j = 0; j < i; j++)
+                       for (int j = 0; j < i; j++)
                        {
-                               int max_num;
-
+                               object_type *j_ptr;
                                j_ptr = &owner_ptr->inventory_list[j];
 
                                /* Skip empty items */
@@ -5252,68 +5229,69 @@ void combine_pack(player_type *owner_ptr)
                                 * Get maximum number of the stack if these
                                 * are similar, get zero otherwise.
                                 */
-                               max_num = object_similar_part(j_ptr, o_ptr);
+                               int max_num = object_similar_part(j_ptr, o_ptr);
 
                                /* Can we (partialy) drop "o_ptr" onto "j_ptr"? */
-                               if (max_num && j_ptr->number < max_num)
-                               {
-                                       if (o_ptr->number + j_ptr->number <= max_num)
-                                       {
-                                               /* Take note */
-                                               flag = TRUE;
+                               bool is_max = (max_num != 0) && (j_ptr->number < max_num);
+                               if (!is_max) continue;
 
-                                               /* Add together the item counts */
-                                               object_absorb(j_ptr, o_ptr);
+                               if (o_ptr->number + j_ptr->number <= max_num)
+                               {
+                                       /* Take note */
+                                       flag = TRUE;
 
-                                               /* One object is gone */
-                                               owner_ptr->inven_cnt--;
+                                       /* Add together the item counts */
+                                       object_absorb(j_ptr, o_ptr);
 
-                                               /* Slide everything down */
-                                               for (k = i; k < INVEN_PACK; k++)
-                                               {
-                                                       /* Structure copy */
-                                                       owner_ptr->inventory_list[k] = owner_ptr->inventory_list[k + 1];
-                                               }
+                                       /* One object is gone */
+                                       owner_ptr->inven_cnt--;
 
-                                               /* Erase the "final" slot */
-                                               object_wipe(&owner_ptr->inventory_list[k]);
-                                       }
-                                       else
+                                       /* Slide everything down */
+                                       int k;
+                                       for (k = i; k < INVEN_PACK; k++)
                                        {
-                                               int old_num = o_ptr->number;
-                                               int remain = j_ptr->number + o_ptr->number - max_num;
+                                               /* Structure copy */
+                                               owner_ptr->inventory_list[k] = owner_ptr->inventory_list[k + 1];
+                                       }
+
+                                       /* Erase the "final" slot */
+                                       object_wipe(&owner_ptr->inventory_list[k]);
+                               }
+                               else
+                               {
+                                       int old_num = o_ptr->number;
+                                       int remain = j_ptr->number + o_ptr->number - max_num;
 #if 0
-                                               o_ptr->number -= remain;
+                                       o_ptr->number -= remain;
 #endif
-                                               /* Add together the item counts */
-                                               object_absorb(j_ptr, o_ptr);
+                                       /* Add together the item counts */
+                                       object_absorb(j_ptr, o_ptr);
 
-                                               o_ptr->number = remain;
+                                       o_ptr->number = remain;
 
-                                               /* Hack -- if rods are stacking, add the pvals (maximum timeouts) and current timeouts together. -LM- */
-                                               if (o_ptr->tval == TV_ROD)
-                                               {
-                                                       o_ptr->pval = o_ptr->pval * remain / old_num;
-                                                       o_ptr->timeout = o_ptr->timeout * remain / old_num;
-                                               }
+                                       /* Hack -- if rods are stacking, add the pvals (maximum timeouts) and current timeouts together. -LM- */
+                                       if (o_ptr->tval == TV_ROD)
+                                       {
+                                               o_ptr->pval = o_ptr->pval * remain / old_num;
+                                               o_ptr->timeout = o_ptr->timeout * remain / old_num;
+                                       }
 
-                                               /* Hack -- if wands are stacking, combine the charges. -LM- */
-                                               if (o_ptr->tval == TV_WAND)
-                                               {
-                                                       o_ptr->pval = o_ptr->pval * remain / old_num;
-                                               }
+                                       /* Hack -- if wands are stacking, combine the charges. -LM- */
+                                       if (o_ptr->tval == TV_WAND)
+                                       {
+                                               o_ptr->pval = o_ptr->pval * remain / old_num;
                                        }
+                               }
 
-                                       owner_ptr->window |= (PW_INVEN);
+                               owner_ptr->window |= (PW_INVEN);
 
-                                       /* Take note */
-                                       combined = TRUE;
+                               /* Take note */
+                               combined = TRUE;
 
-                                       break;
-                               }
+                               break;
                        }
                }
-       } while (combined);
+       }
 
        if (flag) msg_print(_("ザックの中のアイテムをまとめ直した。", "You combine some items in your pack."));
 }
@@ -5327,7 +5305,7 @@ void combine_pack(player_type *owner_ptr)
  * @details
  * Note special handling of the "overflow" slot
  */
-void reorder_pack(void)
+void reorder_pack(player_type *owner_ptr)
 {
        int             i, j, k;
        s32b            o_value;
@@ -5336,14 +5314,13 @@ void reorder_pack(void)
        object_type *o_ptr;
        bool            flag = FALSE;
 
-
        /* Re-order the pack (forwards) */
        for (i = 0; i < INVEN_PACK; i++)
        {
                /* Mega-Hack -- allow "proper" over-flow */
-               if ((i == INVEN_PACK) && (p_ptr->inven_cnt == INVEN_PACK)) break;
+               if ((i == INVEN_PACK) && (owner_ptr->inven_cnt == INVEN_PACK)) break;
 
-               o_ptr = &p_ptr->inventory_list[i];
+               o_ptr = &owner_ptr->inventory_list[i];
 
                /* Skip empty slots */
                if (!o_ptr->k_idx) continue;
@@ -5354,7 +5331,7 @@ void reorder_pack(void)
                /* Scan every occupied slot */
                for (j = 0; j < INVEN_PACK; j++)
                {
-                       if (object_sort_comp(o_ptr, o_value, &p_ptr->inventory_list[j])) break;
+                       if (object_sort_comp(o_ptr, o_value, &owner_ptr->inventory_list[j])) break;
                }
 
                /* Never move down */
@@ -5365,19 +5342,19 @@ void reorder_pack(void)
                q_ptr = &forge;
 
                /* Save a copy of the moving item */
-               object_copy(q_ptr, &p_ptr->inventory_list[i]);
+               object_copy(q_ptr, &owner_ptr->inventory_list[i]);
 
                /* Slide the objects */
                for (k = i; k > j; k--)
                {
                        /* Slide the item */
-                       object_copy(&p_ptr->inventory_list[k], &p_ptr->inventory_list[k - 1]);
+                       object_copy(&owner_ptr->inventory_list[k], &owner_ptr->inventory_list[k - 1]);
                }
 
                /* Insert the moving item */
-               object_copy(&p_ptr->inventory_list[j], q_ptr);
+               object_copy(&owner_ptr->inventory_list[j], q_ptr);
 
-               p_ptr->window |= (PW_INVEN);
+               owner_ptr->window |= (PW_INVEN);
        }
 
        if (flag) msg_print(_("ザックの中のアイテムを並べ直した。", "You reorder some items in your pack."));
@@ -5393,7 +5370,7 @@ void reorder_pack(void)
  * @details
  * Include list of usable spells for readible books
  */
-void display_koff(KIND_OBJECT_IDX k_idx)
+void display_koff(player_type *owner_ptr, KIND_OBJECT_IDX k_idx)
 {
        int y;
 
@@ -5404,7 +5381,6 @@ void display_koff(KIND_OBJECT_IDX k_idx)
 
        GAME_TEXT o_name[MAX_NLEN];
 
-
        /* Erase the window */
        for (y = 0; y < Term->hgt; y++)
        {
@@ -5428,37 +5404,35 @@ void display_koff(KIND_OBJECT_IDX k_idx)
        use_realm = tval2realm(q_ptr->tval);
 
        /* Warriors are illiterate */
-       if (p_ptr->realm1 || p_ptr->realm2)
+       if (owner_ptr->realm1 || owner_ptr->realm2)
        {
-               if ((use_realm != p_ptr->realm1) && (use_realm != p_ptr->realm2)) return;
+               if ((use_realm != owner_ptr->realm1) && (use_realm != owner_ptr->realm2)) return;
        }
        else
        {
-               if ((p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE)) return;
+               if ((owner_ptr->pclass != CLASS_SORCERER) && (owner_ptr->pclass != CLASS_RED_MAGE)) return;
                if (!is_magic(use_realm)) return;
-               if ((p_ptr->pclass == CLASS_RED_MAGE) && (use_realm != REALM_ARCANE) && (sval > 1)) return;
+               if ((owner_ptr->pclass == CLASS_RED_MAGE) && (use_realm != REALM_ARCANE) && (sval > 1)) return;
        }
 
        /* Display spells in readible books */
-       {
-               int     spell = -1;
-               int     num = 0;
-               SPELL_IDX    spells[64];
+       int     spell = -1;
+       int     num = 0;
+       SPELL_IDX    spells[64];
 
-               /* Extract spells */
-               for (spell = 0; spell < 32; spell++)
+       /* Extract spells */
+       for (spell = 0; spell < 32; spell++)
+       {
+               /* Check for this spell */
+               if (fake_spell_flags[sval] & (1L << spell))
                {
-                       /* Check for this spell */
-                       if (fake_spell_flags[sval] & (1L << spell))
-                       {
-                               /* Collect this spell */
-                               spells[num++] = spell;
-                       }
+                       /* Collect this spell */
+                       spells[num++] = spell;
                }
-
-               /* Print spells */
-               print_spells(p_ptr, 0, spells, num, 2, 0, use_realm);
        }
+
+       /* Print spells */
+       print_spells(owner_ptr, 0, spells, num, 2, 0, use_realm);
 }
 
 
@@ -5471,15 +5445,11 @@ void display_koff(KIND_OBJECT_IDX k_idx)
  */
 void torch_flags(object_type *o_ptr, BIT_FLAGS *flgs)
 {
-       if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH))
-       {
-               if (o_ptr->xtra4 > 0)
-               {
-                       add_flag(flgs, TR_BRAND_FIRE);
-                       add_flag(flgs, TR_KILL_UNDEAD);
-                       add_flag(flgs, TR_THROW);
-               }
-       }
+       if ((o_ptr->tval != TV_LITE) || (o_ptr->sval != SV_LITE_TORCH)) return;
+       if (o_ptr->xtra4 <= 0) return;
+       add_flag(flgs, TR_BRAND_FIRE);
+       add_flag(flgs, TR_KILL_UNDEAD);
+       add_flag(flgs, TR_THROW);
 }
 
 
@@ -5493,14 +5463,10 @@ void torch_flags(object_type *o_ptr, BIT_FLAGS *flgs)
  */
 void torch_dice(object_type *o_ptr, DICE_NUMBER *dd, DICE_SID *ds)
 {
-       if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH))
-       {
-               if (o_ptr->xtra4 > 0)
-               {
-                       (*dd) = 1;
-                       (*ds) = 6;
-               }
-       }
+       if ((o_ptr->tval != TV_LITE) || (o_ptr->sval != SV_LITE_TORCH)) return;
+       if (o_ptr->xtra4 <= 0) return;
+       (*dd) = 1;
+       (*ds) = 6;
 }
 
 
@@ -5512,11 +5478,9 @@ void torch_dice(object_type *o_ptr, DICE_NUMBER *dd, DICE_SID *ds)
  */
 void torch_lost_fuel(object_type *o_ptr)
 {
-       if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH))
-       {
-               o_ptr->xtra4 -= (FUEL_TORCH / 25);
-               if (o_ptr->xtra4 < 0) o_ptr->xtra4 = 0;
-       }
+       if ((o_ptr->tval != TV_LITE) || (o_ptr->sval != SV_LITE_TORCH)) return;
+       o_ptr->xtra4 -= (FUEL_TORCH / 25);
+       if (o_ptr->xtra4 < 0) o_ptr->xtra4 = 0;
 }