いう問題があったため, アイテムに "プレイヤーが触った" という意味のフ
ラグOM_TOUCHEDを持たせ, これをチェックすることで上記の問題を修正.
フラグOM_FOUNDは以下のいずれかの時にそのアイテムに立てられる.
* プレイヤーがザックに入れた, または装備した.
* プレイヤーが鑑定した.
これを用い, ダンジョンのアイテムが鑑定されていても, OM_FOUNDがないア
イテムは計算するように修正. 武器等で鑑定されていないアイテムは1度プレ
イヤーがザックに入れてから床に置いても再び計算対象となる.
セーブデータをロードした直後のダンジョンでは鑑定済みのエゴアイテム等
で雰囲気が高く評価される場合があるが, そのダンジョンだけなので特に
セーブデータ変換は行わない.
object_desc(o_name, q_ptr, OD_NAME_ONLY);
q_ptr->held_m_idx = 0;
object_desc(o_name, q_ptr, OD_NAME_ONLY);
q_ptr->held_m_idx = 0;
+ q_ptr->marked = OM_TOUCHED;
m_ptr->hold_o_idx = q_ptr->next_o_idx;
q_ptr->next_o_idx = 0;
#ifdef JP
m_ptr->hold_o_idx = q_ptr->next_o_idx;
q_ptr->next_o_idx = 0;
#ifdef JP
object_copy(o_ptr, q_ptr);
/* Forget mark */
object_copy(o_ptr, q_ptr);
/* Forget mark */
+ o_ptr->marked &= OM_TOUCHED;
/* Forget location */
o_ptr->iy = o_ptr->ix = 0;
/* Forget location */
o_ptr->iy = o_ptr->ix = 0;
/* Wear the new stuff */
object_copy(o_ptr, q_ptr);
/* Wear the new stuff */
object_copy(o_ptr, q_ptr);
+ /* Player touches it */
+ o_ptr->marked |= OM_TOUCHED;
+
/* Increase the weight */
p_ptr->total_weight += q_ptr->weight;
/* Increase the weight */
p_ptr->total_weight += q_ptr->weight;
#define OM_NOMSG 0x02 /* temporary flag to suppress messages */
#define OM_NO_QUERY 0x04 /* Query for auto-pick was already answered as 'No' */
#define OM_AUTODESTROY 0x08 /* Destroy later to avoid illegal inventry shift */
#define OM_NOMSG 0x02 /* temporary flag to suppress messages */
#define OM_NO_QUERY 0x04 /* Query for auto-pick was already answered as 'No' */
#define OM_AUTODESTROY 0x08 /* Destroy later to avoid illegal inventry shift */
+#define OM_TOUCHED 0x10 /* Object was touched by player */
/* "Inscribe" it */
o_ptr->feeling = feel;
/* "Inscribe" it */
o_ptr->feeling = feel;
+ /* Player touches it */
+ o_ptr->marked |= OM_TOUCHED;
+
/* Combine / Reorder the pack (later) */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
/* Combine / Reorder the pack (later) */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
if (!o_ptr->k_idx) continue;
/* Skip known objects */
if (!o_ptr->k_idx) continue;
/* Skip known objects */
- if (object_is_known(o_ptr)) continue;
+ if (object_is_known(o_ptr))
+ {
+ /* Touched? */
+ if (o_ptr->marked & OM_TOUCHED) continue;
+ }
/* Skip pseudo-known objects */
if (o_ptr->ident & IDENT_SENSE) continue;
/* Skip pseudo-known objects */
if (o_ptr->ident & IDENT_SENSE) continue;
/* Wield equipment */
if (n >= INVEN_RARM)
{
/* Wield equipment */
if (n >= INVEN_RARM)
{
+ /* Player touches it */
+ q_ptr->marked |= OM_TOUCHED;
+
/* Copy object */
object_copy(&inventory[n], q_ptr);
/* Copy object */
object_copy(&inventory[n], q_ptr);
/* Get a slot */
n = slot++;
/* Get a slot */
n = slot++;
+ /* Player touches it */
+ q_ptr->marked |= OM_TOUCHED;
+
/* Copy object */
object_copy(&inventory[n], q_ptr);
/* Copy object */
object_copy(&inventory[n], q_ptr);
+ j_ptr->marked = OM_TOUCHED;
/* Memorize monster */
j_ptr->held_m_idx = m_idx;
/* Memorize monster */
j_ptr->held_m_idx = m_idx;
excise_object_idx(this_o_idx);
/* Forget mark */
excise_object_idx(this_o_idx);
/* Forget mark */
+ o_ptr->marked &= OM_TOUCHED;
/* Forget location */
o_ptr->iy = o_ptr->ix = 0;
/* Forget location */
o_ptr->iy = o_ptr->ix = 0;
/* Forget location */
j_ptr->iy = j_ptr->ix = 0;
/* Forget location */
j_ptr->iy = j_ptr->ix = 0;
- /* No longer marked */
- j_ptr->marked = 0;
+ /* Player touches it, and no longer marked */
+ j_ptr->marked = OM_TOUCHED;
/* Increase the weight */
p_ptr->total_weight += (j_ptr->number * j_ptr->weight);
/* Increase the weight */
p_ptr->total_weight += (j_ptr->number * j_ptr->weight);
object_aware(o_ptr);
object_known(o_ptr);
object_aware(o_ptr);
object_known(o_ptr);
+ /* Player touches it */
+ o_ptr->marked |= OM_TOUCHED;
+
/* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);
/* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);