ensure tmp_at() structures are initialized for all code paths when swallowed
This commit is contained in:
@@ -169,6 +169,8 @@ sortloot segfaulted when filtering a subset of items (seen with 'A' command)
|
|||||||
orctown: prevent Bad fruit #0 and some minor tuning
|
orctown: prevent Bad fruit #0 and some minor tuning
|
||||||
make long extended commands list be more navigable
|
make long extended commands list be more navigable
|
||||||
simplify #wizidentify; don't rely on having bold menu entries
|
simplify #wizidentify; don't rely on having bold menu entries
|
||||||
|
a code path wasn't initializing necessary tmp_at() structures for DISP_TETHER
|
||||||
|
when you were swallowed
|
||||||
tty: turn off an optimization that is the suspected cause of Windows reported
|
tty: turn off an optimization that is the suspected cause of Windows reported
|
||||||
partial status lines following level changes
|
partial status lines following level changes
|
||||||
tty: ensure that current status fields are always copied to prior status
|
tty: ensure that current status fields are always copied to prior status
|
||||||
|
|||||||
@@ -571,7 +571,7 @@ int x, y;
|
|||||||
int ox, oy, *range = (int *) arg;
|
int ox, oy, *range = (int *) arg;
|
||||||
struct obj *obj;
|
struct obj *obj;
|
||||||
struct monst *mon;
|
struct monst *mon;
|
||||||
boolean may_pass = TRUE, via_jumping, stopping_short;
|
boolean may_pass = TRUE;
|
||||||
struct trap *ttmp;
|
struct trap *ttmp;
|
||||||
int dmg = 0;
|
int dmg = 0;
|
||||||
|
|
||||||
@@ -583,8 +583,6 @@ int x, y;
|
|||||||
} else if (*range == 0) {
|
} else if (*range == 0) {
|
||||||
return FALSE; /* previous step wants to stop now */
|
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))) {
|
if (!Passes_walls || !(may_pass = may_passwall(x, y))) {
|
||||||
boolean odoor_diag = (IS_DOOR(levl[x][y].typ)
|
boolean odoor_diag = (IS_DOOR(levl[x][y].typ)
|
||||||
@@ -664,8 +662,12 @@ int x, y;
|
|||||||
|
|
||||||
mon->mundetected = 0; /* wakeup() will handle mimic */
|
mon->mundetected = 0; /* wakeup() will handle mimic */
|
||||||
mnam = a_monnam(mon); /* after unhiding */
|
mnam = a_monnam(mon); /* after unhiding */
|
||||||
pronoun = noit_mhim(mon);
|
pronoun = mhim(mon);
|
||||||
if (!strcmp(mnam, "it")) {
|
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";
|
mnam = !strcmp(pronoun, "it") ? "something" : "someone";
|
||||||
}
|
}
|
||||||
if (!glyph_is_monster(glyph) && !glyph_is_invisible(glyph))
|
if (!glyph_is_monster(glyph) && !glyph_is_invisible(glyph))
|
||||||
@@ -708,17 +710,12 @@ int x, y;
|
|||||||
vision_recalc(1); /* update for new position */
|
vision_recalc(1); /* update for new position */
|
||||||
flush_screen(1);
|
flush_screen(1);
|
||||||
|
|
||||||
if (is_pool(x, y) && !u.uinwater) {
|
if (is_pool(x, y) && !u.uinwater
|
||||||
if ((Is_waterlevel(&u.uz) && levl[x][y].typ == WATER)
|
&& ((Is_waterlevel(&u.uz) && levl[x][y].typ == WATER)
|
||||||
|| !(Levitation || Flying || Wwalking)) {
|
|| !(Levitation || Flying || Wwalking))) {
|
||||||
multi = 0; /* can move, so drown() allows crawling out of water */
|
multi = 0; /* can move, so drown() allows crawling out of water */
|
||||||
(void) drown();
|
(void) drown();
|
||||||
return FALSE;
|
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.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME:
|
/* FIXME:
|
||||||
@@ -730,9 +727,7 @@ int x, y;
|
|||||||
* ones that we have not yet tested.
|
* ones that we have not yet tested.
|
||||||
*/
|
*/
|
||||||
if ((ttmp = t_at(x, y)) != 0) {
|
if ((ttmp = t_at(x, y)) != 0) {
|
||||||
if (stopping_short) {
|
if (ttmp->ttyp == MAGIC_PORTAL) {
|
||||||
; /* see the comment above hurtle_jump() */
|
|
||||||
} else if (ttmp->ttyp == MAGIC_PORTAL) {
|
|
||||||
dotrap(ttmp, 0);
|
dotrap(ttmp, 0);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if (ttmp->ttyp == VIBRATING_SQUARE) {
|
} else if (ttmp->ttyp == VIBRATING_SQUARE) {
|
||||||
@@ -740,12 +735,11 @@ int x, y;
|
|||||||
dotrap(ttmp, 0); /* doesn't print messages */
|
dotrap(ttmp, 0); /* doesn't print messages */
|
||||||
} else if (ttmp->ttyp == FIRE_TRAP) {
|
} else if (ttmp->ttyp == FIRE_TRAP) {
|
||||||
dotrap(ttmp, 0);
|
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) {
|
&& Sokoban) {
|
||||||
/* air currents overcome the recoil in Sokoban;
|
/* Air currents overcome the recoil */
|
||||||
when jumping, caller performs last step and enters trap */
|
dotrap(ttmp, 0);
|
||||||
if (!via_jumping)
|
|
||||||
dotrap(ttmp, 0);
|
|
||||||
*range = 0;
|
*range = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else {
|
} else {
|
||||||
@@ -1292,7 +1286,7 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
|||||||
if ((obj->oartifact == ART_MJOLLNIR && Role_if(PM_VALKYRIE))
|
if ((obj->oartifact == ART_MJOLLNIR && Role_if(PM_VALKYRIE))
|
||||||
|| tethered_weapon) {
|
|| tethered_weapon) {
|
||||||
if (rn2(100)) {
|
if (rn2(100)) {
|
||||||
if (tethered_weapon)
|
if (tethered_weapon)
|
||||||
tmp_at(DISP_END, BACKTRACK);
|
tmp_at(DISP_END, BACKTRACK);
|
||||||
else
|
else
|
||||||
sho_obj_return_to_u(obj); /* display its flight */
|
sho_obj_return_to_u(obj); /* display its flight */
|
||||||
|
|||||||
Reference in New Issue
Block a user