fix #H1749 - kick that misses didn't reveal concealed mimic

From a bug report, getting "your
clumsy kick does no damage" when attempting to kick the location of a
concealed mimic or hidden monster didn't bring the target out of hiding.
This commit is contained in:
nethack.rankin
2008-11-13 23:24:00 +00:00
parent fd799733c2
commit 2cbc40caf7
2 changed files with 32 additions and 11 deletions

View File

@@ -294,6 +294,7 @@ if polymorph causes a monster to drop items, they won't be used up via
monsters who ate green slime corpses weren't turned into green slime
"hand slip" while naming an object would never pick 'z' as a substitute letter
hero would "gladly take off <armor>" for nymph or succubus even while asleep
concealed mimic wasn't revealed if kicking attmpt yielded a clumsy miss
Platform- and/or Interface-Specific Fixes

View File

@@ -125,8 +125,27 @@ register xchar x, y;
bhitpos.x = x;
bhitpos.y = y;
if (attack_checks(mon, (struct obj *)0)) return;
/* anger target even if wild miss will occur */
setmangry(mon);
if (Levitation && !rn2(3) && verysmall(mon->data) &&
!is_flyer(mon->data)) {
pline("Floating in the air, you miss wildly!");
exercise(A_DEX, FALSE);
(void) passive(mon, FALSE, 1, AT_KICK, FALSE);
return;
}
/* reveal hidden target even if kick ends up missing (note: being
hidden doesn't affect chance to hit so neither does this reveal) */
if (mon->mundetected ||
(mon->m_ap_type && mon->m_ap_type != M_AP_MONSTER)) {
/* [revealing the monster should probably give a message...] */
if (mon->m_ap_type) seemimic(mon);
mon->mundetected = 0;
if (!canspotmon(mon)) map_invisible(x, y);
}
/* Kick attacks by kicking monsters are normal attacks, not special.
* This is almost always worthless, since you can either take one turn
* and do all your kicks, or else take one turn and attack the monster
@@ -168,14 +187,6 @@ register xchar x, y;
return;
}
if(Levitation && !rn2(3) && verysmall(mon->data) &&
!is_flyer(mon->data)) {
pline("Floating in the air, you miss wildly!");
exercise(A_DEX, FALSE);
(void) passive(mon, FALSE, 1, AT_KICK, FALSE);
return;
}
i = -inv_weight();
j = weight_cap();
@@ -782,9 +793,18 @@ dokick()
}
maploc = &levl[x][y];
/* The next five tests should stay in */
/* their present order: monsters, pools, */
/* objects, non-doors, doors. */
/*
* The next five tests should stay in their present order:
* monsters, pools, objects, non-doors, doors.
*
* [FIXME: Monsters who are hidden underneath objects or
* in pools should lead to hero kicking the concealment
* rather than the monster, probably exposing the hidden
* monster in the process. And monsters who are hidden on
* ceiling shouldn't be kickable (unless hero is flying?);
* kicking toward them should just target whatever is on
* the floor at that spot.]
*/
if(MON_AT(x, y)) {
struct permonst *mdat;