diff options
author | haranp <haranp@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-12-02 19:30:28 +0000 |
---|---|---|
committer | haranp <haranp@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-12-02 19:30:28 +0000 |
commit | 18237732905aecff4279a4ad070f41a22db1e9cf (patch) | |
tree | 14cc72fb3cafaad0fd3d4ed70abb628c8895c0d1 /crawl-ref/source/decks.cc | |
parent | eca255feaf94e4a320c3982c83e828eeb81b4c13 (diff) | |
download | crawl-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.cc | 41 |
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++) { |