generic logic that uses item tiles for BEAM_MISSILE, else bolts according to flavour. Identify monster fired ammunition ego if the launcher ego is known, not that it has much of an effect because plain ammo gets no special description. In the message list the fired item as it will look to the player (i.e. "arrow of ice" for a plain arrow fired off a bow of frost), even though the item actually dropped will still be a plain one. I hope this isn't too confusing. (And if it is, it should be easy to revert. :p)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6331 c06c8d41-db1a-0410-9941-cceddc491573
AIVXE6QBRVCZAASKQRZO6LBDGTYEYSSD2DZCWRX4VLSKE3GCNIDAC
3FRPKD2JSN7RA2HKWAO3XV7MMKCIAMWIMU6JNJ452VZEUSXM6PWQC
PONOTAV3NEDNVGEJNPMLC5AY2BPV5E3ZHWDLNQCKCEBVKPBIY7QQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
LP5EK64IEM7AHNYQID4GGKOQJQNZLKY4DCCZN47SIUZ6IXAXH5UAC
32PXX2XJVV7YSLLYNAVS7RYKYRAOQ565TZMTITSEPSSXOYPB5M2AC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
O3VTFHATCIAAJ4HQF2VJIEXHDZ6RJYJKXJ4ST65WWV26BSGW4YWQC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
2KTJHQUX2LTU2BCLS5YXVRRKMOYKKIZAPF2LBKORFGSHEN5IO3IAC
X6JIHUW4GZTWTNA7U6TTHRO4P2I7GNSS7TQDPQWVTIHBIG4NVWXQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
RMCZDJKEYYT6TTZNJGBVZTG74CVLF72NWKON6IJ2HNTCA23INPJQC
X2RVB2O2TUAT336F5ZN3SRNB2EKPHSJKRD6FHI6YM3AYRDV7XJUAC
ASCTVJSN3NXYQHRVXAORA43CV6H5V2572IMK4UGRHKBAGJOWHC4AC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
ZJIGDAAKOHJWPD7TMNTNKP7ZT4K4GHD7UGSAWERTIJA3BGL5BETQC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
5V47S4NNTHWTSAHV3YLO2VGH7JTUIYJ3GBPDN5ZM4UQALT2ZEXDQC
3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC
FZKMVCODMWQEVVBBQHTTXFBRO4LZEYLB646ZPVUMLHH6EER7FAOAC
XE5FBYASPYLMBNHWKL5MRN7TQGIWR4O6PF72I7WXRTUJ7HS2O2LAC
KVBY4K2MCJZXNFVJZPKTYUXRXPH5LE6ZOJW4LTHOZPO6TD555IVQC
BINKDWGFGUPTOA7IE5KK4ZIELGU5WC3X47MYXOWU4X43EGAC5DUAC
6TEISZD7HYSSL24EOKIBNURU66KGSQX7B7SNAHBP4DQSAOTGH2MQC
/*
Determine Octant of missile direction
---> X+
|
| 701
Y 6O2
+ 543
the octant boundary slope tan(pi/8)=sqrt(2)-1 = 0.414 is approximated by 2/5
*/
// Determine Octant of missile direction
// .---> X+
// |
// | 701
// Y 6O2
// + 543
//
// The octant boundary slope tan(pi/8)=sqrt(2)-1 = 0.414 is approximated by 2/5.
int element = (launcher_brand == SPWPN_FROST)
+ (ammo_brand == SPMSL_ICE)
- (launcher_brand == SPWPN_FLAME)
- (ammo_brand == SPMSL_FLAME);
int element = (launcher_brand == SPWPN_FROST
+ ammo_brand == SPMSL_ICE
- launcher_brand == SPWPN_FLAME
- ammo_brand == SPMSL_FLAME);
if (ammo_brand != SPMSL_ICE && bow_brand != SPWPN_FROST)
{
#ifdef USE_TILE
// Mark brand for tile output.
if (ammo_brand != SPMSL_FLAME)
set_item_ego_type( item, OBJ_MISSILES, SPMSL_FLAME );
#endif
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
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();
}
#ifdef USE_TILE
else
set_item_ego_type( item, OBJ_MISSILES, SPMSL_NORMAL );
#endif
pbolt.name += "flame";
pbolt.colour = RED;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
if (ammo_brand != SPMSL_FLAME && bow_brand != SPWPN_FLAME)
{
#ifdef USE_TILE
// Mark brand for tile output.
if (ammo_brand != SPMSL_ICE)
set_item_ego_type( item, OBJ_MISSILES, SPMSL_ICE );
#endif
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
// [dshaligram] Branded arrows are much stronger.
dice_mult = (dice_mult * 150) / 100;
pbolt.name += "frost";
pbolt.colour = WHITE;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
}
#ifdef USE_TILE
else
set_item_ego_type( item, OBJ_MISSILES, SPMSL_NORMAL );
#endif
pbolt.name += "frost";
pbolt.colour = WHITE;
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.thrower = KILL_YOU_MISSILE;
pbolt.aux_source.clear();
// Print type of item as influenced by launcher.
item_def ammo = item;
if (pbolt.flavour == BEAM_FIRE)
{
if (ammo.special != SPMSL_FLAME)
ammo.special = SPMSL_FLAME;
}
else if (pbolt.flavour == BEAM_COLD)
{
if (ammo.special != SPMSL_ICE)
ammo.special = SPMSL_ICE;
}
else
{
if (ammo.special != SPMSL_NORMAL && ammo.special != SPMSL_POISONED)
ammo.special = SPMSL_NORMAL;
}