From 1c0662ddd79e17239574745efa8060ecaccd928c Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 20 Jan 2024 16:18:06 +0200 Subject: [PATCH] Split setting up dungeon entry level --- src/dungeon.c | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src/dungeon.c b/src/dungeon.c index 8b7bc954d..0d7562ff0 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -51,6 +51,7 @@ static int get_dgn_flags(lua_State *); static int get_dgn_align(lua_State *); static void init_dungeon_levels(lua_State *, struct proto_dungeon *, int); static void init_dungeon_branches(lua_State *, struct proto_dungeon *, int); +static void init_dungeon_set_entry(struct proto_dungeon *, int); static boolean unplaced_floater(struct dungeon *); static boolean unreachable_level(d_level *, boolean); static void tport_menu(winid, char *, struct lchoice *, d_level *, boolean); @@ -924,6 +925,33 @@ init_dungeon_branches( panic("init_dungeon: too many branches"); } +static void +init_dungeon_set_entry(struct proto_dungeon *pd, int dngidx) +{ + int dgn_entry = pd->tmpdungeon[dngidx].entry_lev; + /* + * Set the entry level for this dungeon. The entry value means: + * < 0 from bottom (-1 == bottom level) + * 0 default (top) + * > 0 actual level (1 = top) + * + * Note that the entry_lev field in the dungeon structure is + * redundant. It is used only here and in print_dungeon(). + */ + if (dgn_entry < 0) { + gd.dungeons[dngidx].entry_lev = + gd.dungeons[dngidx].num_dunlevs + dgn_entry + 1; + if (gd.dungeons[dngidx].entry_lev <= 0) + gd.dungeons[dngidx].entry_lev = 1; + } else if (dgn_entry > 0) { + gd.dungeons[dngidx].entry_lev = dgn_entry; + if (gd.dungeons[dngidx].entry_lev > gd.dungeons[dngidx].num_dunlevs) + gd.dungeons[dngidx].entry_lev = gd.dungeons[dngidx].num_dunlevs; + } else { /* default */ + gd.dungeons[dngidx].entry_lev = 1; /* defaults to top level */ + } +} + /* initialize the "dungeon" structs */ void init_dungeons(void) @@ -1095,27 +1123,7 @@ init_dungeons(void) gd.dungeons[i].flags.align = dgn_align; gd.dungeons[i].flags.unconnected = !!(dgn_flags & UNCONNECTED); - /* - * Set the entry level for this dungeon. The entry value means: - * < 0 from bottom (-1 == bottom level) - * 0 default (top) - * > 0 actual level (1 = top) - * - * Note that the entry_lev field in the dungeon structure is - * redundant. It is used only here and in print_dungeon(). - */ - if (dgn_entry < 0) { - gd.dungeons[i].entry_lev = - gd.dungeons[i].num_dunlevs + dgn_entry + 1; - if (gd.dungeons[i].entry_lev <= 0) - gd.dungeons[i].entry_lev = 1; - } else if (dgn_entry > 0) { - gd.dungeons[i].entry_lev = dgn_entry; - if (gd.dungeons[i].entry_lev > gd.dungeons[i].num_dunlevs) - gd.dungeons[i].entry_lev = gd.dungeons[i].num_dunlevs; - } else { /* default */ - gd.dungeons[i].entry_lev = 1; /* defaults to top level */ - } + init_dungeon_set_entry(&pd, i); if (gd.dungeons[i].flags.unconnected) { gd.dungeons[i].depth_start = 1;