diff options
Diffstat (limited to 'crawl-ref/source/mstuff2.cc')
-rw-r--r-- | crawl-ref/source/mstuff2.cc | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc index 1da999505c..6aa6820bac 100644 --- a/crawl-ref/source/mstuff2.cc +++ b/crawl-ref/source/mstuff2.cc @@ -198,6 +198,48 @@ void mons_trap(struct monsters *monster) revealTrap = true; break; + case TRAP_NET: + { + if (one_chance_in(3)) + { + if (trapKnown) + { + simple_monster_message(monster, + " fails to trigger a net trap."); + } + return; + } + + if (random2(monster->ev) > 8) + { + if (monsterNearby && !simple_monster_message(monster, + " nimbly jumps out of the way of a falling net.")) + { + mpr("A large net falls down!"); + } + } + else + { + if (monsterNearby) + { + std::string msg = "A large net falls down"; + if (player_monster_visible( monster )) + { + msg += " onto "; + msg += monster->name(DESC_NOCAP_THE); + } + msg += "!"; + mpr(msg.c_str()); + monster_caught_in_net(monster); + } + } + + trap_item( OBJ_MISSILES, MI_THROWING_NET, + env.trap[which_trap].x, env.trap[which_trap].y ); + grd[env.trap[which_trap].x][env.trap[which_trap].y] = DNGN_FLOOR; + env.trap[which_trap].type = TRAP_UNASSIGNED; + break; + } // zot traps are out to get *the player*! Hostile monsters // benefit and friendly monsters suffer - such is life - on // rare occasion, the trap affects nearby players, triggering @@ -888,6 +930,9 @@ void monster_teleport(struct monsters *monster, bool instan, bool silent) monster->check_redraw(oldplace); monster->apply_location_effects(); + if (monster->has_ench(ENCH_CAUGHT)) + monster->del_ench(ENCH_CAUGHT, true); + // Teleporting mimics change form - if they reappear out of LOS, they are // no longer known. if (mons_is_mimic(monster->type)) |