From b3fdda7c181a2fe4747793ab5fac018d756d9c3d Mon Sep 17 00:00:00 2001 From: galaxyhaxz Date: Sun, 11 Nov 2018 11:22:19 -0600 Subject: [PATCH] GM_Game+others (#458) --- Source/diablo.cpp | 222 ++++++++++++++++++++++----------------------- Source/diablo.h | 8 +- Source/nthread.cpp | 2 +- Source/nthread.h | 2 +- enums.h | 1 - 5 files changed, 115 insertions(+), 120 deletions(-) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 8e808d662..9f248b3e4 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -9,7 +9,7 @@ int glMid2Seed[NUMLEVELS]; int gnLevelTypeTbl[NUMLEVELS]; int MouseY; // idb int MouseX; // idb -bool gbGameLoopStartup; // idb +BOOL gbGameLoopStartup; // idb int glSeedTbl[NUMLEVELS]; BOOL gbRunGame; int glMid3Seed[NUMLEVELS]; @@ -78,28 +78,26 @@ struct diablo_cpp_init { void __cdecl FreeGameMem() { - void *v0; // ecx - void *v1; // ecx - void *v2; // ecx - void *v3; // ecx - void *v4; // ecx + void *p; music_stop(); - v0 = pDungeonCels; - pDungeonCels = 0; - mem_free_dbg(v0); - v1 = pMegaTiles; - pMegaTiles = 0; - mem_free_dbg(v1); - v2 = pLevelPieces; - pLevelPieces = 0; - mem_free_dbg(v2); - v3 = level_special_cel; - level_special_cel = 0; - mem_free_dbg(v3); - v4 = pSpeedCels; - pSpeedCels = 0; - mem_free_dbg(v4); + + p = pDungeonCels; /* todo: macro */ + pDungeonCels = NULL; + mem_free_dbg(p); + p = pMegaTiles; + pMegaTiles = NULL; + mem_free_dbg(p); + p = pLevelPieces; + pLevelPieces = NULL; + mem_free_dbg(p); + p = level_special_cel; + level_special_cel = NULL; + mem_free_dbg(p); + p = pSpeedCels; + pSpeedCels = NULL; + mem_free_dbg(p); + FreeMissiles(); FreeMonsters(); FreeObjectGFX(); @@ -445,10 +443,8 @@ void __fastcall diablo_parse_flags(char *args) void __cdecl diablo_init_screen() { - int v0; // ecx - int *v1; // eax + int i; - v0 = 0; MouseX = 320; MouseY = 240; ScrollInfo._sdx = 0; @@ -456,15 +452,12 @@ void __cdecl diablo_init_screen() ScrollInfo._sxoff = 0; ScrollInfo._syoff = 0; ScrollInfo._sdir = 0; - v1 = screen_y_times_768; - do { - *v1 = v0; - ++v1; - v0 += 768; - } while ((signed int)v1 < (signed int)&screen_y_times_768[1024]); + + for(i = 0; i < 1024; i++) + screen_y_times_768[i] = i * 768; + ClrDiabloMsg(); } -// 69CEFC: using guessed type int scrollrt_cpp_init_value; 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; -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) { - if (uMsg == WM_LBUTTONUP) { - 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: + switch(uMsg) { + case WM_KEYDOWN: PressKey(wParam); return 0; case WM_KEYUP: @@ -738,29 +666,97 @@ LRESULT __stdcall GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PressChar(wParam); return 0; case WM_SYSKEYDOWN: - if (PressSysKey(wParam)) + if(PressSysKey(wParam)) return 0; - return MainWndProc(hWnd, uMsg, wParam, lParam); + break; case WM_SYSCOMMAND: - if (wParam == SC_CLOSE) { + if(wParam == SC_CLOSE) { gbRunGame = FALSE; gbRunGameResult = FALSE; 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); - MouseX = (unsigned short)lParam; - MouseY = (unsigned int)lParam >> 16; - gmenu_on_mouse_move((unsigned short)lParam); - return 0; + + return MainWndProc(hWnd, uMsg, wParam, lParam); } // 52571C: using guessed type int drawpanflag; // 525748: using guessed type char sgbMouseDown; // 679660: using guessed type char gbMaxPlayers; -bool __fastcall LeftMouseDown(int a1) +BOOL __fastcall LeftMouseDown(int a1) { int v1; // edi int v3; // eax @@ -1050,12 +1046,12 @@ void __cdecl RightMouseDown() // 52575C: using guessed type int doomflag; // 6AA705: using guessed type char stextflag; -bool __fastcall PressSysKey(int wParam) +BOOL __fastcall PressSysKey(int wParam) { if (gmenu_exception() || wParam != VK_F10) - return 0; + return FALSE; diablo_hotkey_msg(1); - return 1; + return TRUE; } void __fastcall diablo_hotkey_msg(int dwMsg) diff --git a/Source/diablo.h b/Source/diablo.h index 3c6c006eb..c5457d06e 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -9,7 +9,7 @@ extern int glMid2Seed[NUMLEVELS]; extern int gnLevelTypeTbl[NUMLEVELS]; extern int MouseY; // idb extern int MouseX; // idb -extern bool gbGameLoopStartup; // idb +extern BOOL gbGameLoopStartup; // idb extern int glSeedTbl[NUMLEVELS]; extern BOOL gbRunGame; extern int glMid3Seed[NUMLEVELS]; @@ -49,13 +49,13 @@ BOOL __fastcall diablo_find_window(LPCSTR lpClassName); void __fastcall diablo_reload_process(HMODULE hModule); int __cdecl PressEscKey(); LRESULT CALLBACK DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -LRESULT __stdcall GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -bool __fastcall LeftMouseDown(int a1); +LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +BOOL __fastcall LeftMouseDown(int a1); bool __cdecl TryIconCurs(); void __cdecl LeftMouseUp(); void __cdecl RightMouseDown(); 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 ReleaseKey(int vkey); void __fastcall PressKey(int vkey); diff --git a/Source/nthread.cpp b/Source/nthread.cpp index 528a1c153..6124552d9 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -276,7 +276,7 @@ void __cdecl nthread_cleanup() // 67975C: using guessed type int gdwLargestMsgSize; // 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 (bStart) diff --git a/Source/nthread.h b/Source/nthread.h index dbb81b371..50cf4eebc 100644 --- a/Source/nthread.h +++ b/Source/nthread.h @@ -29,7 +29,7 @@ void __cdecl nthread_set_turn_upper_bit(); void __fastcall nthread_start(bool set_turn_upper_bit); unsigned int __stdcall nthread_handler(void *a1); void __cdecl nthread_cleanup(); -void __fastcall nthread_ignore_mutex(bool bStart); +void __fastcall nthread_ignore_mutex(BOOL bStart); BOOL __cdecl nthread_has_500ms_passed(); /* rdata */ diff --git a/enums.h b/enums.h index 79898ee48..506f0ee0b 100644 --- a/enums.h +++ b/enums.h @@ -2039,7 +2039,6 @@ enum _scroll_direction { }; enum interface_mode { - WM_DIAB = 0x401, WM_DIABNEXTLVL = 0x402, // WM_USER+2 WM_DIABPREVLVL = 0x403, WM_DIABRTNLVL = 0x404,