git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2387 c06c8d41-db1a-0410-9941-cceddc491573
BUSA7O6EFBZVAG2RL5T7MD2WTWKOEKKIAAZ2VS4Y3L6ECT4HQR6QC NRTBKC3AXWOHMSLJ2CTBGG3NQHSY6BLK7AOZ7TJV4FPWQ4PUZ7XAC UB67ZWGT7FOPKZ7SO5PAO3V4PUBPWPWXKQIQIUABNB533XP4JUMQC Z6Q7JVMFQ32SC7FRGOB7CE7JS2HEOPAO3B2VLU3YR3UCUDZFIPFQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC HH3HFWVXABJ4IRMN22PPJCREMULZSN6DA7VYKOGECGMNUQTZ5QNQC 5XSXMOBGXFLTIQE6WDXWWFVDOTUPZSIQ2FWT3YI5QMVU6D76IUYQC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC 4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC ACKNLTFL2RI3PMRWLNRVLRWGQAMLRFKNGNS5LED6NFE5GVGFIHFAC OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC CEK6M777MI5JVDC3KHE3JD3FETVSJ4VN6DGATBI5P3O6P5XHY4DAC RGY2525RQH7SSGM6ZVI7CZL4WMNFZK2WRABOSIWRKQYYOU2RWN4QC AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC return (false);}bool orc_battle_cry(monsters *chief){const actor *foe = chief->get_foe();if (foe && chief->can_see(foe) && coinflip()){const int boss_index = monster_index(chief);const int level = chief->hit_dice > 12? 2 : 1;std::vector<monsters*> affected;for (int i = 0; i < MAX_MONSTERS; ++i){monsters *mons = &menv[i];if (mons != chief&& mons->alive()&& mons_species(mons->type) == MONS_ORC&& mons_aligned(boss_index, i)&& mons->hit_dice < chief->hit_dice&& chief->can_see(mons)){mon_enchant ench = mons->get_ench(ENCH_BATTLE_FRENZY);if (ench.ench == ENCH_NONE || ench.degree < level){const int dur =random_range(5, 10) * speed_to_duration(mons->speed);if (ench.ench != ENCH_NONE){ench.degree = level;ench.duration = std::max(ench.duration, dur);mons->update_ench(ench);}else{mons->add_ench(mon_enchant(ENCH_BATTLE_FRENZY, level,KC_OTHER,dur));}affected.push_back(mons);}}}if (!affected.empty()){if (you.can_see(chief))mprf("%s roars a battle-cry!",chief->name(DESC_CAP_THE).c_str());// Disabling detailed frenzy announcement because it's so spammy.#ifdef ANNOUNCE_BATTLE_FRENZYstd::map<std::string, int> names;for (int i = 0, size = affected.size(); i < size; ++i){if (you.can_see(affected[i]))names[affected[i]->name(DESC_PLAIN)]++;}
for (std::map<std::string,int>::const_iterator i = names.begin();i != names.end(); ++i){const std::string s =i->second> 1? pluralise(i->first) : i->first;mprf("The %s go%s into a battle-frenzy!",s.c_str(), i->second == 1? "es" : "");}#endif}}// Orc battle cry doesn't cost the monster an action.
bool mons_monster_visible( struct monsters *mon, struct monsters *targ );bool mons_player_visible( struct monsters *mon );
bool mons_monster_visible( const monsters *mon, const monsters *targ );bool mons_player_visible( const monsters *mon );
else if (atk->has_ench(ENCH_BATTLE_FRENZY)){const mon_enchant ench = atk->get_ench(ENCH_BATTLE_FRENZY);#ifdef DEBUG_DIAGNOSTICSconst int orig_damage = damage;#endifdamage = damage * (115 + ench.degree * 15) / 100;#ifdef DEBUG_DIAGNOSTICSmprf(MSGCH_DIAGNOSTICS, "%s frenzy damage: %d->%d",attacker->name(DESC_PLAIN).c_str(), orig_damage, damage);#endif}
// Only one ghost allowed per levelif (mspec.mid == MONS_PLAYER_GHOST){for (int i = 0; i < MAX_MONSTERS; i++)if (menv[i].type == MONS_PLAYER_GHOST&& menv[i].alive()){mpr("Only one player ghost per level allowed, ""and this level already has one.");return;}}// Only one pandemonium lord allowed per level as well.else if (mspec.mid == MONS_PANDEMONIUM_DEMON){for (int i = 0; i < MAX_MONSTERS; i++)if (menv[i].type == MONS_PANDEMONIUM_DEMON&& menv[i].alive()){mpr("Only one Pandemonium lord per level allowed, ""and this level already has one.");return;}}