git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2962 c06c8d41-db1a-0410-9941-cceddc491573
XDJGQNFELURGXMUAOOVALQMSLAJVHMG63KPKVA33HTJFVZROGZ4AC
XMQO4XAQWQBHP53TJRYEYDGCNEW34WK2YNIVY6UWZAPR2ZZXPBMQC
IDWM4TPSETNZMHQY3V6PGMZPWOJSTJ77PD3ZUOJLLZADQ2KKAVJQC
GCDBSJXJCPEK4NCX5CVGDBK3432PFCU5OCO2F3DA32332ALI2ZYQC
DELYWRJYVTRDE5XWQ2L2IRJPO4N2F3JVLPLCTGOU7QS5JO75NOPAC
3YBQGKQ22WFXA5RXDSKLFWMABLJ6KHBVWEIA3WIDHWM25OECNTYAC
EJEHTLHZ5DL4SJQJBMQL5K3IV2ZMCZQBVCRRERER7SPOMNKFJTVQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ONKB2ZZ2MWY7UGPBHW6EE4N3EEPJONPRRALEFZZR2YTZHNEIGV5AC
FLKXPXQ7SRFZPJPDM35D5CG6M52WP4SL32QNEZNSHGBNZYTKYGYAC
3NFVCXRVGHN2CHLLWFZES5RBS4R2BCDS4EEQNSDCFYIFQWQK7MUQC
YATODO2EN3AW7IXW5PL25HHK34YHF6Y32QBMOUZXEATZZ4YQQWZQC
CJ6OSJQPAZOGWC56OYBALICSITGVUEQERE7LWIYJL2AXWRZE523AC
LOJYD6QZRNLNDDZJKVBMKQIBPTKSRN2ETCYGNVV47M7L3QLUJUJAC
SLDR32H45VDN74AVZ2JDPLNK7AZWXDS2YRTLMGK7E3FYW6OWOFJAC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC
RRNEVUYOK5S4M4QH77N34IXSSNUXVQAIZQLXAQKQCRITMPUKGP6AC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC
TAVHZJPVNJBZR7CUURAOYNDZPNVQ3AGHTXDEP5K4JGYETBLQJDRQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
VEOWM6UDFNWRAXP5YUO7XBH4ZALAJXCWRA4IRDITXJ3QWH42CTWAC
RLN5WLM2K5U6QBIBWBLK5XTDD3MPPXXXOVPUT33JKOQF3PHF6WZQC
L4UCVNVRFTHENDKDOY6X75LXIE2B7XIMSKGVKHBOXNID7RDTBQRAC
Z7SW3IKYNXMOHHD77NGXN6RGL32PZBO6AIHLJY74IRO23AIRKWMQC
TMFNNWBMIPWM2FDC7I5R2RUKWNBS3GD3DX6VN452VYRPC3GU2HCQC
K2GMFKXUWN5R3KCW6OYVXHN47MIQZKEEIOSAU6LFFKBNKF6JBVWAC
EGV2HM7SD7UQSWJGLR65NQJTUBAJ7WHLM67FMH4UFP7JRSFKREPAC
E42EFZ3RINKLTGOJJZAH2N5QF3P4S5NCO5T52HLXJRMBPP463HTAC
LUNOTEIMYZJ7JL5P55GEHUVSDEZMYX3TWYUB2ABRHAYJEWQSSXIAC
GOX2FK35IXLRJJJYT6QHL2GTFUWN6IJ6P7GIWKSP2LDOGTWA7XEQC
case GOD_NO_GOD:
sprintf(godname_buff, "No God");
break;
case GOD_RANDOM:
sprintf(godname_buff, "random");
break;
case GOD_ZIN:
sprintf(godname_buff, "Zin%s", long_name ? " the Law-Giver" : "");
break;
case GOD_SHINING_ONE:
strcpy(godname_buff, "The Shining One");
break;
case GOD_KIKUBAAQUDGHA:
strcpy(godname_buff, "Kikubaaqudgha");
break;
case GOD_NO_GOD: return "No God";
case GOD_RANDOM: return "random";
case GOD_ZIN: return (long_name ? "Zin the Law-Giver" : "Zin");
case GOD_SHINING_ONE: return "The Shining One";
case GOD_KIKUBAAQUDGHA: return "Kikubaaqudgha";
sprintf(godname_buff, "Yredelemnul%s", long_name ? " the Dark" : "");
break;
return (long_name ? "Yredelemnul the Dark" : "Yredelemnul");
case GOD_VEHUMET: return "Vehumet";
case GOD_OKAWARU: return (long_name ? "Warmaster Okawaru" : "Okawaru");
case GOD_MAKHLEB: return (long_name ? "Makhleb the Destroyer" : "Makhleb");
case GOD_SIF_MUNA:
return (long_name ? "Sif Muna the Loreminder" : "Sif Muna");
case GOD_TROG: return (long_name ? "Trog the Wrathful" : "Trog");
case GOD_NEMELEX_XOBEH: return "Nemelex Xobeh";
case GOD_ELYVILON: return (long_name ? "Elyvilon the Healer" : "Elyvilon");
case GOD_LUGONU: return (long_name ? "Lugonu the Unformed" : "Lugonu");
case GOD_BEOGH: return (long_name ? "Beogh the Brigand" : "Beogh");
strcat(godname_buff, " ");
switch(random2(30))
{
default:
strcat(godname_buff, "of Chaos");
break;
case 1:
strcat(godname_buff, "the Random");
if (coinflip())
strcat(godname_buff, coinflip()?"master":" Number God");
break;
case 2:
strcat(godname_buff, "the Tricky");
break;
case 3:
sprintf( godname_buff, "Xom the %sredictable", coinflip() ? "Less-P"
: "Unp" );
break;
case 4:
strcat(godname_buff, "of Many Doors");
break;
case 5:
strcat(godname_buff, "the Capricious");
break;
case 6:
strcat(godname_buff, "of ");
strcat(godname_buff, coinflip() ? "Bloodstained" : "Enforced");
strcat(godname_buff, " Whimsey");
break;
case 7:
strcat(godname_buff, "\"What was your username?\" *clickity-click*");
break;
case 8:
strcat(godname_buff, "of Bone-Dry Humour");
break;
case 9:
strcat(godname_buff, "of ");
strcat(godname_buff, coinflip() ? "Malevolent" : "Malicious");
strcat(godname_buff, " Giggling");
break;
case 10:
strcat(godname_buff, "the Psycho");
strcat(godname_buff, coinflip() ? "tic" : "path");
break;
case 11:
strcat(godname_buff, "of ");
switch(random2(5))
{
case 0: strcat(godname_buff, "Gnomic"); break;
case 1: strcat(godname_buff, "Ineffable"); break;
case 2: strcat(godname_buff, "Fickle"); break;
case 3: strcat(godname_buff, "Swiftly Tilting"); break;
case 4: strcat(godname_buff, "Unknown"); break;
}
strcat(godname_buff, " Intent");
if (coinflip())
strcat(godname_buff, "ion");
break;
case 12:
sprintf(godname_buff, "The Xom-Meister");
if (coinflip())
strcat(godname_buff, ", Xom-a-lom-a-ding-dong");
else if (coinflip())
strcat(godname_buff, ", Xom-o-Rama");
else if (coinflip())
strcat(godname_buff, ", Xom-Xom-bo-Bom, Banana-Fana-fo-Fom");
break;
case 13:
strcat(godname_buff, "the Begetter of ");
strcat(godname_buff, coinflip() ? "Turbulence" : "Discontinuities");
break;
}
const char* xom_names[] = {
"Xom the Random", "Xom the Random Number God",
"Xom the Tricky", "Xom the Less-Predictable",
"Xom the Unpredictable", "Xom of Many Doors",
"Xom the Capricious", "Xom of Bloodstained Whimsey",
"Xom of Enforced Whimsey", "Xom of Bone-Dry Humour",
"Xom of Malevolent Giggling", "Xom of Malicious Giggling",
"Xom the Psychotic", "Xom the Psychopath",
"Xom of Gnomic Intent", "Xom the Fickle",
"Xom of Unknown Intention", "The Xom-Meister",
"Xom the Begetter of Turbulence"
};
return (one_chance_in(3) ? RANDOM_ELEMENT(xom_names)
: "Xom of Chaos");
break;
case GOD_VEHUMET:
strcpy(godname_buff, "Vehumet");
break;
case GOD_OKAWARU:
sprintf(godname_buff, "%sOkawaru", long_name ? "Warmaster " : "");
break;
case GOD_MAKHLEB:
sprintf(godname_buff, "Makhleb%s", long_name ? " the Destroyer" : "");
break;
case GOD_SIF_MUNA:
sprintf(godname_buff, "Sif Muna%s", long_name ? " the Loreminder" : "");
break;
case GOD_TROG:
sprintf(godname_buff, "Trog%s", long_name ? " the Wrathful" : "");
break;
case GOD_NEMELEX_XOBEH:
strcpy(godname_buff, "Nemelex Xobeh");
break;
case GOD_ELYVILON:
sprintf(godname_buff, "Elyvilon%s", long_name ? " the Healer" : "");
break;
case GOD_LUGONU:
sprintf(godname_buff, "Lugonu%s", long_name? " the Unformed" : "");
break;
case GOD_BEOGH:
sprintf(godname_buff, "Beogh%s", long_name? " the Brigand" : "");
break;
default:
sprintf(godname_buff, "The Buggy One (%d)", which_god);
case NUM_GODS: return "Buggy";
desc += std::string(god_name(static_cast<god_type>(iorig)))
+ " gifted " + article_it(item) + " to you ";
desc += god_name(static_cast<god_type>(iorig))
+ " gifted " + article_it(item) + " to you ";
}
static void unmark_deck(item_def& deck)
{
if ( !is_deck(deck) )
return;
CrawlHashTable &props = deck.props;
if ( !props.exists("card_flags") )
return;
CrawlVector &flags = props["card_flags"];
for ( unsigned int i = 0; i < flags.size(); ++i )
flags[i] =
static_cast<char>((static_cast<char>(flags[i]) & ~CFLAG_MARKED));
// We'll be mean and leave non_brownie_draws as-is.
props["num_marked"] = static_cast<char>(0);
}
static void unmark_and_shuffle_deck(item_def& deck)
{
if ( is_deck(deck) )
{
unmark_deck(deck);
shuffle_deck(deck);
}
}
static void shuffle_all_decks_on_level()
{
for ( int i = 0; i < MAX_ITEMS; ++i )
{
item_def& item(mitm[i]);
if ( is_valid_item(item) && is_deck(item) )
{
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Shuffling: %s on level %d, branch %d",
item.name(DESC_PLAIN).c_str(),
static_cast<int>(you.your_level),
static_cast<int>(you.where_are_you));
#endif
unmark_and_shuffle_deck(item);
}
}
static void shuffle_inventory_decks()
{
for ( int i = 0; i < ENDOFPACK; ++i )
{
item_def& item(you.inv[i]);
if ( is_valid_item(item) && is_deck(item) )
{
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Shuffling in inventory: %s",
item.name(DESC_PLAIN).c_str());
#endif
unmark_and_shuffle_deck(item);
}
}
}
void nemelex_shuffle_decks()
{
apply_to_all_dungeons(shuffle_all_decks_on_level);
shuffle_inventory_decks();
god_speaks(GOD_NEMELEX_XOBEH, "You hear Nemelex chuckle.");
}
char name[80];
strncpy(name, god_name(gi), sizeof(name));
char *ptr = strstr( strlwr(name), strlwr(specs) );
if (ptr != NULL)
if ( lowercase_string(god_name(gi)).find(specs) != std::string::npos)