Browse Source

Load langauge specific mpq files

pull/3191/head
Anders Jenbo 4 years ago
parent
commit
508cfabcdb
  1. 38
      Source/init.cpp
  2. 5
      Source/init.h
  3. 15
      Source/storm/storm.cpp

38
Source/init.cpp

@ -14,6 +14,7 @@
#include "DiabloUI/diabloui.h" #include "DiabloUI/diabloui.h"
#include "dx.h" #include "dx.h"
#include "options.h"
#include "pfile.h" #include "pfile.h"
#include "storm/storm.h" #include "storm/storm.h"
#include "storm/storm_sdl_rw.h" #include "storm/storm_sdl_rw.h"
@ -39,8 +40,6 @@ WNDPROC CurrentProc;
HANDLE spawn_mpq; HANDLE spawn_mpq;
/** A handle to the diabdat.mpq archive. */ /** A handle to the diabdat.mpq archive. */
HANDLE diabdat_mpq; HANDLE diabdat_mpq;
/** A handle to the patch_rt.mpq archive. */
HANDLE patch_rt_mpq;
/** Indicate if we only have access to demo data */ /** Indicate if we only have access to demo data */
bool gbIsSpawn; bool gbIsSpawn;
/** Indicate if we have loaded the Hellfire expansion data */ /** Indicate if we have loaded the Hellfire expansion data */
@ -52,9 +51,9 @@ HANDLE hfbard_mpq;
HANDLE hfbarb_mpq; HANDLE hfbarb_mpq;
HANDLE hfmusic_mpq; HANDLE hfmusic_mpq;
HANDLE hfvoice_mpq; HANDLE hfvoice_mpq;
HANDLE hfopt1_mpq;
HANDLE hfopt2_mpq;
HANDLE devilutionx_mpq; HANDLE devilutionx_mpq;
HANDLE lang_mpq;
HANDLE font_mpq;
namespace { namespace {
@ -96,10 +95,6 @@ void init_cleanup()
SFileCloseArchive(diabdat_mpq); SFileCloseArchive(diabdat_mpq);
diabdat_mpq = nullptr; diabdat_mpq = nullptr;
} }
if (patch_rt_mpq != nullptr) {
SFileCloseArchive(patch_rt_mpq);
patch_rt_mpq = nullptr;
}
if (hellfire_mpq != nullptr) { if (hellfire_mpq != nullptr) {
SFileCloseArchive(hellfire_mpq); SFileCloseArchive(hellfire_mpq);
hellfire_mpq = nullptr; hellfire_mpq = nullptr;
@ -124,13 +119,13 @@ void init_cleanup()
SFileCloseArchive(hfvoice_mpq); SFileCloseArchive(hfvoice_mpq);
hfvoice_mpq = nullptr; hfvoice_mpq = nullptr;
} }
if (hfopt1_mpq != nullptr) { if (lang_mpq != nullptr) {
SFileCloseArchive(hfopt1_mpq); SFileCloseArchive(lang_mpq);
hfopt1_mpq = nullptr; lang_mpq = nullptr;
} }
if (hfopt2_mpq != nullptr) { if (font_mpq != nullptr) {
SFileCloseArchive(hfopt2_mpq); SFileCloseArchive(font_mpq);
hfopt2_mpq = nullptr; font_mpq = nullptr;
} }
if (devilutionx_mpq != nullptr) { if (devilutionx_mpq != nullptr) {
SFileCloseArchive(devilutionx_mpq); SFileCloseArchive(devilutionx_mpq);
@ -178,6 +173,15 @@ void init_archives()
// Load devilutionx.mpq first to get the font file for error messages // Load devilutionx.mpq first to get the font file for error messages
devilutionx_mpq = LoadMPQ(paths, "devilutionx.mpq"); 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"); diabdat_mpq = LoadMPQ(paths, "DIABDAT.MPQ");
if (diabdat_mpq == nullptr) { if (diabdat_mpq == nullptr) {
@ -195,10 +199,6 @@ void init_archives()
InsertCDDlg(); InsertCDDlg();
SDL_RWclose(handle); 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"); hellfire_mpq = LoadMPQ(paths, "hellfire.mpq");
if (hellfire_mpq != nullptr) if (hellfire_mpq != nullptr)
gbIsHellfire = true; gbIsHellfire = true;
@ -211,8 +211,6 @@ void init_archives()
gbBarbarian = true; gbBarbarian = true;
hfmusic_mpq = LoadMPQ(paths, "hfmusic.mpq"); hfmusic_mpq = LoadMPQ(paths, "hfmusic.mpq");
hfvoice_mpq = LoadMPQ(paths, "hfvoice.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)) { 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.")); UiErrorOkDialog(_("Some Hellfire MPQs are missing"), _("Not all Hellfire MPQs were found.\nPlease copy all the hf*.mpq files."));

5
Source/init.h

@ -17,14 +17,13 @@ extern HANDLE diabdat_mpq;
extern bool gbIsSpawn; extern bool gbIsSpawn;
extern bool gbIsHellfire; extern bool gbIsHellfire;
extern bool gbVanilla; extern bool gbVanilla;
extern HANDLE patch_rt_mpq;
extern HANDLE hfmonk_mpq; extern HANDLE hfmonk_mpq;
extern HANDLE hfbard_mpq; extern HANDLE hfbard_mpq;
extern HANDLE hfbarb_mpq; extern HANDLE hfbarb_mpq;
extern HANDLE hfmusic_mpq; extern HANDLE hfmusic_mpq;
extern HANDLE hfvoice_mpq; extern HANDLE hfvoice_mpq;
extern HANDLE hfopt1_mpq; extern HANDLE font_mpq;
extern HANDLE hfopt2_mpq; extern HANDLE lang_mpq;
extern HANDLE devilutionx_mpq; extern HANDLE devilutionx_mpq;
void init_cleanup(); void init_cleanup();

15
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); 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) { if (!result && devilutionx_mpq != nullptr) {
result = SFileOpenFileEx((HANDLE)devilutionx_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); result = SFileOpenFileEx((HANDLE)devilutionx_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile);
} }
if (gbIsHellfire) { 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) { if (!result && hfvoice_mpq != nullptr) {
result = SFileOpenFileEx((HANDLE)hfvoice_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); 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); 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) { if (!result && spawn_mpq != nullptr) {
result = SFileOpenFileEx((HANDLE)spawn_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile); result = SFileOpenFileEx((HANDLE)spawn_mpq, filename, SFILE_OPEN_FROM_MPQ, phFile);
} }

Loading…
Cancel
Save