#include "diablo.h" #include "../3rdParty/Storm/Source/storm.h" #include "../DiabloUI/diabloui.h" #include #include DEVILUTION_BEGIN_NAMESPACE _SNETVERSIONDATA fileinfo; int gbActive; char diablo_exe_path[MAX_PATH]; HANDLE hellfire_mpq; char patch_rt_mpq_path[MAX_PATH]; WNDPROC CurrentProc; HANDLE diabdat_mpq = NULL; char diabdat_mpq_path[MAX_PATH]; HANDLE patch_rt_mpq; /* data */ char gszVersionNumber[MAX_PATH] = "internal version unknown"; char gszProductName[MAX_PATH] = "Diablo v1.09"; void init_cleanup() { pfile_flush_W(); if (diabdat_mpq) { SFileCloseArchive(diabdat_mpq); diabdat_mpq = NULL; } if (patch_rt_mpq) { SFileCloseArchive(patch_rt_mpq); patch_rt_mpq = NULL; } if (hellfire_mpq) { SFileCloseArchive(hellfire_mpq); hellfire_mpq = NULL; } UiDestroy(); effects_cleanup_sfx(); sound_cleanup(); NetClose(); dx_cleanup(); } void init_create_window() { if (!SpawnWindow(PROJECT_NAME, SCREEN_WIDTH, SCREEN_HEIGHT)) app_fatal("Unable to create main window"); dx_init(NULL); gbActive = true; SDL_DisableScreenSaver(); } void init_archives() { HANDLE fh; memset(&fileinfo, 0, sizeof(fileinfo)); fileinfo.size = sizeof(fileinfo); fileinfo.versionstring = gszVersionNumber; fileinfo.executablefile = diablo_exe_path; fileinfo.originalarchivefile = diabdat_mpq_path; fileinfo.patcharchivefile = patch_rt_mpq_path; init_get_file_info(); #ifdef SPAWN diabdat_mpq = init_test_access(diabdat_mpq_path, "spawn.mpq", "DiabloSpawn", 1000, FS_PC); #else diabdat_mpq = init_test_access(diabdat_mpq_path, "diabdat.mpq", "DiabloCD", 1000, FS_PC); #endif if (!SFileOpenFile("ui_art\\title.pcx", &fh)) #ifdef SPAWN InsertCDDlg("spawn.mpq"); #else InsertCDDlg("diabdat.mpq"); #endif SFileCloseFile(fh); #ifdef SPAWN patch_rt_mpq = init_test_access(patch_rt_mpq_path, "patch_sh.mpq", "DiabloSpawn", 2000, FS_PC); #else patch_rt_mpq = init_test_access(patch_rt_mpq_path, "patch_rt.mpq", "DiabloInstall", 2000, FS_PC); #endif } HANDLE init_test_access(char *mpq_path, char *mpq_name, char *reg_loc, int dwPriority, int fs) { char Buffer[2][MAX_PATH]; char *sdlPath; HANDLE archive; GetBasePath(Buffer[0], MAX_PATH); GetPrefPath(Buffer[1], MAX_PATH); for (int i = 0; i < 2; i++) { snprintf(mpq_path, MAX_PATH, "%s%s", Buffer[i], mpq_name); if (SFileOpenArchive(mpq_path, dwPriority, MPQ_FLAG_READ_ONLY, &archive)) { SFileSetBasePath(Buffer[i]); return archive; } } return NULL; } void init_get_file_info() { snprintf(gszProductName, MAX_PATH, "%s v%s", PROJECT_NAME, PROJECT_VERSION); snprintf(gszVersionNumber, MAX_PATH, "version %s", PROJECT_VERSION); } LRESULT __stdcall MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_ERASEBKGND: return 0; case WM_PAINT: drawpanflag = 255; break; case WM_CLOSE: return 0; #ifdef _DEBUG case WM_SYSKEYUP: if (wParam == VK_RETURN) { fullscreen = !fullscreen; dx_reinit(); return 0; } break; #endif case WM_QUERYNEWPALETTE: return 1; } return DefWindowProc(hWnd, Msg, wParam, lParam); } WNDPROC SetWindowProc(WNDPROC NewProc) { WNDPROC OldProc; OldProc = CurrentProc; CurrentProc = NewProc; return OldProc; } DEVILUTION_END_NAMESPACE