From 76cfe1368d5a74190b0f550c3fdbe966bf4b322e Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 28 Jul 2019 21:09:07 +0000 Subject: [PATCH] `do_new_game_menu`: improve new game dialog text --- similar/main/menu.cpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/similar/main/menu.cpp b/similar/main/menu.cpp index 83ffab8eb..525e62f14 100644 --- a/similar/main/menu.cpp +++ b/similar/main/menu.cpp @@ -846,19 +846,29 @@ static int do_difficulty_menu() window_event_result do_new_game_menu() { - int new_level_num,player_highest_level; + int new_level_num; new_level_num = 1; - player_highest_level = get_highest_level(); - + const auto recorded_player_highest_level = get_highest_level(); + const auto clamped_player_highest_level = std::min(recorded_player_highest_level, Last_level); + const auto allowed_highest_level = #ifdef NDEBUG - if (player_highest_level > Last_level) +#define DXX_START_ANY_LEVEL_FORMAT "" +#define DXX_START_ANY_LEVEL_ARGS + clamped_player_highest_level +#else +#define DXX_START_ANY_LEVEL_FORMAT "\n\nYou have beaten level %d." +#define DXX_START_ANY_LEVEL_ARGS , clamped_player_highest_level + Last_level #endif - player_highest_level = Last_level; - if (player_highest_level > 1) { - char info_text[80]; + ; + if (allowed_highest_level > 1) + { + char info_text[128]; - snprintf(info_text,sizeof(info_text),"%s %d",TXT_START_ANY_LEVEL, player_highest_level); + snprintf(info_text, sizeof(info_text), "This mission has\n%u levels.\n\n%s %d." DXX_START_ANY_LEVEL_FORMAT, static_cast(Last_level), TXT_START_ANY_LEVEL, allowed_highest_level DXX_START_ANY_LEVEL_ARGS); +#undef DXX_START_ANY_LEVEL_ARGS +#undef DXX_START_ANY_LEVEL_FORMAT for (;;) { array num_text{"1"}; @@ -874,10 +884,12 @@ window_event_result do_new_game_menu() char *p = nullptr; new_level_num = strtol(num_text.data(), &p, 10); - if (*p || new_level_num <= 0 || new_level_num > player_highest_level) + if (*p || new_level_num <= 0 || new_level_num > Last_level) { - nm_messagebox( NULL, 1, TXT_OK, TXT_INVALID_LEVEL); + nm_messagebox(TXT_INVALID_LEVEL, 1, TXT_OK, "You must enter a\npositive level number\nless than or\nequal to %u.\n", static_cast(Last_level)); } + else if (new_level_num > allowed_highest_level) + nm_messagebox(TXT_INVALID_LEVEL, 1, TXT_OK, "You have beaten level %d.\n\nYou cannot start on level %d.", allowed_highest_level, new_level_num); else break; }