/* look for gold carried by monsters (might be in a container) */
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (DEADMONSTER(mtmp))
- continue; /* probably not needed in this case but... */
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
+ continue;
if (findgold(mtmp->minvent) || monsndx(mtmp->data) == PM_GOLD_GOLEM) {
if (mtmp == u.usteed) {
steedgold = TRUE;
ugold = TRUE;
}
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (DEADMONSTER(mtmp))
- continue; /* probably overkill here */
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
+ continue;
temp = 0;
if (findgold(mtmp->minvent) || monsndx(mtmp->data) == PM_GOLD_GOLEM) {
gold = cg.zeroobj; /* ensure oextra is cleared too */
ct++;
}
for (mtmp = fmon; mtmp && (!ct || !ctu); mtmp = mtmp->nmon) {
- /* no DEADMONSTER(mtmp) check needed -- dmons never have inventory */
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
+ continue;
for (obj = mtmp->minvent; obj; obj = obj->nobj)
if (o_in(obj, oclass)) {
if (mtmp->mx == u.ux && mtmp->my == u.uy)
}
map_object(temp, 1);
}
- for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
- /* no DEADMONSTER() check needed -- dmons never have inventory */
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
+ continue;
for (obj = mtmp->minvent; obj; obj = obj->nobj)
if ((temp = o_in(obj, oclass)) != 0) {
temp->ox = mtmp->mx;
map_object(temp, 1);
break; /* skip rest of this monster's inventory */
}
+ }
if (!ctu) {
newsym(u.ux, u.uy);
ter_typ |= TER_MON; /* for autodescribe of self */
* We can exclude checking the buried obj chain for boulders below.
*/
sym = class ? def_oc_syms[class].sym : 0;
- if (sym && g.showsyms[SYM_BOULDER + SYM_OFF_X] && sym == g.showsyms[SYM_BOULDER + SYM_OFF_X])
+ if (sym && sym == g.showsyms[SYM_BOULDER + SYM_OFF_X])
boulder = ROCK_CLASS;
if (Hallucination || (Confusion && class == SCROLL_CLASS))
u.usteed->mx = u.ux, u.usteed->my = u.uy;
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (DEADMONSTER(mtmp))
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
continue;
for (obj = mtmp->minvent; obj; obj = obj->nobj) {
if ((!class && !boulder) || o_in(obj, class)
strange_feeling(detector, "You feel a lack of something.");
return 1;
}
-
You("sense %s nearby.", stuff);
return 0;
}
/* Objects in the monster's inventory override floor objects. */
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (DEADMONSTER(mtmp))
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
continue;
for (obj = mtmp->minvent; obj; obj = obj->nobj)
if ((!class && !boulder) || (otmp = o_in(obj, class)) != 0
* presence of dmons, so we have to find at least one
* with positive hit-points to know for sure.
*/
- for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
- if (!DEADMONSTER(mtmp)) {
- mcnt++;
- break;
- }
+ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
+ continue;
+ ++mcnt;
+ break; /* no need for full count, just 1 or more vs 0 */
+ }
if (!mcnt) {
if (otmp)
cls();
unconstrained = unconstrain_map();
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
- if (DEADMONSTER(mtmp))
+ if (DEADMONSTER(mtmp) || (mtmp->isgd && !mtmp->mx))
continue;
if (!mclass || mtmp->data->mlet == mclass
|| (mtmp->data == &mons[PM_LONG_WORM]
found = TRUE;
}
for (mon = fmon; mon; mon = mon->nmon) {
- if (DEADMONSTER(mon))
+ if (DEADMONSTER(mon) || (mon->isgd && !mon->mx))
continue;
if ((tr = detect_obj_traps(mon->minvent, FALSE, 0)) != OTRAP_NONE) {
if (tr & OTRAP_THERE)
(void) detect_obj_traps(fobj, TRUE, cursed_src);
(void) detect_obj_traps(g.level.buriedobjlist, TRUE, cursed_src);
for (mon = fmon; mon; mon = mon->nmon) {
- if (DEADMONSTER(mon))
+ if (DEADMONSTER(mon) || (mon->isgd && !mon->mx))
continue;
(void) detect_obj_traps(mon->minvent, TRUE, cursed_src);
}