the weight is 5 for everything at all rarities except for Damnation (which is 0,1,2) and Focus (which is 1,1,2). Suggestions and changes would be appreciated (look at the top of decks.cc to see what to change.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2941 c06c8d41-db1a-0410-9941-cceddc491573
CJWCTWT75S4P3OSCMUZ2W6UTWI6GOQMUSBUN6KEN4TVFEG4HHHGQC CA6ZG6P2CE5EPAOQSB3P7NBDKTNFFHQP4CPOUFZL32ON6N32GSSQC CUB27EJDQG66FF2YCKOV4HU3LAJVJIHUJ5QYLURRDIEVGPK666DQC VUP5G3CB6L5I5TPVWMM4KAMF6N4X6UPO4HQZKTSO2ETXZEFBMOMAC 6LYLJJDKKIPIXKJITRAC7LAZSNBO7O4IJIVBKUC7FD57AV53LHHAC EGV2HM7SD7UQSWJGLR65NQJTUBAJ7WHLM67FMH4UFP7JRSFKREPAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC Q2XCGRT36NCRQKWNL53EAS3ADON5SJQ5GEMJMX5S3QAG553HFVFQC DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC 2IJDLTWK74ULETLFTIPUIY2MSG6RNONVAFNFE7MADPT6UNYSSBDAC TMFNNWBMIPWM2FDC7I5R2RUKWNBS3GD3DX6VN452VYRPC3GU2HCQC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC JPYDWBRN75GC6UZ26MXJTCXGORTJOWGRDEU4JFPU52LYHGK6UI2QC K2GMFKXUWN5R3KCW6OYVXHN47MIQZKEEIOSAU6LFFKBNKF6JBVWAC #define VECFROM(x) (x), (x) + ARRAYSIZE(x)#define DEFVEC(Z) static std::vector<card_type> Z(VECFROM(a_##Z))static card_type a_deck_of_transport[] = {CARD_PORTAL, CARD_WARP, CARD_SWAP, CARD_VELOCITY
struct card_with_weights{card_type card;int weight[3];
static card_type a_deck_of_destruction[] = {CARD_VITRIOL, CARD_FLAME, CARD_FROST, CARD_VENOM, CARD_HAMMER,CARD_SPARK, CARD_PAIN, CARD_TORMENT
const deck_archetype deck_of_transport[] = {{ CARD_PORTAL, {5, 5, 5} },{ CARD_WARP, {5, 5, 5} },{ CARD_SWAP, {5, 5, 5} },{ CARD_VELOCITY, {5, 5, 5} },END_OF_DECK
DEFVEC(deck_of_destruction);static card_type a_deck_of_battle[] = {CARD_ELIXIR, CARD_BATTLELUST, CARD_METAMORPHOSIS,CARD_HELM, CARD_BLADE, CARD_SHADOW
const deck_archetype deck_of_emergency[] = {{ CARD_TOMB, {5, 5, 5} },{ CARD_BANSHEE, {5, 5, 5} },{ CARD_DAMNATION, {0, 1, 2} },{ CARD_SOLITUDE, {5, 5, 5} },{ CARD_WARPWRIGHT, {5, 5, 5} },END_OF_DECK
DEFVEC(deck_of_battle);static card_type a_deck_of_enchantments[] = {CARD_ELIXIR
const deck_archetype deck_of_destruction[] = {{ CARD_VITRIOL, {5, 5, 5} },{ CARD_FLAME, {5, 5, 5} },{ CARD_FROST, {5, 5, 5} },{ CARD_VENOM, {5, 5, 5} },{ CARD_HAMMER, {5, 5, 5} },{ CARD_SPARK, {5, 5, 5} },{ CARD_PAIN, {5, 5, 5} },{ CARD_TORMENT, {5, 5, 5} },END_OF_DECK
static card_type a_deck_of_summoning[] = {CARD_CRUSADE, CARD_SUMMON_ANIMAL, CARD_SUMMON_DEMON, CARD_SUMMON_WEAPON,CARD_SUMMON_SKELETON
const deck_archetype deck_of_battle[] = {{ CARD_ELIXIR, {5, 5, 5} },{ CARD_BATTLELUST, {5, 5, 5} },{ CARD_METAMORPHOSIS, {5, 5, 5} },{ CARD_HELM, {5, 5, 5} },{ CARD_BLADE, {5, 5, 5} },{ CARD_SHADOW, {5, 5, 5} },END_OF_DECK
DEFVEC(deck_of_wonders);
const deck_archetype deck_of_summoning[] = {{ CARD_CRUSADE, {5, 5, 5} },{ CARD_SUMMON_ANIMAL, {5, 5, 5} },{ CARD_SUMMON_DEMON, {5, 5, 5} },{ CARD_SUMMON_WEAPON, {5, 5, 5} },{ CARD_SUMMON_SKELETON, {5, 5, 5} },END_OF_DECK};
static card_type a_deck_of_dungeons[] = {CARD_GLASS, CARD_MAP, CARD_DOWSING, CARD_SPADE, CARD_TROWEL, CARD_MINEFIELD
const deck_archetype deck_of_wonders[] = {{ CARD_POTION, {5, 5, 5} },{ CARD_FOCUS, {1, 1, 2} },{ CARD_SHUFFLE, {5, 5, 5} },{ CARD_EXPERIENCE, {5, 5, 5} },{ CARD_WILD_MAGIC, {5, 5, 5} },{ CARD_HELIX, {5, 5, 5} },END_OF_DECK
DEFVEC(deck_of_dungeons);
const deck_archetype deck_of_dungeons[] = {{ CARD_GLASS, {5, 5, 5} },{ CARD_MAP, {5, 5, 5} },{ CARD_DOWSING, {5, 5, 5} },{ CARD_SPADE, {5, 5, 5} },{ CARD_TROWEL, {5, 5, 5} },{ CARD_MINEFIELD, {5, 5, 5} },END_OF_DECK};
static card_type a_deck_of_oddities[] = {CARD_GENIE, CARD_BARGAIN, CARD_WRATH, CARD_XOM,CARD_FEAST, CARD_FAMINE, CARD_CURSE
const deck_archetype deck_of_oddities[] = {{ CARD_GENIE, {5, 5, 5} },{ CARD_BARGAIN, {5, 5, 5} },{ CARD_WRATH, {5, 5, 5} },{ CARD_XOM, {5, 5, 5} },{ CARD_FEAST, {5, 5, 5} },{ CARD_FAMINE, {5, 5, 5} },{ CARD_CURSE, {5, 5, 5} },END_OF_DECK
DEFVEC(deck_of_oddities);static card_type a_deck_of_punishment[] = {CARD_WRAITH, CARD_WILD_MAGIC, CARD_WRATH,CARD_XOM, CARD_FAMINE, CARD_CURSE, CARD_TOMB,CARD_DAMNATION, CARD_PORTAL, CARD_MINEFIELD
const deck_archetype deck_of_punishment[] = {{ CARD_WRAITH, {5, 5, 5} },{ CARD_WILD_MAGIC, {5, 5, 5} },{ CARD_WRATH, {5, 5, 5} },{ CARD_XOM, {5, 5, 5} },{ CARD_FAMINE, {5, 5, 5} },{ CARD_CURSE, {5, 5, 5} },{ CARD_TOMB, {5, 5, 5} },{ CARD_DAMNATION, {5, 5, 5} },{ CARD_PORTAL, {5, 5, 5} },{ CARD_MINEFIELD, {5, 5, 5} },END_OF_DECK
case MISC_DECK_OF_DESTRUCTION: pdeck = &deck_of_destruction; break;case MISC_DECK_OF_DUNGEONS: pdeck = &deck_of_dungeons; break;case MISC_DECK_OF_SUMMONING: pdeck = &deck_of_summoning; break;case MISC_DECK_OF_WONDERS: pdeck = &deck_of_wonders; break;case MISC_DECK_OF_PUNISHMENT: pdeck = &deck_of_punishment; break;
case MISC_DECK_OF_DESTRUCTION: pdeck = deck_of_destruction; break;case MISC_DECK_OF_DUNGEONS: pdeck = deck_of_dungeons; break;case MISC_DECK_OF_SUMMONING: pdeck = deck_of_summoning; break;case MISC_DECK_OF_WONDERS: pdeck = deck_of_wonders; break;case MISC_DECK_OF_PUNISHMENT: pdeck = deck_of_punishment; break;
case 0: pdeck = &deck_of_destruction; break;case 1: pdeck = &deck_of_enchantments; break;case 2: pdeck = &deck_of_battle; break;case 3: pdeck = &deck_of_summoning; break;case 4: pdeck = &deck_of_transport; break;case 5: pdeck = &deck_of_emergency; break;
case 0: pdeck = deck_of_destruction; break;case 1: pdeck = deck_of_enchantments; break;case 2: pdeck = deck_of_battle; break;case 3: pdeck = deck_of_summoning; break;case 4: pdeck = deck_of_transport; break;case 5: pdeck = deck_of_emergency; break;
const std::vector<card_type> *pdeck = random_sub_deck(deck_type);
// We assume here that common == 0, rare == 1, legendary == 2.// FIXME: We should use one of the various choose_random_weighted// functions here, probably with an iterator, instead of// duplicating the implementation.
card_type chosen = (*pdeck)[random2(pdeck->size())];// Paranoiaif (chosen < CARD_BLANK1 || chosen >= NUM_CARDS)chosen = NUM_CARDS;return chosen;
return result;
static void retry_blank_card(card_type &card, unsigned char deck_type,unsigned char flags){// BLANK1 == hasn't been retriedif (card != CARD_BLANK1)return;if (flags & (CFLAG_MARKED | CFLAG_SEEN)){// Can't retry a card which has been seen or marked.card = CARD_BLANK2;return;}const std::vector<card_type> *pdeck = random_sub_deck(deck_type);if (flags & CFLAG_ODDITY)pdeck = &deck_of_oddities;// High Evocations gives you another shot (but not at being punished...)if (pdeck != &deck_of_punishment&& you.skills[SK_EVOCATIONS] > random2(30))
if ( one_chance_in(100) )