summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/decks.h
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/decks.h')
-rw-r--r--crawl-ref/source/decks.h88
1 files changed, 87 insertions, 1 deletions
diff --git a/crawl-ref/source/decks.h b/crawl-ref/source/decks.h
index 47c6d646ac..df5b3942e5 100644
--- a/crawl-ref/source/decks.h
+++ b/crawl-ref/source/decks.h
@@ -17,6 +17,19 @@
#include "externs.h"
+// DECK STRUCTURE: deck.plus is the number of cards the deck *started*
+// with, deck.plus2 is the number of cards drawn, deck.special is the
+// deck rarity, deck.props["cards"] holds the list of cards (with the
+// highest index card being the top card, and index 0 being the bottom
+// card), deck.props.["card_flags"] holds the flags for each card,
+// deck.props["num_marked"] is the number of marked cards left in the
+// deck, and deck.props["non_brownie_draws"] is the number of
+// non-marked draws you have to make from that deck before earning
+// brownie points from it again.
+//
+// The card type and per-card flags are each stored as unsigned bytes,
+// for a maximum of 256 differetn kinds of cards and 8 bits of flags.
+
enum deck_rarity_type
{
DECK_RARITY_COMMON,
@@ -34,17 +47,90 @@ enum deck_type
DECK_OF_WONDERS
};
+enum card_flags_type
+{
+ CFLAG_ODDITY = (1 << 0),
+ CFLAG_SEEN = (1 << 1),
+ CFLAG_MARKED = (1 << 2)
+};
+
+enum card_type
+{
+ CARD_BLANK1 = 0, // non-retried
+ CARD_BLANK2, // retried and failed
+ CARD_PORTAL, // "the mover"
+ CARD_WARP, // "the jumper"
+ CARD_SWAP, // "swap"
+ CARD_VELOCITY, // "the runner"
+
+ CARD_TOMB, // "the wall"
+ CARD_BANSHEE, // "the scream"
+ CARD_DAMNATION, // banishment
+ CARD_SOLITUDE, // dispersal
+ CARD_WARPWRIGHT, // create teleport trap
+
+ CARD_VITRIOL, // acid damage
+ CARD_FLAME, // fire damage
+ CARD_FROST, // cold damage
+ CARD_VENOM, // poison damage
+ CARD_HAMMER, // pure damage
+
+ CARD_ELIXIR, // healing
+ CARD_BATTLELUST, // melee boosts
+ CARD_METAMORPHOSIS, // transformation
+ CARD_HELM, // defense
+ CARD_BLADE, // weapon boosts
+ CARD_SHADOW, // assassin skills
+
+ CARD_SUMMON_ANIMAL,
+ CARD_SUMMON_DEMON,
+ CARD_SUMMON_WEAPON,
+ CARD_SUMMON_ANY,
+
+ CARD_POTION,
+ CARD_FOCUS,
+ CARD_SHUFFLE,
+
+ CARD_EXPERIENCE,
+ CARD_WILD_MAGIC,
+ CARD_HELIX, // remove one *bad* mutation
+
+ CARD_MAP, // magic mapping
+ CARD_DOWSING, // detect SD/traps/items/monsters
+ CARD_SPADE, // dig
+ CARD_TROWEL, // create feature/vault
+ CARD_MINEFIELD, // plant traps
+
+ CARD_GENIE, // acquirement OR rotting/deterioration
+ CARD_BARGAIN, // shopping discount
+ CARD_WRATH, // Godly wrath
+ CARD_WRAITH, // drain XP
+ CARD_XOM,
+ CARD_FEAST,
+ CARD_FAMINE,
+ CARD_CURSE, // Curse your items
+
+ NUM_CARDS
+};
+
const char* card_name(card_type card);
void evoke_deck(item_def& deck);
bool deck_triple_draw();
bool deck_peek();
+bool deck_mark();
bool deck_stack();
bool choose_deck_and_draw();
-void card_effect(card_type which_card, deck_rarity_type rarity);
+void card_effect(card_type which_card, deck_rarity_type rarity,
+ unsigned char card_flags = 0, bool tell_card = true);
void draw_from_deck_of_punishment();
+bool top_card_is_known(const item_def &item);
+card_type top_card(const item_def &item);
+
bool is_deck(const item_def &item);
+bool bad_deck(const item_def &item);
deck_rarity_type deck_rarity(const item_def &item);
unsigned char deck_rarity_to_color(deck_rarity_type rarity);
+void init_deck(item_def &item);
#endif