summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/decks.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-12-02 19:30:28 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-12-02 19:30:28 +0000
commit18237732905aecff4279a4ad070f41a22db1e9cf (patch)
tree14cc72fb3cafaad0fd3d4ed70abb628c8895c0d1 /crawl-ref/source/decks.cc
parenteca255feaf94e4a320c3982c83e828eeb81b4c13 (diff)
downloadcrawl-ref-18237732905aecff4279a4ad070f41a22db1e9cf.tar.gz
crawl-ref-18237732905aecff4279a4ad070f41a22db1e9cf.zip
Nemelex now has additional, passive penance: cards from decks can be
randomly exchanged with ones from the Deck of Punishment. This never times out (until you rejoin Nemelex). Fixed a stupid crash regarding describing drawn cards (oops.) git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2985 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/decks.cc')
-rw-r--r--crawl-ref/source/decks.cc41
1 files changed, 34 insertions, 7 deletions
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc
index 47bedbb8fb..1f41182a3e 100644
--- a/crawl-ref/source/decks.cc
+++ b/crawl-ref/source/decks.cc
@@ -1192,12 +1192,39 @@ void evoke_deck( item_def& deck )
int brownie_points = 0;
bool allow_id = in_inventory(deck) && !item_ident(deck, ISFLAG_KNOW_TYPE);
- unsigned char flags = 0;
- card_type card = draw_top_card(deck, true, flags);
- int amusement = xom_check_card(deck, card, flags);
- deck_rarity_type rarity = deck_rarity(deck);
- CrawlHashTable &props = deck.props;
- bool no_brownie = (props["non_brownie_draws"].get_byte() > 0);
+ const deck_rarity_type rarity = deck_rarity(deck);
+ CrawlHashTable &props = deck.props;
+
+ unsigned char flags = 0;
+ card_type card = draw_top_card(deck, true, flags);
+
+ // Passive Nemelex retribution: sometimes a card gets swapped out.
+ // More likely to happen with marked decks.
+ if ( you.penance[GOD_NEMELEX_XOBEH] )
+ {
+ int c = 1;
+ if ( (flags & (CFLAG_MARKED | CFLAG_SEEN)) ||
+ props["num_marked"].get_byte() > 0 )
+ {
+ c = 3;
+ }
+ if ( random2(3000) < c * you.penance[GOD_NEMELEX_XOBEH] )
+ {
+ card_type old_card = card;
+ card = choose_from_archetype(deck_of_punishment, rarity);
+ if ( card != old_card )
+ {
+ simple_god_message(" seems to have exchanged this card "
+ "behind your back!", GOD_NEMELEX_XOBEH);
+ mprf("It's actually %s.", card_name(card));
+ you.penance[GOD_NEMELEX_XOBEH] -=
+ random2(you.penance[GOD_NEMELEX_XOBEH] / 10);
+ }
+ }
+ }
+
+ const int amusement = xom_check_card(deck, card, flags);
+ const bool no_brownie = (props["non_brownie_draws"].get_byte() > 0);
// Do these before the deck item_def object is gone.
if (flags & CFLAG_MARKED)
@@ -2670,7 +2697,7 @@ void init_deck(item_def &item)
props["cards"].new_vector(SV_BYTE).resize(item.plus);
props["card_flags"].new_vector(SV_BYTE).resize(item.plus);
- props["cards_drawn"].new_vector(SV_BYTE);
+ props["drawn_cards"].new_vector(SV_BYTE);
for (int i = 0; i < item.plus; i++)
{