]> granicus.if.org Git - nethack/commitdiff
Unify finding room pos for some features
authorPasi Kallinen <paxed@alt.org>
Sat, 8 Feb 2020 17:47:36 +0000 (19:47 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 8 Feb 2020 17:47:36 +0000 (19:47 +0200)
src/mklev.c

index d91563701ca96da9f0e3a54d119d645cb317d4c8..505a8996862870cb9577187654d677543b809f57 100644 (file)
@@ -10,6 +10,7 @@
 /* conversion of result to int is reasonable */
 
 static void FDECL(mkfount, (int, struct mkroom *));
+static boolean FDECL(find_okay_roompos, (struct mkroom *, coord *));
 static void FDECL(mksink, (struct mkroom *));
 static void FDECL(mkaltar, (struct mkroom *));
 static void FDECL(mkgrave, (struct mkroom *));
@@ -1604,19 +1605,30 @@ struct mkroom *croom;
     g.level.flags.nfountains++;
 }
 
+static boolean
+find_okay_roompos(croom, crd)
+struct mkroom *croom;
+coord *crd;
+{
+    int tryct = 0;
+
+    do {
+        if (++tryct > 200)
+            return FALSE;
+        if (!somexy(croom, crd))
+            return FALSE;
+    } while (occupied(crd->x, crd->y) || bydoor(crd->x, crd->y));
+    return TRUE;
+}
+
 static void
 mksink(croom)
 struct mkroom *croom;
 {
     coord m;
-    register int tryct = 0;
 
-    do {
-        if (++tryct > 200)
-            return;
-        if (!somexy(croom, &m))
-            return;
-    } while (occupied(m.x, m.y) || bydoor(m.x, m.y));
+    if (!find_okay_roompos(croom, &m))
+        return;
 
     /* Put a sink at m.x, m.y */
     levl[m.x][m.y].typ = SINK;
@@ -1629,18 +1641,13 @@ mkaltar(croom)
 struct mkroom *croom;
 {
     coord m;
-    register int tryct = 0;
     aligntyp al;
 
     if (croom->rtype != OROOM)
         return;
 
-    do {
-        if (++tryct > 200)
-            return;
-        if (!somexy(croom, &m))
-            return;
-    } while (occupied(m.x, m.y) || bydoor(m.x, m.y));
+    if (!find_okay_roompos(croom, &m))
+        return;
 
     /* Put an altar at m.x, m.y */
     levl[m.x][m.y].typ = ALTAR;
@@ -1662,12 +1669,8 @@ struct mkroom *croom;
     if (croom->rtype != OROOM)
         return;
 
-    do {
-        if (++tryct > 200)
-            return;
-        if (!somexy(croom, &m))
-            return;
-    } while (occupied(m.x, m.y) || bydoor(m.x, m.y));
+    if (!find_okay_roompos(croom, &m))
+        return;
 
     /* Put a grave at <m.x,m.y> */
     make_grave(m.x, m.y, dobell ? "Saved by the bell!" : (char *) 0);