summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mon-util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/mon-util.cc')
-rw-r--r--crawl-ref/source/mon-util.cc39
1 files changed, 31 insertions, 8 deletions
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 3e03b2cec2..d6e6a619f2 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -554,10 +554,10 @@ bool mons_is_native_in_branch(const monsters *monster,
switch (branch)
{
case BRANCH_ELVEN_HALLS:
- return (mons_species(monster->type) == MONS_ELF);
+ return (mons_genus(monster->type) == MONS_ELF);
case BRANCH_ORCISH_MINES:
- return (mons_species(monster->type) == MONS_ORC);
+ return (mons_genus(monster->type) == MONS_ORC);
case BRANCH_SHOALS:
return (mons_species(monster->type) == MONS_CYCLOPS
@@ -566,18 +566,23 @@ bool mons_is_native_in_branch(const monsters *monster,
|| monster->type == MONS_HARPY);
case BRANCH_SLIME_PITS:
- return (mons_species(monster->type) == MONS_JELLY);
+ return (mons_genus(monster->type) == MONS_JELLY);
case BRANCH_SNAKE_PIT:
- return (mons_species(monster->type) == MONS_NAGA
- || mons_species(monster->type) == MONS_SNAKE);
+ return (mons_genus(monster->type) == MONS_NAGA
+ || mons_genus(monster->type) == MONS_SNAKE);
case BRANCH_HALL_OF_ZOT:
- return (mons_species(monster->type) == MONS_DRACONIAN
- || monster->type == MONS_ORB_GUARDIAN);
+ return (mons_genus(monster->type) == MONS_DRACONIAN
+ || monster->type == MONS_ORB_GUARDIAN
+ || monster->type == MONS_ORB_OF_FIRE
+ || monster->type == MONS_DEATH_COB);
+
+ case BRANCH_CRYPT:
+ return (mons_holiness(monster) == MH_UNDEAD);
case BRANCH_TOMB:
- return (mons_species(monster->type) == MONS_MUMMY);
+ return (mons_genus(monster->type) == MONS_MUMMY);
case BRANCH_HIVE:
return (monster->type == MONS_KILLER_BEE_LARVA
@@ -7607,6 +7612,24 @@ void monsters::apply_location_effects(const coord_def &oldpos)
if (type == MONS_TRAPDOOR_SPIDER)
behaviour_event(this, ME_EVAL);
}
+
+ unsigned long &prop = env.map(pos()).property;
+
+ if (prop & FPROP_BLOODY)
+ {
+ monster_type genus = mons_genus(type);
+
+ if (genus == MONS_JELLY || genus == MONS_GIANT_SLUG)
+ {
+ prop &= ~FPROP_BLOODY;
+ if (see_grid(pos()) && !visible_to(&you))
+ {
+ std::string desc =
+ feature_description(pos(), false, DESC_NOCAP_THE, false);
+ mprf("The bloodstain on %s disappears!", desc.c_str());
+ }
+ }
+ }
}
bool monsters::move_to_pos(const coord_def &newpos)