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 FIREif (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 FROSTelse 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 FIREif (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 FROSTelse 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();}