summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/item_use.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/item_use.cc')
-rw-r--r--crawl-ref/source/item_use.cc93
1 files changed, 38 insertions, 55 deletions
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 33d2800ecc..594201e9c7 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -4484,60 +4484,51 @@ void tile_use_item(int idx, InvAction act)
return;
}
-
// Use it
- switch (you.inv[idx].base_type)
+ const int type = you.inv[idx].base_type;
+ switch (type)
{
case OBJ_WEAPONS:
case OBJ_STAVES:
- if (!check_warning_inscriptions(you.inv[idx], OPER_WIELD))
- return;
- if (equipped)
- wield_weapon(true, PROMPT_GOT_SPECIAL);
- else
- wield_weapon(true, idx);
- return;
-
case OBJ_MISCELLANY:
- if (equipped)
+ // wield any unwielded item of these types
+ if (!equipped)
{
- if (!check_warning_inscriptions(you.inv[idx], OPER_EVOKE))
- return;
- evoke_wielded();
+ if (check_warning_inscriptions(you.inv[idx], OPER_WIELD))
+ wield_weapon(true, idx);
+ return;
}
- else
+ // evoke misc. items and known rods
+ if (type == OBJ_MISCELLANY
+ ||item_is_rod(you.inv[idx]) && item_type_known(you.inv[idx]))
{
- if (!check_warning_inscriptions(you.inv[idx], OPER_WIELD))
- return;
- wield_weapon(true, idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_EVOKE))
+ evoke_wielded();
+ return;
}
+ // unwield unknown rods, other staves or weapons
+ if (check_warning_inscriptions(you.inv[idx], OPER_WIELD))
+ wield_weapon(true, PROMPT_GOT_SPECIAL); // unwield
return;
-
+
case OBJ_MISSILES:
- if (!check_warning_inscriptions(you.inv[idx], OPER_THROW))
- return;
- throw_anything(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_THROW))
+ throw_anything(idx);
return;
case OBJ_ARMOUR:
if (equipped && !equipped_weapon)
{
- if (!check_warning_inscriptions(you.inv[idx], OPER_TAKEOFF))
- return;
- takeoff_armour(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_TAKEOFF))
+ takeoff_armour(idx);
}
- else
- {
- if (!check_warning_inscriptions(you.inv[idx], OPER_WEAR))
- return;
+ else if (check_warning_inscriptions(you.inv[idx], OPER_WEAR))
wear_armour(idx);
- }
return;
case OBJ_WANDS:
- if (!check_warning_inscriptions(you.inv[idx], OPER_ZAP))
- return;
- zap_wand(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_ZAP))
+ zap_wand(idx);
return;
case OBJ_CORPSES:
@@ -4549,47 +4540,39 @@ void tile_use_item(int idx, InvAction act)
}
// intentional fall-through for Vampires
case OBJ_FOOD:
- if (!check_warning_inscriptions(you.inv[idx], OPER_EAT))
- return;
- eat_food(false, idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_EAT))
+ eat_food(false, idx);
return;
case OBJ_BOOKS:
if (you.inv[idx].sub_type == BOOK_MANUAL
|| you.inv[idx].sub_type == BOOK_DESTRUCTION)
{
- handle_read_book(idx);
- return;
- }
- // else it's a spellbook
- learn_spell(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_READ))
+ handle_read_book(idx);
+ } // else it's a spellbook
+ else if (check_warning_inscriptions(you.inv[idx], OPER_MEMORISE))
+ learn_spell(idx);
return;
case OBJ_SCROLLS:
- if (!check_warning_inscriptions(you.inv[idx], OPER_READ))
- return;
- read_scroll(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_READ))
+ read_scroll(idx);
return;
case OBJ_JEWELLERY:
if (equipped && !equipped_weapon)
{
- if (!check_warning_inscriptions(you.inv[idx], OPER_REMOVE))
- return;
- remove_ring(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_REMOVE))
+ remove_ring(idx);
}
- else
- {
- if (!check_warning_inscriptions(you.inv[idx], OPER_PUTON))
- return;
+ else if (check_warning_inscriptions(you.inv[idx], OPER_PUTON))
puton_ring(idx, false);
- }
return;
case OBJ_POTIONS:
- if (!check_warning_inscriptions(you.inv[idx], OPER_QUAFF))
- return;
- drink(idx);
+ if (check_warning_inscriptions(you.inv[idx], OPER_QUAFF))
+ drink(idx);
return;
default: