/* * Sense the inventory */ public static void sense_inventory() { int i; //char o_name[80]; string o_name = null; uint rate; /* No ID when confused in a bad state */ if (Misc.p_ptr.timed[(int)Timed_Effect.CONFUSED] != 0) { return; } /* Notice some things after a while */ if (Misc.turn >= (object_last_wield + 3000)) { object_notice_after_time(); object_last_wield = 0; } /* Get improvement rate */ if (Misc.p_ptr.player_has(Misc.PF.PSEUDO_ID_IMPROV.value)) { rate = (uint)(Misc.p_ptr.Class.sense_base / (Misc.p_ptr.lev * Misc.p_ptr.lev + Misc.p_ptr.Class.sense_div)); } else { rate = (uint)(Misc.p_ptr.Class.sense_base / (Misc.p_ptr.lev + Misc.p_ptr.Class.sense_div)); } if (!Random.one_in_((int)rate)) { return; } /* Check everything */ for (i = 0; i < Misc.ALL_INVEN_TOTAL; i++) { string text = null; Object o_ptr = Misc.p_ptr.inventory[i]; obj_pseudo_t feel; bool cursed; bool okay = false; /* Skip empty slots */ if (o_ptr.kind == null) { continue; } /* Valid "tval" codes */ switch (o_ptr.tval) { case TVal.TV_SHOT: case TVal.TV_ARROW: case TVal.TV_BOLT: case TVal.TV_BOW: case TVal.TV_DIGGING: case TVal.TV_HAFTED: case TVal.TV_POLEARM: case TVal.TV_SWORD: case TVal.TV_BOOTS: case TVal.TV_GLOVES: case TVal.TV_HELM: case TVal.TV_CROWN: case TVal.TV_SHIELD: case TVal.TV_CLOAK: case TVal.TV_SOFT_ARMOR: case TVal.TV_HARD_ARMOR: case TVal.TV_DRAG_ARMOR: { okay = true; break; } } /* Skip non-sense machines */ if (!okay) { continue; } /* It is known, no information needed */ if (o_ptr.is_known()) { continue; } /* It has already been sensed, do not sense it again */ if (o_ptr.was_sensed()) { /* Small chance of wielded, sensed items getting complete ID */ if (o_ptr.artifact == null && (i >= Misc.INVEN_WIELD) && Random.one_in_(1000)) { throw new NotImplementedException(); //do_ident_item(i, o_ptr); } continue; } /* Occasional failure on inventory items */ if ((i < Misc.INVEN_WIELD) && Random.one_in_(5)) { continue; } /* Sense the object */ o_ptr.notice_sensing(); cursed = o_ptr.notice_curses(); /* Get the feeling */ feel = o_ptr.pseudo(); /* Stop everything */ Cave.disturb(Misc.p_ptr, 0, 0); if (cursed) { text = "cursed"; } else { text = Misc.inscrip_text[(int)feel]; } o_name = o_ptr.object_desc(Detail.BASE); /* Average pseudo-ID means full ID */ if (feel == obj_pseudo_t.INSCRIP_AVERAGE) { o_ptr.notice_everything(); Utilities.msgt(Message_Type.MSG_PSEUDOID, "You feel the %s (%c) %s %s average...", o_name, index_to_label(i), ((i >= Misc.INVEN_WIELD) ? "you are using" : "in your pack"), ((o_ptr.number == 1) ? "is" : "are")); } else { if (i >= Misc.INVEN_WIELD) { Utilities.msgt(Message_Type.MSG_PSEUDOID, "You feel the %s (%c) you are %s %s %s...", o_name, index_to_label(i), describe_use(i), ((o_ptr.number == 1) ? "is" : "are"), text); } else { Utilities.msgt(Message_Type.MSG_PSEUDOID, "You feel the %s (%c) in your pack %s %s...", o_name, index_to_label(i), ((o_ptr.number == 1) ? "is" : "are"), text); } } /* Set squelch flag as appropriate */ if (i < Misc.INVEN_WIELD) { Misc.p_ptr.notice |= Misc.PN_SQUELCH; } /* Combine / Reorder the pack (later) */ Misc.p_ptr.notice |= (Misc.PN_COMBINE | Misc.PN_REORDER | Misc.PN_SORT_QUIVER); /* Redraw stuff */ Misc.p_ptr.redraw |= (Misc.PR_INVEN | Misc.PR_EQUIP); } }