From 508cfabcdbb4df72c735d95f602bbc9622f47b58 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 21 Oct 2021 03:07:35 +0200 Subject: [PATCH] Load langauge specific mpq files --- Source/init.cpp | 38 ++++++++++++++++++-------------------- Source/init.h | 5 ++--- Source/storm/storm.cpp | 15 ++++++--------- 3 files changed, 26 insertions(+), 32 deletions(-) diff --git a/Source/init.cpp b/Source/init.cpp index 25953bc7a..c2c5dd006 100644 --- a/Source/init.cpp +++ b/Source/init.cpp @@ -14,6 +14,7 @@ #include "DiabloUI/diabloui.h" #include "dx.h" +#include "options.h" #include "pfile.h" #include "storm/storm.h" #include "storm/storm_sdl_rw.h" @@ -39,8 +40,6 @@ WNDPROC CurrentProc; HANDLE spawn_mpq; /** A handle to the diabdat.mpq archive. */ HANDLE diabdat_mpq; -/** A handle to the patch_rt.mpq archive. */ -HANDLE patch_rt_mpq; /** Indicate if we only have access to demo data */ bool gbIsSpawn; /** Indicate if we have loaded the Hellfire expansion data */ @@ -52,9 +51,9 @@ HANDLE hfbard_mpq; HANDLE hfbarb_mpq; HANDLE hfmusic_mpq; HANDLE hfvoice_mpq; -HANDLE hfopt1_mpq; -HANDLE hfopt2_mpq; HANDLE devilutionx_mpq; +HANDLE lang_mpq; +HANDLE font_mpq; namespace { @@ -96,10 +95,6 @@ void init_cleanup() SFileCloseArchive(diabdat_mpq); diabdat_mpq = nullptr; } - if (patch_rt_mpq != nullptr) { - SFileCloseArchive(patch_rt_mpq); - patch_rt_mpq = nullptr; - } if (hellfire_mpq != nullptr) { SFileCloseArchive(hellfire_mpq); hellfire_mpq = nullptr; @@ -124,13 +119,13 @@ void init_cleanup() SFileCloseArchive(hfvoice_mpq); hfvoice_mpq = nullptr; } - if (hfopt1_mpq != nullptr) { - SFileCloseArchive(hfopt1_mpq); - hfopt1_mpq = nullptr; + if (lang_mpq != nullptr) { + SFileCloseArchive(lang_mpq); + lang_mpq = nullptr; } - if (hfopt2_mpq != nullptr) { - SFileCloseArchive(hfopt2_mpq); - hfopt2_mpq = nullptr; + if (font_mpq != nullptr) { + SFileCloseArchive(font_mpq); + font_mpq = nullptr; } if (devilutionx_mpq != nullptr) { SFileCloseArchive(devilutionx_mpq); @@ -178,6 +173,15 @@ void init_archives() // Load devilutionx.mpq first to get the font file for error messages devilutionx_mpq = LoadMPQ(paths, "devilutionx.mpq"); + font_mpq = LoadMPQ(paths, "font.mpq"); // Extra fonts + + if (strcasecmp("en", sgOptions.Language.szCode) != 0 || strlen(sgOptions.Language.szCode) != 2) { + char langMpqName[9] = {}; + strncpy(langMpqName, sgOptions.Language.szCode, sizeof(langMpqName) - strlen(langMpqName) - 1); + + strncat(langMpqName, ".mpq", sizeof(langMpqName) - strlen(langMpqName) - 1); + lang_mpq = LoadMPQ(paths, langMpqName); + } diabdat_mpq = LoadMPQ(paths, "DIABDAT.MPQ"); if (diabdat_mpq == nullptr) { @@ -195,10 +199,6 @@ void init_archives() InsertCDDlg(); SDL_RWclose(handle); - patch_rt_mpq = LoadMPQ(paths, "patch_rt.mpq"); - if (patch_rt_mpq == nullptr) - patch_rt_mpq = LoadMPQ(paths, "patch_sh.mpq"); - hellfire_mpq = LoadMPQ(paths, "hellfire.mpq"); if (hellfire_mpq != nullptr) gbIsHellfire = true; @@ -211,8 +211,6 @@ void init_archives() gbBarbarian = true; hfmusic_mpq = LoadMPQ(paths, "hfmusic.mpq"); hfvoice_mpq = LoadMPQ(paths, "hfvoice.mpq"); - hfopt1_mpq = LoadMPQ(paths, "hfopt1.mpq"); - hfopt2_mpq = LoadMPQ(paths, "hfopt2.mpq"); if (gbIsHellfire && (hfmonk_mpq == nullptr || hfmusic_mpq == nullptr || hfvoice_mpq == nullptr)) { UiErrorOkDialog(_("Some Hellfire MPQs are missing"), _("Not all Hellfire MPQs were found.\nPlease copy all the hf*.mpq files.")); diff --git a/Source/init.h b/Source/init.h index 58b3fa253..cb600a654 100644 --- a/Source/init.h +++ b/Source/init.h @@ -17,14 +17,13 @@ extern HANDLE diabdat_mpq; extern bool gbIsSpawn; extern bool gbIsHellfire; extern bool gbVanilla; -extern HANDLE patch_rt_mpq; extern HANDLE hfmonk_mpq; extern HANDLE hfbard_mpq; extern HANDLE hfbarb_mpq; extern HANDLE hfmusic_mpq; extern HANDLE hfvoice_mpq; -extern HANDLE hfopt1_mpq; -extern HANDLE hfopt2_mpq; +extern HANDLE font_mpq; +extern HANDLE lang_mpq; extern HANDLE devilutionx_mpq; void init_cleanup(); diff --git a/Source/storm/storm.cpp b/Source/storm/storm.cpp index e169f98f7..4d559682d 100644 --- a/Source/storm/storm.cpp +++ b/Source/storm/storm.cpp @@ -90,16 +90,16 @@ bool SFileOpenFile(const char *filename, HANDLE *phFile) result = SFileOpenFileEx((HANDLE) nullptr, path.c_str(), SFILE_OPEN_LOCAL_FILE, phFile); } + if (!result && font_mpq != nullptr) { + result = SFileOpenFileEx((HANDLE)font_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); + } + if (!result && lang_mpq != nullptr) { + result = SFileOpenFileEx((HANDLE)lang_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); + } if (!result && devilutionx_mpq != nullptr) { result = SFileOpenFileEx((HANDLE)devilutionx_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); } if (gbIsHellfire) { - if (!result && hfopt2_mpq != nullptr) { - result = SFileOpenFileEx((HANDLE)hfopt2_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); - } - if (!result && hfopt1_mpq != nullptr) { - result = SFileOpenFileEx((HANDLE)hfopt1_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); - } if (!result && hfvoice_mpq != nullptr) { result = SFileOpenFileEx((HANDLE)hfvoice_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); } @@ -119,9 +119,6 @@ bool SFileOpenFile(const char *filename, HANDLE *phFile) result = SFileOpenFileEx((HANDLE)hellfire_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); } } - if (!result && patch_rt_mpq != nullptr) { - result = SFileOpenFileEx((HANDLE)patch_rt_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); - } if (!result && spawn_mpq != nullptr) { result = SFileOpenFileEx((HANDLE)spawn_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); }