diff --git a/src/d_loop.c b/src/d_loop.c index d2abec92..c7b24558 100644 --- a/src/d_loop.c +++ b/src/d_loop.c @@ -728,7 +728,7 @@ void TryRunTics (void) // [AM] If we've uncapped the framerate and there are no tics // to run, return early instead of waiting around. - #define return_early (uncapped && counts == 0 && leveltime > oldleveltime) + #define return_early (uncapped && counts == 0) // get real tics entertic = I_GetTime() / ticdup; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index b0b1988d..ea124a6c 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1471,7 +1471,7 @@ void WI_DrawTimeWidget(void) { const hu_widget_t w = {&w_sttime, align_left, align_top}; - if (hud_level_time == 2) + if (hud_level_time & HUD_WIDGET_HUD) { HUlib_reset_align_offsets(); // leveltime is already added to totalleveltimes before WI_Start() @@ -1632,15 +1632,15 @@ void HU_Ticker(void) if (automapactive) { - HU_cond_build_widget(&w_monsec, hud_level_stats); - HU_cond_build_widget(&w_sttime, hud_level_time); - HU_cond_build_widget(&w_coord, STRICTMODE(hud_player_coords)); + HU_cond_build_widget(&w_monsec, hud_level_stats & HUD_WIDGET_AUTOMAP); + HU_cond_build_widget(&w_sttime, hud_level_time & HUD_WIDGET_AUTOMAP); + HU_cond_build_widget(&w_coord, STRICTMODE(hud_player_coords) & HUD_WIDGET_AUTOMAP); } else { - HU_cond_build_widget(&w_monsec, hud_level_stats == 2); - HU_cond_build_widget(&w_sttime, hud_level_time == 2); - HU_cond_build_widget(&w_coord, STRICTMODE(hud_player_coords) == 2); + HU_cond_build_widget(&w_monsec, hud_level_stats & HUD_WIDGET_HUD); + HU_cond_build_widget(&w_sttime, hud_level_time & HUD_WIDGET_HUD); + HU_cond_build_widget(&w_coord, STRICTMODE(hud_player_coords) & HUD_WIDGET_HUD); } HU_cond_build_widget(&w_fps, plr->cheats & CF_SHOWFPS); diff --git a/src/hu_stuff.h b/src/hu_stuff.h index cdb69a02..8b1f5a54 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -84,6 +84,14 @@ extern int crispy_hud; extern int hud_crosshair; extern boolean hud_crosshair_health; +enum +{ + HUD_WIDGET_OFF, + HUD_WIDGET_AUTOMAP, + HUD_WIDGET_HUD, + HUD_WIDGET_ALWAYS, +}; + typedef enum { crosstarget_off, diff --git a/src/m_menu.c b/src/m_menu.c index 9771a8c0..62230aef 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3298,7 +3298,7 @@ enum { }; static const char *show_widgets_strings[] = { - "OFF", "ON AUTOMAP", "ALWAYS", NULL + "OFF", "ON AUTOMAP", "ON HUD", "ALWAYS", NULL }; setup_menu_t stat_settings1[] = // Status Bar and HUD Settings screen @@ -5268,10 +5268,32 @@ boolean M_Responder (event_t* ev) if (M_InputActivated(input_hud_timestats)) { - if (hud_level_stats || hud_level_time) - hud_level_stats = hud_level_time = 0; + if (automapactive) + { + if ((hud_level_stats | hud_level_time) & HUD_WIDGET_AUTOMAP) + { + hud_level_stats &= ~HUD_WIDGET_AUTOMAP; + hud_level_time &= ~HUD_WIDGET_AUTOMAP; + } + else + { + hud_level_stats |= HUD_WIDGET_AUTOMAP; + hud_level_time |= HUD_WIDGET_AUTOMAP; + } + } else - hud_level_stats = hud_level_time = 1; + { + if ((hud_level_stats | hud_level_time) & HUD_WIDGET_HUD) + { + hud_level_stats &= ~HUD_WIDGET_HUD; + hud_level_time &= ~HUD_WIDGET_HUD; + } + else + { + hud_level_stats |= HUD_WIDGET_HUD; + hud_level_time |= HUD_WIDGET_HUD; + } + } return true; } diff --git a/src/m_misc.c b/src/m_misc.c index e2bd2fdf..699b3a4a 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -2651,24 +2651,24 @@ default_t defaults[] = { { "hud_player_coords", (config_t *) &hud_player_coords, NULL, - {1}, {0,2}, number, ss_stat, wad_no, - "show player coords widget (1 = on Automap, 2 = always)" + {HUD_WIDGET_AUTOMAP}, {HUD_WIDGET_OFF,HUD_WIDGET_ALWAYS}, number, ss_stat, wad_no, + "show player coords widget (1 = on Automap, 2 = on HUD, 3 = always)" }, // [FG] level stats widget { "hud_level_stats", (config_t *) &hud_level_stats, NULL, - {0}, {0,2}, number, ss_stat, wad_no, - "show level stats (kill, items and secrets) widget (1 = on Automap, 2 = always)" + {HUD_WIDGET_OFF}, {HUD_WIDGET_OFF,HUD_WIDGET_ALWAYS}, number, ss_stat, wad_no, + "show level stats (kill, items and secrets) widget (1 = on Automap, 2 = on HUD, 3 = always)" }, // [FG] level time widget { "hud_level_time", (config_t *) &hud_level_time, NULL, - {0}, {0,2}, number, ss_stat, wad_no, - "show level time widget (1 = on Automap, 2 = always)" + {HUD_WIDGET_OFF}, {HUD_WIDGET_OFF,HUD_WIDGET_ALWAYS}, number, ss_stat, wad_no, + "show level time widget (1 = on Automap, 2 = on HUD, 3 = always)" }, // prefer Crispy HUD over Boom HUD