Attached Files |
fix-itemslot.patch [^] (22,809 bytes) 2014-12-13 20:54 [Show Content] [Hide Content]diff --git crawl-ref/source/end.cc crawl-ref/source/end.cc
index a0c449d..0190d61 100644
--- crawl-ref/source/end.cc
+++ crawl-ref/source/end.cc
@@ -222,15 +222,8 @@
for (int i = 0; i < ENDOFPACK; i++)
if (you.inv[i].defined() && item_type_unknown(you.inv[i]))
add_inscription(you.inv[i], "unknown");
-
- for (int i = 0; i < ENDOFPACK; i++)
- {
- if (!you.inv[i].defined())
- continue;
- set_ident_flags(you.inv[i], ISFLAG_IDENT_MASK);
- set_ident_type(you.inv[i], ID_KNOWN_TYPE);
- }
-
+
+ identify_inventory();
_delete_files();
// death message
diff --git crawl-ref/source/godpassive.cc crawl-ref/source/godpassive.cc
index 69cd541..700b27c 100644
--- crawl-ref/source/godpassive.cc
+++ crawl-ref/source/godpassive.cc
@@ -437,23 +437,23 @@
ided |= ISFLAG_KNOW_TYPE;
}
}
-
+ item_def *newitem = &item;
if (ided & ~old_ided)
{
if (ided & ISFLAG_KNOW_TYPE)
- set_ident_type(item, ID_KNOWN_TYPE);
- set_ident_flags(item, ided);
+ newitem = set_ident_type(item, ID_KNOWN_TYPE, false, true, false);
+ set_ident_flags(*newitem, ided);
- if (item.props.exists("needs_autopickup") && is_useless_item(item))
- item.props.erase("needs_autopickup");
+ if (newitem->props.exists("needs_autopickup") && is_useless_item(*newitem))
+ newitem->props.erase("needs_autopickup");
- if (&item == you.weapon())
+ if (newitem == you.weapon())
you.wield_change = true;
if (!silent)
- mprf_nocap("%s", item.name(DESC_INVENTORY_EQUIP).c_str());
+ mprf_nocap("%s", newitem->name(DESC_INVENTORY_EQUIP).c_str());
- seen_item(item);
+ seen_item(*newitem);
return true;
}
diff --git crawl-ref/source/invent.cc crawl-ref/source/invent.cc
index bf61aee..cf17685 100644
--- crawl-ref/source/invent.cc
+++ crawl-ref/source/invent.cc
@@ -2198,3 +2198,15 @@
list_charging_evokers(evokers);
return evokers[item.sub_type] == &item;
}
+
+void identify_inventory()
+{
+ for (int i = 0; i < ENDOFPACK; i++)
+ {
+ if (!you.inv[i].defined())
+ continue;
+ // identifying items without moving them in inventory
+ set_ident_type(you.inv[i], ID_KNOWN_TYPE, false, false);
+ set_ident_flags(you.inv[i], ISFLAG_IDENT_MASK);
+ }
+}
\ No newline at end of file
diff --git crawl-ref/source/invent.h crawl-ref/source/invent.h
index 0d47961..75323f0 100644
--- crawl-ref/source/invent.h
+++ crawl-ref/source/invent.h
@@ -217,6 +217,7 @@
unsigned char get_invent(int invent_type, bool redraw = true);
bool in_inventory(const item_def &i);
+void identify_inventory();
const char *item_class_name(int type, bool terse = false);
const char *item_slot_name(equipment_type type);
diff --git crawl-ref/source/item_use.cc crawl-ref/source/item_use.cc
index 283f25f..bdaf581 100644
--- crawl-ref/source/item_use.cc
+++ crawl-ref/source/item_use.cc
@@ -1922,32 +1922,32 @@
if (wasteful)
wand.used_count++;
}
-
+ item_def *newitem = &wand;
// Identify if unknown.
if (!alreadyknown)
{
- set_ident_type(wand, ID_KNOWN_TYPE);
- mprf_nocap("%s", wand.name(DESC_INVENTORY_EQUIP).c_str());
+ newitem = set_ident_type(wand, ID_KNOWN_TYPE);
+ mprf_nocap("%s", newitem->name(DESC_INVENTORY_EQUIP).c_str());
}
- if (item_type_known(wand)
- && (item_ident(wand, ISFLAG_KNOW_PLUSES)
+ if (item_type_known(*newitem)
+ && (item_ident(*newitem, ISFLAG_KNOW_PLUSES)
|| you.skill_rdiv(SK_EVOCATIONS) > random2(27)))
{
- if (!item_ident(wand, ISFLAG_KNOW_PLUSES))
+ if (!item_ident(*newitem, ISFLAG_KNOW_PLUSES))
{
mpr("Your skill with magical items lets you calculate "
"the power of this device...");
}
mprf("This wand has %d charge%s left.",
- wand.plus, wand.plus == 1 ? "" : "s");
+ newitem->plus, newitem->plus == 1 ? "" : "s");
- set_ident_flags(wand, ISFLAG_KNOW_PLUSES);
+ set_ident_flags(*newitem, ISFLAG_KNOW_PLUSES);
}
// Mark as empty if necessary.
- if (wand.charges == 0 && wand.flags & ISFLAG_KNOW_PLUSES)
- wand.used_count = ZAPCOUNT_EMPTY;
+ if (newitem->charges == 0 && newitem->flags & ISFLAG_KNOW_PLUSES)
+ newitem->used_count = ZAPCOUNT_EMPTY;
practise(EX_DID_ZAP_WAND);
count_action(CACT_EVOKE, EVOC_WAND);
@@ -2114,8 +2114,7 @@
return;
}
-
- if (!quaff_potion(potion))
+ if (!quaff_potion(potion, &slot))
return;
if (!alreadyknown && dangerous)
@@ -2450,22 +2449,21 @@
if (alreadyknown)
mpr(pre_msg);
+ item_def* newitem = set_ident_type(item, ID_KNOWN_TYPE, false, true, false);
+ set_ident_flags(*newitem, ISFLAG_IDENT_MASK);
- set_ident_type(item, ID_KNOWN_TYPE);
- set_ident_flags(item, ISFLAG_IDENT_MASK);
-
- if (is_deck(item) && !top_card_is_known(item))
+ if (is_deck(*newitem) && !top_card_is_known(*newitem))
deck_identify_first(item_slot);
// Output identified item.
- mprf_nocap("%s", item.name(DESC_INVENTORY_EQUIP).c_str());
+ mprf_nocap("%s", newitem->name(DESC_INVENTORY_EQUIP).c_str());
if (item_slot == you.equip[EQ_WEAPON])
you.wield_change = true;
- if (item.base_type == OBJ_JEWELLERY
- && item.sub_type == AMU_INACCURACY
- && item_slot == you.equip[EQ_AMULET]
- && !item_known_cursed(item))
+ if (newitem->base_type == OBJ_JEWELLERY
+ && newitem->sub_type == AMU_INACCURACY
+ && newitem->link == you.equip[EQ_AMULET]
+ && !item_known_cursed(*newitem))
{
learned_something_new(HINT_INACCURACY);
}
@@ -2903,6 +2901,7 @@
void read_scroll(int item_slot)
{
item_def& scroll = you.inv[item_slot];
+ item_def *newitem = &scroll;
const scroll_type which_scroll = static_cast<scroll_type>(scroll.sub_type);
const int prev_quantity = scroll.quantity;
const bool alreadyknown = item_type_known(scroll);
@@ -2958,7 +2957,7 @@
mpr("This is a scroll of acquirement!");
more();
// Identify it early in case the player checks the '\' screen.
- set_ident_type(scroll, ID_KNOWN_TYPE);
+ newitem = set_ident_type(scroll, ID_KNOWN_TYPE);
run_uncancel(UNC_ACQUIREMENT, AQ_SCROLL);
break;
@@ -3070,7 +3069,7 @@
mpr("It is a scroll of identify.");
more();
// Do this here so it doesn't turn up in the ID menu.
- set_ident_type(scroll, ID_KNOWN_TYPE);
+ newitem = set_ident_type(scroll, ID_KNOWN_TYPE);
}
cancel_scroll = !_identify(alreadyknown, pre_succ_msg);
break;
@@ -3141,15 +3140,17 @@
if (cancel_scroll)
you.turn_is_over = false;
+
+ // acquirement and identify were already identified above and could have been moved in inventory
+ // we cannot use "scroll" here as it may refer to another item
+ newitem = set_ident_type(*newitem, ID_KNOWN_TYPE);
+ set_ident_flags(*newitem, ISFLAG_KNOW_TYPE); // for notes
- set_ident_type(scroll, ID_KNOWN_TYPE);
- set_ident_flags(scroll, ISFLAG_KNOW_TYPE); // for notes
-
- string scroll_name = scroll.name(DESC_QUALNAME).c_str();
+ string scroll_name = newitem->name(DESC_QUALNAME).c_str();
if (!cancel_scroll)
{
- dec_inv_item_quantity(item_slot, 1);
+ dec_inv_item_quantity(newitem->link, 1);
count_action(CACT_USE, OBJ_SCROLLS);
}
@@ -3162,7 +3163,7 @@
&& which_scroll != SCR_RECHARGING)
{
mprf("It %s a %s.",
- you.inv[item_slot].quantity < prev_quantity ? "was" : "is",
+ newitem->quantity < prev_quantity ? "was" : "is",
scroll_name.c_str());
}
diff --git crawl-ref/source/itemname.cc crawl-ref/source/itemname.cc
index 38bc59b..8847024 100644
--- crawl-ref/source/itemname.cc
+++ crawl-ref/source/itemname.cc
@@ -2045,35 +2045,37 @@
return you.type_ids[item.base_type][item.sub_type] != ID_UNKNOWN_TYPE;
}
-void set_ident_type(item_def &item, item_type_id_state_type setting,
- bool force)
+item_def* set_ident_type(item_def &item, item_type_id_state_type setting,
+ bool force, bool auto_assign_items, bool auto_assign_verbose)
{
if (is_artefact(item) || crawl_state.game_is_arena())
- return;
+ return &item;
if (!set_ident_type(item.base_type, item.sub_type, setting, force))
- return;
-
+ return &item;
+ item_def *newitem = &item;
if (in_inventory(item))
{
shopping_list.cull_identical_items(item);
if (setting == ID_KNOWN_TYPE)
item_skills(item, you.start_train);
- auto_assign_item_slot(item);
+ if (auto_assign_items)
+ newitem = auto_assign_item_slot(item, auto_assign_verbose);
}
if (setting == ID_KNOWN_TYPE && notes_are_active()
- && is_interesting_item(item)
- && !(item.flags & (ISFLAG_NOTED_ID | ISFLAG_NOTED_GET)))
+ && is_interesting_item(*newitem)
+ && !(newitem->flags & (ISFLAG_NOTED_ID | ISFLAG_NOTED_GET)))
{
// Make a note of it.
take_note(Note(NOTE_ID_ITEM, 0, 0, item.name(DESC_A).c_str(),
- origin_desc(item).c_str()));
+ origin_desc(*newitem).c_str()));
// Sometimes (e.g. shops) you can ID an item before you get it;
// don't note twice in those cases.
- item.flags |= (ISFLAG_NOTED_ID | ISFLAG_NOTED_GET);
+ newitem->flags |= (ISFLAG_NOTED_ID | ISFLAG_NOTED_GET);
}
+ return newitem;
}
bool set_ident_type(object_class_type basetype, int subtype,
diff --git crawl-ref/source/itemname.h crawl-ref/source/itemname.h
index 93e7b26..753faf9 100644
--- crawl-ref/source/itemname.h
+++ crawl-ref/source/itemname.h
@@ -122,8 +122,8 @@
item_type_id_state_type get_ident_type(const item_def &item);
item_type_id_state_type get_ident_type(object_class_type basetype,
int subtype);
-void set_ident_type(item_def &item, item_type_id_state_type setting,
- bool force = false);
+item_def* set_ident_type(item_def &item, item_type_id_state_type setting,
+ bool force = false, bool auto_assign_items = true, bool auto_assign_verbose = true);
bool set_ident_type(object_class_type basetype, int subtype,
item_type_id_state_type setting, bool force = false);
void pack_item_identify_message(int base_type, int sub_type);
diff --git crawl-ref/source/items.cc crawl-ref/source/items.cc
index e0d6d75..cbc0068 100644
--- crawl-ref/source/items.cc
+++ crawl-ref/source/items.cc
@@ -1861,9 +1861,10 @@
* Maybe move an item to the slot given by the item_slot option.
*
* @param item the item to be checked.
- * @returns whether the item was moved anywhere.
+ * @param verbose true if moved items should be declared
+ * @returns new item
*/
-bool auto_assign_item_slot(item_def& item)
+item_def* auto_assign_item_slot(item_def& item, bool verbose)
{
int newslot = -1;
// check to see whether we've chosen an automatic label:
@@ -1877,13 +1878,18 @@
newslot = letter_to_index(i);
break;
}
- if (newslot != -1 && newslot != item.link)
+ if (newslot != -1)
{
- swap_inv_slots(item.link, newslot, true);
- return true;
+ if(newslot != item.link)
+ {
+ swap_inv_slots(item.link, newslot, verbose);
+ return &you.inv[newslot];
+ }
+ // item is already in required slot
+ return &item;
}
}
- return false;
+ return &item;
}
/**
@@ -1918,35 +1924,36 @@
message_given = true;
god_id_item(item);
+ item_def *newitem = &item;
if (item.base_type == OBJ_WANDS)
- set_ident_type(item, ID_KNOWN_TYPE);
- maybe_identify_base_type(item);
- if (item.base_type == OBJ_BOOKS)
- maybe_id_book(item, true);
+ newitem = set_ident_type(item, ID_KNOWN_TYPE);
+ maybe_identify_base_type(*newitem);
+ if (newitem->base_type == OBJ_BOOKS)
+ maybe_id_book(*newitem, true);
- note_inscribe_item(item);
+ note_inscribe_item(*newitem);
// avoid blood potion timer/stack size mismatch
if (is_perishable_stack(it) && quant_got != it.quantity)
- remove_newest_perishable_item(item);
+ remove_newest_perishable_item(*newitem);
if (!quiet && !message_given)
{
- mprf_nocap("%s", get_menu_colour_prefix_tags(you.inv[freeslot],
+ mprf_nocap("%s", get_menu_colour_prefix_tags(*newitem,
DESC_INVENTORY).c_str());
}
if (crawl_state.game_is_hints())
{
- taken_new_item(item.base_type);
- if (is_artefact(item) || get_equip_desc(item) != ISFLAG_NO_DESC)
+ taken_new_item(newitem->base_type);
+ if (is_artefact(*newitem) || get_equip_desc(*newitem) != ISFLAG_NO_DESC)
learned_something_new(HINT_SEEN_RANDART);
}
- you.m_quiver->on_inv_quantity_changed(freeslot, quant_got);
- you.last_pickup[item.link] = quant_got;
- item_skills(item, you.start_train);
+ you.m_quiver->on_inv_quantity_changed(newitem->link, quant_got);
+ you.last_pickup[newitem->link] = quant_got;
+ item_skills(*newitem, you.start_train);
- return freeslot;
+ return newitem->link;
}
/**
@@ -4957,18 +4964,18 @@
item.props["needs_autopickup"] = true;
}
- set_ident_type(item, ID_KNOWN_TYPE);
+ item_def *newitem = set_ident_type(item, ID_KNOWN_TYPE);
- if (item.props.exists("needs_autopickup") && is_useless_item(item))
- item.props.erase("needs_autopickup");
+ if (newitem->props.exists("needs_autopickup") && is_useless_item(*newitem))
+ newitem->props.erase("needs_autopickup");
- const string class_name = item.base_type == OBJ_JEWELLERY ?
- item_base_name(item) :
- item_class_name(item.base_type, true);
+ const string class_name = newitem->base_type == OBJ_JEWELLERY ?
+ item_base_name(*newitem) :
+ item_class_name(newitem->base_type, true);
mprf("You have identified the last %s.", class_name.c_str());
- if (in_inventory(item))
- mprf_nocap("%s", item.name(DESC_INVENTORY_EQUIP).c_str());
+ if (in_inventory(*newitem))
+ mprf_nocap("%s", newitem->name(DESC_INVENTORY_EQUIP).c_str());
}
diff --git crawl-ref/source/items.h crawl-ref/source/items.h
index 25838ec..3f68d5c 100644
--- crawl-ref/source/items.h
+++ crawl-ref/source/items.h
@@ -44,7 +44,7 @@
void note_inscribe_item(item_def &item);
bool move_item_to_inv(item_def& item);
bool move_item_to_inv(int obj, int quant_got, bool quiet = false);
-bool auto_assign_item_slot(item_def& item);
+item_def* auto_assign_item_slot(item_def& item, bool verbose = true);
void mark_items_non_pickup_at(const coord_def &pos);
void mark_items_non_visit_at(const coord_def &pos);
void clear_item_pickup_flags(item_def &item);
diff --git crawl-ref/source/misc.cc crawl-ref/source/misc.cc
index be0ca82..65a53b4 100644
--- crawl-ref/source/misc.cc
+++ crawl-ref/source/misc.cc
@@ -1139,8 +1139,10 @@
for (int i = 0; i < ENDOFPACK; i++)
{
item_def& item = you.inv[i];
- if (item.defined())
- god_id_item(item, false);
+ // god_id_item might swap items in inventory
+ // and we need to id the swapped item(s) too
+ while (item.defined() && god_id_item(item, false))
+ ;
}
}
diff --git crawl-ref/source/ng-setup.cc crawl-ref/source/ng-setup.cc
index 3d4333a..f188189 100644
--- crawl-ref/source/ng-setup.cc
+++ crawl-ref/source/ng-setup.cc
@@ -10,6 +10,7 @@
#include "food.h"
#include "godcompanions.h"
#include "hints.h"
+#include "invent.h"
#include "itemname.h"
#include "itemprop.h"
#include "items.h"
@@ -1093,15 +1094,7 @@
static void _give_basic_knowledge(job_type which_job)
{
- // Identify all items in pack.
- for (int i = 0; i < ENDOFPACK; ++i)
- {
- if (you.inv[i].defined())
- {
- set_ident_type(you.inv[i], ID_KNOWN_TYPE);
- set_ident_flags(you.inv[i], ISFLAG_IDENT_MASK);
- }
- }
+ identify_inventory();
// Recognisable by appearance.
you.type_ids[OBJ_POTIONS][POT_BLOOD] = ID_KNOWN_TYPE;
diff --git crawl-ref/source/player-equip.cc crawl-ref/source/player-equip.cc
index 7e05a49..b93ec16 100644
--- crawl-ref/source/player-equip.cc
+++ crawl-ref/source/player-equip.cc
@@ -271,8 +271,8 @@
if (!fully_identified(item))
{
- set_ident_type(item, ID_KNOWN_TYPE);
- set_ident_flags(item, ISFLAG_IDENT_MASK);
+ item_def *newitem = set_ident_type(item, ID_KNOWN_TYPE);
+ set_ident_flags(*newitem, ISFLAG_IDENT_MASK);
}
#undef unknown_proprt
}
@@ -1224,7 +1224,7 @@
else
mprf("You feel %s static.", you.species == SP_FORMICID ? "familiarly" : "strangely");
}
-
+ item_def *newitem = &item;
// Artefacts have completely different appearance than base types
// so we don't allow them to make the base types known.
if (artefact)
@@ -1236,14 +1236,14 @@
}
else
{
- set_ident_type(item, ID_KNOWN_TYPE);
- set_ident_flags(item, ISFLAG_IDENT_MASK);
+ newitem = set_ident_type(item, ID_KNOWN_TYPE);
+ set_ident_flags(*newitem, ISFLAG_IDENT_MASK);
}
- if (item.cursed() && !unmeld)
+ if (newitem->cursed() && !unmeld)
{
mprf("Oops, that %s feels deathly cold.",
- jewellery_is_amulet(item)? "amulet" : "ring");
+ jewellery_is_amulet(*newitem)? "amulet" : "ring");
learned_something_new(HINT_YOU_CURSED);
int amusement = 32;
@@ -1252,17 +1252,18 @@
amusement *= 2;
god_type god;
- if (origin_is_god_gift(item, &god) && god == GOD_XOM)
+ if (origin_is_god_gift(*newitem, &god) && god == GOD_XOM)
amusement *= 2;
}
xom_is_stimulated(amusement);
}
// Cursed or not, we know that since we've put the ring on.
- set_ident_flags(item, ISFLAG_KNOW_CURSE);
+ set_ident_flags(*newitem, ISFLAG_KNOW_CURSE);
- if (!unmeld)
- mprf_nocap("%s", item.name(DESC_INVENTORY_EQUIP).c_str());
+ // auto assigned item does not need to be displayed twice
+ if (!unmeld && newitem == &item)
+ mprf_nocap("%s", newitem->name(DESC_INVENTORY_EQUIP).c_str());
}
static void _unequip_jewellery_effect(item_def &item, bool mesg, bool meld,
diff --git crawl-ref/source/potion.cc crawl-ref/source/potion.cc
index df125ab..39950ff 100644
--- crawl-ref/source/potion.cc
+++ crawl-ref/source/potion.cc
@@ -1211,21 +1211,24 @@
* the player. Does not handle decrementing item quantities.
*
* @param potion The potion (stack) being quaffed.
+ * @param new_item_slot pointer for returning new item slot
* @return true if the potion was used; false if the player aborted.
*/
-bool quaff_potion(item_def &potion)
+bool quaff_potion(item_def &potion, int *new_item_slot)
{
const bool was_known = item_type_known(potion);
-
+ item_def *newitem = &potion;
if (!was_known)
{
set_ident_flags(potion, ISFLAG_IDENT_MASK);
- set_ident_type(potion, ID_KNOWN_TYPE);
- mprf("It was a %s.", potion.name(DESC_QUALNAME).c_str());
+ newitem = set_ident_type(potion, ID_KNOWN_TYPE);
+ if(new_item_slot != NULL)
+ *new_item_slot = newitem->link;
+ mprf("It was a %s.", newitem->name(DESC_QUALNAME).c_str());
identify_healing_pots();
}
- const potion_type ptyp = static_cast<potion_type>(potion.sub_type);
+ const potion_type ptyp = static_cast<potion_type>(newitem->sub_type);
return get_potion_effect(ptyp)->quaff(was_known);
}
diff --git crawl-ref/source/potion.h crawl-ref/source/potion.h
index f7a2626..19bb98e 100644
--- crawl-ref/source/potion.h
+++ crawl-ref/source/potion.h
@@ -41,7 +41,7 @@
const PotionEffect* get_potion_effect(potion_type pot);
-bool quaff_potion(item_def &potion);
+bool quaff_potion(item_def &potion, int *new_item_slot = NULL);
void potionlike_effect(potion_type effect, int pow, bool was_known = true);
#endif
diff --git crawl-ref/source/shopping.cc crawl-ref/source/shopping.cc
index ed16fbb..e946df2 100644
--- crawl-ref/source/shopping.cc
+++ crawl-ref/source/shopping.cc
@@ -895,20 +895,22 @@
you.attribute[ATTR_PURCHASES] += cost;
origin_purchased(item);
+
+ item_def *newitem = &item;
if (id)
{
// Identify the item and its type.
// This also takes the ID note if necessary.
- set_ident_type(item, ID_KNOWN_TYPE);
- set_ident_flags(item, ISFLAG_IDENT_MASK);
+ newitem = set_ident_type(item, ID_KNOWN_TYPE);
+ set_ident_flags(*newitem, ISFLAG_IDENT_MASK);
}
// Shopkeepers will place goods you can't carry outside the shop.
- if (item_is_stationary(item)
- || !move_item_to_inv(item))
+ if (item_is_stationary(*newitem)
+ || !move_item_to_inv(*newitem))
{
- copy_item_to_grid(item, shop.pos);
+ copy_item_to_grid(*newitem, shop.pos);
}
return true;
}
diff --git crawl-ref/source/wiz-dump.cc crawl-ref/source/wiz-dump.cc
index 1131e5c..0b195ed 100644
--- crawl-ref/source/wiz-dump.cc
+++ crawl-ref/source/wiz-dump.cc
@@ -280,7 +280,7 @@
end = s.length();
else
end--;
-
+
set_ident_type(ret, ID_KNOWN_TYPE);
set_ident_flags(ret, ISFLAG_IDENT_MASK);
diff --git crawl-ref/source/wiz-item.cc crawl-ref/source/wiz-item.cc
index 422d038..107fdf7 100644
--- crawl-ref/source/wiz-item.cc
+++ crawl-ref/source/wiz-item.cc
@@ -766,15 +766,8 @@
void wizard_identify_pack()
{
mpr("You feel a rush of knowledge.");
- for (int i = 0; i < ENDOFPACK; ++i)
- {
- item_def& item = you.inv[i];
- if (item.defined())
- {
- set_ident_type(item, ID_KNOWN_TYPE);
- set_ident_flags(item, ISFLAG_IDENT_MASK);
- }
- }
+ identify_inventory();
+
you.wield_change = true;
you.redraw_quiver = true;
}
|