diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 0c161e3ad..92ab7cf64 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -2331,13 +2331,20 @@ size_t HotkeysSize(size_t nHotkeys = NumHotkeys) void LoadHotkeys() { - LoadHelper file(OpenSaveArchive(gSaveNumber), "hotkeys"); + if (MyPlayer == nullptr) + return; + + LoadHotkeys(gSaveNumber, *MyPlayer); +} + +void LoadHotkeys(uint32_t saveNum, Player &myPlayer) +{ + LoadHelper file(OpenSaveArchive(saveNum), "hotkeys"); if (!file.IsValid()) { - SanitizePlayerSpellSelections(*MyPlayer); + SanitizePlayerSpellSelections(myPlayer); return; } - Player &myPlayer = *MyPlayer; size_t nHotkeys = 4; // Defaults to old save format number // Refill the spell arrays with no selection @@ -2524,7 +2531,7 @@ tl::expected LoadGame(bool firstflag) LoadPlayer(file, myPlayer); ValidatePlayer(); CalcPlrInv(myPlayer, false); - LoadHotkeys(); + LoadHotkeys(gSaveNumber, myPlayer); myPlayer.queuedSpell.spellId = myPlayer._pRSpell; myPlayer.queuedSpell.spellType = myPlayer._pRSplType; diff --git a/Source/loadsave.h b/Source/loadsave.h index 0d139e143..309f6887b 100644 --- a/Source/loadsave.h +++ b/Source/loadsave.h @@ -25,6 +25,7 @@ _item_indexes RemapItemIdxFromSpawn(_item_indexes i); _item_indexes RemapItemIdxToSpawn(_item_indexes i); bool IsHeaderValid(uint32_t magicNumber); void LoadHotkeys(); +void LoadHotkeys(uint32_t saveNum, Player &myPlayer); void LoadHeroItems(Player &player); /** * @brief Remove invalid inventory items from the inventory grid diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 7913f3493..4e08bd4c8 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -780,7 +780,7 @@ void pfile_read_player_from_save(uint32_t saveNum, Player &player) RemoveAllInvalidItems(player); CalcPlrInv(player, false); if (&player == MyPlayer) { - LoadHotkeys(); + LoadHotkeys(saveNum, player); player.queuedSpell.spellId = player._pRSpell; player.queuedSpell.spellType = player._pRSplType; } else {