(not counting self-targetting since what we're trying to avoid in that case is loss of magic as well as self-damage) and add some special cases for Evaporate, so the potions use appropriate resistances without leaking information on the random choices.
Let Enhancers start with Short Blades skill 1.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6627 c06c8d41-db1a-0410-9941-cceddc491573
K33CV7EYR37TTSEXQWQ6QPHSEUFO545AIPUZOA2C47QTUCUWFPAAC
F4UQYIPTS5KIDVP7WHBWGHLCXSIAGRGSCXI445EBE7JTOHW3WJMAC
FNY62WM76UGY6IZQYRTRLSBLLUKUHL5N4CG5HQRSWTU2MYIXNJ5QC
4QRLZDW4KBFG34B3MCG4375NHFR3WKWSLWQKRMQ3OE5R26WCZBBQC
GSJA56E3ORVIBCBA6T6WU2HE4DCLJ6NZPW76O7L54N4CYPKLJOWQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
OIT7AR4IL2ZH4ISWXG3Y7Y24ICNQ5WSUFJLSUIYD7P5VGYU5BJLQC
J7KCPTGASQNRAKVKQ5FCXZ75E75PK7I2BB6MFSI3COWU6HRKTWSAC
6ARBZEUSCIPVJUQJST5HG6TKQYQZPOHWYIIJO4OD2SUECPYMLVIQC
3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
5LIWCQ5G74WIMISKX3SBMZFPVVYEDNUIREAK55XYR5RTNSHVGDYQC
PR42BCP5BPRFD2MP5H6CIJP7E57Q6TKL6SOXZWFKMFVR2OZWHT7AC
RIMJO42HB75SAZH44KZ2UH2QULOPIJLMEN4CR2CYNR2EKEKLFHSQC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
YMLVBQ6M27MECUVMU3BQP3WSGR7GW4XJMQIHLGHHWMVXHMMIXOYAC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC
EYHC4V76YSCWY22DQIXLVTAP5SKZLBSBQWYFPDVEXF6IW552HR5QC
static bool _beam_is_harmless(bolt &beam, monsters *mon)
{
// For enchantments, this is already handled in _nasty_beam().
if (beam.name[0] == '0')
return (!_nasty_beam(mon, beam));
// The others are handled here.
switch (beam.flavour)
{
case BEAM_DIGGING:
return (true);
// Cleansing flame doesn't affect player's followers.
case BEAM_HOLY:
return (mons_is_holy(mon)
|| is_good_god(you.religion)
&& ( is_follower(mon) || mons_neutral(mon) ));
case BEAM_STEAM:
return (mons_res_steam(mon) >= 3);
case BEAM_FIRE:
return (mons_res_fire(mon) >= 3);
case BEAM_COLD:
return (mons_res_cold(mon) >= 3);
case BEAM_MIASMA:
case BEAM_NEG:
return (mons_res_negative_energy(mon) == 3);
case BEAM_ELECTRICITY:
return (mons_res_elec(mon) >= 3);
case BEAM_POISON:
return (mons_res_poison(mon) >= 3);
case BEAM_ACID:
return (mons_res_acid(mon) >= 3);
default:
return (false);
}
}
static bool _beam_is_harmless_player(bolt &beam)
{
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "beam flavour: %d", beam.flavour);
#endif
// Shouldn't happen anyway since enchantments are either aimed at self
// (not prompted) or cast at monsters and don't explode or bounce.
if (beam.name[0] == '0')
return (false);
// The others are handled here.
switch (beam.flavour)
{
case BEAM_DIGGING:
return (true);
// Cleansing flame doesn't affect player's followers.
case BEAM_HOLY:
return (is_good_god(you.religion));
case BEAM_STEAM:
return (player_res_steam(false) >= 3);
case BEAM_MIASMA:
case BEAM_NEG:
return (player_prot_life(false) >= 3);
case BEAM_POISON:
return (player_res_poison(false));
case BEAM_POTION_STINKING_CLOUD:
return (player_res_poison(false) || player_mental_clarity(false));
case BEAM_ELECTRICITY:
return (player_res_electricity(false));
case BEAM_FIRE:
case BEAM_COLD:
case BEAM_ACID:
// Fire and ice can destroy inventory items, acid damage equipment.
return (false);
default:
return (false);
}
}
}
}
static bool _beam_is_harmless(bolt &beam, monsters *mon)
{
// For enchantments, this is already handled in _nasty_beam().
if (beam.name[0] == '0')
return (!_nasty_beam(mon, beam));
// The others are handled here.
switch (beam.flavour)
{
case BEAM_DIGGING:
return (true);
// Cleansing flame doesn't affect player's followers.
case BEAM_HOLY:
return (mons_is_holy(mon)
|| is_good_god(you.religion)
&& ( is_follower(mon) || mons_neutral(mon) ));
case BEAM_STEAM:
return (mons_res_steam(mon) >= 3);
case BEAM_FIRE:
return (mons_res_fire(mon) >= 3);
case BEAM_COLD:
return (mons_res_cold(mon) >= 3);
case BEAM_MIASMA:
case BEAM_NEG:
return (mons_res_negative_energy(mon) == 3);
case BEAM_ELECTRICITY:
return (mons_res_elec(mon) >= 3);
case BEAM_POISON:
return (mons_res_poison(mon) >= 3);
case BEAM_ACID:
return (mons_res_acid(mon) >= 3);
default:
return (false);