From c6a2803f49a08f6b20e691908dbf308640244f6f Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 4 Mar 2023 18:01:15 +0200 Subject: [PATCH] Better algo for picking a room to put stairs in --- src/mklev.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/mklev.c b/src/mklev.c index 503cdb43c..5efa37dbb 100644 --- a/src/mklev.c +++ b/src/mklev.c @@ -1734,27 +1734,27 @@ static struct mkroom * generate_stairs_find_room(void) { struct mkroom *croom; - int i, phase, tryct = 0; + int i, phase, ai; + int *rmarr; if (!gn.nroom) return (struct mkroom *) 0; - for (phase = 2; phase > -1; phase--) { - do { - croom = &gr.rooms[rn2(gn.nroom)]; - if (generate_stairs_room_good(croom, phase)) - return croom; - } while (tryct++ < 50); - } + rmarr = (int *) alloc(sizeof(int) * gn.nroom); - for (phase = 2; phase > -2; phase--) { - for (i = 0; i < gn.nroom; i++) { - croom = &gr.rooms[i]; - if (generate_stairs_room_good(croom, phase)) - return croom; + for (phase = 2; phase > -1; phase--) { + ai = 0; + for (i = 0; i < gn.nroom; i++) + if (generate_stairs_room_good(&gr.rooms[i], phase)) + rmarr[ai++] = i; + if (ai > 0) { + i = rmarr[rn2(ai)]; + free(rmarr); + return &gr.rooms[i]; } } + free(rmarr); croom = &gr.rooms[rn2(gn.nroom)]; return croom; }