From 1d6a808cbde1046e273aa25f07c497541eb08f83 Mon Sep 17 00:00:00 2001 From: Misa Date: Mon, 20 Dec 2021 17:32:12 -0800 Subject: [PATCH] Add centiseconds to timer overlays This adds centiseconds to the in-game timer, as well as the time trial timer. This is to aid speedrun moderators in determining when exactly a run was completed, which they can't easily do if the timer only has a precision up to a second. --- desktop_version/src/Game.cpp | 15 +++++++++++++++ desktop_version/src/Game.h | 2 ++ desktop_version/src/Render.cpp | 11 ++++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 49e29968..8978f0b4 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -5822,6 +5822,21 @@ std::string Game::timetstring( int t ) return tempstring; } +void Game::timestringcenti(char* buffer, const size_t buffer_size) +{ + /* 16 chars should be plenty for int32s */ + char hours_str[16] = {'\0'}; + if (hours > 0) + { + SDL_snprintf(hours_str, sizeof(hours_str), "%i:", hours); + } + SDL_snprintf( + buffer, buffer_size, + "%s%02i:%02i.%02i", + hours_str, minutes, seconds, frames * 100 / 30 + ); +} + void Game::returnmenu(void) { if (menustack.empty()) diff --git a/desktop_version/src/Game.h b/desktop_version/src/Game.h index de7f12ba..9832a52d 100644 --- a/desktop_version/src/Game.h +++ b/desktop_version/src/Game.h @@ -143,6 +143,8 @@ public: std::string timetstring(int t); + void timestringcenti(char* buffer, size_t buffer_size); + void returnmenu(void); void returntomenu(enum Menu::MenuName t); void createmenu(enum Menu::MenuName t, bool samemenu = false); diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index 87602081..395ebc02 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -1724,8 +1724,10 @@ void gamerender(void) if (graphics.fademode==0 && !game.intimetrial && !game.isingamecompletescreen() && (!game.swnmode || game.swngame != 1) && game.showingametimer) { + char buffer[SCREEN_WIDTH_TILES + 1]; /* ASCII only */ graphics.bprint(6, 6, "TIME:", 255,255,255); - graphics.bprint(46, 6, game.timestring(), 196, 196, 196); + game.timestringcenti(buffer, sizeof(buffer)); + graphics.bprint(46, 6, buffer, 196, 196, 196); } if(map.extrarow==0 || (map.custommode && map.roomname[0] != '\0')) @@ -1932,6 +1934,9 @@ void gamerender(void) } else { + char buffer[SCREEN_WIDTH_TILES + 1]; /* ASCII only */ + game.timestringcenti(buffer, sizeof(buffer)); + //Draw OSD stuff graphics.bprint(6, 18, "TIME :", 255,255,255); graphics.bprint(6, 30, "DEATH:", 255, 255, 255); @@ -1939,11 +1944,11 @@ void gamerender(void) if(game.timetrialparlost) { - graphics.bprint(56, 18, game.timestring(), 196, 80, 80); + graphics.bprint(56, 18, buffer, 196, 80, 80); } else { - graphics.bprint(56, 18, game.timestring(), 196, 196, 196); + graphics.bprint(56, 18, buffer, 196, 196, 196); } if(game.deathcounts>0) {