monsters to submerge if it's a cloud tpye the monster wants to avoid, rather than always for all cloud types, and prevent lurking monsters from unsubmerging if it would expose them to a cloud type they want to avoid.
Monsters submerging now consume some energy, except for air elementals and vapours submerging into the air.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7531 c06c8d41-db1a-0410-9941-cceddc491573
LG7XJWUXOV4ZBMOTZX7R5NUC5IONVNCF5O42M4QVYLHNZ62AV25AC 2UO6ZOW7UCP5XJ2TJ26PJNQABILK2BZ4J3BAKLOKMZPJDQHW24MAC 4C4D3H4E5MDQ3KT5CWXN5K6H4FVT567PN66GAAHHIWVROHZWG5CQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC Y5YQ2AXS6XTWCHEQFDXRYU2IDQTBW7WXNJFES22GSKYQ2JGZ3U5AC CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC URFOQPK5U6ANCKMHK2R2BYIITZZESHYUNBAEI3WNJCYO7Q66WHNQC ZDKKOOQAQW2HDRQKTSSYDB4P5PNGTG7XEOZUORFNUPG7PQ3KQ6QAC 542UIZKI65UDRNEMGFFDBWYD5XC7AYLTZ3JZQRR2GHYJALD3YY6QC AV3TMWHWB3XBXQCT34UPMZBSIIKVXIGWQPNEFU4CZSBS3ZOF2CUQC 3HGELZU7NELOQ635HZO6IJIYLBSNCJ5VPH46IE22KA3OSLEFK7AQC PM65H4V4GNPVIJFUQW57DC3VDB7TRUUNXKVZONQKEFZSK3AXX5GQC ZNGET7722J4PJXQM7IISUIIUFGB6D7WBD4IXR4QQENHERHXOG7KQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC EHP6PYCIPYQ3KF4JFGBTZXEUQHN3FVAH4NUWEOWDDNKGPYVOTOJQC PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC LTX72QGIPNUGWQN5ULPOMFCOPZTK7472DQY4AYX5WM3WHSUVXI5QC BLN5LDH5NRRJPBY77A36Q4THEY75N42MVCJMZRUZ2D5YSXTDL4HQC }static bool _mons_avoids_cloud(const monsters *monster, cloud_type cl_type){switch (cl_type){case CLOUD_MIASMA:// Even the dumbest monsters will avoid miasma if they can.return (mons_res_miasma(monster) <= 0);case CLOUD_FIRE:if (mons_res_fire(monster) > 1)return (false);if (monster->hit_points >= 15 + random2avg(46, 5))return (false);break;case CLOUD_STINK:if (mons_res_poison(monster) > 0)return (false);if (x_chance_in_y(monster->hit_dice - 1, 5))return (false);if (monster->hit_points >= random2avg(19, 2))return (false);break;case CLOUD_COLD:if (mons_res_cold(monster) > 1)return (false);if (monster->hit_points >= 15 + random2avg(46, 5))return (false);break;case CLOUD_POISON:if (mons_res_poison(monster) > 0)return (false);if (monster->hit_points >= random2avg(37, 4))return (false);break;case CLOUD_GREY_SMOKE:// This isn't harmful, but dumb critters might think so.if (mons_intel(monster) > I_ANIMAL || coinflip())return (false);if (mons_res_fire(monster) > 0)return (false);if (monster->hit_points >= random2avg(19, 2))return (false);break;default:break;}// Exceedingly dumb creatures will wander into harmful clouds.if (is_harmless_cloud(cl_type) || mons_intel(monster) == I_PLANT)return (false);// If we get here, the cloud is potentially harmful.return (true);
monster->speed_increment -= entry->energy_usage.swim;break;}
if (mons_is_submerged(monster)){monster->speed_increment -= entry->energy_usage.swim;break;}
if (monster->type == -1){monster->speed_increment -= entry->energy_usage.move;break; // problem with vortices
if (monster->type == -1){monster->speed_increment -= entry->energy_usage.move;break; // problem with vortices}
switch (targ_cloud_type){case CLOUD_MIASMA:// Even the dumbest monsters will avoid miasma if they can.return (mons_res_miasma(monster) > 0);case CLOUD_FIRE:if (mons_res_fire(monster) > 1)return (true);
if (monster->hit_points >= 15 + random2avg(46, 5))return (true);break;case CLOUD_STINK:if (mons_res_poison(monster) > 0)return (true);if (x_chance_in_y(monster->hit_dice - 1, 5))return (true);if (monster->hit_points >= random2avg(19, 2))return (true);break;case CLOUD_COLD:if (mons_res_cold(monster) > 1)return (true);if (monster->hit_points >= 15 + random2avg(46, 5))return (true);break;case CLOUD_POISON:if (mons_res_poison(monster) > 0)return (true);if (monster->hit_points >= random2avg(37, 4))return (true);break;case CLOUD_GREY_SMOKE:// This isn't harmful, but dumb critters might think so.if (mons_intel(monster) > I_ANIMAL || coinflip())return (true);if (mons_res_fire(monster) > 0)return (true);if (monster->hit_points >= random2avg(19, 2))return (true);break;default:return (true); // harmless clouds}// If we get here, the cloud is potentially harmful.// Exceedingly dumb creatures will still wander in.if (mons_intel(monster) != I_PLANT)return (false);
return !_mons_avoids_cloud(monster, targ_cloud_type);