]> granicus.if.org Git - nethack/commitdiff
fix github issue #38 - indentation vs `if {}'
authorPatR <rankin@nethack.org>
Fri, 19 Oct 2018 00:15:42 +0000 (17:15 -0700)
committerPatR <rankin@nethack.org>
Fri, 19 Oct 2018 00:15:42 +0000 (17:15 -0700)
Fixes #38

In 3.6.1, some code in mfind0(detect.c) was mis-indented in a way
which suggested that the grouping within braces might not be what was
intended, and that was right--there was a pair of braces missing when
compared with older versions of the code involved.  A previous patch
(post-#38) had changed the indentation to match the surrounding braces
without really addressing the issue.  But it turned out not to make
any difference either way since mundetected is only used by hiders
and eels.  This reorganizes the relevant code to make it simpler to
understand, I hope.

src/detect.c

index 945207c8868cc334dd235911762936e07db64868..80a98509689164230947a8a0fc2aa564941e4fca 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 detect.c        $NHDT-Date: 1522891623 2018/04/05 01:27:03 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.81 $ */
+/* NetHack 3.6 detect.c        $NHDT-Date: 1539908137 2018/10/19 00:15:37 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.83 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2018. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -1539,45 +1539,42 @@ mfind0(mtmp, via_warning)
 struct monst *mtmp;
 boolean via_warning;
 {
-    xchar x = mtmp->mx,
-          y = mtmp->my;
+    int x = mtmp->mx, y = mtmp->my;
+    boolean found_something = FALSE;
 
     if (via_warning && !warning_of(mtmp))
         return -1;
 
     if (mtmp->m_ap_type) {
         seemimic(mtmp);
-    find:
+        found_something = TRUE;
+    } else if (mtmp->mundetected
+               && (is_hider(mtmp->data) || mtmp->data->mlet == S_EEL)) {
+        if (via_warning) {
+            Your("warning senses cause you to take a second %s.",
+                 Blind ? "to check nearby" : "look close by");
+            display_nhwindow(WIN_MESSAGE, FALSE); /* flush messages */
+        }
+        mtmp->mundetected = 0;
+        newsym(x, y);
+        found_something = TRUE;
+    }
+
+    if (found_something) {
+        if (!canspotmon(mtmp) && glyph_is_invisible(levl[x][y].glyph))
+            return -1; /* Found invisible monster in square which already has
+                        * 'I' in it.  Logically, this should still take time
+                        * and lead to `return 1', but if we did that the hero
+                        * would keep finding the same monster every turn. */
         exercise(A_WIS, TRUE);
         if (!canspotmon(mtmp)) {
-            if (glyph_is_invisible(levl[x][y].glyph)) {
-                /* Found invisible monster in a square which already has
-                 * an 'I' in it.  Logically, this should still take time
-                 * and lead to a return 1, but if we did that the player
-                 * would keep finding the same monster every turn.
-                 */
-                return -1;
-            } else {
-                You_feel("an unseen monster!");
-                map_invisible(x, y);
-            }
-        } else if (!sensemon(mtmp))
-                You("find %s.",
-                    mtmp->mtame ? y_monnam(mtmp) : a_monnam(mtmp));
+            map_invisible(x, y);
+            You_feel("an unseen monster!");
+        } else if (!sensemon(mtmp)) {
+            You("find %s.", mtmp->mtame ? y_monnam(mtmp) : a_monnam(mtmp));
+        }
         return 1;
     }
-    if (!canspotmon(mtmp)) {
-        if (mtmp->mundetected
-            && (is_hider(mtmp->data) || mtmp->data->mlet == S_EEL))
-            if (via_warning) {
-                Your("warning senses cause you to take a second %s.",
-                     Blind ? "to check nearby" : "look close by");
-                display_nhwindow(WIN_MESSAGE, FALSE); /* flush messages */
-            }
-        mtmp->mundetected = 0;
-        newsym(x, y);
-        goto find;
-    }
     return 0;
 }