summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2007-09-05 00:05:57 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2007-09-05 00:05:57 +0000
commit8f913bcaf69f680eabc6bbdd2dff2afb311b4ffb (patch)
tree24917af02d19406c1c40203b26133a88e6804a8c /crawl-ref/source/dungeon.cc
parent288e44e2590d8791f0841a70ef50108582990278 (diff)
downloadcrawl-ref-8f913bcaf69f680eabc6bbdd2dff2afb311b4ffb.tar.gz
crawl-ref-8f913bcaf69f680eabc6bbdd2dff2afb311b4ffb.zip
Added two command hints: 'v'iewing for certain features,
and how to turn autopickup/autoprayer on again after an encounter with an invisible creature. I also modified selection of book shops, so the offered books are more likely to be different. This changes balance in that on the whole more books are present, so maybe we should simply throw duplicates out rather than reroll. Oh, and manuals are now even rarer than before. Maybe they should be excepted from this new rule. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2056 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r--crawl-ref/source/dungeon.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index 725d833866..5218753987 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -4696,6 +4696,11 @@ static void place_shops(int level_number, int nshops)
}
} // end place_shops()
+static bool need_varied_selection(shop_type shop)
+{
+ return (shop == SHOP_BOOK);
+}
+
void place_spec_shop( int level_number,
int shop_x, int shop_y,
int force_s_type, bool representative )
@@ -4747,6 +4752,14 @@ void place_spec_shop( int level_number,
if (representative)
plojy = env.shop[i].type == SHOP_WAND? NUM_WANDS : 16;
+ // for books shops, store how many copies of a given book are on display
+ int stocked[NUM_BOOKS];
+ if (need_varied_selection(env.shop[i].type))
+ {
+ for (int k=0; k < NUM_BOOKS; k++)
+ stocked[k] = 0;
+ }
+
for (j = 0; j < plojy; j++)
{
if (env.shop[i].type != SHOP_WEAPON_ANTIQUE
@@ -4769,7 +4782,14 @@ void place_spec_shop( int level_number,
one_chance_in(4)? MAKE_GOOD_ITEM : item_level,
MAKE_ITEM_RANDOM_RACE );
- if (orb != NON_ITEM
+ // try for a better selection
+ if (orb != NON_ITEM && need_varied_selection(env.shop[i].type))
+ {
+ if (!one_chance_in(stocked[mitm[orb].sub_type] + 1))
+ orb = NON_ITEM; // try again
+ }
+
+ if (orb != NON_ITEM
&& mitm[orb].base_type != OBJ_GOLD
&& (env.shop[i].type != SHOP_GENERAL_ANTIQUE
|| (mitm[orb].base_type != OBJ_MISSILES
@@ -4789,6 +4809,12 @@ void place_spec_shop( int level_number,
if (orb == NON_ITEM)
break;
+ // increase stock of this subtype by 1, unless it is an artefact
+ // (allow for several artefacts of the same underlying subtype)
+ // - the latter is currently unused but would apply to e.g. jewellery
+ if (need_varied_selection(env.shop[i].type) && !is_artefact(mitm[orb]))
+ stocked[mitm[orb].sub_type]++;
+
if (representative && mitm[orb].base_type == OBJ_WANDS)
mitm[orb].plus = 7;