# endif
#endif
#define AUTOPICKUP_EXCEPTIONS /* exceptions to autopickup */
-#define BARGETHROUGH /* allow some monsters to move others out of their way */
#ifdef REDO
# define DOAGAIN '\001' /* ^A, the "redo" key used in cmd.c and getline.c */
E void FDECL(update_l_symset, (struct symparse *,int));
E void FDECL(update_r_symset, (struct symparse *,int));
#endif
-#ifdef BARGETHROUGH
E boolean FDECL(cursed_object_at, (int, int));
-#endif
/* ### dungeon.c ### */
E int FDECL(fightm, (struct monst *));
E int FDECL(mattackm, (struct monst *,struct monst *));
E boolean FDECL(engulf_target, (struct monst *,struct monst *));
-#ifdef BARGETHROUGH
E int FDECL(mdisplacem, (struct monst *,struct monst *,BOOLEAN_P));
-#endif
E void FDECL(paralyze_monst, (struct monst *,int));
E int FDECL(sleep_monst, (struct monst *,int,int));
E void FDECL(slept_monst, (struct monst *));
E void FDECL(set_apparxy, (struct monst *));
E boolean FDECL(can_ooze, (struct monst *));
E boolean FDECL(can_fog, (struct monst *));
-#ifdef BARGETHROUGH
E boolean FDECL(should_displace, (struct monst *,coord *,long *,int,
XCHAR_P,XCHAR_P));
E boolean FDECL(undesirable_disp, (struct monst *,XCHAR_P,XCHAR_P));
-#endif
/* ### monst.c ### */
#ifndef MFNDPOS_H
#define MFNDPOS_H
-#ifdef BARGETHROUGH
#define ALLOW_MDISP 0x00001000L /* can displace a monster out of its way */
-#endif
#define ALLOW_TRAPS 0x00020000L /* can enter traps */
#define ALLOW_U 0x00040000L /* can attack you */
#define ALLOW_M 0x00080000L /* can attack other monsters */
#define is_covetous(ptr) ((ptr->mflags3 & M3_COVETOUS))
#define infravision(ptr) ((ptr->mflags3 & M3_INFRAVISION))
#define infravisible(ptr) ((ptr->mflags3 & M3_INFRAVISIBLE))
-#ifdef BARGETHROUGH
#define is_displacer(ptr) (((ptr)->mflags3 & M3_DISPLACES) != 0L)
-#endif
#define is_mplayer(ptr) (((ptr) >= &mons[PM_ARCHEOLOGIST]) && \
((ptr) <= &mons[PM_WIZARD]))
#define is_rider(ptr) ((ptr) == &mons[PM_DEATH] || \
#define M3_INFRAVISION 0x0100 /* has infravision */
#define M3_INFRAVISIBLE 0x0200 /* visible by infravision */
-/* define the bit even if BARGETHROUGH is not defined for savefile compat. */
#define M3_DISPLACES 0x0400 /* moves monsters out of its way */
#define MZ_TINY 0 /* < 2' */
static NEARDATA const char nofetch[] = { BALL_CLASS, CHAIN_CLASS, ROCK_CLASS, 0 };
-#ifndef BARGETHROUGH
-STATIC_OVL boolean FDECL(cursed_object_at, (int, int));
-#endif /* not BARGETHROUGH */
-
STATIC_VAR xchar gtyp, gx, gy; /* type and position of dog's current goal */
STATIC_PTR void FDECL(wantdoor, (int, int, genericptr_t));
-#ifdef BARGETHROUGH
boolean
-#else
-STATIC_OVL boolean
-#endif
cursed_object_at(x, y)
int x, y;
{
struct obj *obj = (struct obj *) 0;
xchar otyp;
boolean has_edog, cursemsg[9], do_eat = FALSE;
-#ifdef BARGETHROUGH
boolean better_with_displacing = FALSE;
-#endif
xchar nix, niy; /* position mtmp is (considering) moving to */
register int nx, ny; /* temporary coordinates */
xchar cnt, uncursedcnt, chcnt;
if (passes_walls(mtmp->data)) allowflags |= (ALLOW_ROCK | ALLOW_WALL);
if (passes_bars(mtmp->data)) allowflags |= ALLOW_BARS;
if (throws_rocks(mtmp->data)) allowflags |= ALLOW_ROCK;
-#ifdef BARGETHROUGH
if (is_displacer(mtmp->data)) allowflags |= ALLOW_MDISP;
-#endif
if (Conflict && !resist(mtmp, RING_CLASS, 0, 0)) {
allowflags |= ALLOW_U;
if (!has_edog) {
uncursedcnt = 0;
for (i = 0; i < cnt; i++) {
nx = poss[i].x; ny = poss[i].y;
-#ifdef BARGETHROUGH
if (MON_AT(nx,ny) && !((info[i] & ALLOW_M) || info[i] & ALLOW_MDISP))
continue;
-#else
- if (MON_AT(nx,ny) && !(info[i] & ALLOW_M)) continue;
-#endif
if (cursed_object_at(nx, ny)) continue;
uncursedcnt++;
}
-#ifdef BARGETHROUGH
better_with_displacing = should_displace(mtmp,poss,info,cnt,gx,gy);
-#endif
chcnt = 0;
chi = -1;
}
return 0;
}
-#ifdef BARGETHROUGH
if ((info[i] & ALLOW_MDISP) && MON_AT(nx, ny) &&
better_with_displacing &&
!undesirable_disp(mtmp,nx,ny)) {
if (mstatus & MM_DEF_DIED) return 2;
return 0;
}
-#endif /* BARGETHROUGH */
{ /* Dog avoids harmful traps, but perhaps it has to pass one
* in order to follow player. (Non-harmful traps do not
return 0;
}
-#ifdef BARGETHROUGH
/*
* mdisplacem() -- attacker moves defender out of the way;
* returns same results as mattackm().
return MM_HIT;
}
-#endif /* BARGETHROUGH */
/*
* mattackm() -- a monster attacks another monster.
STATIC_DCL boolean FDECL(restrap,(struct monst *));
STATIC_DCL long FDECL(mm_aggression, (struct monst *,struct monst *));
-#ifdef BARGETHROUGH
STATIC_DCL long FDECL(mm_displacement, (struct monst *,struct monst *));
-#endif
STATIC_DCL int NDECL(pick_animal);
STATIC_DCL void FDECL(kill_eggs, (struct obj *));
STATIC_DCL void FDECL(dealloc_mextra, (struct mextra *));
struct monst *mtmp2 = m_at(nx, ny);
long mmflag = flag | mm_aggression(mon, mtmp2);
-#ifndef BARGETHROUGH
- if (!(mmflag & ALLOW_M)) continue;
- info[cnt] |= ALLOW_M;
- if (mtmp2->mtame) {
- if (!(mmflag & ALLOW_TM)) continue;
- info[cnt] |= ALLOW_TM;
-#else /* BARGETHROUGH */
if (mmflag & ALLOW_M) {
info[cnt] |= ALLOW_M;
if (mtmp2->mtame) {
mmflag = flag | mm_displacement(mon, mtmp2);
if (!(mmflag & ALLOW_MDISP)) continue;
info[cnt] |= ALLOW_MDISP;
-#endif /* BARGETHROUGH */
}
}
/* Note: ALLOW_SANCT only prevents movement, not */
return 0L;
}
-#ifdef BARGETHROUGH
/* Monster displacing another monster out of the way */
STATIC_OVL long
mm_displacement(magr, mdef)
return ALLOW_MDISP;
return 0L;
}
-#endif /* BARGETHROUGH */
boolean
monnear(mon, x, y)
return(FALSE);
}
-#ifdef BARGETHROUGH
/*
* should_displace()
*
return TRUE;
return FALSE;
}
-#endif /* BARGETHROUGH */
/* Return values:
* 0: did not move, but can still attack and do other stuff.
boolean can_open=0, can_unlock=0, doorbuster=0;
boolean uses_items=0, setlikes=0;
boolean avoid=FALSE;
-#ifdef BARGETHROUGH
boolean better_with_displacing = FALSE;
-#endif
struct permonst *ptr;
struct monst *mtoo;
schar mmoved = 0; /* not strictly nec.: chi >= 0 will do */
for(i = 0; i < cnt; i++)
if(!(info[i] & NOTONL)) avoid=TRUE;
}
-#ifdef BARGETHROUGH
better_with_displacing = should_displace(mtmp,poss,info,cnt,gx,gy);
-#endif
for(i=0; i < cnt; i++) {
if (avoid && (info[i] & NOTONL)) continue;
nx = poss[i].x;
ny = poss[i].y;
-#ifdef BARGETHROUGH
if (MON_AT(nx,ny) &&
(info[i] & ALLOW_MDISP) && !(info[i] & ALLOW_M) &&
!better_with_displacing) continue;
-#endif
if (appr != 0) {
mtrk = &mtmp->mtrack[0];
for(j=0; j < jcnt; mtrk++, j++)
return 3;
}
-#ifdef BARGETHROUGH
if((info[chi] & ALLOW_MDISP)) {
struct monst *mtmp2;
int mstatus;
if (mstatus & MM_HIT) return 1;
return 3;
}
-#endif /* BARGETHROUGH */
if (!m_in_out_region(mtmp,nix,niy))
return 3;
mtmp->muy = my;
}
-#ifdef BARGETHROUGH
/*
* mon-to-mon displacement is a deliberate "get out of my way" act,
* not an accidental bump, so we don't consider mstun or mconf in
return FALSE;
}
-#endif /* BARGETHROUGH */
/*
* Inventory prevents passage under door.
#ifdef MAIL
"mail daemon",
#endif
-#ifdef BARGETHROUGH
- "monsters moving monsters",
-#endif
#ifdef GNUDOS
"MSDOS protected mode",
#endif