X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=f1223d0dd238b0098f845f54b57f574d09b903c4;hb=6a7a0a43f66ae9add076ccc55b859197567f879a;hp=dfd9ac612eb4127d6a0c4496bc1f9ee552f5c42e;hpb=767fdb2a9a16a0e09c3b8f724ef81e6f512fcaf3;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index dfd9ac61..f1223d0d 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1290,7 +1290,7 @@ TreeInfo *getValidLevelSeries(TreeInfo *node, TreeInfo *default_node) return getFirstValidTreeInfoEntry(default_node); } -TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) +static TreeInfo *getValidTreeInfoEntryExt(TreeInfo *node, boolean get_next_node) { if (node == NULL) return NULL; @@ -1299,15 +1299,26 @@ TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) return getFirstValidTreeInfoEntry(node->node_group); if (node->parent_link) // skip first node (back link) of node group - { - if (node->next) // get next regular node - return getFirstValidTreeInfoEntry(node->next); - else // leave empty node group and go on - return getFirstValidTreeInfoEntry(node->node_parent->next); - } + get_next_node = TRUE; - // this is a regular tree node - return node; + if (!get_next_node) // get current regular tree node + return node; + + // get next regular tree node, or step up until one is found + while (node->next == NULL && node->node_parent != NULL) + node = node->node_parent; + + return getFirstValidTreeInfoEntry(node->next); +} + +TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) +{ + return getValidTreeInfoEntryExt(node, FALSE); +} + +TreeInfo *getNextValidTreeInfoEntry(TreeInfo *node) +{ + return getValidTreeInfoEntryExt(node, TRUE); } TreeInfo *getTreeInfoFirstGroupEntry(TreeInfo *node)