Browse Source

Introduce NOEXIT build option to disable Quit Game options in menus

pull/3987/head
staphen 4 years ago committed by Anders Jenbo
parent
commit
3546b41be0
  1. 1
      CMake/Definitions.cmake
  2. 3
      CMake/platforms/android.cmake
  3. 1
      CMake/platforms/ios.cmake
  4. 1
      CMake/platforms/n3ds.cmake
  5. 1
      CMake/platforms/switch.cmake
  6. 1
      CMake/platforms/vita.cmake
  7. 8
      Source/DiabloUI/mainmenu.cpp
  8. 2
      Source/diablo.cpp
  9. 6
      Source/gamemenu.cpp
  10. 2
      Source/gamemenu.h

1
CMake/Definitions.cmake

@ -3,6 +3,7 @@ foreach(
def_name
NOSOUND
NONET
NOEXIT
PREFILL_PLAYER_NAME
DISABLE_TCP
DISABLE_ZERO_TIER

3
CMake/platforms/android.cmake

@ -23,6 +23,9 @@ set(DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/android-pro
set(ASAN OFF)
set(UBSAN OFF)
# Disable in-game options to exit the game.
set(NOEXIT ON)
if(CMAKE_BUILD_TYPE STREQUAL "Release")
# Work around a linker bug in clang: https://github.com/android/ndk/issues/721
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -flto=full")

1
CMake/platforms/ios.cmake

@ -11,6 +11,7 @@ set(DEVILUTIONX_SYSTEM_LIBPNG OFF)
set(DEVILUTIONX_SYSTEM_LIBFMT OFF)
set(DISABLE_ZERO_TIER ON)
set(NOEXIT ON)
# Disable sanitizers. They're not supported out-of-the-box.
set(ASAN OFF)

1
CMake/platforms/n3ds.cmake

@ -10,6 +10,7 @@ set(DISABLE_ZERO_TIER ON)
set(LIBMPQ_FILE_BUFFER_SIZE 32768)
set(USE_SDL1 ON)
set(PREFILL_PLAYER_NAME ON)
set(NOEXIT ON)
# 3DS libraries and compile definitions
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/ctr")

1
CMake/platforms/switch.cmake

@ -8,6 +8,7 @@ set(DEVILUTIONX_SYSTEM_SDL_IMAGE OFF)
set(DEVILUTIONX_SYSTEM_LIBSODIUM OFF)
set(DISABLE_ZERO_TIER ON)
set(PREFILL_PLAYER_NAME ON)
set(NOEXIT ON)
set(JOY_BUTTON_DPAD_LEFT 16)
set(JOY_BUTTON_DPAD_UP 17)

1
CMake/platforms/vita.cmake

@ -4,6 +4,7 @@ set(DEVILUTIONX_STATIC_CXX_STDLIB OFF)
set(BUILD_TESTING OFF)
set(DISABLE_ZERO_TIER ON)
set(PREFILL_PLAYER_NAME ON)
set(NOEXIT ON)
list(APPEND DEVILUTIONX_PLATFORM_SUBDIRECTORIES platform/vita)
list(APPEND DEVILUTIONX_PLATFORM_LINK_LIBRARIES libdevilutionx_vita)

8
Source/DiabloUI/mainmenu.cpp

@ -19,6 +19,7 @@ void UiMainMenuSelect(int value)
MainMenuResult = (_mainmenu_selections)vecMenuItems[value]->m_value;
}
#ifndef NOEXIT
void MainmenuEsc()
{
std::size_t last = vecMenuItems.size() - 1;
@ -28,6 +29,7 @@ void MainmenuEsc()
SelectedItem = last;
}
}
#endif
void MainmenuLoad(const char *name, void (*fnSound)(const char *file))
{
@ -38,7 +40,9 @@ void MainmenuLoad(const char *name, void (*fnSound)(const char *file))
vecMenuItems.push_back(std::make_unique<UiListItem>(_("Settings"), MAINMENU_SETTINGS));
vecMenuItems.push_back(std::make_unique<UiListItem>(_("Support"), MAINMENU_SHOW_SUPPORT));
vecMenuItems.push_back(std::make_unique<UiListItem>(_("Show Credits"), MAINMENU_SHOW_CREDITS));
#ifndef NOEXIT
vecMenuItems.push_back(std::make_unique<UiListItem>(gbIsHellfire ? _("Exit Hellfire") : _("Exit Diablo"), MAINMENU_EXIT_DIABLO));
#endif
if (!gbIsSpawn || gbIsHellfire) {
if (gbIsHellfire)
@ -61,7 +65,11 @@ void MainmenuLoad(const char *name, void (*fnSound)(const char *file))
SDL_Rect rect2 = { 17, (Sint16)(gnScreenHeight - 36), 605, 21 };
vecMainMenuDialog.push_back(std::make_unique<UiArtText>(name, rect2, UiFlags::FontSize12 | UiFlags::ColorUiSilverDark));
#ifndef NOEXIT
UiInitList(nullptr, UiMainMenuSelect, MainmenuEsc, vecMainMenuDialog, true);
#else
UiInitList(nullptr, UiMainMenuSelect, nullptr, vecMainMenuDialog, true);
#endif
}
void MainmenuFree()

2
Source/diablo.cpp

@ -1455,12 +1455,14 @@ void InitKeymapActions()
[] { gamemenu_load_game(false); },
nullptr,
[&]() { return !gbIsMultiplayer && gbValidSaveFile && stextflag == STORE_NONE && IsGameRunning(); });
#ifndef NOEXIT
sgOptions.Keymapper.AddAction(
"QuitGame",
N_("Quit game"),
N_("Closes the game."),
DVL_VK_INVALID,
[] { gamemenu_quit_game(false); });
#endif
sgOptions.Keymapper.AddAction(
"StopHero",
N_("Stop hero"),

6
Source/gamemenu.cpp

@ -36,7 +36,9 @@ TMenuItem sgSingleMenu[] = {
{ GMENU_ENABLED, N_("Options"), &GamemenuOptions },
{ GMENU_ENABLED, N_("New Game"), &GamemenuNewGame },
{ GMENU_ENABLED, N_("Load Game"), &gamemenu_load_game },
#ifndef NOEXIT
{ GMENU_ENABLED, N_("Quit Game"), &gamemenu_quit_game },
#endif
{ GMENU_ENABLED, nullptr, nullptr }
// clang-format on
};
@ -47,7 +49,9 @@ TMenuItem sgMultiMenu[] = {
{ GMENU_ENABLED, N_("Options"), &GamemenuOptions },
{ GMENU_ENABLED, N_("New Game"), &GamemenuNewGame },
{ GMENU_ENABLED, N_("Restart In Town"), &GamemenuRestartTown },
#ifndef NOEXIT
{ GMENU_ENABLED, N_("Quit Game"), &gamemenu_quit_game },
#endif
{ GMENU_ENABLED, nullptr, nullptr },
// clang-format on
};
@ -290,11 +294,13 @@ void GamemenuSpeed(bool bActivate)
} // namespace
#ifndef NOEXIT
void gamemenu_quit_game(bool bActivate)
{
GamemenuNewGame(bActivate);
gbRunGameResult = false;
}
#endif
void gamemenu_load_game(bool /*bActivate*/)
{

2
Source/gamemenu.h

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

Loading…
Cancel
Save