have it.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10638 c06c8d41-db1a-0410-9941-cceddc491573
GUFPL64ERBQNPT6YYVPDE56QUGRZLP7LRJSJMMXF73VCXR555CUQC NAFXZJTHUZTWDHELGGCARFALYUD6ZBVDAHAKR6XBPO3KW2GW44YQC MS4ONWBYKXOFHBVZ6EOMLU5FI4ZZ2Z7NXLHFI4JUPDN7HU5QFJMQC TJKB6E7AMQ6VD2QMX7GNXWX5AQJDFYVFMGLEAZJPAVAZEBG32TGAC FHVWVOHC4FBXZQFCMOABTYXPT7XW55XPBUA4LZN7HU6243KCVEMQC MIMW5CBZXQEGL6BFKK2LK322VRSBADFF7AXMC24F3OBCDUYKQTGQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 2IPPYYFWEFI342OOKTTEKMLLBUFPERK7RNLBF2TWQF5D47M6PSTAC UTGQ25S6K4R2POPYLVF6A5ZU4PRTN3SIR4DL672HERNAE3RZP7AAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC R4C5QGEC3OGE4CUMAOJ7FE2Z4EMX46Z5DXDHP26FLYI54NXERPMAC PC6K5OQF3BWPMWTIN5JXAKHTZF453JQOELDWRUOSBZXR256FTUYQC EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC M6JQ7Z4RM3KUHVM74UNVUUUO4WV2CEW663CSHCKANVQ4PUVRIMFAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC ZVG6W2UMHJ3GHLF4ZVCUHZOOEUNJMWPURVBN2OQXKVTXYC4Z2LPQC B4YYKEZVHLGRFAHEP5ATEV4MYRPGXQPWTUXGGG7ITZH3ZGV3VMBQC UPUR43MXCLHJOHYGKGRA4XAGB4GXW4RNCGCDCB2MXJDV3DIEISIAC T4FNOPMWYYJHJBTTY33PB43HTJPKEC46L62YERTWIX73HYZSELXQC // Harpies may eat food/corpses on the ground.if (monster->type == MONS_HARPY && !mons_is_fleeing(monster)&& (mons_wont_attack(monster)|| (grid_distance(monster->pos(), you.pos()) > 1))&& (mons_is_wandering(monster) && one_chance_in(3)|| one_chance_in(5))&& expose_items_to_element(BEAM_STEAL_FOOD, monster->pos(), 10)){simple_monster_message(monster, " eats something on the ground.");monster->speed_increment -= non_move_energy;continue;}
// XXX: This function assumes that only undead (which can heal from// eating) eat corpses.static bool _monster_eat_corpse(monsters *monster, bool monster_nearby)
static bool _monster_eat_single_corpse(monsters *monster, item_def& item,bool do_heal, bool nearby)
if (monster_nearby)
if (nearby){mprf("%s eats %s.", monster->name(DESC_CAP_THE).c_str(),item.name(DESC_NOCAP_THE).c_str());}// Assume that eating a corpse requires butchering it. Use logic// from misc.cc:turn_corpse_into_chunks() and the butchery-related// delays in delay.cc:stop_delay().const int max_chunks = mons_weight(item.plus) / 150;// Only fresh corpses bleed enough to colour the ground.if (!food_is_rotten(item))bleed_onto_floor(monster->pos(), item.plus, max_chunks, true);if (mons_skeleton(item.plus) && one_chance_in(3))turn_corpse_into_skeleton(item);elsedestroy_item(item.index());return (true);}static bool _monster_eat_corpse(monsters *monster, bool do_heal, bool nearby){if (!mons_eats_corpses(monster))return (false);int eaten = 0;for (stack_iterator si(monster->pos()); si; ++si){if (_monster_eat_single_corpse(monster, *si, do_heal, nearby))
if (mons_skeleton(si->plus) && one_chance_in(3))turn_corpse_into_skeleton(*si);elsedestroy_item(si->index());
int eaten = 0;for (stack_iterator si(monster->pos()); si; ++si){const bool is_food = (si->base_type == OBJ_FOOD);const bool is_corpse = (si->base_type == OBJ_CORPSES&& si->sub_type == CORPSE_BODY);
eaten++;break;
if (!is_food && !is_corpse)continue;if ((mons_wont_attack(monster)|| grid_distance(monster->pos(), you.pos()) > 1)&& one_chance_in(3)){if (is_food){if (nearby){mprf("%s eats %s.", monster->name(DESC_CAP_THE).c_str(),quant_name(*si, 1, DESC_NOCAP_THE).c_str());}dec_mitm_item_quantity(si.link(), 1);eaten++;break;}else{// Assume that only undead can heal from eating corpses.if (_monster_eat_single_corpse(monster, *si,monster->holiness() == MH_UNDEAD,nearby)){eaten++;break;}}}
if (_monster_eat_corpse(monster, monster_nearby))
// Assume that only undead can heal from eating corpses.if (_monster_eat_corpse(monster, monster->holiness() == MH_UNDEAD,nearby)){return (false);}}else if (mons_eats_food(monster)){if (_monster_eat_food(monster, nearby))
Monsters with MONEAT_ITEMS are capable of eating most items, whilemonsters with MONEAT_CORPSES are capable of eating corpses.
Monsters with MONEAT_ITEMS are capable of eating most items,monsters with MONEAT_CORPSES are capable of eating corpses, andmonsters with MONEAT_FOOD are capable of eating food (note thatcorpses also count as food).