Browse Source

GM_Game+others (#458)

pull/25/head
galaxyhaxz 8 years ago committed by GitHub
parent
commit
b3fdda7c18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 222
      Source/diablo.cpp
  2. 8
      Source/diablo.h
  3. 2
      Source/nthread.cpp
  4. 2
      Source/nthread.h
  5. 1
      enums.h

222
Source/diablo.cpp

@ -9,7 +9,7 @@ int glMid2Seed[NUMLEVELS];
int gnLevelTypeTbl[NUMLEVELS]; int gnLevelTypeTbl[NUMLEVELS];
int MouseY; // idb int MouseY; // idb
int MouseX; // idb int MouseX; // idb
bool gbGameLoopStartup; // idb BOOL gbGameLoopStartup; // idb
int glSeedTbl[NUMLEVELS]; int glSeedTbl[NUMLEVELS];
BOOL gbRunGame; BOOL gbRunGame;
int glMid3Seed[NUMLEVELS]; int glMid3Seed[NUMLEVELS];
@ -78,28 +78,26 @@ struct diablo_cpp_init {
void __cdecl FreeGameMem() void __cdecl FreeGameMem()
{ {
void *v0; // ecx void *p;
void *v1; // ecx
void *v2; // ecx
void *v3; // ecx
void *v4; // ecx
music_stop(); music_stop();
v0 = pDungeonCels;
pDungeonCels = 0; p = pDungeonCels; /* todo: macro */
mem_free_dbg(v0); pDungeonCels = NULL;
v1 = pMegaTiles; mem_free_dbg(p);
pMegaTiles = 0; p = pMegaTiles;
mem_free_dbg(v1); pMegaTiles = NULL;
v2 = pLevelPieces; mem_free_dbg(p);
pLevelPieces = 0; p = pLevelPieces;
mem_free_dbg(v2); pLevelPieces = NULL;
v3 = level_special_cel; mem_free_dbg(p);
level_special_cel = 0; p = level_special_cel;
mem_free_dbg(v3); level_special_cel = NULL;
v4 = pSpeedCels; mem_free_dbg(p);
pSpeedCels = 0; p = pSpeedCels;
mem_free_dbg(v4); pSpeedCels = NULL;
mem_free_dbg(p);
FreeMissiles(); FreeMissiles();
FreeMonsters(); FreeMonsters();
FreeObjectGFX(); FreeObjectGFX();
@ -445,10 +443,8 @@ void __fastcall diablo_parse_flags(char *args)
void __cdecl diablo_init_screen() void __cdecl diablo_init_screen()
{ {
int v0; // ecx int i;
int *v1; // eax
v0 = 0;
MouseX = 320; MouseX = 320;
MouseY = 240; MouseY = 240;
ScrollInfo._sdx = 0; ScrollInfo._sdx = 0;
@ -456,15 +452,12 @@ void __cdecl diablo_init_screen()
ScrollInfo._sxoff = 0; ScrollInfo._sxoff = 0;
ScrollInfo._syoff = 0; ScrollInfo._syoff = 0;
ScrollInfo._sdir = 0; ScrollInfo._sdir = 0;
v1 = screen_y_times_768;
do { for(i = 0; i < 1024; i++)
*v1 = v0; screen_y_times_768[i] = i * 768;
++v1;
v0 += 768;
} while ((signed int)v1 < (signed int)&screen_y_times_768[1024]);
ClrDiabloMsg(); ClrDiabloMsg();
} }
// 69CEFC: using guessed type int scrollrt_cpp_init_value;
BOOL __fastcall diablo_find_window(LPCSTR lpClassName) BOOL __fastcall diablo_find_window(LPCSTR lpClassName)
{ {
@ -660,75 +653,10 @@ LRESULT CALLBACK DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
} }
// 525748: using guessed type char sgbMouseDown; // 525748: using guessed type char sgbMouseDown;
LRESULT __stdcall GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
if (uMsg > WM_LBUTTONDOWN) { switch(uMsg) {
if (uMsg == WM_LBUTTONUP) { case WM_KEYDOWN:
MouseX = (unsigned short)lParam;
MouseY = (unsigned int)lParam >> 16;
if (sgbMouseDown != 1)
return 0;
sgbMouseDown = 0;
LeftMouseUp();
track_repeat_walk(0);
} else {
if (uMsg == WM_RBUTTONDOWN) {
MouseX = (unsigned short)lParam;
MouseY = (unsigned int)lParam >> 16;
if (!sgbMouseDown) {
sgbMouseDown = 2;
SetCapture(hWnd);
RightMouseDown();
}
return 0;
}
if (uMsg != WM_RBUTTONUP) {
if (uMsg == WM_CAPTURECHANGED) {
if (hWnd != (HWND)lParam) {
sgbMouseDown = 0;
track_repeat_walk(0);
}
} else if (uMsg > WM_DIAB && uMsg <= WM_DIABRETOWN) {
if ((unsigned char)gbMaxPlayers > 1u)
pfile_write_hero();
nthread_ignore_mutex(1);
PaletteFadeOut(8);
FreeMonsterSnd();
music_stop();
track_repeat_walk(0);
sgbMouseDown = 0;
ReleaseCapture();
ShowProgress(uMsg);
drawpanflag = 255;
DrawAndBlit();
if (gbRunGame)
PaletteFadeIn(8);
nthread_ignore_mutex(0);
gbGameLoopStartup = 1;
return 0;
}
return MainWndProc(hWnd, uMsg, wParam, lParam);
}
MouseX = (unsigned short)lParam;
MouseY = (unsigned int)lParam >> 16;
if (sgbMouseDown != 2)
return 0;
sgbMouseDown = 0;
}
ReleaseCapture();
return 0;
}
switch (uMsg) {
case WM_LBUTTONDOWN:
MouseX = (unsigned short)lParam;
MouseY = (unsigned int)lParam >> 16;
if (!sgbMouseDown) {
sgbMouseDown = 1;
SetCapture(hWnd);
track_repeat_walk(LeftMouseDown(wParam));
}
return 0;
case WM_KEYFIRST:
PressKey(wParam); PressKey(wParam);
return 0; return 0;
case WM_KEYUP: case WM_KEYUP:
@ -738,29 +666,97 @@ LRESULT __stdcall GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
PressChar(wParam); PressChar(wParam);
return 0; return 0;
case WM_SYSKEYDOWN: case WM_SYSKEYDOWN:
if (PressSysKey(wParam)) if(PressSysKey(wParam))
return 0; return 0;
return MainWndProc(hWnd, uMsg, wParam, lParam); break;
case WM_SYSCOMMAND: case WM_SYSCOMMAND:
if (wParam == SC_CLOSE) { if(wParam == SC_CLOSE) {
gbRunGame = FALSE; gbRunGame = FALSE;
gbRunGameResult = FALSE; gbRunGameResult = FALSE;
return 0; return 0;
} }
return MainWndProc(hWnd, uMsg, wParam, lParam); break;
case WM_MOUSEMOVE:
MouseX = LOWORD(lParam);
MouseY = HIWORD(lParam);
gmenu_on_mouse_move(LOWORD(lParam));
return 0;
case WM_LBUTTONDOWN:
MouseX = LOWORD(lParam);
MouseY = HIWORD(lParam);
if(sgbMouseDown == 0) {
sgbMouseDown = 1;
SetCapture(hWnd);
track_repeat_walk(LeftMouseDown(wParam));
}
return 0;
case WM_LBUTTONUP:
MouseX = LOWORD(lParam);
MouseY = HIWORD(lParam);
if(sgbMouseDown == 1) {
sgbMouseDown = 0;
LeftMouseUp();
track_repeat_walk(FALSE);
ReleaseCapture();
}
return 0;
case WM_RBUTTONDOWN:
MouseX = LOWORD(lParam);
MouseY = HIWORD(lParam);
if(sgbMouseDown == 0) {
sgbMouseDown = 2;
SetCapture(hWnd);
RightMouseDown();
}
return 0;
case WM_RBUTTONUP:
MouseX = LOWORD(lParam);
MouseY = HIWORD(lParam);
if(sgbMouseDown == 2) {
sgbMouseDown = 0;
ReleaseCapture();
}
return 0;
case WM_CAPTURECHANGED:
if(hWnd != (HWND)lParam) {
sgbMouseDown = 0;
track_repeat_walk(FALSE);
}
break;
case WM_DIABNEXTLVL:
case WM_DIABPREVLVL:
case WM_DIABRTNLVL:
case WM_DIABSETLVL:
case WM_DIABWARPLVL:
case WM_DIABTOWNWARP:
case WM_DIABTWARPUP:
case WM_DIABRETOWN:
if(gbMaxPlayers > 1)
pfile_write_hero();
nthread_ignore_mutex(TRUE);
PaletteFadeOut(8);
FreeMonsterSnd();
music_stop();
track_repeat_walk(FALSE);
sgbMouseDown = 0;
ReleaseCapture();
ShowProgress(uMsg);
drawpanflag = 255;
DrawAndBlit();
if(gbRunGame)
PaletteFadeIn(8);
nthread_ignore_mutex(FALSE);
gbGameLoopStartup = TRUE;
return 0;
} }
if (uMsg != WM_MOUSEFIRST)
return MainWndProc(hWnd, uMsg, wParam, lParam); return MainWndProc(hWnd, uMsg, wParam, lParam);
MouseX = (unsigned short)lParam;
MouseY = (unsigned int)lParam >> 16;
gmenu_on_mouse_move((unsigned short)lParam);
return 0;
} }
// 52571C: using guessed type int drawpanflag; // 52571C: using guessed type int drawpanflag;
// 525748: using guessed type char sgbMouseDown; // 525748: using guessed type char sgbMouseDown;
// 679660: using guessed type char gbMaxPlayers; // 679660: using guessed type char gbMaxPlayers;
bool __fastcall LeftMouseDown(int a1) BOOL __fastcall LeftMouseDown(int a1)
{ {
int v1; // edi int v1; // edi
int v3; // eax int v3; // eax
@ -1050,12 +1046,12 @@ void __cdecl RightMouseDown()
// 52575C: using guessed type int doomflag; // 52575C: using guessed type int doomflag;
// 6AA705: using guessed type char stextflag; // 6AA705: using guessed type char stextflag;
bool __fastcall PressSysKey(int wParam) BOOL __fastcall PressSysKey(int wParam)
{ {
if (gmenu_exception() || wParam != VK_F10) if (gmenu_exception() || wParam != VK_F10)
return 0; return FALSE;
diablo_hotkey_msg(1); diablo_hotkey_msg(1);
return 1; return TRUE;
} }
void __fastcall diablo_hotkey_msg(int dwMsg) void __fastcall diablo_hotkey_msg(int dwMsg)

8
Source/diablo.h

@ -9,7 +9,7 @@ extern int glMid2Seed[NUMLEVELS];
extern int gnLevelTypeTbl[NUMLEVELS]; extern int gnLevelTypeTbl[NUMLEVELS];
extern int MouseY; // idb extern int MouseY; // idb
extern int MouseX; // idb extern int MouseX; // idb
extern bool gbGameLoopStartup; // idb extern BOOL gbGameLoopStartup; // idb
extern int glSeedTbl[NUMLEVELS]; extern int glSeedTbl[NUMLEVELS];
extern BOOL gbRunGame; extern BOOL gbRunGame;
extern int glMid3Seed[NUMLEVELS]; extern int glMid3Seed[NUMLEVELS];
@ -49,13 +49,13 @@ BOOL __fastcall diablo_find_window(LPCSTR lpClassName);
void __fastcall diablo_reload_process(HMODULE hModule); void __fastcall diablo_reload_process(HMODULE hModule);
int __cdecl PressEscKey(); int __cdecl PressEscKey();
LRESULT CALLBACK DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT __stdcall GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
bool __fastcall LeftMouseDown(int a1); BOOL __fastcall LeftMouseDown(int a1);
bool __cdecl TryIconCurs(); bool __cdecl TryIconCurs();
void __cdecl LeftMouseUp(); void __cdecl LeftMouseUp();
void __cdecl RightMouseDown(); void __cdecl RightMouseDown();
void __fastcall j_gmenu_on_mouse_move(LPARAM lParam); void __fastcall j_gmenu_on_mouse_move(LPARAM lParam);
bool __fastcall PressSysKey(int wParam); BOOL __fastcall PressSysKey(int wParam);
void __fastcall diablo_hotkey_msg(int dwMsg); void __fastcall diablo_hotkey_msg(int dwMsg);
void __fastcall ReleaseKey(int vkey); void __fastcall ReleaseKey(int vkey);
void __fastcall PressKey(int vkey); void __fastcall PressKey(int vkey);

2
Source/nthread.cpp

@ -276,7 +276,7 @@ void __cdecl nthread_cleanup()
// 67975C: using guessed type int gdwLargestMsgSize; // 67975C: using guessed type int gdwLargestMsgSize;
// 679760: using guessed type int gdwNormalMsgSize; // 679760: using guessed type int gdwNormalMsgSize;
void __fastcall nthread_ignore_mutex(bool bStart) void __fastcall nthread_ignore_mutex(BOOL bStart)
{ {
if (sghThread != (HANDLE)-1) { if (sghThread != (HANDLE)-1) {
if (bStart) if (bStart)

2
Source/nthread.h

@ -29,7 +29,7 @@ void __cdecl nthread_set_turn_upper_bit();
void __fastcall nthread_start(bool set_turn_upper_bit); void __fastcall nthread_start(bool set_turn_upper_bit);
unsigned int __stdcall nthread_handler(void *a1); unsigned int __stdcall nthread_handler(void *a1);
void __cdecl nthread_cleanup(); void __cdecl nthread_cleanup();
void __fastcall nthread_ignore_mutex(bool bStart); void __fastcall nthread_ignore_mutex(BOOL bStart);
BOOL __cdecl nthread_has_500ms_passed(); BOOL __cdecl nthread_has_500ms_passed();
/* rdata */ /* rdata */

1
enums.h

@ -2039,7 +2039,6 @@ enum _scroll_direction {
}; };
enum interface_mode { enum interface_mode {
WM_DIAB = 0x401,
WM_DIABNEXTLVL = 0x402, // WM_USER+2 WM_DIABNEXTLVL = 0x402, // WM_USER+2
WM_DIABPREVLVL = 0x403, WM_DIABPREVLVL = 0x403,
WM_DIABRTNLVL = 0x404, WM_DIABRTNLVL = 0x404,

Loading…
Cancel
Save