Skip to content

Commit

Permalink
small mimic grabbing bug (trunk only)
Browse files Browse the repository at this point in the history
     Noticed while testing the patch for monster ranged attacks when hero
is hidden.  Using #monster while in small mimic form would hide you, as
intended, but the first monster (or last monster?) who hit you hand-to-hand
would be grabbed ("It gets stuck on you.").  Unlike large and giant mimics,
small ones lack such a grab attack so when you eventually returned to
normal form, u.ustuck would remain set and you would end up being stuck
to an arbitrary monster instead of releasing it from your grasp.
  • Loading branch information
nethack.rankin committed Feb 18, 2009
1 parent dc8d285 commit 121b9e9
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
2 changes: 2 additions & 0 deletions doc/fixes35.0
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,8 @@ mimic posing as statue or corpse now picks and maintains particular monst type
when levitating, don't show '>' as a likely direction for digging
poly'd or mimicking hero who was hidden from monsters would still be treated
as a normal target for their ranged attacks
hero would remain stuck to an adjacent monster after rehumanizing if he had
been attacked while hiding via #monster when poly'd into a small mimic


Platform- and/or Interface-Specific Fixes
Expand Down
11 changes: 7 additions & 4 deletions src/mhitu.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)mhitu.c 3.5 2007/12/19 */
/* SCCS Id: @(#)mhitu.c 3.5 2009/02/17 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -424,20 +424,23 @@ mattacku(mtmp)
return(0);
}

/* hero might be a mimic, concealed via #monster */
if (youmonst.data->mlet == S_MIMIC && youmonst.m_ap_type &&
!range2 && foundyou && !u.uswallow) {
boolean sticky = sticks(youmonst.data);

if (!canspotmon(mtmp)) map_invisible(mtmp->mx, mtmp->my);
if (!youseeit) pline("It gets stuck on you.");
if (sticky && !youseeit) pline("It gets stuck on you.");
else pline("Wait, %s! That's a %s named %s!",
m_monnam(mtmp), youmonst.data->mname, plname);
u.ustuck = mtmp;
if (sticky) u.ustuck = mtmp;
youmonst.m_ap_type = M_AP_NOTHING;
youmonst.mappearance = 0;
newsym(u.ux,u.uy);
return(0);
}

/* player might be mimicking an object */
/* non-mimic hero might be mimicking an object after eating m corpse */
if (youmonst.m_ap_type == M_AP_OBJECT && !range2 && foundyou && !u.uswallow) {
if (!canspotmon(mtmp)) map_invisible(mtmp->mx, mtmp->my);
if (!youseeit)
Expand Down

0 comments on commit 121b9e9

Please sign in to comment.