]> granicus.if.org Git - nethack/commitdiff
Unify revealing hiding monsters for mvm attacks
authorPasi Kallinen <paxed@alt.org>
Sat, 8 Feb 2020 21:38:06 +0000 (23:38 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 8 Feb 2020 21:41:36 +0000 (23:41 +0200)
Whether the monster-vs-monster hits or misses, hiders
are revealed the same way. Unify that part of the code.

Use git show --patience to have a better view of the changes.

src/mhitm.c

index ba19dc957506d4e86162ca753a022c93a461e07f..65f23c82a1c36d80f9d6ad570e2c7d57a3df128b 100644 (file)
@@ -22,6 +22,7 @@ static int FDECL(mdamagem, (struct monst *, struct monst *,
 static void FDECL(mswingsm, (struct monst *, struct monst *,
                                  struct obj *));
 static void FDECL(noises, (struct monst *, struct attack *));
+static void FDECL(pre_mm_attack, (struct monst *, struct monst *));
 static void FDECL(missmm, (struct monst *, struct monst *,
                                struct attack *));
 static int FDECL(passivemm, (struct monst *, struct monst *,
@@ -44,14 +45,10 @@ register struct attack *mattk;
     }
 }
 
-static
-void
-missmm(magr, mdef, mattk)
-register struct monst *magr, *mdef;
-struct attack *mattk;
+static void
+pre_mm_attack(magr, mdef)
+struct monst *magr, *mdef;
 {
-    const char *fmt;
-    char buf[BUFSZ];
     boolean showit = FALSE;
 
     /* unhiding or unmimicking happens even if hero can't see it
@@ -80,7 +77,21 @@ struct attack *mattk;
             map_invisible(mdef->mx, mdef->my);
         else if (showit)
             newsym(mdef->mx, mdef->my);
+    }
+}
+
+static
+void
+missmm(magr, mdef, mattk)
+register struct monst *magr, *mdef;
+struct attack *mattk;
+{
+    const char *fmt;
+    char buf[BUFSZ];
+
+    pre_mm_attack(magr, mdef);
 
+    if (g.vis) {
         fmt = (could_seduce(magr, mdef, mattk) && !magr->mcan)
                   ? "%s pretends to be friendly to"
                   : "%s misses";
@@ -530,39 +541,14 @@ struct attack *mattk;
     boolean weaponhit = ((mattk->aatyp == AT_WEAP
                           || (mattk->aatyp == AT_CLAW && g.otmp))),
             silverhit = (weaponhit && g.otmp
-                         && objects[g.otmp->otyp].oc_material == SILVER),
-            showit = FALSE;
+                         && objects[g.otmp->otyp].oc_material == SILVER);
 
-    /* unhiding or unmimicking happens even if hero can't see it
-       because the formerly concealed monster is now in action */
-    if (M_AP_TYPE(mdef)) {
-        seemimic(mdef);
-        showit |= g.vis;
-    } else if (mdef->mundetected) {
-        mdef->mundetected = 0;
-        showit |= g.vis;
-    }
-    if (M_AP_TYPE(magr)) {
-        seemimic(magr);
-        showit |= g.vis;
-    } else if (magr->mundetected) {
-        magr->mundetected = 0;
-        showit |= g.vis;
-    }
+    pre_mm_attack(magr, mdef);
 
     if (g.vis) {
         int compat;
         char buf[BUFSZ];
 
-        if (!canspotmon(magr))
-            map_invisible(magr->mx, magr->my);
-        else if (showit)
-            newsym(magr->mx, magr->my);
-        if (!canspotmon(mdef))
-            map_invisible(mdef->mx, mdef->my);
-        else if (showit)
-            newsym(mdef->mx, mdef->my);
-
         if ((compat = could_seduce(magr, mdef, mattk)) && !magr->mcan) {
             Sprintf(buf, "%s %s", Monnam(magr),
                     mdef->mcansee ? "smiles at" : "talks to");