OSDN Git Service

upgrade to 3.6.1
[jnethack/source.git] / src / mhitm.c
index f0eab76..4703d36 100644 (file)
@@ -1,7 +1,13 @@
-/* NetHack 3.6 mhitm.c $NHDT-Date: 1446854229 2015/11/06 23:57:09 $  $NHDT-Branch: master $:$NHDT-Revision: 1.83 $ */
+/* NetHack 3.6 mhitm.c $NHDT-Date: 1513297346 2017/12/15 00:22:26 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.99 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/*-Copyright (c) Robert Patrick Rankin, 2011. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/* JNetHack Copyright */
+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000  */
+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016            */
+/* JNetHack may be freely redistributed.  See license for details. */
+
 #include "hack.h"
 #include "artifact.h"
 
@@ -12,7 +18,10 @@ static NEARDATA long noisetime;
 static NEARDATA struct obj *otmp;
 
 static const char brief_feeling[] =
+/*JP
     "have a %s feeling for a moment, then it passes.";
+*/
+    "%s\8bC\8e\9d\82É\82¨\82»\82í\82ê\82½\82ª\81C\82·\82®\82É\89ß\82¬\82³\82Á\82½\81D";
 
 STATIC_DCL char *FDECL(mon_nam_too, (char *, struct monst *, struct monst *));
 STATIC_DCL int FDECL(hitmm, (struct monst *, struct monst *,
@@ -48,6 +57,7 @@ struct monst *mon, *other_mon;
 {
     Strcpy(outbuf, mon_nam(mon));
     if (mon == other_mon)
+#if 0 /*JP*/
         switch (pronoun_gender(mon)) {
         case 0:
             Strcpy(outbuf, "himself");
@@ -59,6 +69,9 @@ struct monst *mon, *other_mon;
             Strcpy(outbuf, "itself");
             break;
         }
+#else
+        Strcpy(outbuf, "\8e©\95ª\8e©\90g");
+#endif
     return outbuf;
 }
 
@@ -72,9 +85,16 @@ register struct attack *mattk;
     if (!Deaf && (farq != far_noise || moves - noisetime > 10)) {
         far_noise = farq;
         noisetime = moves;
+#if 0 /*JP*/
         You_hear("%s%s.",
                  (mattk->aatyp == AT_EXPL) ? "an explosion" : "some noises",
                  farq ? " in the distance" : "");
+#else
+        You_hear("%s%s\82ð\95·\82¢\82½\81D",
+                 farq ? "\89\93\82­\82Å" : "",
+                 (mattk->aatyp == AT_EXPL) ? "\94\9a\94­\89¹" : "\89½\82©\82ª\90í\82¤\89¹"
+                 );
+#endif
     }
 }
 
@@ -96,11 +116,21 @@ struct attack *mattk;
             seemimic(mdef);
         if (magr->m_ap_type)
             seemimic(magr);
+#if 0 /*JP*/
         fmt = (could_seduce(magr, mdef, mattk) && !magr->mcan)
                   ? "%s pretends to be friendly to"
                   : "%s misses";
+#else /*JP:\89p\8cê\82Æ\95Ï\90\94\93W\8aJ\82Ì\83^\83C\83~\83\93\83O\82ª\88Ù\82È\82é\82Ì\82Å\92\8d\88Ó*/
+        fmt = (could_seduce(magr,mdef,mattk) && !magr->mcan)
+                  ? "%s\82Í%%s\82É\97F\8dD\93I\82È\82Ó\82è\82ð\82µ\82½\81D"
+                  : "%s\82Ì%%s\82Ö\82Ì\8dU\8c\82\82Í\8aO\82ê\82½\81D";
+#endif
         Sprintf(buf, fmt, Monnam(magr));
+#if 0 /*JP*/
         pline("%s %s.", buf, mon_nam_too(mdef_name, mdef, magr));
+#else
+        pline(buf, mon_nam_too(mdef_name, mdef, magr));
+#endif
     } else
         noises(magr, mattk);
 }
@@ -150,7 +180,10 @@ register struct monst *mtmp;
             if (monnear(mtmp, mon->mx, mon->my)) {
                 if (!u.uswallow && (mtmp == u.ustuck)) {
                     if (!rn2(4)) {
+/*JP
                         pline("%s releases you!", Monnam(mtmp));
+*/
+                        pline("%s\82Í\82 \82È\82½\82ð\89ð\95ú\82µ\82½\81I", Monnam(mtmp));
                         u.ustuck = 0;
                     } else
                         break;
@@ -244,12 +277,18 @@ boolean quietly;
                 return MM_HIT; /* no damage during the polymorph */
             }
             if (!quietly && canspotmon(magr))
+/*JP
                 pline("%s turns to stone!", Monnam(magr));
+*/
+                pline("%s\82Í\90Î\82É\82È\82Á\82½\81I", Monnam(magr));
             monstone(magr);
             if (magr->mhp > 0)
                 return MM_HIT; /* lifesaved */
             else if (magr->mtame && !vis)
+/*JP
                 You(brief_feeling, "peculiarly sad");
+*/
+                You(brief_feeling, "\82à\82Ì\94ß\82µ\82¢");
             return MM_AGR_DIED;
         }
     }
@@ -259,8 +298,12 @@ boolean quietly;
     place_monster(magr, tx, ty); /* put down at target spot */
     place_monster(mdef, fx, fy);
     if (vis && !quietly)
+#if 0 /*JP*/
         pline("%s moves %s out of %s way!", Monnam(magr), mon_nam(mdef),
               is_rider(pa) ? "the" : mhis(magr));
+#else
+        pline("%s\82Í%s\82ð\89\9f\82µ\82Ì\82¯\82½\81I", Monnam(magr), mon_nam(mdef));
+#endif
     newsym(fx, fy);  /* see it */
     newsym(tx, ty);  /*   all happen */
     flush_screen(0); /* make sure it shows up */
@@ -293,7 +336,7 @@ register struct monst *magr, *mdef;
 {
     int i,          /* loop counter */
         tmp,        /* amour class difference */
-        strike,     /* hit this attack */
+        strike = 0, /* hit this attack */
         attk,       /* attack attempted this time */
         struck = 0, /* hit at least once */
         res[NATTK]; /* results of all attacks */
@@ -324,12 +367,24 @@ register struct monst *magr, *mdef;
         mdef->mundetected = 0;
         newsym(mdef->mx, mdef->my);
         if (canseemon(mdef) && !sensemon(mdef)) {
-            if (Unaware)
-                You("dream of %s.", (mdef->data->geno & G_UNIQ)
-                                        ? a_monnam(mdef)
-                                        : makeplural(m_monnam(mdef)));
-            else
+            if (Unaware) {
+#if 0 /*JP*/
+                boolean justone = (mdef->data->geno & G_UNIQ) != 0L;
+                const char *montype;
+
+                montype = noname_monnam(mdef, justone ? ARTICLE_THE
+                                                      : ARTICLE_NONE);
+                if (!justone)
+                    montype = makeplural(montype);
+                You("dream of %s.", montype);
+#else
+                You("%s\82Ì\96²\82ð\8c©\82½\81D", a_monnam(mdef));
+#endif
+            } else
+/*JP
                 pline("Suddenly, you notice %s.", a_monnam(mdef));
+*/
+                pline("\93Ë\91R\81C\82 \82È\82½\82Í%s\82É\8bC\82ª\82Â\82¢\82½\81D", a_monnam(mdef));
         }
     }
 
