Browse Source

Store last selected hero in options

pull/3063/head
obligaron 5 years ago committed by Anders Jenbo
parent
commit
3a40448485
  1. 8
      Source/menu.cpp
  2. 8
      Source/options.cpp
  3. 8
      Source/options.h

8
Source/menu.cpp

@ -86,11 +86,14 @@ bool DummyGetHeroInfo(_uiheroinfo * /*pInfo*/)
bool mainmenu_select_hero_dialog(GameData *gameData)
{
uint32_t *pSaveNumberFromOptions = nullptr;
_selhero_selections dlgresult = SELHERO_NEW_DUNGEON;
if (demo::IsRunning()) {
pfile_ui_set_hero_infos(DummyGetHeroInfo);
gbLoadGame = true;
} else if (!gbIsMultiplayer) {
pSaveNumberFromOptions = gbIsHellfire ? &sgOptions.Hellfire.lastSinglePlayerHero : &sgOptions.Diablo.lastSinglePlayerHero;
gSaveNumber = *pSaveNumberFromOptions;
UiSelHeroSingDialog(
pfile_ui_set_hero_infos,
pfile_ui_save_create,
@ -102,6 +105,8 @@ bool mainmenu_select_hero_dialog(GameData *gameData)
gbLoadGame = (dlgresult == SELHERO_CONTINUE);
} else {
pSaveNumberFromOptions = gbIsHellfire ? &sgOptions.Hellfire.lastMultiplayerHero : &sgOptions.Diablo.lastMultiplayerHero;
gSaveNumber = *pSaveNumberFromOptions;
UiSelHeroMultDialog(
pfile_ui_set_hero_infos,
pfile_ui_save_create,
@ -115,6 +120,9 @@ bool mainmenu_select_hero_dialog(GameData *gameData)
return false;
}
if (pSaveNumberFromOptions != nullptr)
*pSaveNumberFromOptions = gSaveNumber;
pfile_read_player_from_save(gSaveNumber, Players[MyPlayerId]);
return true;

8
Source/options.cpp

@ -209,7 +209,11 @@ bool sbWasOptionsLoaded = false;
void LoadOptions()
{
sgOptions.Diablo.bIntro = GetIniBool("Diablo", "Intro", true);
sgOptions.Diablo.lastSinglePlayerHero = GetIniInt("Diablo", "LastSinglePlayerHero", 0);
sgOptions.Diablo.lastMultiplayerHero = GetIniInt("Diablo", "LastMultiplayerHero", 0);
sgOptions.Hellfire.bIntro = GetIniBool("Hellfire", "Intro", true);
sgOptions.Hellfire.lastSinglePlayerHero = GetIniInt("Hellfire", "LastSinglePlayerHero", 0);
sgOptions.Hellfire.lastMultiplayerHero = GetIniInt("Hellfire", "LastMultiplayerHero", 0);
GetIniValue("Hellfire", "SItem", sgOptions.Hellfire.szItem, sizeof(sgOptions.Hellfire.szItem), "");
sgOptions.Audio.nSoundVolume = GetIniInt("Audio", "Sound Volume", VOLUME_MAX);
@ -359,8 +363,12 @@ void LoadOptions()
void SaveOptions()
{
SetIniValue("Diablo", "Intro", sgOptions.Diablo.bIntro);
SetIniValue("Diablo", "LastSinglePlayerHero", sgOptions.Diablo.lastSinglePlayerHero);
SetIniValue("Diablo", "LastMultiplayerHero", sgOptions.Diablo.lastMultiplayerHero);
SetIniValue("Hellfire", "Intro", sgOptions.Hellfire.bIntro);
SetIniValue("Hellfire", "SItem", sgOptions.Hellfire.szItem);
SetIniValue("Hellfire", "LastSinglePlayerHero", sgOptions.Hellfire.lastSinglePlayerHero);
SetIniValue("Hellfire", "LastMultiplayerHero", sgOptions.Hellfire.lastMultiplayerHero);
SetIniValue("Audio", "Sound Volume", sgOptions.Audio.nSoundVolume);
SetIniValue("Audio", "Music Volume", sgOptions.Audio.nMusicVolume);

8
Source/options.h

@ -11,6 +11,10 @@ namespace devilution {
struct DiabloOptions {
/** @brief Play game intro video on startup. */
bool bIntro;
/** @brief Remembers what singleplayer hero/save was last used. */
std::uint32_t lastSinglePlayerHero;
/** @brief Remembers what multiplayer hero/save was last used. */
std::uint32_t lastMultiplayerHero;
};
struct HellfireOptions {
@ -18,6 +22,10 @@ struct HellfireOptions {
bool bIntro;
/** @brief Cornerstone of the world item. */
char szItem[sizeof(ItemPack) * 2 + 1];
/** @brief Remembers what singleplayer hero/save was last used. */
std::uint32_t lastSinglePlayerHero;
/** @brief Remembers what multiplayer hero/save was last used. */
std::uint32_t lastMultiplayerHero;
};
struct AudioOptions {

Loading…
Cancel
Save