From: Holger Schemel Date: Mon, 21 Apr 2025 20:40:04 +0000 (+0200) Subject: added "levelinfo.conf" option to mark level groups as empty X-Git-Tag: 4.4.0.5~4 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=ac1be0d99eb1ebb4b6d2e68f3cdebca10ac0889b;p=rocksndiamonds.git added "levelinfo.conf" option to mark level groups as empty --- diff --git a/src/libgame/setup.c b/src/libgame/setup.c index acdba909..bf7775e3 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1788,10 +1788,12 @@ static TreeInfo *cloneTreeNode(TreeInfo **node_top, TreeInfo *node_parent, if (node == NULL) return NULL; - if (!node->parent_link && !node->level_group && - skip_sets_without_levels && node->levels == 0) - return cloneTreeNode(node_top, node_parent, node->next, - skip_sets_without_levels); + boolean group_without_levels = (node->level_group && node->level_group_empty); + boolean set_without_levels = (!node->parent_link && !node->level_group && node->levels == 0); + + // if requested, skip level groups and level sets without levels (and continue with next node) + if (skip_sets_without_levels && (group_without_levels || set_without_levels)) + return cloneTreeNode(node_top, node_parent, node->next, skip_sets_without_levels); node_new = getTreeInfoCopy(node); // copy complete node @@ -2925,6 +2927,7 @@ static struct TokenInfo levelinfo_tokens[] = { TYPE_INTEGER, &ldi.sort_priority, "sort_priority" }, { TYPE_BOOLEAN, &ldi.latest_engine, "latest_engine" }, { TYPE_BOOLEAN, &ldi.level_group, "level_group" }, + { TYPE_BOOLEAN, &ldi.level_group_empty, "level_group_empty" }, { TYPE_BOOLEAN, &ldi.readonly, "readonly" }, { TYPE_STRING, &ldi.graphics_set_ecs, "graphics_set.old" }, { TYPE_STRING, &ldi.graphics_set_aga, "graphics_set.new" }, @@ -3045,6 +3048,7 @@ static void setTreeInfoToDefaults(TreeInfo *ti, int type) ti->first_level = 0; ti->last_level = 0; ti->level_group = FALSE; + ti->level_group_empty = FALSE; ti->handicap_level = 0; ti->readonly = TRUE; ti->handicap = TRUE; @@ -3133,6 +3137,7 @@ static void setTreeInfoToDefaultsFromParent(TreeInfo *ti, TreeInfo *parent) ti->first_level = parent->first_level; ti->last_level = parent->last_level; ti->level_group = FALSE; + ti->level_group_empty = parent->level_group_empty; ti->handicap_level = parent->handicap_level; ti->readonly = parent->readonly; ti->handicap = parent->handicap; @@ -3205,6 +3210,7 @@ static TreeInfo *getTreeInfoCopy(TreeInfo *ti) ti_copy->latest_engine = ti->latest_engine; ti_copy->level_group = ti->level_group; + ti_copy->level_group_empty = ti->level_group_empty; ti_copy->parent_link = ti->parent_link; ti_copy->is_copy = ti->is_copy; ti_copy->in_user_dir = ti->in_user_dir; diff --git a/src/libgame/system.h b/src/libgame/system.h index 21a36f73..8f1f2fba 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -1740,6 +1740,7 @@ struct TreeInfo boolean latest_engine; // force level set to use the latest game engine boolean level_group; // directory contains more level series directories + boolean level_group_empty; // directory contains only empty level series directories boolean parent_link; // entry links back to parent directory boolean is_copy; // this entry is a copy of another entry in the tree boolean in_user_dir; // user defined levels are stored in home directory