@@ -351,11 +406,20 @@ register struct monst *magr, *mdef;
     /* Now perform all attacks for the monster. */
     for (i = 0; i < NATTK; i++) {
         res[i] = MM_MISS;
-        mattk = getmattk(pa, i, res, &alt_attk);
+        mattk = getmattk(magr, mdef, i, res, &alt_attk);
         otmp = (struct obj *) 0;
         attk = 1;
         switch (mattk->aatyp) {
         case AT_WEAP: /* "hand to hand" attacks */
+            if (distmin(magr->mx, magr->my, mdef->mx, mdef->my) > 1) {
+                /* D: Do a ranged attack here! */
+                strike = thrwmm(magr, mdef);
+                if (DEADMONSTER(mdef))
+                    res[i] = MM_DEF_DIED;
+                if (DEADMONSTER(magr))
+                    res[i] |= MM_AGR_DIED;
+                break;
+            }
             if (magr->weapon_check == NEED_WEAPON || !MON_WEP(magr)) {
                 magr->weapon_check = NEED_HTH_WEAPON;
                 if (mon_wield_item(magr) != 0)
@@ -379,7 +443,8 @@ register struct monst *magr, *mdef;
         case AT_TENT:
             /* Nymph that teleported away on first attack? */
             if (distmin(magr->mx, magr->my, mdef->mx, mdef->my) > 1)
-                return MM_MISS;
+                /* Continue because the monster may have a ranged attack. */
+                continue;
             /* Monsters won't attack cockatrices physically if they
              * have a weapon instead.  This instinct doesn't work for
              * players, or under conflict or confusion.
@@ -397,17 +462,23 @@ register struct monst *magr, *mdef;
             if (strike) {
                 res[i] = hitmm(magr, mdef, mattk);
                 if ((mdef->data == &mons[PM_BLACK_PUDDING]
-                     || mdef->data == &mons[PM_BROWN_PUDDING]) && otmp
-                    && objects[otmp->otyp].oc_material == IRON
+                     || mdef->data == &mons[PM_BROWN_PUDDING])
+                    && (otmp && (objects[otmp->otyp].oc_material == IRON
+                                 || objects[otmp->otyp].oc_material == METAL))
                     && mdef->mhp > 1
                     && !mdef->mcan) {
                     if (clone_mon(mdef, 0, 0)) {
-                        if (vis) {
+                        if (vis && canspotmon(mdef)) {
                             char buf[BUFSZ];
 
                             Strcpy(buf, Monnam(mdef));
+#if 0 /*JP*/
                             pline("%s divides as %s hits it!", buf,
                                   mon_nam(magr));
+#else
+                            pline("%s\82Ì\8dU\8c\82\82Å%s\82ª\95ª\97ô\82µ\82½\81I",
+                                  mon_nam(magr), buf);
+#endif
                         }
                     }
                 }
@@ -428,6 +499,10 @@ register struct monst *magr, *mdef;
             break;
 
         case AT_EXPL:
