(vegan(ptr) \
|| ((ptr)->mlet == S_PUDDING && (ptr) != &mons[PM_BLACK_PUDDING]))
+/* monkeys are tameable via bananas but not pacifiable via food,
+ otherwise their theft attack could be nullified too easily;
+ dogs and cats can be tamed by anything they like to eat and are
+ pacified by any other food;
+ horses can be tamed by always-veggy food or lichen corpses but
+ not tamed or pacified by other corpses or tins of veggy critters */
#define befriend_with_obj(ptr, obj) \
- (((obj)->oclass == FOOD_CLASS && is_domestic(ptr)) \
- || ((obj)->otyp == BANANA && \
- ((ptr) == &mons[PM_MONKEY] \
- || (ptr) == &mons[PM_APE])))
+ (((ptr) == &mons[PM_MONKEY] || (ptr) == &mons[PM_APE]) \
+ ? (obj)->otyp == BANANA \
+ : (is_domestic(ptr) && (obj)->oclass == FOOD_CLASS \
+ && ((ptr)->mlet != S_UNICORN \
+ || objects[(obj)->otyp].oc_material == VEGGY \
+ || ((obj)->otyp == CORPSE && (obj)->corpsenm == PM_LICHEN))))
#endif /* MONDATA_H */
/*
* Apelike beasts
*/
+ /* tameable via banana; does not grow up into ape...
+ not flagged as domestic, so no guilt penalty for eating non-pet one */
MON("monkey", S_YETI, LVL(2, 12, 6, 0, 0), (G_GENO | 1),
A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK,
NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(100, 50, MS_GROWL, MZ_SMALL), 0, 0,
- M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, 0, M3_INFRAVISIBLE, CLR_GRAY),
+ M1_ANIMAL | M1_HUMANOID | M1_OMNIVORE, 0, M3_INFRAVISIBLE, CLR_GRAY),
MON("ape", S_YETI, LVL(4, 12, 6, 0, 0), (G_GENO | G_SGROUP | 2),
A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3),
ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(1100, 500, MS_GROWL, MZ_LARGE), 0, 0,
- M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE,
+ M1_ANIMAL | M1_HUMANOID | M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE,
CLR_BROWN),
MON("owlbear", S_YETI, LVL(5, 12, 5, 0, 0), (G_GENO | 3),
A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6),