fix #K3455 - rocks vs xorns

Implement the suggestion that falling rock traps and rolling boulder
traps be harmless to xorns.  I've extended that to all missiles made
of stone (rocks, gems, boulders, a handful of other things that will
only matter if poly'd hero throws in '<' direction or is hit by stuff
scattered by an explosion).

I excluded ghosts because they would become even harder to kill and
the missile handling would need extra checks to test for blessed objs.
This commit is contained in:
PatR
2022-02-02 05:26:03 -08:00
parent 2b70492474
commit 9aea7b587c
8 changed files with 159 additions and 81 deletions

View File

@@ -220,6 +220,11 @@
#define touch_petrifies(ptr) \
((ptr) == &mons[PM_COCKATRICE] || (ptr) == &mons[PM_CHICKATRICE])
/* missiles made of rocks don't harm these: xorns and earth elementals
(but not ghosts and shades because that would impact all missile use
and also require an exception for blessed rocks/gems/boulders) */
#define passes_rocks(ptr) (passes_walls(ptr) && !unsolid(ptr))
#define is_mind_flayer(ptr) \
((ptr) == &mons[PM_MIND_FLAYER] || (ptr) == &mons[PM_MASTER_MIND_FLAYER])

View File

@@ -226,6 +226,12 @@ struct obj {
#define uslinging() (uwep && objects[uwep->otyp].oc_skill == P_SLING)
/* 'is_quest_artifact()' only applies to the current role's artifact */
#define any_quest_artifact(o) ((o)->oartifact >= ART_ORB_OF_DETECTION)
/* 'missile' aspect is up to the caller and does not imply is_missile();
rings might be launched as missiles when being scattered by an explosion */
#define stone_missile(o) \
((o) && (objects[(o)->otyp].oc_material == GEMSTONE \
|| (objects[(o)->otyp].oc_material == MINERAL)) \
&& (o)->oclass != RING_CLASS)
/* Armor */
#define is_shield(otmp) \