+            /* D: Prevent explosions from a distance */
+            if (distmin(magr->mx,magr->my,mdef->mx,mdef->my) > 1)
+                continue;
+
             res[i] = explmm(magr, mdef, mattk);
             if (res[i] == MM_MISS) { /* cancelled--no attack */
                 strike = 0;
@@ -437,20 +512,49 @@ register struct monst *magr, *mdef;
             break;
 
         case AT_ENGL:
-            if (u.usteed && (mdef == u.usteed)) {
+            if (u.usteed && mdef == u.usteed) {
                 strike = 0;
                 break;
             }
-            /* Engulfing attacks are directed at the hero if
-             * possible. -dlc
-             */
+            /* D: Prevent engulf from a distance */
+            if (distmin(magr->mx, magr->my, mdef->mx, mdef->my) > 1)
+                continue;
+            /* Engulfing attacks are directed at the hero if possible. -dlc */
             if (u.uswallow && magr == u.ustuck)
                 strike = 0;
-            else {
-                if ((strike = (tmp > rnd(20 + i))))
-                    res[i] = gulpmm(magr, mdef, mattk);
-                else
-                    missmm(magr, mdef, mattk);
+            else if ((strike = (tmp > rnd(20 + i))) != 0)
+                res[i] = gulpmm(magr, mdef, mattk);
+            else
+                missmm(magr, mdef, mattk);
+            break;
+
+        case AT_BREA:
+            if (!monnear(magr, mdef->mx, mdef->my)) {
+                strike = breamm(magr, mattk, mdef);
+
+                /* We don't really know if we hit or not; pretend we did. */
+                if (strike)
+                    res[i] |= MM_HIT;
+                if (DEADMONSTER(mdef))
+                    res[i] = MM_DEF_DIED;
+                if (DEADMONSTER(magr))
+                    res[i] |= MM_AGR_DIED;
+            }
+            else
+                strike = 0;
+            break;
+
+        case AT_SPIT:
+            if (!monnear(magr, mdef->mx, mdef->my)) {
+                strike = spitmm(magr, mattk, mdef);
+
+                /* We don't really know if we hit or not; pretend we did. */
+                if (strike)
+                    res[i] |= MM_HIT;
+                if (DEADMONSTER(mdef))
+                    res[i] = MM_DEF_DIED;
+                if (DEADMONSTER(magr))
+                    res[i] |= MM_AGR_DIED;
             }
             break;
 
@@ -460,12 +564,12 @@ register struct monst *magr, *mdef;
             break;
         }
 
-        if (attk && !(res[i] & MM_AGR_DIED))
+        if (attk && !(res[i] & MM_AGR_DIED)
+            && distmin(magr->mx, magr->my, mdef->mx, mdef->my) <= 1)
             res[i] = passivemm(magr, mdef, strike, res[i] & MM_DEF_DIED);
 
         if (res[i] & MM_DEF_DIED)
             return res[i];
-
         if (res[i] & MM_AGR_DIED)
             return res[i];
         /* return if aggressor can no longer attack */
@@ -497,39 +601,72 @@ struct attack *mattk;
         if (magr->m_ap_type)
             seemimic(magr);
         if ((compat = could_seduce(magr, mdef, mattk)) && !magr->mcan) {
+#if 0 /*JP*/
             Sprintf(buf, "%s %s", Monnam(magr),
                     mdef->mcansee ? "smiles at" : "talks to");
             pline("%s %s %s.", buf, mon_nam(mdef),
                   compat == 2 ? "engagingly" : "seductively");
+#else
+            Sprintf(buf, "%s\82Í%%s\82É%%s%s\81D", Monnam(magr),
+                    mdef->mcansee ? "\94÷\8fÎ\82Ý\82©\82¯\82½" : "\98b\82µ\82©\82¯\82½");
+            pline(buf, mon_nam(mdef),
+                  compat == 2 ? "\96£\97Í\93I\82É" : "\97U\98f\93I\82É");
+#endif
         } else {
             char magr_name[BUFSZ];
 
             Strcpy(magr_name, Monnam(magr));
             switch (mattk->aatyp) {
             case AT_BITE:
+/*JP
                 Sprintf(buf, "%s bites", magr_name);
+*/
+                Sprintf(buf,"%s\82Í%%s\82É\8a\9a\82Ý\82Â\82¢\82½\81D", magr_name);
                 break;
             case AT_STNG:
+/*JP
                 Sprintf(buf, "%s stings", magr_name);
+*/
+                Sprintf(buf,"%s\82Í%%s\82ð\93Ë\82«\82³\82µ\82½\81D", magr_name);
                 break;
             case AT_BUTT:
+/*JP
                 Sprintf(buf, "%s butts", magr_name);
+*/
+                Sprintf(buf,"%s\82Í%%s\82É\93ª\93Ë\82«\82ð\82­\82ç\82í\82µ\82½\81D", magr_name);
                 break;
             case AT_TUCH:
+/*JP
                 Sprintf(buf, "%s touches", magr_name);
+*/
+                Sprintf(buf,"%s\82Í%%s\82É\90G\82ê\82½\81D", magr_name);
                 break;
             case AT_TENT:
+/*JP
                 Sprintf(buf, "%s tentacles suck", s_suffix(magr_name));
+*/
+                Sprintf(buf, "%s\82Ì\90G\8eè\82ª%%s\82Ì\91Ì\89t\82ð\8bz\82¢\82Æ\82Á\82½\81D", magr_name);
                 break;
             case AT_HUGS:
                 if (magr != u.ustuck) {
+/*JP
                     Sprintf(buf, "%s squeezes", magr_name);
+*/
+                    Sprintf(buf,"%s\82Í%%s\82ð\8di\82ß\82½\81D", magr_name);
                     break;
                 }
+                /*FALLTHRU*/
             default:
+/*JP
                 Sprintf(buf, "%s hits", magr_name);
+*/
+                Sprintf(buf,"%s\82Ì%%s\82Ö\82Ì\8dU\8c\82\82Í\96½\92\86\82µ\82½\81D", magr_name);
             }
+#if 0 /*JP*/
             pline("%s %s.", buf, mon_nam_too(mdef_name, mdef, magr));
+#else
+            pline(buf, mon_nam_too(mdef_name, mdef, magr));
+#endif
         }
     } else
         noises(magr, mattk);
@@ -546,38 +683,65 @@ struct attack *mattk;
     char buf[BUFSZ];
 
     if (vis) {
+        if (mdef->data->mlet == S_MIMIC
+            && mdef->m_ap_type != M_AP_NOTHING)
+            seemimic(mdef);
+#if 0 /*JP*/
         Sprintf(buf, "%s gazes at", Monnam(magr));
-        pline("%s %s...", buf, mon_nam(mdef));
+        pline("%s %s...", buf,
+              canspotmon(mdef) ? mon_nam(mdef) : "something");
+#else
+        Sprintf(buf, "%s\82Í%%s\82ð\82É\82ç\82Ý\82Â\82¯\82½\81D\81D\81D", Monnam(magr));
+        pline(buf, canspotmon(mdef) ? mon_nam(mdef) : "\89½\82©");
+#endif
     }
 
-    if (magr->mcan || !magr->mcansee
-        || (magr->minvis && !perceives(mdef->data)) || !mdef->mcansee
-        || mdef->msleeping) {
-        if (vis)
+    if (magr->mcan || !magr->mcansee || !mdef->mcansee
+        || (magr->minvis && !perceives(mdef->data)) || mdef->msleeping) {
+        if (vis && canspotmon(mdef))
+/*JP
             pline("but nothing happens.");
+*/
+            pline("\82µ\82©\82µ\89½\82à\82¨\82±\82ç\82È\82©\82Á\82½\81D");
         return MM_MISS;
     }
     /* call mon_reflects 2x, first test, then, if visible, print message */
     if (magr->data == &mons[PM_MEDUSA] && mon_reflects(mdef, (char *) 0)) {
         if (canseemon(mdef))
+/*JP
             (void) mon_reflects(mdef, "The gaze is reflected away by %s %s.");
+*/
+            (void) mon_reflects(mdef, "\82É\82ç\82Ý\82Í%s\82Ì%s\82Å\94½\8eË\82µ\82½\81D");
         if (mdef->mcansee) {
             if (mon_reflects(magr, (char *) 0)) {
                 if (canseemon(magr))
-                    (void) mon_reflects(
-                        magr, "The gaze is reflected away by %s %s.");
+#if 0 /*JP*/
+                    (void) mon_reflects(magr,
+                                      "The gaze is reflected away by %s %s.");
+#else
+                    (void) mon_reflects(magr,
+                                      "\82É\82ç\82Ý\82Í%s\82Ì%s\82Å\94½\8eË\82µ\82½\81D");
+#endif
                 return MM_MISS;
             }
             if (mdef->minvis && !perceives(magr->data)) {
                 if (canseemon(magr)) {
+#if 0 /*JP*/
                     pline(
                       "%s doesn't seem to notice that %s gaze was reflected.",
                           Monnam(magr), mhis(magr));
+#else
+                    pline("\82É\82ç\82Ý\82ª\94½\8eË\82µ\82Ä\82¢\82é\82±\82Æ\82É%s\82Í\8bC\95t\82¢\82Ä\82¢\82È\82¢\82æ\82¤\82¾\81D",
+                          Monnam(magr));
+#endif
                 }
                 return MM_MISS;
             }
             if (canseemon(magr))
+/*JP
                 pline("%s is turned to stone!", Monnam(magr));
+*/
+                pline("%s\82Í\90Î\82É\82È\82Á\82½\81I", Monnam(magr));
             monstone(magr);
             if (magr->mhp > 0)
                 return MM_MISS;
@@ -635,12 +799,33 @@ register struct attack *mattk;
         return MM_MISS;
 
     if (vis) {
+        /* [this two-part formatting dates back to when only one x_monnam
+           result could be included in an expression because the next one
+           would overwrite first's result -- that's no longer the case] */
+#if 0 /*JP*/
         Sprintf(buf, "%s swallows", Monnam(magr));
         pline("%s %s.", buf, mon_nam(mdef));
+#else
+        Sprintf(buf, "%s\82Í%%s\82ð\82®\82Á\82Æ\88ù\82Ý\82±\82ñ\82¾\81D", Monnam(magr));
+        pline(buf, mon_nam(mdef));
+#endif
     }
     for (obj = mdef->minvent; obj; obj = obj->nobj)
         (void) snuff_lit(obj);
 
+    if (is_vampshifter(mdef)
+        && newcham(mdef, &mons[mdef->cham], FALSE, FALSE)) {
+        if (vis) {
+            /* 'it' -- previous form is no longer available and
+               using that would be excessively verbose */
+            pline("%s expels %s.", Monnam(magr),
+                  canspotmon(mdef) ? "it" : something);
+            if (canspotmon(mdef))
+                pline("It turns into %s.", a_monnam(mdef));
+        }
+        return MM_HIT; /* bypass mdamagem() */
+    }
+
     /*
      *  All of this manipulation is needed to keep the display correct.
      *  There is a flush at the next pline().
@@ -678,10 +863,14 @@ register struct attack *mattk;
     } else if (status & MM_AGR_DIED) { /* aggressor died */
         place_monster(mdef, dx, dy);
         newsym(dx, dy);
-    } else { /* both alive, put them back */
+    } else {                           /* both alive, put them back */
         if (cansee(dx, dy))
+/*JP
             pline("%s is regurgitated!", Monnam(mdef));
+*/
+            pline("%s\82Í\93f\82«\96ß\82³\82ê\82½\81I", Monnam(mdef));
 
+        remove_monster(dx,dy);
         place_monster(magr, ax, ay);
         place_monster(mdef, dx, dy);
         newsym(ax, ay);
@@ -702,7 +891,10 @@ struct attack *mattk;
         return MM_MISS;
 
     if (cansee(magr->mx, magr->my))
+/*JP
         pline("%s explodes!", Monnam(magr));
+*/
+        pline("%s\82Í\94\9a\94­\82µ\82½\81I", Monnam(magr));
     else
         noises(magr, mattk);
 
@@ -716,7 +908,10 @@ struct attack *mattk;
         result |= MM_AGR_DIED;
     }
     if (magr->mtame) /* give this one even if it was visible */
+/*JP
         You(brief_feeling, "melancholy");
+*/
+        You(brief_feeling, "\97J\82¤\82Â\82È");
 
     return result;
 }
@@ -752,13 +947,19 @@ register struct attack *mattk;
                 mon_to_stone(magr);
                 return MM_HIT; /* no damage during the polymorph */
             }
-            if (vis)
+            if (vis && canspotmon(magr))
+/*JP
                 pline("%s turns to stone!", Monnam(magr));
+*/
+                pline("%s\82Í\90Î\82É\82È\82Á\82½\81I", Monnam(magr));
             monstone(magr);
             if (magr->mhp > 0)
                 return MM_HIT; /* lifesaved */
             else if (magr->mtame && !vis)
+/*JP
                 You(brief_feeling, "peculiarly sad");
+*/
+                You(brief_feeling, "\82à\82Ì\94ß\82µ\82¢");
             return MM_AGR_DIED;
         }
     }
