1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
/*
* File: decks.h
* Summary: Functions with decks of cards.
*
* Modified for Crawl Reference by $Author$ on $Date$
*
* Change History (most recent first):
*
* <1> -/--/-- LRH Created
*/
#ifndef DECKS_H
#define DECKS_H
#include "enum.h"
#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 different kinds of cards and 8 bits of flags.
enum deck_rarity_type
{
DECK_RARITY_COMMON,
DECK_RARITY_RARE,
DECK_RARITY_LEGENDARY
};
enum deck_type
{
// pure decks
DECK_OF_ESCAPE,
DECK_OF_DESTRUCTION,
DECK_OF_DUNGEONS,
DECK_OF_SUMMONING,
DECK_OF_WONDERS
};
enum card_flags_type
{
CFLAG_ODDITY = (1 << 0),
CFLAG_SEEN = (1 << 1),
CFLAG_MARKED = (1 << 2)
};
enum card_type
{
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_FLIGHT,
CARD_VITRIOL, // acid damage
CARD_FLAME, // fire damage
CARD_FROST, // cold damage
CARD_VENOM, // poison damage
CARD_HAMMER, // pure damage
CARD_SPARK, // lightning damage
CARD_PAIN, // single target, like spell of agony
CARD_TORMENT, // Symbol of Torment
CARD_ELIXIR, // healing
CARD_BATTLELUST, // melee boosts
CARD_METAMORPHOSIS, // transformation
CARD_HELM, // defence
CARD_BLADE, // weapon boosts
CARD_SHADOW, // assassin skills
CARD_CRUSADE,
CARD_SUMMON_ANIMAL,
CARD_SUMMON_DEMON,
CARD_SUMMON_WEAPON,
CARD_SUMMON_FLYING, // wisps and butterflies
CARD_SUMMON_SKELETON,
CARD_SUMMON_UGLY,
CARD_SUMMON_ANY,
CARD_POTION,
CARD_FOCUS,
CARD_SHUFFLE,
CARD_EXPERIENCE,
CARD_WILD_MAGIC,
CARD_SAGE, // skill training
CARD_HELIX, // remove one *bad* mutation
CARD_WATER, // flood squares
CARD_GLASS, // make walls transparent
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 nemelex_shuffle_decks();
// Return true if it was a "genuine" draw, false otherwise.
bool 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);
int cards_in_deck(const item_def &deck);
card_type get_card_and_flags(const item_def& deck, int idx,
unsigned char& _flags);
const std::vector<card_type> get_drawn_cards(const item_def& deck);
#endif
|