summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2009-09-21 08:23:35 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2009-09-21 08:23:35 +0000
commita36fd3f9f0e5bde3dd9d74e1742cfbd2f045c635 (patch)
tree162c04f1bb86a4f1bde64d55c69c81ee65b38680 /crawl-ref/source/dungeon.cc
parent02c7a7e290da364ed194a72ccc42240afe19e344 (diff)
downloadcrawl-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.cc19
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;