From 6cfc2862d6c3ea77e2fdad2ff2b36d16937c2f86 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Fri, 1 Jan 2021 04:12:01 +0100 Subject: [PATCH] [hellfire] pfile_get_save_path and frinds --- Source/pfile.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 9de225df6..098a25a0e 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -99,28 +99,50 @@ static char *GetSaveDirectory(char *dst, int dst_size, DWORD save_num) return _strlwr(dst); } +#ifdef HELLFIRE +static void pfile_get_save_path(char *pszBuf, DWORD dwBufSize, DWORD save_num, BOOL hellfire) +#else static void pfile_get_save_path(char *pszBuf, DWORD dwBufSize, DWORD save_num) +#endif { + const char *fmt; DWORD plen; char *s; char path[MAX_PATH]; + #ifdef SPAWN - const char *fmt = "\\share_%d.sv"; + fmt = "\\share_%d.sv"; if (gbMaxPlayers <= 1) fmt = "\\spawn%d.sv"; +#elif defined(HELLFIRE) + if (gbMaxPlayers > 1) { + if (!hellfire) + fmt = "\\dlinfo_%d.drv"; + else + fmt = "\\hrinfo_%d.drv"; + + plen = GetWindowsDirectory(pszBuf, MAX_PATH); + } else { + if (!hellfire) + fmt = "\\single_%d.sv"; + else + fmt = "\\single_%d.hsv"; #else - const char *fmt = "\\multi_%d.sv"; + fmt = "\\multi_%d.sv"; if (gbMaxPlayers <= 1) fmt = "\\single_%d.sv"; #endif - // BUGFIX: ignores dwBufSize and uses MAX_PATH instead - plen = GetModuleFileName(ghInst, pszBuf, MAX_PATH); - s = strrchr(pszBuf, '\\'); - if (s) - *s = '\0'; + // BUGFIX: ignores dwBufSize and uses MAX_PATH instead + plen = GetModuleFileName(ghInst, pszBuf, MAX_PATH); + s = strrchr(pszBuf, '\\'); + if (s) + *s = '\0'; +#ifdef HELLFIRE + } +#endif if (!plen) app_fatal("Unable to get save directory"); @@ -213,8 +235,13 @@ static BOOL pfile_open_archive(BOOL update, DWORD save_num) { char FileName[MAX_PATH]; +#ifdef HELLFIRE + pfile_get_save_path(FileName, sizeof(FileName), save_num, TRUE); + if (OpenMPQ(FileName, gbMaxPlayers > 1, save_num)) +#else pfile_get_save_path(FileName, sizeof(FileName), save_num); if (OpenMPQ(FileName, FALSE, save_num)) +#endif return TRUE; if (update && gbMaxPlayers > 1) @@ -226,7 +253,12 @@ static void pfile_flush(BOOL is_single_player, DWORD save_num) { char FileName[MAX_PATH]; +#ifdef HELLFIRE + pfile_get_save_path(FileName, sizeof(FileName), save_num, TRUE); +#else pfile_get_save_path(FileName, sizeof(FileName), save_num); +#endif + mpqapi_flush_and_close(FileName, is_single_player, save_num); } @@ -238,7 +270,11 @@ static HANDLE pfile_open_save_archive(BOOL *showFixedMsg, DWORD save_num) char SrcStr[MAX_PATH]; HANDLE archive; +#ifdef HELLFIRE + pfile_get_save_path(SrcStr, sizeof(SrcStr), save_num, TRUE); +#else pfile_get_save_path(SrcStr, sizeof(SrcStr), save_num); +#endif if (SFileOpenArchive(SrcStr, 0x7000, FS_PC, &archive)) return archive; return NULL; @@ -405,7 +441,11 @@ BOOL __stdcall pfile_ui_set_hero_infos(BOOL(__stdcall *ui_add_hero_info)(_uihero continue; if (!SRegLoadString("Diablo\\Converted", s, 0, NewFileName, sizeof(NewFileName))) { while (save_num < MAX_CHARACTERS) { +#ifdef HELLFIRE + pfile_get_save_path(NewFileName, sizeof(NewFileName), save_num++, TRUE); +#else pfile_get_save_path(NewFileName, sizeof(NewFileName), save_num++); +#endif if (OpenFile(NewFileName, &ReOpenBuff, OF_EXIST) == HFILE_ERROR) { if (CopyFile(FileName, NewFileName, TRUE)) { DWORD attrib; @@ -544,7 +584,11 @@ BOOL __stdcall pfile_delete_save(_uiheroinfo *hero_info) save_num = pfile_get_save_num_from_name(hero_info->name); if (save_num < MAX_CHARACTERS) { hero_names[save_num][0] = '\0'; +#ifdef HELLFIRE + pfile_get_save_path(FileName, sizeof(FileName), save_num, TRUE); +#else pfile_get_save_path(FileName, sizeof(FileName), save_num); +#endif DeleteFile(FileName); } return TRUE;