avoid telling hero they missed a monster they aren't aware of

Resolves #1441
This commit is contained in:
nhmall
2025-09-04 22:13:07 -04:00
parent e4f0d1a3e2
commit fe357a6f04
4 changed files with 17 additions and 7 deletions

View File

@@ -3409,6 +3409,7 @@ extern int passive(struct monst *, struct obj *, boolean, boolean, uchar,
extern void passive_obj(struct monst *, struct obj *, struct attack *) NONNULLARG1;
extern void that_is_a_mimic(struct monst *, unsigned) NONNULLARG1;
extern void stumble_onto_mimic(struct monst *) NONNULLARG1;
extern boolean mimic_disguised_as_non_mon(struct monst *) NONNULLARG1;
extern int flash_hits_mon(struct monst *, struct obj *) NONNULLARG12;
extern void light_hits_gremlin(struct monst *, int) NONNULLARG1;
@@ -3938,7 +3939,7 @@ extern int zhitm(struct monst *, int, int, struct obj **) NONNULLPTRS;
extern int burn_floor_objects(coordxy, coordxy, boolean, boolean);
extern void ubuzz(int, int);
extern void buzz(int, int, coordxy, coordxy, int, int);
extern void dobuzz(int, int, coordxy, coordxy, int, int, boolean);
extern void dobuzz(int, int, coordxy, coordxy, int, int, boolean, boolean);
extern void melt_ice(coordxy, coordxy, const char *) NO_NNARGS;
extern void start_melt_ice_timeout(coordxy, coordxy, long);
extern void melt_ice_away(union any *, long) NONNULLARG1;

View File

@@ -1093,7 +1093,7 @@ breamm(struct monst *mtmp, struct attack *mattk, struct monst *mtarg)
Monnam(mtmp), breathwep_name(typ));
gb.buzzer = mtmp;
dobuzz(BZ_M_BREATH(BZ_OFS_AD(typ)), (int) mattk->damn,
mtmp->mx, mtmp->my, sgn(gt.tbx), sgn(gt.tby), utarget);
mtmp->mx, mtmp->my, sgn(gt.tbx), sgn(gt.tby), utarget, utarget);
gb.buzzer = 0;
nomul(0);
/* breath runs out sometimes. Also, give monster some

View File

@@ -6259,6 +6259,14 @@ stumble_onto_mimic(struct monst *mtmp)
map_invisible(mtmp->mx, mtmp->my);
}
boolean
mimic_disguised_as_non_mon(struct monst *mtmp)
{
return (!sensemon(mtmp)
&& M_AP_TYPE(mtmp)
&& M_AP_TYPE(mtmp) != M_AP_MONSTER);
}
staticfn void
nohandglow(struct monst *mon)
{

View File

@@ -4692,13 +4692,13 @@ disintegrate_mon(
void
ubuzz(int type, int nd)
{
dobuzz(type, nd, u.ux, u.uy, u.dx, u.dy, TRUE);
dobuzz(type, nd, u.ux, u.uy, u.dx, u.dy, TRUE, FALSE);
}
void
buzz(int type, int nd, coordxy sx, coordxy sy, int dx, int dy)
{
dobuzz(type, nd, sx, sy, dx, dy, TRUE);
dobuzz(type, nd, sx, sy, dx, dy, TRUE, FALSE);
}
/*
@@ -4716,7 +4716,7 @@ dobuzz(
int nd, /* damage strength ('number of dice') */
coordxy sx, coordxy sy, /* starting point */
int dx, int dy, /* direction delta */
boolean say) /* announce out of sight hit/miss events if true */
boolean sayhit, boolean saymiss) /* announce out of sight hit/miss events if true */
{
int range, fltyp = zaptype(type), damgtype = fltyp % 10;
coordxy lsx, lsy;
@@ -4865,7 +4865,7 @@ dobuzz(
} else {
if (!otmp) {
/* normal non-fatal hit */
if (say || canseemon(mon))
if (sayhit || canseemon(mon))
hit(flash_str(fltyp, FALSE), mon, exclam(tmp));
} else {
/* some armor was destroyed; no damage done */
@@ -4883,7 +4883,8 @@ dobuzz(
}
range -= 2;
} else {
if (say || canseemon(mon))
if (saymiss
|| (canseemon(mon) && !mimic_disguised_as_non_mon(mon)))
miss(flash_str(fltyp, FALSE), mon);
}
} else if (u_at(sx, sy) && range >= 0) {