From: Pasi Kallinen Date: Wed, 9 Dec 2020 16:50:55 +0000 (+0200) Subject: Unify squeaky board X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e07968e8e5ebcbd73f35f2d3d24315906647ee68;p=nethack Unify squeaky board --- diff --git a/src/trap.c b/src/trap.c index 0f1d2b98b..3c4464f4e 100644 --- a/src/trap.c +++ b/src/trap.c @@ -15,7 +15,7 @@ static struct obj *FDECL(t_missile, (int, struct trap *)); static int FDECL(trapeffect_arrow_trap, (struct monst *, struct trap *, unsigned)); static int FDECL(trapeffect_dart_trap, (struct monst *, struct trap *, unsigned)); static int FDECL(trapeffect_rocktrap, (struct monst *, struct trap *, unsigned)); -static void FDECL(trapeffect_sqky_board, (struct trap *, unsigned)); +static int FDECL(trapeffect_sqky_board, (struct monst *, struct trap *, unsigned)); static void FDECL(trapeffect_bear_trap, (struct trap *, unsigned)); static void FDECL(trapeffect_slp_gas_trap, (struct trap *, unsigned)); static void FDECL(trapeffect_rust_trap, (struct trap *, unsigned)); @@ -1111,29 +1111,59 @@ unsigned trflags; return 0; } -static void -trapeffect_sqky_board(trap, trflags) +static int +trapeffect_sqky_board(mtmp, trap, trflags) +struct monst *mtmp; struct trap *trap; unsigned trflags; { boolean forcetrap = ((trflags & FORCETRAP) != 0 || (trflags & FAILEDUNTRAP) != 0); - if ((Levitation || Flying) && !forcetrap) { - if (!Blind) { + if (mtmp == &g.youmonst) { + if ((Levitation || Flying) && !forcetrap) { + if (!Blind) { + seetrap(trap); + if (Hallucination) + You("notice a crease in the linoleum."); + else + You("notice a loose board below you."); + } + } else { seetrap(trap); - if (Hallucination) - You("notice a crease in the linoleum."); - else - You("notice a loose board below you."); + pline("A board beneath you %s%s%s.", + Deaf ? "vibrates" : "squeaks ", + Deaf ? "" : trapnote(trap, 0), Deaf ? "" : " loudly"); + wake_nearby(); } } else { - seetrap(trap); - pline("A board beneath you %s%s%s.", - Deaf ? "vibrates" : "squeaks ", - Deaf ? "" : trapnote(trap, 0), Deaf ? "" : " loudly"); - wake_nearby(); + boolean in_sight = canseemon(mtmp) || (mtmp == u.usteed); + + if (is_flyer(mtmp->data)) + return 0; + /* stepped on a squeaky board */ + if (in_sight) { + if (!Deaf) { + pline("A board beneath %s squeaks %s loudly.", + mon_nam(mtmp), trapnote(trap, 0)); + seetrap(trap); + } else { + pline("%s stops momentarily and appears to cringe.", + Monnam(mtmp)); + } + } else { + /* same near/far threshold as mzapmsg() */ + int range = couldsee(mtmp->mx, mtmp->my) /* 9 or 5 */ + ? (BOLT_LIM + 1) : (BOLT_LIM - 3); + + You_hear("a %s squeak %s.", trapnote(trap, 1), + (distu(mtmp->mx, mtmp->my) <= range * range) + ? "nearby" : "in the distance"); + } + /* wake up nearby monsters */ + wake_nearto(mtmp->mx, mtmp->my, 40); } + return 0; } static void @@ -1782,7 +1812,7 @@ unsigned trflags; break; case SQKY_BOARD: /* stepped on a squeaky board */ - trapeffect_sqky_board(trap, trflags); + (void) trapeffect_sqky_board(&g.youmonst, trap, trflags); break; case BEAR_TRAP: @@ -2506,29 +2536,7 @@ register struct monst *mtmp; case ROCKTRAP: return trapeffect_rocktrap(mtmp, trap, 0); case SQKY_BOARD: - if (is_flyer(mptr)) - break; - /* stepped on a squeaky board */ - if (in_sight) { - if (!Deaf) { - pline("A board beneath %s squeaks %s loudly.", - mon_nam(mtmp), trapnote(trap, 0)); - seetrap(trap); - } else { - pline("%s stops momentarily and appears to cringe.", - Monnam(mtmp)); - } - } else { - /* same near/far threshold as mzapmsg() */ - int range = couldsee(mtmp->mx, mtmp->my) /* 9 or 5 */ - ? (BOLT_LIM + 1) : (BOLT_LIM - 3); - - You_hear("a %s squeak %s.", trapnote(trap, 1), - (distu(mtmp->mx, mtmp->my) <= range * range) - ? "nearby" : "in the distance"); - } - /* wake up nearby monsters */ - wake_nearto(mtmp->mx, mtmp->my, 40); + return trapeffect_sqky_board(mtmp, trap, 0); break; case BEAR_TRAP: if (mptr->msize > MZ_SMALL && !amorphous(mptr) && !is_flyer(mptr)