diff --git a/Source/m_menu.c b/Source/m_menu.c index 10ed22f6..647557ee 100644 --- a/Source/m_menu.c +++ b/Source/m_menu.c @@ -1675,6 +1675,36 @@ boolean set_compat_active = false; static int set_menu_itemon; // which setup item is selected? // phares 3/98 setup_menu_t* current_setup_menu; // points to current setup menu table +// [FG] save the setup menu's itemon value in the S_END element's x coordinate + +static int M_GetSetupMenuItemOn (void) +{ + const setup_menu_t* menu = current_setup_menu; + + if (menu) + { + while (!(menu->m_flags & S_END)) + menu++; + + return menu->m_x; + } + + return 0; +} + +static void M_SetSetupMenuItemOn (const int x) +{ + setup_menu_t* menu = current_setup_menu; + + if (menu) + { + while (!(menu->m_flags & S_END)) + menu++; + + menu->m_x = x; + } +} + ///////////////////////////// // // The menu_buffer is used to construct strings for display on the screen. @@ -2867,7 +2897,7 @@ void M_KeyBindings(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = keys_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -2993,7 +3023,7 @@ void M_Weapons(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = weap_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3080,7 +3110,7 @@ void M_StatusBar(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = stat_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3212,9 +3242,9 @@ void M_Automap(int choice) colorbox_active = false; default_verify = false; setup_gather = false; - set_menu_itemon = 0; mult_screens_index = 0; current_setup_menu = auto_settings[0]; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3387,7 +3417,7 @@ void M_Enemy(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = enem_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3622,7 +3652,7 @@ void M_General(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = gen_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3790,7 +3820,7 @@ void M_Compat(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = comp_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3901,7 +3931,7 @@ void M_Messages(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = mess_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -3974,7 +4004,7 @@ void M_ChatStrings(int choice) setup_gather = false; mult_screens_index = 0; current_setup_menu = chat_settings[0]; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); while (current_setup_menu[set_menu_itemon++].m_flags & S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; } @@ -5518,6 +5548,7 @@ boolean M_Responder (event_t* ev) if ((action == MENU_ESCAPE) || (action == MENU_BACKSPACE)) { + M_SetSetupMenuItemOn(set_menu_itemon); if (action == MENU_ESCAPE) // Clear all menus M_ClearMenus(); else // key_menu_backspace = return to Setup Menu @@ -5562,8 +5593,9 @@ boolean M_Responder (event_t* ev) { ptr1->m_flags &= ~S_HILITE; mult_screens_index--; + M_SetSetupMenuItemOn(set_menu_itemon); current_setup_menu = ptr2->var.menu; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); print_warning_about_changes = false; // killough 10/98 while (current_setup_menu[set_menu_itemon++].m_flags&S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE; @@ -5584,8 +5616,9 @@ boolean M_Responder (event_t* ev) { ptr1->m_flags &= ~S_HILITE; mult_screens_index++; + M_SetSetupMenuItemOn(set_menu_itemon); current_setup_menu = ptr2->var.menu; - set_menu_itemon = 0; + set_menu_itemon = M_GetSetupMenuItemOn(); print_warning_about_changes = false; // killough 10/98 while (current_setup_menu[set_menu_itemon++].m_flags&S_SKIP); current_setup_menu[--set_menu_itemon].m_flags |= S_HILITE;