Browse Source

Make 'quit game' return to the main menu when NOEXIT is set

pull/4333/head
Anders Jenbo 4 years ago
parent
commit
2575f76bbd
  1. 4
      Source/diablo.cpp
  2. 1
      Source/diablo.h
  3. 42
      Source/gamemenu.cpp
  4. 2
      Source/gamemenu.h

4
Source/diablo.cpp

@ -94,6 +94,7 @@ dungeon_type gnLevelTypeTbl[NUMLEVELS];
Point MousePosition; Point MousePosition;
bool gbRunGame; bool gbRunGame;
bool gbRunGameResult; bool gbRunGameResult;
bool ReturnToMainMenu;
bool zoomflag; bool zoomflag;
/** Enable updating of player character, set to false once Diablo dies */ /** Enable updating of player character, set to false once Diablo dies */
bool gbProcessPlayers; bool gbProcessPlayers;
@ -1700,6 +1701,7 @@ void FreeGameMem()
bool StartGame(bool bNewGame, bool bSinglePlayer) bool StartGame(bool bNewGame, bool bSinglePlayer)
{ {
gbSelectProvider = true; gbSelectProvider = true;
ReturnToMainMenu = false;
do { do {
gbLoadGame = false; gbLoadGame = false;
@ -1735,6 +1737,8 @@ bool StartGame(bool bNewGame, bool bSinglePlayer)
// initialize main menu resources. // initialize main menu resources.
if (gbRunGameResult) if (gbRunGameResult)
UiInitialize(); UiInitialize();
if (ReturnToMainMenu)
return true;
} while (gbRunGameResult); } while (gbRunGameResult);
SNetDestroy(); SNetDestroy();

1
Source/diablo.h

@ -64,6 +64,7 @@ extern dungeon_type gnLevelTypeTbl[NUMLEVELS];
extern Point MousePosition; extern Point MousePosition;
extern bool gbRunGame; extern bool gbRunGame;
extern bool gbRunGameResult; extern bool gbRunGameResult;
extern bool ReturnToMainMenu;
extern DVL_API_FOR_TEST bool zoomflag; extern DVL_API_FOR_TEST bool zoomflag;
extern bool gbProcessPlayers; extern bool gbProcessPlayers;
extern bool gbLoadGame; extern bool gbLoadGame;

42
Source/gamemenu.cpp

@ -31,39 +31,35 @@ void GamemenuSpeed(bool bActivate);
/** Contains the game menu items of the single player menu. */ /** Contains the game menu items of the single player menu. */
TMenuItem sgSingleMenu[] = { TMenuItem sgSingleMenu[] = {
// clang-format off // clang-format off
// dwFlags, pszStr, fnMenu // dwFlags, pszStr, fnMenu
{ GMENU_ENABLED, N_("Save Game"), &gamemenu_save_game }, { GMENU_ENABLED, N_("Save Game"), &gamemenu_save_game },
{ GMENU_ENABLED, N_("Options"), &GamemenuOptions }, { GMENU_ENABLED, N_("Options"), &GamemenuOptions },
{ GMENU_ENABLED, N_("New Game"), &GamemenuNewGame }, { GMENU_ENABLED, N_("New Game"), &GamemenuNewGame },
{ GMENU_ENABLED, N_("Load Game"), &gamemenu_load_game }, { GMENU_ENABLED, N_("Load Game"), &gamemenu_load_game },
#ifndef NOEXIT { GMENU_ENABLED, N_("Quit Game"), &gamemenu_quit_game },
{ GMENU_ENABLED, N_("Quit Game"), &gamemenu_quit_game }, { GMENU_ENABLED, nullptr, nullptr }
#endif
{ GMENU_ENABLED, nullptr, nullptr }
// clang-format on // clang-format on
}; };
/** Contains the game menu items of the multi player menu. */ /** Contains the game menu items of the multi player menu. */
TMenuItem sgMultiMenu[] = { TMenuItem sgMultiMenu[] = {
// clang-format off // clang-format off
// dwFlags, pszStr, fnMenu // dwFlags, pszStr, fnMenu
{ GMENU_ENABLED, N_("Options"), &GamemenuOptions }, { GMENU_ENABLED, N_("Options"), &GamemenuOptions },
{ GMENU_ENABLED, N_("New Game"), &GamemenuNewGame }, { GMENU_ENABLED, N_("New Game"), &GamemenuNewGame },
{ GMENU_ENABLED, N_("Restart In Town"), &GamemenuRestartTown }, { GMENU_ENABLED, N_("Restart In Town"), &GamemenuRestartTown },
#ifndef NOEXIT { GMENU_ENABLED, N_("Quit Game"), &gamemenu_quit_game },
{ GMENU_ENABLED, N_("Quit Game"), &gamemenu_quit_game }, { GMENU_ENABLED, nullptr, nullptr },
#endif
{ GMENU_ENABLED, nullptr, nullptr },
// clang-format on // clang-format on
}; };
TMenuItem sgOptionsMenu[] = { TMenuItem sgOptionsMenu[] = {
// clang-format off // clang-format off
// dwFlags, pszStr, fnMenu // dwFlags, pszStr, fnMenu
{ GMENU_ENABLED | GMENU_SLIDER, nullptr, &GamemenuMusicVolume }, { GMENU_ENABLED | GMENU_SLIDER, nullptr, &GamemenuMusicVolume },
{ GMENU_ENABLED | GMENU_SLIDER, nullptr, &GamemenuSoundVolume }, { GMENU_ENABLED | GMENU_SLIDER, nullptr, &GamemenuSoundVolume },
{ GMENU_ENABLED | GMENU_SLIDER, N_("Gamma"), &GamemenuGamma }, { GMENU_ENABLED | GMENU_SLIDER, N_("Gamma"), &GamemenuGamma },
{ GMENU_ENABLED | GMENU_SLIDER, N_("Speed"), &GamemenuSpeed }, { GMENU_ENABLED | GMENU_SLIDER, N_("Speed"), &GamemenuSpeed },
{ GMENU_ENABLED , N_("Previous Menu"), &GamemenuPrevious }, { GMENU_ENABLED , N_("Previous Menu"), &GamemenuPrevious },
{ GMENU_ENABLED , nullptr, nullptr }, { GMENU_ENABLED , nullptr, nullptr },
// clang-format on // clang-format on
}; };
/** Specifies the menu names for music enabled and disabled. */ /** Specifies the menu names for music enabled and disabled. */
@ -294,13 +290,15 @@ void GamemenuSpeed(bool bActivate)
} // namespace } // namespace
#ifndef NOEXIT
void gamemenu_quit_game(bool bActivate) void gamemenu_quit_game(bool bActivate)
{ {
GamemenuNewGame(bActivate); GamemenuNewGame(bActivate);
#ifndef NOEXIT
gbRunGameResult = false; gbRunGameResult = false;
} #else
ReturnToMainMenu = true;
#endif #endif
}
void gamemenu_load_game(bool /*bActivate*/) void gamemenu_load_game(bool /*bActivate*/)
{ {

2
Source/gamemenu.h

@ -10,9 +10,7 @@ namespace devilution {
void gamemenu_on(); void gamemenu_on();
void gamemenu_off(); void gamemenu_off();
void gamemenu_handle_previous(); void gamemenu_handle_previous();
#ifndef NOEXIT
void gamemenu_quit_game(bool bActivate); void gamemenu_quit_game(bool bActivate);
#endif
void gamemenu_load_game(bool bActivate); void gamemenu_load_game(bool bActivate);
void gamemenu_save_game(bool bActivate); void gamemenu_save_game(bool bActivate);

Loading…
Cancel
Save