summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/invent.cc
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-06-27 09:58:49 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-06-27 09:58:49 +0000
commit7aa3305f41d2f073710d9a732bd29572b704bc49 (patch)
tree374aa17118ecb68bc4c237176506dbaf9aafb0b7 /crawl-ref/source/invent.cc
parent3cc681e30ac236f7b88adece29f194cb30138ec8 (diff)
downloadcrawl-ref-7aa3305f41d2f073710d9a732bd29572b704bc49.tar.gz
crawl-ref-7aa3305f41d2f073710d9a732bd29572b704bc49.zip
* Moved most hard-coded non-standard unrandart behaviour to art-func.h,
specifically code for equipping, unequpping, an equipped unrandart doing something every time world_reacts() is called (special wield effects), melee hit effects, and evoking. Left hardcoded outside of art-func.h: * Sword of Cerebov temproarily downgrading the defender's fire resistance. * Staff of Olgreb boosting poison spells, as if it were a staff of poison. * Vampire's Tooth always getting maximal vampiric drain. * Mace of Variablity's initial pluses being chosen at creation time. * Since what used to be special wield effects is now handled very differently, noisy weapons and the lantern of shadows effects are handled with player attributes rather than SPWLD_NOISES and SPWLD_SHADOW. * Unrandarts can now have an elemental colour for their colour (currently only used for the Mace of Variability). * Unrandarts' value modification, being special, and being evil are now handled in art-data.txt rather than being hardcoded. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10055 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/invent.cc')
-rw-r--r--crawl-ref/source/invent.cc38
1 files changed, 18 insertions, 20 deletions
diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc
index fc8010879a..d0784ca0f4 100644
--- a/crawl-ref/source/invent.cc
+++ b/crawl-ref/source/invent.cc
@@ -1722,6 +1722,24 @@ bool prompt_failed(int retval, std::string msg)
bool item_is_evokable(const item_def &item, bool known, bool all_wands,
bool msg)
{
+ if (is_unrandom_artefact(item))
+ {
+ const unrandart_entry* entry = get_unrand_entry(item.special);
+
+ if (entry->evoke_func && item_type_known(item))
+ {
+
+ if (item_is_equipped(item))
+ return (true);
+
+ if (msg)
+ mpr("That item can only be evoked when wielded.");
+
+ return (false);
+ }
+ // Unrandart might still be evokable (e.g., reaching)
+ }
+
const bool wielded = (you.equip[EQ_WEAPON] == item.link);
switch (item.base_type)
@@ -1754,26 +1772,6 @@ bool item_is_evokable(const item_def &item, bool known, bool all_wands,
return (true);
}
- if (is_unrandom_artefact(item))
- {
- switch (item.special)
- {
- case UNRAND_ASMODEUS:
- case UNRAND_WUCAD_MU:
- case UNRAND_DISPATER:
- case UNRAND_OLGREB:
- if (!wielded)
- {
- if (msg)
- mpr("That item can only be evoked when wielded.");
- return (false);
- }
- return (true);
-
- default:
- return (false);
- }
- }
if (msg)
mpr("That item cannot be evoked!");
return (false);