diff --git a/src/menu/spellpractice.c b/src/menu/spellpractice.c index 460c04e1..faef955a 100644 --- a/src/menu/spellpractice.c +++ b/src/menu/spellpractice.c @@ -23,6 +23,7 @@ static void draw_spell_menu(MenuData *m) { MenuData* create_spell_menu(void) { char title[128]; Difficulty lastdiff = D_Any; + uint16_t lastgroup = 0; MenuData *m = alloc_menu(); @@ -32,6 +33,7 @@ MenuData* create_spell_menu(void) { m->transition = TransFadeBlack; int n = stageinfo_get_num_stages(); + for(int i = 0; i < n; ++i) { StageInfo *stg = stageinfo_get_by_index(i); @@ -39,7 +41,9 @@ MenuData* create_spell_menu(void) { continue; } - if(stg->difficulty < lastdiff || (stg->difficulty == D_Extra && lastdiff != D_Extra)) { + uint16_t group = stg->id & ~0xff; + + if(i && (lastgroup != group || stg->difficulty < lastdiff)) { add_menu_separator(m); } @@ -54,6 +58,7 @@ MenuData* create_spell_menu(void) { } lastdiff = stg->difficulty; + lastgroup = group; } add_menu_separator(m); diff --git a/src/menu/stageselect.c b/src/menu/stageselect.c index 016c7d72..3276d8ec 100644 --- a/src/menu/stageselect.c +++ b/src/menu/stageselect.c @@ -24,6 +24,7 @@ static void draw_stage_menu(MenuData *m) { MenuData* create_stage_menu(void) { char title[STGMENU_MAX_TITLE_LENGTH]; Difficulty lastdiff = D_Any; + uint16_t lastgroup = 0; MenuData *m = alloc_menu(); @@ -36,8 +37,9 @@ MenuData* create_stage_menu(void) { for(int i = 0; i < n; ++i) { StageInfo *stg = stageinfo_get_by_index(i); Difficulty diff = stg->difficulty; + uint16_t group = stg->id & ~0xff; - if(diff < lastdiff || (diff == D_Extra && lastdiff != D_Extra) || (diff && !lastdiff)) { + if(i && (lastgroup != group || diff < lastdiff)) { add_menu_separator(m); } @@ -45,6 +47,7 @@ MenuData* create_stage_menu(void) { add_menu_entry(m, title, start_game, stg); lastdiff = diff; + lastgroup = group; } add_menu_separator(m);