diff options
author | zelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-12-04 06:38:17 +0000 |
---|---|---|
committer | zelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-12-04 06:38:17 +0000 |
commit | cc0f9b2965e5298577253965c8819636985ac2db (patch) | |
tree | f586194693a2b6e0ff63411ddd6b136d137e9032 /crawl-ref/source/items.cc | |
parent | fccc5c8dd647216dc3ad7faff107a8ffc77acfb8 (diff) | |
download | crawl-ref-cc0f9b2965e5298577253965c8819636985ac2db.tar.gz crawl-ref-cc0f9b2965e5298577253965c8819636985ac2db.zip |
Savefile compatibility breakage from keeping track of which spells have been
seen.
Implemented fixed-level randart spell books, which is all randart spellbooks as
of now. All my attempts at sorting the spell list so that spells with the same
schools group together have utterly failed.
Got rid of the hackish "non-monster origin is stored in item.orig_monnum as
(-origin - 2)" logic, replaced with the slightly less hackish "-origin". Added
the two enumerations IT_SRC_START and IT_SRC_SHOP to do it. Also,
origin_is_god_gift() and origin_is_acquirement() can retrieve the god/source of
the item so that you don't have to do the negation and typecasting yourself.
Added some new spell flags:
* SPFLAG_BATTLE for non-conjuration spells which are still combat/battle
related (branding spells and single school attack spells like "Pain"),
* SPFLAG_CARD for spells which are card-type effects which don't show up in
ordinary spellbooks (Tomb of Doroklohe and (I assume) Disintigrate)
* SPFLAG_TESTING for spells which are only used for testing (Debugging Ray)
* SPFLAG_DEVEL for spells that are still under development (Crush,
Disrupt, and Detect Magic).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7742 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/items.cc')
-rw-r--r-- | crawl-ref/source/items.cc | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc index 75151e4d9e..f92a14d34f 100644 --- a/crawl-ref/source/items.cc +++ b/crawl-ref/source/items.cc @@ -872,7 +872,7 @@ void origin_set_startequip(item_def &item) if (!origin_known(item)) { item.orig_place = 0xFFFF; - item.orig_monnum = -1; + item.orig_monnum = -IT_SRC_START; } } @@ -900,8 +900,7 @@ void origin_purchased(item_def &item) // We don't need to check origin_known if it's a shop purchase item.orig_place = get_packed_place(); _origin_set_portal_vault(item); - // Hackiness - item.orig_monnum = -1; + item.orig_monnum = -IT_SRC_SHOP; } void origin_acquired(item_def &item, int agent) @@ -909,8 +908,7 @@ void origin_acquired(item_def &item, int agent) // We don't need to check origin_known if it's a divine gift item.orig_place = get_packed_place(); _origin_set_portal_vault(item); - // Hackiness - item.orig_monnum = -2 - agent; + item.orig_monnum = -agent; } void origin_set_inventory(void (*oset)(item_def &item)) @@ -1066,22 +1064,42 @@ static std::string _article_it(const item_def &item) static bool _origin_is_original_equip(const item_def &item) { - return (item.orig_place == 0xFFFFU && item.orig_monnum == -1); + return (item.orig_place == 0xFFFFU && item.orig_monnum == -IT_SRC_START); } -bool origin_is_god_gift(const item_def& item) +bool origin_is_god_gift(const item_def& item, god_type *god) { - if (!origin_describable(item)) - return false; + god_type junk; + if (god == NULL) + god = &junk; + *god = GOD_NO_GOD; - if (_origin_is_original_equip(item)) - return false; + const int iorig = -item.orig_monnum; + if (iorig > GOD_NO_GOD && iorig < NUM_GODS) + { + *god = static_cast<god_type>(iorig); + return(true); + } + + return (false); +} - if (item.orig_monnum >= 0) - return false; +bool origin_is_acquirement(const item_def& item, item_source_type *type) +{ + item_source_type junk; + if (type == NULL) + type = &junk; + *type = IT_SRC_NONE; - const int iorig = -item.orig_monnum - 2; - return (iorig > AQ_SCROLL && iorig < AQ_CARD_GENIE); + const int iorig = -item.orig_monnum; + if (iorig == AQ_SCROLL || iorig == AQ_CARD_GENIE + || iorig == AQ_WIZMODE) + { + *type = static_cast<item_source_type>(iorig); + return (true); + } + + return (false); } std::string origin_desc(const item_def &item) @@ -1097,12 +1115,15 @@ std::string origin_desc(const item_def &item) { if (item.orig_monnum < 0) { - int iorig = -item.orig_monnum - 2; + int iorig = -item.orig_monnum; switch (iorig) { - case -1: + case IT_SRC_SHOP: desc += "You bought " + _article_it(item) + " in a shop "; break; + case IT_SRC_START: + desc += "Buggy Original Equipment: "; + break; case AQ_SCROLL: desc += "You acquired " + _article_it(item) + " "; break; |