From 85186cca64385dc3a8550f12f660dbd7bbe49061 Mon Sep 17 00:00:00 2001 From: haranp Date: Wed, 4 Feb 2009 21:39:27 +0000 Subject: Fix Triple Draw not updating num_marked on a deck. Fixes [2516231]. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8895 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/decks.cc | 18 ++++++++++++++++-- crawl-ref/source/menu.cc | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc index 5007625023..0bc58a540a 100644 --- a/crawl-ref/source/decks.cc +++ b/crawl-ref/source/decks.cc @@ -1085,7 +1085,7 @@ bool deck_triple_draw() card_type card = _draw_top_card(deck, false, _flags); draws.push_back(card); - flags.push_back(_flags | CFLAG_SEEN | CFLAG_MARKED); + flags.push_back(_flags); } mpr("You draw... (choose one card)"); @@ -1109,8 +1109,21 @@ bool deck_triple_draw() // Note how many cards were removed from the deck. deck.plus2 += num_to_draw; + + // Don't forget to update the number of marked ones, too. + // But don't reduce the number of non-brownie draws. + char num_marked_left = deck.props["num_marked"].get_byte(); for (int i = 0; i < num_to_draw; ++i) + { _remember_drawn_card(deck, draws[i], false); + if (flags[i] & CFLAG_MARKED) + { + ASSERT(num_marked_left > 0); + --num_marked_left; + } + } + deck.props["num_marked"] = num_marked_left; + you.wield_change = true; // Make deck disappear *before* the card effect, since we @@ -1126,7 +1139,8 @@ bool deck_triple_draw() } // Note that card_effect() might cause you to unwield the deck. - card_effect(draws[selected], rarity, flags[selected], false); + card_effect(draws[selected], rarity, + flags[selected] | CFLAG_SEEN | CFLAG_MARKED, false); return (true); } diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc index 88e1238cd2..982df74791 100644 --- a/crawl-ref/source/menu.cc +++ b/crawl-ref/source/menu.cc @@ -1560,7 +1560,7 @@ int linebreak_string2( std::string& s, int maxcol ) std::string get_linebreak_string(const std::string& s, int maxcol) { std::string r = s; - linebreak_string2(r, maxcol ); + linebreak_string2(r, maxcol); return r; } -- cgit v1.2.3-54-g00ecf