@@ -771,22 +972,37 @@ register struct attack *mattk;
     case AD_DGST:
         /* eating a Rider or its corpse is fatal */
         if (is_rider(pd)) {
-            if (vis)
+            if (vis && canseemon(magr))
+#if 0 /*JP:T*/
                 pline("%s %s!", Monnam(magr),
                       (pd == &mons[PM_FAMINE])
                           ? "belches feebly, shrivels up and dies"
                           : (pd == &mons[PM_PESTILENCE])
                                 ? "coughs spasmodically and collapses"
                                 : "vomits violently and drops dead");
+#else
+                pline("%s%s\81I", Monnam(magr),
+                      (pd == &mons[PM_FAMINE])
+                          ? "\8eã\81X\82µ\82­\93f\82«\82à\82Ç\82µ\82½\82©\82Æ\8ev\82¤\82Æ\81C\91Ì\82ª\82µ\82Ú\82Ý\8e\80\82ñ\82Å\82µ\82Ü\82Á\82½"
+                          : (pd == &mons[PM_PESTILENCE])
+                                ? "áz\9d¹\82µ\82½\82æ\82¤\82É\82¹\82«\82±\82Ý\93|\82ê\82½"
+                                : "\8c\83\82µ\82­\9aq\93f\82µ\8e\80\82ñ\82¾");
+#endif
             mondied(magr);
             if (magr->mhp > 0)
                 return 0; /* lifesaved */
             else if (magr->mtame && !vis)
+/*JP
                 You(brief_feeling, "queasy");
+*/
+                You(brief_feeling, "\95s\88À\82È");
             return MM_AGR_DIED;
         }
         if (flags.verbose && !Deaf)
+/*JP
             verbalize("Burrrrp!");
+*/
+            verbalize("\82°\82Á\82Õ\81I");
         tmp = mdef->mhp;
         /* Use up amulet of life saving */
         if (!!(obj = mlifesaver(mdef)))
@@ -822,8 +1038,13 @@ register struct attack *mattk;
         if (magr->mcan)
             break;
         if (canseemon(mdef))
+#if 0 /*JP*/
             pline("%s %s for a moment.", Monnam(mdef),
                   makeplural(stagger(pd, "stagger")));
+#else
+            pline("%s\82Í\82·\82±\82µ%s\81D", Monnam(mdef),
+                  jpast(stagger(pd, "\82æ\82ë\82ß\82­")));
+#endif
         mdef->mstun = 1;
         goto physical;
     case AD_LEGS:
