From 3b40b80dc483c2a79bf247fc6274000170603f4a Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Aug 2025 22:18:39 +0100 Subject: [PATCH 1/4] Draw Round Queue UI under menu foreground (resolves #1570) --- src/k_menudraw.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/k_menudraw.c b/src/k_menudraw.c index a82aaebd7..0e40688c7 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -983,6 +983,16 @@ void M_Drawer(void) if (currentMenu->drawroutine) currentMenu->drawroutine(); // call current menu Draw routine + if ( + ( + currentMenu == &PLAY_LevelSelectDef + || currentMenu == &PLAY_CupSelectDef + ) && levellist.canqueue + ) + { + M_DrawPauseRoundQueue(0, true); + } + M_DrawMenuForeground(); // Draw version down in corner @@ -998,16 +1008,6 @@ void M_Drawer(void) // Draw message overlay when needed M_DrawMenuMessage(); - - if ( - ( - currentMenu == &PLAY_LevelSelectDef - || currentMenu == &PLAY_CupSelectDef - ) && levellist.canqueue - ) - { - M_DrawPauseRoundQueue(0, true); - } } if (menuwipe) From 515188e472b28d6fd765b49bcf4b8a2f33ec1e91 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Aug 2025 23:00:25 +0100 Subject: [PATCH 2/4] Forbid queue UI in Tutorial Mode Doesn't even properly work with the way levels are ended there anyways --- src/menus/extras-1.c | 2 +- src/menus/transient/level-select.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/menus/extras-1.c b/src/menus/extras-1.c index b7c8dcd1a..3da6e388a 100644 --- a/src/menus/extras-1.c +++ b/src/menus/extras-1.c @@ -69,7 +69,7 @@ menuitem_t EXTRAS_Main[] = NULL, {.routine = M_Manual}, 0, 0}, {IT_STRING | IT_CALL, "Tutorial", "Help Dr. Robotnik and Tails test out their new Ring Racers.", - NULL, {.routine = M_LevelSelectInit}, 0, GT_TUTORIAL}, + NULL, {.routine = M_LevelSelectInit}, 3, GT_TUTORIAL}, {IT_STRING | IT_CALL, "Statistics", "Look back on some of your greatest achievements such as your playtime and wins!", NULL, {.routine = M_Statistics}, 0, 0}, diff --git a/src/menus/transient/level-select.c b/src/menus/transient/level-select.c index 53f2ef4bb..aaf2ce114 100644 --- a/src/menus/transient/level-select.c +++ b/src/menus/transient/level-select.c @@ -675,6 +675,11 @@ void M_LevelSelectInit(INT32 choice) levellist.levelsearch.timeattack = false; levellist.canqueue = false; break; + case 3: + levellist.levelsearch.grandprix = false; + levellist.levelsearch.timeattack = false; + levellist.canqueue = false; + break; default: CONS_Alert(CONS_WARNING, "Bad level select init\n"); return; From f951509e5fd495d4bed68f8bc8181e00e2daf57f Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Aug 2025 23:07:26 +0100 Subject: [PATCH 3/4] Add input UI for M_DrawLevelSelect (resolves #1572) --- src/k_menudraw.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/k_menudraw.c b/src/k_menudraw.c index 0e40688c7..b5c155726 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -3738,6 +3738,43 @@ void M_DrawLevelSelect(void) } M_DrawCupTitle(tay, &levellist.levelsearch); + + t = (abs(t)/2) + BASEVIDWIDTH - 4; + tay += 30; + + const boolean queuewithinsize = (menuqueue.size + roundqueue.size < ROUNDQUEUE_MAX); + + const char *worktext = "Go to Course"; + if (levellist.levelsearch.timeattack) + worktext = "Select Course"; + else if (levellist.canqueue && menuqueue.size && queuewithinsize) + worktext = roundqueue.size ? "Add to Queue" : "Start Queue"; + + if (worktext) + { + K_DrawGameControl(t, tay, 0, va(" %s", worktext), 2, TINY_FONT, 0); + tay += 13; + } + + if (levellist.canqueue) + { + worktext = queuewithinsize + ? "" : ""; + K_DrawGameControl(t, tay, 0, va("%s Queue Course", worktext), 2, TINY_FONT, 0); + tay += 13; + + worktext = NULL; + if (menuqueue.size) + worktext = "Undo"; + else if (roundqueue.size) + worktext = "Clear Queue"; + + if (worktext) + { + K_DrawGameControl(t, tay, 0, va(" %s", worktext), 2, TINY_FONT, 0); + tay += 13; + } + } } static boolean M_LevelSelectHasBG(menu_t *check) From 9449321944fbf7b3c1f7a4736b5bf2b3a32e3367 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Aug 2025 23:32:13 +0100 Subject: [PATCH 4/4] Oni's suggestion for fixing EXP/Mobiums on Roundqueue Intermission (resolves #1647) --- src/y_inter.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/y_inter.cpp b/src/y_inter.cpp index 3ed2b82fc..dd9ded9dd 100644 --- a/src/y_inter.cpp +++ b/src/y_inter.cpp @@ -958,9 +958,13 @@ void Y_PlayerStandingsDrawer(y_data_t *standings, INT32 xoffset) if (standings->rankingsmode) { - if (standings->isduel) + if (standings->numplayers < 2) + ; + else if (standings->isduel) { - Y_DrawRankMode(BASEVIDWIDTH / 2 + xoffset, BASEVIDHEIGHT - 19, true); + x = BASEVIDWIDTH / 2 + xoffset; + y = roundqueue.size ? (BASEVIDHEIGHT/2) : (BASEVIDHEIGHT - 19); + Y_DrawRankMode(x, y, true); } else {