allies. Note: This does still not handle the actual clouds, just the basic beam.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5701 c06c8d41-db1a-0410-9941-cceddc491573
GSJA56E3ORVIBCBA6T6WU2HE4DCLJ6NZPW76O7L54N4CYPKLJOWQC
FZKMVCODMWQEVVBBQHTTXFBRO4LZEYLB646ZPVUMLHH6EER7FAOAC
NPTVMSNYWIALN2GSKESU6NKX7XNG7QDH2TNIWUB6R6NHCLK32NFAC
D2T32ZGFCJFZVJW7H2AEV3QD7Z4ZYKWEPOZTAFTAPDUTBGXNJXNAC
AAVL2ZLM3DV3NS7LDYQJX2PL5ZBX2F3QOMCCFM5WRGXB53LZOTMQC
Q5YUZONIIPGRWOIQNL6DHRGLKF4V3K5XSZCBH2SL7DP4WPLDNOSQC
NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC
JCWJWGMQIKQGSSFJUQRKNIWW3HBOJSHYDTOPPE5BWOJTIJTDYUTAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
BWAQ3FHBBM6G3K3KYP75CRTR343RDQZJRYX5ZGYUEXYBAC3APDLAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC
SJP5BHX6MFWF3OSQPEF4WUWZWPUGMOVURTT2CUVT6H3A66LETXUAC
RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC
5TG5LXU4DX65KMWCZ7YJHOB3VAETQAVBUHEUSQTPMA327XV2HQWAC
VWYVIRKY35DS4V6HJXEZK3O2NJWNA3LAARRXITR35GIE2HMQK55AC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
QDBILCQHREAKSVXBJJGE2EPNR4ATTQWUZMV7BLJYZWWUI737TSKQC
IGN3Q5YCLHXKWFZQRSRABCHW2JFW5TFVU7TM5EXE2EW7PDBBSQWAC
WHLCTHMPYMYF7PKLFFHPFXHBGV3YF3XSAIK6FWWKISE6SCG7ASUAC
TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC
4GYZYBY7FFORRNPIEFTV4ZM2C7Z6D2KTQOM537ZCC2YBXT2TNSHAC
QGUV5IINCOK6AXWQ2QTZMPDJTEZPON5O565ANT2EE236I5OAPAVAC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
TQLWCGVXVZ75H7MDBJD3DJDUFNW62WOAEDJUVKCHQTAXKBP47CSAC
PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC
HFXCFYFH2X3BIZR55ZADL3CV4MQJEEHDSIJZ7YSTHO3HTZP7GWEAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
KN5WFFRSNGHIGI5IUYRBOA4R4K7XK3AEAAMN6ELDFTSYKPN7QX7AC
AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC
GVW4OBPGXY2Q75HB7QHADZIOHKL22FI2BSJ2TM4K5SBJENBFTQKAC
5K2ANIEXD3CPJM4XNKNPZINP2G4NT7SJBKRN62WNBUKJXFERTILQC
AS2IQQJNNCEQNXXKTGYHLB7RO3ZKCF4F7GK6FJH66BOOKDDRGNIQC
QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC
3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
SFWCESFCUEVKJ6ZQQX3Y5YTIQD5BC6MCVSLVZFRGRTU46BFLKKWAC
6MAMXLPWLW5IXKQXGUNSKNZNHZM7U24GQNN4IWZL2FKKGAKL23YAC
NDCVITU5R7TBEUC4FILNFRKWQGUNCJUGW5HA5KW3CQTU6AYRLYWQC
BJPPSWEN35BG4KP3XTXPDMAJ2GAUMHXKHCNALAZ4B4OS6B3KDSUQC
BTAITFZ3R4D5YR62MU7ECSBQQHRVHEJMXGSHV5HXWPOJDQD4SD7QC
(testbits( flags, SPFLAG_TARGET ) ? DIR_TARGET :
testbits( flags, SPFLAG_GRID ) ? DIR_TARGET :
testbits( flags, SPFLAG_DIR ) ? DIR_DIR : DIR_NONE);
(testbits( flags, SPFLAG_TARGET ) ? DIR_TARGET :
testbits( flags, SPFLAG_GRID ) ? DIR_TARGET :
testbits( flags, SPFLAG_DIR ) ? DIR_DIR
: DIR_NONE);
beem.name = "potion";
beem.colour = you.inv[potion].colour;
beem.range = 9;
beem.rangeMax = 9;
beem.type = dchar_glyph(DCHAR_FIRED_FLASK);
beem.name = "potion";
beem.colour = you.inv[potion].colour;
beem.range = 9;
beem.rangeMax = 9;
beem.type = dchar_glyph(DCHAR_FIRED_FLASK);
beem.hit = you.dex / 2 + roll_dice( 2, you.skills[SK_THROWING] / 2 + 1 );
beem.damage = dice_def( 1, 0 ); // no damage, just producing clouds
beem.ench_power = pow; // used for duration only?
beem.hit = you.dex / 2 + roll_dice( 2, you.skills[SK_THROWING] / 2 + 1 );
beem.damage = dice_def( 1, 0 ); // no damage, just producing clouds
beem.ench_power = pow; // used for duration only?
case 0: beem.flavour = BEAM_POTION_FIRE; break;
case 1: beem.flavour = BEAM_POTION_COLD; break;
case 2: beem.flavour = BEAM_POTION_POISON; break;
case 3: beem.flavour = BEAM_POTION_MIASMA; break;
default: beem.flavour = BEAM_POTION_RANDOM; break;
case 0: beem.flavour = BEAM_POTION_FIRE; break;
case 1: beem.flavour = BEAM_POTION_COLD; break;
case 2: beem.flavour = BEAM_POTION_POISON; break;
case 3: beem.flavour = BEAM_POTION_MIASMA; break;
default: beem.flavour = BEAM_POTION_RANDOM; break;
}
// Fire tracer.
beem.source_x = you.x_pos;
beem.source_y = you.y_pos;
beem.can_see_invis = player_see_invis();
beem.smart_monster = true;
beem.attitude = ATT_FRIENDLY;
beem.fr_count = 0;
beem.is_tracer = true;
fire_beam(beem);
if (beem.fr_count > 0)
{
// We don't want to fire through friendlies.
canned_msg(MSG_OK);
return (false);
beem.name = "ball of vapour";
beem.colour = GREEN;
beem.range = 6;
beem.rangeMax = 6;
beem.damage = dice_def( 1, 0 );
beem.hit = 20;
beem.type = dchar_glyph(DCHAR_FIRED_ZAP);
beem.flavour = BEAM_MMISSILE;
beem.ench_power = pow;
beem.name = "ball of vapour";
beem.colour = GREEN;
beem.range = 6;
beem.rangeMax = 6;
beem.damage = dice_def( 1, 0 );
beem.hit = 20;
beem.type = dchar_glyph(DCHAR_FIRED_ZAP);
beem.flavour = BEAM_MMISSILE;
beem.ench_power = pow;
return (1);
} // end stinking_cloud()
if (beem.fr_count > 0)
{
// We don't want to fire through friendlies.
canned_msg(MSG_OK);
return (false);
}
// Really fire.
beem.is_tracer = false;
fire_beam(beem);
return (true);
}
switch (item.sub_type)
{
case POT_CONFUSION:
case POT_SLOWING:
case POT_DEGENERATION:
case POT_DECAY:
case POT_PARALYSIS:
case POT_POISON:
case POT_STRONG_POISON:
case POT_MUTATION:
// Certainly not useless if it can be used for attacking.
return (!player_knows_spell(SPELL_EVAPORATE));
}
// No potion is useless if it can be used for Evaporate.
if (player_knows_spell(SPELL_EVAPORATE))
return (false);
// Apart from Evaporate, mummies can't use potions.
switch (item.sub_type)
{
case AMU_RAGE:
case RING_REGENERATION:
case RING_SUSTENANCE:
case RING_HUNGER:
case RING_LIFE_PROTECTION:
return (true);
}
}
case AMU_RAGE:
return (you.is_undead
&& (!temp || you.species == SP_VAMPIRE
&& you.hunger_state <= HS_SATIATED)
|| you.religion == GOD_TROG);
if (item.sub_type == RING_SEE_INVISIBLE)
case RING_LIFE_PROTECTION:
case RING_HUNGER:
case RING_REGENERATION:
case RING_SUSTENANCE:
return (you.is_undead
&& (!temp || you.species == SP_VAMPIRE
&& you.hunger_state == HS_STARVING));
case RING_SEE_INVISIBLE:
/*
* Used by monsters in "planning" which spell to cast. Fires off a "tracer"
* which tells the monster what it'll hit if it breathes/casts etc.
*
* The output from this tracer function is four variables in the beam struct:
* fr_count, foe_count: a count of how many friends and foes will (probably)
* be hit by this beam
* fr_power, foe_power: a measure of how many 'friendly' hit dice it will
* affect, and how many 'unfriendly' hit dice.
*
* Note that beam properties must be set, as the tracer will take them
* into account, as well as the monster's intelligence.
*
*/
//
// Used by monsters in "planning" which spell to cast. Fires off a "tracer"
// which tells the monster what it'll hit if it breathes/casts etc.
//
// The output from this tracer function is four variables in the beam struct:
// fr_count, foe_count: a count of how many friends and foes will (probably)
// be hit by this beam
// fr_power, foe_power: a measure of how many 'friendly' hit dice it will
// affect, and how many 'unfriendly' hit dice.
//
// Note that beam properties must be set, as the tracer will take them
// into account, as well as the monster's intelligence.
//