int ox, oy, *range = (int *) arg;
struct obj *obj;
struct monst *mon;
- boolean may_pass = TRUE, via_jumping, stopping_short;
+ boolean may_pass = TRUE;
struct trap *ttmp;
int dmg = 0;
} else if (*range == 0) {
return FALSE; /* previous step wants to stop now */
}
- via_jumping = (EWwalking & I_SPECIAL) != 0L;
- stopping_short = (via_jumping && *range < 2);
if (!Passes_walls || !(may_pass = may_passwall(x, y))) {
boolean odoor_diag = (IS_DOOR(levl[x][y].typ)
mon->mundetected = 0; /* wakeup() will handle mimic */
mnam = a_monnam(mon); /* after unhiding */
- pronoun = noit_mhim(mon);
+ pronoun = mhim(mon);
if (!strcmp(mnam, "it")) {
+ /* mhim() uses pronoun_gender() which forces neuter if monster
+ can't be seen; we want him/her for humanoid sensed by touch */
+ if (!strcmp(pronoun, "it") && humanoid(mon->data))
+ pronoun = genders[mon->female].him;
mnam = !strcmp(pronoun, "it") ? "something" : "someone";
}
if (!glyph_is_monster(glyph) && !glyph_is_invisible(glyph))
vision_recalc(1); /* update for new position */
flush_screen(1);
- if (is_pool(x, y) && !u.uinwater) {
- if ((Is_waterlevel(&u.uz) && levl[x][y].typ == WATER)
- || !(Levitation || Flying || Wwalking)) {
- multi = 0; /* can move, so drown() allows crawling out of water */
- (void) drown();
- return FALSE;
- } else if (!Is_waterlevel(&u.uz) && !stopping_short) {
- Norep("You move over %s.", an(is_moat(x, y) ? "moat" : "pool"));
- }
- } else if (is_lava(x, y) && !stopping_short) {
- Norep("You move over some lava.");
+ if (is_pool(x, y) && !u.uinwater
+ && ((Is_waterlevel(&u.uz) && levl[x][y].typ == WATER)
+ || !(Levitation || Flying || Wwalking))) {
+ multi = 0; /* can move, so drown() allows crawling out of water */
+ (void) drown();
+ return FALSE;
}
/* FIXME:
* ones that we have not yet tested.
*/
if ((ttmp = t_at(x, y)) != 0) {
- if (stopping_short) {
- ; /* see the comment above hurtle_jump() */
- } else if (ttmp->ttyp == MAGIC_PORTAL) {
+ if (ttmp->ttyp == MAGIC_PORTAL) {
dotrap(ttmp, 0);
return FALSE;
} else if (ttmp->ttyp == VIBRATING_SQUARE) {
dotrap(ttmp, 0); /* doesn't print messages */
} else if (ttmp->ttyp == FIRE_TRAP) {
dotrap(ttmp, 0);
- } else if ((is_pit(ttmp->ttyp) || is_hole(ttmp->ttyp))
+ } else if ((ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT
+ || ttmp->ttyp == HOLE || ttmp->ttyp == TRAPDOOR)
&& Sokoban) {
- /* air currents overcome the recoil in Sokoban;
- when jumping, caller performs last step and enters trap */
- if (!via_jumping)
- dotrap(ttmp, 0);
+ /* Air currents overcome the recoil */
+ dotrap(ttmp, 0);
*range = 0;
return TRUE;
} else {
mon = u.ustuck;
bhitpos.x = mon->mx;
bhitpos.y = mon->my;
- if (tethered_weapon)
- tmp_at(DISP_TETHER, obj_to_glyph(obj));
} else if (u.dz) {
if (u.dz < 0
/* Mjollnir must we wielded to be thrown--caller verifies this;
/* missile has already been handled */
if (tethered_weapon) tmp_at(DISP_END, 0);
} else if (u.uswallow) {
- if (tethered_weapon) {
+ if (tethered_weapon)
tmp_at(DISP_END, 0);
- pline("%s returns to your hand!", The(xname(thrownobj)));
- thrownobj = addinv(thrownobj);
- (void) encumber_msg();
- if (thrownobj->owornmask & W_QUIVER) /* in case addinv() autoquivered */
- setuqwep((struct obj *) 0);
- setuwep(thrownobj);
- } else {
- /* ball is not picked up by monster */
- if (obj != uball)
- (void) mpickobj(u.ustuck, obj);
- thrownobj = (struct obj *) 0;
- }
+ /* ball is not picked up by monster */
+ if (obj != uball)
+ (void) mpickobj(u.ustuck, obj);
+ thrownobj = (struct obj *) 0;
} else {
/* Mjollnir must we wielded to be thrown--caller verifies this;
aklys must we wielded as primary to return when thrown */
if ((obj->oartifact == ART_MJOLLNIR && Role_if(PM_VALKYRIE))
|| tethered_weapon) {
if (rn2(100)) {
- if (tethered_weapon)
+ if (tethered_weapon)
tmp_at(DISP_END, BACKTRACK);
else
sho_obj_return_to_u(obj); /* display its flight */