drawn, you get to stack them in any order, and the rest of the deck is discarded. The next card is inscribed on the deck; the remainder can be seen with 'v'. This is now Nemelex's top ability.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1467 c06c8d41-db1a-0410-9941-cceddc491573
RR2J4VLJCZSAKY3HNS334KI4YUAPOMSETO2HGCGEEIUCUJAYAGSQC
2ESKXYN266CEMLSL6DNCKG4REDO34FXL4ODVGMWDJTNJRKMXWCRQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
H7BW6SEIQ57X6V4BM2RX54W42W6BH5XJBAS6FYCYKLQQG43ZMU4QC
KAL42YT6OQXFPMKKKHE2NQM47W5KMLSRI6KWFRTJFAO4WKP4MMLAC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
2IJDLTWK74ULETLFTIPUIY2MSG6RNONVAFNFE7MADPT6UNYSSBDAC
RYT42Z6CED4KV5CCJ45CHZ3DQGLFMDCVH6CSQZNXOILULDG4MXVQC
if ( is_deck(item) && item.plus2 != 0 )
{
description += "$Next card(s): ";
description += card_name(static_cast<card_type>(item.plus2 - 1));
long spec = item.special;
while ( spec )
{
description += ", ";
description += card_name(static_cast<card_type>((spec & 0xFF)-1));
spec >>= 8;
}
description += "$";
}
case CARD_DEMON_GREATER: return "a huge demon";
case CARD_DEMON_SWARM: return "a swarm of little demons";
case CARD_YAK: return "a huge, shaggy yak";
case CARD_FIEND: return "a huge, scaly devil";
case CARD_DRAGON: return "a huge, scaly dragon";
case CARD_DEMON_GREATER: return "a demon";
case CARD_DEMON_SWARM: return "a demon";
case CARD_YAK: return "a yak";
case CARD_FIEND: return "a devil";
case CARD_DRAGON: return "a dragon";
case CARD_HEALING: return "the Elixir of Health";
case CARD_HEAL_WOUNDS: return "the Symbol of Immediate Regeneration";
case CARD_TORMENT: return "the Symbol of Torment";
case CARD_HEALING: return "Health";
case CARD_HEAL_WOUNDS: return "Health";
case CARD_TORMENT: return "Torment";
item.special = chosen + 1;
item.plus2 = chosen + 1;
you.wield_change = true;
return true;
}
bool deck_stack()
{
if ( !wielding_deck() )
{
mpr("You aren't wielding a deck!");
return false;
}
item_def& item(you.inv[you.equip[EQ_WEAPON]]);
if ( item.plus2 != 0 )
{
mpr("You can't stack a marked deck.");
return false;
}
const int num_to_stack = (item.plus < 5 ? item.plus : 5);
const deck_type dtype = subtype_to_decktype(item.sub_type);
std::vector<card_type> draws;
for ( int i = 0; i < num_to_stack; ++i )
draws.push_back(choose_one_card(dtype, false));
if ( draws.size() == 1 )
mpr("There's only one card left!");
else
mpr("Order the cards (bottom to top)...", MSGCH_PROMPT);
item.special = 0;
while ( draws.size() > 1 )
{
for ( unsigned int i = 0; i < draws.size(); ++i )
{
msg::stream << (static_cast<char>(i + 'a')) << " - "
<< card_name(draws[i]) << std::endl;
}
int selected = -1;
while ( 1 )
{
const int keyin = tolower(get_ch());
if (keyin >= 'a' && keyin < 'a' + static_cast<int>(draws.size()))
{
selected = keyin - 'a';
break;
}
else
{
canned_msg(MSG_HUH);
}
}
item.special <<= 8;
item.special += draws[selected] + 1;
draws.erase(draws.begin() + selected);
mpr("Next card?", MSGCH_PROMPT);
}
item.plus2 = draws[0] + 1;
item.plus = num_to_stack; // no more deck after the stack
cards(static_cast<card_type>(deck.special - 1));
deck.special = 0;
// draw the marked card
cards(static_cast<card_type>(deck.plus2 - 1));
// If there are more marked cards, shift them up
if ( deck.special )
{
const short next_card = (deck.special & 0xFF);
deck.special >>= 8;
deck.plus2 = next_card;
}
else
{
deck.plus2 = 0;
}