diff --git a/include/extern.h b/include/extern.h index 4a36834d0..9292fb79d 100644 --- a/include/extern.h +++ b/include/extern.h @@ -2359,6 +2359,7 @@ extern void dumplogfreemessages(void); extern void pline(const char *, ...) PRINTF_F(1, 2); extern void pline_dir(int, const char *, ...) PRINTF_F(2, 3); extern void pline_xy(coordxy, coordxy, const char *, ...) PRINTF_F(3, 4); +extern void pline_mon(struct monst *, const char *, ...) PRINTF_F(2, 3) NONNULLARG1; extern void set_msg_dir(int); extern void set_msg_xy(coordxy, coordxy); extern void custompline(unsigned, const char *, ...) PRINTF_F(2, 3); diff --git a/src/mcastu.c b/src/mcastu.c index d686ced9d..afa7a8722 100644 --- a/src/mcastu.c +++ b/src/mcastu.c @@ -63,8 +63,7 @@ cursetxt(struct monst *mtmp, boolean undirected) else point_msg = "at you, then curses"; - pline_xy(mtmp->mx, mtmp->my, - "%s points %s.", Monnam(mtmp), point_msg); + pline_mon(mtmp, "%s points %s.", Monnam(mtmp), point_msg); } else if ((!(gm.moves % 4) || !rn2(4))) { if (!Deaf) Norep("You hear a mumbled curse."); /* Deaf-aware */ @@ -245,7 +244,7 @@ castmu( */ if (!foundyou && thinks_it_foundyou && !is_undirected_spell(mattk->adtyp, spellnum)) { - pline_xy(mtmp->mx, mtmp->my, "%s casts a spell at %s!", + pline_mon(mtmp, "%s casts a spell at %s!", canseemon(mtmp) ? Monnam(mtmp) : "Something", is_waterwall(mtmp->mux, mtmp->muy) ? "empty water" : "thin air"); @@ -262,7 +261,7 @@ castmu( return M_ATTK_MISS; } if (canspotmon(mtmp) || !is_undirected_spell(mattk->adtyp, spellnum)) { - pline_xy(mtmp->mx, mtmp->my, "%s casts a spell%s!", + pline_mon(mtmp, "%s casts a spell%s!", canspotmon(mtmp) ? Monnam(mtmp) : "Something", is_undirected_spell(mattk->adtyp, spellnum) ? "" : (Invis && !perceives(mtmp->data) diff --git a/src/mhitu.c b/src/mhitu.c index 09325af0a..1a2e59400 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -35,7 +35,7 @@ hitmsg(struct monst *mtmp, struct attack *mattk) if same gender, "engagingly" for nymph, normal msg for others. */ if ((compat = could_seduce(mtmp, &gy.youmonst, mattk)) != 0 && !mtmp->mcan && !mtmp->mspec_used) { - pline_xy(mtmp->mx, mtmp->my, "%s %s you %s.", Monst_name, + pline_mon(mtmp, "%s %s you %s.", Monst_name, !Blind ? "smiles at" : !Deaf ? "talks to" : "touches", (compat == 2) ? "engagingly" : "seductively"); } else { @@ -73,7 +73,7 @@ hitmsg(struct monst *mtmp, struct attack *mattk) && gh.hitmsg_prev != NULL && mattk == gh.hitmsg_prev + 1 && mattk->aatyp == gh.hitmsg_prev->aatyp) ? " again" : ""; - pline_xy(mtmp->mx, mtmp->my, "%s %s%s%s", Monst_name, verb, again, punct); + pline_mon(mtmp, "%s %s%s%s", Monst_name, verb, again, punct); } gh.hitmsg_mid = mtmp->m_id; gh.hitmsg_prev = mattk; @@ -90,9 +90,9 @@ missmu(struct monst *mtmp, boolean nearmiss, struct attack *mattk) map_invisible(mtmp->mx, mtmp->my); if (could_seduce(mtmp, &gy.youmonst, mattk) && !mtmp->mcan) - pline_xy(mtmp->mx, mtmp->my, "%s pretends to be friendly.", Monnam(mtmp)); + pline_mon(mtmp, "%s pretends to be friendly.", Monnam(mtmp)); else - pline_xy(mtmp->mx, mtmp->my, "%s %smisses!", Monnam(mtmp), + pline_mon(mtmp, "%s %smisses!", Monnam(mtmp), (nearmiss && flags.verbose) ? "just " : ""); stop_occupation(); @@ -132,7 +132,7 @@ mswings( boolean bash) /* True: polearm used at too close range */ { if (flags.verbose && !Blind && mon_visible(mtmp)) { - pline_xy(mtmp->mx, mtmp->my, "%s %s %s%s %s.", Monnam(mtmp), mswings_verb(otemp, bash), + pline_mon(mtmp, "%s %s %s%s %s.", Monnam(mtmp), mswings_verb(otemp, bash), (otemp->quan > 1L) ? "one of " : "", mhis(mtmp), xname(otemp)); } } diff --git a/src/mon.c b/src/mon.c index e544d68ab..139bc5b31 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1786,8 +1786,7 @@ mpickgold(struct monst *mtmp) add_to_minv(mtmp, gold); if (cansee(mtmp->mx, mtmp->my)) { if (flags.verbose && !mtmp->isgd) - pline_xy(mtmp->mx, mtmp->my, - "%s picks up some %s.", Monnam(mtmp), + pline_mon(mtmp, "%s picks up some %s.", Monnam(mtmp), mat_idx == GOLD ? "gold" : "money"); newsym(mtmp->mx, mtmp->my); } @@ -1847,8 +1846,8 @@ mpickstuff(struct monst *mtmp) char *otmpname = distant_name(otmp, doname); if (flags.verbose) - pline_xy(mtmp->mx, mtmp->my, - "%s picks up %s.", Monnam(mtmp), otmpname); + pline_mon(mtmp, "%s picks up %s.", + Monnam(mtmp), otmpname); } obj_extract_self(otmp3); /* remove from floor */ (void) mpickobj(mtmp, otmp3); /* may merge and free otmp3 */ diff --git a/src/muse.c b/src/muse.c index 0ed8a3336..d26cb4c74 100644 --- a/src/muse.c +++ b/src/muse.c @@ -1927,8 +1927,8 @@ use_offensive(struct monst *mtmp) */ if (cansee(mtmp->mx, mtmp->my)) { otmp->dknown = 1; - pline_xy(mtmp->mx, mtmp->my, - "%s hurls %s!", Monnam(mtmp), singular(otmp, doname)); + pline_mon(mtmp, "%s hurls %s!", + Monnam(mtmp), singular(otmp, doname)); } m_throw(mtmp, mtmp->mx, mtmp->my, sgn(mtmp->mux - mtmp->mx), sgn(mtmp->muy - mtmp->my), diff --git a/src/pline.c b/src/pline.c index c08b67dd6..811d5a2fe 100644 --- a/src/pline.c +++ b/src/pline.c @@ -116,6 +116,18 @@ pline_xy(coordxy x, coordxy y, const char *line, ...) va_end(the_args); } +void +pline_mon(struct monst *mtmp, const char *line, ...) +{ + va_list the_args; + + set_msg_xy(mtmp->mx, mtmp->my); + + va_start(the_args, line); + vpline(line, the_args); + va_end(the_args); +} + /* set the direction where next message happens */ void set_msg_dir(int dir) diff --git a/src/steal.c b/src/steal.c index a183f504b..203edb46f 100644 --- a/src/steal.c +++ b/src/steal.c @@ -846,7 +846,7 @@ mdrop_obj( } /* obj_no_longer_held(obj); -- done by place_object */ if (verbosely && cansee(omx, omy)) - pline_xy(mon->mx, mon->my, "%s drops %s.", Monnam(mon), obj_name); + pline_mon(mon, "%s drops %s.", Monnam(mon), obj_name); if (!flooreffects(obj, omx, omy, "fall")) { place_object(obj, omx, omy); stackobj(obj); diff --git a/src/teleport.c b/src/teleport.c index 916b1ba81..df8c1e29b 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -1916,8 +1916,8 @@ mlevel_tele_trap( assign_level(&tolevel, &valley_level); } else if (Is_botlevel(&u.uz)) { if (in_sight && trap->tseen) - pline_xy(mtmp->mx, mtmp->my, - "%s avoids the %s.", Monnam(mtmp), + pline_mon(mtmp, "%s avoids the %s.", + Monnam(mtmp), (tt == HOLE) ? "hole" : "trap"); return Trap_Effect_Finished; } else { @@ -1929,9 +1929,9 @@ mlevel_tele_trap( || is_home_elemental(mtmp->data) || rn2(7))) { if (in_sight && mtmp->data->mlet != S_ELEMENTAL) { - pline_xy(mtmp->mx, mtmp->my, - "%s seems to shimmer for a moment.", - Monnam(mtmp)); + pline_mon(mtmp, + "%s seems to shimmer for a moment.", + Monnam(mtmp)); seetrap(trap); } return Trap_Effect_Finished; @@ -1949,7 +1949,7 @@ mlevel_tele_trap( currently inside his or her own special room */ || (tt == NO_TRAP && onscary(0, 0, mtmp))) { if (in_sight) - pline_xy(mtmp->mx, mtmp->my, + pline_mon(mtmp, "%s seems very disoriented for a moment.", Monnam(mtmp)); return Trap_Effect_Finished; @@ -1964,8 +1964,8 @@ mlevel_tele_trap( nlev = random_teleport_level(); if (nlev == depth(&u.uz)) { if (in_sight) - pline_xy(mtmp->mx, mtmp->my, - "%s shudders for a moment.", Monnam(mtmp)); + pline_mon(mtmp, "%s shudders for a moment.", + Monnam(mtmp)); return Trap_Effect_Finished; } get_level(&tolevel, nlev); @@ -1976,8 +1976,7 @@ mlevel_tele_trap( } if (in_sight) { - pline_xy(mtmp->mx, mtmp->my, - "Suddenly, %s %s.", mon_nam(mtmp), + pline_mon(mtmp, "Suddenly, %s %s.", mon_nam(mtmp), (tt == HOLE) ? "falls into a hole" : (tt == TRAPDOOR) ? "falls through a trap door" : "disappears out of sight"); diff --git a/src/trap.c b/src/trap.c index a1c911d96..5ea801b20 100644 --- a/src/trap.c +++ b/src/trap.c @@ -805,6 +805,7 @@ animate_statue( pline("Instead of shattering, %s suddenly %s!", statuename, comes_to_life); } else { /* cause == ANIMATE_NORMAL */ + set_msg_xy(x, y); You("find %s posing as a statue.", canspotmon(mon) ? a_monnam(mon) : something); if (!canspotmon(mon) && Blind) @@ -950,7 +951,8 @@ mu_maybe_destroy_web( (flaming(mptr)) ? "burn" : "dissolve", a_your[trap->madeby_u]); else - pline("%s %s %s spider web!", Monnam(mtmp), + pline_mon(mtmp, + "%s %s %s spider web!", Monnam(mtmp), (flaming(mptr)) ? "burns" : "dissolves", a_your[trap->madeby_u]); } @@ -962,7 +964,8 @@ mu_maybe_destroy_web( if (isyou) { You("flow through %s spider web.", a_your[trap->madeby_u]); } else { - pline("%s flows through %s spider web.", Monnam(mtmp), + pline_mon(mtmp, + "%s flows through %s spider web.", Monnam(mtmp), a_your[trap->madeby_u]); seetrap(trap); } @@ -1173,7 +1176,8 @@ trapeffect_arrow_trap( if (trap->once && trap->tseen && !rn2(15)) { if (in_sight && see_it) - pline("%s triggers a trap but nothing happens.", + pline_mon(mtmp, + "%s triggers a trap but nothing happens.", Monnam(mtmp)); deltrap(trap); newsym(mtmp->mx, mtmp->my); @@ -1242,7 +1246,8 @@ trapeffect_dart_trap( if (trap->once && trap->tseen && !rn2(15)) { if (in_sight && see_it) - pline("%s triggers a trap but nothing happens.", + pline_mon(mtmp, + "%s triggers a trap but nothing happens.", Monnam(mtmp)); deltrap(trap); newsym(mtmp->mx, mtmp->my); @@ -1322,7 +1327,8 @@ trapeffect_rocktrap( if (trap->once && trap->tseen && !rn2(15)) { if (in_sight && see_it) - pline("A trap door above %s opens, but nothing falls out!", + pline_mon(mtmp, + "A trap door above %s opens, but nothing falls out!", mon_nam(mtmp)); deltrap(trap); newsym(mtmp->mx, mtmp->my); @@ -1388,11 +1394,13 @@ trapeffect_sqky_board( if (IndexOk(trap->tnote, tsnds)) { Soundeffect(tsnds[trap->tnote], 50); } - pline("A board beneath %s squeaks %s loudly.", + pline_mon(mtmp, + "A board beneath %s squeaks %s loudly.", mon_nam(mtmp), trapnote(trap, FALSE)); seetrap(trap); } else if (!mindless(mtmp->data)) { - pline("%s stops momentarily and appears to cringe.", + pline_mon(mtmp, + "%s stops momentarily and appears to cringe.", Monnam(mtmp)); } } else { @@ -1467,7 +1475,8 @@ trapeffect_bear_trap( && !is_whirly(mptr) && !unsolid(mptr)) { mtmp->mtrapped = 1; if (in_sight) { - pline("%s is caught in %s bear trap!", Monnam(mtmp), + pline_mon(mtmp, + "%s is caught in %s bear trap!", Monnam(mtmp), a_your[trap->madeby_u]); seetrap(trap); } else { @@ -1479,7 +1488,8 @@ trapeffect_bear_trap( } } else if (forcetrap) { if (in_sight) { - pline("%s evades %s bear trap!", Monnam(mtmp), + pline_mon(mtmp, + "%s evades %s bear trap!", Monnam(mtmp), a_your[trap->madeby_u]); seetrap(trap); } @@ -1516,7 +1526,8 @@ trapeffect_slp_gas_trap( if (!resists_sleep(mtmp) && !breathless(mtmp->data) && !helpless(mtmp)) { if (sleep_monst(mtmp, rnd(25), -1) && in_sight) { - pline("%s suddenly falls asleep!", Monnam(mtmp)); + pline_mon(mtmp, + "%s suddenly falls asleep!", Monnam(mtmp)); seetrap(trap); } } @@ -1594,14 +1605,16 @@ trapeffect_rust_trap( switch (rn2(5)) { case 0: if (in_sight) - pline("%s %s on the %s!", A_gush_of_water_hits, + pline_mon(mtmp, + "%s %s on the %s!", A_gush_of_water_hits, mon_nam(mtmp), mbodypart(mtmp, HEAD)); target = which_armor(mtmp, W_ARMH); (void) water_damage(target, helm_simple_name(target), TRUE); break; case 1: if (in_sight) - pline("%s %s's left %s!", A_gush_of_water_hits, + pline_mon(mtmp, + "%s %s's left %s!", A_gush_of_water_hits, mon_nam(mtmp), mbodypart(mtmp, ARM)); target = which_armor(mtmp, W_ARMS); if (water_damage(target, "shield", TRUE) != ER_NOTHING) @@ -1615,7 +1628,8 @@ trapeffect_rust_trap( break; case 2: if (in_sight) - pline("%s %s's right %s!", A_gush_of_water_hits, + pline_mon(mtmp, + "%s %s's right %s!", A_gush_of_water_hits, mon_nam(mtmp), mbodypart(mtmp, ARM)); (void) water_damage(MON_WEP(mtmp), 0, TRUE); goto mglovecheck; @@ -1639,7 +1653,7 @@ trapeffect_rust_trap( if (completelyrusts(mptr)) { if (in_sight) - pline("%s %s to pieces!", Monnam(mtmp), + pline_mon(mtmp, "%s %s to pieces!", Monnam(mtmp), !mlifesaver(mtmp) ? "falls" : "starts to fall"); monkilled(mtmp, (const char *) 0, AD_RUST); if (DEADMONSTER(mtmp)) @@ -1672,12 +1686,14 @@ trapeffect_fire_trap( int orig_dmg = d(2, 4); if (in_sight) - pline("A %s erupts from the %s under %s!", tower_of_flame, + pline_mon(mtmp, + "A %s erupts from the %s under %s!", tower_of_flame, surface(mtmp->mx, mtmp->my), mon_nam(mtmp)); - else if (see_it) /* evidently `mtmp' is invisible */ + else if (see_it) { /* evidently `mtmp' is invisible */ + set_msg_xy(mtmp->mx, mtmp->my); You_see("a %s erupt from the %s!", tower_of_flame, surface(mtmp->mx, mtmp->my)); - + } if (resists_fire(mtmp)) { if (in_sight) { shieldeff(mtmp->mx, mtmp->my); @@ -1897,7 +1913,7 @@ trapeffect_pit( /* openfallingtrap; not inescapable here */ if (in_sight) { seetrap(trap); - pline_xy(mtmp->mx, mtmp->my, + pline_mon(mtmp, "%s doesn't fall into the pit.", Monnam(mtmp)); } return Trap_Effect_Finished; @@ -1909,7 +1925,7 @@ trapeffect_pit( if (!passes_walls(mptr)) mtmp->mtrapped = 1; if (in_sight) { - pline_xy(mtmp->mx, mtmp->my, + pline_mon(mtmp, "%s %s into %s pit!", Monnam(mtmp), fallverb, a_your[trap->madeby_u]); if (mptr == &mons[PM_PIT_VIPER] @@ -1961,11 +1977,11 @@ trapeffect_hole( if (in_sight) { seetrap(trap); if (tt == TRAPDOOR) - pline_xy(mtmp->mx, mtmp->my, + pline_mon(mtmp, "A trap door opens, but %s doesn't fall through.", mon_nam(mtmp)); else /* (tt == HOLE) */ - pline_xy(mtmp->mx, mtmp->my, + pline_mon(mtmp, "%s doesn't fall through the hole.", Monnam(mtmp)); } @@ -1973,7 +1989,7 @@ trapeffect_hole( } if (inescapable) { /* sokoban hole */ if (in_sight) { - pline_xy(mtmp->mx, mtmp->my, + pline_mon(mtmp, "%s seems to be yanked down!", Monnam(mtmp)); /* suppress message in mlevel_tele_trap() */ in_sight = FALSE; @@ -2151,7 +2167,8 @@ trapeffect_web( || (mtmp->wormno && count_wsegs(mtmp) > 5)) { tear_web = TRUE; } else if (in_sight) { - pline("%s is caught in %s spider web.", Monnam(mtmp), + pline_mon(mtmp, + "%s is caught in %s spider web.", Monnam(mtmp), a_your[trap->madeby_u]); seetrap(trap); } @@ -2176,13 +2193,15 @@ trapeffect_web( } if (tear_web) { if (in_sight) - pline("%s tears through %s spider web!", Monnam(mtmp), + pline_mon(mtmp, + "%s tears through %s spider web!", Monnam(mtmp), a_your[trap->madeby_u]); deltrap(trap); newsym(mtmp->mx, mtmp->my); } else if (forcetrap && !mtmp->mtrapped) { if (in_sight) { - pline("%s avoids %s spider web!", Monnam(mtmp), + pline_mon(mtmp, + "%s avoids %s spider web!", Monnam(mtmp), a_your[trap->madeby_u]); seetrap(trap); } @@ -2308,7 +2327,8 @@ trapeffect_anti_magic( mtmp->mspec_used += d(2, 6); if (in_sight) { seetrap(trap); - pline("%s seems lethargic.", Monnam(mtmp)); + pline_mon(mtmp, "%s seems lethargic.", + Monnam(mtmp)); } } } else { /* take some damage */ @@ -2476,7 +2496,8 @@ trapeffect_landmine( boolean already_seen = trap->tseen; if (in_sight && !already_seen) { - pline("A trigger appears in a pile of soil below %s.", + pline_mon(mtmp, + "A trigger appears in a pile of soil below %s.", mon_nam(mtmp)); seetrap(trap); } @@ -2489,7 +2510,8 @@ trapeffect_landmine( } } else if (in_sight) { newsym(mtmp->mx, mtmp->my); - pline("%s%s triggers %s land mine!", + pline_mon(mtmp, + "%s%s triggers %s land mine!", !Deaf ? "KAABLAMM!!! " : "", Monnam(mtmp), a_your[trap->madeby_u]); } @@ -2550,7 +2572,7 @@ trapeffect_rolling_boulder_trap( newsym(mtmp->mx, mtmp->my); if (in_sight) - pline("%s%s triggers %s.", + pline_mon(mtmp, "%s%s triggers %s.", !Deaf ? "Click! " : "", Monnam(mtmp), trap->tseen ? "a rolling boulder trap" : something); if (launch_obj(BOULDER, trap->launch.x, trap->launch.y, @@ -3228,7 +3250,8 @@ launch_obj( if (otyp == BOULDER && throws_rocks(mtmp->data)) { if (rn2(3)) { if (cansee(x, y)) - pline("%s snatches the boulder.", Monnam(mtmp)); + pline_mon(mtmp, "%s snatches the boulder.", + Monnam(mtmp)); singleobj->otrapped = 0; (void) mpickobj(mtmp, singleobj); used_up = TRUE; @@ -3265,6 +3288,8 @@ launch_obj( switch (t->ttyp) { case LANDMINE: if (rn2(10) > 2) { + if (cansee(x, y)) + set_msg_xy(x, y); pline("KAABLAMM!!!%s", cansee(x, y) ? " The rolling boulder triggers a land mine." @@ -3294,7 +3319,7 @@ launch_obj( /*FALLTHRU*/ case TELEP_TRAP: if (cansee(x, y)) - pline("Suddenly the rolling boulder disappears!"); + pline_xy(x, y, "Suddenly the rolling boulder disappears!"); else if (!Deaf) You_hear("a rumbling stop abruptly."); singleobj->otrapped = 0; @@ -3356,8 +3381,10 @@ launch_obj( } } if (otyp == BOULDER && closed_door(x, y)) { - if (cansee(x, y)) + if (cansee(x, y)) { + set_msg_xy(x, y); pline_The("boulder crashes through a door."); + } levl[x][y].doormask = D_BROKEN; if (dist) unblock_point(x, y); @@ -3577,11 +3604,13 @@ mintrap(struct monst *mtmp, unsigned mintrapflags) if (!rn2(2)) { mtmp->mtrapped = 0; if (canseemon(mtmp)) - pline("%s pulls free...", Monnam(mtmp)); + pline_mon(mtmp, "%s pulls free...", + Monnam(mtmp)); fill_pit(mtmp->mx, mtmp->my); } } else { if (canseemon(mtmp)) { + set_msg_xy(mtmp->mx, mtmp->my); if (is_pit(trap->ttyp)) pline("%s climbs %sout of the pit.", Monnam(mtmp), m_easy_escape_pit(mtmp) ? "easily " : ""); @@ -3594,13 +3623,15 @@ mintrap(struct monst *mtmp, unsigned mintrapflags) } else if (metallivorous(mptr)) { if (trap->ttyp == BEAR_TRAP) { if (canseemon(mtmp)) - pline("%s eats a bear trap!", Monnam(mtmp)); + pline_mon(mtmp, "%s eats a bear trap!", + Monnam(mtmp)); deltrap(trap); mtmp->meating = 5; mtmp->mtrapped = 0; } else if (trap->ttyp == SPIKED_PIT) { if (canseemon(mtmp)) - pline("%s munches on some spikes!", Monnam(mtmp)); + pline_mon(mtmp, "%s munches on some spikes!", + Monnam(mtmp)); trap->ttyp = PIT; mtmp->meating = 5; } @@ -3646,7 +3677,7 @@ mintrap(struct monst *mtmp, unsigned mintrapflags) maybe_unhide_at(mtmp->mx, mtmp->my); if (!alreadyspotted && canseemon(mtmp)) - pline("%s appears.", Amonnam(mtmp)); + pline_mon(mtmp, "%s appears.", Amonnam(mtmp)); } } return trap_result; @@ -3684,7 +3715,7 @@ minstapetrify(struct monst *mon, boolean byplayer) mon_adjust_speed(mon, -3, (struct obj *) 0); if (cansee(mon->mx, mon->my)) - pline("%s turns to stone.", Monnam(mon)); + pline_mon(mon, "%s turns to stone.", Monnam(mon)); if (byplayer) { gs.stoned = TRUE; xkilled(mon, XKILL_NOMSG); @@ -3733,7 +3764,7 @@ mselftouch( if (mwep && mwep->otyp == CORPSE && touch_petrifies(&mons[mwep->corpsenm]) && !resists_ston(mon)) { if (cansee(mon->mx, mon->my)) { - pline("%s%s touches %s.", arg ? arg : "", + pline_mon(mon, "%s%s touches %s.", arg ? arg : "", arg ? mon_nam(mon) : Monnam(mon), corpse_xname(mwep, (const char *) 0, CXN_PFX_THE)); } @@ -6471,15 +6502,17 @@ thitm( */ if (!strike) { if (obj && cansee(mon->mx, mon->my)) - pline("%s is almost hit by %s!", Monnam(mon), doname(obj)); + pline_mon(mon, "%s is almost hit by %s!", + Monnam(mon), doname(obj)); } else { int dam = 1; boolean harmless = (obj && stone_missile(obj) && passes_rocks(mon->data)); if (obj && cansee(mon->mx, mon->my)) - pline("%s is hit by %s%s", Monnam(mon), doname(obj), - harmless ? " but is not harmed." : "!"); + pline_mon(mon, "%s is hit by %s%s", + Monnam(mon), doname(obj), + harmless ? " but is not harmed." : "!"); if (d_override) { dam = d_override; } else if (obj) { diff --git a/src/weapon.c b/src/weapon.c index 85622a3e7..01d6f63e4 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -839,9 +839,9 @@ mon_wield_item(struct monst *mon) if (canseemon(mon)) { boolean newly_welded; - pline_xy(mon->mx, mon->my, - "%s wields %s%c", Monnam(mon), doname(obj), - exclaim ? '!' : '.'); + pline_mon(mon, "%s wields %s%c", + Monnam(mon), doname(obj), + exclaim ? '!' : '.'); /* 3.6.3: mwelded() predicate expects the object to have its W_WEP bit set in owormmask, but the pline here and for artifact_light don't want that because they'd have '(weapon