diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-09-21 08:23:35 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-09-21 08:23:35 +0000 |
commit | a36fd3f9f0e5bde3dd9d74e1742cfbd2f045c635 (patch) | |
tree | 162c04f1bb86a4f1bde64d55c69c81ee65b38680 /crawl-ref/source/dungeon.cc | |
parent | 02c7a7e290da364ed194a72ccc42240afe19e344 (diff) | |
download | crawl-ref-a36fd3f9f0e5bde3dd9d74e1742cfbd2f045c635.tar.gz crawl-ref-a36fd3f9f0e5bde3dd9d74e1742cfbd2f045c635.zip |
Allow vaults to request use of the acquirement code with "acquire <item_class>" or "acquire:<god> <item_class>" in item specs (due).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10765 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r-- | crawl-ref/source/dungeon.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index f4a2b62621..f4f8a147bb 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -23,6 +23,7 @@ REVISION("$Rev$"); #include "chardump.h" #include "cloud.h" #include "defines.h" +#include "effects.h" #include "enum.h" #include "externs.h" #include "directn.h" @@ -4438,6 +4439,7 @@ static void _dgn_place_item_explicit(const item_spec &spec, return; object_class_type base_type = spec.base_type; + bool acquire = false; if (spec.level >= 0) level = spec.level; @@ -4456,6 +4458,9 @@ static void _dgn_place_item_explicit(const item_spec &spec, case ISPEC_SUPERB: level = MAKE_GOOD_ITEM; break; + case ISPEC_ACQUIREMENT: + acquire = true; + break; default: adjust_type = false; break; @@ -4465,14 +4470,22 @@ static void _dgn_place_item_explicit(const item_spec &spec, base_type = RANDOM_ELEMENT(_acquirement_item_classes); } - const int item_made = items( spec.allow_uniques, base_type, - spec.sub_type, true, level, spec.race, 0, - spec.ego ); + const int item_made = + (acquire ? + acquirement_create_item(base_type, spec.acquirement_source, + true, where) + : items( spec.allow_uniques, base_type, + spec.sub_type, true, level, spec.race, 0, + spec.ego )); if (item_made != NON_ITEM && item_made != -1) { item_def &item(mitm[item_made]); item.pos = where; + // Remove unsuitable inscriptions such as {god gift}. + item.inscription.clear(); + // And wipe item origin to remove "this is a god gift!" from there. + origin_reset(item); if (is_stackable_item(item) && spec.qty > 0) { item.quantity = spec.qty; |