Thrown darts of ice or flame will correctly be displayed as puffs of frost/flame, will do the appropriate damage both to player and monsters and will be identified when thrown by a monster.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6367 c06c8d41-db1a-0410-9941-cceddc491573
CUM44NOPIB7LGTRY2O2R5MYXAB27R3TFM6LUBEQHZFXLZWJ55QZAC
GNS2MZLFRFGMG7L26JFBXEEALSIQNPUVA4NDUJH42Q5TEJDPPFDAC
AIVXE6QBRVCZAASKQRZO6LBDGTYEYSSD2DZCWRX4VLSKE3GCNIDAC
O3CIBMODMCCRFG6XWCUSMMMFKVZHQ7GO6YJVLMC7I4KBZSWNQCVAC
BZIUKX6D2YDH4PCSNOAB3VA6CVE73IJEMQWDB6RKDRGL5AKCDOFAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
6NTCURCJQA4PBNDD5VGFBQAF5QCZZPLWRDZTA65R3EOGMVA475IAC
Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC
UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
Q3DNEB5OOJ34P5ML4CMK3L6SCP7RLW7DDOZEG24KZBX3C7BJRQDAC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
MLOT5KS4ULKR2PZMASX3JDTWNRX6JVPIDHS5NLJQ4JYU66VMK2AAC
SR2BWHPDP6GEOVIGSGISVPHVSR5TNBKURNYL25V6SYTOICNNZRGAC
GDRQMRZTPLRZYBEIJ5AXH3NVKKOQEB5HNG6VFBVZF6JWO7XCOBKQC
R3ZUGT5VJ2DG5NFPG4RBWDWTULDE7L4REYSGVPHJPDXFG6OBIXYAC
V53DXVC5T3N6J47H2CNG4MMPRR4PHW4AIS66QNVTKJNNYTTTQL4AC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
5V47S4NNTHWTSAHV3YLO2VGH7JTUIYJ3GBPDN5ZM4UQALT2ZEXDQC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC
RMCZDJKEYYT6TTZNJGBVZTG74CVLF72NWKON6IJ2HNTCA23INPJQC
X2RVB2O2TUAT336F5ZN3SRNB2EKPHSJKRD6FHI6YM3AYRDV7XJUAC
3FRPKD2JSN7RA2HKWAO3XV7MMKCIAMWIMU6JNJ452VZEUSXM6PWQC
ASCTVJSN3NXYQHRVXAORA43CV6H5V2572IMK4UGRHKBAGJOWHC4AC
RDZUMV3A5TREQHLPPJWDWVXBNIOWC3CQJJ35TYFBQQVQNTU7SPXQC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
// monsters no longer gain unfair advantages with weapons of fire/ice
// and incorrect ammo. They now have same restriction as players.
const int bow_brand =
get_weapon_brand(mitm[monster->inv[MSLOT_WEAPON]]);
const int ammo_brand = get_ammo_brand( item );
// WEAPON or AMMO of FIRE
if (bow_brand == SPWPN_FLAME && ammo_brand != SPMSL_ICE
|| ammo_brand == SPMSL_FLAME && bow_brand != SPWPN_FROST)
{
baseHit += 2;
exDamBonus += 6;
pbolt.flavour = BEAM_FIRE;
pbolt.name = "bolt of ";
if (poison)
pbolt.name += "poison ";
pbolt.name += "flame";
pbolt.colour = RED;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
}
// WEAPON or AMMO of FROST
else if (bow_brand == SPWPN_FROST && ammo_brand != SPMSL_FLAME
|| ammo_brand == SPMSL_ICE && bow_brand != SPWPN_FLAME)
{
baseHit += 2;
exDamBonus += 6;
pbolt.flavour = BEAM_COLD;
pbolt.name = "bolt of ";
if (poison)
pbolt.name += "poison ";
pbolt.name += "frost";
pbolt.colour = WHITE;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
}
}
// WEAPON or AMMO of FIRE
if (bow_brand == SPWPN_FLAME && ammo_brand != SPMSL_ICE
|| ammo_brand == SPMSL_FLAME && bow_brand != SPWPN_FROST)
{
baseHit += 2;
exDamBonus += 6;
pbolt.flavour = BEAM_FIRE;
pbolt.name = "bolt of ";
if (poison)
pbolt.name += "poison ";
pbolt.name += "flame";
pbolt.colour = RED;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
}
// WEAPON or AMMO of FROST
else if (bow_brand == SPWPN_FROST && ammo_brand != SPMSL_FLAME
|| ammo_brand == SPMSL_ICE && bow_brand != SPWPN_FLAME)
{
baseHit += 2;
exDamBonus += 6;
pbolt.flavour = BEAM_COLD;
pbolt.name = "bolt of ";
if (poison)
pbolt.name += "poison ";
pbolt.name += "frost";
pbolt.colour = WHITE;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
if ((item.sub_type == MI_SLING_BULLET && rc == SPMSL_POISONED)
|| item.sub_type == MI_JAVELIN
&& (rc == SPMSL_FLAME || rc == SPMSL_ICE)
|| item.sub_type == MI_THROWING_NET)
if (item.sub_type == MI_SLING_BULLET && rc == SPMSL_POISONED
|| item.sub_type == MI_JAVELIN
&& (rc == SPMSL_FLAME || rc == SPMSL_ICE)
|| item.sub_type == MI_THROWING_NET)
// Extract launcher bonuses due to magic.
if (projected == LRET_LAUNCHED)
{
lnchHitBonus = you.inv[you.equip[EQ_WEAPON]].plus;
lnchDamBonus = you.inv[you.equip[EQ_WEAPON]].plus2;
}
const int bow_brand = get_weapon_brand( launcher );
const int ammo_brand = get_ammo_brand( item );
bool poisoned = (ammo_brand == SPMSL_POISONED);
// Extract launcher bonuses due to magic.
lnchHitBonus = launcher.plus;
lnchDamBonus = launcher.plus2;
// Note that bow_brand is known since the bow is equipped.
if ((bow_brand == SPWPN_FLAME || ammo_brand == SPMSL_FLAME)
&& ammo_brand != SPMSL_ICE && bow_brand != SPWPN_FROST)
{
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
pbolt.flavour = BEAM_FIRE;
pbolt.name = "bolt of ";
if (poisoned)
pbolt.name += "poison ";
pbolt.name += "flame";
pbolt.colour = RED;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
}
if ((bow_brand == SPWPN_FROST || ammo_brand == SPMSL_ICE)
&& ammo_brand != SPMSL_FLAME && bow_brand != SPWPN_FLAME)
{
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
pbolt.flavour = BEAM_COLD;
pbolt.name = "bolt of ";
if (poisoned)
pbolt.name += "poison ";
pbolt.name += "frost";
pbolt.colour = WHITE;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
}
// The chief advantage here is the extra damage this does
// against susceptible creatures.
// Note: weapons & ammo of eg fire are not cumulative
// ammo of fire and weapons of frost don't work together,
// and vice versa.
}
mprf(MSGCH_DIAGNOSTICS, "bow_brand: %d, ammo_brand: %d",
bow_brand, ammo_brand);
// The chief advantage here is the extra damage this does
// against susceptible creatures.
// Note: weapons & ammo of eg fire are not cumulative
// ammo of fire and weapons of frost don't work together,
// and vice versa.
// Note that bow_brand is known since the bow is equipped.
if ((bow_brand == SPWPN_FLAME || ammo_brand == SPMSL_FLAME)
&& ammo_brand != SPMSL_ICE && bow_brand != SPWPN_FROST)
{
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
pbolt.flavour = BEAM_FIRE;
pbolt.name = "bolt of ";
if (poisoned)
pbolt.name += "poison ";
pbolt.name += "flame";
pbolt.colour = RED;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
if ((bow_brand == SPWPN_FROST || ammo_brand == SPMSL_ICE)
&& ammo_brand != SPMSL_FLAME && bow_brand != SPWPN_FLAME)
{
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
pbolt.flavour = BEAM_COLD;
pbolt.name = "bolt of ";
if (poisoned)
pbolt.name += "poison ";
pbolt.name += "frost";
pbolt.colour = WHITE;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
}