git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9595 c06c8d41-db1a-0410-9941-cceddc491573
RQ24Y25QDO2GY65XESEVBCP6VXCB7BDTWXO42IPPI6UPRJQ5XYDAC
Y3HZ5Q3MH5YLRMGJNGGTJDKB32WCV5XKP5HNNYPGXL5QV55K5IQAC
G326V6CGNWTJUBKPCDD2RGCASATPSJTYMZLNPLIJEJM2JHVIDWKAC
FSJKED4U2SOUP64DTHF2NEGAYY7EUMSIDKC2SATEXAXEVOCNL3CAC
RIW55YSFKKTJLBTOJRVUBC7JOFUBOK7OBMISW4PBSVLYJHAAKPPQC
E4I25AZQOBBI4KOLVRGSOZJNPC7XCSUUCE7HT7VVGS54J2AVLPHQC
6QVMISKCQYTVHBH2YZLOE77I72NIVUQN2D7ACECQ5TYMVC72LAWQC
JYEEOUYQ7ZPKOGWUV7VCORBVSOLF2UCBFBH3TR75RGOSS6PNKYUAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
4EZVKDQA5GM3QDTNTCKEKGH4F6LGAYNLBT756PXODKZ2B7C4ZVHAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
CO3GKDYMG4P7SH6QLQSBQTAXPWLKSPNMHTUT46USTBL4YBLT4L5QC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
CEK6M777MI5JVDC3KHE3JD3FETVSJ4VN6DGATBI5P3O6P5XHY4DAC
EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
IMC2HA2YWCU7SLGGVQQVUEUIST4ILSOEAUYXNZAW2PJZ475GXLDAC
F2X5SIIXWXXEL2FVMYDC4GL2ODZ4O7RA46U66VGJ5K2EZHHAQGUAC
WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC
YH23OR26YDA6C5K74QRWHROMTPGRNZHTHE4HJGPC3JVNAJ62CHGAC
NS3KXJXQSN33UQSOBDK3WXXKA3KY5YOUJL67NBZKGQAJYDYZ2COQC
JYCMD6WMNHXA53K4LLKVTNX6PLRLU25F6J2TYMPQXM2ENAE66NIAC
5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC
LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC
SEUJUTDRU4GF3RALVPYSMVWXQDUMU2MZGKMM5GVVAQG4ARE5WFKQC
SOW47HUSYI6HG7UJON3W2F6PQBGD5J2OQLGWTZCPP6QQG6NEGAJAC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
VM7ZJXYXF3XTGYLWW5RXTEFGG46FOOWWEATC6S565BGHBGM3CXUAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC
UET576SVCGS2TXEDRTO7BUTOTLJ77MYHIVZJCDWGH2BAXYMKG6DAC
2NFQGSR74TVX4ULEDLQVIXZF6AOXSYQTLFAR3RFZL4Q5ZLUZEPDAC
BZIUKX6D2YDH4PCSNOAB3VA6CVE73IJEMQWDB6RKDRGL5AKCDOFAC
HQ5FYPDFIQNNDMKDSGWAAXYIVIRK42B4OBA2LESP2OA5SPKSTLVQC
3PBG6FJ6WGSR4UM3I7UQUYYCSYU3UBCKCIKYKUEEANIK72TUL4XAC
SOCJXX6MMOXLBEWBID4QN5FW2YNYULNNN7K3IRL7RSWK5EUNAZLQC
QLIDDODO7Q7S2UTKVR2SMRMEAXHRPA5C7SU267EQGV6VJ7UXW5JQC
Z6Q7JVMFQ32SC7FRGOB7CE7JS2HEOPAO3B2VLU3YR3UCUDZFIPFQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
6RJVKSL7RVZIZIZIC4TWIYJQ24RUSB346ODS3NYGDHUIRTC4Z5FQC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
47NSOFQMBZCDIBHEAZSENFUGDSQCX3GJHFBUZ65ARDKCYIZ435LAC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
PKXXBHS3LWLPZI2QVRX22MSQ4R2626IXRSNHFFYHXYTLJJQU54LQC
XE5FBYASPYLMBNHWKL5MRN7TQGIWR4O6PF72I7WXRTUJ7HS2O2LAC
if (you.species == SP_VAMPIRE)
{
mouse_control mc(MOUSE_MODE_MORE);
const int keyin = getch();
if (keyin == '!' || keyin == CK_MOUSE_CMD)
display_mutations();
}
mouse_control mc(MOUSE_MODE_MORE);
const int keyin = getch();
if (keyin == '!' || keyin == CK_MOUSE_CMD)
display_mutations();
}
static bool _mons_is_fiery(int mc)
{
return (mc == MONS_FIRE_VORTEX
|| mc == MONS_FIRE_ELEMENTAL
|| mc == MONS_FLAMING_CORPSE
|| mc == MONS_EFREET
|| mc == MONS_AZRAEL
|| mc == MONS_LAVA_WORM
|| mc == MONS_LAVA_FISH
|| mc == MONS_LAVA_SNAKE
|| mc == MONS_SALAMANDER
|| mc == MONS_MOLTEN_GARGOYLE
|| mc == MONS_ORB_OF_FIRE);
menu_action(ACT_EXAMINE), title(NULL), flags(_flags), tag(tagname),
first_entry(0), y_offset(0), pagesize(0), max_pagesize(0),
menu_action(ACT_EXAMINE), title(NULL), title2(NULL), flags(_flags),
tag(tagname), first_entry(0), y_offset(0), pagesize(0), max_pagesize(0),
keymap ? (keymc == KC_DEFAULT ? "default " :
keymc == KC_LEVELMAP ? "level-map " :
keymc == KC_TARGETING ? "targeting " :
keymc == KC_CONFIRM ? "confirm " :
keymc == KC_MENU ? "menu " :
"buggy") : "",
keymap ? (keymc == KMC_DEFAULT ? "default " :
keymc == KMC_LEVELMAP ? "level-map " :
keymc == KMC_TARGETING ? "targeting " :
keymc == KMC_CONFIRM ? "confirm " :
keymc == KMC_MENU ? "menu "
: "buggy") : "",
keymc = KeymapContext( KC_DEFAULT + s[1] - '0' );
if (keymc >= KC_DEFAULT && keymc < KC_CONTEXT_COUNT)
keymc = KeymapContext( KMC_DEFAULT + s[1] - '0' );
if (keymc >= KMC_DEFAULT && keymc < KMC_CONTEXT_COUNT)
// At level == 27 there's a 20.3% chance of a level 3 miscast.
int level1_chance = level;
int level2_chance = std::max( 0, level - 7);
int level3_chance = std::max( 0, level - 15);
// At level == 27 there's a 13.9% chance of a level 3 miscast.
int level0_chance = level;
int level1_chance = std::max( 0, level - 7);
int level2_chance = std::max( 0, level - 12);
int level3_chance = std::max( 0, level - 17);
msg = "You hear a loud twang.";
{
std::string noise = getSpeakString("weapon_noise");
if (!noise.empty())
msg = "You hear " + noise;
}
else
{
msg = getSpeakString("weapon_noises");
std::string wepname = wep_name(DESC_CAP_YOUR);
if (!msg.empty())
{
msg = replace_all(msg, "@Your_weapon@", wepname);
msg = replace_all(msg, "@The_weapon@", wepname);
}
}
return (random_choose_weighted(
15, SPWPN_NORMAL,
10, SPWPN_FLAMING,
10, SPWPN_FREEZING,
10, SPWPN_ELECTROCUTION,
10, SPWPN_VENOM,
10, SPWPN_CHAOS,
5, SPWPN_VORPAL,
5, SPWPN_DRAINING,
5, SPWPN_VAMPIRICISM,
2, SPWPN_CONFUSE,
2, SPWPN_DISTORTION,
0));
int brand = SPWPN_NORMAL;
// Assuming the chaos to be mildly intelligent, try to avoid brands
// that clash with the most basic resists of the defender,
// i.e. its holiness.
while (true)
{
brand = (random_choose_weighted(
5, SPWPN_VORPAL,
10, SPWPN_FLAMING,
10, SPWPN_FREEZING,
10, SPWPN_ELECTROCUTION,
10, SPWPN_VENOM,
10, SPWPN_CHAOS,
5, SPWPN_DRAINING,
5, SPWPN_VAMPIRICISM,
5, SPWPN_HOLY_WRATH,
2, SPWPN_CONFUSE,
2, SPWPN_DISTORTION,
0));
if (one_chance_in(3))
break;
bool susceptible = true;
switch (brand)
{
case SPWPN_FLAMING:
if (defender->is_fiery())
susceptible = false;
break;
case SPWPN_FREEZING:
if (defender->is_icy())
susceptible = false;
break;
case SPWPN_ELECTROCUTION:
if (defender->airborne())
susceptible = false;
break;
case SPWPN_VENOM:
if (defender->holiness() == MH_UNDEAD)
susceptible = false;
break;
case SPWPN_DRAINING:
case SPWPN_VAMPIRICISM:
if (defender->holiness() != MH_NATURAL)
susceptible = false;
break;
case SPWPN_HOLY_WRATH:
if (defender->holiness() != MH_UNDEAD
&& defender->holiness() != MH_DEMONIC)
{
susceptible = false;
}
break;
case SPWPN_CONFUSE:
if (defender->holiness() != MH_NONLIVING
&& defender->holiness() != MH_PLANT)
{
susceptible = false;
}
break;
default:
break;
}
if (susceptible)
break;
}
return (brand);
enum KeymapContext {
KC_DEFAULT, // For no-arg getchm(), must be zero.
KC_LEVELMAP, // When in the 'X' level map
KC_TARGETING, // Only during 'x' and other targeting modes
KC_CONFIRM, // When being asked y/n/q questions
KC_MENU, // For menus
enum KeymapContext
{
KMC_DEFAULT, // For no-arg getchm(), must be zero.
KMC_LEVELMAP, // When in the 'X' level map
KMC_TARGETING, // Only during 'x' and other targeting modes
KMC_CONFIRM, // When being asked y/n/q questions
KMC_MENU, // For menus