#define is_shapeshifter(ptr) (((ptr)->mflags2 & M2_SHAPESHIFTER) != 0L)
#define is_undead(ptr) (((ptr)->mflags2 & M2_UNDEAD) != 0L)
#define is_were(ptr) (((ptr)->mflags2 & M2_WERE) != 0L)
-#define is_elf(ptr) (((ptr)->mflags2 & M2_ELF) != 0L)
-#define is_dwarf(ptr) (((ptr)->mflags2 & M2_DWARF) != 0L)
-#define is_gnome(ptr) (((ptr)->mflags2 & M2_GNOME) != 0L)
-#define is_orc(ptr) (((ptr)->mflags2 & M2_ORC) != 0L)
-#define is_human(ptr) (((ptr)->mflags2 & M2_HUMAN) != 0L)
+#define is_elf(ptr) ((((ptr)->mflags2 & M2_ELF) != 0L) \
+ || ((ptr) == g.youmonst.data && \
+ !Upolyd && Race_if(PM_ELF)))
+#define is_dwarf(ptr) ((((ptr)->mflags2 & M2_DWARF) != 0L) \
+ || ((ptr) == g.youmonst.data && \
+ !Upolyd && Race_if(PM_DWARF)))
+#define is_gnome(ptr) ((((ptr)->mflags2 & M2_GNOME) != 0L) \
+ || ((ptr) == g.youmonst.data && \
+ !Upolyd && Race_if(PM_GNOME)))
+#define is_orc(ptr) ((((ptr)->mflags2 & M2_ORC) != 0L) \
+ || ((ptr) == g.youmonst.data && \
+ !Upolyd && Race_if(PM_ORC)))
+#define is_human(ptr) ((((ptr)->mflags2 & M2_HUMAN) != 0L) \
+ || ((ptr) == g.youmonst.data && \
+ !Upolyd && Race_if(PM_HUMAN)))
#define your_race(ptr) (((ptr)->mflags2 & g.urace.selfmask) != 0L)
#define is_bat(ptr) \
((ptr) == &mons[PM_BAT] || (ptr) == &mons[PM_GIANT_BAT] \