*/
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
*/
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))
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;
}
}
x = j_ptr->ix;
lite_spot(y, x);
}
- object_wipe(j_ptr);
+ object_wipe(j_ptr);
floor_ptr->o_cnt--;
}
}
/* 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);
}
*/
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);
}
*/
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;
}
*/
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];
}
}
- 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)))
if (value <= 0L) break;
}
}
- return (byte)i;
+
+ return (byte)j;
}
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;
}
}
/* 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;
}
/* Handle failure */
- if (!k_idx) return (FALSE);
+ if (!k_idx) return FALSE;
/* Prepare the object */
object_prep(j_ptr, k_idx);
j_ptr->pval = (base + (8L * randint1(base)) + randint1(8));
/* Success */
- return (TRUE);
+ return TRUE;
}
* @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);
}
-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);
}
* @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;
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);
}
* @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;
/* 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;
}
* @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;
* @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);
* @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;
* @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;
/* 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 プレーヤーへの参照ポインタ
*/
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
owner_ptr->window |= (PW_INVEN);
/* Return the slot */
- return (i);
+ return i;
}
* 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;
/* 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 */
}
/* 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);
msg_format("%s %s (%c).", act, o_name, index_to_label(slot));
#endif
-
- /* Return slot */
- return (slot);
+ return slot;
}
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];
/* 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);
}
*/
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 */
* 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."));
}
* @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;
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;
/* 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 */
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."));
* @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;
GAME_TEXT o_name[MAX_NLEN];
-
/* Erase the window */
for (y = 0; y < Term->hgt; y++)
{
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);
}
*/
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);
}
*/
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;
}
*/
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;
}