And while I was at it… improved monster pickup handling.
As before, pickup only takes place if a monster happens to be on a square with items and only the top items of stashes are checked - monsters won't make a beeline for items or search stashes for goodies. Also, neutrals and friendlies still won't pick up anything at all; this might have to be changed.
Unrelated: fixed an ASSERT for divine retribution during penance.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4255 c06c8d41-db1a-0410-9941-cceddc491573
ASH5CK6CPBKMLGGIRJ5GKTWMS5W3OBVHTL66RTYZIPFM6KFBYA3QC P4SJCLGJJZ4HF5WTOKBJRKI2HFJYAGFAV2P3NWRKEYCJDLNRVU5QC R5ZMN5IBYAMKCWHD7GVBSQ5IUCJFYXNESMPU2NWHPZXL5FSKYGWQC AY3CBJCAR4XMZODH5N4DVJXXJF3B5HUKICRGO7KCTCFACAYVGN4QC 7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC RKFHYYANUZQHOWOE6YHVFFJNCZU7X67FWUQPQFF6KJKMNIKXFWEAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC SE6T5ILU7BD6ICIOP7BTIQIBNBDEJX3J5OBO7Z2DZA336ETTHYJAC SWOYPTHJAWFEDBMB3ROT33VQZIXGZD5UOXEV456DDUENW2HGA66QC HVFAA245ZWF7IALC2ZFCJREYGHIZQ2FTW2VO4Z7FTET2B3JZIZCAC NH3RJG3CNJVBJURYHMUSTKRYSQU6TJJ6VRFGP3VPNE3OPQ7AMXXQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC 3IJHKZOTXLU7B6F4UIKXCQCPXEVLKRX2M3VWAAPGRLL24IIP2T2QC DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC SJDOBXECX7F3ZPPVR7FPURE53D47PP2TFIF4SB6XPS456PZV3DQAC 3BJ2OOF4F524G6UKVGOZVT6W3FSTSHHTKRJADUBZCHDXZWV3KANQC 4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC YX2LDGNQNB6AQRKAVXNYQ473X6EVPQEBT5AJKBIIWFIMS3U2BNQQC NVK2OISSU4XF2CGSK2BAWZE2OPCLTXYHNSE6UDJ5M54EHY2I7BLAC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC 6FOJLFMHFOIDE6F47OSS3N5PDPVP6MEBOP3JJ3QQ4RRGSDMVAE5AC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC 45FTVJJ5FMXBXQ2GVUZVJZU6Y6NUYG2JZIHWVMONA7QYYCZQSM2QC GRVGLW4QW6BMLK4E3HY7YMHFV2PWGV7BPVFMOTX5APYKCWNUELOQC UUQ5U2OURPGWPHSHKJPLB6L4BWULX7VYCOUV6RNBIGALAZTWFHUQC UBJ3K77N3ESM5ZHZAND4FDTONECSSB3NUNL6QQA7ATSESSCW5QUQC ZMED4SUEZTGX762DHBTMAZYNJZDV7RFFKMELFSTCM4KZFX553H5AC OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC WMHFDQKUDCUGM3R245LLVZ5NNEZSCXFDSTNMVS2O5EFUHHO7HU3AC 3WHI3KM43ZCN4ITJLFQQBQBC4OJPRS7QTBPIQ6QBCUVKRSK476SAC 6XJP54KUBUB46BX7ANY5DHMN24Q7EHJSQKS7U2BHCAUQUKNJD7DQC DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC if ( event == ME_WHACK ||((isFriendly != sourceFriendly || isSmart) &&(mon->behaviour != BEH_FLEE && mon->behaviour != BEH_PANIC)))
if (event == ME_WHACK|| ((isFriendly != sourceFriendly || isSmart)&& mon->behaviour != BEH_FLEE && mon->behaviour != BEH_PANIC))
if (!finalAnswer && _enemies_around(monster) && mons_is_caught(monster)&& one_chance_in(4))
if (!finalAnswer && mon_enemies_around(monster)&& mons_is_caught(monster) && one_chance_in(4))
const equipment_type eq = get_armour_slot(item);
equipment_type eq = EQ_NONE;// Hack to allow nagas/centaurs to wear bardings. (jpeg)switch(item.sub_type){case ARM_NAGA_BARDING:if (::mons_species(this->type) == MONS_NAGA)eq = EQ_BODY_ARMOUR;break;case ARM_CENTAUR_BARDING:if (::mons_species(this->type) == MONS_CENTAUR|| ::mons_species(this->type) == MONS_YAKTAUR){eq = EQ_BODY_ARMOUR;}break;default:eq = get_armour_slot(item);}// Bardings are only wearable by the appropriate monster.if (eq == EQ_NONE)return false;
// only allow monsters to pick up healing potions// if they can actually use themif ((item.sub_type == POT_HEALING || item.sub_type == POT_HEAL_WOUNDS)&& (mons_holiness(this) == MH_UNDEAD
// Only allow monsters to pick up potions if they can actually use them.switch(item.sub_type){case POT_HEALING:case POT_HEAL_WOUNDS:if (mons_holiness(this) == MH_UNDEAD
|| mons_holiness(this) == MH_PLANT)){return false;}if (::mons_species(this->type) != MONS_VAMPIRE&& (item.sub_type == POT_BLOOD|| item.sub_type == POT_BLOOD_COAGULATED)){
|| mons_holiness(this) == MH_PLANT){return false;}break;case POT_BLOOD:case POT_BLOOD_COAGULATED:if (::mons_species(this->type) != MONS_VAMPIRE)return false;break;case POT_SPEED:case POT_INVISIBILITY:break;default:
if (!force && (behaviour != BEH_WANDER || attitude == ATT_NEUTRAL))return (false);
// if (!force && (behaviour != BEH_WANDER || attitude == ATT_NEUTRAL))// return (false);if (!force){if (attitude == ATT_NEUTRAL)return (false);bool wandering = (behaviour == BEH_WANDER);// Weak(ened) monsters won't stop to pick up things as long as they// feel unsafe.if (!wandering && (hit_points * 10 < max_hit_points || hit_points <= 10)&& mon_enemies_around(this)){return false;}// These are not important enough for pickup when seeking, fleeing etc.const int itype = item.base_type;if (!wandering&& (itype == OBJ_ARMOUR || itype == OBJ_CORPSES|| itype == OBJ_MISCELLANY || itype == OBJ_GOLD)){return false;}}
// pickup some stuff only if WANDERINGcase OBJ_ARMOUR:return pickup_armour(item, near, force);case OBJ_CORPSES:return eat_corpse(item, near);case OBJ_MISCELLANY:return pickup_misc(item, near);case OBJ_GOLD:return pickup_gold(item, near);// other types can always be picked up// (barring other checks depending on subtype, of course)
case OBJ_CORPSES:return eat_corpse(item, near);case OBJ_MISCELLANY:return pickup_misc(item, near);case OBJ_GOLD:return pickup_gold(item, near);
From MONUSE_STARTING_EQUIPMENT on, monsters are capable of handling items.Contrary to what one might expect MONUSE_WEAPONS_ARMOUR also means amonster is capable of using wands and will also pick them up, somethingthat those with MONUSE_STARTING_EQUIPMENT won't do.MONUSE_MAGIC_ITEMS is currently never used anywhere.