diff --git a/Source/DiabloUI/selhero.cpp b/Source/DiabloUI/selhero.cpp index c63698781..9c068463d 100644 --- a/Source/DiabloUI/selhero.cpp +++ b/Source/DiabloUI/selhero.cpp @@ -189,7 +189,8 @@ void SelheroListSelect(int value) UiInitList(vecSelHeroDlgItems.size(), SelheroClassSelectorFocus, SelheroClassSelectorSelect, SelheroClassSelectorEsc, vecSelDlgItems, true); memset(&selhero_heroInfo.name, 0, sizeof(selhero_heroInfo.name)); - selhero_heroInfo.saveNumber = MAX_CHARACTERS; + selhero_heroInfo.saveNumber = pfile_ui_get_first_unused_save_num(); + SelheroSetStats(); title = selhero_isMultiPlayer ? _("New Multi Player Hero") : _("New Single Player Hero"); return; } diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 0fe0bf224..e4b7be9ae 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -325,19 +325,23 @@ void pfile_ui_set_class_stats(unsigned int playerClass, _uidefaultstats *classSt classStats->vitality = VitalityTbl[playerClass]; } +uint32_t pfile_ui_get_first_unused_save_num() +{ + uint32_t saveNum; + for (saveNum = 0; saveNum < MAX_CHARACTERS; saveNum++) { + if (hero_names[saveNum][0] == '\0') + break; + } + return saveNum; +} + bool pfile_ui_save_create(_uiheroinfo *heroinfo) { PkPlayerStruct pkplr; uint32_t saveNum = heroinfo->saveNumber; - if (saveNum >= MAX_CHARACTERS) { - for (saveNum = 0; saveNum < MAX_CHARACTERS; saveNum++) { - if (hero_names[saveNum][0] == '\0') - break; - } - if (saveNum >= MAX_CHARACTERS) - return false; - } + if (saveNum >= MAX_CHARACTERS) + return false; if (!OpenArchive(saveNum)) return false; heroinfo->saveNumber = saveNum; diff --git a/Source/pfile.h b/Source/pfile.h index 1fa4f0ff6..4ee8e836b 100644 --- a/Source/pfile.h +++ b/Source/pfile.h @@ -31,6 +31,7 @@ const char *pfile_get_password(); void pfile_write_hero(bool writeGameData = false, bool clearTables = !gbIsMultiplayer); bool pfile_ui_set_hero_infos(bool (*uiAddHeroInfo)(_uiheroinfo *)); void pfile_ui_set_class_stats(unsigned int playerClass, _uidefaultstats *classStats); +uint32_t pfile_ui_get_first_unused_save_num(); bool pfile_ui_save_create(_uiheroinfo *heroinfo); bool pfile_delete_save(_uiheroinfo *heroInfo); void pfile_read_player_from_save(uint32_t saveNum, int playerId);