Devilution
Diablo devolved - magic behind the 1996 computer game
init.cpp
Go to the documentation of this file.
1 
6 #include "all.h"
7 
8 #include "../3rdParty/Storm/Source/storm.h"
9 #include "../DiabloUI/diabloui.h"
10 #include <SDL.h>
11 #include <config.h>
12 
14 
17 char diablo_exe_path[MAX_PATH];
18 HANDLE hellfire_mpq;
19 char patch_rt_mpq_path[MAX_PATH];
20 WNDPROC CurrentProc;
21 HANDLE diabdat_mpq = NULL;
22 char diabdat_mpq_path[MAX_PATH];
23 HANDLE patch_rt_mpq;
24 
25 /* data */
26 
27 char gszVersionNumber[MAX_PATH] = "internal version unknown";
28 char gszProductName[MAX_PATH] = "Diablo v1.09";
29 
31 {
32  pfile_flush_W();
33 
34  if (diabdat_mpq) {
35  SFileCloseArchive(diabdat_mpq);
36  diabdat_mpq = NULL;
37  }
38  if (patch_rt_mpq) {
39  SFileCloseArchive(patch_rt_mpq);
40  patch_rt_mpq = NULL;
41  }
42  if (hellfire_mpq) {
43  SFileCloseArchive(hellfire_mpq);
44  hellfire_mpq = NULL;
45  }
46 
47  NetClose();
48 }
49 
51 {
52  if (!SpawnWindow(PROJECT_NAME, SCREEN_WIDTH, SCREEN_HEIGHT))
53  app_fatal("Unable to create main window");
54  dx_init(NULL);
55  was_window_init = true;
56  gbActive = true;
58  gpBufEnd = (BYTE *)(BUFFER_WIDTH * (SCREEN_HEIGHT + SCREEN_Y));
59  SDL_DisableScreenSaver();
60 }
61 
63 {
64  HANDLE fh;
65  memset(&fileinfo, 0, sizeof(fileinfo));
66  fileinfo.size = sizeof(fileinfo);
72 #ifdef SPAWN
73  diabdat_mpq = init_test_access(diabdat_mpq_path, "spawn.mpq", "DiabloSpawn", 1000, FS_PC);
74 #else
75  diabdat_mpq = init_test_access(diabdat_mpq_path, "diabdat.mpq", "DiabloCD", 1000, FS_CD);
76 #endif
77  if (!SFileOpenFile("ui_art\\title.pcx", &fh))
78 #ifdef SPAWN
79  InsertCDDlg("spawn.mpq");
80 #else
81  InsertCDDlg("diabdat.mpq");
82 #endif
83  SFileCloseFile(fh);
84 #ifdef SPAWN
85  patch_rt_mpq = init_test_access(patch_rt_mpq_path, "patch_sh.mpq", "DiabloSpawn", 2000, FS_PC);
86 #else
87  patch_rt_mpq = init_test_access(patch_rt_mpq_path, "patch_rt.mpq", "DiabloInstall", 2000, FS_PC);
88 #endif
89 }
90 
91 HANDLE init_test_access(char *mpq_path, char *mpq_name, char *reg_loc, int dwPriority, int fs)
92 {
93  char Buffer[2][MAX_PATH];
94  char *sdlPath;
95  HANDLE archive;
96 
97  GetBasePath(Buffer[0], MAX_PATH);
98  GetPrefPath(Buffer[1], MAX_PATH);
99 
100  for (int i = 0; i < 2; i++) {
101  snprintf(mpq_path, MAX_PATH, "%s%s", Buffer[i], mpq_name);
102 #if !defined(__SWITCH__) && !defined(__AMIGA__)
103  if (SFileOpenArchive(mpq_path, dwPriority, MPQ_FLAG_READ_ONLY, &archive)) {
104 #else
105  if (SFileOpenArchive(mpq_path, dwPriority, 0, &archive)) {
106 #endif
107  SFileSetBasePath(Buffer[i]);
108  return archive;
109 
110  }
111  }
112 
113  return NULL;
114 }
115 
117 {
118  snprintf(gszProductName, MAX_PATH, "%s v%s", PROJECT_NAME, PROJECT_VERSION);
119  snprintf(gszVersionNumber, MAX_PATH, "version %s", PROJECT_VERSION);
120 }
121 
122 LRESULT MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
123 {
124  switch (Msg) {
125  case WM_ERASEBKGND:
126  return 0;
127  case WM_PAINT:
128  force_redraw = 255;
129  break;
130  case WM_CLOSE:
131  return 0;
132  case WM_QUERYNEWPALETTE:
133  return 1;
134  case WM_QUERYENDSESSION:
135  diablo_quit(0);
136  }
137 
138  return 0;
139 }
140 
141 WNDPROC SetWindowProc(WNDPROC NewProc)
142 {
143  WNDPROC OldProc;
144 
145  OldProc = CurrentProc;
146  CurrentProc = NewProc;
147  return OldProc;
148 }
149 
_SNETVERSIONDATA::originalarchivefile
char * originalarchivefile
Definition: structs.h:1318
gpBuffer
BYTE * gpBuffer
was_window_init
BOOL was_window_init
force_redraw
int force_redraw
Definition: diablo.cpp:30
_SNETVERSIONDATA
Definition: structs.h:1314
SCREEN_Y
#define SCREEN_Y
Definition: defs.h:126
SetWindowProc
WNDPROC SetWindowProc(WNDPROC NewProc)
Definition: init.cpp:141
InsertCDDlg
void InsertCDDlg(const char *fileName)
Definition: appfat.cpp:113
dx_init
void dx_init(HWND hWnd)
gbActive
int gbActive
Definition: init.cpp:16
init_get_file_info
void init_get_file_info()
Definition: init.cpp:116
_SNETVERSIONDATA::size
int size
Definition: structs.h:1315
_SNETVERSIONDATA::executablefile
char * executablefile
Definition: structs.h:1317
all.h
patch_rt_mpq
HANDLE patch_rt_mpq
Definition: init.cpp:23
SCREEN_WIDTH
#define SCREEN_WIDTH
Definition: defs.h:105
gpBufStart
BYTE * gpBufStart
Upper bound of back buffer.
Definition: scrollrt.cpp:15
gszVersionNumber
char gszVersionNumber[MAX_PATH]
defined in dx.cpp
Definition: init.cpp:27
patch_rt_mpq_path
char patch_rt_mpq_path[MAX_PATH]
Definition: init.cpp:19
app_fatal
void app_fatal(const char *pszFmt,...)
Definition: appfat.cpp:18
DEVILUTION_END_NAMESPACE
#define DEVILUTION_END_NAMESPACE
Definition: types.h:10
_SNETVERSIONDATA::patcharchivefile
char * patcharchivefile
Definition: structs.h:1319
gszProductName
char gszProductName[MAX_PATH]
Definition: init.cpp:28
diabdat_mpq_path
char diabdat_mpq_path[MAX_PATH]
Definition: init.cpp:22
init_archives
void init_archives()
Definition: init.cpp:62
gpBufEnd
BYTE * gpBufEnd
Lower bound of back buffer.
Definition: scrollrt.cpp:19
pfile_flush_W
void pfile_flush_W()
Definition: pfile.cpp:151
hellfire_mpq
HANDLE hellfire_mpq
Definition: init.cpp:18
FS_CD
@ FS_CD
Definition: enums.h:1359
diabdat_mpq
HANDLE diabdat_mpq
Definition: init.cpp:21
diablo_quit
void diablo_quit(int exitStatus)
Definition: diablo.cpp:333
fileinfo
DEVILUTION_BEGIN_NAMESPACE _SNETVERSIONDATA fileinfo
Definition: init.cpp:15
NetClose
void NetClose()
Definition: multi.cpp:568
BUFFER_WIDTH
#define BUFFER_WIDTH
Definition: defs.h:128
FS_PC
@ FS_PC
Definition: enums.h:1358
DEVILUTION_BEGIN_NAMESPACE
Definition: sha.cpp:10
diablo_exe_path
char diablo_exe_path[MAX_PATH]
Definition: init.cpp:17
init_cleanup
void init_cleanup()
Definition: init.cpp:30
MainWndProc
LRESULT MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: init.cpp:122
_SNETVERSIONDATA::versionstring
char * versionstring
Definition: structs.h:1316
CurrentProc
WNDPROC CurrentProc
Definition: init.cpp:20
init_test_access
HANDLE init_test_access(char *mpq_path, char *mpq_name, char *reg_loc, int dwPriority, int fs)
Definition: init.cpp:91
SCREEN_HEIGHT
#define SCREEN_HEIGHT
Definition: defs.h:106
init_create_window
void init_create_window()
Definition: init.cpp:50