@@ -840,10 +1061,17 @@ register struct attack *mattk;
             tmp = 0;
         } else if (mattk->aatyp == AT_WEAP) {
             if (otmp) {
+                struct obj *marmg;
+
                 if (otmp->otyp == CORPSE
                     && touch_petrifies(&mons[otmp->corpsenm]))
                     goto do_stone;
                 tmp += dmgval(otmp, mdef);
+                if ((marmg = which_armor(magr, W_ARMG)) != 0
+                    && marmg->otyp == GAUNTLETS_OF_POWER)
+                    tmp += rn1(4, 3); /* 3..6 */
+                if (tmp < 1) /* is this necessary?  mhitu.c has it... */
+                    tmp = 1;
                 if (otmp->oartifact) {
                     (void) artifact_hit(magr, mdef, otmp, &tmp, dieroll);
                     if (mdef->mhp <= 0)
@@ -867,23 +1095,35 @@ register struct attack *mattk;
             tmp = 0;
             break;
         }
-        if (vis)
+        if (vis && canseemon(mdef))
+/*JP
             pline("%s is %s!", Monnam(mdef), on_fire(pd, mattk));
-        if (pd == &mons[PM_STRAW_GOLEM] || pd == &mons[PM_PAPER_GOLEM]) {
-            if (vis)
+*/
+            pline("%s\82Í%s\81I", Monnam(mdef), on_fire(pd, mattk));
+        if (completelyburns(pd)) { /* paper golem or straw golem */
+            if (vis && canseemon(mdef))
+/*JP
                 pline("%s burns completely!", Monnam(mdef));
-            mondied(mdef);
+*/
+                pline("%s\82Í\8aD\82É\82È\82Á\82½\81I", Monnam(mdef));
+            mondead(mdef); /* was mondied() but that dropped paper scrolls */
             if (mdef->mhp > 0)
                 return 0;
             else if (mdef->mtame && !vis)
+/*JP
                 pline("May %s roast in peace.", mon_nam(mdef));
+*/
+                pline("%s\82æ\81C\88À\82ç\82©\82É\94R\82¦\82ñ\8e\96\82ð\81D", mon_nam(mdef));
             return (MM_DEF_DIED | (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
         }
         tmp += destroy_mitem(mdef, SCROLL_CLASS, AD_FIRE);
         tmp += destroy_mitem(mdef, SPBOOK_CLASS, AD_FIRE);
         if (resists_fire(mdef)) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline_The("fire doesn't seem to burn %s!", mon_nam(mdef));
+*/
+                pline("%s\82Í\89\8a\82Å\94R\82¦\82È\82¢\82æ\82¤\82¾\81I", mon_nam(mdef));
             shieldeff(mdef->mx, mdef->my);
             golemeffects(mdef, AD_FIRE, tmp);
             tmp = 0;
@@ -896,11 +1136,17 @@ register struct attack *mattk;
             tmp = 0;
             break;
         }
-        if (vis)
+        if (vis && canseemon(mdef))
+/*JP
             pline("%s is covered in frost!", Monnam(mdef));
+*/
+            pline("%s\82Í\95X\82Å\95¢\82í\82ê\82½\81I", Monnam(mdef));
         if (resists_cold(mdef)) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline_The("frost doesn't seem to chill %s!", mon_nam(mdef));
+*/
+                pline("\95X\82Í%s\82ð\93\80\82ç\82¹\82é\82±\82Æ\82ª\82Å\82«\82È\82¢\82æ\82¤\82¾\81I", mon_nam(mdef));
             shieldeff(mdef->mx, mdef->my);
             golemeffects(mdef, AD_COLD, tmp);
             tmp = 0;
@@ -912,12 +1158,18 @@ register struct attack *mattk;
             tmp = 0;
             break;
         }
-        if (vis)
+        if (vis && canseemon(mdef))
+/*JP
             pline("%s gets zapped!", Monnam(mdef));
+*/
+            pline("%s\82Í\8fÕ\8c\82\82ð\82­\82ç\82Á\82½\81I", Monnam(mdef));
         tmp += destroy_mitem(mdef, WAND_CLASS, AD_ELEC);
         if (resists_elec(mdef)) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline_The("zap doesn't shock %s!", mon_nam(mdef));
+*/
+                pline("\8fÕ\8c\82\82Í%s\82É\89e\8b¿\82ð\97^\82¦\82È\82¢\81I", mon_nam(mdef));
             shieldeff(mdef->mx, mdef->my);
             golemeffects(mdef, AD_ELEC, tmp);
             tmp = 0;
@@ -931,13 +1183,24 @@ register struct attack *mattk;
             break;
         }
         if (resists_acid(mdef)) {
-            if (vis)
-                pline("%s is covered in acid, but it seems harmless.",
-                      Monnam(mdef));
+            if (vis && canseemon(mdef))
+#if 0 /*JP*/
+                pline("%s is covered in %s, but it seems harmless.",
+                      Monnam(mdef), hliquid("acid"));
+#else
+                pline("%s\82Í%s\82É\82Â\82Â\82Ü\82ê\82½\81D\82µ\82©\82µ\82È\82ñ\82Æ\82à\82È\82¢\82æ\82¤\82¾\81D",
+                      Monnam(mdef), hliquid("\8e_"));
+#endif
             tmp = 0;
-        } else if (vis) {
-            pline("%s is covered in acid!", Monnam(mdef));
+        } else if (vis && canseemon(mdef)) {
+/*JP
+            pline("%s is covered in %s!", Monnam(mdef), hliquid("acid"));
+*/
+            pline("%s\82Í%s\82É\82Â\82Â\82Ü\82ê\82½\81I", Monnam(mdef), hliquid("\8e_"));
+/*JP
             pline("It burns %s!", mon_nam(mdef));
+*/
+            pline("%s\82Í\8fÄ\82©\82ê\82½\81I", mon_nam(mdef));
         }
         if (!rn2(30))
             erode_armor(mdef, ERODE_CORRODE);
@@ -948,13 +1211,19 @@ register struct attack *mattk;
         if (magr->mcan)
             break;
         if (pd == &mons[PM_IRON_GOLEM]) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline("%s falls to pieces!", Monnam(mdef));
+*/
+                pline("%s\82Í\83o\83\89\83o\83\89\82É\82È\82Á\82½\81I", Monnam(mdef));
             mondied(mdef);
             if (mdef->mhp > 0)
                 return 0;
             else if (mdef->mtame && !vis)
+/*JP
                 pline("May %s rust in peace.", mon_nam(mdef));
+*/
+                pline("%s\82æ\81C\88À\82ç\82©\82É\8eK\82Ñ\82ñ\8e\96\82ð\81D", mon_nam(mdef));
             return (MM_DEF_DIED | (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
         }
         erode_armor(mdef, ERODE_RUST);
@@ -972,13 +1241,19 @@ register struct attack *mattk;
         if (magr->mcan)
             break;
         if (pd == &mons[PM_WOOD_GOLEM] || pd == &mons[PM_LEATHER_GOLEM]) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline("%s falls to pieces!", Monnam(mdef));
+*/
+                pline("%s\82Í\83o\83\89\83o\83\89\82É\82È\82Á\82½\81I", Monnam(mdef));
             mondied(mdef);
             if (mdef->mhp > 0)
                 return 0;
             else if (mdef->mtame && !vis)
+/*JP
                 pline("May %s rot in peace.", mon_nam(mdef));
+*/
+                pline("%s\82æ\81C\88À\82ç\82©\82É\95\85\82ç\82ñ\8e\96\82ð\81D", mon_nam(mdef));
             return (MM_DEF_DIED | (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
         }
         erode_armor(mdef, ERODE_CORRODE);
@@ -998,14 +1273,20 @@ register struct attack *mattk;
             break;
         }
         if (!resists_ston(mdef)) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline("%s turns to stone!", Monnam(mdef));
+*/
+                pline("%s\82Í\90Î\82É\82È\82Á\82½\81I", Monnam(mdef));
             monstone(mdef);
         post_stone:
             if (mdef->mhp > 0)
                 return 0;
             else if (mdef->mtame && !vis)
+/*JP
                 You(brief_feeling, "peculiarly sad");
+*/
+                You(brief_feeling, "\82à\82Ì\94ß\82µ\82¢");
             return (MM_DEF_DIED | (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
         }
         tmp = (mattk->adtyp == AD_STON ? 0 : 1);
@@ -1013,22 +1294,29 @@ register struct attack *mattk;
     case AD_TLPT:
         if (!cancelled && tmp < mdef->mhp && !tele_restrict(mdef)) {
             char mdef_Monnam[BUFSZ];
+            boolean wasseen = canspotmon(mdef);
             /* save the name before monster teleports, otherwise
                we'll get "it" in the suddenly disappears message */
-            if (vis)
+            if (vis && wasseen)
                 Strcpy(mdef_Monnam, Monnam(mdef));
             mdef->mstrategy &= ~STRAT_WAITFORU;
             (void) rloc(mdef, TRUE);
-            if (vis && !canspotmon(mdef) && mdef != u.usteed)
+            if (vis && wasseen && !canspotmon(mdef) && mdef != u.usteed)
+/*JP
                 pline("%s suddenly disappears!", mdef_Monnam);
+*/
+                pline("%s\82Í\93Ë\91R\8fÁ\82¦\82½\81I", mdef_Monnam);
         }
         break;
     case AD_SLEE:
         if (!cancelled && !mdef->msleeping
             && sleep_monst(mdef, rnd(10), -1)) {
-            if (vis) {
+            if (vis && canspotmon(mdef)) {
                 Strcpy(buf, Monnam(mdef));
+/*JP
                 pline("%s is put to sleep by %s.", buf, mon_nam(magr));
+*/
+                pline("%s\82Í%s\82É\82æ\82Á\82Ä\96°\82ç\82³\82ê\82½\81D", buf, mon_nam(magr));
             }
             mdef->mstrategy &= ~STRAT_WAITFORU;
             slept_monst(mdef);
@@ -1036,9 +1324,12 @@ register struct attack *mattk;
         break;
     case AD_PLYS:
         if (!cancelled && mdef->mcanmove) {
-            if (vis) {
+            if (vis && canspotmon(mdef)) {
                 Strcpy(buf, Monnam(mdef));
+/*JP
                 pline("%s is frozen by %s.", buf, mon_nam(magr));
+*/
+                pline("%s\82Í%s\82É\82æ\82Á\82Ä\93®\82¯\82È\82­\82È\82Á\82½\81D", buf, mon_nam(magr));
             }
             paralyze_monst(mdef, rnd(10));
         }
@@ -1049,8 +1340,11 @@ register struct attack *mattk;
 
             mon_adjust_speed(mdef, -1, (struct obj *) 0);
             mdef->mstrategy &= ~STRAT_WAITFORU;
-            if (mdef->mspeed != oldspeed && vis)
+            if (mdef->mspeed != oldspeed && vis && canspotmon(mdef))
+/*JP
                 pline("%s slows down.", Monnam(mdef));
+*/
+                pline("%s\82Í\93®\8dì\82ª\82Ì\82ë\82­\82È\82Á\82½\81D", Monnam(mdef));
         }
         break;
     case AD_CONF:
@@ -1059,8 +1353,11 @@ register struct attack *mattk;
          * we still should check for it).
          */
         if (!magr->mcan && !mdef->mconf && !magr->mspec_used) {
-            if (vis)
+            if (vis && canseemon(mdef))
+/*JP
                 pline("%s looks confused.", Monnam(mdef));
+*/
+                pline("%s\82Í\8d¬\97\90\82µ\82Ä\82¢\82é\82æ\82¤\82É\8c©\82¦\82é\81D", Monnam(mdef));
             mdef->mconf = 1;
             mdef->mstrategy &= ~STRAT_WAITFORU;
         }
@@ -1069,8 +1366,11 @@ register struct attack *mattk;
         if (can_blnd(magr, mdef, mattk->aatyp, (struct obj *) 0)) {
             register unsigned rnd_tmp;
 
-            if (vis && mdef->mcansee)
+            if (vis && mdef->mcansee && canspotmon(mdef))
+/*JP
                 pline("%s is blinded.", Monnam(mdef));
+*/
+                pline("%s\82Í\96Ú\82ª\8c©\82¦\82È\82­\82È\82Á\82½\81D", Monnam(mdef));
             rnd_tmp = d((int) mattk->damn, (int) mattk->damd);
             if ((rnd_tmp += mdef->mblinded) > 127)
                 rnd_tmp = 127;
@@ -1082,9 +1382,14 @@ register struct attack *mattk;
         break;
     case AD_HALU:
         if (!magr->mcan && haseyes(pd) && mdef->mcansee) {
-            if (vis)
+            if (vis && canseemon(mdef))
+#if 0 /*JP:T*/
                 pline("%s looks %sconfused.", Monnam(mdef),
                       mdef->mconf ? "more " : "");
+#else
+                pline("%s\82Í%s\8d¬\97\90\82µ\82Ä\82¢\82é\82æ\82¤\82É\8c©\82¦\82é\81D", Monnam(mdef),
+                      mdef->mconf ? "\82Ü\82·\82Ü\82·" : "");
+#endif
             mdef->mconf = 1;
             mdef->mstrategy &= ~STRAT_WAITFORU;
         }
@@ -1099,24 +1404,41 @@ register struct attack *mattk;
             if (is_were(pd) && pd->mlet != S_HUMAN)
                 were_change(mdef);
             if (pd == &mons[PM_CLAY_GOLEM]) {
-                if (vis) {
+                if (vis && canseemon(mdef)) {
+#if 0 /*JP*/
                     pline("Some writing vanishes from %s head!",
                           s_suffix(mon_nam(mdef)));
+#else
+                    pline("\82¢\82­\82Â\82©\82Ì\95\8e\9a\82ª%s\82Ì\93ª\82©\82ç\8fÁ\82¦\82½\81I",
+                          mon_nam(mdef));
+#endif
+/*JP
                     pline("%s is destroyed!", Monnam(mdef));
+*/
+                    pline("%s\82Í\94j\89ó\82³\82ê\82½\81I", Monnam(mdef));
                 }
                 mondied(mdef);
                 if (mdef->mhp > 0)
                     return 0;
                 else if (mdef->mtame && !vis)
+/*JP
                     You(brief_feeling, "strangely sad");
+*/
+                    You(brief_feeling, "\96­\82É\94ß\82µ\82¢");
                 return (MM_DEF_DIED
                         | (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
             }
             if (!Deaf) {
                 if (!vis)
+/*JP
                     You_hear("laughter.");
-                else
+*/
+                    You_hear("\8fÎ\82¢\90º\82ð\95·\82¢\82½\81D");
+                else if (canseemon(magr))
+/*JP
                     pline("%s chuckles.", Monnam(magr));
+*/
+                    pline("%s\82Í\82­\82·\82­\82·\8fÎ\82Á\82½\81D", Monnam(magr));
             }
         }
         break;
@@ -1129,27 +1451,38 @@ register struct attack *mattk;
          */
         {
             struct obj *gold = findgold(mdef->minvent);
+
             if (!gold)
                 break;
             obj_extract_self(gold);
             add_to_minv(magr, gold);
         }
         mdef->mstrategy &= ~STRAT_WAITFORU;
-        if (vis) {
+        if (vis && canseemon(mdef)) {
             Strcpy(buf, Monnam(magr));
+/*JP
             pline("%s steals some gold from %s.", buf, mon_nam(mdef));
+*/
+            pline("%s\82Í%s\82©\82ç\8bà\82ð\93\90\82ñ\82¾\81D", buf, mon_nam(mdef));
         }
         if (!tele_restrict(magr)) {
+            boolean couldspot = canspotmon(magr);
             (void) rloc(magr, TRUE);
-            if (vis && !canspotmon(magr))
+            if (vis && couldspot && !canspotmon(magr))
+/*JP
                 pline("%s suddenly disappears!", buf);
+*/
+                pline("%s\82Í\93Ë\91R\8fÁ\82¦\82½\81I", buf);
         }
         break;
     case AD_DRLI:
         if (!cancelled && !rn2(3) && !resists_drli(mdef)) {
             tmp = d(2, 6);
-            if (vis)
+            if (vis && canspotmon(mdef))
+/*JP
                 pline("%s suddenly seems weaker!", Monnam(mdef));
+*/
+                pline("%s\82Í\93Ë\91R\8eã\82­\82È\82Á\82½\82æ\82¤\82É\8c©\82¦\82½\81I", Monnam(mdef));
             mdef->mhpmax -= tmp;
             if (mdef->m_lev == 0)
                 tmp = mdef->mhp;
@@ -1192,9 +1525,12 @@ register struct attack *mattk;
             if (vis)
                 Strcpy(onambuf, doname(otmp));
             (void) add_to_minv(magr, otmp);
-            if (vis) {
+            if (vis && canseemon(mdef)) {
                 Strcpy(buf, Monnam(magr));
+/*JP
                 pline("%s steals %s from %s!", buf, onambuf, mdefnambuf);
+*/
+                pline("%s\82Í%s\82©\82ç%s\82ð\93\90\82ñ\82¾\81I", buf, mdefnambuf, onambuf);
             }
             possibly_unwield(mdef, FALSE);
             mdef->mstrategy &= ~STRAT_WAITFORU;
@@ -1203,35 +1539,52 @@ register struct attack *mattk;
                 return (MM_DEF_DIED
                         | (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
             if (pa->mlet == S_NYMPH && !tele_restrict(magr)) {
+                boolean couldspot = canspotmon(magr);
+
                 (void) rloc(magr, TRUE);
-                if (vis && !canspotmon(magr))
+                if (vis && couldspot && !canspotmon(magr))
+/*JP
                     pline("%s suddenly disappears!", buf);
+*/
+                    pline("%s\82Í\93Ë\91R\8fÁ\82¦\82½\81I", buf);
             }
         }
         tmp = 0;
         break;
     case AD_DREN:
         if (!cancelled && !rn2(4))
-            xdrainenergym(mdef, vis && mattk->aatyp != AT_ENGL);
+            xdrainenergym(mdef, (boolean) (vis && canspotmon(mdef)
+                                           && mattk->aatyp != AT_ENGL));
         tmp = 0;
         break;
     case AD_DRST:
     case AD_DRDX:
     case AD_DRCO:
         if (!cancelled && !rn2(8)) {
-            if (vis)
+            if (vis && canspotmon(magr))
+#if 0 /*JP:T*/
                 pline("%s %s was poisoned!", s_suffix(Monnam(magr)),
                       mpoisons_subj(magr, mattk));
+#else
+                pline("%s\82Ì%s\82Í\93Å\82³\82ê\82Ä\82¢\82é\81I", Monnam(magr),
+                      mpoisons_subj(magr, mattk));
+#endif
             if (resists_poison(mdef)) {
-                if (vis)
+                if (vis && canspotmon(mdef) && canspotmon(magr))
+/*JP
                     pline_The("poison doesn't seem to affect %s.",
+*/
+                    pline("%s\82Í\93Å\82Ì\89e\8b¿\82ð\8eó\82¯\82È\82¢\81D",
                               mon_nam(mdef));
             } else {
                 if (rn2(10))
                     tmp += rn1(10, 6);
                 else {
-                    if (vis)
+                    if (vis && canspotmon(mdef))
+/*JP
                         pline_The("poison was deadly...");
+*/
+                        pline("\93Å\82Í\92v\8e\80\97Ê\82¾\82Á\82½\81D\81D\81D");
                     tmp = mdef->mhp;
                 }
             }
@@ -1239,17 +1592,25 @@ register struct attack *mattk;
         break;
     case AD_DRIN:
         if (notonhead || !has_head(pd)) {
-            if (vis)
+            if (vis && canspotmon(mdef))
+/*JP
                 pline("%s doesn't seem harmed.", Monnam(mdef));
+*/
+                pline("%s\82Í\8f\9d\82Â\82¢\82½\82æ\82¤\82É\82Í\8c©\82¦\82È\82¢\81D", Monnam(mdef));
             /* Not clear what to do for green slimes */
             tmp = 0;
             break;
         }
         if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
-            if (vis) {
+            if (vis && canspotmon(magr) && canseemon(mdef)) {
                 Strcpy(buf, s_suffix(Monnam(mdef)));
+#if 0 /*JP*/
                 pline("%s helmet blocks %s attack to %s head.", buf,
                       s_suffix(mon_nam(magr)), mhis(mdef));
+#else
+                pline("%s\82Ì\8a\95\82Í%s\82Ì\93ª\82Ö\82Ì\8dU\8c\82\82ð\96h\82¢\82¾\81D", buf,
+                      mon_nam(magr));
+#endif
             }
             break;
         }
@@ -1260,7 +1621,7 @@ register struct attack *mattk;
             break; /* physical damage only */
         if (!rn2(4) && !slimeproof(pd)) {
             if (!munslime(mdef, FALSE) && mdef->mhp > 0) {
-                if (newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, vis))
+                if (newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, vis && canseemon(mdef)))
                     pd = mdef->data;
                 mdef->mstrategy &= ~STRAT_WAITFORU;
                 res = MM_HIT;
@@ -1372,7 +1733,10 @@ struct monst *mon;
 {
     if ((mon->msleeping || !mon->mcanmove) && mon == u.ustuck
         && !sticks(youmonst.data) && !u.uswallow) {
+/*JP
         pline("%s grip relaxes.", s_suffix(Monnam(mon)));
+*/
+        pline("%s\82Ì\88¬\82é\97Í\82ª\8eã\82­\82È\82Á\82½\81D", Monnam(mon));
         unstuck(mon);
     }
 }
@@ -1382,20 +1746,24 @@ rustm(mdef, obj)
 struct monst *mdef;
 struct obj *obj;
 {
-    int dmgtyp;
+    int dmgtyp = -1, chance = 1;
 
     if (!mdef || !obj)
         return; /* just in case */
-    /* AD_ACID is handled in passivemm */
-    if (dmgtype(mdef->data, AD_CORR))
+    /* AD_ACID and AD_ENCH are handled in passivemm() and passiveum() */
+    if (dmgtype(mdef->data, AD_CORR)) {
         dmgtyp = ERODE_CORRODE;
-    else if (dmgtype(mdef->data, AD_RUST))
+    } else if (dmgtype(mdef->data, AD_RUST)) {
         dmgtyp = ERODE_RUST;
-    else if (dmgtype(mdef->data, AD_FIRE))
+    } else if (dmgtype(mdef->data, AD_FIRE)
+               /* steam vortex: fire resist applies, fire damage doesn't */
+               && mdef->data != &mons[PM_STEAM_VORTEX]) {
         dmgtyp = ERODE_BURN;
-    else
-        return;
-    (void) erode_obj(obj, NULL, dmgtyp, EF_GREASE | EF_VERBOSE);
+        chance = 6;
+    }
+
+    if (dmgtyp >= 0 && !rn2(chance))
+        (void) erode_obj(obj, (char *) 0, dmgtyp, EF_GREASE | EF_VERBOSE);
 }
 
 STATIC_OVL void
@@ -1404,10 +1772,17 @@ struct monst *magr, *mdef;
 struct obj *otemp;
 {
     if (flags.verbose && !Blind && mon_visible(magr)) {
+#if 0 /*JP*/
         pline("%s %s %s%s %s at %s.", Monnam(magr),
               (objects[otemp->otyp].oc_dir & PIERCE) ? "thrusts" : "swings",
               (otemp->quan > 1L) ? "one of " : "", mhis(magr), xname(otemp),
               mon_nam(mdef));
+#else
+        pline((objects[otemp->otyp].oc_dir & PIERCE) ?
+              "%s\82Í%s\82Å%s\82ð\93Ë\82¢\82½\81D" :
+              "%s\82Í%s\82ð\90U\82è\82Ü\82í\82µ%s\82ð\8dU\8c\82\82µ\82½\81D", Monnam(magr),
+              xname(otemp), mon_nam(mdef));
+#endif
     }
 }
 
@@ -1445,11 +1820,19 @@ int mdead;
         if (mhit && !rn2(2)) {
             Strcpy(buf, Monnam(magr));
             if (canseemon(magr))
-                pline("%s is splashed by %s acid!", buf,
-                      s_suffix(mon_nam(mdef)));
+#if 0 /*JP:T*/
+                pline("%s is splashed by %s %s!", buf,
+                      s_suffix(mon_nam(mdef)), hliquid("acid"));
+#else
+                pline("%s\82Í%s\82Ì%s\82ð\97\81\82Ñ\82½\81I", buf,
+                      mon_nam(mdef), hliquid("\8e_"));
+#endif
             if (resists_acid(magr)) {
                 if (canseemon(magr))
+/*JP
                     pline("%s is not affected.", Monnam(magr));
+*/
+                    pline("%s\82Í\89e\8b¿\82ð\8eó\82¯\82È\82¢\81D", Monnam(magr));
                 tmp = 0;
             }
         } else
@@ -1461,7 +1844,7 @@ int mdead;
         goto assess_dmg;
     case AD_ENCH: /* KMH -- remove enchantment (disenchanter) */
         if (mhit && !mdef->mcan && otmp) {
-            (void) drain_item(otmp);
+            (void) drain_item(otmp, FALSE);
             /* No message */
         }
         break;
@@ -1482,22 +1865,39 @@ int mdead;
                     tmp = 127;
                 if (magr->mcansee && haseyes(madat) && mdef->mcansee
                     && (perceives(madat) || !mdef->minvis)) {
-                    Sprintf(buf, "%s gaze is reflected by %%s %%s.",
-                            s_suffix(Monnam(mdef)));
+                    /* construct format string; guard against '%' in Monnam */
+#if 0 /*JP*/
+                    Strcpy(buf, s_suffix(Monnam(mdef)));
+#else
+                    Strcpy(buf, Monnam(mdef));
+#endif
+                    (void) strNsubst(buf, "%", "%%", 0);
+/*JP
+                    Strcat(buf, " gaze is reflected by %s %s.");
+*/
+                    Strcat(buf, "\82Ì\82É\82ç\82Ý\82Í%s\82É\82æ\82Á\82Ä%s\81D");
                     if (mon_reflects(magr,
                                      canseemon(magr) ? buf : (char *) 0))
                         return (mdead | mhit);
                     Strcpy(buf, Monnam(magr));
                     if (canseemon(magr))
+#if 0 /*JP*/
                         pline("%s is frozen by %s gaze!", buf,
                               s_suffix(mon_nam(mdef)));
+#else
+                        pline("%s\82Í%s\82Ì\82É\82ç\82Ý\82Å\93®\82¯\82È\82­\82È\82Á\82½\81I", buf,
+                              mon_nam(mdef));
+#endif
                     paralyze_monst(magr, tmp);
                     return (mdead | mhit);
                 }
             } else { /* gelatinous cube */
                 Strcpy(buf, Monnam(magr));
                 if (canseemon(magr))
+/*JP
                     pline("%s is frozen by %s.", buf, mon_nam(mdef));
+*/
+                    pline("%s\82Í%s\82É\82æ\82Á\82Ä\93®\82¯\82È\82­\82È\82Á\82½\81D", buf, mon_nam(mdef));
                 paralyze_monst(magr, tmp);
                 return (mdead | mhit);
             }
@@ -1505,14 +1905,20 @@ int mdead;
         case AD_COLD:
             if (resists_cold(magr)) {
                 if (canseemon(magr)) {
+/*JP
                     pline("%s is mildly chilly.", Monnam(magr));
+*/
+                    pline("%s\82Í\97â\82¦\82½\81D", Monnam(magr));
                     golemeffects(magr, AD_COLD, tmp);
                 }
                 tmp = 0;
                 break;
             }
             if (canseemon(magr))
+/*JP
                 pline("%s is suddenly very cold!", Monnam(magr));
+*/
+                pline("%s\82Í\93Ë\91R\93\80\82è\82Ã\82¯\82É\82È\82Á\82½\81I", Monnam(magr));
             mdef->mhp += tmp / 2;
             if (mdef->mhpmax < mdef->mhp)
                 mdef->mhpmax = mdef->mhp;
@@ -1523,34 +1929,51 @@ int mdead;
             if (!magr->mstun) {
                 magr->mstun = 1;
                 if (canseemon(magr))
+#if 0 /*JP*/
                     pline("%s %s...", Monnam(magr),
                           makeplural(stagger(magr->data, "stagger")));
+#else
+                    pline("%s\82Í%s\81D\81D\81D", Monnam(magr),
+                          jpast(stagger(magr->data, "\82æ\82ë\82ß\82­")));
+#endif
             }
             tmp = 0;
             break;
         case AD_FIRE:
             if (resists_fire(magr)) {
                 if (canseemon(magr)) {
+/*JP
                     pline("%s is mildly warmed.", Monnam(magr));
+*/
+                    pline("%s\82Í\92g\82©\82­\82È\82Á\82½\81D", Monnam(magr));
                     golemeffects(magr, AD_FIRE, tmp);
                 }
                 tmp = 0;
                 break;
             }
             if (canseemon(magr))
+/*JP
                 pline("%s is suddenly very hot!", Monnam(magr));
+*/
+                pline("%s\82Í\93Ë\91R\82Æ\82Ä\82à\94M\82­\82È\82Á\82½\81I", Monnam(magr));
             break;
         case AD_ELEC:
             if (resists_elec(magr)) {
                 if (canseemon(magr)) {
+/*JP
                     pline("%s is mildly tingled.", Monnam(magr));
+*/
+                    pline("%s\82Í\83s\83\8a\83s\83\8a\82µ\82Ä\82¢\82é\81D", Monnam(magr));
                     golemeffects(magr, AD_ELEC, tmp);
                 }
                 tmp = 0;
                 break;
             }
             if (canseemon(magr))
+/*JP
                 pline("%s is jolted with electricity!", Monnam(magr));
+*/
+                pline("%s\82Í\93d\8bC\83V\83\87\83b\83N\82ð\82¤\82¯\82½\81I", Monnam(magr));
             break;
         default:
             tmp = 0;
@@ -1578,7 +2001,10 @@ boolean givemsg;
             || attacktype(mon->data, AT_BREA))) {
         mon->mspec_used += d(2, 2);
         if (givemsg)
+/*JP
             pline("%s seems lethargic.", Monnam(mon));
+*/
+            pline("%s\82Í\96³\8bC\97Í\82É\82È\82Á\82½\82æ\82¤\82¾\81D", Monnam(mon));
     }
 }